Openship 自架安裝教學:Ubuntu VPS、網域與 HTTPS 設定
這次把 Openship 裝到 Ubuntu VPS 上,從互動式設定、建立管理員帳號,到用自訂網域開啟後台,最後確認了 VPS 與 Cloudflare 兩端的 HTTPS。
安裝過程有一個地方需要特別確認:終端機顯示 Openship is live,後台也能開啟,仍然要另外檢查憑證是否生效。下面依照安裝順序整理操作與驗證方式。
先提醒主機規格:這次使用約 1 GB RAM、系統顯示總磁碟容量 44.1 GB 的 VPS,雖然完成了安裝,但記憶體規格太小,不適合長期跑完整 Openship 部署平台,再加上其他應用程式。 如果還在選機,可以先看 Openship、Coolify 與 VPS 規格比較。
安裝前準備
本文使用 Ubuntu 上的 Docker Compose 模式,需要:
- 可透過 SSH 登入、具備管理權限的 VPS。
- 已啟動的 Docker Engine 與 Docker Compose 外掛。
- 可以修改 DNS 的網域。
- 可供 Openship 使用的 TCP 80、443 連接埠。
以下指令在 VPS 上執行,範例網域 openship.example.com 請換成自己的網域。
確認 Docker 可以使用
docker versiondocker compose versiondocker ps若尚未安裝 Docker,先依 Docker 官方 Ubuntu 安裝文件完成安裝。若 docker ps 出現 socket 權限錯誤,先按官方 Linux post-install 步驟處理目前使用者的 Docker 權限,再進行 Openship 設定。
設定 DNS 與防火牆
在 DNS 管理介面新增 A 紀錄:
| 類型 | 名稱 | 指向 |
|---|---|---|
| A | openship | VPS 的公開 IPv4 |
若使用 Cloudflare,初次設定可以先選 DNS only(灰雲),方便直接測試 VPS。等來源站的路由與憑證正常後,再啟用橘雲代理。如果同時有 AAAA 紀錄,也要確認 IPv6 指向正確的服務入口。
雲端防火牆與 Ubuntu 主機防火牆都要允許 TCP 80、443。使用 HTTP-01 申請憑證時,Port 80 必須能連到驗證端點,詳見 Openship 網域與 SSL 排錯文件。SSH 則保留自己使用的連接埠。
先檢查主機上的監聽服務與 INPUT 規則:
sudo ss -lntpsudo iptables -L INPUT -n -v --line-numbers若 Nginx、Caddy 或其他代理已佔用 80、443,先確認它是否承載其他網站,再決定如何交由 Openship 處理入口。防火牆規則要透過目前使用的管理工具保存,避免重開機後失效。
安裝 Openship CLI 與管理後台
依 Openship 官方安裝文件,先安裝 CLI:
curl -fsSL https://get.openship.io | sh如果安裝後找不到 openship,重新開啟 SSH 工作階段,或載入安裝路徑:
export PATH="$HOME/.openship/bin:$PATH"啟動互動式設定:
openship依精靈提示設定公開入口、管理網域,以及管理員名稱、Email 和密碼。在具備 Docker 的 Linux 上,預設會使用 Compose 模式。
完成後會看到管理入口與服務狀態,輸出格式如下:
Openship is live
URL https://openship.example.comDashboard http://localhost:3001API http://localhost:4000Login [email protected] (email + password you set)Status running · Docker Compose stack (restarts on boot)用剛才設定的帳號密碼登入管理網域。這裡的 localhost:3001 指的是 VPS 本機,不是你正在操作的電腦。
再檢查平台與容器狀態:
openship statusdocker ps若容器持續重啟,先查看對應容器的日誌。容器顯示 running,也不代表資料庫已經可以接受連線;這部分可參考 Docker Compose healthcheck 與啟動順序。
後台能開啟後,確認 HTTPS 憑證
這次設定完成後,曾遇到後台可以開啟、HTTPS 卻看起來尚未生效的狀況。處理時分別檢查後台的 SSL 狀態、VPS 本機憑證和公開網址,才確認連線結果。
查看網域的 SSL 狀態
在 Openship 後台開啟自身的 App/專案,進入 Domains,確認管理網域是否存在,再查看 SSL 狀態。
依 Openship 網域教學,尚未驗證的網域先使用 Verify;若 SSL 顯示 Provisioning,使用 Recheck SSL 檢查憑證。仍未完成時,依錯誤訊息處理 DNS、驗證端點或連線問題,再使用 Renew SSL 重試。
如果收到 404 no route,則要檢查管理網域是否路由到 Dashboard。路由缺失和憑證問題要分開處理,重新申請憑證不會補上路由。
檢查 VPS 本機提供的憑證
在 VPS 執行:
openssl s_client \ -connect 127.0.0.1:443 \ -servername openship.example.com </dev/null 2>/dev/null \ | openssl x509 -noout -subject -issuer -dates檢查輸出的 subject 是否包含管理網域、issuer 是否為預期的憑證簽發者,以及 notBefore、notAfter 是否在有效期間內。
這次本機輸出確認了 Let’s Encrypt 憑證,有效期為 2026 年 10 月 8 日至 2027 年 1 月 6 日。這代表 VPS 的 443 已提供正式憑證,接著還要確認公開連線。
用 curl 驗證公開網址
curl -Iv https://openship.example.com不要加 -k,否則 curl 會跳過憑證驗證。這次公開請求得到以下結果:
SSL certificate verify ok.HTTP/2 307server: cloudflarelocation: /login?from=%2FSSL certificate verify ok. 表示這次連線的憑證驗證通過;307 搭配 /login?from=%2F,則是後台將未登入的請求導向登入頁面。
最後用瀏覽器開啟管理網域,確認登入頁面能正常載入,並登入後台。
使用 Cloudflare 時,設定 Full (strict)
VPS 的憑證與路由正常後,可以將 DNS 紀錄切成 Proxied(橘雲),再到 Cloudflare 的 SSL/TLS 加密模式選擇 Full (strict)。
Full (strict)會驗證來源站憑證的有效期、信任來源與網域匹配。此時有兩段 HTTPS:
瀏覽器 ↓ HTTPSCloudflare ↓ HTTPSVPS 上的 Openship Edge ↓Dashboard這次透過公開網域查到的簽發者是 Google Trust Services,VPS 本機則是 Let’s Encrypt。啟用代理後,瀏覽器看到的是 Cloudflare 對訪客提供的憑證,兩端簽發者不同是正常的。
切換後再執行一次 curl -Iv,確認憑證驗證通過、回應仍導向登入頁面。Full (strict) 也要在 Cloudflare 控制台確認,不能只憑公開網址能開啟就推定設定正確。
檢查 Dashboard 與 API 是否直接暴露在公網
除了管理網域,也要檢查 Dashboard 的 3001 和 API 的 4000:
docker ps --format 'table {{.Names}}\t{{.Ports}}'sudo ss -lntp若看到 0.0.0.0:3001 或 0.0.0.0:4000,表示服務綁定所有 IPv4 介面。依安裝版本限制綁定位置,或使用適合 Docker 的防火牆規則限制來源;變更後確認 Edge 仍能連到後台,再從另一台主機測試對外存取。
Docker 官方防火牆文件指出,bridge 容器發布的連接埠可能在進入 UFW 的 INPUT 規則前就被轉送。因此,不能只看主機的 INPUT 規則,就判定 Docker 連接埠已阻擋。使用 host networking 的 Edge 入口則按主機連線規則處理。
這次的 VPS 資源觀察:1 GB RAM 太小
安裝後,管理介面顯示以下用量。這是當下整台主機的狀態,不是 Openship 個別容器的用量。
| 項目 | 當時觀察 |
|---|---|
| 總記憶體 | 954.2 MB,約 1 GB 級別 |
| 已用記憶體 | 542.2 MB,約 57% |
| 總磁碟容量 | 44.1 GB |
| 已用磁碟 | 14.7 GB,約 33% |
| CPU 使用率 | 82% |
| Load Average | 3.11 / 1.85 / 1.24 |
磁碟當下仍有空間,但約 1 GB RAM 留給部署、更新和新增服務的餘裕太少。記憶體使用率 57% 只是單次觀察,不能代表建置尖峰也能承受;CPU 82% 則要配合容器用量與後續觀察,才能找出負載來源。
用以下指令檢查:
docker stats --no-streamfree -hnprocuptimedf -h先在初始化完成、閒置一段時間後記錄一次,再於部署時觀察尖峰。free -h 的 available 可用來看剩餘記憶體,Load Average 則需要搭配 CPU 核心數判讀。
如果要長期使用,我會先以 2 vCPU、4 GB RAM、40–60 GB SSD 規劃小規模自架環境,再依應用程式與建置負載調整。這是容量規劃起點,不是 Openship 官方最低需求,也不保證能承載固定數量的專案。
這次約 1 GB RAM 的 VPS 能完成安裝,但規格太小,不適合作為長期使用的完整部署平台。 正式搬服務前,先換用記憶體更充足的主機,再用一個可重建的測試服務跑過部署與更新,觀察實際尖峰用量。
參考資料: