PS: 所有操作都在 ~ 路徑下

EC2

  1. 選用 Ubuntu 20.04 LTS (預設 Python版本為 3.8.10)
  2. 執行金鑰一定要選,不然會連不進去
  3. 安全群組的傳入傳出, 需要設定允許 22, 80, 443, 587, 993, 3306 等常用 port , 如果有特殊情況, 再加上其他的 port

EC2 建立後

更新 sshd 設定, 方便後續可以使用帳號密碼連入 EC2, 而不用每次都需要透過金鑰對才能連入
  1. 使用初始化實體時設定金鑰對連入 EC2
  2. 執行 sudo vim /etc/ssh/sshd_config
  3. PermitRootLogin 設定為 yes
  4. PasswordAuthentication 設定為 yes
  5. 執行 sudo service sshd restart
  6. 執行 sudo passwd user, 更新 user 密碼
檢查可否透過 python 直接呼叫到 python, 如果不行
  1. source ~/.bashrc
  2. 新增 alias python=python3
  3. source ~/.bashrc
安裝 python 3.8 venv
  1. sudo apt install python3.8-venv
安裝 pip
  1. sudo apt-get install python3-pip
安裝 mariadb
  1. sudo apt-get install software-properties-common
  2. sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
  3. sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.ubuntu-tw.org/mirror/mariadb/repo/10.3/ubuntu xenial main'
  4. sudo apt-get update
  5. sudo apt-get install mariadb-server-10.3
安裝 mysql-client
  1. sudo apt-get install libmysqlclient-dev
  2. 更新 /etc/mysql/maraidb.conf.d/50-server.cnf
# Add Below
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[mysql]
default-character-set = utf8mb4
安裝 node.js V16
  1. curl -s https://deb.nodesource.com/setup_16.x | sudo bash
  2. sudo apt-get install -y nodejs
  3. sudo npm install -g yarn
安裝 Redis
  1. sudo apt-get install redis-server

完成上述步驟後, 重新啟動 EC2

RDS

  1. 新增 Mariadb 參數群組
> character_set_server = utf8mb4
> collation_server = utf8mb4_unicode_ci
  2. 主要使用者名稱設定為 root
  3. 儲存體選 一般用途 SSD(gp2), 容量 100G (依照實際調整)
  4. 停用自動擴展
  5. 不要建立備用執行個體 (啟用的話費用很貴)
  6. 關閉績效監控
  7. 資料庫選項中的資料庫參數群組選擇 1. 建立的參數群組
  8. 啟用自動備份
  9. 停用加密(依實際情況調整)
  10. 停用自動次要版本升級
  11. 停用刪除保護

Frappe & ERPNext

安裝 bench
  1. pip install frappe-bench
  2. bench --version
初始化 frappe bench
  1. bench init ./frappe-bench --frappe-path https://github.com/frappe/frappe --frappe-branch version-13 --python python3
安裝自定義的 erpnext

因為 erpnext 會一直更新,尤其是每更新到一個大版本,對 Python 的最低版本要求就會變高,為了方便開發,因此有 clone 一版 13.36.2 的版本出來,後續如果有一些自定義的功能,也會直接更新這個部分

  1. bench get-app erpnext https://gitlab.com/go-right-team/erpnext.git
安裝其他自定義的 app
初始化站點
  1. 更新 common_site_config.json
{
    # ... other settings
    "db_host": "rds endpoint",
    "db_port": 3306,
    "gunicorn_workers": 4 # 預設是 1, 依實際需求調整
}
  1. bench new-site <site_name>
以生產模式部署
  1. sudo bench setup production

如果設置時發生錯誤, 例如 Jinja 版本的要求等
參考以下步驟, 手動設置生產環境

  1. pip install ansible==5.4.0 ansible-core==2.12.2 jinja2==2.10.3
  2. sudo apt-get install supervisor nginx
  3. bench setup supervisor
  4. bench setup nginx
  5. sudo ln -s /home/amadeus/frappe-bench/config/supervisor.conf /etc/supervisor/conf.d/frappe-bench.conf
  6. sudo ln -s /home/amadeus/frappe-bench/config/nginx.conf /etc/nginx/conf.d/frappe-bench.conf
  7. sudo shutdown -r now

如果發生 sudo: bench: command not found 的錯誤
可以執行
sudo pip3 install frappe-bench
然後再執行一次 sudo bench setup production

SSL 設定

  1. 開啟多 DNS 模式
bench config dns_multitenant on
  1. 安裝 snap 相關檔案
sudo apt install snapd
sudo snap install core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo -H bench setup lets-encrypt <site>

其他

PDF 中文無法正常顯示的處理方式
  1. sudo apt-get install xfonts-intl-chinese fonts-wqy-zenhei fonts-arphic-ukai fonts-arphic-uming
清除 Background Jobs
bench purge-jobs
生產環境增加 Workers
  1. supervisor.conf 增加 Queue Worker 的設定
    在最下方會有個
[group:frappe-bench-workers]
programs=frappe-bench-frappe-schedule,...

新增的 worker queue name 需要放在這後面,這樣之後 bench restart 時才會一起重啟這些 queue

  1. 執行下列程式,更新 supervisor 的設定並且進行更新
sudo supervisorctl reread
sudo supervisorctl update
  1. 至 sites/common_site_config.json 中新增
"workers": {
    "<new_worker_name>": {
        "timeoute": <timeout>
    }
}
  1. bench restart
啟用排程作業
bench --site sitename enable-scheduler
Frappe 的標準列印格式

未設定 print_hide = 0 且有值, 不是 Section Break, Column Break 或 Button 的欄位,都會依照欄位的順序出現在標準列印中