liunx部署flask项目

如何在 linux 上部署 flask 项目 Python3.7 + virtualenv + uwsgi + git + mysql-5.6.45 + nginx

 

源码编译安装所需要的环境

yum install gcc

yum install -y zlib zlib-devel

yum install -y openssl openssl-devel

 

安装python3.7.3环境

cd /opt             #进入 opt 目录

mkdir subpack         # 创建一个安装包存放的目录(目录名随便起)

cd subpack      # 进入到创建的这个目录下

wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz    # 下载 python

xz -d Python-3.7.3.tar.xz          # 解压

tar -xf Python-3.7.3.tar            # 解压

cd Python-3.7.3       # 进入安装包目录

./configure --prefix=/opt/python37/      # 编译第一步,并指定 python 的安装路径

make        # 编译第二步

make install     # 编辑第三步

echo $PATH     # 取出当前环境变量

vim /etc/profile       # 编辑全局配置文件

PATH=”/opt/python37/bin: {$PATH}”     # 把当前 PATH 写入到文件最后一行,并保存退出

source /etc/profile          # 读取配置文件,加载变量生效

python3           # 进入 python3 编辑

exit()        # 退出 python 编辑

 

安装Virtualenv虚拟环境,进入虚拟环境后再安装uwsgi 和项目依赖包

pip3 install --upgrade pip                # 更新 pip

pip3 install virtualenv     #  安装 virtualenv

cd /opt    # 进入 /opt

virtualenv venv       # 创建名为 venv 的虚拟环境

source venv/bin/activate        # 进入 venv 的虚拟环境

pip3 install uwsgi            # 安装 uwsgi

pip3 install / 项目目录下 /requirements.txt            # 安装项目的依赖包

deactivate       # 退出当前虚拟环境

 

安装git

yum install git         # 安装的是旧版本的 git

 

安装mysql

​​​​​​​rpm -qa|grep -i mysql     # 查询是否安装过 mysql

rpm -ev Mysql 服务        # 如果查询到了就先清除 mysql 服务

find / -name mysql          # 查询 mysql 目录

rm -rf /mysql 目录          # 删除掉 mysql 目录

rm -rf /etc/my.cnf            # 删除掉 mysql 启动配置文件

 

cd /usr/local/           # 进入目录

mkdir mysql    # 创建 mysql 文件夹

cd mysql          # 进入该目录下

wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-server-5.6.45-1.el7.x86_64.rpm            # 下载文件

wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-client-5.6.45-1.el7.x86_64.rpm            # 下载文件

chmod 777 MySQL-server-5.6.45-1.el7.x86_64.rpm     # 授权

chmod 777 MySQL-client-5.6.45-1.el7.x86_64.rpm      # 授权

 

// 注:--nodeps --force 表示不检查依赖

rpm -ivh MySQL-server-5.6.45-1.el7.x86_64.rpm --nodeps –force        # 编译安装

rpm -ivh MySQL-client-5.6.45-1.el7.x86_64.rpm --nodeps –force         # 编译安装

service mysql start          # 启动 mysql 服务

vi /root/.mysql_secret    # 查看默认密码

 

mysql -uroot -p 默认密码    # 进入数据库

use mysql;       # 进入 mysql 库,会提示你必须先修改密码

select host,user from user;     # 查询用户表

// 默认只允许本机连接,非必要不用配置

update user set host=’%’ where user=’root’ and host=’localhost’;        # 授权所有用户访问

flush privileges;       # 刷新权限

exit           # 退出数据库

 

安装nginx

cd /usr/local    # 进入目录

mkdir nginx     # 创建 nginx 文件目录

cd nginx           # 进入该目录

wget http://nginx.org/download/nginx-1.13.7.tar.gz    # 下载 nginx 的 tar 包

tar -xvf nginx-1.13.7.tar.gz      # 解压缩

cd nginx-1.13.7       # 进入到 nginx 解压后的安装包

 

// 编译第一步:执行命令,考虑到后续安装 ssl 证书 添加两个模块

./configure --with-http_stub_status_module --with-http_ssl_module

make        # 编译第二步

make install     # 编译第三步

 

启动uwsgi

cd 项目目录下       # 进入项目目录

touch uwsgi.ini        # 在项目目录下创建文件

touch uwsgi.pid

touch uwsgi.log

touch uwsgi.status

vim uwsgi.ini           # 编辑文件

 

[uwsgi]

socket=127.0.0.1:9001   # 并非 flaskrun 的端口,而是内部 tcp 通讯的端口

chmod-socket=662

wsgi-file=/ 项目目录 /run_server.py                 # 指定项目启动文件

callable=app_server                 # app_server = Flask(__name__),这里的 app_server

touch-reload=/ 项目目录 /

master=true

processes=4             # 进程数不要大于服务器的核心数

threads=20              # 每个进程可以有多少个线程

virtualenv=/opt/venv/            # 指定应用的虚拟环境

vacuum=true

thunder-lock = True         # 防止惊群

daemonize = / 项目目录 /uwsgi.log

pidfile = / 项目目录 /uwsgi.pid

# harakiri = 60         # 超时时间

 

uwsgi --ini uwsgi.ini         # 启动

uwsgi --reload uwsgi.pid         # 重启

uwsgi --stop uwsgi.pid             # 关闭

 

启动nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # 启动 nginx 服务,也可以像 python 一样加入环境变量

vi /usr/local/nginx/conf/nginx.conf        # 编辑 nginx 配置

 

server {

  listen 9000;     # 随便找个未被占用的端口

  server_name localhost;           # 将 localhost 修改为你服务器的公网 ip 地址

  charset utf-8;

  location / {

    include uwsgi_params;

    uwsgi_pass 127.0.0.1:9001;            # uwsgi.ini 文件中的 IP 与端口

  }

}

 

/usr/local/nginx/sbin/nginx -s reload     # 重启 nginx 服务

 

若想使用外部主机访问nginx,需要关闭服务器防火墙或开放nginx服务端口,端口为nginx.conf的配置端口

centOS7 关闭防火墙命令: systemctl stop firewalld.service

关闭防火墙会导致服务器有一定风险,所以建议是单独开放服务端口

查询端口号 80 是否开启:firewall-cmd --query-port=80/tcp

开放 80 端口:firewall-cmd --zone=public --add-port=80/tcp --permanent

重启防火墙:firewall-cmd --reload       # 重启服务之后才能生效

收回开放的 80 端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent

查看所有开放的端口:firewall-cmd --zone=public --list-ports

 

# 重启项目

cd /home/bom_system/         # 进入项目目录

source /opt/venv/bin/activate       # 进入虚拟环境

uwsgi --reload uwsgi.pid         # 重启 uwsgi

nginx -s reload         # 重启 nginx