学习 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 查询。