flask, nginx 和 supervisor 的尝试。知其然而不知其所以然。
pip3 的安装与升级
安装 pip3:sudo apt-get install python3-pip
升级 pip3:sudo pip install --upgrade pip
查看 pip 版本:pip -V
使用 pip 的话,用命令pip3
virtualenv 安装
安装sudo pip3 install virtualenv
安装项目
创建项目文档
1
2
mkdir /home/project
cd /home/project
创建虚拟环境
执行virtualenv venv
启动虚拟环境source /venv/bin/activate.
启动后会在命令提示符的左面出现 (venv).
想要结束虚拟环境,只需要执行deactivate即可。
在虚拟环境中搞事情
虚拟环境中安装 flask 和 uwsgi, pip install uwsgi flask.
将文档上传到服务器
以 Ubuntu 服务器为例。
打开本地的Xshell,安装lrzsz.便可以在本地和服务器间互传文档。命令为
1
sudo apt-get install lrzsz
要将本地文档上传到 ubuntu, 只需要输入sudo rz并回车,(下载是sz)即可弹出本地路径窗口,选择文档上传即可.
直接编写一个最简单的 Flask app.
执行sudo nano myproject.py 并输入一下代码
1
2
3
4
5
6
7
8
9
10
from flask import Flask
app = Flask(__name__)
def ():
return "Hello World"
if __name__ == '__main__':
app.run(debug=True)
验证是否一切正常
执行python app.py观察是否安装成功.
也可以在自己电脑的浏览器上输入网址ip.ip.ip.ip:5000观察是否能正确运行。注意将 5000 换成 Flask 启动的端口,并且保证该端口是开放的,可以用iptables开放端口。
配置 uWsgi
在项目目录下创建 config.ini, 内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[uwsgi]
socket = 127.0.0.1:8000
chdir = /home/project/
wsgi-file = myproject.py
callable = app
# 处理器数
processes = 4
# 线程数
threads = 2
#状态检测地址
stats = 127.0.0.1:9191
运行 uWSGI.uwsgi config.ini得到如下输出
1
2
3
4
5
6
7
(venv)ubuntu@ ubuntu$ uwsgi config.ini
[uWSGI] getting INI configuration from config.ini
*** Starting uWSGI 2.0.8 (64bit) on [Fri Dec 19 14:34:11 2014] ***
// 此处略去那些无用的启动信息
*** Stats server enabled on 127.0.0.1:9191 fd: 15 ***
按ctrl+c关闭进程.
安装 Supervisor
sudo apt-get install supervisor
新建 Supervisor 的配置文档sudo nano /etc/supervisor/conf.d/flaskCfg.conf
输入以下内容1
2
3
4
5
6
7
8
9
10
11
12
13
[program:my_flask]
# 启动命令入口
command=/home/project/venv/bin/uwsgi /home/project/config.ini
# 命令进程所在目录
directory=/home/project
#运行命令的用户名
user=ubuntu
autostart=true
autorestart=true
# 日志地址
stdout_logfile=/home/project/logs/uwsgi_supervisor.log
你需要在/home/project/logs/位置创建一个uwsgi_supervisor.log文档
启动和停止
只需要如下命令
1
2
sudo service supervisor start
sudo service supervisor stop
配置 Nginx
由于博客本身也是托管到 Nginx 上的,所以我们需要侦听一个新的端口。
执行sudo nano /etc/nginx/sites-availble/project, 并且将其软连接sudo ln /etc/nginx/sites-availble/project /etc/nginx/sites-enable/project
或者可以直接 copydefault的内容进行修改.
输入如下配置
1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 876;
server_name XXX.XXX.XXX; #公网地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
uwsgi_param UWSGI_PYHOME /home/project/venv; # 指向虚拟环境目录
uwsgi_param UWSGI_CHDIR /home/project; # 指向网站根目录
uwsgi_param UWSGI_SCRIPT myproject:app; # 指定启动进程
}
}
注意 侦听端口不能是8000。
注意 location字段中不要出现try_files $uri $uri/ /index.html
这会导致令人崩溃的错误,并且耗费一整天的时间来排查.
最后执行
1
2
sudo nginx -t
sudo service nginx restart
即可享受你的第一个web python项目.
优化
如果想用一个域名加后缀的方法调用myproject, 最简单的方法是在Nginx的配置文档中进行转发.
在default中,输入
1
2
3
location /domain {
proxy_pass http://localhost:876/;
}
注意这段必须出现在location / {}前,以保证能够准确定位到domain.
注意地址后的反斜杠是关键,加上反斜杠,则最后转发过去的地址不包括/domain, 反之则包括/domain.
Bug
debug
debug 时,可以停掉 supervisor,并使用uwsgi config.ini命令来单独对 uwsgi 进行故障排除.
注意配置 uWsgi 时,项目地址一定要是 myproject.py 所在的地址。
1万+

被折叠的 条评论
为什么被折叠?



