本篇文章更新時間: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 的系統管理員角色來設定即可!

  1. 搜尋 Language 功能,找到 zh_TW,將 繁體中文 為預設(System Language、Login Locale 勾選、儲存)
  2. 搜尋 Translation Import/Export 功能選擇匯入的中文語言包(選擇放置在 iDempiere 根目錄下的那個 zh_TW_trl 目錄)
    3.搜尋 Synchronize Terminology 功能同步一次
  3. 回到 Language 選到 繁體中文 點選 Language Maintenance 功能執行一次 Add Missing Translation 程序
  4. 搜尋 Cache Reset 功能清除快取
  5. 右上角 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 的介面管理與資料庫設計工具。

所以使用情境多元,本篇主軸只放在部署端。實際上根據使用情境還會去調整的有是否需要掛上一個網域、是否需要做反向代理,又或是網路環境是對外對內等架構,再來還有備援機制等考量需要注意。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon