跳轉到

一、安裝前的主機需求

這章在講什麼:這台機器夠不夠格裝 Guidant AI。

就像搬進新辦公室之前要先確認「電夠不夠、網路通不通、門進得去」,安裝程式在動任何東西之前,也會把整台機器檢查一遍。本章逐項說明它在檢查什麼、不合格會怎樣、以及怎麼補。

什麼時候看:裝機前必讀。想先確認機器沒問題再動手,跑 sudo ./install.sh --check-only 就好——那個指令只看不改,很安全。

檢查項目分成兩類,先分清楚可以省很多焦慮:

  • 硬性前提:不符合就裝不起來,安裝程式會擋下不讓您繼續。
  • 建議值:不符合只會印一行警告,安裝照常進行——影響的是快不快、穩不穩,不是能不能用。

1.1 硬性前提(不符合會被擋下)

要檢查的 要求是什麼 自己先確認的指令
作業系統 Linux uname -s 應回 Linux
CPU 架構 x86_64(amd64),一般伺服器用的架構 uname -m 應回 x86_64
Docker Engine 20.10 以上,而且服務正在執行 docker version
Docker Compose plugin v2(指令是 docker compose,中間是空格不是減號) docker compose version
機器識別碼 /etc/machine-id 存在且不是空檔 cat /etc/machine-id 應回一串 32 位英數字
網路埠 80 與 443 沒有被別的程式佔用(也可以改用其他埠) sudo ss -ltn
資料目錄 建得起來、寫得進去(預設 /srv/guidant-ai sudo 執行就會自動處理
系統指令 openssl awk sed grep df 都在 一般發行版預設都有
執行身分 必須用 sudo 執行

埠(port) 是主機上的「門牌號碼」——同一台機器可以跑很多服務,靠埠號區分誰是誰。一個埠同一時間只能給一個程式用,所以要先確認 80 和 443 沒被佔走。

這一步在做什麼:把上面所有項目一次檢查完,不做任何變更。

sudo ./install.sh --check-only

成功長什麼樣:畫面上每一項會標 (通過)、(警告,可以繼續)或 (不通過,要修),最後一行是總結。

失敗長什麼樣:出現一個或多個 它會一次把所有問題列齊,不是撞到第一個就停——請把所有 一起修完再重跑,不要修一個跑一次。


1.2 為什麼一定要 sudo

結論:因為安裝要動到系統層級的東西,一般帳號權限不夠。

具體來說,安裝要在 /srv 下建立系統目錄、寫入只有管理員讀得到的設定檔、設定容器讀得到的檔案擁有者,還要操作 Docker。這些都需要系統管理員權限。

好消息是:sudo 執行之後,目錄與檔案的擁有者全部由安裝程式自己設好——您不需要事先 mkdir,也不需要事後 chown

唯一不需要 sudo 的是看用法:./install.sh --help


1.3 Docker 沒有安裝怎麼辦

先說結論:安裝程式不會替您裝 Docker,它只會擋下並告訴您缺什麼。

這是刻意的。Docker 是主機層級的基礎軟體,由系統管理員依貴單位的政策自行安裝比較妥當——GitLab 等同類型產品的安裝程式也是同樣做法。

有網路的主機

以下指令依貴單位的 Linux 發行版擇一。每一種都需要 docker-compose-plugin(它提供 docker compose 指令),不是舊版那個獨立的 docker-compose

這幾行在做什麼:把 Docker 官方套件庫加進系統,然後安裝 Docker 與相關元件。

Ubuntu / Debian

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Debian 主機請把上面兩處 linux/ubuntu 改成 linux/debian

RHEL / Rocky Linux / AlmaLinux / CentOS Stream

sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

SUSE Linux Enterprise / openSUSE

sudo zypper install -y docker docker-compose

SUSE 官方套件庫的 docker-compose 已經是 v2 版,也提供 docker compose 子命令。裝完請用 docker compose version 確認。

安裝完成後(所有發行版共通)

這三行在做什麼:第一行讓 Docker 開機自動啟動並立刻啟動它,後兩行確認版本夠新。

sudo systemctl enable --now docker
docker version            # 應顯示 Server 版本 20.10 以上
docker compose version    # 應顯示 v2 以上

成功長什麼樣:後兩行各印出一段版本資訊,數字符合上面的要求。

🔴 systemctl enable 這一步不要省略。 沒有設定開機自起,主機重新開機後整套系統不會自動回來——而且您會以為是系統壞了。安裝程式檢查到未設定時會印警告,但不會擋下安裝。

封閉網路(沒有外網)的主機

封閉網路(air-gap) 指的是這台機器完全連不到網際網路,只在貴單位內部網路裡。這在政府與金融機關很常見,本系統完整支援。

沒有網路就下載不到 Docker 官方套件,請從下面三條擇一:

(A) 用發行版自帶的套件庫(貴單位有內部鏡像站時)——多數發行版內建的套件庫就有 Docker:

sudo apt-get install -y docker.io docker-compose-v2      # Debian / Ubuntu
sudo dnf -y install docker podman-docker                  # RHEL 系(需確認版本 ≥ 20.10)

(B) 從有網路的機器下載離線安裝包,再帶進來

  1. 在有網路的同發行版、同版本機器上下載套件:
  2. Debian / Ubuntu:sudo apt-get install --download-only docker-ce docker-ce-cli containerd.io docker-compose-plugin,套件會落在 /var/cache/apt/archives/*.deb
  3. RHEL 系:sudo dnf download --resolve docker-ce docker-ce-cli containerd.io docker-compose-plugin
  4. .deb / .rpm 檔複製到目標主機(隨身碟即可)。
  5. 安裝:sudo dpkg -i *.deb(Debian 系)或 sudo rpm -Uvh *.rpm(RHEL 系)。

(C) 用 Docker 官方的靜態二進位包(不分發行版,適合極精簡的系統)

https://download.docker.com/linux/static/stable/x86_64/ 下載 docker-<版本>.tgz,以及 compose plugin(https://github.com/docker/compose/releases),依官方說明解開放置。這條路需要自己寫開機啟動設定,建議在前兩條都行不通時才用

三條路完成後同樣要跑 sudo systemctl enable --now docker,並確認 docker compose version 有輸出。


1.4 /etc/machine-id:最容易忽略、後果最隱蔽的一項

一句話:這個檔是這台機器的身分證號。授權檔是綁在這台機器上的,而「這台機器是誰」就是從這個檔算出來的。

這一步在做什麼:確認身分證號存在。

cat /etc/machine-id

成功長什麼樣:回一串 32 個字元的英數字。

失敗長什麼樣:空白一行,或顯示檔案不存在。這種情形要先處理才能裝。

怎麼補(極精簡的容器化基底系統偶爾會缺,兩個指令擇一):

sudo systemd-machine-id-setup
# 或(沒有 systemd 時)
sudo sh -c 'dbus-uuidgen > /etc/machine-id'

🔴 只在「本來就沒有」的情況下補。

已經有值的機器絕對不要重新產生——重新產生等於這台機器換了一張身分證,既有的授權檔會立刻失效,必須重新向原廠申請。這比缺檔還糟糕。

也因為這個原因,安裝程式不會自動替您產生,只會擋下並提示。

缺檔時硬裝會怎樣(值得知道,因為症狀完全不指向真因):Docker 會把掛載點建成一個目錄,系統讀不到身分證號,只好退而用網路卡位址代替——而容器每次重啟位址都不一樣,於是機器碼每重啟一次就變一次,原廠簽發的授權檔永遠對不上。您會以為是授權出了問題。所以務必事前檢查。


1.5 硬體建議值(不足只警告,不擋安裝)

項目 建議值 不足時會怎樣
磁碟可用空間 40 GB 以上(看的是資料目錄所在的那個分割區,不是根目錄) 映像檔約 3 GB,其餘是資料庫、上傳檔、記錄檔與備份。空間耗盡時資料庫會停止寫入
記憶體 8 GB 以上 可能回應緩慢;匯入大檔或匯出報表時可能因記憶體不足被系統強制終止
CPU 4 核以上 多人同時使用、或背景在跑分析時會明顯變慢

不足時安裝程式會印黃色警告然後繼續安裝——測試環境、小型試用、切一半的虛擬機都是正常的使用情境,不應該被建議值擋住。

但警告內容請留意:日後若出現效能問題,要能連回這裡。


1.6 時區

主機的時區應該跟系統部署的時區一致(預設 Asia/Taipei)。

這一步在做什麼:查目前設定的時區。

timedatectl show -p Timezone --value

成功長什麼樣:回 Asia/Taipei(或貴單位實際使用的時區)。

不一致時安裝程式會印警告。建議統一——系統內部有時間比對的邏輯(例如判斷檢測 Agent「是不是還在線」),時區不一致會讓某些判定出現偏差,而這種故障很難從症狀連回時區。

要改用其他時區,在安裝設定檔的 TZ 欄指定(見 第二章)。


1.7 網路埠

結論:系統對外只開一個入口。

只有 guidant-fe(網站)的 80 與 443 對外。其餘服務(資料庫、Redis、後端、檔案儲存)都躲在容器內部網路裡,不對外開放任何埠

這一步在做什麼:確認 80 與 443 沒被佔用。

sudo ss -ltn | grep -E ':(80|443)\s'    # 沒有輸出=沒有被佔用

成功長什麼樣:什麼都沒印出來。

失敗長什麼樣:印出一行或多行,代表已經有別的服務(例如既有的 nginx、Apache)在用那個埠。這時可以在安裝時改用其他埠——見 第二章 2.5


1.8 這台機器上已經有一套 Guidant AI 了?

安裝程式會偵測資料目錄裡是不是已經有一套安裝(找 guidant.envcerts/server.key 這兩個檔)。有就停下、絕不覆寫,並給您四條明確的路:

  • 換版 → 改用 sudo ./install.sh --upgrade(見 第五章
  • 要在這台機器重裝一套 → 先備份、確認舊資料真的不再需要之後清空該目錄(🔴 資料會永久消失),再重跑
  • 要與既有安裝並存 → 換一個資料目錄
  • 先前安裝在後段失敗、要沿用已產生的設定重跑 → 依畫面提示的指令執行

為什麼擋得這麼嚴:覆寫既有安裝的設定檔,會導致原本的資料庫連不上、加密過的資料永遠解不開,而且不會有任何提示。這就是為什麼安裝程式在這件事上完全不肯自作主張。