Для развертывания 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, чтобы перенаправлять трафик на ваше приложение.
Надеюсь, эта информация была полезной для вас! Если у вас есть какие-либо вопросы, не стесняйтесь задавать!