一、概述
上次,我们介绍了如何将CentOS服务器自带的Python3.6.8版本升级到Python3.8.0版本,现在我们开始介绍如何将flask项目部署的CentOS7.9版本的Linux服务器上。
二、环境准备
2.1安装git
我们通常会将自己的项目托管在Github或者gitee平台,这样不仅方便版本控制,而且容易管理。但是我们使用这两个平台管理代码都需要通过Git进行。Linux下载命令如下:
yum -y install git
2.2创建虚拟环境
# python3 -m venv "环境名"
python3 -m venv env
# 激活虚拟环境
# source ./环境名/bin/activate
source ./env/bin/activate
# 安装依赖库
pip install XXX
# 退出虚拟环境
deactivate
2.3拉取代码
git clone "代码仓库链接"
三、直接部署
python3 blog.py
运行成功后,可以通过其他电脑访问(前提是服务器的3000端口已经开启)
四、nginx部署
4.1安装nginx(使用编译安装方式)
若是命令安装:
sudo yum install nginx
下载nginx安装包网址:http://nginx.org/en/download.html
复制指定版本安装地址后,用wget命令下载
deactivate # 退出虚拟环境(同时会退出项目文件夹)
# 在项目文件夹同级目录创建nginx文件夹用于安装
mkdir nginx
cd nginx
# 安装依赖环境
yum install gcc gcc-c++ pcre-devel zlib-devel open-devel -y
# 下载安装包
wget http://nginx.org/download/nginx-1.20.2.tar.gz
# 解压
tar xf nginx-1.20.2.tar.gz
cd nginx-1.20.2
# 配置、并指定安装目录
./configure --prefix=/usr/local/nginx
# 编译(注意:不要使用make clean命令清除,否则报错)
make build
# 安装
make install
4.2启动nginx
cd /usr/local/nginx/ # 进入安装nginx的目录 可以看到一个sbin目录
cd sbin # 进入sbin目录可以看到一个绿色的名为nginx的可执行文件
./nginx # 运行启动
ps -ef|grep nginx # 查看进程,确认已经启动
cd ..
vim nginx.conf # 查看nginx配置 默认监听80端口
#(确保80端口是开启状态才能通过服务器地址:80端口(192.168.0.37:80)访问)
###### 查看已经开启端口
firewall-cmd --permanent --list-port
###### 开启80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
###### 重启防火墙
service firewalld restart
CentOS7 防火墙开启常见端口命令:Centos 7防火墙开放端口方法
设置nginx为系统服务
截止现在:
nginx安装目录:/usr/local/nginx
nginx.pid目录:/usr/local/nginx/logs/nginx.pid
nginx配置目录:/usr/local/nginx/conf/nginx.conf
nginx启动目录:/usr/local/nginx/sbin/ 启动命令:./nginx
在/usr/lib/systemd/system/ 目录创建一个配置文件 nginx.service
mkdir /usr/lib/systemd/system/nginx.service
在创建的nginx.service写入下面命令
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 赋予脚本执行权限
chmod +x /usr/lib/systemd/system/nginx.service
# 设置nginx.service为系统服务
systemctl enable nginx.service
# 若nginx.service不在当前目录,记得加上路径
systemctl enable /usr/lib/systemd/system/nginx.service
##通过系统服务操作nginx
systemctl start nginx.service
systemctl reload nginx.service
systemctl restart nginx.service
systemctl stop nginx.service
systemctl start nginx
systemctl reload nginx
systemctl restart nginx
systemctl stop nginx
systemctl status nginx # 查看nginx服务状态
CentOS后台执行(nohup命令)
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。
nohup命令详解链接:nohup命令详解
nohup python blog.py > ./flask.log 2>&1 &
命令解释:
- 2>&1:把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件flask.log里面,所以结果是标准错误和标准输出都导入文件flask.log里面了。
- 最后面的&:表示即使terminal(终端)关闭,或者电脑死机程序依然运行(前提是你把程序递交到服务器上)
jobs # 查看后台任务
kill %(jobs命令查看的进程号)
nginx转发请求到flask
保持flask项目为后台运行状态,然后打开nginx配置文件
cd /usr/local/nginx/conf/
vim nginx.conf
注:vim显示行索引:set number
配置nginx.conf文件
配置完成后测试nginx
因为我们没有配置软连接,所以测试或启动需要先进入:/usr/local/nginx/sbin/ 目录
./nginx -t
测试成功后重启nginx服务
systemctl reload nginx
可以看到,成功跳转到了我们的项目页面(3000端口)
给nginx添加软连接
为了方便我们操作,不用每次测试或者启动都跑到nginx/sbin目录去执行 “./nginx”,我们现在来添加nginx命令的软连接
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
添加后,去到任意目录可以使用nginx命令了。
uwsgi
安装uwsgi
进入虚拟环境直接用pip3命令安装
pip3 install uwsgi
安装完成后给uwsgi添加软链接,首先要知道uwsgi的位置,通过下面命令寻找
find / -name uwsgi # 从根目录/开始找,通过名字
添加软连接:
ln -s /opt/flask_blog/env/bin/uwsgi /usr/bin/uwsgi
安装完成后,在项目的文件中创建一个uwsgi.ini配置文件
cd /opt/flask_blog/ # 确保位置在项目文件中
vim uwsgi.ini
[uwsgi]
# 主进程
master=true
# 进程数
processes=1
# 线程数
threads=20
#配置工程目录
chdir =/opt/flask_blog/
# flask项目app文件所在的位置
wsgi-file=/opt/flask_blog/blog.py
# app实例的名字
callable=app
# 是否启用多线程
enable-threads=True
# socket文件指定的位置
socket = /opt/flask_blog/uwsgi.sock
# 监听地址
socket = 127.0.0.1:3000
# 给权限
chmod-socket = 777
# 结束pid的时候自动清理pid和sock文件
vacuum = true
# 指定python虚拟环境位置
virtualenv = /opt/flask_blog/env/
# 守护和日志
daemonize=/opt/flask_blog/uwsgi.log
# pid进程保存目录
pidfile=/opt/flask_blog/uwsgi.pid
# 每个进程单独价值flask
lazy-apps = true
# 禁用访问日志
disable-logging = true
# 一个进程处理多少个请求后重启一次
max-requests = 1000
# 日志最大容量多少
log-maxsize = 5000000
gid = root
uid = root
uwsgi常用命令
# 需要提前配置号软连接
uwsgi --ini uwsgi.ini # 指定配置文件启动
uwsgi --reload uwsgi.pid # 重启
uwsgi --stop uwsgi.pid # 关闭
启动uwsgi
uwsgi --ini ./uwsgi.ini # 确保uwsgi.ini在当前目录
启动成功
启动成功后,当前目录产生了上面这三个文件。
截止到此,uwsgi配置完成。uwsgi已经成功对接flask服务,但是,现在uwsgi与nginx还相互不认识,接下来我们需要开始重新配置nginx对接现在的uwsgi。
nginx对接uwsgi
关闭后台运行的flask应用,关闭方法:需要找到对应的PID,然后kill掉
ps -aux|grep blog.py # 查看进程
kill -9 11444 # 杀死进程
关闭后:
关闭成功后:nginx的80端口和flask应用的3000端口都访问不了。
下面开始将nginx与uwsgi对接,到conf目录,打开nginx.conf配置文件
cd /usr/local/nginx/conf/
vim nginx.conf
将上面的内容改为:
include uwsgi_params;
uwsgi_pass unix:///opt/flask_blog/uwsgi.sock; # uwsgi_pass unix://‘sock文件路径’
修改保存后,启动uwsgi,重启nginx
uwsgi --ini ./uwsgi.ini # 确保uwsgi.ini在当前目录
systemctl reload nginx
即可重新访问80端口: