在 CentOS 7.5 快速部署 Flask 框架

学习 Python 有段时间了,用 Python Flask 框架做了一个小型的系统,一直在本地的环境运行。为了方便日常使用,购买了一台 VPS 作为服务器,把项目架设到 VPS 上面。虽然曾在服务器上搭建过 WAMP 的坏境,毕竟之前系统环境和现在有很大的不同。在经历了几次搭建失败之后,终于把 Python Flask 坏境给搭建起来,为了方便给自己做个记录,给大家做一个参考,将整个搭建过程完整的写下来。

开发环境

  • CentOS 7.5
  • Python 3.7.3
  • Nginx 1.14.2
  • MySQL 8.0.15
  • Flask 1.0.2
  • Gunicorn 19.9.0

1. 关闭防火墙和 SElinux

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld   #开机禁用firewall服务
[root@localhost ~]# getenforce  #查看SELinux状态
Enforcing

[root@localhost ~]# /usr/sbin/sestatus   #Current mode表示当前selinux防火墙的安全策略
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

[root@localhost ~]# setenforce 0      #临时关闭SElinux
[root@localhost ~]# getenforce 
Permissive

[root@localhost ~]# vim /etc/selinux/config    #永久关闭

将 "SELINUX=enforcing" 改为 "SELINUX=disabled",保存后退出,重启才会生效

2. 安装软件包

VPS 上安装的 CentOS 系统并非完整版的系统,有些命令无法运行。为了方便之后的配置,要将所需要的工具包手工给安装上。

[root@localhost ~]# yum install -y vim tree net-tools lrzsz  
[root@localhost ~]# yum groupinstall "Development Tools" -y

3. 安装 Pyenv

3.1. 什么是 Pyenv

Pyenv 是 Python 版本管理器。在不影响系统自带 Python 版本下,实现 Python 多版本共存。

3.2. 什么是 Pyenv-virtualenv

Pyenv-virtualenv 是 Pyenv 插件,可以用来创建基于不同Python版本的干净的虚拟环境。

3.2. 安装依赖包

[root@localhost ~] yum -y install git gcc make patch zlib-devel gdbm-devel openssl-devel sqlite-devel bzip2-devel readline-devel

3.3. 安装 Pyenv 和 Pyenv-virtualenv

[root@localhost ~] curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

3.4. 设置 Pyenv 环境变量

~/.bash_profile 文件中加入三行配置文件,不会用 Vim 编辑器的可以先用 FTP 软件下载这个文件修改保存之后再上传上去。

export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

运行命令exec "$SHELL" 或者source ~/.bash_profile

3.5. Pyenv 使用指南

3.5.1. 查看可以安装的版本

[root@localhost ~] pyenv install --list

3.5.2. 安装 Python 3.7.3

[root@localhost ~] pyenv install 3.7.3

在安装 Python 3.7.0 以上的版本会报 ModuleNotFoundError: No module named '_ctypes' 错误

Python 3.7.0 以上的版本需要新的包 libffi-devel ,只需要安装此包,编译即可。

[root@localhost ~] yum install libffi-devel -y
[root@localhost ~] make install

再次执行命令 pyenv install 3.7.3 ,即可安装成功。

3.5.3. Pyenv 常用命令

查看所有 pyenv 下安装的所有版本

[root@localhost ~] pyenv versions
* system (set by /root/.pyenv/version)
  2.7.13
  3.6.5
  3.7.3

切换 Python 版本

[root@localhost ~] pyenv local 3.7.3

3.6. Pyenv-virtualenv 使用指南

3.6.1. 创建虚拟环境语法

pyenv virtualenv 版本号 虚拟环境名

[root@localhost ~] pyenv virtualenv 3.7.3 venv-3.7.3

3.6.2. 创建项目

[root@localhost ~] mkdir Python3
[root@localhost Python3] pyenv local venv-3.7.3
(venv-3.7.3) [root@localhost Python3] 
(venv-3.7.3) [root@localhost Python3] cd ..
[root@localhost Python3] cd Python3
(venv-3.7.3) [root@localhost Python3]
(venv-3.7.3) [root@localhost python3] python -V
Python 3.7.3

我们只要进入创建的项目,就会自动进入创建的虚拟环境,反之亦然。如需要关闭自动激活,可以运行 pyenv deactivate,需要重启可以运行 pyenv activate 虚拟环境名

4. 安装 Nginx

4.1. 安装

cd /root/soft
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar -zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2  
./configure 
make
make install

4.2. 配置 Nginx

Nginx 配置文件位于

# /usr/local/nginx/conf/nginx.conf

server{
    listen 80; #监听的端口
    server_name 127.0.0.1;
    #当请求这些server name的时候,nginx才会做反向代理,0.0.0.0是指全部
    location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
    # location 顾名思义,定位,就是当访问 / 的时候,nginx会将请求转给本地的8080端口,而后面的设置都是一些基本的配置,可以直接用
    location /static {
      alias /home/project/static;
    }
}

4.3. 常用命令

/usr/local/nginx/sbin/nginx           # 启动
/usr/lcoal/nginx/sbin/nginx -s stop   # 关闭
/usr/local/nginx/sbin/nginx -s reload # 重启

4.4. 其他

在执行到 make 命令,会出现 make[1]: Leaving directory /usr/local/nginx-1.14.2 无需理会即可。

5.0. 安装 MySQL

5.1. 下载并安装 MySQL 官方的 Yum Repository

[root@localhost ~] wget -i -c https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
[root@localhost ~] yum -y install mysql80-community-release-el7-3.noarch.rpm
[root@localhost ~] yum -y install mysql-community-server

5.2. 启动 MySQL

[root@localhost ~] service mysqld start
[root@localhost ~] systemctl start mysqld.service

5.3. 检查 MySQL 状态

[root@localhost ~] service mysqld status
[root@localhost ~] systemctl status mysqld.service

5.4. 获取 MySQL 临时密码

grep 'temporary password' /var/log/mysqld.log

5.5. 修改 MySQL 密码

# 登陆 MySQL
mysql -uroot -p
# 修改 MySQL 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

6.0. 安装 Gunicorn

6.1. 安装

# 进入之前创建的虚拟环境目录
(venv-3.7.3) pip install gunicorn

6.2. 运行

(venv-3.7.3) gunicorn -w4 -b 127.0.0.1:8080 -D manage:application

6.3 关闭和重启

# 获取Gunicorn进程树
pstree -ap|grep gunicorn
# 关闭进程
kill -9 1234
# 重启进程
kill -HUP 1234

结束

至此在 CentOS 部署 Flask 框架已经全部完成,因开发环境和其他因素的关系,以上内容仅供参考。在安装部署过程中出现的任何错误,建议 Google 查询。

参考