Настройка конфигов nginx при совместном испольовании с php-fpm и docker swarm
Всем привет! Хочу сделать деплой небольшого сервиса (php-fpm + nginx) с zero downtime. Решил использовать для этих целей docker swarm. Написал конфиг для docker swarm (файл docker-compose.deploy.yml)
version: '3.7'
networks:
esia:
services:
php-fpm-gost:
image: <образ из внутреннего dockerhub>
volumes:
- "../:/var/www/esia-service/"
networks:
- esia
deploy:
replicas: 2
update_config:
parallelism: 1
order: start-first
failure_action: rollback
delay: 10s
rollback_config:
parallelism: 0
order: stop-first
restart_policy:
condition: any
delay: 5s
max_attempts: 3
window: 120s
healthcheck:
test: ["CMD", "service", "php-fpm", "status"]
nginx-gost:
image: <образ из внутреннего dockerhub>
volumes:
#- "../:/var/www/esia-service/"
- "./nginx-gost/conf.d:/etc/nginx/conf.d"
ports:
- "81:80"
- "444:443"
networks:
- esia
deploy:
replicas: 2
update_config:
parallelism: 1
order: start-first
failure_action: rollback
delay: 10s
rollback_config:
parallelism: 0
order: stop-first
restart_policy:
condition: any
delay: 5s
max_attempts: 3
window: 120s
depends_on:
- php-fpm-gost
healthcheck:
test: ["CMD", "service", "nginx", "status"]
Далее выполняю команду
docker stack deploy -c docker-compose.deploy.yml esia --with-registry-auth
И получаю 4 контейнера, 2 с php-fpm и 2 c nginx. При этом я получаю проблему с конфигами nginx для моего сервиса в одной из секций
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-fpm-gost:9000;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}
Когда я запускаю обычный docker-compose.yml файл, в котором описан конфиг для php-fpm и nginx в единственных экземплярах, мне достаточно прописать в конфигах fastcgi_pass как php-fpm-gost:9000 и все работает. Но после запуска docker stack deploy получаю два контейнера с php-fpm с разными именами, и непонятно какое значение должен иметь в этом случае параметр fastcgi-pass. Как можно решить эту проблему и правильно ли я все делаю с docker swarm?
Ответы (1 шт):
Как-то так:
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
}
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/