CentOS 7 + Python Flask + MySQL + Nginx 配置

如题,最近在弄个自用的网站,需要让 Flask 在 Nginx 服务器上跑起来(不要问我为什么不用 Apache ~ ( ̄o ̄) . z Z),也算是给自己留个记录吧
部分资料参考自网络

0.切换到 root 用户

1
sudo su

1.安装并启动 Nginx

1
2
3
yum install nginx
systemctl start nginx.service # 开启 nginx 服务
systemctl enable nginx.service # 跟随系统启动

此时使用 localhost 应该会出现 Welcome to nginx 的欢迎页面了

2.安装并启动 MySQL
(这里我用的是 MariaDB,就是 MySQL 换个壳,没多大区别…)

1
2
3
yum install mariadb-server mariadb
systemctl start mariadb # 开启 mysql 服务
systemctl enable mariadb # 跟随系统启动

3.初始化 MySQL 安全策略

1
mysql_secure_installation

会提示输入 root 密码,默认为空,直接回车即可
然后就问是否重新设置 root 密码,当然是要重新设置的啦。设置完后还有几个问题都输入 y 同意就行了

4.安装并配置 Python 和 pip

1
yum install python34 # 安装 3.4.x 版本

由于 CentOS 自带了 Python 2.7 的版本,所以某些情况下,直接替换掉原始的版本可能出现未知问题,比如 yum 没法用之类的,就需要手动去 /usr/bin/python 修改链接关系,使其正确链接到 Python2,可用 ls -l 命令检查,这里我上一张正确的连接图

后面执行命令的时候我将会用 Python3 来执行,python3 xxx

5.安装 pip,Gunicorn 和 flask

1
2
3
yum install python34-pip # 安装 pip
pip3 install flask
pip3 install gunicorn

6.配置 Flask
编写文件 /home/web/api/api.py

1
2
3
4
5
6
7
8
9
10
11
12
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()

7.使用 Gunicorn 启动项目

1
2
3
4
5
6
7
8
9
10
11
12
13
gunicorn -D -w 3 -b 127.0.0.1:8000 api:app
注意要在项目根目录下执行这条命令
-D 后台运行
-w 启动 3 个工作线程
-b 指定 IP 和端口号
最后的那个 api:app
api 就是那个 Python 文件的名称(不包括后缀/模块名)
app 就是 Flask 实例的名称
可参见上文 api.py 的代码

可以使用 ps -aux 命令查看系统运行的进程
同样,你也可以使用 kill [PID] 来关闭 Gunicorn 的进程

8.配置 Nginx
主要就是配置 nginx 目录,这里我以 api 为例

1
vim /etc/nginx/conf.d/api.conf

1
2
3
4
5
6
7
8
9
10
server {
listen 80;
server_name api.iacn.me; # 外部域名
location / {
proxy_pass http://127.0.0.1:8000; # 反向代理 Gunicorn 本地的服务地址
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

保存好然后重启 Nginx

1
systemctl restart nginx

9.可以查看一下端口信息
snipaste20170405_150243.png

10.已经可以从外部访问了
snipaste20170405_150322.png