nginx no puede encontrar el archivo /etc/letsencrypt/options-ssl-ngin.conf

nginx no puede encontrar el archivo /etc/letsencrypt/options-ssl-ngin.conf

Estoy intentando servir una aplicación web python-django usando una caja de Linux (ejecutando ubuntu 18.04) con nginx, gunincorn, letsencrypt y docker. Después de seguir varios tutoriales en línea, logré servir la aplicación a través de http a través del puerto 80 siguiendo este tutorial.http://pawamoy.github.io/2018/02/01/docker-compose-django-postgres-nginx.html.

Sin embargo, ahora estoy teniendo muchas dificultades con la implementación a través de https a través del puerto 443. Creo que tal vez no entiendo un concepto fundamental de Docker. El error que recibo al ejecutar sudo docker-compose upestá a continuación.

ERROR DE NGINX:

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

Creo que esto se debe a que no he vinculado el archivo options-ssl-nginx.conf en el archivo docker-compose.yml, ¿tal vez a través de un volumen? Aunque no sé si esto es correcto. Las partes relevantes de mi archivo docker-compose.yml y nginx.conf se encuentran a continuación:

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;
    }   
}

Creo que este es un problema por no entender los volúmenes en Docker-Compose. Aunque llevo casi una semana intentando resolver esto y no se me ocurre nada.

Respuesta1

Parece que le falta /etc/letsencrypt/options-ssl-nginx.confeste archivo, es la configuración predeterminada para todos los sitios que utilizan un instalador de certbot. Por lo tanto, este archivo normalmente se crea durante la instalación del certificado (o emisión e instalación), lo que ocurre principalmente manualmente cuando alguien configura el sistema por primera vez.

Entonces puedes:

  1. Obtenga la última versión de este archivo desde su ubicación de GitHub enhttps://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.confy ponerlo de nuevo donde debería estar
  2. O cambie su nginx.confarchivo y reemplace la línea que da el error (la línea que incluye ese archivo) con el contenido que obtiene de Github.

Respuesta2

Puedes encontrar /etc/letsencrypt/options-ssl-nginx.confun archivo como este enCentOs.

sudo yum install yum-utils
repoquery --list python2-certbot-nginx

O así porubuntu.

dpkg -L python2-certbot-nginx

y copie el archivo al /etc/letsencryptdirectorio.

sudo cp /usr/lib/python2.7/site-packages/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf /etc/letsencrypt/

Si desea utilizar nginx y letsencrypt en Docker, lea este tutorial

información relacionada