Foldra 企業離線版

給 IT 的導入資訊

一台主機、一個能執行 docker 的帳號,全程不碰網路

這一頁是給實際要動手的人看的。安裝要多久,主要看主機讀取映像檔的速度—— 這個數字我們不先講,導入當天實際量給貴公司看。 完整的《IT 導入手冊》會隨交付包附上,這裡先把採購階段最需要確認的部分攤開。

第一件事

硬體與環境需求

裝之前先確認,比裝到一半才發現省事得多。

項目 最低 建議 怎麼查
作業系統 Ubuntu 22.04+ 或 Windows 10/11 + WSL2 Ubuntu 22.04 LTS cat /etc/os-release / Windows 打 winver
CPU2 核4 核 nprocdocker info 的 CPUs
記憶體4 GB8 GB free -gdocker info 的 Total Memory
磁碟可用空間20 GB40 GB df -h / / 檔案總管看 C 槽
Docker Engine 24+ 或 Docker Desktop,且 compose 是 v2 docker --versiondocker compose version 兩個都要有輸出
架構x86_64 / amd64
Windows + Docker Desktop 的陷阱: WSL2 預設只分給 Docker 一半的記憶體(上限 8 GB)。 所以一台 16 GB 的機器,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 層級就沒有對外路由。

貴公司的主機(Docker) 內網的同事 瀏覽器 → 80 埠 edge 網路 Caddy 網頁伺服器 Apache-2.0 :80 抓取器 網址 → PDF 唯一能連外的 可以關掉 網際網路 只有抓取器走得到 關掉抓取器後: 整台機器完全斷外網 internal 網路 · 沒有對外路由(internal: true) 轉檔引擎 OCR · 去灰底 · 遮蔽 唯讀檔案系統 Office 引擎 LibreOffice(隔離呼叫) 唯讀檔案系統 tmpfs 記憶體暫存 60 分鐘抹除 這三個容器連不到網際網路,不是設定上禁止,是網路拓樸上沒有那條路。 容器本身是唯讀的:程式跑起來之後,連自己的檔案系統都改不了。 這台機器上沒有 · 資料庫 · 檔案倉庫 · 使用紀錄 · 檔名紀錄 所以要備份的 只有一個 .env 設定檔。
圖 4 · 容器架構。 關掉抓取器只要一行指令,加上 --scale fetcher=0 重新啟動即可。 關掉之後其他功能全部照常,只有「從網址轉 PDF」會回報不可用。

連接埠

80 埠被佔用的話,換一個就好(5 分鐘)

佔住 80 埠的多半是公司在用的東西——Windows 上常見 IIS 和 VMware,Ubuntu 上是 Apache 或 nginx。 不要把它移除,停掉它可能弄壞別人的服務。讓 Foldra 改用別的埠比較安全。

  1. 先確認新的埠是空的 建議 8080,不行就 8081、8090。
    # Ubuntu
    sudo ss -ltnp | grep ':8080 '
    
    # Windows(命令提示字元或 PowerShell)
    netstat -ano | findstr LISTENING | findstr /C:":8080 "
    沒有任何輸出才可以用。 /C: 不能省——findstr 預設把搜尋字串裡的空白當成「或」, 少了 /C: 會把 :8090、:8080 這些不相干的埠一起印出來,看起來像被佔用了。
  2. 把設定檔的 LISTEN_PORT 改掉 用記事本或任何文字編輯器打開 .env, 找到 LISTEN_PORT=80 改成 LISTEN_PORT=8080。 沒有那一行就自己加一行。改完一定要存檔。
  3. 重啟服務
    docker compose -f docker-compose.offline.yml up -d
  4. 確認 最簡單的方法是直接用瀏覽器開 http://localhost:8080/health, 看到 {"status":"ok", …} 就成了。
換埠之後有兩件事會跟著變,忘記的話同事會連不進來: 給同事的網址要改成 http://主機IP:8080/(多了 :8080 這一段); 防火牆規則要放行 8080,不是 80。
PowerShell 裡的 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.51500M2g
5~15 人4 核 / 8 GB 33.03000M3g
15~40 人8 核 / 16 GB 66.06000M4g
不要把並行數調得比實體核心數還高。 轉檔吃的是 CPU,開得比核心多不會變快,只會讓每一件都變慢。

其他常改的設定

什麼時候要改改哪一行說明
80 埠被佔用LISTEN_PORT=8080 網址就變成 http://IP:8080/
想讓檔案更快消失EPHEMERAL_TTL_MINUTES=15 預設 60 分鐘
要處理超過 100 MB 的檔MAX_UPLOAD_BYTES=209715200 同時要調大暫存區
整台機器完全不連外網--scale fetcher=0 關掉唯一能連外的抓取器

分公司或不同網段

  • 請 IT 開通路由——同一家公司的內網之間,通常本來就通。
  • 或每個據點各裝一台。安裝包可以無限次使用,沒有數量限制,只是升級時每個據點都要跑一次。
不要為了讓分公司連得到,就把這台機器開到網際網路上。 那等於把「檔案不出公司」這件事整個放棄掉了。真的需要跨地點,請用貴公司既有的 VPN。

驗收

四項,五分鐘,當著承辦人的面跑完

  1. 服務有起來
    curl -s http://localhost/health
    要看到 {"status":"ok", …}。 status 不是 ok 就停下來——那不是網路問題,是系統在啟動時掃描執行環境, 發現了不該存在的元件(見第 3 項)。
  2. 同事連得到 在主機上查 IP(Ubuntu hostname -I,Windows ipconfig), 在另一台電腦的瀏覽器打開 http://那個IP/,看得到操作畫面就成了。 要的是 192.168. 或 10. 開頭的位址——172.17. 開頭的是 Docker 內部用的, 填那個同事一定連不到。
  3. 自己驗證授權合規(不必相信我們的說法)
    curl -s http://localhost/health | grep licensing
    curl -s http://localhost/licenses
    系統每次啟動都會掃描實際的執行環境, 找有沒有 GPL/AGPL 授權的元件。掃到任何一個就拒絕啟動。 第三方元件的完整清單與授權全文在交付包的 LICENSES/,那個目錄不要刪。
  4. 功能驗收 解開 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 的指令差異逐項對照。

使用手冊

給實際操作的人看,不需要任何電腦背景。三個步驟、常用的十件事、 三個最容易搞混的地方、出問題時先試什麼。

驗收單

逐項可勾的表單,跑完當著承辦人的面簽收。跑不過的不算交付完成。

安裝前貴公司只需要給我們五樣東西: 公司名稱(授權書要用)、主要聯絡人 Email、 預計在內網使用的 IP 或網域、 內網 SSL 憑證(要用 https 的話;沒有的話我們可以協助產生自簽憑證)、 以及伺服器作業系統與 Docker 的確認。就這樣。

硬體或導入有問題,直接問

不確定現有的伺服器夠不夠、或是想確認某個環節怎麼走,留個訊息就好。 客服信箱:goodjay0228@gmail.com

聯絡客服詢問導入