一、原由
原本放在資中的 VM 的個人網頁與教材範例因 storage 掛掉而整套系統毀損,無奈在自身研究室中使用另一台已使用的主機做個人網頁。
二、增加 IP 方法
使用的主機為 Uubuntu 20.04 實體機,已有 IP 與 DN 做 AI Agent 與 RAG 之用,因此要在現有設備上增加原 VM 用 IP 並使用 virtual host 功能增加一網站,此外需要用 https 與憑證。
1. 先查使用網卡的代號
用 ifconfig -a 或 ip addr show 都可以,前者需先安裝 net-tools
2. 使用 ls /etc/netplan 查看這目錄下的設定檔名稱, 你會看到類似 01-network-manager-all.yaml 這檔名
3. 將查到的網卡代號寫到 上述的檔案中
network:
version: 2
renderer: NetworkManager
ethernets:
enp6s0: # 請改為你主機實際的網卡名稱
addresses:
- 192.168.1.79/24
- 192.168.1.80/24
gateway4: 192.168.1.254 # 保持你原本的預設網關
nameservers:
addresses:
- 1.1.1.1
server 區塊。2. 內容寫下
# HTTP 轉 HTTPS (建議)
server {
listen 192.168.1.80:80;
server_name macgyver.xxx.xxx;
location /.well-known/acme-challenge/ {
default_type "text/plain";
allow all;
root /var/www/html;
}
return 301 https://$host$request_uri;
}
# HTTPS 服務設定
server {
listen 192.168.1.80:443 ssl;
server_name macgyver.xxx.xxx;
# 網站根目錄設定 (如果是靜態網頁或 PHP)
root /var/www/macgyver;
index index.html index.php;
# SSL 憑證路徑 (請替換為 macgyver 的憑證)
ssl_certificate /etc/letsencrypt/live/macgyver.xxx.xxx/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/macgyver.xxx.xxx/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
try_files $uri $uri/ =404;
}
}
3. 為避免原本的服務誤攔 192.168.1.80 的流量 , 所以原來 AI RAG 的 nginx 檔案要明確指定IP.
sudo nano /etc/nginx/sites-available/skydragon
# HTTP 自動轉 HTTPS (針對 .79)
server {
listen 192.168.1.79:80;
server_name skydragon.xxx.xxx;
return 301 https://$host$request_uri;
}
# HTTPS 服務 (針對 .79)
server {
listen 192.168.1.79:443 ssl;
server_name skydragon.xxx.xxx;
client_max_body_size 20m;
# skydragon 的 SSL 憑證路徑
ssl_certificate /etc/letsencrypt/live/skydragon.xxx.xxx/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/skydragon.xxx.xxx/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
root /var/www/skydragon; # 或你的 RAG 助教專案目錄/Proxy 設定
index index.html;
location / {
try_files $uri $uri/ =404;
# 若是 run 在背景的服務 (例如 Port 8000),請用 proxy_pass:
# proxy_pass http://127.0.0.1:8000;
# 關鍵:啟用 WebSocket 轉發(修復 400 錯誤)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 防止長連線/RAG 思考逾時斷線
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
}
4. 原來 AI Agent 走 80 port 也要修改 nginx 檔案鎖住
server {
# 只監聽 .79 的 80 Port (OpenClaw 助理)
listen 192.168.1.79:80;
allow 192.168.1.0/24; # 限制只能由指定IP範圍連
deny all;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
5. 啟用設定並重啟 Nginx, 做 soft link 以啟用新站台:
sudo ln -s /etc/nginx/sites-available/macgyver /etc/nginx/sites-enabled/
6. 檢查 nginx 語法是否正確
sudo nginx -t
7. 重啟 nginx
sudo systemctl restart nginx
四、增加免費憑證方法
1. 執行 sudo certbot certonly --webroot -w /var/www/macgyver -d macgyver.xxx.xxx
2. 成功拿到憑證後執行 nginx -t 看語法是否正確
3. 重新載入 Nginx 套用設定, 執行 systemctl reload nginx
4. 測試憑證是否會定期更新
sudo certbot renew --dry-run
若結果有下列字串
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/macgyver.xxx.xxx/fullchain.pem (success)
/etc/letsencrypt/live/skydragon.xxx.xxx/fullchain.pem (success)
則表示成功.
5. 確認 systemd timer 自動定時任務, 執行 systemctl status certbot.timer
狀態欄位應顯示 active (waiting),且會標示下次預計執行的時間(Next: ...)。
6. 確認自動重載 Nginx hook
憑證更新後,Nginx 需要自動 reload 才能載入新憑證。請檢查 Certbot 的排程設定或 hooks,檢查 /etc/letsencrypt/cli.ini 或排程設定檔中是否有重載指令:
執行 grep -rn "deploy-hook" /etc/letsencrypt/