本文记录基于 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 mysqlclient
pip 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。