文章目录

  • 创建python虚拟环境
  • 配置uwsgi
  • 配置nginx
  • 配置supervisor


之前做网站用的python后端,学习部署的时候花了好长时间
第一次部署也是出现了好多奇奇怪怪的问题,现在整理一下

创建python虚拟环境

  • 安装虚拟环境的第三方包 virtualenv
    pip install virtualenv 或者使用清华源安装
    pip install virtualenv -i https://pypi.python.org/simple/
  • 创建虚拟环境
    cd到网站根目录,执行virtualenv venv在当前目录下创建名为venv的虚拟环境(python的版本是安装virtualenv时使用的版本)
    参数 -p 指定python版本创建虚拟环境:virtualenv -p /usr/local/bin/python2.7 venv 参数 --system-site-packages 指定创建虚拟环境时继承系统三方库:virtualenv --system-site-packages venv

配置uwsgi

我安装的是python版本的, 用pip3 install uwsgi安装
然后在根目录创建一个uwsgi.ini文件,也有其他格式的,详见官网文档

以下是我的配置文件:

[uwsgi]
# ;和#为注释
socket = 127.0.0.1:8008	# 与nginx交流的端口
chdir = /www/wwwroot/blog	# 网站根目录
wsgi-file =  /www/wwwroot/blog/app.py	# 脚本文件,flask的启动文件,要带上后缀
processes = 10	# 进程数
threads = 30	# 线程数
stats = 127.0.0.1:9090	# 检查状态的端口
callable = app
; daemonize = /www/wwwroot/blog/uwsgi.log	# 指的后台启动 日志输出的地方,先注释掉
pidfile = /www/wwwroot/blog/uwsgi.pid	# 保存主进程的进程号
virtualenv = /www/wwwroot/blog/venv	# 虚拟环境环境路径
plugins = python3	# 使用的python版本
buffer-size = 32768	# 缓冲大小,不设置也可以

现在打开终端,cd到网站根目录,执行uwsgi uwsgi.ini,一般情况下不报错就是成功了……
毕竟跑在本地的没地方看只有一个黑黢黢终端

如果没有注释掉daemonize ,会看不见输入日志,关闭终端也会继续运行,可使用pkill -f uwsgi -9关闭

配置nginx

怎么添加站点就不说了,把目录绑定到网站根目录就好了

现在修改网站配置文件,添加或修改如下代码:

location / {
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
        include      uwsgi_params;
        uwsgi_pass   127.0.0.1:8008;	# uwsgi.ini中的 socket
    }

现在访问绑定的域名或者ip,会发现是502,再在网站根目录执行 uwsgi uwsgi.ini,打开网站,会看到自己的网站🎉🎉

配置supervisor

我是在宝塔的软件商店安装的,安装好之后就可以添加守护进程

名称

用户

运行目录

启动命令

进程数

随便填

要具有辨识度但是只能英文

root

用户

网站

根目录

uwsgi /(必须完整路径)/uesgi.ini

看情况

我每次启动在日志查看都看不见日志,是因为所有日志都分到了err日志,在子配置文件中将stderr_logfile*.err.log改成*.out.log就好了

现在启动可能会出现

!!!!!!!!!!!!!! WARNING !!!!!!!!!!!!!!
no request plugin is loaded, you will not be able to manage requests.
you may need to install the package for your language of choice, or simply load
it with --plugin.
!!!!!!!!!!! END OF WARNING !!!!!!!!!!