一、项目打可执行jar包
pom继承spring-boot-starter-parent
项目maven生命周期package打包,如果报错There are test failures
在pom文件properties中添加 <maven.test.skip>true</maven.test.skip>跳过测试
二、Linux服务器上安装docker(两个配置文件包里面都有,可以直接xftp复制)
首先配置一下Docker的阿里yum源
vi /etc/yum.repos.d/docker.repo
(点击I插入文本,输入完毕Esc :wq)
内容
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
------------------------分割线------------------------------
yum -y install docker-ce
配置 docker 的镜像源
mkdir /etc/docker
vi /etc/docker/daemon.json
内容
{
"registry-mirrors":["https://b9pmyelo.mirror.aliyuncs.com"]
}
------------------------分割线------------------------------
systemctl start docker
设置开机自启动
systemctl enable docker
三、配置连接远程服务上的 docker 环境
vi /usr/lib/systemd/system/docker.service
在ExecStart选项后面添加-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
使配置生效
systemctl daemon-reload
systemctl restart docker
防火墙开放 2375 端口(其他你需要开放的端口同下,改下端口号)
firewall-cmd --permanent --zone=public --add-port=2375/tcp
项目端口
firewall-cmd --permanent --zone=public --add-port=9001/tcp
firewall-cmd --reload
外部浏览器访问 http://ip:2375/version
如果访问成功则表示配置成功
四、项目远程部署
最新版本的 `idea` 默认已经安装了 `docker` 客户端插件
idea点击服务,点击最右边的加好按钮,选择Docker连接,名称随意,
选择TCP套接字,引擎 API URL填http://ip:2375
下面会显示连接成功,点击确定
在项目中创建一个Dockerfile文件(我这里也提供了一个demo)
内容
#配置jdk基础镜像
FROM xccszu/openjdk1.8
#声明作者
LABEL authors="sophon"
#配置镜像信息
MAINTAINER 745729377@qq.com
#将target目录下的可执行jar复制到容器中
COPY target/pet-0.0.1-SNAPSHOT.jar /usr/local/server/pet/pet-1.0.jar
COPY target/classes/apiclient_key.pem /usr/local/server/pet
#启动容器时执行的命令 -c 清除之前的数据
ENTRYPOINT ["java","-jar","/usr/local/server/pet/pet-1.0.jar","-c"]
------------------------分割线------------------------------
点击这个文件的绿色双箭头,可以选择构建镜像,就是把我们的项目打包成默认镜像。
运行,就是制作成镜像后,直接运行,生成容器。
这里我选择新建运行配置
名称改成你的项目名例如pet,镜像标记就是项目名加版本号例如pet:1.0
容器名称就是镜像运行后的容器名称例如pet。
点击修改,点击绑定端口,填写主机端口和容器端口,这两个端口都和你项目的端口一致,点击确定。
点击修改,点击运行选项,填写--restart=always,使docker重启时,容器也能自启动。
点击修改,点击绑定挂载,填写/usr/local/server/pet:/usr/local/server/pet/log
这样我们就能在宿主机上查看日志。
点击应用,点击运行,项目会自动启动。
这时候访问我们的项目的接口,就能访问到了。
五、其他容器
比如redis,mysql,rabbitmq,nginx都可以使用容器来部署
(1)例如前端容器nginx
# 启动一个没有挂载的nginx
docker run -d -p 80:80 --name nginx-test nginx:latest
mkdir /usr/local/server/nginx
# 使用cp拷贝文件到目标文件夹下
docker cp nginx-test:/etc/nginx/ /usr/local/server/nginx/conf
# 之后就可以删除该容器了
docker stop nginx-test
docker rm nginx-test
docker run -d --name nginx --restart=always -p 80:80 \
-v /usr/local/server/nginx/html:/usr/share/nginx/html \
-v /usr/local/server/nginx/logs:/var/log/nginx \
-v /usr/local/server/nginx/conf:/etc/nginx \
nginx:latest
把vue打包后的dist下所有文件通过xftp复制到/usr/local/server/nginx/html目录下
访问服务器ip地址就能访问到我们首页了。
在默认conf.d下默认配置文件中添加配置
location /api {
rewrite ^/api(.*)$ $1 break;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://csktedu;
}
相当于vue.config.js中的开发服务器对api的重写
const newVar = {
target: 'http://ip:9001',
ws: true,
changeOrigin: true,
pathRewrite: {'^/api': ''}
};
devServer: {
port: 80,
allowedHosts: [
"www.csktedu.com"
],
proxy: {
'/api': newVar
}
}
在server代码块上面添加(ip不能是localhost或者127.0.0.1)
upstream csktedu{
server ip:9001;
}
帮我们把nginx前端axios的访问路由到后端
重启下nginx
docker restart nginx
项目中的请求就能转发到我们的后端服务器了
(2)mysql数据库容器部署
在idea的Docker服务中的点击镜像,填写要拉取的镜像mysql:5.7
拉取完镜像,在mysql:5.7上点击创建容器,进行配置
名称mysql,容器名称mysql,绑定端口3306:3306
绑定挂载/usr/local/server/mysql/log:/var/log/mysql /usr/local/server/mysql/data:/var/lib/mysql /usr/local/server/mysql/conf:/etc/mysql
环境变量MYSQL_ROOT_PASSWORD=123456
运行选项-d
确定运行
通过xftp将sql脚本导入我们的/usr/local/server/shareroom目录
使用docker命令将sql脚本复制到容器中的/tmp目录下
docker cp /usr/local/server/shareroom/shared_room.sql mysql:/tmp/shared_room.sql
进入容器执行脚本
docker exec -it mysql mysql -uroot -p123456
因为sql脚本没有创库,创建我们的数据,要对应后端项目中的数据库
create database shared_room;
use shared_room
SOURCE /tmp/shared_room.sql;
show tables; 查看表是不是都进来了
依赖mysql的项目,先部署mysql