Flask项目部署到云服务器
web 项目工作流程
-
开发模式
浏览器(chrome) <=> 开发服务器(Flask / WSGI Server) <=> Python(Flask) <=> 数据库(MySQL)
-
生产模式
浏览器(chrome) <=> 反向代理服务器(Nginx) <=> WSGI 服务器(uWSGI) <=> Python(Flask) <=> 数据库(MySQL)
运行环境迁移
- pip freeze > requirements.txt 将当前项目所使用的依赖包列表(包名及版本号)保存到 requirements.txt 中
- pip install -r requirements.txt 安装 requirements.txt 中所列举的依赖包
Nginx
-
安装
sudo apt-get nginx
-
配置
- 配置文件目录
/etc/nginx
- 虚拟主机目录
/etc/nginx/conf.d
- 配置文件目录
-
Nginx 默认站点配置体验
-
添加虚拟主机
-
在
/etc/nginx/conf.d
下增加blog.com.conf
server { listen 80; server_name blog.com www.blog.com; location / { root /var/www/blog; index index.html; } }
-
检查 Nginx 配置
sudo nginx -t
-
重启 Nginx
sudo service nginx restart
-
增加本地主机映射,修改
/etc/hosts
10.10.10.10 blog.com 10.10.10.10 www.blog.com
-
-
创建项目目录
sudo mkdir /var/www/blog
- 创建首页文件
/var/www/blog/index.html
- 创建首页文件
uWSGI
实现了 WSGI 协议的 Web 服务器,使用 uWSGI 启动 Flask 应用
- 创建 Flask 项目
/var/www/blog/blog.py
- 安装
pip install uwsgi
- 配置
--http # 以 HTTP 方式启动,监听ip及端口:10.10.10.10:5000
--socket # 以 socket 方式启动,监听ip及端口:10.10.10.10:5000
--chdir # 项目目录
--module # 指定 WSGI 模块
--callable # 指定应用程序
--daemonize # 指定后台启动的日志文件
--processes # 指定启动进程数
--threads # 指定启动线程数
-
HTTP 方式启动
-
uwsgi --http 127.0.0.1:5000 --module manage --callable app uwsgi --http 0.0.0.0:5000 --module manage:app
-
socket 方式启动
uwsgi --socket 127.0.0.1:5000 --module manage --callable app
uwsgi --socket 127.0.0.1:5000 --module manage:app
netstat -tlnp 命令可以查看 有那些端口被使用
- nginx 转发(TCP)
server {
listen 80;
server_name blog.com www.blog.com
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
}
}
从配置文件启动 uwsgi (socket) uwsgi.ini
uwsgi --ini uwsgi.ini
[uwsgi]
socket = 127.0.0.1:5000
module = manage
callable = app
daemonize = /var/log/uwsgi.log
-
nginx 转发(HTTP)
-
server { listen 80; server_name blog.com www.blog.com; location / { proxy_pass http://127.0.0.1:5000; } }
-
-
从配置文件启动 (http)
-
[uwsgi] http = 127.0.0.1:5000 module = manage callable = app daemonize = /var/log/uwsgi.log
-
静态资源
Nginx 有很好的静态资源处理能力,images,css,javascript 通常由 nginx 直接输出,无需通过 WSGI 服务器
-
静态资源匹配规则
-
location /static { root /var/www/blog; #alias /var/www/blog/static; }
-
创建静态资源文件夹
mkdir static
,并拷贝一张图片 -
通过
www.blog.com/static/image.jpep
访问