Flask+uWSGI+Nginx+Ubuntu部署教程(3)

首先,我们把应用程序上传到服务器中,我在用 git 管理项目,所以只需要 git clone 一下就可以了:

$ git clone http://url/of/you/git/repo

如果你需要从本地上传项目文件,可以用 scp 命令,这里就不啰嗦用法了。总之我们将项目文件放到服务器,然后就可以用 virtualenv 管理 Python 环境:

$ virtualenv ENV $ source ENV/bin/activate # 激活虚拟环境 $ pip install -r requirement.txt # 解决依赖问题 $ deactivate # 退出依赖环境

这里就用 Flask 的7行代码做示例吧,我新建了一个文件夹,名为 helloflask,将下面的内容:

from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run(host='0.0.0.0', port=5001)

保存为hello.py,运行试试,在浏览器输入服务器公网 ip 地址,加端口号5001就可以看到结果。

好了,现在我们用 Nginx 来承担 Web 服务。

删掉 Nginx 的默认配置文件:

$ sudo rm /etc/nginx/sites-enabled/default

有心的话,其实可以从 Nginx 默认配置中了解一些配置参数,当然最靠谱的途径还是看 Nginx 的文档。这里只简单尝试 Nginx,下面给出一个简单的配置:

server { listen 80; server_name your.website.url charset utf-8; client_max_body_size 75M; location / { try_files $uri @yourapplication; } location @yourapplication { include uwsgi_params; uwsgi_pass unix:/home/frank/Documents/helloflask/helloflask_uwsgi.sock; } }

我们可以将上述内容保存为 helloflask_nginx.conf,稍作解释:server_name 可以是域名,也可以写 ip 地址,uwsgi_pass 是表明 Nginx 与 uwsgi 的交流方式,我这里用的是 sock 文件,当然你也可以用指定端口号的形式,具体可以看这里。将 Nginx 配置文件用软链接链接到 Nginx 配置文件夹中:

sudo ln -s /home/frank/Documents/helloflask/helloflask_nginx.conf /etc/nginx/conf.d/

重启 Nginx:

sudo /etc/init.d/nginx restart

这时刷新一下之前打开的服务器公网 ip(或绑定的域名),这时看到的就不是「Welcome to Nginx」,而是「502 Bad Way」,因为我们还没有启动 uWSGI,现在我们将下面的内容保存为 helloflask_uwsgi.ini(用 xml 的格式也是可以的,具体可以看文档):

#application's base folder base = /home/frank/Documents/helloflask #python module to import app = hello module = %(app) home = %(base)/ENV pythonpath = %(base) #socket file's location socket = /home/frank/Documents/helloflask/%n.sock #permissions for the socket file chmod-socket = 666 #the variable that holds a flask application inside the module imported at line #6 callable = app #location of log files logto = /home/frank/Documents/helloflask/%n.log

稍稍解释一下,socket 指定的是与 nginx 进行通信的端口文件。其他的参数,如线程数,处理器数等,可以查看文档后进行配置。上面的内容都是可以通过 uwsgi 命令的参数指定的,在命令行中敲入一行命令就可以了,为了「可持续发展」,当然是用文件保存下来比较好。

通过 uwsgi 命令,--ini 参数:

$ uwsgi --ini helloflask_uwsgi.ini &

指定配置文件,后台运行 uwsgi, 这时再刷新一下之前打开的页面,就可以看到应用正常运行了。

我尝试了在一台服务器上运行多个应用,其实只需要改一下文件名,分别处理 uWSGI 和 Nginx 的配置文件即可(Nginx 的配置,可以写在同一个文件中,写两个 server 就行了)

常用命令 nginx 常用命令

启动命令:

$ sudo nginx

$ sudo /usr/sbin/nginx

停止 nginx

$ sudo nginx -s stop

平滑启动 nginx

sudo nginx -s reload

所谓平滑启动就是在不停止 nginx 的情况下,重启 nginx,重新加载配置文件,用新的工作进程代替旧的工作进程。

总结

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/03d6ad9266a30453a02ac505423d891c.html