本文已参与「新人创作礼」活动,一起开启掘金创作之路。
- 服务器为Ubuntu系统
% cat /etc/issue
Ubuntu 20.04.3 LTS \n \l
- Nginx
- 已通过apt安装nginx
sudo apt install nginx
- 文件
/etc/nginx/sites-available/www.my-domain.com的内容如下
upstream sunquan_api {
server 127.0.0.1:9020;
}
upstream guanjin_api {
server 127.0.0.1:9986;
}
server {
server_name www.my-domain.com;
client_max_body_size 30m;
location /api {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://sunquan_api;
}
location /media {
alias /home/user/coding/sunquan/media;
}
location /static {
alias /home/user/coding/guanjin/static;
}
location /django {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://guanjin_api;
}
location /admin {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://guanjin_api;
}
location / {
root /home/user/frontend/baicai/dist;
try_files $uri $uri/ /index.html;
}
listen 80;
}
注:新增配置文件之后,需要执行./create_ln.py脚本来创建软连接(脚本内容见附录) 3. supervisor
- 也通过apt安装supervisor了
sudo apt install supervisor
- 文件
/etc/supervisor/conf.d/you.conf内容如下
[program:sunquan]
environment =
ZHJS_APP_SECRET=asfd,
SecretId=asdf,
SecretKey=asdfdf,
NEZHA_SECRET_KEY="(asf^n+xx*d)*jv4)00asd4+k*s7#1w3d#l2rg@5lajy4"
command=poetry run gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:9020
;command=poetry run python main.py r
directory=/home/wenping/coding/sunquan
numprocs=1
autostart=true
startsecs=10
autorestart=true
startretried=3
user=user
redirect_stderr=true
stdout_logfile=/home/user/coding/sunquan/supervisor.log
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=20
[program:guanjin]
environment =
ZHJS_APP_SECRET=asdf,
SecretId=asdasf,
SecretKey=asdfasf,
NEZHA_SECRET_KEY="(asdf^n+xx*d)*jv4)asdfas+k*s7#1w3d#l2rg@5lajy4"
command=poetry run python manage.py runserver 0:9986
directory=/home/wenping/coding/guanjin
numprocs=1
autostart=true
startsecs=10
autorestart=true
startretried=3
user=user
redirect_stderr=true
stdout_logfile=/home/user/coding/guanjin/supervisor.log
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=20
- poetry
- 可通过pipx安装它
pip install pipx --user
pipx install poetry
sudo ln -s /usr/local/bin/poetry /usr/bin/poetry
- clone代码,然后创建虚拟环境,安装生产依赖
mkdir ~/coding
cd ~/coding
git clone https://git/xxx
cd xxx
poetry shell
poetry install --no-dev
附:
- create_ln.py文件内容:
#!/usr/bin/env python3
import os
from pathlib import Path
def run_and_echo(cmd: str) -> int:
print('-->', cmd)
return os.system(cmd)
def create_ln(target: Path, path: str) -> int:
created = 0
if path.suffix not in {'.crt', '.key', '.bak', '.py'}:
name = path.name
p = target.joinpath(name)
if not p.exists():
print(f'creating ln of {name} ...')
created += 1 - run_and_echo(f'sudo ln -s {path} {p}')
return created
def main():
pwd = Path(__file__).resolve().parent
ps = pwd.glob('*.*')
target = pwd.parent / 'sites-enabled'
created = 0
for i in ps:
created += create_ln(target, i)
if created == 0:
print('No new conf file found.\nNothing to do with it.')
if __name__ == '__main__':
main()