ERPNext v16¶
概述¶
ERPNext v16 是一套以開放源碼授權發佈的企業資源規劃(ERP)系統,由 Frappe Technologies 開發及維護。佢建基於 Frappe 框架,提供一套完整嘅業務管理工具,涵蓋會計、庫存、銷售、採購、人力資源、製造、專案管理及客戶關係管理等模組。v16 版本喺效能、使用者介面及開發者體驗上均有顯著改進,特別係對多國語言及本地化嘅支援更加完善。
ERPNext 特別適合中小型企業採用,因為佢唔單止免費,而且可以根據業務流程自由擴充。由於採用 MIT 授權,企業可以自行修改源碼,甚至將客製化功能商品化。喺現代企業數碼轉型嘅過程中,ERPNext 提供一個靈活、開放嘅替代方案,有別於傳統封閉式商業 ERP 系統。
ERPNext 嘅後端主要使用 Python 編寫,前端則採用 Frappe 自動生成嘅網頁介面,配以 Node.js 處理即時通訊及 WebSocket 功能。資料庫層面傳統上採用 MariaDB,而搜尋引擎則內建於 Frappe,但同時可以整合其他外部服務。整體架構以 Docker 容器化部署為標準做法,令系統喺唔同環境之間保持一致表現。
架構¶
ERPNext v16 嘅 Docker 部署通常包含六個主要容器,另外加一個 Redis 實例,形成一個模組化嘅服務組合。以下係每個容器嘅角色:
| 容器名稱 | 功能 |
|---|---|
| mariadb | 主資料庫,存放所有業務數據 |
| backend | 執行 Frappe 後端 Python 程序,處理 HTTP API 及背景工作 |
| frontend | 由反向代理(通常係 nginx)組成,提供靜態檔案及轉發請求 |
| websocket | 透過 Node.js 處理即時通知及多人協作 |
| worker | 使用 RQ(Redis Queue)執行非同步工作,例如電郵發送、報表產生 |
| scheduler | 定時任務調度器,負責 cron 類型嘅週期性作業 |
另外,Redis 會以 redis-main 容器啟動,作為快取及訊息佇列嘅中樞。Backend、worker 同 scheduler 都會連接呢個 Redis 實例。
六個容器嘅協作流程大致如下:使用者瀏覽器嚮 frontend(nginx)發出請求,nginx 將動態請求轉交 backend;backend 讀寫 mariadb,同時用 redis-main 做 session 快取。需要非同步處理嘅任務會被放入 Redis 佇列,由 worker 或 scheduler 取走執行。WebSocket 服務保持長連接,向用戶端推送即時數據。呢種分離架構令每個組件都可以獨立伸縮,例如喺高峰時間可以增加 worker 容器數目。
部署(Docker Compose 片段)¶
以下係一個簡化嘅 Docker Compose 部署片段,展示核心服務嘅定義。實際生產環境需要加上環境變數磁碟區及網絡設定。
version: "3.7"
services:
redis-main:
image: redis:6.2-alpine
mariadb:
image: mariadb:10.6
environment:
MYSQL_ROOT_PASSWORD: rootsecret
backend:
image: frappe/erpnext:v16
depends_on:
- mariadb
- redis-main
volumes:
- sites:/home/frappe/frappe-bench/sites
frontend:
image: frappe/erpnext:v16
command: ["nginx"]
ports:
- "8080:80"
depends_on:
- backend
websocket:
image: frappe/erpnext:v16
command: ["node", "apps/frappe/socketio.js"]
ports:
- "3000:3000"
worker:
image: frappe/erpnext:v16
command: ["bench", "worker"]
scheduler:
image: frappe/erpnext:v16
command: ["bench", "schedule"]
volumes:
sites:
使用 docker compose up -d 即可啟動整套系統。首次執行時需要建立網站,指令可以喺 backend 容器內執行。
配置與環境變數¶
ERPNext 嘅設定主要分為三個層次:環境變數、site_config.json 同 Frappe 應用程式內嘅「系統設定」。喺 Docker 部署中,環境變數如 MARIADB_HOST、REDIS_CACHE、REDIS_QUEUE 等會影響容器之間嘅連接。
每個網站(site)嘅設定存放於 /home/frappe/frappe-bench/sites/<site_name>/site_config.json。常見設定包括:
{
"db_name": "erpnext_db",
"db_password": "strong_password",
"admin_password": "admin_secret",
"developer_mode": 0,
"server_script_enabled": 0
}
另外可以透過 bench set-config 指令調整設定,例如:
bench --site mysite set-config developer_mode 1
如需修改負載平衡或外部域名,則可以喺 frontend 容器嘅 nginx 設定中處理。設定完成後須要重新啟動相關容器。
維運與監控¶
問:如何備份 ERPNext?
答:可以使用 bench backup,佢會自動備份資料庫及相關檔案。備份檔案會存放於 sites/backups/ 目錄,建議將該目錄映射到外部儲存。
問:點解 worker 無處理任務?
答:檢查 Redis 連線是否正常,以及 worker 容器日誌有冇報錯。亦要確認 Redis 佇列名稱與 worker 訂閱一致。
問:可以將 MariaDB 換成 postgres 嗎?
答:官方支援有限,ERPNext 主要使用 MariaDB/MySQL。Postgres 目前並非官方主要支援,建議沿用 MariaDB。
問:如何升級到更新版本?
答:一般係拉取新嘅 Docker 映像,然後執行 bench migrate。升級前務必完整備份。
問:點樣增加 worker 數量?
答:喺 Compose 檔案中將 worker 服務設為 deploy.replicas,或者手動啟動多個 worker 容器。留意共用 Redis 佇列即可。
問:前端頁面載入好慢,點算?
答:檢查 Redis 快取設定,並確認 nginx 已啟用 gzip 壓縮。亦可以考慮用 CDN 加速靜態資源。
ERPNext 配合 docker 技術,大大簡化咗部署同維護流程。對於尋求高度掌控數據同業務邏輯嘅企業,ERPNext v16 係一個值得考慮嘅現代化開源方案。
常見問題¶
問:如何備份 ERPNext?
答:可以使用 bench backup,佢會自動備份資料庫及相關檔案。備份檔案會存放於 sites/backups/ 目錄,建議將該目錄映射到外部儲存。
問:點解 worker 無處理任務? 答:檢查 Redis 連線是否正常,以及 worker 容器日誌有冇報錯。亦要確認 Redis 佇列名稱與 worker 訂閱一致。
問:可以將 MariaDB 換成 PostgreSQL 嗎? 答:官方支援有限,ERPNext 主要使用 MariaDB/MySQL。PostgreSQL 並非官方主要支援,建議沿用 MariaDB。
問:如何升級到更新版本?
答:一般係拉取新嘅 Docker 映像,然後執行 bench migrate。升級前務必完整備份。
相關鏈接¶
- docker docker-compose MariaDB redis cloudflare-tunnel infisical Frappe