這次碰上的是如何在 container 裡面的 nginx 掛上 ssl。

主要是這次移機,從 vultr 移到 linode 新的日本機房,這次移完,趁這個機會練習一下全機服務 container 化,所以這次不管是 nginx 還是 gitea ,或是之後要起來的服務,都會讓他在 container 裡面跑。

我們要去 letencrypt,先取得 ssl 憑證。照著 這邊 的操作,可以先產生 ssl 的憑證。

再來是 nginx site config

server {
       listen 443 ssl;
       ssl_certificate /etc/letsencrypt/live/{YOUR-DOMAIN}/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/{YOUR-DOMAIN}/privkey.pem;
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       ssl_ciphers ECDH+AESGCM:EDCH+AES256:ECDH+AES128:!MD5:!aNULL;
       ssl_prefer_server_ciphers on;
       ssl_session_cache shared:SSL:10m;
       ssl_session_timeout 1h;
       ssl_stapling on;
       ssl_stapling_verify on;
       server_name {YOUR-DOMAIN};


       root /usr/share/nginx/html/{YOUR-FLODER};
       index index.html;

       location / {
               try_files $uri $uri/ =404;
       }
}
# 把80port 轉到443
server {
    listen 80;
    server_name {YOUR-DOMAIN};
    return 301 https://$host$request_uri;
}

由上面可以看到, letencrypt 會把憑證產生在/etc/Letsencrypt下面依照你的 domain 分放不同資料夾。

再來是 docker 的啟動指令了

docker run --name test-nginx -v /etc/Letsencrypt:/etc/Letsencrypt -v ~/{YOUR_FLODER}:/usr/share/nginx/html/{FLODER-NAME} -v ~/{NGINX-CONFIG}:/etc/nginx/sites-available -d nginx

上面第一個 volume 意思就是把外部主機所產生的 ssl 憑證掛載進去 container 裡面,第二個 volume 是把 html 網頁掛載進去,第三個則是把 nginx config 掛載進去

這樣就把所有可變變數抽放在母體主機上面,但實際運作則是由 container 運作。