Как правильно настроить nginx + ssl в докер?
version: "3.9" networks: opencart-network: services: webserver: build: context: . dockerfile: ./docker/welcomepage/Dockerfile args: - DOMAIN_NAME=${DOMAIN_NAME:-domain.com} - DOMAIN_EMAIL=${DOMAIN_EMAIL:-mail@domain.com} ports: - "80:80" - "443:443" networks: - backend-network volumes: - ./certbot/www/:/var/www/certbot/:ro certbot: image: certbot/certbot restart: unless-stopped volumes: - ./certbot/www/:/var/www/certbot/:rw - ./certbot/conf/:/etc/letsencrypt/:rw entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot certonly --webroot --webroot-path=/var/www/certbot --email ${DOMAIN_EMAIL} --agree-tos --no-eff-email -d ${DOMAIN_NAME}; sleep 12h & wait $${!}; done;'" networks: - backend-network |
version: "3.9" networks: opencart-network: services: webserver: build: context: . dockerfile: ./docker/welcomepage/Dockerfile args: - DOMAIN_NAME=${DOMAIN_NAME:-domain.com} - DOMAIN_EMAIL=${DOMAIN_EMAIL:-mail@domain.com} ports: - "80:80" - "443:443" networks: - backend-network volumes: - ./certbot/www/:/var/www/certbot/:ro certbot: image: certbot/certbot restart: unless-stopped volumes: - ./certbot/www/:/var/www/certbot/:rw - ./certbot/conf/:/etc/letsencrypt/:rw entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot certonly --webroot --webroot-path=/var/www/certbot --email ${DOMAIN_EMAIL} --agree-tos --no-eff-email -d ${DOMAIN_NAME}; sleep 12h & wait $${!}; done;'" networks: - backend-network
Nginx conf
server { listen 80; server_name ${DOMAIN_NAME}; root /var/www/html; index index.html; charset utf-8; location /.well-known/acme-challenge/ { root /var/www/certbot; } # Redirect from 80 to 443 location / { return 301 https://$host$request_uri; } } server { listen 443 default_server ssl; server_name ${DOMAIN_NAME}; root /var/www/html; index index.html; charset utf-8; ssl_certificate /etc/letsencrypt/ssl/live/${DOMAIN_NAME}/fullchain.pem; ssl_certificate_key /etc/letsencrypt/ssl/live/${DOMAIN_NAME}/privkey.pem; location ~ /.(?!well-known).* { deny all; } } |
server { listen 80; server_name ${DOMAIN_NAME}; root /var/www/html; index index.html; charset utf-8; location /.well-known/acme-challenge/ { root /var/www/certbot; } # Redirect from 80 to 443 location / { return 301 https://$host$request_uri; } } server { listen 443 default_server ssl; server_name ${DOMAIN_NAME}; root /var/www/html; index index.html; charset utf-8; ssl_certificate /etc/letsencrypt/ssl/live/${DOMAIN_NAME}/fullchain.pem; ssl_certificate_key /etc/letsencrypt/ssl/live/${DOMAIN_NAME}/privkey.pem; location ~ /.(?!well-known).* { deny all; } }
Выполняю команду:
docker-compose run --rm certbot certonly --webroot --webroot-path /var/www/certbot/ -d domain.com |
docker-compose run --rm certbot certonly --webroot --webroot-path /var/www/certbot/ -d domain.com
Основная загвоздка, это вначале нужно обратиться к 80 порту от certbot, чтобы он выдал сертификаты, и потом их установить и перезаписать настройки nginx, как это правильно сделать?
Дополнительно:
это вы сами такую архитектуру - "генерация сертификата по требовнию" придумали или прочитали где ? вначале нужно обратиться к 80 порту от certbot, чтобы он выдал сертификаты, и потом вот тут поподробнее что вы там придумали .
У тебя еще должен быть доступен сертификат в контейнере nginx поэтому подмонтируй к нему /etc/letsencrypt
Из за таких танцев с бубном а предпочитаю traefik
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы правильно настроить Nginx + SSL в Docker, следует выполнить следующие шаги:
1. Создайте Dockerfile для сборки образа Nginx. Пример Dockerfile:
FROM nginx:latest COPY nginx.conf /etc/nginx/nginx.conf COPY ssl.crt /etc/nginx/ssl/ssl.crt COPY ssl.key /etc/nginx/ssl/ssl.key
2. Создайте файл конфигурации Nginx (nginx.conf) с необходимыми настройками. Пример конфигурации:
server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/ssl.crt; ssl_certificate_key /etc/nginx/ssl/ssl.key; location / { root /usr/share/nginx/html; index index.html; } }
3. Сгенерируйте SSL сертификат и ключ, либо используйте самоподписанный сертификат для тестов. Пример генерации самоподписанного сертификата:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ssl.key -out ssl.crt
4. Соберите образ Nginx с помощью команды `docker build -t my-nginx .`.
5. Запустите контейнер с образом Nginx, пробросив порт 443 на хост машину. Пример запуска контейнера:
docker run -d -p 443:443 my-nginx
Теперь у вас должен быть настроенный Nginx с SSL в Docker контейнере. Проверьте доступность вашего сайта по HTTPS, введя в браузере https://example.com.