利用Docker部署项目

上线步骤–后端

1.配置服务器yum源
1
https://blog.csdn.net/weixin_49369665/article/details/143248527?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-143248527-blog-111396918.235^v43^control&spm=1001.2101.3001.4242.2&utm_relevant_index=4
1
2
/etc/yum.repos.d/CentOS-Vault.repo
在 CentOS-Vault.repo 添加如下配置,以启用 CentOS 7 的存档仓库,添加配置如下:

安装依赖

1
sudo yum install -y yum-utils

添加 Docker 官方仓库:

1
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

更新 yum 缓存:

1
sudo yum makecache

安装docker和compose

1
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动docker

1
systemctl start docker

测试docker

1
2
systemctl status docker
docker run hello-world

配置java

1
https://blog.csdn.net/zjp776/article/details/125787998
1
2
3
4
5
export JAVA_HOME=/root/jdk1.8.0_241/

export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/

export PATH=$PATH:$JAVA_HOME/bin
2.配置docker镜像
1
2
进入
/etc/docker/daemon.json

然后在里面加入下面的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"registry-mirrors": ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"]
}

或者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"registry-mirrors" : [
"https://mirror.ccs.tencentyun.com",
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"debug" : true,
"experimental" : true
}

或者

1
2
3
{ 
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}

然后在终端重新启动一下docker

1
2
3
systemctl daemon-reload

systemctl restart docker

启动 Docker:

1
systemctl start docker
4.安装maven

服务器上的maven的版本要在3.1以上

1
https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

安装maven

1
https://blog.csdn.net/qq_15752347/article/details/142102726

配置环境变量/etc/profile(改成自己的路径和版本)

1
2
3
4
5
export MAVEN_HOME=/root/apache-maven-3.6.3/
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
export JAVA_HOME=/root/jdk1.8.0_241/
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

执行以下命令让修改的生效

1
source /etc/profile

通过 mvn -v 命令查看配置是否生效

5.配置maven的settings.xml

添加镜像

/root/apache-maven-3.6.3/conf/

1
2
3
4
5
6
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
6.执行打包
1
mvn package
7.先使用 docker compose 一行命令启动环境依赖
1
sudo docker compose -f docker-compose.env.yml up
1
sudo docker compose -f docker-compose.env.yml up nacos -d

在项目文件夹给redis持久化目录加权限

1
2
3
4
5
6
//检查文件夹
docker run --rm mysql:8 id mysql
sudo chown -R 999:999 ./.redis-data
sudo chown -R 999:999 ./.mysql-data
sudo chmod -R 700 ./.mysql-data
sudo chmod -R 700 ./.redis-data

成功后后台启动

1
sudo docker compose -f docker-compose.env.yml up -d

查看容器状态

1
sudo docker stats
8.确保环境依赖都启动成功后,接下来启动业务服务

删除缓存

1
docker builder prune -f
1
sudo docker compose -f docker-compose.service.yml up -d

9.如果某个服务启动失败,可以再次单独只启动它,比如网关服务

1
2
3
4
sudo docker compose -f docker-compose.service.yml up oj-backend-gateway -d
sudo docker compose -f docker-compose.service.yml up oj-backend-judge-service -d
sudo docker compose -f docker-compose.service.yml up oj-backend-question-service -d
sudo docker compose -f docker-compose.service.yml up oj-backend-user-service -d

10.进程放回前台运行

1
docker attach id

启动docker

1
2
systemctl daemon-reload
systemctl restart docker.service
项目部署上线后,如果你在本地修改了某个模块的代码,要在本地重新打包,把jar包重新上传到服务器对应的位置上(即该模块在服务器上对应的目录的target目录里),然后要把该模块的容器停止了,然后删除该容器,然后再把该模块的镜像删除了,最后再使用docker compose命令重新构建容器

记得打包

1
mvn package
部署mysql
1
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name my_mysql mysql:8.0

停止docker容器

以下是停止单个容器的命令:

1
docker stop <container_id_or_name>

如果要停止所有运行的容器,可以使用以下命令:

1
docker stop $(docker ps -q)

这里docker ps -q会列出所有运行容器的ID,然后docker stop会停止所有这些容

移除容器

1
docker rm 镜像id	

查看所有镜像

1
docker images

移除镜像

1
2
3
删除镜像IMAGE使用 docker rmi 命令,例如删除 mysql 镜像:

docker rmi mysql镜像标识(镜像ID(IMAGE ID)或镜像ID(IMAGE ID)前几位)

删除命名以yuoj-backend开头的容器:

1
docker rm -f $(docker ps -a |  grep "oj-backend*"  | awk '{print $1}')

删除以yuoj-backend开头的镜像

1
docker images --format "{{.Repository}}:{{.Tag}}" | grep oj-backend | xargs docker rmi

前端部署

1.创建文件

修改 OpenApi.ts

1
localhost改成服务器ip

命令将项目进行打包,然后生成一个dist文件夹**

服务器创建前端name文件夹

注意端口

编写 Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM nginx

WORKDIR /usr/share/nginx/html/
USER root

COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf

COPY ./dist /usr/share/nginx/html/

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]


上传 dist 文件夹,Dockerfile,docker文件夹

docker文件夹里面创建nginx.conf 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 80;

# gzip config
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";

root /usr/share/nginx/html;
include /etc/nginx/mime.types;

location / {
try_files $uri $uri /index.html;
}

}
3.**终端运行 **
1
2
3
4
5
6
7
docker build -t oj-frontend-master .

docker run -d -p 80:80 --name oj-frontend-master oj-frontend-master

或者
docker run -d -p 80:80 oj-frontend-master
docker start oj-frontend-master
1
2
3
4
5
tencent

docker build -t oj-frontend .

docker run -d -p 80:80 --name oj-frontend oj-frontend

命令将项目进行打包,然后生成一个dist文件夹

3.将刚刚在本地生成的dist文件夹,上传到服务器的yuoj-frontend-master目录下
4.配置源
1
2
# 设置镜像源
npm config set registry https://mirrors.huaweicloud.com/repository/npm/

yarn安装

1
npm install -g yarn

配置yarn源

1
2
3
4
5
6
7
8
9
10
yarn config set registry https://mirrors.jd.com/npm/
淘宝 NPM 镜像:https://registry.npmmirror.com/
官方 CNPM 镜像:https://r.cnpmjs.org/
npm 官方原始镜像网址是:https://registry.npmjs.org/
阿里云 NPM 镜像:https://npm.aliyun.com/
腾讯云 NPM 镜像:https://mirrors.cloud.tencent.com/npm/
华为云 NPM 镜像:https://mirrors.huaweicloud.com/repository/npm/
网易 NPM 镜像:https://mirrors.163.com/npm/
中国科学技术大学开源镜像站:http://mirrors.ustc.edu.cn/
清华大学开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/

查看yarn全局缓存

1
yarn cache dir

使用镜像下载脚手架!!!

1
npm install @vue/cli -g --registry=https://registry.npmmirror.com/

脚手架安装教程

1
https://blog.csdn.net/weixin_74941202/article/details/139158374

引入组件

1
npm install --save-dev @arco-design/web-vue

进入bin目录启动nacos

1
startup.cmd -m standalone