3 votes

Erreur Nginx LetsEncrypt "/etc/letsencrypt/options-ssl-nginx.conf" aucun fichier ou répertoire de ce type

J'essaie d'ajouter https en utilisant LetsEncrypt et Nginx. J'ai ajouté certbot et il s'est exécuté avec succès. Ensuite, lorsque j'essaie d'exécuter le serveur Nginx, j'obtiens cette erreur.

/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: error: /etc/nginx/conf.d/default.conf is not a file or does not exist
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2020/11/21 06:24:07 [emerg] 1#1: open() "/etc/letsencrypt/options-ssl-nginx.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/nginx.conf:23
nginx: [emerg] open() "/etc/letsencrypt/options-ssl-nginx.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/nginx.conf:23

C'est mon docker-compose.yml fichier

version: '3.7'

services:

  nginx_server:
    image: nginx:latest
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - ./data/nginx:/etc/nginx/conf.d
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot

 my-image:
    image: my-name/my-image
    ports:
      - '8088:8088'

Il s'agit de mon nginx.conf fichier à l'intérieur data/nginx

server {
    listen 80;
    server_name mysite.com;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

   location / {
        proxy_pass        http://my-image:8088;
             proxy_set_header  X-Real-IP $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header  Host $http_host;
    }
}
server {
        listen 443 ssl default_server ssl;
        server_name mysite.com;

        ssl_certificate     /etc/letsencrypt/live/mysite.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem;
        ssl_trusted_certificate  /etc/letsencrypt/live/mysite.com/fullchain.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location / {
             proxy_pass        http://my-image:8088;
             proxy_set_header  X-Real-IP $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header  Host $http_host;
        }

}

Certbot s'est exécuté avec succès, j'ai donc supprimé son image de docker-compose.

Toute aide serait appréciée. Merci de votre compréhension.

1voto

Mehdi Roshan Fekr Points 133

J'espère que vous avez trouvé une solution à votre problème, je vais partager ce qui a résolu mon problème lorsque j'ai essayé d'utiliser nginx & certbot dans un environnement docker et les liens que j'ai utilisés pour d'autres personnes qui voudraient utiliser nginx et certbot dans docker.

Étape 1 (préparation de la base)

  1. Créer un réseau appelé nginx => docker network create nginx

  2. Ajoutez le fichier docker-compose ci-dessous dans un dossier que vous souhaitez utiliser comme base de nginx.

    version: '3.4'

    services: web: image: nginx:1.14.2-alpine restart: always volumes:

    • ./public_html:/public_html
    • ./conf.d:/etc/nginx/conf.d/
    • ./dhparam:/etc/nginx/dhparam
    • ./certbot/conf/:/etc/nginx/ssl/
    • ./certbot/data:/usr/share/nginx/html/letsencrypt ports:
    • 80:80
    • 443:443 networks:
      • nginx certbot: image: certbot/certbot:latest volumes:
        • ./certbot/conf/:/etc/letsencrypt
        • ./certbot/logs/:/var/log/letsencrypt
        • ./certbot/data:/usr/share/nginx/html/letsencrypt

    networks: nginx: external: true

  3. Ajoutez les dossiers suivants dans le même répertoire

  • conf.d
  • dhparam
  • public_html

Étape 2 (Configuration)

  1. Ajouter le fichier de configuration ci-dessous en tant que default.conf à la conf.d dossier

    server { listen 80; server_name YOUR_DOMAIN; root /public_html/;

    location ~ /.well-known/acme-challenge{
      allow all;
      root /usr/share/nginx/html/letsencrypt;
    }

    }

  2. aller à dhparam et exécutez la commande ci-dessous :

openssl dhparam -out ~/nginx/dhparam/dhparam-2048.pem 2048

Étape 3 (LetEncrypt)

  1. Ejecutar docker-compose up --build
  2. Exécutez la commande ci-dessous :

docker-compose run certbot certonly --webroot --webroot-path=/usr/share/nginx/html/letsencrypt --email YOUR_EMAIL --agree-tos --no-eff-email -d YOUR_DOMAIN

Étape 4 (Modifier la configuration)

  1. Modifiez votre default.conf pour inclure ssl comme ci-dessous :

    server { listen 80; server_name YOUR_DOMAIN;

    location ~ /.well-known/acme-challenge{
      allow all;
      root /usr/share/nginx/html/letsencrypt;
    }
    
    location / {
      return 301 https://YOUR_DOMAIN$request_uri;
    }

    }

    server { listen 443 ssl http2; server_name YOUR_DOMAIN;

     ssl on;
     server_tokens off;
     ssl_certificate /etc/nginx/ssl/live/YOUR_DOMAIN/fullchain.pem;
     ssl_certificate_key /etc/nginx/ssl/live/YOUR_DOMAIN/privkey.pem;
     ssl_dhparam /etc/nginx/dhparam/dhparam-2048.pem;
    
     ssl_buffer_size 8k;
     ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
     ssl_prefer_server_ciphers on;
     ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
    
    location / {
        proxy_pass http://frontend:3000;
    }

    }

  2. assurez-vous que votre nextjs tourne déjà sur 3000, voici mon nextjs docker-compose

    version: '3' services: frontend: build: context: ./ environment:

    • PORT=3000
    • NODE_ENV=production ports:
    • 3000:3000 networks:
    • nginx networks: nginx: external: true

Liens

Nous avons un peu modifié notre flux et je vous recommande vraiment de faire la même chose si vous utilisez les étapes ci-dessus. Pour plus d'informations, vous pouvez consulter les liens ci-dessous, ces gars m'ont sauvé :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X