本篇文章更新時間:2025/10/19
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
發現過去寫的筆記中沒有包含這個上線板(Production)的部署流程,今天就來順過一次。
本篇主要目的收斂成在一台主機上把服務架設好,實際上的使用還需要顧慮到的內外網與資安架構就先暫時不討論,直接進入正題。
內容目錄
前置準備
- 一個全新安裝好的作業系統,本文使用 Ubuntu 25.04 Server 版
- 能使用 SSH 遠端連線的工具連線到部署的主機
初始化作業系統
一行指令把作業系統做好更新與安裝必要套件。
sudo apt update && apt upgrade -y && apt remove -y && apt autoremove -y && apt clean -y && apt autoclean -y && apt install curl ca-certificates screen htop zip unzip -y
安裝 PostgreSQL
使用 PostgreSQL 官方提供的套件資源來安裝 17 這版本。
# 建立存放金鑰的目錄(postgresql-common 的設定用這目錄比較常見)
sudo install -d /usr/share/postgresql-common/pgdg
# 下載金鑰到指定路徑
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc > /dev/null
# 加入 apt 套件庫清單
. /etc/os-release && sudo sh -c "echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt ${VERSION_CODENAME}-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
# 最後更新 apt 清單
sudo apt modernize-sources && sudo apt update
# 指定版本安裝,環境獨立 /etc/postgresql/XX, /usr/share/postgresql/XX (XX為版本號)
sudo apt install postgresql-17 -y
到這邊 PostgreSQL 17 已經安裝好,可以做資料庫的初始化。
# 改 postgres 帳號的預設密碼為 postgres,自定義,預設是無密碼
echo "alter user postgres password 'postgres'" | sudo su postgres -c "psql -U postgres"
編輯 /etc/postgresql/17/main/pg_hba.conf
設定檔,調整連線驗證方式
將這段:
# "local" is for Unix domain socket connections only
local all all peer
改成
# "local" is for Unix domain socket connections only
local all all scram-sha-256
如果這台資料庫主機與應用程式主機分開,資料庫要從 localhost 改對外 public 的話,調整如下:
# /etc/postgresql/17/main/postgresql.conf
#listen_addresses = 'localhost'
調整為
listen_addresses = '*'
# /etc/postgresql/17/main/pg_hba.conf
這段
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
調整為
host all all 0.0.0.0/0 scram-sha-256
host all all ::/0 scram-sha-256
到這邊,將這些調整組態重新載入: service postgresql reload
接下來登入 PostgreSQL 來建立相關帳號與資料庫:
sudo -u postgres psql
輸入以下的SQL指令:
# 先建立使用者角色
CREATE ROLE adempiere SUPERUSER LOGIN PASSWORD 'adempiere';
# 再建立資料庫並賦予角色
CREATE DATABASE idempiere WITH OWNER = adempiere ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' TEMPLATE=template0;
# 開權限
ALTER ROLE adempiere SET search_path TO adempiere, pg_catalog;
# 開啟 UUID 模組
CREATE EXTENSION "uuid-ossp";
# 退出指令
\q
# 退出後驗證登入(密碼如先前設定的 adempiere)
psql -U adempiere -h localhost -d idempiere
安裝基本環境
這邊如先前筆記 [iDempiere] Mac 開發環境建置 2025 年 OpenJDK 23 版本,可以使用 sdkman 這套來統一管理。
# 安裝 sdkman
curl -s "https://get.sdkman.io" | bash && source "/root/.sdkman/bin/sdkman-init.sh"
# 查看 sdkman 版本
sdk version
# 安裝必要的環境
sdk install java 23-open
sdk install maven
# 查看當前安裝與啟用的狀態
sdk current
# 更新 sdkman
sdk selfupdate
到這部,運作環境就解決了。
從原始碼安裝 iDempiere
從原始碼編譯安裝可以確保日後對於修正程式部分也能滿足接入部署的流程。
# 下載原始碼
git clone https://github.com/idempiere/idempiere.git
cd idempiere
git switch release-12 # 切到當前穩定版本 12
git pull # 更新程式碼到最新
# 編譯一次
mvn verify -U
# 建立對應上機版本的專案根目錄
mkdir ~/idempiere_12
# 解壓縮 & 複製種子資料庫準備匯入
jar xvf org.adempiere.server-feature/data/seed/Adempiere_pg.jar && mv Adempiere_pg.dmp ~/idempiere_12
# 複製編譯完成後的執行專案
cp ~/idempiere/org.idempiere.p2/target/products/org.adempiere.server.product/linux/gtk/x86_64/ ~/idempiere_12/ -R
# 匯入預設資料庫
cd ~/idempiere_12/ && psql -d idempiere -U adempiere -f Adempiere_pg.dmp
# 初始化設定
cd ~/idempiere_12/x86_64/ && ./console-setup-alt.sh
# 匯入預設資料庫
cd ~/idempiere_12/x86_64/utils && ./RUN_ImportIdempiere.sh
# 執行 iDempiere App 確認是否正確
cd ~/idempiere_12/x86_64/ && ./idempiere-server.sh
執行到這步驟基本上就是按照先前環境設定的資料庫等資訊填入就會可以跑出結果。
開啟瀏覽器查看: https://VPS_IP:8443/
預設管理員帳號: SuperUser
預設管理員密碼: System
確認應用程式執行結果正確後,在指令端跳出這個當前運作的程序,來改成系統程序模式。
建立 iDempiere 系統程序
使用編輯器開啟 /etc/systemd/system/idempiere.service
新建立此檔案,內容如下:
[Unit]
Description=iDempiere ERP Server
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/root/idempiere_12/x86_64
ExecStart=/root/idempiere_12/x86_64/idempiere-server.sh
Restart=on-failure
RestartSec=5
KillMode=control-group
[Install]
WantedBy=multi-user.target
存檔後,使用下面指令建立系統程序:
# 重新載入系統程序設定
systemctl daemon-reload
# 啟動服務
systemctl start idempiere
# 查看狀態
systemctl status idempiere
# 設定開機自動啟動
systemctl enable idempiere
到這步驟,可以直接下一個 reboot
指令重開機驗證看看是否重開機後有正確運作。
啟用繁體中文(zh_TW)語系
內建有這語系紀錄,但缺少了這語系的翻譯檔案,不過有台灣社群夥伴 Ray 開源的資料可以參考: iDempiere-language-zh_TW。
將 這個 zh_TW_trl 目錄 放置在 iDempiere 安裝根目錄下(本文為例就是 /root/idempiere_12/x86_64
)。
接下來就是登入 iDempiere 的系統管理員角色來設定即可!
- 搜尋 Language 功能,找到 zh_TW,將 繁體中文 為預設(System Language、Login Locale 勾選、儲存)
- 搜尋 Translation Import/Export 功能選擇匯入的中文語言包(選擇放置在 iDempiere 根目錄下的那個 zh_TW_trl 目錄)
3.搜尋 Synchronize Terminology 功能同步一次 - 回到 Language 選到 繁體中文 點選 Language Maintenance 功能執行一次 Add Missing Translation 程序
- 搜尋 Cache Reset 功能清除快取
- 右上角 Log Out 登出
安裝 REST API 外掛
這款外掛絕對是必裝,讓這套 ERP 工具更加靈活的可以整合外部工具一起對資料庫協作。
使用 Git 從原始碼抓下來
cd ~/ && git clone https://github.com/bxservice/idempiere-rest.git
這邊要注意放置的路徑需與 iDempiere 原始碼目錄並列,編譯時會引用到這樣的相對路徑。
編譯這外掛前,因爲外掛作者對 iDempiere 原始碼目錄使用大寫的 D
導致路徑不一致會出錯(Linux 路徑上大小寫是有分的),所以先做改名動作。
mv idempiere iDempiereTMP && mv iDempiereTMP iDempiere && cd idempiere-rest/ && mvn verify
安裝外掛
cp update-rest-extensions.sh ~/idempiere_12/x86_64/
cd ~/idempiere_12/x86_64/ && ./update-rest-extensions.sh file:///root/idempiere-rest/com.trekglobal.idempiere.extensions.p2/target/repository
看到「Operation completed
」且沒看到錯誤就是正確XD 接下來只需要重新啟動 iDempiere 就好
systemctl restart idempiere
驗證方式也只需要瀏覽器造訪 https://VPS_IP:8443/api/v1/auth/tokens
這路徑,看到
HTTP ERROR 405 Method Not Allowed
URI: /api/v1/auth/tokens
STATUS: 405
MESSAGE: Method Not Allowed
SERVLET: com.trekglobal.idempiere.rest.api.v1.ApplicationV1
就代表有正確啟用了!
後記
這套工具不只可以當作 ERP,也可以作為 PostgreSQL 的介面管理與資料庫設計工具。
所以使用情境多元,本篇主軸只放在部署端。實際上根據使用情境還會去調整的有是否需要掛上一個網域、是否需要做反向代理,又或是網路環境是對外對內等架構,再來還有備援機制等考量需要注意。