ubuntu虚拟机flask服务器,在Ubuntu服务器上部署flask进程

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 所在的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值