阿里云云服务器配置 nginx + uwsgi + flask + supervisor

阿里云云服务器配置 nginx + uwsgi + flask + supervisor

基本配置

阿里云主机操作系统:debian_9_02_64_20G

配置操作

更新系统

1
2
sudo apt-get upgrade
sudo apt-get update

添加用户

添加 web_admin

1
sudo adduser web_admin

修改/etc/sudoers,在其中添加用户 web_admin 的配置(关于 sudo 的配置这里不细说了)

安装软件

必备软件

1
2
3
4
sudo apt-get install python-setuptools
sudo easy_install pip
sudo pip install --upgrade pip
sudo pip install virtualenv

可选软件(系统默认带了 vim,这里安装一个自己用着顺手的就行,后面有不少需要编辑文本的事情)

1
sudo apt-get install emacs

修改默认的 python 版本

系统默认的 python 版本是 2.7,改为 python 3.5

1
2
3
# 查看默认的 python 版本
python --version
ls /usr/bin/python* -la

基于用户修改

修改 ~/.bashrc
添加:
alias python=’/usr/bin/python3.5’
重新加载 .bashrc:

1
. ~/.bashrc

安装和配置 nginx

1
sudo apt-get install nginx

在阿里云主机上,上述安装会失败,需要修改 /etc/nginx/sites-available/default,将
listen [::]:80 default_server;
注释掉后,再次安装即可。

此时,用浏览器打开,可以看到 nginx 的默认主页。

Nginx是一个提供静态文件访问的web服务,然而,它不能直接执行托管Python应用程序,而uWSGI解决了这个问题。让我们先安装uWSGI,稍候再配置Nginx和uWSGI之间的交互。

1
2
sudo apt-get install python-dev
sudo apt-get install python3-dev

删除掉Nginx的默认配置文件:

1
sudo rm /etc/nginx/sites-enabled/default

注意:如果你安装了其他版本的Nginx,默认配置文件可能在/etc/nginx/conf.d文件夹下。

创建一个我们应用使用的新配置文件 /home/web_admin/server/nginx.conf :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80;
server_name 47.94.139.151;
charset utf-8;
client_max_body_size 75M;

location / {
root /home/web_admin/server/wwwroot;
index index.html index.htm;
}

location /wx {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8006; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
uwsgi_param UWSGI_PYHOME /home/web_admin/server/python; # 指向虚拟环境目录
uwsgi_param UWSGI_CHDIR /home/web_admin/server; # 指向网站根目录
uwsgi_param PYTHONPATH /home/web_admin/server;
uwsgi_param UWSGI_SCRIPT server:app; # 指定启动程序
}
}

创建一个链接,并重启 nginx:

1
2
sudo ln -s /home/web_admin/server/nginx.conf /etc/nginx/conf.d/
sudo /etc/init.d/nginx restart

此时,访问服务器的公网IP,会得到一个错误页面:502 Bad Gateway
这个错误是正常的,它代表Nginx已经使用了我们新创建的配置文件,但在链接到我们的Python应用网关uWSGI时遇到了问题

安装和配置 Flask 工程

1
2
3
4
5
6
7
8
9
10
11
12
13
cd /home/web_admin/server

virtualenv -p /usr/bin/python3 python

# 激活
source ./python/bin/activate
# 另一种激活的方法
. python/bin/activate
# 退出
# deactivate

pip3 install uwsgi
pip3 install flask

编写 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
23
[uwsgi]
# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:8006

pythonpath = /home/web_admin/server/python

# 指向网站目录
chdir = /home/web_admin/server

# python 启动程序文件
wsgi-file = server.py

# python 程序内用以启动的 application 变量名
callable = app

# 处理器数
processes = 2

# 线程数
threads = 2

#状态检测地址
stats = 127.0.0.1:9191

运行 uwsgi :

1
2
3
. python/bin/activate

./python/bin/uwsgi uwsgi_config.ini

安装和配置 supervisor

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

1
sudo apt-get install supervisor

在 /etc/supervisor/conf.d/ 目录下新建一个配置文件 server.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
[program:my_flask]
# 启动命令入口
command=/home/web_admin/server/python/bin/uwsgi /home/web_admin/server/uwsgi_config.ini

# 命令程序所在目录
directory=/home/web_admin/server
#运行命令的用户名
user=root

autostart=true
autorestart=true
#日志地址
stdout_logfile=/home/web_admin/server/logs/uwsgi_supervisor.log

启动服务
sudo service supervisor start
终止服务
sudo service supervisor stop

至此,基本的环境就准备好了,在目录 /home/web_admin/server 中上传 Flask 项目,就可以了。