Ich versuche, eine Python-Django-Webanwendung mithilfe einer Linux-Box (mit Ubuntu 18.04) mit Nginx, Gunincorn, Letsencrypt und Docker bereitzustellen. Nachdem ich eine Reihe von Online-Tutorials durchgearbeitet habe, ist es mir gelungen, die App über http über Port 80 bereitzustellen, indem ich diesem Tutorial gefolgt bin.http://pawamoy.github.io/2018/02/01/docker-compose-django-postgres-nginx.html.
Allerdings habe ich jetzt wirklich Probleme mit der Bereitstellung über https über Port 443. Ich glaube, ich verstehe vielleicht ein grundlegendes Docker-Konzept nicht. Der Fehler, den ich beim Ausführen erhalte, sudo docker-compose up
ist unten aufgeführt.
NGINX-FEHLER:
nginx_1 | nginx: [emerg] open() "/etc/letsencrypt/options-ssl-nginx.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/local_ssl.conf:28
Ich glaube, das liegt daran, dass ich die Datei options-ssl-nginx.conf nicht mit der Datei docker-compose.yml verknüpft habe, vielleicht über ein Volume? Ich weiß allerdings nicht, ob das richtig ist. Die relevanten Teile meiner Datei docker-compose.yml und der Dateien nginx.conf sind unten aufgeführt:
docker-compose.yml:
version: '3'
services:
# database containers
database1:
...
# web container
djangoapp:
...
# reverse proxy container (nginx)
nginx:
image: nginx:latest
ports:
- 80:80
- 443:443
volumes:
- ./config/nginx/conf_ssl.d/:/etc/nginx/conf.d
- static:/opt/services/djangoapp/static
- media:/opt/services/djangoapp/media
- ~/nginxlogs:/var/log/nginx
- /etc/letsencrypt
- /var/www/certbot
/live/maps.critr.org.uk
networks:
- nginx_network
depends_on:
- djangoapp
certbot:
image: certbot/certbot
restart: unless-stopped
volumes:
- /etc/letsencrypt
- /var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
networks:
...
volumes:
...
nginx.conf:
upstream critr_server {
server djangoapp:8000;
}
# divert all http traffic to https
server {
listen 80;
server_name maps.critr.org.uk;
return 301 https://maps.critr.org.uk;
}
server {
listen 443 ssl;
server_name maps.critr.org.uk;
ssl_certificate /etc/letsencrypt/live/maps.critr.org.uk/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/maps.critr.org.uk/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location /.well-known {
root /opt/services/djangoapp/static/;
}
location /static/ {
alias /opt/services/djangoapp/static/;
}
location /media/ {
alias /opt/services/djangoapp/media/;
}
location / {
proxy_pass https://critr_server;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
Ich glaube, das liegt daran, dass die Volumes in Docker-Compose nicht verstanden werden. Ich versuche allerdings schon seit fast einer Woche, das Problem zu lösen, und bin zu nichts gekommen.
Antwort1
Es scheint, als ob Sie diese Datei vermissen. Sie /etc/letsencrypt/options-ssl-nginx.conf
ist die Standardkonfiguration für alle Sites, die ein Certbot-Installationsprogramm verwenden. Diese Datei wird also normalerweise während der Zertifikatsinstallation (oder der Ausstellung und Installation) erstellt, was hauptsächlich manuell von jemandem geschieht, der das System zum ersten Mal konfiguriert.
Sie können also entweder:
- Holen Sie sich die neueste Version dieser Datei vom GitHub-Speicherort unterhttps://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.confund lege es dorthin zurück, wo es hingehört
- ODER ändern Sie Ihre
nginx.conf
Datei und ersetzen Sie die Zeile, die den Fehler verursacht (die Zeile, die diese Datei enthält), durch den Inhalt, den Sie von Github erhalten.
Antwort2
/etc/letsencrypt/options-ssl-nginx.conf
Eine solche Datei finden Sie aufCentOs.
sudo yum install yum-utils
repoquery --list python2-certbot-nginx
Oder so fürUbuntu.
dpkg -L python2-certbot-nginx
und kopiere die Datei in /etc/letsencrypt
das Verzeichnis.
sudo cp /usr/lib/python2.7/site-packages/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf /etc/letsencrypt/
Wenn Sie nginx und letsencrypt in Docker verwenden möchten, lesen Sie dieses Tutorial