概要:
我使用的是cento7
本文主要阐述的是服务的部署
先附上sanic的中文文档
https://sanic-cn.readthedocs.io/zh/latest/sanic/deploying.html
配置过程
Supervisor
安装:
yum install supervisor
supervisor 配置:
配置文件是 /etc/supervisord.conf,直接编辑这个文件,在最后添加我们的项目配置
[program:app] #app是你自己命名的
command=gunicorn -c /home/project/gunicorn_c app:app #这个是gunicorn的命令
directory=/home/project
startsecs=0
stopwaitsecs=0
autostart=true #随着supervisor启动
autorestart=true #自动重启项目服务
stdout_logfile=/home/project/logs/supervisor.log #日志
stderr_logfile=/home/project/logs/supervisor.err #错误日志
附supervisor命令:
supervisord -c /etc/supervisord.conf 启动服务
supervisorctl status #查看所有进程的状态
supervisorctl stop app#停止app,app就是你的项目在supervisor的命名
supervisorctl start app#启动app
supervisorctl restart app# 重启app
supervisorctl update #配置文件修改后可以使用该命令加载新的配置
supervisorctl reload #重新启动配置中的所有程序
gunicorn
安装:
pip install gunicorn
直接命令启动:
gunicorn app:app --bind 127.0.0.1:9090 --worker-class sanic.worker.GunicornWorker
app:app 前一个app是项目启动的入口文件名就是类似yourapp:app,后一个app是你python入口文件里面那个app.run()的app,没记错的话是这样的,有一个问题就是这样只能运行app的内容像下面,里面的进程是没有启动的,大家可以找别的方法解决
通过配置文件的命令启动:
gunicorn -c gunicorn.conf app:app #gunicorn.conf是你的配置文件的名字
配置文件我是命名为 gunicorn_c的无后缀的,也可以其他命名
import multiprocessing
reload = True
# 并行工作进程数
workers = multiprocessing.cpu_count() * 2 + 1
# 指定每个工作者的线程数
threads = 2
# 监听内网端口9090
bind = '127.0.0.1:9090'
# 设置守护进程,将进程交给supervisor管理
daemon = 'false'
# 工作模式协程
worker_class = 'sanic.worker.GunicornWorker'
# 设置最大并发量
worker_connections = 2000
# 设置进程文件目录
pidfile = '/home/yssj/run/gunicorn.pid'
# 设置访问日志和错误信息日志路anic.worker.GunicornWorker
accesslog = '/home/yssj/logs/gunicorn_acess.log'
errorlog = '/home/yssj/logs/gunicorn_error.log'
# 设置日志记录水平
loglevel = 'warning'
nginx
安装就不详细写了
修改配置文件,nginx安装路径下的nginx/conf/nginx.conf
反向代理
server {
listen 8080;
listen 你对外的ip地址;
#server_name somename alias another.alias;
location / {
proxy_pass http://127.0.0.1:9090; #转接到你python启动的地址和端口
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;
}
}
这是对于其单服务的,如果起多服务可以用到nginx的反向代理和负载均衡,大家可以了解一下
下面代码出自 https://www.cnblogs.com/Miss-mickey/p/6734831.html
upstream webservers {
server 172.18.144.23:4789 weight=10;
server 172.18.144.23:5789 weight=10;
}
server {
listen 80;
server_name test.nginx.com;
location / {
proxy_pass http://webservers;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
未完待续…