Bunchee
Back to Blog

ติดตั้ง ERPNext 16 บน Ubuntu 24.04

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

ติดตั้ง ERPNext 16 บน Ubuntu 24.04

ถ้าคุณกำลังมองหาโปรแกรม 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

สร้างบัญชีผู้ใช้ใหม่บน 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 ไฟล์:

  1. config file ไว้เก็บชื่อ ฐานข้อมูล เป็นต้น
  2. ไฟล์ฐานข้อมูล ลงท้ายด้วย .sql.gz
  3. ไฟล์สาธารณะ ลงท้ายด้วย .tar
  4. ไฟล์ส่วนตัว ลงท้ายด้วย .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

  1. Python 3.12 (มาพร้อมกับ Ubuntu 24.04)
  2. NodeJS V20+ ผ่าน NVM
  3. Redis Server V7
  4. MariaDB V10.11+
  5. Yarn และ Git
  6. Nginx, cron และ wkhtmltopdf

เอกสารอ้างอิง