跳轉至

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_HOSTREDIS_CACHEREDIS_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。升級前務必完整備份。

相關鏈接