I've found many tutorials how to setup nginx reverse proxy with letsencrypt certificate in docker environment. somehow all of them were quite complex and hard to implement for me - linux noob (I'm primarily Windows server guy).
Here is the easy setup, that I've developed after going thru lot of tutorials and spent lot of try/failure cycles in my DEV docker server:
reverse_proxy_conf reverse_proxy_data certbot_cfg certbot_www docker run -it --rm --name reverse-proxy \ -p 80:80 -p 8080:8080 -p 443:443 -p 8443:8443 \ -v reverse_proxy_conf:/etc/nginx/ \ -v reverse_proxy_data:/usr/share/nginx/ \ -v certbot_cfg:/etc/letsencrypt \ -v certbot_www:/var/www/certbot \ -d nginx:latest #for certbot challenges (renewal process) location /.well-known/acme-challenge { allow all; root /var/www/certbot; } docker run -it --rm --name certbot \ -v certbot_cfg:/etc/letsencrypt \ -v certbot_www:/var/www/certbot certbot/certbot \ certonly --register-unsafely-without-email --webroot --dry-run -w /var/www/certbot -d <hostname>
--dry-run parameter. /var/lib/docker/volumes/certbot_cfg/_data/archive/<hostname> /var/lib/docker/volumes/certbot_cfg/_data/live/<hostname> server { listen 443 ssl; server_name <hostname>; ssl_certificate /etc/letsencrypt/live/<hostname>/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/<hostname>/privkey.pem; } docker run -it --rm --name certbot \ -v certbot_cfg:/etc/letsencrypt \ -v certbot_www:/var/www/certbot \ certbot/certbot renew --webroot -w /var/www/certbot # # Confluence # location / { client_max_body_size 100M; proxy_pass http://<confluence server>:8090/; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location /synchrony { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://<confluence server>:8091/synchrony; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; }
note: I'm planning to automate the renewal process using cron sometime later