0%

Nginx部署Flask应用

引言

网上有好多nginx部署flask的教程,但是每一个教程或多或少有点问题,这里我把我的部署过程记录下来,分享一下。

安装nginx

这个比较简单,直接apt-get安装就可以了。

1
sudo apt-get install nginx

上传flask应用

我直接将应用放在了用户目录下面/home/yu/my_flask。目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
my_flask
|
+--venv #虚拟环境目录
|
+--app
| |
| +--templates
| |
| +--__init__.py
| |
| +--view.py
|
+--manage.py

创建虚拟环境

由于多个应用的依赖不同,我习惯使用虚拟环境把应用区分。
可以通过以下命令安装virtualenv

1
pip install virtualenv

初始化

1
2
cd my_flask
virtualenv venv #我习惯把虚拟环境设为venv

启动/退出虚拟环境

1
2
source venv/bin/activate  #启动
deactivate #退出

安装依赖包

在虚拟环境中,pip安装就可以了,很简单,就不啰嗦了。

安装uwsgi

通过uwsgi代理,把我们的flask和nginx反向代理连接起来。
安装也很简单

1
pip install uwsgi #在虚拟环境中运行

配置nginx

在/etc/nginx/sites-enabled/下的default文件删掉,然后在/etc/nginx/sites-available/创建一个你自己的文件,比如my_flask,在文件中输入一下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80 default_server; #这是监听的端口号,如果是默认网站,就在后面加上default_server
server_name 115.159.155.175; #绑定域名或公网IP

location / { try_files $uri @yourapplication; }
location @yourapplication {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock; # 指向uwsgi所应用的内部地址,所有请求将转发给uwsgi处理
# 文件名字可以自由改动,请确保你的nginx有权限读写文件
uwsgi_param UWSGI_PYHOME /home/ubuntu/my_flask/venv; # 指向虚拟环境目录
uwsgi_param UWSGI_CHDIR /home/ubuntu/my_flask; # 指向网站根目录
uwsgi_param UWSGI_SCRIPT manage:app; # 指定启动程序
}
}

启动uwsgi

在你的虚拟环境中运行

1
uwsgi -s /tmp/ITT.sock -w myapp:app -d ./logs/uwsgi.log #确保你的/tmp/uwsgi.sock与上面的地址相同

启动nginx

1
sudo serviec nginx start

此时,访问你的网站,应该就可以了。

如果有其他问题,可以去/var/log/nginx/和~/my_flask/logs/uwsgi.log中查看日志,然后百度或Google。