Настройка конфигов 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 шт):

Автор решения: Sergei Kirjanov

Как-то так:

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/

→ Ссылка