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 的欄位,都會依照欄位的順序出現在標準列印中