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```
3. ```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
```jsonld
{
# ... other settings
"db_host": "rds endpoint",
"db_port": 3306,
"gunicorn_workers": 4 # 預設是 1, 依實際需求調整
}
```
3. ```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
```
2. 安裝 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```
2.
###### 清除 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
3. 執行下列程式,更新 supervisor 的設定並且進行更新
```
sudo supervisorctl reread
sudo supervisorctl update
```
4. 至 sites/common_site_config.json 中新增
```
"workers": {
"<new_worker_name>": {
"timeoute": <timeout>
}
}
```
5. ```bench restart```
###### 啟用排程作業
```
bench --site sitename enable-scheduler
```
###### Frappe 的標準列印格式
未設定 print_hide = 0 且有值, 不是 Section Break, Column Break 或 Button 的欄位,都會依照欄位的順序出現在標準列印中