因為最近在建立新的系統,這次就來跟大家分享在本次建立系統時所發現對我來說的新玩意。

這次要跟大家分享的就是關於「docker-nginx-certbot」

先提供這個專案的github https://github.com/JonasAlfredsson/docker-nginx-certbot

Docker Hub https://hub.docker.com/r/jonasal/nginx-certbot

這個專案從名稱一看就知道是直接包成docker,馬上就知道啟動也是非常的簡單快速。

首先建在專案的目錄建立一檔案「docker-compose.yml」

version: '3'

services:
  nginx:
    image: jonasal/nginx-certbot:3
    restart: unless-stopped
    environment:
      - CERTBOT_EMAIL=your-email@example.com
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./letsencrypt:/etc/letsencrypt
      - ./user_conf.d:/etc/nginx/user_conf.d

其中 your-email@example.com 需要改成你自己的email,這是需要在做網址認證的時候提供的。

另外需要說明的還有下面二個資料夾,

letsencypt:儲存相關SSL憑證的地方。

user_conf.d: 你的nginx config檔案放在這。

因此既然知道user_conf.d是放nginx config,那接下來就要開一個新檔案放你所想要認證的URL設定,設定當的內容如下

server {
    # Listen to port 443 on both IPv4 and IPv6.
    listen 443 ssl default_server reuseport;
    listen [::]:443 ssl default_server reuseport;

    # Domain names this server should respond to.
    server_name {你的網址};

    # Load the certificate files.
    ssl_certificate         /etc/letsencrypt/live/{自己命名}/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/{自己命名}/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/{自己命名}/chain.pem;

    # Load the Diffie-Hellman parameter.
    ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;

    return 200 'Let\'s Encrypt certificate successfully installed!';
    add_header Content-Type text/plain;
}

接下來依照docker的做法,很簡單的只要執行下面指令。

sudo docker compose up -d //-d 為背景執行

接下來大概要過個3~5分鐘就可以在網頁上輸入網址(使用https),就會看到頁面顯示「Let’s Encrypt certificate successfully installed!」

看到這個就表示成功了。

最後可以再到 letsencypt 的資料夾看 live 裡面會有相關的金鑰憑證。

這個image就是如此的方便,在github上也是有蠻多星星的。

由於 letsencrypt 所提供的憑證每次的效期為 90 天,「docker-nginx-certbot」會自動進行 renew的動作,所以也不用擔心過期。

這次就先分享到這邊,謝謝大家。

20240604 後記

如果有人需要手動 renew,這裡也提供指令可供使用。

$ docker exec -it {docker name} /scripts/run_certbot.sh force