Как реализовать (Certbot) ssl, используя Docker с образом Nginx - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь реализовать ssl в своем приложении, используя Docker с изображением nginx.У меня есть два приложения, одно для back-end (api) и другое для front-end (admin).Он работает с http на порту 80, но мне нужно использовать 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.Кто-нибудь может дать мне свет?

... Я использую экземпляр ECS в AWS, и проект строится с помощью CI / CD

1 Ответ

0 голосов
/ 12 февраля 2019

Это только один из возможных способов:

Сертификат первого выпуска с использованием certbot.Вы получите пару *.pem файлов.Существуют красивые руководства по установке и запуску certbot на разных системах, я использовал Ubuntu с командой certbot --nginx certonly.Вам нужно выполнить эту команду на вашем домене , потому что certbot проверит, что вы являетесь владельцем домена по ряду проблем.

Во-вторых, вы создаете nginx контейнеры.Вам понадобятся правильные nginx.conf и ссылки на сертификаты для этих контейнеров.Я использую тома докера, но это не единственный способ.

Мой 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для возможности подключения

...