Python web 部署(完整版)(pycharm+flask + nginx + gunicorn +supervisor )
1.总览
pycharm:python编辑器,社区版免费使用
a.flask: 一个轻量级的python做网站的框架,用来做网站
b.nginx: 一个反向代理服务器,用来连接本地与互联网
c.gunicorn:容器,容纳发布在云端的网站
d.supervisor:进程管理工具,管理gunicorn进程
我们要做的,是在服务器上搭建一个网站,在外界通过服务器ip可以访问这个网站。
2.flask的应用
可以通过pip安装,十分简单。如果没有pip,通过源码安装也可。
pip install flask
然后新建一个python项目,新建文件views.py,写一个hello wrold的程序:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello world !'
if __name__ = '__main__':
app.debug = True
app.run()
然后运行,在编辑器下方出现
点击这个网址,或者直接在浏览器中输入127.0.0.1都可以访问这个网站,界面上单独显示一个hello world。这就是flask的一个网站了。
然后将这个项目移植到你的服务器中。注意,在linux环境中运行这个程序现在是无法通过本地浏览器来访问的。
3.使用gunicorn
之前这个hello world程序是用的flask自带的调试服务器,性能并不理想,所以我们使用gunicorn。
同样可以用pip安装,如果不行,可以下载源码包安装。
pip install gunicorn
安装好gunicorn后,可以用gunicorn来启动views.py这个文件了。也就是启动一个网站。运行以下命令
gunicorn -w 4 -b 0.0.0.0:8000 views:app
启动了8000端口,运行views.py文件中的网站。但是现在依旧不能在本地输入127.0.0.1或者输入服务器ip来访问这个网站要做到这一点,需要使用nginx.
还有一点需要注意,运行完之后注意结束这个进程,一般crtl+c就可以结束。如果下次运行,出现端口被占用的情况,需要使用命令:
ps -aux | grep gunicorn
把这些进程kill就行了,pid是第二列。
4.使用nginx实现本地访问服务器端发布的网站
首先还是安装,我是通过源码安装的,为保持路径一致,建议读者参照这篇博客,也根据源码安装:
https://blog.csdn.net/lwgkzl/article/details/81295577
安装成功之后,需要更改配置文件,这已经在上面这篇博客中有介绍,此处不再重复,如果你不懂配置中location这个参数的意思,请参照这篇博客:https://blog.csdn.net/lwgkzl/article/details/81278985
安装配置好nginx之后,通过命令启动nginx就可以在本地浏览器上输入服务器ip对服务器中发布的网站进行访问了。注意服务器端的gunicorn需要已经运行了views:app。
nginx基本命令:
/usr/local/webserver/nginx/sbin/nginx # 启动nginx
/usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx
5.supervisor 使用
其实supervisor 不是必需品,如果你不嫌麻烦,每次都可以通过gunicorn来启动,并且kill进程来关闭的话,supervisor其实是没多大必要的。不过装了还是方便许多。
首先还是安装:可以通过pip安装,也可以通过源码安装
pip install supervisor
装完了之后,在views.py同级的目录下:运行
echo_supervisord_conf > supervisor.conf # 生成 supervisor 默认配置文件
vim supervisor.conf # 修改 supervisor 配置文件,添加 gunicorn 进程管理
如果您是通过源码安装的,注意不能直接使用echo_supervisord_conf这个命令,需要找到他的路径,如/root/kzl/bin/echo... > ...
因为通过源码安装这个命令不是全局可用的,如果你想设置成全局可用的,不妨参考这篇文章:
https://blog.csdn.net/lwgkzl/article/details/81058961
之后配置这个supervisor.conf文件。在文件底部添加:
[program:myapp]
command=/the/path/to/gunicorn -w4 -b0.0.0.0:2170 views:app ; supervisor启动命令
directory=/the/path/to/project/ ; 项目的文件夹路径
startsecs=0 ; 启动时间
stopwaitsecs=0 ; 终止等待时间
autostart=false ; 是否自动启动
autorestart=false ; 是否自动重启
stdout_logfile=/the/path/to/log/gunicorn.log ; log 日志
stderr_logfile=/the/path/to/log/gunicorn.err
注意路径的修改,另外log文件夹需要自己创建。找一个自己觉得合适的目录:
mkdir log
supercisor基本命令:
supervisord -c supervisor.conf 通过配置文件启动supervisor
supervisorctl -c supervisor.conf status 察看supervisor的状态
supervisorctl -c supervisor.conf reload 重新载入 配置文件
supervisorctl -c supervisor.conf start [all]|[appname] 启动指定/所有 supervisor管理的程序进程
supervisorctl -c supervisor.conf stop [all]|[appname] 关闭指定/所有 supervisor管理的程序进程
以上就配置成功了一个简单的python web的hello wrold程序。可以在本地浏览器输入服务器ip访问hellowrold。