01.背景
最近也是做了一个很大众的前后端分离项目---瑞吉外卖 ,项目本身就是简单的增删改查。我也借这个机会写一个部署项目的模板,因为项目最后是需要上线到linux服务器的。以后方便自己用,也给大家提供参考。
02.环境
这是项目部署所需要在你的服务器上准备的东西。
我先在这里简单说一下,你的前端项目打包的dist目录需要部署到nginx服务器,
然后就是听说mysql和redis直接安装会麻烦很多,所以我选择了docker来练练手,
最后就是后端基本的东西jdk,git,maven。在这里git是需要从你的gitee仓库拉取最新的代码,然后使用maven打包并部署到内嵌的tomcat服务器上。这里有个一件部署的脚本,后面我们再讲。
03.前端项目部署
1.在服务器中安装Nginx
安装nginx并配置环境变量。可以参考别的博主的文章。
2.将你打包好的dist目录上传到Nginx的html目录下
ps:我的dist目录是直接用的资料里给的
3.修改Nginx配置文件nginx.conf
server {
listen 80; #nginx监听80端口
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html/dist;
index index.html;
}
#反向代理配置
location ^~ /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://192.168.138.101:8080; #这里需要替换为你自己服务器的ip
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
启动nginx访问你的服务器 ip 的80端口就可以访问到页面了。
04.docker配置Mysql和Redis
安装docker
我的服务器是CentOS7,以下是安装命令:
第一步:yum安装gcc和需要的软件包
yum -y install gcc
yum -y install gcc-c++
yum install -y yum-utils
第二步:设置Docker安装源
这里使用阿里的安装源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
第三步:安装docker-ce
最好在安装之前更新一下yum包索引
yum makecache fast
开始安装docker,我们安装的docker-ce是社区版
yum -y install docker-ce docker-ce-cli containerd.io
第四步:启动docker
1.启动
systemctl start docker
2.docker开机自启
systemctl enable docker
3.查看docker镜像
docker images
ps:刚安装好并启动的docker可能没有镜像,接下来我们要获取mysql和redis的镜像。
Mysql:
1.拉取镜像:
docker pull mysql:5.7
查看镜像:
docker images
可以看到已经有了。
2.创造mysql容器
(1) 创造宿主机(本机linux服务器)目录
mkdir -p /mnt/docker/mysql
cd /mnt/docker/mysql
(2)开启服务器端口
本人使用的是学生免费领取的三个月阿里云服务器需要在服务器上的开启安全组规则,自己添加对外暴露的端口,一般不推荐采用mysql默认的端口3306,下面暴露的是3307端口。
或者直接把防火墙关闭(不推荐),具体操作自行搜索。
(3)创造mysql容器
docker run -id
-p 3307:3306
--name=mysql
-v /mnt/docker/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=root
mysql:5.7
(4)参数解释:
-p 宿主机端口:容器端口,我们后端调用数据库需要调用3307端口 Navicat连接数据库也需要连接3307端口
-v 宿主机mysql目录:容器mysql目录,目录挂载的目的是 把容器与宿主机的目录数据同步,防止因为删除容器而导致数据库中数据丢失
查看容器是否启动:
docker ps
可以看到启动成功了
(5)创建表
这里推荐直接使用Navicat直接连接服务器的mysql,在Navicat中直接运行sql文件创建表,
效果是一样的。
Redis:
1.拉取镜像
docker pull redis:6.2.5
2.创造redis容器
(1)创建相应的目录及文件(将内部文件挂载在外部)
创建挂载的配置文件目录:
mkdir -p /home/mydata/redis/conf
创建配置文件:
cd /home/mydata/redis/conf
touch redis.conf
持久化数据存放的目录:
mkdir -p /home/mydata/redis/data
(2) 配置文件相关的参数
编辑配置文件:
# 进入需要配置的文件
cd /home/mydata/redis/conf
# 编辑配置文件
vim redis.conf
# 按住 i 写入相应的配置
# 允许外网访问
protected-mode no
# 持久化配置
appendonly yes
# 密码配置-密码可自行配置
requirepass 123456
# 后台运行
daemonize no
#以上就是基本的配置,按住ESC键,然后输入命令,保存并退出
:wq
(3)开启服务器端口
本人使用的是学生免费领取的三个月阿里云服务器需要在服务器上的开启安全组规则,自己添加对外暴露的端口,一般不推荐采用redis默认的端口6379,下面暴露的是60379端口。
或者直接把防火墙关闭(不推荐),具体操作自行搜索。
(4)启动redis服务
docker run -p 60379:6379 --name redis -v /home/mydata/redis/data:/data
-v /home/mydata/redis/conf/redis.conf:/etc/redis/redis.conf
-d redis:6.2.5 redis-server /etc/redis/redis.conf
查看容器是否启动:
docker ps
启动成功。
问题:
我在创建并启动mysql和redis这两个容器时发生了一点小问题,不知道是我服务器的原因还是大家都这样。就是在启动redis后发现mysql服务被挤掉了,也就是mysql服务直接挂了。
反正就是我重新启动了一下mysql服务,这样两个服务就都跑起来了。
重新启动容器:
以下命令启动MySQL容器,其中 <container-id> 是记录的MySQL容器的ID(需要自行更换):
docker start <container-id>
当然了,你后端相关的代码也要替换为你服务器的ip和开放的端口信息。
05.后端项目部署
1.jdk的安装和配置环境变量
jdk的安装和配置全局环境变量我就不多赘述了,提醒一下最好要与自己开发的jdk版本一致,可用减少很多不必要的麻烦。
2.git的安装和配置环境变量
git的安装和配置环境变量,基本与jdk同理,自行搜索吧,gpt肯定比我强。
这里有一点需要注意:
配置你gitee远程仓库的地址好像在这里,我当时问gpt时告诉我并一起配置了
git可以随时获取你的gitee上的最新版本的代码。
待会需要编写一个reggieStart.sh脚本文件,可以自动获取你git仓库的代码并打包然后进行部署。
3.maven的安装和配置环境变量
maven的安装和配置环境变量也问gpt吧,哈哈哈,想偷懒了。
OK我们直接开始下面的sh脚本的编写
4.编写reggieStart.sh脚本
ps:没有 /usr/local/javaapp/reggie_take_out 目录的自行创建,gitee上拉取下来的代码需要放到这个目录里。
首先进入到 /usr/local/javaapp 这个目录里编写sh脚本文件。
cd /usr/local/javaapp
这是reggieStart.sh文件的内容:
#!/bin/sh
echo =================================
echo 自动化部署脚本启动
echo =================================
echo 停止原来运行中的工程
APP_NAME=reggie_take_out
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
echo 准备从Git仓库拉取最新代码
cd /usr/local/javaapp/reggie_take_out
echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成
cd /usr/local/javaapp/reggie_take_out
echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`
cd target
echo 启动项目
nohup java -jar reggie_take_out-1.0-SNAPSHOT.jar &> reggie_take_out.log &
echo 项目启动完成
运行sh文件命令如下:
./reggieStart.sh
项目第一次打包花费的时间可能会很长,需要等待一下。
因为我们的maven内嵌的有tomcat,所以项目打包下来就会自动部署到tomcat服务器上,
看到项目启动完成后就说明项目已经跑起来了。
总结:
首先注意要把所有需要的端口放开。
每个服务都跑起来后,我们直接访问公网的ip就能访问到我们部署的项目了。
最后祝每一个小伙伴都能成功部署自己的项目!