# 在win10/11上通过store安装ubuntu-20.04
# 在powershell中设置 wsl1,注意不能是 wsl2
```
wsl --set-version Ubuntu 1
```
# 换安装源为aliyun
```
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo vim /etc/apt/sources.list
```
# 安装相关包
```
sudo apt update
sudo apt upgrade
sudo apt install -y curl git-core gcc make zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libssl-dev
sudo apt install -y git python3-dev python3-setuptools python3-pip virtualenv software-properties-common
sudo apt install -y xvfb libfontconfig wkhtmltopdf
```
# 安装mariadb + redis
```
------if ubuntu < 20.04
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.ubuntu-tw.org/mirror/mariadb/repo/10.3/ubuntu bionic main'
------if ubuntu >= 20.04
sudo apt update
sudo apt upgrade
sudo apt install -y mariadb-server-10.3
sudo apt install -y libmysqlclient-dev
sudo apt install -y redis-server
```
# 安装 pyenv
```
sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libedit-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
git clone https://github.com/pyenv/pyenv.git $HOME/.pyenv
git clone https://github.com/yyuu/pyenv-virtualenv.git $HOME/.pyenv/plugins/pyenv-virtualenv
```
### 修改.bashrc
```
vim $HOME/.bashrc
-----------
## pyenv configs
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
export PATH="$PYENV_ROOT/shims:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
-----------
source $HOME/.bashrc
```
# 修改mariadb相关配置文件
```
sudo vim /etc/mysql/my.cnf
-------------
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
-------------
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
-------------
collation-server = utf8mb4_unicode_ci
-------------
```
# 配置mariadb, 设置 root密码
```
sudo /etc/init.d/mysql start
sudo mysql_secure_installation
sudo /etc/init.d/mysql restart
sudo /etc/init.d/mysql status
sudo service mysql start --skip-grant-tables --skip-networking
sudo mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '1123';
sudo usermod -aG sudo sz
```
- 注意在`mysql_secure_installation`步骤中设置的root密码可能不管用,需要FLUSH后重设
- 需要'重启'机器
# 安装node14 + yarn
```
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install -y gcc g++ make
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarn
```
# 换pip源
```
mkdir ~/.pip
vim ~/.pip/pip.conf
---------------
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
---------------
```
# 建立frappe env
```
pyenv install 3.8.12
pyenv virtualenv 3.8.12 frappe
pyenv activate frappe
pip install -U pip setuptools
pip install frappe-bench
bench init frappe-bench
bench init --frappe-branch version-13 frappe-bench --frappe-path=https://gitee.com/qinyanwan/frappe
bench init erp13 --frappe-path=https://gitee.com/qinyanwan/frappe
```
# 启动前准备(打开 redis, mariadb)
```
sudo service redis-server start
sudo service mysql start
```
# 安装frappe 相关应用
```
bench get-app https://gitee.com/qinyanwan/erpnext.git --branch version-14-beta
bench get-app erpnext --branch version-13
bench get-app https://gitee.com/phipsoft/erpnext.git --branch version-13
bench get-app https://gitee.com/yuzelin/erpnext_chinese.git
bench get-app https://e.coding.net/kirinsoar/app/erpnext_chinese_plus.git
bench get-app https://gitee.com/yuzelin/erpnext_oob.git
bench get-app https://gitee.com/yuzelin/zelin_permission.git
bench get-app https://github.com/yrestom/POS-Awesome.git
bench get-app https://e.coding.net/kirinsoar/app/nhj_app.git
bench new-site {site}
bench --site {site} install-app erpnext
bench --site {site} install-app erpnext_chinese_plus
bench --site {site} install-app erpnext_oob
bench --site {site} install-app zelin_permission
bench --site {site} install-app posawesome
bench --site {site} install-app nhj_app
bench --site {site} list-apps
```
# get指定版本的app
```
git fetch --all --tags
git log --oneline --graph
git checkout tags/v13.19.0 -b v13.19.0-branch
git branch
git switch {branch}
```
# 修改app后重新`build` app,并且`migrate` site
```
bench set-config -g developer_mode 1
bench build --app {app}
bench --site {site} migrate
```
# 启动更新
```
bench set-config -g developer_mode 1
bench clear-cache
bench setup requirements --dev
bench start
bench update --reset
bench set-config -g set-maintenance-mode off
bench --site {site} set-maintenance-mode off
bench set-config maintenance_mode 0
```
# 同一 bench init 多个 sites [multitenancy](https://frappeframework.com/docs/v13/user/en/bench/guides/setup-multitenancy)
```
sudo apt install nginx
bench config dns_multitenant off
bench new-site site1
bench use site1
bench start
bench new-site site2
bench set-nginx-port site2 8011
bench setup nginx
sudo service nginx reload
bench --site site2 serve --port 8011
```
# 多个 bench init [multi bench](https://github.com/frappe/bench/wiki/Multi-Bench-Setup)
- When you create a new bench, it will automatically use different ports from the existing bench. For example, if you are accessing your site from localhost:8000 on your first bench, then the second bench's port will be set as 8001.
- The biggest advantage to a multibench setup is that you can have different kinds of setups, e.g Development and Production on the same server. A multi-production, multi-development setup is also fine.
- For production setup you will have to run `bench setup nginx` every time after creating a new site.
```
Notes:
1. If a new site is automatically created in primary bench, then remove file name frappe_bench_dir in /etc/
2. If the server port doesn't change from 8000, then change it manually in nginx.conf and supervisor.conf
3. For redis, change redis port in /sites/common_site_config.json and run the following commands:
bench setup socketio
bench setup redis
service nginx reload
supervisorctl reload
4. Multi-Bench works easier when setup under one user
```