Bootstrap

FastAPI+VUE项目部署在CentOS 7(一文搞定)

说明:本文记录了本人在CentOS 7系统中部署FastAPI+VUE项目的全过程,关于文中内容,如果你有更好的建议,欢迎交流。

1 安装CentOS 7 到虚拟机

CentOS 7.9.2009下载地址CentOS 7.9.2009(镜像地址有快有慢,快的每秒几十兆,慢的每秒几兆)
VMware虚拟机下载地址VMware Workstation Player(不用激活,仅限用于非商业用途)
VirtualBox虚拟机下载地址Oracle VM VirtualBox(开源虚拟机)

2 后端部署

2.1 准备工作

# 更新yum
yum -y update
# 安装开发工具
yum -y groupinstall development
# 一些必要的安装
yum -y install epel-release openssl-devel bzip2-devel libffi-devel xz-devel wget net-tools
# 创建python安装目录和临时文件夹
mkdir /usr/local/python3.9.10 /tempfolder
# 进入临时文件夹
cd /tempfolder
# 下载指定版本的Python包
wget http://npm.taobao.org/mirrors/python/3.9.10/Python-3.9.10.tgz
# 解压下载的Python包
tar xvf Python-3.9.10.tgz

2.2 安装Python

# 进入解压后的Python文件夹
cd Python-3.9.10
# 配置编辑安装Python
./configure --with-ssl --prefix=/usr/local/python3.9.10 && make && make install
# 创建python和pip的软连接到/usr/bin/目录下
ln -s /usr/local/python3.9.10/bin/python3.9 /usr/bin/python3
ln -s /usr/local/python3.9.10/bin/pip3.9 /usr/bin/pip3
# 验证版本号是否正确
python3 -V
pip3 -V

在这里插入图片描述
配置pip下载镜像源

 # 创建文件夹
mkdir /root/.pip
# 创建编辑配置文件
vi /root/.pip/pip.conf

# 在pip.conf中写入以下3行内容:
[global]
trusted-host = mirrors.aliyun.com
index-url = https://mirrors.aliyun.com/pypi/simple

# 其他可选镜像源
中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学:http://pypi.mirrors.ustc.edu.cn/simple/
豆瓣:http://pypi.douban.com/simple/

# 更新pip
pip3 install --upgrade pip
# 删除临时文件夹
rm -rf tempfolder

其他配置
执行下图中的三个命令可以看到分别对应的python版本:

在这里插入图片描述
可以看出,python命令指向的CentOS7默认安装的python2版本,将修改为刚刚安装的python3版本:

# 删除默认的
rm -rf /usr/bin/python
# 设置新的软连接
ln -s /usr/bin/python3 /usr/bin/python

在这里插入图片描述
注意事项
因为yum使用的是系统默认的python2版本,修改python的软连接后,需要修改/usr/bin/yum/usr/libexec/urlgrabber-ext-down文件中指定的python版本为默认安装的版本,否则使用yum会报错:

在这里插入图片描述
在这里插入图片描述

2.3 FastAPI文件部署

在FastAPI项目文件中生成requirements.txt文件:

# 先安装第三方包pipreqs
pip install pipreqs
# 生成requirements.txt
pipreqs ./ --encoding=utf8 --force
# 如果缺少一部分第三方包,在linux中安装时会自动安装缺少依赖,或者在运行项目时会提示所缺少的包

上传已经写好的代码文件到项目目录中,venv目录不用上传:

在这里插入图片描述
安装requirements.txt中的依赖:pip3 install -r requirements.txt,如果过程中有报错(比如依赖版本冲突等),根据提示修改即可。

启动后端服务
方式一:如果在main.py写了启动代码时,直接执行main文件:python main.py
方式二:在main.py未写启动代码时,使用uvicorn命令启动:uvicorn main:app --host 0.0.0.0 --port 8888,如果提示找不到命令,是因为/usr/bin目录下没有uvicorn的软连接,创建软连接即可解决:ln -s /usr/local/python3.9.10/bin/uvicorn /usr/bin/uvicorn
方式三:在main.py未写启动代码时,使用gunicorn命令启动:gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8888,有配置文件时的执行命令:gunicorn -c gunicorn.conf.py main:app,如果提示找不到命令,解决方式同方式二。
运行后,如果提示找不到包,可以将项目根路径加入环境变量中:

# 编辑profile文件
vi /etc/profile
# 在文件最后加入PYTHONPATH变量
export PYTHONPATH=$PYTHONPATH:/www/backend/

在这里插入图片描述
保存后,执行source /etc/profile命令,再次运行main.py文件,如果在浏览器可成功访问API文档,即部署成功:

在这里插入图片描述
如果无法访问,检查端口是否开放(默认是未开放任何端口的)firewall-cmd --list-all
如果没有显示8888(main.py中所写的端口号),则需要开放8888端口firewall-cmd --add-port=8888/tcp --permanent,重新加载防火墙规则firewall-cmd --reload后即可访问成功。

3 前端部署

3.1 安装Nginx

# 安装nginx
yum -y install nginx
# 启动Nginx
nginx

此时访问虚拟机ip地址(端口默认80),如果能够成功访问,nginx安装成功。如果无法正常访问,可查看80端口是否开放。

3.2 VUE文件部署

注意事项:打包前,需确认vite.config.js文件中有base: './'的配置,否则部署后访问会是空白页:
在这里插入图片描述
打包VUE文件npm run build
将dist文件夹内的文件上传项目目录中:
在这里插入图片描述
修改Nginx配置

# 编辑nginx.conf文件,修改端口和根目录
vi /etc/nginx/nginx.conf
# 修改端口和根目录后,还需要额外加入下面这三行,否则路由变化后刷新页面会404
location / {
  try_files $uri $uri/ /index.html;
}

在这里插入图片描述
保存后,重启Nginxnginx -s reload,访问新的地址,如果能够成功访问,则部署成功。

4 部署脚本

使用前提:前后端项目文件内容已传入CentOS7系统中,示例如下:
在这里插入图片描述
执行命令source /www/install_environment.sh
脚本示例

echo "==========开始安装Python、Nginx环境=========="
echo "1、更新yum"
yum -y update
echo "2、安装开发工具"
yum -y groupinstall development
echo "3、安装一些必要工具和依赖"
yum -y install epel-release openssl-devel bzip2-devel libffi-devel xz-devel wget net-tools
echo "4、创建python3.9.10安装目录和临时文件夹tempfolder:mkdir /usr/local/python3.9.10 /tempfolder"
mkdir /usr/local/python3.9.10 /tempfolder
echo "5、进入临时文件夹tempfolder:cd /tempfolder"
cd /tempfolder
echo "6、下载指定版本的Python包到tempfolder文件夹"
wget http://npm.taobao.org/mirrors/python/3.9.10/Python-3.9.10.tgz
echo "7、解压下载的Python包"
tar xvf Python-3.9.10.tgz
ls
echo "8、进入解压的文件夹:cd Python-3.9.10"
cd Python-3.9.10
echo "9、配置编译安装python-3.9.10"
./configure --with-ssl --prefix=/usr/local/python3.9.10 && make && make install
echo "10、创建python和pip3的软连接到/usr/bin/目录下"
ln -s /usr/local/python3.9.10/bin/python3.9 /usr/bin/python3
ln -s /usr/local/python3.9.10/bin/pip3.9 /usr/bin/pip3
python3 -V
pip3 -V
echo "11、配置pip下载镜像源:mv /www/pip.conf /root/.pip"
mkdir /root/.pip
mv -f /www/pip.conf /root/.pip/
echo "12、更新pip3"
pip3 install --upgrade pip
echo "13、删除临时文件夹:rm -rf tempfolder"
cd /
rm -rf tempfolder
echo "14、配置默认python命令指向python3"
rm -rf /usr/bin/python
ln -s /usr/bin/python3 /usr/bin/python
python -V
echo "15、配置yum和urlgrabber-ext-down中的python版本为python2.7"
mv -f /www/yum /usr/bin/
mv -f /www/urlgrabber-ext-down /usr/libexec/
chmod 755 /usr/bin/yum
chmod 755 /usr/libexec/urlgrabber-ext-down
echo "16、安装requirements.txt:pip3 install -r /www/backend/requirements.txt"
pip3 install -r /www/backend/requirements.txt
echo "17、配置export PYTHONPATH=$PYTHONPATH:/www/backend/"
mv -f /www/profile /etc/
source /etc/profile
echo "18、安装命令nginx:yum -y install nginx"
yum -y install nginx
echo "19、配置nginx.conf"
mv -f /www/nginx.conf /etc/nginx/
echo "20、开放端口8888、9999"
firewall-cmd --add-port=8888/tcp --permanent
firewall-cmd --add-port=9999/tcp --permanent
firewall-cmd --reload
echo "==========Python、Nginx环境安装完毕=========="
echo "启动服务..."
nginx
cd /www/backend/app
python main.py &
local_ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
echo "前端服务地址:http://${local_ip}:9999"
echo "后端服务地址:http://${local_ip}:8888"

说明:本文记录了本人在CentOS 7系统中部署FastAPI+VUE项目的全过程,关于文中内容,如果你有更好的建议,欢迎交流。

;