记一次前后端分离项目的部署过程
最近刚完成一次课设,把一个前后端项目完整的部署到了线上,其中遇到的困难和部署的方法在这里记录一下!
项目简介
该项目是根据B站上一个音乐网站教程参考来的,之所以是参考是因为代码都是自己和同学重写的一边,项目结构、代码等都是按我们自己规定的标准来写。简单说就是只参考了这个网站的想法和使用了教程给的静态资源。完整的项目是完成一个音乐网站的前台和后台界面,以及所有后端。这里我们只选取了后台管理部分的编写,因为是课设,时间也不够。
项目目录结构
web-music
music-manage // 后台管理前端部分
admin // 打包文件
src //源码
...
music-server // 后台管理后端
img // 静态资源文件,存放图片
sql // 数据库生成文件
logs // 日志
src // 源码
target
pom.xml
...
部署过程
首先,将需要的文件上传到服务器,由于是一个项目,所以我就统一放到一个目录下/root/MyCode/web-music
:
前端部署
前端项目是打包到admin
文件下,所以配置nginx
的http
部分如下:
server {
listen 80;
server_name 175.24.147.35;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /root/MyCode/web-music/admin;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
}
这样,前端部署已经完毕了。
后端部署
后端直接运行下面命令:
nohup java -jar music-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod > temp.txt 2>&1 &
就会一直在服务器上运行后端服务。
静态资源服务器
完成前面两步后,该项目就正常部署了。但这个项目特别在静态资源需要也部署一下,不然会找不到静态资源。
一般,springboot项目的静态资源会放在resources
下,这是默认的。但在这个项目中,由于图片是动态增加的,为了管理方便和打包文件大小尽可能小,我们把它(也就是img文件夹)放在了外挂目录,所以需要进行静态资源路径配置,在这里不详细说。
如果运行项目的话,在本地环境,静态资源是可以成功访问的到,但部署到线上后,会出现静态资源访问不到的情况。
解决的方法是,对服务器上的静态资源进行nginx
配置,使得通过路径可以直接访问到静态资源。
这里在img
文件下有三个目录:
需要对这三个目录进行nginx
配置。
还是在nginx.conf
下的http
部分的server
中,添加以下配置(该配置是我初学nginx配置的,这样配置虽然写法有些重复,但解决了问题。关于nginx我也刚入门。)
server {
listen 80;
server_name 175.24.147.35;
#charset koi8-r;
#access_log logs/host.access.log main;
location /img/singerPic/ {
root /root/MyCode/web-music;
}
location /img/userAvatar/ {
root /root/MyCode/web-music;
}
location /img/songPic/ {
root /root/MyCode/web-music;
}
location /song/ {
root /root/MyCode/web-music;
}
}
就拿其中一处来理解一下:
该处就是将/root/MyCode/web-music
目录下的img/singerPic/
下的资源,代理到/img/singerPic
这样访问http://175.24.147.35/img/singerPic/zhangjie.jpg
,就会直接得到root
下/img/singerPic
下的zhangjie.jpg
文件。理解的也不是特别深。
关于nginx
配置静态资源服务器,这篇文章写的很好,点击此处
location /img/singerPic/ {
root /root/MyCode/web-music;
}
用到的一些命令
关于nginx
:
nginx # 打开 nginx
nginx -t # 测试配置文件是否有语法错误
nginx -s reopen # 重启Nginx
nginx -s reload # 重新加载Nginx配置文件,然后以优雅的方式重启Nginx
nginx -s stop # 强制停止Nginx服务
nginx -s quit # 优雅地停止Nginx服务(即处理完所有请求后再停止服务)
服务器后台挂起服务
nohup java -jar music-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod > temp.txt 2>&1 &
# 其中,--spring.profiles.active=prod是指定jar包的运行环境
# 后面: > tenp.txt 2>&1 & 是输入日志到指定文件
jobs # 查看后台挂起的进程,jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业。
jobs -l # 选项可显示所有任务的PID,
# jobs的状态可以是running, stopped, Terminated
# 但当关闭该窗口在打开查看,这时候jobs已经不能使用,只能通过以下方式查看后台执行的脚本是否正在执行
ps -ef | grep music
fg JOBID # 可以将后台的任务调入前台继续运行(Foreground)。
# 如果执行完后台脚本命令,当前窗口没有关闭,可以执行jobs查看当前窗口运行的后台进程的进程号,再通过fg n,将此后台进程调到前台执行。
# 后台进程的终止:
# 方法一:通过jobs命令查看job号(假设为num),然后执行kill num
# 方法二:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
上一篇: 记录一次mysql的数据迁移问题
下一篇: 记一次CA证书的申请、服务器上的部署过程
推荐阅读