如何使用Docker和Nginx映像实现(Certbot)SSL

时间:2019-02-12 13:54:02

标签: docker ssl nginx certbot

我正在尝试使用具有nginx映像的Docker在我的应用程序中实现ssl。我有两个应用程序,一个用于后端(api),另一个用于前端(admin)。它在端口80上使用http,但我需要使用https。这是我的Nginx配置文件...

upstream ulib-api {
  server 10.0.2.229:8001;
}

server {
  listen 80;
  server_name api.ulib.com.br;

  location / {
      proxy_pass http://ulib-api;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  client_max_body_size 100M;
}

upstream ulib-admin {
  server 10.0.2.229:8002;
}

server {
  listen 80;
  server_name admin.ulib.com.br;

  location / {
      proxy_pass http://ulib-admin;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  client_max_body_size 100M;
}

我得到了一些教程,但全部都使用docker-compose。我需要使用Dockerfile安装它。谁能给我个灯?

...我正在AWS上使用ECS实例,并且项目正在使用CI / CD构建

1 个答案:

答案 0 :(得分:1)

这只是可能的方法之一:

使用certbot的第一张证书。您将最终得到几个*.pem文件。 有很多关于在不同系统上安装和运行certbot的教程,我将Ubuntu与命令certbot --nginx certonly一起使用。您需要在您的域上运行该命令,因为certbot将通过一系列挑战检查您是否是域的所有者。

第二,您创建nginx容器。您将需要适当的nginx.conf并将证书链接到此容器。我使用docker卷,但这不是唯一的方法。

我的nginx.conf如下所示:

http {
    server {
        listen 443 ssl;

        ssl_certificate /cert/<yourdomain.com>/fullchain.pem;
        ssl_certificate_key /cert/<yourdomain.com>/privkey.pem;
        ssl_trusted_certificate /cert/<yourdomain.com>/chain.pem;
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ...
    }
}

最后,您在连接适当的卷的情况下运行nginx

docker run -d -v $PWD/nginx.conf:/etc/nginx/nginx.conf:ro -v $PWD/cert:/cert:ro -p 443:443 nginx:1.15-alpine 

注意:

  • 我将$PWD/cert映射为/cert到容器中。这是一个文件夹,其中存储*.pem个文件。他们生活在./cert/example.com/*.pem

  • nginx.conf内,您使用ssl_...指令引用这些证书

  • 您应该公开端口443以便能够连接