今天记录一下前后端分离部署的大概流程,复习一下部署的流程和知识点,话不多说上代码
前端
1:先从前端部署,准备源代码上传到服务器
先准备前端源代码,这里我们用vue项目来做试验,将源代码发送到服务器,可以用scp/xftp看个人爱好吧
我这里图方便就用xftp工具,上传vue前台源码和后台server源码到Centos服务器上
2:在服务器上执行解压缩命令
unzip vue.zip
3:对前端项目打包,需要配置前端打包环境,所以安装node
打开node官网如下网址
复制如下下载地址
ps:这里也可以选择liunx的对应2进制的源码安装包,可以直接wget命令下载,解压缩配置path,无需编译就可以使用了
centos服务器上执行
tar -zxvf node-v8.6.0-linux-x64.tar.gz
4:解压完毕后可以直接进入node文件下面,查看,看到bin目录下面已经有对应的npm、npx环境了,如果没有,那么需要自行编译make啦
5:使用pwd获取路径,加入到环境变量中,path结尾就好啦
[root@localhost bin]#pwd
/opt/node-v16.9.0-linux-x64/bin
[root@localhost bin]#vim /etc/profile
效果图
6:重新读取/etc/profile,加载node的环境,查看是否正常
[root@localhost bin]#source /etc/profile
[root@localhost bin]#node -v
[root@localhost bin]#npm -v
7:进入vue源码目录,修改axios的请求地址,不然发起请求就会报错
ps:这里的数据提交地址,应该发给 代理服务器,也就是9000端口,然后再通过9000端口,转发给uwsgi,也就是9005端口
我们使用sed批量修改一下
#sed命令 -i参数 是 把替换结果写入到文件
# 's/127.0.0.1:8000/192.168.178.143:9000/g'
# s是替换指令 /你要替换的内容/替换之后的内容/ g 是 全局替换,global的意思
[root@localhost restful]# sed -i 's/127.0.0.1:8000/192.168.3.66:9000/g' ./api.js
8:安装项目的依赖
#安装淘宝cnpm进行加速npm下载
[root@localhost restful]# npm --registry https://registry.npm.taobao.org install
9:打包生成dist文件
[root@localhost vue]# npm run build
10:修改nginxc.conf 文件,添加一个server,返回前端项目的vue页面就可以了
[root@localhost /]# vim /opt/tengine-2.3.3/conf/nginx.conf
#添加第二个虚拟主机,给vue项目前端使用
server {
listen 81;
server_name _;
location / {
root /opt/vue/dist;
index index.html;
}
}
到这里,前端部署配置结束啦。。。。
后端
1:后端代码上传到Centos服务器上,因为我第一步已经上传了,这里直接解压
[root@localhost opt]#unzip server.zip
2:解压之后,安装依赖,使用虚拟环境安装不通项目环境
[root@localhost opt]#virtualenv --python=python3 course
[root@localhost opt]# source ./course/bin/activate
ps:创建一个名为course的虚拟环境,并且激活它
3:上传项目的requirements.txt到Centos服务器上,安装依赖
(course) [root@localhost opt]# pip3 install -i https://pypi.douban.com/simple -r requirement.txt
4:测试代码是否能够正常运行
(course) [root@localhost opt]# python3 server/manage.py runserver 0.0.0.0:8899
5:测试通过之后,配置uwsgi.ini,uwsig.ini内容如下
(course) [root@localhost luffy_boy]# cat ../uwsgi.ini
[uwsgi]
# Django-related settings
# the base directory (full path)
# 填写crm项目的第一层绝对路径
chdir = /course/server
# Django's wsgi file
# 填写crm项目第二层的相对路径,找到第二层目录下的wsgi.py
# 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件
module = luffy_boy.wsgi
# the virtualenv (full path)
# 填写虚拟环境解释器的第一层工作目录
home =/opt/course
# process-related settings
# master
master = true
# maximum number of worker processes
# 代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1 ,单核的cpu填写几?
# 如果是单进程,十万个请求,都丢给一个进程去处理
# 3个工作进程,十万个请求,就分给了3个进程去分摊处理
processes = 3
# the socket (use the full path to be safe
# 这里的socket参数,是用于和nginx结合部署的unix-socket参数,这里临时先暂停使用
# 使用此协议运行后台,就无法通过浏览器访问了,协议不一样
socket = 0.0.0.0:9005
# 线上不会用http参数,因为对后端是不安全的,使用socket参数是安全的连接,用nginx反向代理去访问
# 后端程序是运行在防火墙内部,外网是无法直接访问的
# 临时使用http参数,便于我们用浏览器调试访问
#http = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
6:此时给supervisor再添加一个任务,用于管理
vim /etc/supervisord.conf
[program:course]
command=/opt/course/bin/uwsgi --ini /opt/server/uwsgi.ini ;supervisor其实就是在帮你执行命令而已!
autostart=true ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程
7:此时重启supervisord进程,把新的任务也加进去
先杀死所有的supervisor进程吧
(course) [root@localhost server]# ps -ef | grep super
(course) [root@localhost server]# pkill -9 supervisor #杀死supervisor进程,用于重启
(course) [root@localhost server]# pkill -9 uwsgi #杀死crm的进程,用于待会重启
8:启动服务,检测下状态
supervisorctl -c /etc/supervisord.conf
9:此时发现还差一个代理服务器的配置,修改nginx.conf如下
#再添加一个虚拟主机,作用是给后台的反向代理使用
server {
#这里应该填写9000的代理服务器端口
listen 9000;
server_name _;
# nginx的9000代理服务器,接收到任意请求之后,直接转发给后端的uwsgi
location / {
uwsgi_pass 0.0.0.0:9005;
include uwsgi_params;
}
}
10:重启nginx,然后访问测试
nginx -s reload
11:安装redis且启动
yum install redis -y
systemctl start redis
最后添加一行代码到nginx中的配置文件中
OK,至此前后端分离项目,部署完成。。。。