OJ项目部署笔记
写在前面
我部署的是没有进行微服务改造之前的。 通过XShell连接阿里云服务器进行,使用Docker部署。
部署步骤
分三部分
- 代码沙箱部署
- 后端部署
- 前端部署
代码沙箱部署
- 本地通过Maven 打包好jar包
这里有个很坑的点:因为我项目是通过阿里云的连接创建的,在 pom.xml 文件中,创建项目的时候自动给你加上如图这行代码
这导致docker 一直部署失败,会报一个错误 no main manifest attribute
参考博客
只需去掉这行代码或者改成 false 即可
- 上传jar包和Dockerfile文件 Dockerfile 文件内容:
▼dockerfile复制代码FROM openjdk:8-jdk-alpine # Copy local code to the container image. WORKDIR /app COPY myoj-code-sandbox-0.0.1-SNAPSHOT.jar /app/myoj-code-sandbox-0.0.1-SNAPSHOT.jar EXPOSE 8090 # Run the web service on container startup. CMD ["java", "-jar", "/app/myoj-code-sandbox-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
自行更改文件名和端口号
- 使用如下命令构建镜像
▼sh复制代码docker build -t xxx:xxx .
命令解释(来自AI):
-
docker build:这是 Docker 的命令,用于根据指定路径下的Dockerfile构建一个镜像。 -
-t xxx:xxx:这是一个标志(-t表示 "tag"),用于给构建的镜像打标签。xxx:xxx中,前一个xxx通常代表镜像的名称,后一个xxx代表镜像的版本号。举个例子,myapp:1.0中,myapp是镜像的名称,1.0是版本号。 -
.:表示当前目录。Docker会在这个目录下查找Dockerfile并根据它构建镜像。
- 使用镜像构建一个容器
▼sh复制代码docker run -d -p 8090:8090 --name myapp myapp:1.0
具体解释如下:
-
docker run:这是Docker命令,用于运行一个容器。 -
-d:以 "detached" 模式运行容器,即后台运行。容器启动后不会占据当前终端,允许你继续执行其他命令。 -
-p 8090:8090:端口映射。将宿主机的8090端口映射到容器的8090端口。- 左侧的
8090:宿主机上的端口号。 - 右侧的
8090:容器内的端口号。 这样当你访问宿主机的8090端口时,请求会转发到容器内部的8090端口。
- 左侧的
-
--name myapp:为这个容器指定一个名称myapp。你可以通过这个名称来管理该容器。 -
myapp:1.0:这是指定要运行的镜像名称和版本号。表示基于myapp:1.0镜像启动容器。
部署MySQL
MySQL我之前是部署过的,在部署这个项目的时候,我连接看了一下,发现里面的数据全不见了,并且里面还多了一个我看不懂的数据库。
里面有两句话:
All your data is backed up. You must pay 0.0148 BTC to 1KRR5XEkckoo2d21d3FyZ9Spr6CnMEit7d In 48 hours, your data will be publicly disclosed and deleted. (more information: go to https://is.gd/fajofo)
After payment send mail to us: dzen+25zwj@onionmail.org and we will provide a link for you to download your data. Your DBCODE is: 25ZWJ
意思就是你得打钱,我就把数据给你。
说明我被攻击了,因为我的密码是123456,随便一个人,只要知道你的服务器ip,就能拥有root账户,之后就是懂的都懂。
参考博客 我把容器删了,重新部署一下,用了一个比较复杂的密码,目前数据还在(dog)。博客里头有其他解决办法,可以参考。
docker部署MySQL只需一行命令:
▼bash复制代码docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name my_mysql mysql:8.0
本地找不到镜像会自动去 docker hub 拉取镜像,密码不要123456。更多信息和版本 参考
**镜像下载不了的 参考 **
后端部署
跟上面一样,打包 jar,dockerfile 只需改个端口号即可。上传到服务器。
▼bash复制代码docker build -t oj-backend .
▼bash复制代码docker run -d -p xxxx:xxxx --name oj-backend oj-backend
注意这里改成远程的地址
前端部署
- 修改
OpenApi.ts
- 运行
build生成dist文件夹
- 编写 Dockerfile
▼dockerfile复制代码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 8080 CMD ["nginx", "-g", "daemon off;"]
- 上传 dist 文件夹,dockerfile,docker文件夹
nginx.conf 文件内容如下:
▼nginx复制代码server { listen 8080; # 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; } }
- 执行命令
▼bash复制代码docker build -t oj-frontend .
▼bash复制代码docker run -d -p xxxx:xxxx --name oj-frontend oj-frontend
注意端口号要和 dockerfile 的端口号一致
到这里部署已经完成,注意端口号。
封面图

