Instatic 自託管教學:Docker、SQLite/Postgres、Caddy HTTPS 與備份

Instatic 自託管實作指南,介紹 Docker/VPS 部署、SQLite 與 Postgres 選擇、Caddy HTTPS、持久化磁碟區、備份還原和上線驗收。

Instatic 的本篇教學圍繞著標題中的具體任務。自託管 Instatic 涉及應用程式、資料庫、上傳檔案和反向代理;備份只覆蓋資料庫會留下無法復原的附件和配置缺口。

下面使用測試環境和可撤銷資料演示。涉及帳號、金鑰、機器控制、投資或緊急通訊時,必須再做人工確認。

先決定 SQLite 還是 Postgres

這一節只處理「先決定 SQLite 還是 Postgres」。先保存目前狀態,再執行最小測試,不要同時改變多個條件。

1
docker version

對 Instatic 來說,判斷結果時必須結合這一邊界:自託管 Instatic 涉及應用程式、資料庫、上傳檔案和反向代理;備份只覆蓋資料庫會留下無法復原的附件和設定缺口。

如果結果無法重複,記錄版本、輸入和日誌,然後縮小測試範圍。

單機試用為什麼可以選 SQLite

建議按以下順序執行:

  1. 核對實際版本與來源。
  2. 使用測試帳號、測試目錄或測試設備。
  3. 執行一個可撤銷動作。
  4. 儲存輸出、退出碼或截圖。
  5. 恢復修改並重新驗證。
1
Get-ChildItem -Force .

完成標準是「單機試用為什麼可以選 SQLite」得到可核驗結果,而不是指令剛好沒有報錯。

多人長期使用為何評估 Postgres

檢查項 通過標準 停止訊號
多人長期使用為何評估 Postgres 輸入、輸出和權限範圍明確 工具自動擴大操作範圍
來源 能回到官方倉庫或原始資料 依賴未知鏡像或二手結論
安全 日誌中沒有秘密值 出現 Token、Cookie 或隱私資料
復原 能回到執行前狀態 沒有備份或撤銷方法
1
docker volume ls

出現停止訊號時先恢復,不要繼續下一步。

Docker Compose 啟動前檢查環境變數

這一節只處理「Docker Compose 啟動前檢查環境變數」。先保存目前狀態,再執行最小測試,不要同時改變多個條件。

1
git grep -n -I 'SECRET\|PASSWORD\|DATABASE_URL' -- .

對 Instatic 來說,判斷結果時必須結合這一邊界:自託管 Instatic 涉及應用程式、資料庫、上傳檔案和反向代理;備份只覆蓋資料庫會留下無法復原的附件和設定缺口。

如果結果無法重複,記錄版本、輸入和日誌,然後縮小測試範圍。

只把應用程式連接埠綁定到回環位址

建議按以下順序執行:

  1. 核對實際版本與來源。
  2. 使用測試帳號、測試目錄或測試設備。
  3. 執行一個可撤銷動作。
  4. 儲存輸出、退出碼或截圖。
  5. 恢復修改並重新驗證。
1
netstat -ano

完成標準是「只把應用程式連接埠綁定到回環位址」得到可核驗結果,而不是指令剛好沒有報錯。

第一次啟動後查看遷移日誌

檢查項 通過標準 停止訊號
第一次啟動後查看遷移日誌 輸入、輸出和權限範圍明確 工具自動擴大操作範圍
來源 能回到官方倉庫或原始資料 依賴未知鏡像或二手結論
安全 日誌中沒有秘密值 出現 Token、Cookie 或隱私資料
復原 能回到執行前狀態 沒有備份或撤銷方法
1
docker compose logs --tail 100

出現停止訊號時先恢復,不要繼續下一步。

建立測試內容並上傳一個附件

這一節只處理「建立測試內容並上傳一個附件」。先保存目前狀態,再執行最小測試,不要同時改變多個條件。

1
docker compose ps

對 Instatic 來說,判斷結果時必須結合這一邊界:自託管 Instatic 涉及應用程式、資料庫、上傳檔案和反向代理;備份只覆蓋資料庫會留下無法復原的附件和設定缺口。

如果結果無法重複,記錄版本、輸入和日誌,然後縮小測試範圍。

Caddy 只代理應用端口

建議按以下順序執行:

  1. 核對實際版本與來源。
  2. 使用測試帳號、測試目錄或測試設備。
  3. 執行一個可撤銷動作。
  4. 儲存輸出、退出碼或截圖。
  5. 恢復修改並重新驗證。
1
caddy validate --config Caddyfile

完成標準是「Caddy 只代理應用連接埠」得到可核驗結果,而不是命令剛好沒有報錯。

HTTPS 正常不代表應用程式安全

檢查項 通過標準 停止訊號
HTTPS 正常不代表應用程式安全 輸入、輸出和權限範圍明確 工具自動擴大操作範圍
來源 能回到官方倉庫或原始資料 依賴未知鏡像或二手結論
安全 日誌中沒有秘密值 出現 Token、Cookie 或隱私資料
復原 能回到執行前狀態 沒有備份或撤銷方法
1
curl.exe -I https://example.com

出現停止訊號時先恢復,不要繼續下一步。

資料庫備份與檔案備份分開執行

這一節只處理「資料庫備份與檔案備份分開執行」。先保存目前狀態,再執行最小測試,不要同時改變多個條件。

1
docker volume ls

對 Instatic 來說,判斷結果時必須結合這一邊界:自託管 Instatic 涉及應用程式、資料庫、上傳檔案和反向代理;備份只覆蓋資料庫會留下無法復原的附件和設定缺口。

如果結果無法重複,記錄版本、輸入和日誌,然後縮小測試範圍。

做一次空目錄恢復演練

建議按以下順序執行:

  1. 核對實際版本與來源。
  2. 使用測試帳號、測試目錄或測試設備。
  3. 執行一個可撤銷動作。
  4. 儲存輸出、退出碼或截圖。
  5. 恢復修改並重新驗證。
1
docker compose config

完成標準是「做一次空目錄恢復演練」得到可核驗結果,而不是指令剛好沒有報錯。

升級鏡像前固定目前標籤

檢查項 通過標準 停止訊號
升級鏡像前固定目前標籤 輸入、輸出和權限範圍明確 工具自動擴大操作範圍
來源 能回到官方倉庫或原始資料 依賴未知鏡像或二手結論
安全 日誌中沒有秘密值 出現 Token、Cookie 或隱私資料
復原 能回到執行前狀態 沒有備份或撤銷方法
1
docker compose images

出現停止訊號時先恢復,不要繼續下一步。

遷移失敗時不要重複重啟

這一節只處理「遷移失敗時不要反覆重啟」。先保存目前狀態,再執行最小測試,不要同時改變多個條件。

1
docker compose logs --since 10m

對 Instatic 來說,判斷結果時必須結合這一邊界:自託管 Instatic 涉及應用程式、資料庫、上傳檔案和反向代理;備份只覆蓋資料庫會留下無法復原的附件和設定缺口。

如果結果無法重複,記錄版本、輸入和日誌,然後縮小測試範圍。

SQLite 鎖定錯誤如何定位並發

建議按以下順序執行:

  1. 核對實際版本與來源。
  2. 使用測試帳號、測試目錄或測試設備。
  3. 執行一個可撤銷動作。
  4. 儲存輸出、退出碼或截圖。
  5. 恢復修改並重新驗證。
1
docker compose logs | Select-String -Pattern 'locked'

完成標準是「SQLite 鎖定錯誤如何定位並發」得到可核驗結果,而不是指令剛好沒有報錯。

Postgres 連線失敗分層排查

檢查項 通過標準 停止訊號
Postgres 連線失敗分層排查 輸入、輸出和權限範圍明確 工具自動擴大操作範圍
來源 能回到官方倉庫或原始資料 依賴未知鏡像或二手結論
安全 日誌中沒有秘密值 出現 Token、Cookie 或隱私資料
復原 能回到執行前狀態 沒有備份或撤銷方法
1
2
docker compose ps
docker compose logs --tail 50

出現停止訊號時先恢復,不要繼續下一步。

上線後的最終恢復清單

這一節只處理「上線後的最終恢復清單」。先保存目前狀態,再執行最小測試,不要同時改變多個條件。

1
docker compose config --quiet

對 Instatic 來說,判斷結果時必須結合這一邊界:自託管 Instatic 涉及應用程式、資料庫、上傳檔案和反向代理;備份只覆蓋資料庫會留下無法復原的附件和設定缺口。

如果結果無法重複,記錄版本、輸入和日誌,然後縮小測試範圍。

上傳目錄權限錯誤如何定位

建議按以下順序執行:

  1. 核對實際版本與來源。
  2. 使用測試帳號、測試目錄或測試設備。
  3. 執行一個可撤銷動作。
  4. 儲存輸出、退出碼或截圖。
  5. 恢復修改並重新驗證。
1
docker compose exec app id

完成標準是「上傳目錄權限錯誤如何定位」得到可核驗結果,而不是指令剛好沒有報錯。

反代後的真實客戶端 IP 是否可信

檢查項 通過標準 停止訊號
反代後的真實客戶端 IP 是否可信 輸入、輸出和權限範圍明確 工具自動擴大操作範圍
來源 能回到官方倉庫或原始資料 依賴未知鏡像或二手結論
安全 日誌中沒有秘密值 出現 Token、Cookie 或隱私資料
復原 能回到執行前狀態 沒有備份或撤銷方法
1
docker compose logs --tail 100

出現停止訊號時先恢復,不要繼續下一步。

刪除測試實例前確認備份可讀

這一節只處理「刪除測試實例前確認備份可讀」。先保存目前狀態,再執行最小測試,不要同時改變多個條件。

1
Get-Item .\backup\* -ErrorAction SilentlyContinue

對 Instatic 來說,判斷結果時必須結合這一邊界:自託管 Instatic 涉及應用程式、資料庫、上傳檔案和反向代理;備份只覆蓋資料庫會留下無法復原的附件和設定缺口。

如果結果無法重複,記錄版本、輸入和日誌,然後縮小測試範圍。

Instatic 的最終核對

  • 使用的版本和來源已經記錄。
  • 測試輸入與正式資料已經隔離。
  • 命令、配置和實際輸出能夠對應。
  • 失敗路徑至少主動測試過一次。
  • 金鑰、帳號和私人資料沒有進入 Git 或日誌。
  • 升級、停止和恢復都有明確動作。

如果仍無法解釋結果如何產生,就繼續把 Instatic 保持在測試環境,不要擴大權限或取代現有穩定流程。