本文记录基于 Python3+, Flask, Nginx, uWSGI,MySQL 搭建的 Web 应用遇到的问题。
软件依赖
- Python :: >=3.4
- pip :: >=7.1.2
- Flask :: = 0.11.1
- Flask-Script :: =2.0.5
- Nginx :: >=1.0.15
- uWSGI :: = 2.0.12-2.el6
- MySQL :: >=5.5.37
Python
pyenv
使用 pyenv 来选择 Python 及 pip 的版本。 pyenv 为 github 项目,参照步骤安装。
|
|
安装需要的Python版本
Python Package
项目涉及的 package, 建议使用 pip install packagename 安装。
Flask
安装
|
|
启动
|
|
启动 Web:
curl http://127.0.0.1:5000/ 查看启动。
使用 MySQL
可以使用 SQLAlchemy 来操作数据库,安装
安装 flask-mysql,但报错
原因,Flask-MySQL 使用 MySQL-Python , 而后者不支持 Python3,替代方案有
pip install flask-sqlalchemy mysqlclientpip install PyMySQL
uWSGI
安装
|
|
测试 uwsgi --http :8002 --wsgi-file test.py 启动, test.py
|
|
curl localhost:8002 查看启动。
uWSGI 启动 Flask Web 应用
uwsgi --http 127.0.0.1:8002 --processes 2 --enable-threads --wsgi-file myapp.py --callable=app
问题:
uwsgi --http 127.0.0.1:8002 --processes 2 --chdir /my/to/path/ --master --enable-threads --wsgi-file myapp.py --callable=app报错,invalid request block size: 21573 (max 4096)...skip
原因: uwsgi 参数 -s 表示以 socket 方式提供通信端口,默认的协议是 tcp,
而通过浏览器访问使用的协议是http。
正确方式: 直接提供 http 服务。
如果使用第三方路由,如 Nginx, 则可以使用 -s 参数。
方便起见,将参数写入配置文件,如 xml, ini 类型。例如
|
|
查看更多说明,执行 uwsgi -h。
Nginx
使用 Nginx 进行反向代理配置,路由端口映射。
安装
以 root 权限安装:
安装后,配置位置在 /etc/nginx 目录下,nginx.conf 为默认配置, 启动服务则在 sites 下增加配置, 在 nginx.conf 增加一行: include sites/*.conf。Ubuntu 下目录名有所不同,但作用是一样的。
配置
基本项目配置
|
|
Nginx 可以编译添加第三方模块 more_set_headers 来自定义或清除相关head信息。
uWSGI 启动项目配置
在上述基础上增加两行,如下
启动
|
|
-c 制定配置文件的路径,不加 -c 会自动加载默认路径下的配置文件。
查看更多说明,执行 nginx -h
注意 -s signal 控制主进程。
重启 Nginx, nginx -s reload。
总结
每个模块都可能会遇到些问题,多看官方文档,多使用 Google,Bing 和 stackoverflow.com。