欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python web 部署(完整版)(pycharm+flask + nginx + gunicorn +supervisor )

程序员文章站 2022-06-13 19:10:41
...

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()

然后运行,在编辑器下方出现

Python web 部署(完整版)(pycharm+flask + nginx + gunicorn +supervisor )

 

点击这个网址,或者直接在浏览器中输入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

Python web 部署(完整版)(pycharm+flask + nginx + gunicorn +supervisor )

把这些进程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。