nginx 与 uwsgi的关系
uwsgi 与 Flask 应用的关系
上传Flask 应用代码
我是利用FlashFXP
上传
连接类型选择SFTP over SSH
并输入云空间的url或ip地址,用户名,和密码
_PS_:除Ubuntu系统用户为ubuntu外,其余系统均为root,我这里用的是ubuntu系统
登录后可以将整个项目文件夹上传到云空间上,上传后如下图所示
安装Flask 应用的运行环境
推荐利用虚拟环境来安装,避免不同应用的互相影响
###打开项目文件夹:1
cd flask_test
安装虚拟环境
1 | pip install virtualenv |
安装成功后,项目根目录下会出现venv
文件夹
启动虚拟环境
1 | source venv/bin/activate |
关闭虚拟环境是:1
deactivate
安装Flask 应用所需插件(一定要在虚拟环境下安装)
打开requirements.txt
(可能名称不同)文件所在目录1
pip install -r requirements.txt
配置mysql数据库
安装mysql数据库服务器1
sudo apt-get install mysql-server
安装mysql数据库客户端1
2sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
检查数据库服务是否正常运行1
netstat -tap|grep mysql
配置mysql数据库
配置字符编码(建议将全部的字体编码设为utf8)
下面说配置方法,在我的ubuntu上安装mysql后,发现在/etc/mysql.
下的my.cnf
文件只有如下几行代码
1 | !includedir /etc/mysql/conf.d/ |
这跟网上说的不同,我的做法是,把 conf.d
目录下的mysql.cnf
和mysql.conf.d
目录下的mysqld.cnf
内容全复制到my.cnf
,并同时对这三个文件进行修改。1
2
3
4
5
6
7
8[mysql]
default-character-set=utf-8
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
#bind-address = 127.0.0.1 #将`bind-address = 127.0.0.1`注释掉
以上全部设置完后,重启mysql1
sudo /etc/init.d/mysql restart
检查MySQL服务器占用端口1
netstat -nlt|grep 3306
如果显示如下内容,则表示MySQL已经允许远程登陆访问。1
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
如果显示1
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
则说明你没有将bind-address = 127.0.0.1
注释掉
新建数据库
切记要在修改好数据库字符编码后再新建数据库
1 | create database flask CHARACTER SET utf8 |
在建好数据库后,查看下字符编码
按照以上方法配置后,进入mysql控制台,输入1
2use flask #选择数据库
show variables like "%char%"
如果出现以下信息,说明数据库配置成功
注意:
在运行flask 应用时,需要先把数据库更新一下。
安装Uwsgi(安装在虚拟环境中)
1 | pip install uwsgi |
配置Uwsgi
在项目根目录中,新建文件·config.ini·1
2
3
4
5
6
7
8
9
10[uwsgi]
socket= 127.0.0.1:3031 #作为内部地址,供nginx和uwsgi使用
master = true
home = venv #虚拟环境名称
wsgi-file = manage.py #项目的启动文件
callable = app # Flask 的application类
processes = 4
threads = 2
buffer-size = 32768
stats = 127.0.0.1:9191 #状态检测地址
如果
socket
配置为 :3031(即0.0.0.0:3031),则通过uwsgi config.ini
可以使我们通过输入外网地址访问应用
输入以下命令测试是否配置成功:1
uwsgi config.ini
如果没有提示出错信息,则说明配置成功(如果提示no internal routing support ,rebuild with pcre support !!!
)无视就可以。
安装supervisor
安装supervisor来启动Uwsgi1
sudo apt-get install supervisor
配置supervisor
在/etc/supervisor/conf.d
目录下新建文件flask_test_supervisor.conf
1 | cd / |
flask_test_supervisor.conf
文件内容:
1 | [program:flask_test] |
启动supervisor1
sudo service supervisor start
安装Nginx
1 | sudo apt-get install nginx |
###配置Nginx
配置文件在/etc/nginx/sites-available中的default中,将其替换掉即可。新的default文件内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14server {
listen 80 ;
server_name 115.159.213.132; #云空间ip地址(外网ip)
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi
uwsgi_param UWSGI_PYHOME /home/ubuntu/flask_test/venv; #虚拟环境目录
uwsgi_param UWSGI_CHDIR /home/ubuntu/flask_test; #网站根目录
uwsgi_param UWSGI_SCRIPT manage:app; #启动程序名称
uwsgi_read_timeout 100;
}
}
重启Nginx1
sudo service nginx restart
测试网站是否可以访问
输入云空间公网ip地址即可访问
如果出现内部网关错误,请查看一下是否网站能否在本地运行起来