All Projects → twtrubiks → docker-letsencrypt-django-nginx-proxy-uwsgi-postgres

twtrubiks / docker-letsencrypt-django-nginx-proxy-uwsgi-postgres

Licence: other
Docker + Letsencrypt + Django + Nginx-Proxy + uWSGI 教學

Programming Languages

python
139335 projects - #7 most used programming language
Dockerfile
14818 projects

Projects that are alternatives of or similar to docker-letsencrypt-django-nginx-proxy-uwsgi-postgres

django-template
The ultimate Django template: production ready Django 3.2 with Docker, HTTPS and CI/CD using Github actions ‎️‍🔥
Stars: ✭ 20 (-23.08%)
Mutual labels:  letsencrypt, https, nginx-proxy
Certbot
Dockerized HTTPS with Let's Encrypt
Stars: ✭ 91 (+250%)
Mutual labels:  letsencrypt, https
Certificaat
General-purpose ACME client
Stars: ✭ 88 (+238.46%)
Mutual labels:  letsencrypt, https
multiarch-letsencrypt-nginx-proxy
nginx-proxy, docker-gen and letsencrypt-nginx-proxy-companion on arm archs
Stars: ✭ 23 (-11.54%)
Mutual labels:  letsencrypt, nginx-proxy
Dockerize Your Dev
Docker compose a VM to get LetsEncrypt / NGINX proxy auto provisioning, ELK logging, Prometheus / Grafana monitoring, Portainer GUI, and more...
Stars: ✭ 61 (+134.62%)
Mutual labels:  letsencrypt, nginx-proxy
Docker Letsencrypt Certgen
Docker image to generate, renew, revoke RSA and/or ECDSA SSL certificates from LetsEncrypt CA using certbot and acme.sh clients in automated fashion
Stars: ✭ 64 (+146.15%)
Mutual labels:  letsencrypt, https
Serverpilot Letsencrypt
Automate the installation of Let's Encrypt SSL on the free plan of ServerPilot
Stars: ✭ 129 (+396.15%)
Mutual labels:  letsencrypt, https
Greenlock
Automatic SSL renewal for NodeJS
Stars: ✭ 30 (+15.38%)
Mutual labels:  letsencrypt, https
Letsencrypt Zimbra
Files to automate the deploy of letsencrypt certificates to Zimbra
Stars: ✭ 138 (+430.77%)
Mutual labels:  letsencrypt, https
Nginxconfig.io
⚙️ NGINX config generator on steroids 💉
Stars: ✭ 14,983 (+57526.92%)
Mutual labels:  letsencrypt, https
Htpc Docker Standup
A simple docker-compose based configuration to stand up a new HTPC w/ Plex, Deluge, Sonarr, Radarr and more!
Stars: ✭ 160 (+515.38%)
Mutual labels:  letsencrypt, nginx-proxy
Netcore Postgres Oauth Boiler
A basic .NET Core website boilerplate using PostgreSQL for storage, Adminer for db management, Let's Encrypt for SSL certificates and NGINX for routing.
Stars: ✭ 57 (+119.23%)
Mutual labels:  letsencrypt, https
Certify
SSL Certificate Manager UI for Windows, powered by Let's Encrypt. Download from certifytheweb.com
Stars: ✭ 1,075 (+4034.62%)
Mutual labels:  letsencrypt, https
Acme client
Java ACME Client application
Stars: ✭ 77 (+196.15%)
Mutual labels:  letsencrypt, https
Containerized Guacamole
Apache Guacamole out of the box compose setup with Nginx Reverse Proxy, Lets Encrypt. Simple and easy deployable with Docker Compose. Uses only Official Guacamole Docker Images
Stars: ✭ 49 (+88.46%)
Mutual labels:  letsencrypt, nginx-proxy
Docker Nginx Gunicorn Flask Letsencrypt
Boilerplate code for setting up Nginx + Gunicorn + Flask + automated LetsEncrypt certificates (https) using docker-compose.
Stars: ✭ 117 (+350%)
Mutual labels:  letsencrypt, https
Nginx Proxy Automation
Automated docker nginx proxy integrated with letsencrypt.
Stars: ✭ 2,302 (+8753.85%)
Mutual labels:  letsencrypt, nginx-proxy
Globaleaks
GlobaLeaks is free, open source software enabling anyone to easily set up and maintain a secure whistleblowing platform.
Stars: ✭ 832 (+3100%)
Mutual labels:  letsencrypt, https
Go Bootstrap
Easy way to bootstrap a web server in Go (Routing|Middleware|Https)
Stars: ✭ 27 (+3.85%)
Mutual labels:  letsencrypt, https
Armor
Uncomplicated, modern HTTP server
Stars: ✭ 1,629 (+6165.38%)
Mutual labels:  letsencrypt, https

docker-letsencrypt-django-nginx-proxy-uwsgi-postgres

這篇文章主要是要教大家如何透過 letsencrypt 完成 https🔥

建議閱讀這篇文章之前,先看過以下這篇文章,因為會使用這個範例的 repo。

Docker + Django + Nginx + uWSGI + Postgres 基本教學 - 從無到有

說明

使用別人的 image ( 站在巨人的肩膀上 😄 ),以下兩個 repo,分別是

docker-letsencrypt-nginx-proxy-companion 以及 nginx-proxy

非常建議閱讀 ( 也可以玩玩看 ),裡面也有介紹整個原理以及功能,所以這邊

不會再詳細介紹,因為文章內已經非常詳細了。

提供直接可以 run 的 docker-compose 給大家。

目標是在 here 加上 https,這時候就需要搭配 nginx-proxy 以及 docker-letsencrypt-nginx-proxy-companion。

方法一

提供兩種方法,一種是統一在同一個 docker-compose 內,詳細請參考 method_1

version: '3.5'
services:

  nginx-proxy:
    image: jwilder/nginx-proxy:alpine
    restart: always
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - html:/usr/share/nginx/html
      - dhparam:/etc/nginx/dhparam
      - vhost:/etc/nginx/vhost.d
      - certs:/etc/nginx/certs:ro
      - ./custom_nginx.tmpl:/app/nginx.tmpl
      - ./nginx_log:/var/log/nginx

  nginx-proxy-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    restart: always
    depends_on:
      - "nginx-proxy"
    volumes:
      - certs:/etc/nginx/certs
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - ACME_CA_URI=https://acme-staging-v02.api.letsencrypt.org/directory
      - NGINX_PROXY_CONTAINER=nginx-proxy
      - [email protected]

  nginx:
    container_name: nginx-container
    build: ./nginx
    restart: always
    volumes:
      - api_data:/docker_api
      - ./log:/var/log/nginx
    depends_on:
      - api
    environment:
      - VIRTUAL_HOST=twtrubiks.com.tw
      - VIRTUAL_NETWORK=nginx-proxy
      - VIRTUAL_PORT=80
      - LETSENCRYPT_HOST=twtrubiks.com.tw
      - [email protected]

  ......

以下稍微說明一下,首先是 ACME_CA_URI=https://acme-staging-v02.api.letsencrypt.org/directory

這個的目的就是測試用 ( staging ),詳細以及一些限制可參考 Staging Environment

建議可以先用這個測試,確認沒問題之後,再把它註解掉 ( 正式機 )。

接下來說明,

environment:
    - VIRTUAL_HOST=twtrubiks.com.tw
    - VIRTUAL_NETWORK=nginx-proxy
    - VIRTUAL_PORT=80
    - LETSENCRYPT_HOST=twtrubiks.com.tw
    - [email protected]

這邊先假設你的主機 ip 是 123.456.789,請先去幫他加上一個 domain,例如,我今天的 domain 是 twtrubiks.com.tw,

就把他分別設定到 VIRTUAL_HOST 以及 LETSENCRYPT_HOST,LETSENCRYPT_EMAIL 則填上自己的 e-mail.

將 nginx log 同步到本機

如果想要把 nginx log 同步到本機, 直接加上 ./nginx_log:/var/log/nginx 即可.

如果想要修改 nginx log 的格式, 請直接到 custom_nginx.tmpl 底下修改,

然後在 docker-compose.yml 加上,

- ./custom_nginx.tmpl:/app/nginx.tmpl 即可.

原始的 nginx.tmpl 可到這裡查詢.

nginx 設定 html

修改 my_nginx.conf 加上一個位置, 並且指定你的 html 路徑

location /test {
    root /usr/share/nginx/html;
    index index.html;
}

之後將你的 html 放入 /usr/share/nginx/html/test 即可,

最後重啟 nginx, 瀏覽 https://twtrubiks.com.tw/test/ 就會看到你的 html.

執行方法

直接執行即可

docker-compose up

如果設定都正確,你可以點選 https://twtrubiks.com.tw 會正常 work。

( 如果出現不安全,代表有問題 )

方法二

另一種方式是分成兩個 docker-compose,其中一個 docker-compose 是 nginx-proxy 以及 docker-letsencrypt-nginx-proxy-companion,

另一個 docker-compose 則是 here

這邊你可能會問我,明明一個 docker-compose 能解決的事情,為什麼要拆成兩個 docker-compose

原因是這種方法比較有彈性,如果我今天要加新的 docker container ( 加到 docker-compose 內 ),

可以直接另外寫一個 docker-compose,然後直接 run,nginx-proxy 以及 docker-letsencrypt-nginx-proxy-companion 會自動偵測

到這些 container,這樣就不用把原本的先停止 ( docker-compose down ),也比較好管理,不會一堆東西都塞在一起。

但這方法要多注意 networks 的部分,建議可先參考 docker-compose networks 說明 了解一下觀念。

開始介紹,詳細請參考 method_2,裡面有兩個 docker-compose,

docker-compose-nginx-proxy.yml,主要是 nginx-proxy 以及 docker-letsencrypt-nginx-proxy-companion。

version: '3.5'
services:

  nginx-proxy:
    image: jwilder/nginx-proxy:alpine
    ......
    networks:
      - proxy


  nginx-proxy-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    ....
    networks:
      - proxy
....

networks:
  proxy:
    name: self-nginx-proxy

這邊要注意 networks 的部分,我自己建立的名稱為 self-nginx-proxy,如果其他 container 要連接,

都設定為同一個 networks 即可 ( self-nginx-proxy )。

docker-compose.yml,主要是 Django + Nginx + uWSGI + Postgres。

version: '3.5'
services:

  nginx:
    container_name: nginx-container
    ...
    networks:
      - proxy
    depends_on:
      - api
    environment:
      - VIRTUAL_HOST=twtrubiks.com.tw
      - VIRTUAL_NETWORK=nginx-proxy
      - VIRTUAL_PORT=80
      - LETSENCRYPT_HOST=twtrubiks.com.tw
      - [email protected]

  api:
    container_name: api-container
    ....
    networks:
      - proxy
    ...

  ...

...

networks:
  proxy:
    external:
      name: self-nginx-proxy

一樣注意 networks 的部分,這邊多了 external,代表說我要用外部的 networks,如果找不到會報錯。

範例

example

執行方法

先執行

docker-compose -f docker-compose-nginx-proxy.yml up

( 這個方法是指定 docker-compose )

再執行

docker-compose up

如果設定都正確,你可以點選 https://twtrubiks.com.tw 會正常 work。

( 如果出現不安全,代表有問題 )

補充:

也可以進去 docker-letsencrypt-nginx-proxy-companion 的容器中,找到 start.sh,

執行 ./start.sh 測試 https。

letsencrypt 的 challenge 有很多種方式,在這裡是使用 HTTP-01 challenge,其他

的 challenge 方式可參考 challenge-types

後記:

之前剛好碰上要自己建立 https,上網研究了一番,最後選擇這個,也建議大家可以看一下

原理,這篇也算是紀錄,以後需要 https,就直接拿這份 docker-compose 改一改即可。

Reference

Donation

文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡😆

alt tag

贊助者付款

License

MIT license

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].