安裝套件
更新 apt 套件工具。
| 1
 | sudo apt update && sudo apt upgrade
 | 
新增套件儲存庫。
| 1
 | sudo add-apt-repository ppa:certbot/certbot
 | 
安裝 certbot 套件。
| 1
 | sudo apt install certbot
 | 
新增使用萬用字元的網域憑證。
| 1
 | sudo certbot -d *.epoch.tw --manual --preferred-challenges dns certonly --server https://acme-v02.api.letsencrypt.org/directory
 | 
第一次會出現類似以下訊息:
| 12
 3
 4
 
 | lease deploy a DNS TXT record under the name_acme-challenge.frdm.info with the following value:
 
 xxxxxxxxxxxxxxxxxx
 
 | 
將內容複製起來,在 DNS 新增一筆 TEXT 紀錄:
| Hostname | Value | 
| _acme-challenge | xxxxxxxxxxxxxxxxxx | 
使用 DNS Lookup Text Record 工具查看紀錄是否已生效;生效後,按下 Enter。
將 /etc/letsencrypt/live 資料夾的 epoch.tw 資料夾改名為 *.epoch.tw。
設定 Nginx
修改 Laradock 資料夾的 docker-compose.yml 檔。
| 12
 
 | cd Laradockvi docker-compose.yml
 
 | 
設定 nginx 的 volumes 參數,新增一個 letsencrypt 映射目錄:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | nginx:
 build:
 context: ./nginx
 args:
 - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER}
 - PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT}
 - CHANGE_SOURCE=${CHANGE_SOURCE}
 volumes:
 - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG}
 - ${NGINX_HOST_LOG_PATH}:/var/log/nginx
 - ${NGINX_SITES_PATH}:/etc/nginx/sites-available
 - ${NGINX_SSL_PATH}:/etc/nginx/ssl
 - /etc/letsencrypt/:/var/letsencrypt
 ports:
 - "${NGINX_HOST_HTTP_PORT}:80"
 - "${NGINX_HOST_HTTPS_PORT}:443"
 depends_on:
 - php-fpm
 networks:
 - frontend
 
 | 
將要安裝 SSL 憑證的 Nginx 設定檔改為:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 
 | server {listen 80;
 listen [::]:80;
 server_name json.epoch.tw;
 return 301 https://$server_name$request_uri;
 }
 
 server {
 
 # For https
 listen 443 ssl;
 listen [::]:443 ssl;
 ssl_certificate /var/letsencrypt/live/*.epoch.tw/fullchain.pem;
 ssl_certificate_key /var/letsencrypt/live/*.epoch.tw/privkey.pem;
 
 server_name json.epoch.tw;
 root /var/www/json-editor/public;
 index index.php index.html index.htm;
 
 location / {
 try_files $uri $uri/ /index.php$is_args$args;
 }
 
 location ~ \.php$ {
 try_files $uri /index.php =404;
 fastcgi_pass php-upstream;
 fastcgi_index index.php;
 fastcgi_buffers 16 16k;
 fastcgi_buffer_size 32k;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 #fixes timeouts
 fastcgi_read_timeout 600;
 include fastcgi_params;
 }
 
 location ~ /\.ht {
 deny all;
 }
 
 location /.well-known/acme-challenge/ {
 root /var/www/letsencrypt/;
 log_not_found off;
 }
 
 error_log /var/log/nginx/json_error.log;
 access_log /var/log/nginx/json_access.log;
 }
 
 | 
- 監聽 443 埠號的區段,若有 ipv6only=on的設定的話,需要刪除。
重啟 Nginx。
| 1
 | docker-compose restart nginx
 |