基于CentOS7.5+Flask框架快速部署一个小型的系统

发布时间:2021-12-27 16:29

最近在学习Python,有两个多月时间了,今天尝试用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

步骤一:关闭防火墙和 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",保存后退出,重启才会生效

步骤二:安装软件包

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

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

步骤三:安装 Pyenv

1. 什么是 Pyenv

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

2. 什么是 Pyenv-virtualenv

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

2. 安装依赖包

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

3. 安装 Pyenv 和 Pyenv-virtualenv

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

4. 设置 Pyenv 环境变量

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

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

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

5. Pyenv 使用指南

5.1. 查看可以安装的版本

[root@localhost ~] pyenv install --list

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 ,即可安装成功。

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

6. Pyenv-virtualenv 使用指南

6.1. 创建虚拟环境语法

pyenv virtualenv 版本号 虚拟环境名

[root@localhost ~] pyenv virtualenv 3.7.3 venv-3.7.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 虚拟环境名。

步骤四:安装 Nginx

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

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;
    }
}

3. 常用命令

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

4. 其他

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

步骤五:安装 MySQL

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

2. 启动 MySQL

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

3. 检查 MySQL 状态

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

4. 获取 MySQL 临时密码

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

5. 修改 MySQL 密码

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

步骤六:安装 Gunicorn

1. 安装

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

2. 运行

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

3 关闭和重启

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

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

python实现将list拼接为一个字符串 生活杂谈

python实现将list拼接为一个字符串

在 python 中如果想将 list 拼接为一个字符串,可使用 join() 方法。 join() 方法描述 将序列(列表或元组)中的元素以指定的字符连接成一个新的字符串。 语法 s...
Python如何截取字符函数 生活杂谈

Python如何截取字符函数

在工作中我们经常会遇到某种情况需要截取字符串中某个特定标签之间的内容(爬虫可能用到的较多),适用于很多情况例如字符串形式的xml报文、json格式的字符串以及其它类型的字符串。 因为我总...
Python实现自动填写脚本流程详解 生活杂谈

Python实现自动填写脚本流程详解

这篇文章主要介绍了Python实现自动填写脚本,100%准确率,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下! 前言 环境使用 Python 3.8 Pycharm 模...