Как в Docker Swarm развернуть Nginx с cerbot?

Для развертывания Nginx и Certbot в Docker Swarm вы можете использовать стек (stack) или файл композиции (compose file).

1. Сначала создайте файл композиции docker-compose.yml со следующим содержимым:

version: '3.8'

services:
  nginx:
    image: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certs:/etc/nginx/certs
  certbot:
    image: certbot/certbot
    command: certonly --webroot --webroot-path=/usr/share/nginx/html --email [email protected] --agree-tos --domains your-domain.com --renew-by-default
    volumes:
      - ./certs:/etc/letsencrypt
      - ./html:/usr/share/nginx/html

2. Создайте файл конфигурации nginx.conf со следующим содержимым:

events {
    worker_connections  1024;
}

http {
    server {
        listen 80;
        server_name your-domain.com;

        location /.well-known/acme-challenge/ {
            root /usr/share/nginx/html;
        }

        location / {
            return 301 https://$host$request_uri;
        }
    }

    server {
        listen 443 ssl;
        server_name your-domain.com;

        ssl_certificate /etc/nginx/certs/fullchain.pem;
        ssl_certificate_key /etc/nginx/certs/privkey.pem;

        location / {
            proxy_pass http://your-app;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

Замените your-domain.com на ваш домен и [email protected] на ваш email для Certbot.

3. Создайте папки certs и html в текущей директории, они будут использоваться для хранения сертификатов и для авторизации Certbot.

4. Теперь вам нужно развернуть сервисы из файла композиции. Запустите команду:

docker stack deploy -c docker-compose.yml my-stack

my-stack - это имя вашего стека, вы можете выбрать любое имя.

5. После успешного развертывания Docker Swarm создаст и запустит два сервиса - Nginx и Certbot. Nginx будет слушать порты 80 и 443 и настроен на перенаправление всех HTTP-запросов на HTTPS. Certbot получит сертификат для вашего домена, размещая временные файлы в папке html.

6. Если всё прошло успешно, вы можете обновить ваше приложение так, чтобы оно работало через Nginx. Вместо прямого доступа к порту вашего приложения, вы можете использовать проксирование Nginx, чтобы перенаправлять трафик на ваше приложение.

Надеюсь, эта информация была полезной для вас! Если у вас есть какие-либо вопросы, не стесняйтесь задавать!