Cài đặt một ERPNext Stack trên Ubuntu 20.04

ERPNext là một bộ phần mềm quản trị doanh nghiệp (ERP) sử dụng sức mạnh và tính linh hoạt của các công nghệ mã nguồn mở. Nó xuất sắc trong việc quản lý các quy trình kinh doanh cốt lõi như tài chính, bán hàng, nhân sự, sản xuất, mua hàng, dịch vụ, nhu cầu trợ giúp và nhiều hơn nữa. Một số lợi ích của việc triển khai một hệ thống như ERPNext là:

  • Nâng cao năng suất bằng cách tự động hóa các quy trình kinh doanh lặp đi lặp lại
  • Tăng hiệu quả công nghệ thông tin bằng cách chia sẻ cơ sở dữ liệu cho tất cả các phòng ban trong công ty.
  • Cải thiện quyết định nhờ có cái nhìn toàn diện về cách các đơn vị kinh doanh liên quan đến nhau.

ERPNext dựa trên Frappe, một framework ứng dụng web toàn diện được viết bằng Python, tận dụng toàn bộ sức mạnh của môi trường chạy Node/JavaScript và sử dụng MariaDB làm cơ sở dữ liệu. Một trong những lợi ích của các ứng dụng dựa trên Frappe, như ERPNext, là tiện ích dòng lệnh bench. CLI bench giúp tiết kiệm thời gian cho các quản trị viên bằng cách tự động hóa các nhiệm vụ như cài đặt, cập nhật, cấu hình và quản lý nhiều trang web Frappe/ERPNext.

Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình một ngăn xếp ERPNext trên một máy chủ chạy Ubuntu Điều này cho phép bạn cấu hình ngăn xếp của mình cho các môi trường phát triển hoặc sản xuất khác nhau tùy thuộc vào nhu cầu của bạn, và nó sẽ giúp bạn xây dựng một kiến trúc phức tạp hơn, khả năng chịu lỗi.

Điều kiện tiên quyết

  • Một máy chủ Ubuntu 20.04 với ít nhất 4 GB RAM và một người dùng sudo không phải là root. Bạn có thể thiết lập máy chủ và người dùng của bạn bằng cách làm theo hướng dẫn thiết lập máy chủ ban đầu Ubuntu 20.04 của chúng tôi.

Lưu ý: Khi chọn thông số kỹ thuật cho máy chủ của bạn, hãy lưu ý rằng hệ thống ERP đòi hỏi tài nguyên cao. Hướng dẫn này đề xuất sử dụng một máy chủ với 4 GB RAM, đó là đủ cho các trường hợp sử dụng cơ bản, nhưng yêu cầu phần cứng cụ thể có thể thay đổi tùy thuộc vào số lượng người dùng cũng như quy mô doanh nghiệp của bạn.

  • Một tên miền đã đăng ký đầy đủ với một bản ghi A được chỉ định đến máy chủ của bạn. Nếu bạn đang sử dụng DigitalOcean Droplet, bạn có thể làm theo hướng dẫn này để thiết lập DNS đúng cách. Trong hướng dẫn này, chúng ta sẽ sử dụng your_domain.

Bước 1 — Cấu hình Firewall

Mặc dù việc cấu hình tường lửa cho môi trường phát triển là tùy chọn, nhưng đối với môi trường sản xuất, đó là một phương pháp bảo mật bắt buộc.

Bạn sẽ cần mở các cổng sau trên máy chủ ERPNext của bạn:

  • 80/tcp443/tcp cho HTTP và HTTPS tương ứng
  • 3306/tcp cho kết nối MariaDB (khuyến nghị chỉ nếu bạn cần truy cập từ xa vào cơ sở dữ liệu)
  • 143/tcp25/tcp cho IMAP và STMP tương ứng
  • 22/tcp cho SSH (nếu bạn chưa kích hoạt OpenSSH trong cài đặt UFW của bạn)
  • 8000/tcp để kiểm thử nền tảng của bạn trước khi triển khai vào môi trường sản xuất

Để mở nhiều cổng cùng một lúc, bạn có thể sử dụng lệnh sau: Hoặc, bạn có thể cho phép kết nối từ các địa chỉ IP cụ thể trên các cổng cụ thể bằng cách sử dụng lệnh này:

Sau khi mở tất cả các cổng cần thiết, kích hoạt tường lửa:

sudo ufw enable

Bây giờ xác nhận trạng thái tường lửa của bạn:

sudo ufw status

UFW sẽ hiển thị danh sách các quy tắc đã được kích hoạt. Hãy đảm bảo các cổng cần thiết cho ERPNext đã được mở:

Output
Status: active
To Action From
-- ------ ----
22,25,80,143,443,3306,8000/tcp ALLOW Anywhere
22,25,80,143,443,3306,8000/tcp (v6) ALLOW Anywhere (v6)

Để biết thêm thông tin về cấu hình của UFW, hãy tham khảo hướng dẫn của chúng tôi về cách thiết lập tường lửa với UFW trên Ubuntu 20.04.

Cấu hình một tường lửa đúng là bước đầu tiên trong hai bước chuẩn bị ban đầu. Bây giờ bạn sẽ cấu hình bảng phím và mã hóa ký tự trên máy chủ của mình.

Bước 2 — Cấu hình Locales

Rất đáng khuyến nghị rằng bạn cấu hình bảng phím cho bảng điều khiển cũng như ngôn ngữ và mã hóa ký tự trên máy chủ của bạn. Điều này là cần thiết để tránh các vấn đề có thể xảy ra trong quá trình cài đặt ERPNext Lưu ý rằng cấu hình này không liên quan đến ngôn ngữ giao diện người dùng trên nền tảng ERPNext thực tế của bạn, mà liên quan đến cấu hình ngôn ngữ hệ thống.

Đầu tiên, cập nhật máy chủ của bạn:

sudo apt update

Tiếp theo, cấu hình bảng phím, ngôn ngữ và mã hóa ký tự:

sudo localectl set-keymap us && sudo localectl set-locale LANG=en_US.utf8

Tiện ích localectl được sử dụng bởi Ubuntu 20.04 và các bản phân phối Linux khác để điều khiển và thay đổi cài đặt bố trí ngôn ngữ và bàn phím trên toàn hệ thống trước khi người dùng đăng nhập, đó chính xác là những gì ERPNext 12 yêu cầu.

Bạn cũng cần thêm các dòng sau vào tệp /etc/environment của bạn. Sử dụng nano hoặc trình chỉnh sửa văn bản ưa thích của bạn để mở tệp:

sudo nano /etc/environment

Tiếp theo, thêm nội dung sau:

LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LANG=en_US.UTF-8

Lưu và đóng tệp.

Khởi động lại máy chủ của bạn để áp dụng tất cả các thay đổi:

sudo reboot

Đợi một vài phút cho máy chủ của bạn khởi động lại và sau đó sử dụng ssh để truy cập lại vào máy chủ của bạn. Bây giờ bạn đã sẵn sàng cài đặt cơ sở dữ liệu của mình.

Bước 3 — Cài đặt MariaDB

Bây giờ bạn sẽ thêm MariaDB vào ngăn xếp máy chủ của mình. ERPNext 12 yêu cầu MariaDB 10.2+ để hoạt động đúng. Vì Ubuntu 20.04 bao gồm MariaDB 10.3 trong kho lưu trữ chính thức của mình, bạn có thể cài đặt phiên bản này bằng lệnh apt:

sudo apt install mariadb-server

Hoặc, nếu bạn muốn phiên bản MariaDB mới hơn, bạn có thể làm theo Bước 3 trong hướng dẫn của chúng tôi về cách cài đặt ngăn xếp ERPNext trên Ubuntu Điều này sẽ hướng dẫn bạn thông qua trình hỗ trợ kho lưu trữ trực tuyến của MariaDB, giúp bạn cài đặt phiên bản mới nhất — MariaDB 10.5.

Sau khi cài đặt mariadb-server, cài đặt các gói sau đây:

sudo apt install python3-mysqldb libmysqlclient-dev

ERPNext 12 là một ứng dụng Python và do đó nó yêu cầu thư viện python3-mysqldb để quản lý cơ sở dữ liệu. libmysqlclient-dev được yêu cầu để truy cập các tính năng phát triển của MariaDB.

Tiếp theo, thêm một lớp bảo mật bổ sung cho máy chủ MariaDB bằng cách chạy tập lệnh mysql_secure_installation:

sudo mysql_secure_installation

Tập lệnh mysql_secure_installation sẽ yêu cầu bạn trả lời một số câu hỏi:

  • Câu hỏi đầu tiên sẽ yêu cầu về mật khẩu root, nhưng vì chưa có mật khẩu được cấu hình, hãy nhấn ENTER.
  • Tiếp theo, khi được hỏi về việc thay đổi mật khẩu root MariaDB, hãy trả lời N. Sử dụng mật khẩu mặc định kết hợp với xác thực Unix là cài đặt khuyến nghị cho các hệ thống dựa trên Ubuntu vì tài khoản root liên quan chặt chẽ đến các nhiệm vụ bảo trì hệ thống tự động.
  • Các câu hỏi còn lại liên quan đến việc loại bỏ người dùng cơ sở dữ liệu ẩn danh, hạn chế tài khoản root đăng nhập từ xa trên localhost, loại bỏ cơ sở dữ liệu thử nghiệm và tải lại bảng đặc quyền. Câu trả lời Y cho tất cả các câu hỏi đó là an toàn.

Sau khi hoàn thành tập lệnh mysql_secure_installation, MariaDB sẽ bắt đầu chạy bvới cấu hình mặc định của nó. Cài đặt ERPNext tiêu chuẩn sử dụng tài khoản root của MariaDB cho tất cả các hoạt động cơ sở dữ liệu. Mặc dù cách tiếp cận này có thể thuận tiện trong các môi trường máy chủ đơn lẻ, nhưng nó không được coi là một phương pháp bảo mật tốt. Do đó, trong phần tiếp theo, bạn sẽ tìm hiểu cách tránh vấn đề này bằng cách tạo một người dùng mới với đặc quyền đặc biệt.

Tạo một người dùng Super Admin MariaDB

ERPNext mong đợi sử dụng tài khoản root của MariaDB để quản lý kết nối cơ sở dữ liệu, nhưng điều này không luôn là lựa chọn lý tưởng. Để khắc phục hạn chế này và cho phép một người dùng không phải là root quản lý MariaDB, bạn sẽ tạo thủ công một cơ sở dữ liệu được đặt tên theo tên người dùng. Sau đó, bạn sẽ có thể gán đặc quyền đặc biệt cho người dùng mới để thực hiện các hoạt động cơ sở dữ liệu của ERPNext.

Mở MariaDB prompt:

sudo mysql

Bây giờ tạo một cơ sở dữ liệu mới được đặt tên theo người dùng mà bạn muốn gán cho kết nối MariaDB. Trong hướng dẫn này, chúng tôi sẽ sử dụng tên sammy nhưng bạn có thể chọn một tên khác:

CREATE DATABASE sammy;

Xác nhận rằng cơ sở dữ liệu đã được tạo bằng câu lệnh SQL này:

SHOW DATABASES;

Bạn sẽ thấy đầu ra tương tự như sau:

Output
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sammy |
+--------------------+

Bây giờ tạo người dùng MariaDB sammy với đặc quyền tương tự như root và sau đó đặt mật khẩu mạnh cho người dùng theo sở thích của bạn. Hãy giữ mật khẩu ở một nơi an toàn; bạn sẽ cần nó sau này:

GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'%' IDENTIFIED BY 'mariadb_password' WITH GRANT OPTION;

Xác nhận việc tạo người dùng và đặc quyền người dùng mới:

SELECT host, user, Super_priv FROM mysql.user;

Bạn sẽ thấy đầu ra như sau:

Output
+-----------+-------+------------+
| Host | User | Super_priv |
+-----------+-------+------------+
| localhost | root | Y |
| localhost | mysql | Y |
| % | sammy| Y |
+-----------+-------+------------+
3 rows in set (0.001 sec)

Bây giờ xóa các đặc quyền để áp dụng tất cả các thay đổi:

FLUSH PRIVILEGES;

Sau khi bạn hoàn thành, thoát khỏi phiên:

exit

Bây giờ bạn đã tạo người dùng cơ sở dữ liệu, bạn chỉ cần điều chỉnh MariaDB để đảm bảo hoạt động ERPNext 12 đúng cách. May mắn thay, nhóm ERPNext cung cấp một mẫu cấu hình xuất sắc để bạn sử dụng làm điểm khởi đầu cho việc triển khai của mình. Trong phần tiếp theo, bạn sẽ tìm hiểu cách cấu hình cơ sở dữ liệu MariaDB một cách đúng đắn bằng cách sử dụng mẫu đó.

Bước 4 — Cấu hình MariaDB cho ERPNext

Sau khi cài đặt và bảo mật MariaDB, điều chỉnh chi tiết các kết nối ERPNext.

Đầu tiên, dừng dịch vụ mariadb:

sudo systemctl stop mariadb

Sử dụng nano hoặc trình chỉnh sửa văn bản ưa thích để tạo một tệp cấu hình MariaDB được gọi là mariadb.cnf:

sudo nano /etc/mysql/mariadb.conf.d/mariadb.cnf

Tiếp theo, thêm mẫu cấu hình chính thức của ERPNext:

[mysqld]
# GENERAL #
user = mysql
default-storage-engine = InnoDB
socket = /var/lib/mysql/mysql.sock
pid-file = /var/lib/mysql/mysql.pid

# MyISAM #
key-buffer-size = 32M
myisam-recover = FORCE,BACKUP

# SAFETY #
max-allowed-packet = 256M
max-connect-errors = 1000000
innodb = FORCE

# DATA STORAGE #
datadir = /var/lib/mysql/

# BINARY LOGGING #
log-bin = /var/lib/mysql/mysql-bin
expire-logs-days = 14
sync-binlog = 1

# REPLICATION #
server-id = 1

# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = 0
query-cache-size = 0
max-connections = 500
thread-cache-size = 50
open-files-limit = 65535
table-definition-cache = 4096
table-open-cache = 10240

# INNODB #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = 512M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table = 1
innodb-buffer-pool-size = 5462M
innodb-file-format = barracuda
innodb-large-prefix = 1
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
character-set-client-handshake = FALSE
max_allowed_packet = 256M

# LOGGING #
log-error = /var/lib/mysql/mysql-error.log
log-queries-not-using-indexes = 0
slow-query-log = 1
slow-query-log-file = /var/lib/mysql/mysql-slow.log

# CONNECTIONS #

pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
bind-address = 0.0.0.0

[mysql]
default-character-set = utf8mb4

[mysqldump]
max_allowed_packet=256M

Lưu và đóng tệp. Để biết thông tin chi tiết về các cấu hình này, xem tệp mẫu này trên repo Github của ERPNext. Đây là một điểm khởi đầu hữu ích để khám phá các tùy chọn này.

Tệp cấu hình, /etc/mysql/mariadb.conf.d/mariadb.cnf, bổ sung và ghi đè một số giá trị được bao gồm trong cấu hình MariaDB mặc định nằm tại /etc/mysql/my.cnf. Tệp này cung cấp cho bạn một mẫu đã được chọn lọc, cải thiện đáng kể hiệu suất cơ sở dữ liệu cho ERPNext. Tuy nhiên, hãy nhớ rằng mặc dù mẫu này là một điểm khởi đầu tuyệt vời, không có gì ngăn bạn khai thác hiệu suất MariaDB hơn nữa bằng cách điều chỉnh các thông số này phù hợp với nhu cầu của bạn.

Kiểm tra kết nối MariaDB

Vì ERPNext phụ thuộc vào kết nối cơ sở dữ liệu cho hầu hết các hoạt động nội bộ của nó, nên là một ý tưởng tốt để kiểm tra kết nối trước khi tiếp tục.

Khởi động dịch vụ mariadb:

sudo systemctl start mariadb

Để kiểm tra kết nối, bạn có thể sử dụng lệnh sau. Hãy nhớ thay thế sammymariadb_password bằng thông tin xác thực của bạn:

mysql --user sammy --password mariadb_password --host=localhost --protocol=tcp --port=3306 test

Bạn sẽ thấy đầu ra hiển thị nội dung trợ giúp cơ bản của MariaDB và một số tham số. Điều này có nghĩa kết nối của bạn đã thành công:

Output
mysql Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Usage: mysql [OPTIONS] [database]

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

...

--ssl-verify-server-cert
Verify server's "Common Name" in its cert against
hostname used when connecting. This option is disabled by
default.
-t, --table Output in table format.
--tee=name Append everything into outfile. See interactive help (\h)
also. Does not work in batch mode. Disable with
--disable-tee. This option is disabled by default.
-u, --user=name User for login if not current user.
-U, --safe-updates Only allow UPDATE and DELETE that uses keys.
-U, --i-am-a-dummy Synonym for option --safe-updates, -U.
-v, --verbose Write more. (-v -v -v gives the table output format).

...

max-join-size 1000000
secure-auth FALSE
show-warnings FALSE
plugin-dir (No default value)
default-auth (No default value)
binary-mode FALSE
connect-expired-password FALSE

Nếu bạn cần điều chỉnh các thiết lập của MariaDB hoặc sửa các lỗi, hãy nhớ tải lại dịch vụ bằng lệnh sau:

sudo systemctl restart mariadb

Khi bạn hoàn thành, bật MariaDB:

sudo systemctl enable mariadb

Bước 5 — Thiết lập ERPNext 12

Bây giờ cơ sở dữ liệu của bạn đã sẵn sàng, bạn có thể tiếp tục thiết lập ứng dụng web ERPNext của mình. Trong phần này, bạn sẽ tìm hiểu cách cài đặt và cấu hình tất cả các thành phần cần thiết của ERPNext 12, sau đó cài đặt ứng dụng chính.

Bắt đầu bằng việc chuẩn bị máy chủ với tất cả các gói hệ thống cần thiết cho ERPNext Cài đặt các phụ thuộc toàn hệ thống bằng lệnh sau:

sudo DEBIAN_FRONTEND=noninteractive apt install -y curl build-essential python3-testresources python3-setuptools python3-dev libffi-dev python3-pip libcurl4 dnsmasq fontconfig git htop libcrypto++-dev libfreetype6-dev liblcms2-dev libwebp-dev libxext6 libxrender1 libxslt1-dev libxslt1.1 libffi-dev ntpdate postfix python3-dev python-tk screen vim xfonts-75dpi xfonts-base zlib1g-dev apt-transport-https libsasl2-dev libldap2-dev libcups2-dev pv libjpeg8-dev libtiff5-dev tcl8.6-dev tk8.6-dev libdate-manip-perl logwatch

Biến DEBIAN_FRONTEND=noninteractive đã được truyền vào lệnh cài đặt để tránh hiển thị các lời nhắc của Postfix. Để biết thông tin chi tiết về cấu hình Postfix, vui lòng đọc hướng dẫn của chúng tôi về Cách cài đặt và cấu hình Postfix trên Ubuntu 20.04.

Tiếp theo, cập nhật pip3, công cụ quản lý gói chuẩn của Python, sau đó cài đặt phiên bản mới nhất của ba mô-đun Python bổ sung:

sudo -H python3 -m pip install --upgrade setuptools cryptography psutil

setuptools giúp cài đặt và nâng cấp các gói Python, cryptography cung cấp khả năng mã hóa cho ngăn xếp của bạn, và psutil hỗ trợ giám sát hệ thống. Bây giờ bạn đã cài đặt tất cả các phụ thuộc toàn cầu cần thiết, bây giờ bạn sẽ cài đặt tất cả các dịch vụ và thư viện cần thiết cho ERPNext 12.

Cài đặt Node.js và Yarn

ERPNext 12 có thể hoạt động với phiên bản 8+ của môi trường máy chủ Node.js. Trong thực tế, vào thời điểm viết bài này, kịch bản easy_install chính thức của ERPNext sử dụng Node Tuy nhiên, từ quan điểm bảo mật, khuyến nghị cài đặt phiên bản mới hơn vì Node 8 đã đạt đến hạn chót (EOL) vào năm 2020 và do đó sẽ không nhận được bất kỳ bản vá bảo mật nào nữa. Vào thời điểm viết bài này, Ubuntu 20.04 chứa phiên bản 10.19 của Node.js. Mặc dù phiên bản này vẫn được duy trì, nhưng vì các lý do tương tự (EOL trong ít hơn một năm), rất khuyến nghị không sử dụng nó. Trong hướng dẫn này, Node.js phiên bản 12 LTS sẽ được cài đặt cùng với các trình quản lý gói npmyarn tương ứng. Lưu ý: khung Frappe sử dụng yarn để cài đặt các phụ thuộc. Nếu bạn quyết định sử dụng một phương pháp cài đặt thay thế thì hãy đảm bảo rằng bạn có phiên bản 1.12+ của yarn đang chạy trên hệ thống của mình.

Thêm kho lưu trữ NodeSource vào hệ thống của bạn:

curl -sL https://deb.nodesource.com/setup_12.x -o nodesource_setup.sh

Bây giờ bạn có thể xem nội dung của tập lệnh đã tải xuống:

sudo nano nodesurce_setup.sh

Khi bạn hài lòng với nội dung của tập lệnh, bạn chạy tập lệnh:

sudo bash nodesource_setup.sh

Tập lệnh này sẽ tự động cập nhật danh sách apt. Bây giờ bạn cài đặt nodejs trên máy chủ của bạn:

sudo apt install nodejs

Tiếp theo, cài đặt yarn toàn cầu bằng trình quản lý gói npm:

sudo npm install -g yarn

Bây giờ bạn đã cài đặt Node.js, bạn tiếp tục cấu hình wkhtmltopdf cho nền tảng của mình.

ERPNext sử dụng công cụ mã nguồn mở wkhtmltopdf để chuyển đổi nội dung HTML thành PDF bằng cách sử dụng công cụ render Qt WebKit. Tính năng này thường được sử dụng để in hóa đơn, báo giá và các báo cáo khác. Trong trường hợp của ERPNext 12, yêu cầu một phiên bản cụ thể của wkhtmltopdf0.12.5 với Qt được vá lỗi.

Để cài đặt wkhtmltopdf, bắt đầu bằng việc chuyển đến một thư mục phù hợp để tải xuống gói, trong trường hợp này là /tmp:

cd /tmp

Tải xuống phiên bản và gói wkhtmltopdf phù hợp cho Ubuntu 20.04 từ trang dự án:

wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.bionic_amd64.deb

Sau đó, cài đặt gói bằng công cụ dpkg:

sudo dpkg -i wkhtmltox_0.12.5-1.bionic_amd64.deb

Tiếp theo, sao chép tất cả các file thực thi liên quan đến thư mục /usr/bin/ của bạn:

sudo cp /usr/local/bin/wkhtmlto* /usr/bin/

Khi các file đã được đặt đúng vị trí, thay đổi quyền truy cập để làm cho chúng có thể thực thi:

sudo chmod a+x /usr/bin/wk*

Bây giờ wkhtmltopdf đã được cài đặt đúng cách, chúng ta sẽ thêm Redis vào ngăn xếp cơ sở dữ liệu của chúng ta.

Cài đặt Redis

ERPNext 12 sử dụng Redis để tăng hiệu suất của MariaDB. Cụ thể, Redis hỗ trợ việc caching.

Đầu tiên, cài đặt Redis từ kho lưu trữ chính thức của Ubuntu 20.04:

sudo apt install redis-server

Sau đó, kích hoạt Redis khi khởi động:

sudo systemctl enable redis-server

Bây giờ bạn đã thêm Redis vào ngăn xếp của mình, hãy tóm tắt những gì bạn đã làm cho đến nay. Cho đến thời điểm này, bạn đã cài đặt tất cả các thành phần chính yêu cầu bởi ERPNext 12, bao gồm:

  • Một cơ sở dữ liệu MariaDB
  • Môi trường máy chủ JavaScript Node.js
  • Trình quản lý gói Yarn
  • Một bộ nhớ cache cơ sở dữ liệu Redis
  • Công cụ tạo tài liệu PDF wkhtmltopdf

Cho dù bạn đang cài đặt hệ thống ERP cho mục đích phát triển hay sản xuất, bạn đã sẵn sàng cho bước tiếp theo, đó là cài đặt khung Frappe và ứng dụng web ERPNext 12 thực tế.

Bước 6 — Cài đặt Frappe Bench CLI

Bây giờ bạn đã cài đặt tất cả các yêu cầu ngăn xếp ERPNext, bạn có thể khai thác tính linh hoạt của tiện ích dòng lệnh bench trong Frappe. Bench CLI được thiết kế với mục đích hỗ trợ người dùng trong quá trình cài đặt, thiết lập và quản lý các ứng dụng dựa trên Khung Frappe như ERPNext. Trong các phần tiếp theo, bạn sẽ cài đặt bench CLI và sử dụng nó để hoàn thành quá trình thiết lập ERPNext 12.

Đảm bảo rằng người dùng Frappe (trong trường hợp này là sammy) có quyền hợp lý trên thư mục chủ của mình:

sudo chown sammy -R /home/sammy

Bây giờ sao chép kho lưu trữ frappe/bench vào thư mục chủ của bạn. Hãy nhớ thay thế sammy bằng tên người dùng hệ thống của bạn:

git clone https://github.com/frappe/bench /home/sammy/.bench --depth 1 --branch master

Cài đặt bench CLI:

sudo pip3 install -e /home/sammy/.bench

Hướng dẫn này giả định rằng bạn đang cài đặt ERPNext 12 cho các kịch bản kiểm thử/sản xuất và do đó bạn đang sử dụng nhánh master. Nhưng nếu ý định của bạn là phát triển ứng dụng hoặc các module ERPNext tùy chỉnh, thì nhánh develop có thể là một lựa chọn tốt hơn. Trong cả hai trường hợp, bạn đã sẵn sàng cài đặt Khung Frappe. Đây sẽ là bước cuối cùng trước khi cài đặt ERPNext chính mình.

Thiết lập môi trường khung Frappe

Trong phần này, bạn sẽ tạo một môi trường khung Frappe bằng cách sử dụng bench CLI.

Trong quá trình cài đặt Frappe, bạn có thể vượt quá giới hạn theo dõi tệp của Ubuntu, mặc định là Để tránh vấn đề này, hãy đặt một giới hạn cao hơn bằng lệnh sau:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Lệnh tee sẽ ghi thêm nội dung của lệnh echo vào tệp gọi và đồng thời in kết quả ra màn hình.

Tiếp theo, khởi tạo khung Frappe Thay thế Sammy bằng tên người dùng hệ thống của bạn:

bench init /home/sammy/frappe-bench --frappe-path https://github.com/frappe/frappe --frappe-branch version-12 --python python3

Trong quá trình thực thi, bạn có thể thấy một lỗi về đường dẫn cùng với một số cảnh báo. Hãy để quá trình tiếp tục cho đến khi hoàn thànhKhi hoàn thành, bạn sẽ thấy một đầu ra tương tự như sau, cho biết môi trường của bạn đã được tạo thành công:

Output
...
Done in 82.23s.
INFO:bench.utils:setting up backups
no crontab for sammy
SUCCESS: Bench /home/sammy/frappe-bench initialized

Lưu ý: Quá trình bench init có thể dừng lại nếu gặp lỗi spawn ENOMEM. Lỗi này xảy ra khi hệ thống của bạn hết bộ nhớ. Bạn phải khắc phục vấn đề trước khi tiếp tục, bằng cách cài đặt thêm bộ nhớ vật lý hoặc cấp phát không gian SWAP.

Hãy xem kỹ hơn vào lệnh được sử dụng để tạo môi trường:

  • /home/sammy/frappe-bench: đường dẫn nơi Khung Frappe, các trang web và ứng dụng liên quan sẽ được cài đặt. Một thư mục mới, gọi là frappe-bench trong ví dụ này, sẽ được tạo để chứa tất cả các tệp cần thiết.
  • --frappe-path: trỏ đến kho lưu trữ Frappe, trong trường hợp này là kho lưu trữ Github chính thức.
  • --frappe-branch: phiên bản Frappe sẽ được cài đặt. Vì bạn muốn cài đặt ERPNext 12, phiên bản được chọn là Frappe 12.
  • --python: phiên bản Python sẽ được sử dụng. ERPNext 12 yêu cầu Python 3.6+. Các phiên bản trước đó vẫn sử dụng Python 2.7.

Để biết thêm thông tin về các lệnh bench CLI, vui lòng tham khảo Bench Commands Cheatsheet.

Khả năng linh hoạt mà khung Frappe cung cấp vượt xa việc sử dụng môi trường cô lập. Bạn cũng có thể tạo các trang web khác nhau và cài đặt ứng dụng vào chúng.

Bước 7 — Cài đặt ứng dụng Web ERPNext 12

Trong phần này, bạn sẽ thiết lập một trang web dựa trên Frappe và sau đó cài đặt ứng dụng ERPNext 12 lên đó.

Chuyển đến thư mục mà Frappe đã khởi tạo.

cd /home/sammy/frappe-bench

Trước khi tiếp tục, bạn sẽ cần cài đặt các phiên bản cụ thể của các thư viện Python numpy và pandas vào môi trường ảo của Frappe. Cài đặt các gói này bằng lệnh sau:

./env/bin/pip install numpy==1.18.5 && ./env/bin/pip install pandas==0.24.2

Lúc này, quá trình cài đặt có thể tạm dừng khoảng 10 đến 20 phút trong khi hiển thị thông báo này:

Output
...
Building wheel for pandas (setup.py) ... -

Điều này liên quan đến một lỗi liên quan đến pandas và Ubuntu 20.04, vào thời điểm viết, vẫn còn khá mới. Tuy nhiên, các gói sẽ được xây dựng và sau khi hoàn thành, bạn sẽ thấy một đầu ra như sau:

Output
...
Successfully built pandas
Installing collected packages: pandas
Successfully installed pandas-0.24.2

Bây giờ, bạn có thể tiếp tục cài đặt. Tải xuống ERPNext 12 từ kho lưu trữ của nó bằng bench CLI:

bench get-app erpnext https://github.com/frappe/erpnext --branch version-12

Tiếp theo, tạo trang web mới, thay thế your_domain bằng tên miền mà bạn đã liên kết với địa chỉ IP của máy chủ này:

bench new-site your_domain --admin-password 'erpnext_admin_password' --mariadb-root-username sammy --mariadb-root-password 'mariadb_password'

Xem xét các tùy chọn được sử dụng trong lệnh trên:

  • bench new-site tạo một trang web mới dựa trên Khung Frappe.
  • your_domain là tên cho trang web mới. Hãy đảm bảo rằng DNS của tên miền của bạn có một bản ghi A trỏ đến địa chỉ IP của máy chủ.
  • erpnext_admin_password là mật khẩu mong muốn cho người dùng Quản trị viên của ERPNext. Hãy giữ mật khẩu này ở một nơi an toàn.
  • mariadb_password là mật khẩu mà bạn đã tạo ở đầu hướng dẫn cho người dùng MariaDB sammy.

Tiếp theo, cài đặt ứng dụng ERPNext lên trang web:

bench --site your_domain install-app erpnext

Sau khi cài đặt hoàn tất, bạn sẽ có một ứng dụng ERPNext 12 hoạt động. Bây giờ, hãy kiểm tra nó bằng một lệnh bench:

bench start

Lệnh trên sẽ khởi động một bảng điều khiển giám sát thời gian thực hiển thị các thông báo liên quan đến máy chủ web và các dịch vụ khác.Sau đó, mở trình duyệt web và truy cập vào localhost:8000 (đối với cài đặt cục bộ) hoặc your_domain:8000 (nếu bạn đang sử dụng một máy chủ từ xa). Bạn sẽ thấy màn hình đăng nhập ERPNext (chúng ta sẽ tiếp tục với đăng nhập và cài đặt trong một bước sau, sau khi chúng ta đã chuẩn bị trang web cho việc triển khai sản xuất).

Sau khi thăm thử nghiệm của bạn, quay lại cửa sổ terminal và nhấn CTRL+C. Điều này sẽ dừng ERPNext và thoát khỏi bảng điều khiển giám sát.

Nếu mục tiêu chính của bạn là tạo module hoặc chỉnh sửa ERPNext 12, thì bạn có thể dừng lại ở điểm này. Không cần thêm thành phần nào cho mục đích phát triển. Tuy nhiên, nếu những gì bạn cần là một hệ thống đã sẵn sàng cho việc triển khai sản xuất mà không yêu cầu khởi tạo thủ công, thì bạn sẽ cần cài đặt và cấu hình một số thành phần bổ sung. Đây là bước tiếp theo của bạn.

Bước 8 — Thiết lập ERPNext 12 cho môi trường sản xuất

Mặc dù ứng dụng ERPNext 12 của bạn đã sẵn sàng, hệ thống vẫn chưa được chuẩn bị cho môi trường sản xuất. Để đảm bảo tính ổn định và bảo mật của ERPNext, bạn cần kích hoạt một số dịch vụ bổ sung:

  • Fail2ban cung cấp một lớp bảo vệ bổ sung chống lại các cuộc tấn công từ người dùng độc hại và bot.
  • Nginx chủ yếu hoạt động như một proxy web, chuyển hướng tất cả lưu lượng từ cổng 8000 sang cổng 80 (HTTP) hoặc cổng 443 (HTTPS).
  • Supervisor đảm bảo các quy trình chính của ERPNext luôn hoạt động và tự động khởi động lại khi cần thiết.

Đến điểm này, bạn đã cài đặt và cấu hình ERPNext 12 thủ công, cho phép bạn tùy chỉnh quy trình để phù hợp với bất kỳ trường hợp sử dụng cụ thể nào. Tuy nhiên, để hoàn tất việc cài đặt cho môi trường sản xuất, bạn có thể tận dụng tiện ích của bench CLI và cho phép nó tự động cài đặt và cấu hình các dịch vụ còn lại này.

Đảm bảo bạn đang ở thư mục làm việc của Frappe:

cd /home/sammy/frappe-bench

Bây giờ sử dụng lệnh sau để hoàn tất thiết lập ERPNext 12 cho môi trường sản xuất:

sudo bench setup production sammy --yes

Lệnh trên sẽ cài đặt và cấu hình Nginx, Supervisor và Fail2Ban và đặt sammy làm chủ sở hữu môi trường sản xuất.

Các tệp cấu hình được tạo bởi lệnh bench là:

  • Hai tệp cấu hình Nginx nằm tại /etc/nginx/nginx.conf/etc/nginx/conf.d/frappe-bench.conf
  • Một tùy chọn Fail2Ban proxy nằm tại /etc/fail2ban/jail.d/nginx-proxy.conf và một bộ lọc nằm tại /etc/fail2ban/filter.d/nginx-proxy.conf

Các cấu hình mặc định này đủ để hoàn thành hướng dẫn này, nhưng bạn có thể tự do khám phá và điều chỉnh các tệp này để phù hợp với yêu cầu của bạn. Bạn có thể dừng tất cả các dịch vụ bằng cách chạy lệnh:

sudo supervisorctl stop all

Và sau đó, khi bạn đã ssẵn sàng, bạn có thể khởi động lại các dịch vụ của mình:

sudo supervisorctl start all

Bây giờ bạn đã sẵn sàng để kiểm tra cài đặt của mình.

Kiểm tra cài đặt ERPNext 12

Trước hết, hãy xác minh rằng các dịch vụ sản xuất chính đang chạy. Sử dụng lệnh systemctl sau đây và chuyển đến grep:

systemctl list-unit-files | grep 'fail2ban\|nginx\|supervisor'

Bạn sẽ thấy kết quả tương tự như sau:

Output
fail2ban.service enabled
nginx.service enabled
supervisor.service enabled

Sau khi xác nhận rằng mọi thứ hoạt động như mong đợi, bạn có thể thử nghiệm ERPNext 12 trực tiếp trên máy chủ của bạn. Mở trình duyệt web ưa thích của bạn và truy cập your_domain hoặc nơi bạn đang lưu trữ ứng dụng ERPNext 12.

Sau vài giây, bạn sẽ thấy màn hình đăng nhập ERPNext Sử dụng Administrator cho tên người dùng (email) và mật khẩu erpnext_admin_password bạn đã tạo trước đó.

Cài đặt một ERPNext Stack trên Ubuntu 20.04

Trong màn hình tiếp theo, bạn sẽ thấy một menu thả xuống nơi bạn có thể chọn ngôn ngữ giao diện cho ứng dụng:

Sau khi chọn ngôn ngữ, ERPNext sẽ yêu cầu bạn về quốc gia, múi giờ và đơn vị tiền tệ của bạn:

Sau khi hoàn thành thông tin vùng của bạn, bạn sẽ có thể tạo người dùng ERPNext đầu tiên của mình. Thông tin bạn cung cấp sẽ được sử dụng làm thông tin đăng nhập của người dùng.

Trong màn hình tiếp theo, ERPNext sẽ yêu cầu bạn về cái gọi là Domains. Nếu bạn không chắc chính xác tên miền của mình là gì, hãy chọn Distribution và nhấp vào nút Next.

Tiếp theo, bạn sẽ cần cung cấp tên và viết tắt của công ty.

Trên màn hình cuối cùng, ERPNext sẽ yêu cầu bạn về hoạt động của công ty, tên ngân hàng, loại sổ cái và kỳ kế toán. Bạn sẽ có thể nhập thêm các ngân hàng sau. Bây giờ, điền vào tất cả các trường theo ý thích của bạn và sau đó nhấp vào nút Complete Setup.

Tiếp theo, bạn sẽ thấy một thanh tiến trình.

Sau khi quá trình cài đặt hoàn tất, Dashboard chính của ERPNext 12 sẽ hiển thị.

Bây giờ bạn đã hoàn toàn cài đặt và cấu hình mộtỨng dụng ERPNext 12.

Kết luận

Bây giờ bạn đã cài đặt ứng dụng ERPNext 12 của mình một cách đúng đắn, bạn có thể bắt đầu triển khai hệ thống cho nhu cầu kinh doanh của mình. Một điểm khởi đầu tốt là nhấp vào nút Getting Started trên Dashboard của ERPNext. ERPNext sẽ giúp bạn cấu hình nền tảng cho tất cả các nhu cầu kinh doanh và thương mại điện tử của bạn.

Mọi người cùng tìm kiếm: bench setup role fail2ban, erpnext