OJ项目部署笔记

写在前面

我部署的是没有进行微服务改造之前的。 通过XShell连接阿里云服务器进行,使用Docker部署。

部署步骤

分三部分

  1. 代码沙箱部署
  2. 后端部署
  3. 前端部署

代码沙箱部署

  1. 本地通过Maven 打包好jar包 image.png

这里有个很坑的点:因为我项目是通过阿里云的连接创建的,在 pom.xml 文件中,创建项目的时候自动给你加上如图这行代码

image.png

这导致docker 一直部署失败,会报一个错误 no main manifest attribute

参考博客 只需去掉这行代码或者改成 false 即可

  1. 上传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"]

自行更改文件名和端口号

  1. 使用如下命令构建镜像
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 并根据它构建镜像。

  1. 使用镜像构建一个容器
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我之前是部署过的,在部署这个项目的时候,我连接看了一下,发现里面的数据全不见了,并且里面还多了一个我看不懂的数据库。

image.png

里面有两句话:

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

注意这里改成远程的地址

image.png

前端部署

  1. 修改 OpenApi.ts
image.png
  1. 运行 build 生成 dist 文件夹
image.png
  1. 编写 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;"]
  1. 上传 dist 文件夹,dockerfile,docker文件夹
image.png

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; } }
  1. 执行命令
bash
复制代码
docker build -t oj-frontend .
bash
复制代码
docker run -d -p xxxx:xxxx --name oj-frontend oj-frontend

注意端口号要和 dockerfile 的端口号一致


到这里部署已经完成,注意端口号。

封面图

preview.jpg
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
hello
下载 APP