ติดตั้ง ERPNext 16 บน Ubuntu 24.04
บทความนี้จะแนะนำวิธี ติดตั้ง ERPNext 16 ซึ่งเป็นเวอร์ชั่นล่าสุด โดยจะติดตั้ง บน Ubuntu 24.04 ด้วยคลาวด์ของ AWS EC2 หรือ Hetzner Cloud

ถ้าคุณกำลังมองหาโปรแกรม ERP มาใช้งานในองค์กร แบบฟรีๆ ผมขอแนะนำโปรแกรม ERPNext ซึ่งเป็น Open Source เราสามารถนำมาใช้ได้ฟรี เพียงแต่อาจมีค่าใช้จ่ายด้าน Server นิดหน่อย ซึ่งขอแนะนำให้ ติดตั้ง บน Ubuntu 24.04 โดยบทความนี้จะแนะนำวิธี ติดตั้ง ERPNext 16 ซึ่งเป็นเวอร์ชั่นล่าสุด โดยจะติดตั้ง บน Ubuntu 24.04 ด้วยคลาวด์ของ AWS EC2 หรือ Hetzner Cloud
สิ่งที่ต้องเตรียม
- Python 3.12+ (Default python บน Ubuntu 24.04 คือ Python 3.12)
- pip
- Node.js 20+
- Redis 7
- MariaDB 10.11.x หรือ 11.x
- yarn
- wkhtmltopdf
- git
- cron
- NGINX
สเปคฮาร์ดแวร์ขั้นต่ำ
- 2 vCPU Core
- 4 GB RAM
- 50 GB Storage
แอพที่จะติดตั้งบน ERPNext
- Frappe
- ERPNext
- HRMS
- Payments
- print_designer
ก่อนติดตั้ง Frappe
สร้างบัญชีผู้ใช้ใหม่บน Ubuntu 24.04
เมื่อเริ่มใช้งาน Ubuntu ใหม่ๆ ต้องเริ่มด้วยการ Update packages ก่อนครับ
sudo apt-get update && sudo apt-get upgrade -y
เปลี่ยน TimeZone ให้เปิดดู TimeZone ด้วยคำสั่ง
date
ถ้า TimeZone ไม่ตรงกับที่เราต้องการ ให้เปลี่ยนได้เลยครับ เช่น
timedatectl set-timezone "Asia/Bangkok"
อาจพิจารณาเปิดพอร์ตเหล่านี้ครับ
sudo ufw allow 22,25,143,80,443,3306,3022,8000/tcp
sudo ufw enable
Multiple Bench
ในกรณีที่เราต้องการใช้งาน Multi-Bench เราจะรันคำสั่ง bench init หลายครั้ง ซึ่งแต่ละครั้ง frappe bench จะสร้างโฟลเดอร์แยกออกไป แต่ละโฟลเดอร์จะไม่เกี่ยวกัน จะมี Environment เป็นของตัวเอง เช่น
bench init frappe-bench-1
bench init frappe-bench-2
ในกรณีนี้ frappe bench จะสร้างพอร์ตใหม่ให้เราอัตโนมัติ เช่น
frappe-bench-1 ได้พอร์ต 8000, 9000, 13000, 12000, 11000
frappe-bench-2 ได้พอร์ต 8001, 9001, 13001, 12001, 11001
เราอาจพิจารณาใส่พอร์ตเหล่านี้ เพิ่มเติมเข้าไปใน UFW
เมื่ออัพเดท Ubuntu เสร็จแล้ว สร้างบัญชีผู้ใช้ใหม่
sudo adduser frappe
sudo usermod -aG sudo frappe
su frappe
cd /home/frappe
เมื่อมีบัญชีผู้ใช้ใหม่แล้ว ให้ติดตั้ง Python ครับ Ubuntu 24.04 มาพร้อมกับ Python 3.12 เราสามารถใช้งานได้เลย
ติดตั้ง Python Dependencies
sudo apt-get install python3-dev python3-setuptools python3-pip python3-distutils python3-venv
ติดตั้ง pip
sudo apt install python3-pip
python3 -m pip install --upgrade pip
NodeJS
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
ในกรณีใช้ Zsh
source ~/.zshrc
nvm install 20
sudo apt-get install npm
หรือถ้าใช้ Bash
source ~/.bashrc
nvm install 20
sudo apt-get install npm
Redis Server
ติดตั้ง Redis Server เพื่อจัดการ Cache
sudo apt-get install redis-server
ติดตั้ง MariaDB
MariaDB ที่ใช้สำหรับ ERPNext เวอร์ชั่น 16 ทาง Frappe แนะนำว่าต้องใช้ MariaDB เวอร์ชั่น 10.11.x ขึ้นไป
sudo apt-get install software-properties-common
sudo apt install mariadb-server mariadb-client
โปรแกรมจิปาถะต่างๆ
sudo apt-get install xvfb libfontconfig wkhtmltopdf
sudo apt-get install libmysqlclient-dev curl
ตั้งค่า MariaDB Server
sudo mysql_secure_installation
ต้องมี sudo ด้วยครับ
หลังใช้คำสั่งนี้ จะมีคำถามเด้งขึ้นมาให้ตอบตามนี้ครับ
-
Enter current password for root: กดปุ่ม Enter ผ่านได้เลยครับเพราะเรายังไม่มีพาสเวิร์ด
-
Switch to unix_socket authentication [Y/n]: Y
-
Change the root password? [Y/n]: Y It will ask you to set new MySQL root password at this step. This can be different from the SSH root user password.
-
Remove anonymous users? [Y/n] Y
-
Disallow root login remotely? [Y/n] N (ตอบ N เพราะในอนาคตเราจะใช้โปรแกรมวิเคราะห์ข้อมูล Metabase เชื่อมต่อดาต้าเบสแบบ remotely)
-
Remove test database and access to it? [Y/n] Y
-
Reload privilege tables now? [Y/n] Y
แก้ไขค่า config ใน mysql
sudo nano /etc/mysql/mariadb.conf.d/erpnext.cnf
ให้คัดลอกโค้ดนี้ใส่เข้าไปในไฟล์
[mysqld]
innodb-file-format=barracuda
innodb-file-per-table=1
innodb-large-prefix=1
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
และ Enable Remote Access โดยเข้าไปที่ไฟล์ 50-server.cnf
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
ให้แก้ bind-address = 127.0.0.1 เป็น bind-address = 0.0.0.0
แล้วล็อกอินไปที่ MariaDB
mysql -u root -p
ใส่รหัสผ่าน
เสร็จแล้วจะเข้ามาที่หน้าจอ MariaDB Command Line
ให้รันคำสั่ง ตามโค้ดด้านล่างนี้
MariaDB [(none)]> SELECT host,user FROM mysql.user;
+-----------+---------------+
| Host | User |
+-----------+---------------+
| localhost | mariadb.sys |
| localhost | mysql |
| localhost | root |
+-----------+---------------+
MariaDB [(none)]> CREATE USER 'root'@'%' IDENTIFIED BY 'your-password';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> EXIT;
เสร็จแล้วให้รีสตาร์ท MariaDB Server
sudo systemctl restart mariadb
yarn และ git
sudo apt-get install git
sudo npm install -g yarn
สำหรับคำสั่ง npm install ถ้าใช้ sudo แล้วไม่เวิร์ค ให้ตัด sudo ออก
npm install -g yarn
เริ่มติดตั้ง Frappe
sudo -H pip3 install frappe-bench --break-system-packages
bench --version
หมายเหตุ: ใน Ubuntu 24.04 ต้องใส่
--break-system-packagesเพื่อติดตั้ง pip packages ระดับ system
ตอนนี้เรามี bench cli บน Ubuntu 24.04 เรียบร้อยแล้ว สามารถใช้คำสั่ง bench ได้เลย
bench init frappe-bench --frappe-branch version-16 --python python3.12
คำสั่งนี้สำคัญนะครับ เราต้องระบุ python เวอร์ชั่น 3.12 เข้าไปใน bench init ด้วย
cd frappe-bench
sed -i '/web:/ s/$/ --noreload/' Procfile
pip3 install honcho
yarn add node-sass
sudo chmod -R o+rx /home/frappe
bench start
สร้าง เว็บไซต์บน Frappe
bench new-site yourdomain.com
อย่าลืม เพิ่มเว็บไซต์ เข้าไปที่ hosts
bench --site yourdomain.com add-to-hosts
เพิ่ม Apps เข้าไปใน Frappe
ERPNext
bench get-app erpnext --branch version-16
HRMS
bench get-app hrms --branch version-16
Payments
bench get-app payments --branch version-16
Print Designer (Optional)
bench get-app https://github.com/frappe/print_designer
ติดตั้งทุก Apps เข้าเว็บไซต์
bench --site yourdomain.com install-app erpnext
bench --site yourdomain.com install-app hrms
bench --site yourdomain.com install-app payments
bench --site yourdomain.com install-app print_designer
อย่าลืมรันคำสั่ง migrate ครับ
bench --site yourdomain.com migrate
เปลี่ยน Development เป็น Production
ใช้คำสั่ง
bench --site yourdomain.com enable-scheduler
bench --site yourdomain.com set-maintenance-mode off
sudo bench setup production <username>
ในกรณีของเรา username คือ frappe ดังนั้นใช้คำสั่ง
sudo bench setup production frappe
เมื่อถึงขั้นตอนนี้ เราจะได้
-
Nginx และ Supervisorctl
-
ทั้ง Nginx และ Supervisorctl อยู่ใน status running
-
สามารถเปิดเว็บไซต์ที่ http://yourdomain.com
Enable SSL certificate for https
bench config dns_multitenant on
sudo apt-get install certbot python3-certbot-nginx
sudo -H bench setup lets-encrypt yourdomain.com
เพิ่มเว็บไซต์ (Multitenancy)
bench config dns_multitenant on
bench new-site your-site2-name
bench setup nginx
sudo service nginx reload
การบำรุงรักษา
สำรองข้อมูล
ข้อมูลที่เราคีย์เข้าระบบ ERP เป็นข้อมูลที่มีความสำคัญมาก ทำหายไม่ได้เด็ดขาด ดังนั้นเราต้องรู้คำสั่งเบื้องต้นในการบำรุงรักษา ฐานข้อมูล ใน ERPNext
ทุกๆคำสั่งต่อไปนี้ ต้องทำงานในโฟลเดอร์ frappe-bench
~/frappe-bench$ bench [command]
สำรองข้อมูล + ไฟล์ที่เราอัพโหลดเช่น ไฟล์ภาพพนักงาน ไฟล์ภาพทรัพย์สินถาวร ไฟล์โลโก้บริษัท เป็นต้น
bench --site {sitename} backup --with-files
หรือ สำรองข้อมูล เฉพาะ ฐานข้อมูล
bench --site {sitename} backup
สำรองข้อมูลในทุกๆ ไซต์ พร้อมกัน
bench backup-all-sites
ไฟล์ต่างๆที่ได้จากการสำรองข้อมูลจะถูกเก็บไว้ที่
~/frappe-bench/sites/your-site/private/backups/
เรียกคืนข้อมูล
เมื่อต้องการเรียกคืนข้อมูลที่เคยสำรองเอาไว้ ให้เราดูว่าไฟล์ที่สำรอง เก็บไว้ที่ไหน เช่น
bench --site {your site} backup --with-files
จะได้ไฟล์ทั้งหมด 4 ไฟล์:
- config file ไว้เก็บชื่อ ฐานข้อมูล เป็นต้น
- ไฟล์ฐานข้อมูล ลงท้ายด้วย .sql.gz
- ไฟล์สาธารณะ ลงท้ายด้วย .tar
- ไฟล์ส่วนตัว ลงท้ายด้วย .tar
กรณีที่ต้องการเรียกคืนมาที่ ไซต์ ใหม่
bench new-site {sitename-ใหม่}
bench --site {sitename-ใหม่} --force restore [path ฐานข้อมูล] \
--with-private-files [path ไฟล์ส่วนตัว] \
--with-public-files [path ไฟล์สาธารณะ]
เสร็จแล้วสั่งให้ Frappe sync ฐานข้อมูล
bench --site {sitename-ใหม่} migrate
วิธี Update App Frappe ERPNext และ Apps อื่นๆ
bench update --reset
Renew Certificates (SSL)
sudo bench renew-lets-encrypt
วิธีแก้ปัญหาเบื้องต้น
Developer Mode - Custom Always True
Pain Point: เมื่อสร้าง DocType ใหม่ แล้ว Custom? checkbox ติดอยู่ตลอด แม้เปิด Developer Mode แล้ว
Solution: ต้องใช้คำสั่ง bench set-config แทนการแก้ไข site_config.json โดยตรง
bench set-config -g developer_mode 1
อ่านเพิ่มเติม: แก้ปัญหา Custom? Always True ใน Frappe 16
ModuleNotFoundError!
ในกรณีที่เราติดตั้ง Custom app แล้วเกิดปัญหา ModuleNotFoundError!
bench setup requirements
sudo supervisorctl restart all
Scheduler Inactive
Pain Point: หลังจาก Import ข้อมูลมาจากฐานข้อมูลเก่า แล้วเกิดปัญหา Scheduler Inactive
Solution:
bench --site your-domain.com set-config pause_scheduler 0
สรุปการติดตั้ง ERPNext 16 บน Ubuntu 24.04
การ Deploy ERPNext Ubuntu 24.04 ต้องติดตั้งซอฟท์แวร์ ต่อไปนี้ให้แล้วเสร็จก่อนติดตั้ง Frappe Bench
- Python 3.12 (มาพร้อมกับ Ubuntu 24.04)
- NodeJS V20+ ผ่าน NVM
- Redis Server V7
- MariaDB V10.11+
- Yarn และ Git
- Nginx, cron และ wkhtmltopdf