首页 > 解决方案 > 如何在 docker 中正确配置 certbot?

问题描述

请帮我解决这个问题,我已经尝试解决了 2 天!请告诉我我做错了什么。我应该改变什么才能让它发挥作用!我应该怎么做才能让它发挥作用。

错误:对于 certbot 无法启动服务 certbot:找不到网络 4d3b22b1f02355c68a900a7dfd80b8c5bb64508e7e12d11dadae11be11ed83dd

我的 docker-compose 文件

version: '3'
services:
    nginx:
        restart: always
        build:
            context: ./
            dockerfile: ./nginx/Dockerfile
        depends_on:
            - server
        ports:
            - 80:80
        volumes:
            - ./server/media:/nginx/media
            - ./conf.d:/nginx/conf.d
            - ./dhparam:/nginx/dhparam
            - ./certbot/conf:/nginx/ssl
            - ./certbot/data:/usr/share/nginx/html/letsencrypt

    server:
        build:
            context: ./
            dockerfile: ./server/Dockerfile
        command: gunicorn config.wsgi -c ./config/gunicorn.py
        volumes:
            - ./server/media:/server/media
        ports:
            - "8000:8000"
        depends_on:
            - db
        environment:
            DEBUG: 'False'
            DATABASE_URL: 'postgres://postgres:@db:5432/postgres'
            BROKER_URL: 'amqp://user:password@rabbitmq:5672/my_vhost'

    db:
        image: postgres:11.2
        environment:
            POSTGRES_DB: postgres
            POSTGRES_USER: postgres
    certbot:
        image: certbot/certbot:latest
        command: certonly --webroot --webroot-path=/usr/share/nginx/html/letsencrypt --email artasdeco.ru@gmail.com --agree-tos --no-eff-email -d englishgame.ru
        volumes:
        - ./certbot/conf:/etc/letsencrypt
        - ./certbot/logs:/var/log/letsencrypt
        - ./certbot/data:/usr/share/nginx/html/letsencrypt

我的 Dockerfile

FROM python:3.7-slim AS server

RUN mkdir /server
WORKDIR /server

COPY ./server/requirements.txt /server/
RUN pip install -r requirements.txt

COPY ./server /server

RUN python ./manage.py collectstatic --noinput

#########################################

FROM nginx:1.13

RUN rm -v /etc/nginx/nginx.conf
COPY ./nginx/nginx.conf /etc/nginx/

RUN mkdir /nginx
COPY --from=server /server/staticfiles /nginx/static

nginx.conf 文件

user nginx;
worker_processes auto;

error_log  /var/log/nginx/error.log warn;

events {
    worker_connections  1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;


    server {
        listen 443 ssl http2;
        server_name englishgame.ru;
        
        ssl on;
        server_tokens off;
        ssl_certificate /etc/nginx/ssl/live/englishgame.ru/fullchain.pem;
        ssl_certificate_key /etc/nginx/ssl/live/englishgame.ru/fullchain.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 / {
            return 301 https://englishgame.ru$request_uri; 
        }
        
    }

    server {
        listen 80;

        server_name englishgame.ru;

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

        location /static {
            alias /nginx/static/;
            expires max;
        }

        location /media {
            alias /nginx/media/;
            expires 10d;
        }

        location /robots.txt {
            alias /nginx/static/robots.txt;
        }

        location /sitemap.xml {
            alias /nginx/static/sitemap.xml;
        }

        location / {
            proxy_pass        http://server:8000;
            proxy_redirect    off;

            proxy_read_timeout  60;

            proxy_set_header  Host             $host;
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    }
}

谢谢您的帮助!

标签: djangodockernginxdevopscertbot

解决方案


好的,所以根据错误ERROR: for certbot Cannot start service certbot: network 4d3b22b1f02355c68a900a7dfd80b8c5bb64508e7e12d11dadae11be11ed83dd not found,问题与您的 compose 文件中定义的任何其他服务无关,因此这些以及您的 Dockerfile 和 nginx 配置应该与问题无关。

然后解决“为什么无法创建certbot服务”的问题。通常,当手动删除为服务配置的网络时,会发生这种错误。然而,在这种情况下,甚至没有服务指的是网络。因此只打印哈希和,而不是任何网络名称。

谷歌搜索错误带来了类似的问题让我们加密:https://github.com/BirgerK/docker-apache-letsencrypt/issues/8,它指向一个实际的 docker compose 问题https://github.com/docker/撰写/问题/5745

解决方案是使用“--force-recreate”选项运行 docker compose 来解决问题。

所以,问题应该通过运行来解决docker compose up -d --force-recreate


推荐阅读