简单记录一下 uwsgi 爬坑笔记
使用python3 和 flask 写的简单网站 主要有两个文件构成 一个 views 和 一个启动脚本 views.py代码如下
from app import app
@app.route('/')
@app.route('/index')
def index():
return 'hello world'
@app.route('/hello')
def hello():
return 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'
启动脚本 wsgi.py 代码如下
from app import app
if __name__ == "__main__":
app.run()
views.py 目录结构 myapp/app/views.py wsgi.py 目录结构 myapp/wsgi.py
这里说明下 使用python3 遇到的问题 ubuntu14 安装python3后 使用命令 python3 -m venv flask 创建env总会出如下错误
Error: Command '['/home/cg/myvenv/bin/python3.4', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1
这样 环境能创建 但是不能使用 而且没有pip 使用非常不方便, 这时要使用 python3 -m venv –without-pip flask 即可成功创建 但是没pip 所以先激活 虚拟环境
. flask/bin/activate
然后手动安装 pip ,使用 如下步骤
curl -O https://pypi.python.org/packages/source/s/setuptools/setuptools-1.1.6.tar.gz
tar xvzf setuptools-1.1.6.tar.gz
cd setuptools-1.1.6
python ez_setup.py
easy_install pip
下载包 解压 然后安装 就可以使用 python3 的pip 安装 flask了
下面 安装 uwsgi 直接apt-get install uwsgi 安装即可
配置uwsgi 作为http 服务器 直接能访问 方便测试 创建 http.ini 配置文件 添加如下代码
[uwsgi]
vhost=false
uid=www-data
gid=www-data
plugins=python3
module = wsgi
master = true
processes = 5
protocol=http
socket=0.0.0.0:8080
chmod-socket = 660
vacuum = true
die-on-term = true
wsgi-file=/var/web/myapp/wsgi.py
virtualenv=/var/web/myapp/flask
callable=app
daemonize=/var/web/myapp/uwsgi.log
其中 大部分命令行命令 如 –socket=0.0.0.0:8080 类似的命令 都可以直接 使用 socket=0.0.0.0:8080配置在文件中 简化 uwsgi 命令 启动 只需要 uwsgi --ini http.ini
就可以启动了 简单方便
配置为nginx 只需要 去掉 protocol=http 把 socket=0.0.0.0:8080 替换为 socket=web.sock即可
代码如下
[uwsgi]
vhost=false
plugins=python3
uid=33
gid=33
module = wsgi
master = true
processes = 5
socket=/tmp/web.sock
chmod-socket = 660
vacuum = true
pidfile=uwsgi.pid
die-on-term = true
wsgi-file=/var/web/myapp/wsgi.py
virtualenv=/var/web/myapp/flask
callable=app
daemonize=/var/web/myapp/uwsgi.log
nginx 配置
server {
listen 80;
root /var/web/myapp;
index index.html index.htm;
server_name 0.0.0.0;
location / {
include uwsgi_params;
uwsgi_pass unix:///tmp/web.sock;
}
启动 uwsgi 和 nginx 即可访问
过程中遇到的问题
uwsgi 总提示
uwsgi: unrecognized option '--callable'
getopt_long() error
此时需要在配置中增加选项 plugins=python3 选项
遇到如下错误时
error “bind(): Permission denied”
使用的 .sock 文件放到了 应用文件夹下导致没有权限 放到 tmp 目录下即可