nginx kann die Datei /etc/letsencrypt/options-ssl-ngin.conf nicht finden

nginx kann die Datei /etc/letsencrypt/options-ssl-ngin.conf nicht finden

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 upist 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.confist 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:

  1. 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
  2. ODER ändern Sie Ihre nginx.confDatei 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.confEine 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/letsencryptdas 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

verwandte Informationen