第一件事
硬體與環境需求
裝之前先確認,比裝到一半才發現省事得多。
| 項目 | 最低 | 建議 | 怎麼查 |
|---|---|---|---|
| 作業系統 | Ubuntu 22.04+ 或 Windows 10/11 + WSL2 | Ubuntu 22.04 LTS | cat /etc/os-release / Windows 打 winver |
| CPU | 2 核 | 4 核 | nproc / docker info 的 CPUs |
| 記憶體 | 4 GB | 8 GB | free -g / docker info 的 Total Memory |
| 磁碟可用空間 | 20 GB | 40 GB | df -h / / 檔案總管看 C 槽 |
| Docker | Engine 24+ 或 Docker Desktop,且 compose 是 v2 | docker --version 與 docker compose version 兩個都要有輸出 | |
| 架構 | x86_64 / amd64 | — | |
docker info 很可能只印出 7.6 GiB,而那才是實際可用的量。
請直接看 docker info 的數字,不要看機器規格——Docker 拿不到的核心與記憶體,
對這套服務來說等於不存在。要調高的話,在使用者家目錄建一個 .wslconfig
寫入 [wsl2] 與 memory=12GB,存檔後
wsl --shutdown 再重開 Docker Desktop。
主機挑哪一台
| 選項 | 適合 | 要注意 |
|---|---|---|
| 公司現有的檔案伺服器 / NAS 主機 | 最好。本來就 24 小時開機、有固定 IP | 要確認裝得了 Docker |
| 一台閒置的桌機 | 常見。10~20 人夠用 | 不能關機、不能休眠 |
| 某個同事的電腦 | 不建議 | 他關機、他重灌、他離職,全公司就停了 |
| 每台都裝一份 | 不要這樣做 | 十份設定、十份升級、十份出問題 |
主機一定要設定的三件事
-
關掉休眠與睡眠。 主機睡著等於全公司連不上。
Windows:控制台 → 電源選項 → 睡眠設為「永不」,硬碟關閉也設「永不」。
Ubuntu:
sudo systemctl mask sleep.target suspend.target hibernate.target - 設固定 IP。 用 DHCP 的話主機重開之後 IP 可能會變,同事的書籤就全部失效。 請在路由器上綁定,或在主機上設靜態 IP。
- 防火牆只對內網放行。 只要放行服務用的那個埠(預設 80), 而且只對內網——這台機器沒有理由讓外面連得到。
容器架構
四個容器,其中兩個連網路都沒有
「檔案不外流」在這張圖上是可以指出來的:轉檔引擎所在的網路是 internal, Docker 層級就沒有對外路由。
--scale fetcher=0 重新啟動即可。
關掉之後其他功能全部照常,只有「從網址轉 PDF」會回報不可用。
連接埠
80 埠被佔用的話,換一個就好(5 分鐘)
佔住 80 埠的多半是公司在用的東西——Windows 上常見 IIS 和 VMware,Ubuntu 上是 Apache 或 nginx。 不要把它移除,停掉它可能弄壞別人的服務。讓 Foldra 改用別的埠比較安全。
- 先確認新的埠是空的
建議 8080,不行就 8081、8090。
# Ubuntu sudo ss -ltnp | grep ':8080 ' # Windows(命令提示字元或 PowerShell) netstat -ano | findstr LISTENING | findstr /C:":8080 "
沒有任何輸出才可以用。/C:不能省——findstr 預設把搜尋字串裡的空白當成「或」, 少了/C:會把 :8090、:8080 這些不相干的埠一起印出來,看起來像被佔用了。 - 把設定檔的 LISTEN_PORT 改掉
用記事本或任何文字編輯器打開
.env, 找到LISTEN_PORT=80改成LISTEN_PORT=8080。 沒有那一行就自己加一行。改完一定要存檔。 - 重啟服務
docker compose -f docker-compose.offline.yml up -d
- 確認
最簡單的方法是直接用瀏覽器開
http://localhost:8080/health, 看到{"status":"ok", …}就成了。
http://主機IP:8080/(多了 :8080 這一段);
防火牆規則要放行 8080,不是 80。
curl 不是 curl。
它是 Invoke-WebRequest 的別名,參數完全不同,
curl -s http://localhost/health 在 PowerShell 會回一長串紅字,
看起來像服務掛了,其實只是打錯工具。在 Windows 上請改用「命令提示字元」,
或打完整的 curl.exe。不想記的話,用瀏覽器開那個網址也一樣。
多人使用
十個人一起用會不會卡?不會,但有一個設定要調
系統預設同時處理 2 件轉檔工作,其餘排隊。辦公室的實際情形是大家零星在用,2 條線多半夠。 常有人反應要等很久的話,照下表調高。
| 同時使用人數 | 建議機器 | 並行轉檔數 | 配給 API 的 CPU | 配給 API 的記憶體 | 暫存區大小 |
|---|---|---|---|---|---|
| 1~5 人 | 2 核 / 4 GB | 2(預設) | 1.5 | 1500M | 2g |
| 5~15 人 | 4 核 / 8 GB | 3 | 3.0 | 3000M | 3g |
| 15~40 人 | 8 核 / 16 GB | 6 | 6.0 | 6000M | 4g |
其他常改的設定
| 什麼時候要改 | 改哪一行 | 說明 |
|---|---|---|
| 80 埠被佔用 | LISTEN_PORT=8080 |
網址就變成 http://IP:8080/ |
| 想讓檔案更快消失 | EPHEMERAL_TTL_MINUTES=15 |
預設 60 分鐘 |
| 要處理超過 100 MB 的檔 | MAX_UPLOAD_BYTES=209715200 |
同時要調大暫存區 |
| 整台機器完全不連外網 | --scale fetcher=0 |
關掉唯一能連外的抓取器 |
分公司或不同網段
- 請 IT 開通路由——同一家公司的內網之間,通常本來就通。
- 或每個據點各裝一台。安裝包可以無限次使用,沒有數量限制,只是升級時每個據點都要跑一次。
驗收
四項,五分鐘,當著承辦人的面跑完
- 服務有起來
curl -s http://localhost/health
要看到{"status":"ok", …}。 status 不是 ok 就停下來——那不是網路問題,是系統在啟動時掃描執行環境, 發現了不該存在的元件(見第 3 項)。 - 同事連得到
在主機上查 IP(Ubuntu
hostname -I,Windowsipconfig), 在另一台電腦的瀏覽器打開http://那個IP/,看得到操作畫面就成了。 要的是 192.168. 或 10. 開頭的位址——172.17. 開頭的是 Docker 內部用的, 填那個同事一定連不到。 - 自己驗證授權合規(不必相信我們的說法)
curl -s http://localhost/health | grep licensing curl -s http://localhost/licenses
系統每次啟動都會掃描實際的執行環境, 找有沒有 GPL/AGPL 授權的元件。掃到任何一個就拒絕啟動。 第三方元件的完整清單與授權全文在交付包的LICENSES/,那個目錄不要刪。 - 功能驗收
解開
demo-pack.zip,照驗收單逐項跑一次,當著承辦人的面簽收。 範本檔涵蓋手機翻拍的採購單、含個資的員工資料、發票集錦、合約、月報表、 簡報、零件圖與夾了空白頁的掃描件——就是最容易出事的那幾類。
日常維運
IT 只需要記住三件事
# 看發生什麼事 docker compose -f docker-compose.offline.yml logs --tail 200 api # 多數問題重啟就好 docker compose -f docker-compose.offline.yml restart api # 整套重來 docker compose -f docker-compose.offline.yml down && docker compose -f docker-compose.offline.yml up -d
要備份什麼
只有 .env 一個檔案。系統不儲存任何使用者的檔案——
上傳檔與轉檔結果都放在記憶體檔案系統,過期就刪,容器一重啟就沒了。
沒有資料庫、沒有檔案倉庫、沒有東西需要定期備份。
出事的時候
執行 collect-diagnostics.sh 產生一個診斷包寄給我們。
裡面有環境資訊、容器狀態、最近 500 行 log、健康檢查結果,
以及 .env 的鍵名(值已遮蔽)。
裡面沒有任何使用者的檔案,也沒有檔名。 那不是靠這支腳本小心,是系統本來就不記檔名。所以這個診斷包可以直接寄出,不必先審。
升級
我們給一包新版本,做法跟第一次安裝一樣:解開、跑 install.sh。
舊版的映像不會被覆蓋,還留在機器上——這是為了能退回去。
回滾
rollback.sh --list 看機器上有哪些版本,
rollback.sh 退回上一版。腳本會先確認那個版本的映像真的在機器上才動手——
客戶端多半連不到外網,退到一個不存在的標籤會讓服務直接停擺。
磁碟不夠時才清舊映像,留最近兩版。 清到只剩一版,就等於沒有回滾能力了。
交付包
貴公司會收到什麼
解開之後應該看到下面這些。少任何一項都不要繼續裝——安裝腳本也會自己檢查一次。
foldra-offline-v1.x.x/ ├── images/ 四個 .tar,這是全部的程式,約 3~4 GB ├── compose/ 啟動設定 ├── web/ 網頁前端 ├── LICENSES/ 第三方授權文件(法律要求,不要刪) ├── docs/ 安裝說明、使用手冊、驗收單 ├── install.sh Linux / macOS 用 ├── install.ps1 Windows 用 ├── rollback.sh 退回上一版 ├── collect-diagnostics.sh 出事時產生診斷包 └── demo-pack.zip 驗收用的範本檔
安裝說明
給 IT 看。含環境檢查、換埠、多台電腦、防火牆、驗收、維運、升級與回滾。 Windows 與 Ubuntu 的指令差異逐項對照。
使用手冊
給實際操作的人看,不需要任何電腦背景。三個步驟、常用的十件事、 三個最容易搞混的地方、出問題時先試什麼。
驗收單
逐項可勾的表單,跑完當著承辦人的面簽收。跑不過的不算交付完成。