Add make command for running the app in an HA topology (#16702)

* Add make command for running the app in an HA topology

* Tidy up conf files, remove unnecessary commands and add restart-haserver command

* Use the right flag for checking enterprise folder presence before ha setup
Этот коммит содержится в:
John Tzikas
2021-01-18 19:38:44 +02:00
коммит произвёл GitHub
родитель 95ee824c8b
Коммит 0391fe7de9
3 изменённых файлов: 117 добавлений и 1 удалений

Просмотреть файл

@@ -1,4 +1,4 @@
.PHONY: build package run stop run-client run-server stop-client stop-server restart restart-server restart-client start-docker clean-dist clean nuke check-style check-client-style check-server-style check-unit-tests test dist prepare-enteprise run-client-tests setup-run-client-tests cleanup-run-client-tests test-client build-linux build-osx build-windows internal-test-web-client vet run-server-for-web-client-tests diff-config prepackaged-plugins prepackaged-binaries test-server test-server-ee test-server-quick test-server-race start-docker-check
.PHONY: build package run stop run-client run-server run-haserver stop-client stop-server restart restart-server restart-client restart-haserver start-docker clean-dist clean nuke check-style check-client-style check-server-style check-unit-tests test dist prepare-enteprise run-client-tests setup-run-client-tests cleanup-run-client-tests test-client build-linux build-osx build-windows internal-test-web-client vet run-server-for-web-client-tests diff-config prepackaged-plugins prepackaged-binaries test-server test-server-ee test-server-quick test-server-race start-docker-check
ROOT := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
@@ -156,6 +156,13 @@ ifneq (,$(findstring openldap,$(ENABLED_DOCKER_SERVICES)))
endif
endif
run-haserver: run-client
ifeq ($(BUILD_ENTERPRISE_READY),true)
@echo Starting mattermost in an HA topology
docker-compose -f docker-compose.yaml up haproxy
endif
stop-docker: ## Stops the docker containers for local development.
ifeq ($(MM_NO_DOCKER),true)
@echo No Docker Enabled: skipping docker stop
@@ -473,6 +480,13 @@ restart: restart-server restart-client ## Restarts the server and webapp.
restart-server: | stop-server run-server ## Restarts the mattermost server to pick up development change.
restart-haserver:
@echo Restarting mattermost in an HA topology
docker-compose restart follower
docker-compose restart leader
docker-compose restart haproxy
restart-client: | stop-client run-client ## Restarts the webapp.
run-job-server: ## Runs the background job server.

35
build/docker/nginx/default.conf Обычный файл
Просмотреть файл

@@ -0,0 +1,35 @@
upstream app_cluster {
server leader:8065 fail_timeout=5s max_fails=10;
server follower:8065 fail_timeout=5s max_fails=10;
}
server {
listen 8065;
location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50M;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_pass http://app_cluster;
}
location / {
client_max_body_size 50M;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://app_cluster;
}
}

Просмотреть файл

@@ -74,6 +74,73 @@ services:
- elasticsearch
command: postgres:5432 mysql:3306 minio:9000 inbucket:10080 openldap:389 elasticsearch:9200
leader:
build:
context: .
dockerfile: ./build/Dockerfile.buildenv
working_dir: '/home/mattermost-server'
environment:
- "MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:mostest@postgres/mattermost_test?sslmode=disable\u0026connect_timeout=10"
- "MM_NO_DOCKER=true"
- "RUN_SERVER_IN_BACKGROUND=false"
networks:
- mm-test
depends_on:
- start_dependencies
volumes:
- './:/home/mattermost-server'
- './../mattermost-webapp:/home/mattermost-webapp'
- './../enterprise:/home/enterprise'
restart: on-failure
healthcheck:
test: ["CMD", "curl", "-f", "http://leader:8065/api/v4/system/ping"]
interval: 5s
timeout: 10s
retries: 30
command: ['make', 'run-server']
expose:
- "8065"
follower:
build:
context: .
dockerfile: ./build/Dockerfile.buildenv
working_dir: '/home/mattermost-server'
environment:
- "MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:mostest@postgres/mattermost_test?sslmode=disable\u0026connect_timeout=10"
- "MM_NO_DOCKER=true"
- "RUN_SERVER_IN_BACKGROUND=false"
networks:
- mm-test
depends_on:
- leader
volumes:
- './:/home/mattermost-server'
- './../mattermost-webapp:/home/mattermost-webapp'
- './../enterprise:/home/enterprise'
healthcheck:
test: ["CMD", "curl", "-f", "http://follower:8065/api/v4/system/ping"]
interval: 5s
timeout: 10s
retries: 30
command: ['make', 'run-server']
restart: on-failure
expose:
- "8065"
haproxy:
image: nginx
networks:
- mm-test
volumes:
- ./build/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
restart: on-failure
depends_on:
- leader
- follower
ports:
- "8065:8065"
networks:
mm-test:
driver: bridge