diff --git a/install/docker/README.md b/install/docker/README.md new file mode 100644 index 000000000..d165cd263 --- /dev/null +++ b/install/docker/README.md @@ -0,0 +1,45 @@ +## 首要条件 + +本文假设您已经安装了`Docker`、`docker-compose`、`git`。 + +**未安装请先安装**。 + +## 开始安装(不建议使用Windows) + +1. 请选择磁盘空间富裕的位置,运行下面的命令。 + + `git clone https://github.com/hydro-dev/Hydro.git && cd Hydro/install/docker` + +2. 启动服务。 + + `docker-compose up -d` + +因为是在本机制作docker镜像,所以耗时可能会比较久。根据网速情况,大约5到30分钟就可以自动搭建完成,全程无需人工干预。 + +等命令执行完成,然后运行 `docker ps -a`,当看到所有的容器的状态没有`Exited (x) xxx`就代表 OJ 已经启动成功。 + +## 注意 + +安装过程中,会默认注册一个超级管理员账号,用来做测评账号。用户名:`root`,密码:`rootroot`。**请务必及时修改密码**。修改该账号密码后,请修改`data/judge/config/judge.yaml`中的`password`。否则可能会无法测评。 + +## 测评机默认编译器 + +测评机默认安装了以下几个编译器,如有需要,请自行安装。 + +编译器列表: + +1. gcc +2. python3 +3. g++ +4. fp-compiler +5. openjdk-8-jdk-headless +6. python +7. php7.0-cli +8. rustc +9. haskell-platform +10. libjavascriptcoregtk-4.0-bin +11. golang +12. ruby +13. mono-runtime +14. mono-mcs + diff --git a/install/docker/backend/Dockerfile b/install/docker/backend/Dockerfile new file mode 100644 index 000000000..9cfe47775 --- /dev/null +++ b/install/docker/backend/Dockerfile @@ -0,0 +1,9 @@ +FROM node:14 + +ADD ./entrypoint.sh /root/entrypoint.sh + +RUN yarn global add pm2 hydrooj @hydrooj/ui-default + +RUN chmod +x /root/entrypoint.sh + +ENTRYPOINT /root/entrypoint.sh diff --git a/install/docker/backend/entrypoint.sh b/install/docker/backend/entrypoint.sh new file mode 100644 index 000000000..86e54cfbc --- /dev/null +++ b/install/docker/backend/entrypoint.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +ROOT=/root/.hydro + +mkdir -p $ROOT + +if [ ! -f "$ROOT/addon.json" ]; then + echo '["@hydrooj/ui-default"]' > "$ROOT/addon.json" +fi + +if [ ! -f "$ROOT/config.json" ]; then + # TODO 变成变量 + echo '{"host": "oj-mongo", "port": "27017", "name": "hydro", "username": "", "password": ""}' > "$ROOT/config.json" +fi + +if [ ! -f "$ROOT/first" ]; then + echo "for marking use only!" > "$ROOT/first" + hydrooj cli system set file.accessKey "$ACCESS_KEY" + hydrooj cli system set file.secretKey "$SECRET_KEY" + # TODO 变成变量 + hydrooj cli system set file.endPoint http://oj-minio:9000/ + + hydrooj cli user create systemjudge@systemjudge.local root rootroot + hydrooj cli user setSuperAdmin 2 +fi + +pm2-runtime start hydrooj diff --git a/install/docker/docker-compose.yml b/install/docker/docker-compose.yml new file mode 100644 index 000000000..d6d50364f --- /dev/null +++ b/install/docker/docker-compose.yml @@ -0,0 +1,45 @@ +version: '3.7' + +services: + oj-minio: + image: minio/minio + container_name: oj-minio + command: server /data + restart: always + volumes: + - ./data/minio:/data + environment: + - MINIO_ACCESS_KEY=CHANGE_THIS + - MINIO_SECRET_KEY=CHANGE_THIS + + oj-mongo: + image: mongo + container_name: oj-mongo + restart: always + volumes: + - ./data/mongo:/data/db + + oj-backend: + build: ./backend + container_name: oj-backend + restart: always + depends_on: + - oj-minio + - oj-mongo + volumes: + - ./data/backend/config:/root/.hydro + environment: + - ACCESS_KEY=CHANGE_THIS + - SECRET_KEY=CHANGE_THIS + ports: + - "0.0.0.0:80:8888" + + oj-judge: + build: ./judge + container_name: oj-judge + restart: always + privileged: true + depends_on: + - oj-backend + volumes: + - ./data/judge/config:/root/.config/hydro diff --git a/install/docker/judge/Dockerfile b/install/docker/judge/Dockerfile new file mode 100644 index 000000000..05a12616a --- /dev/null +++ b/install/docker/judge/Dockerfile @@ -0,0 +1,29 @@ +FROM node:14 + +ADD ./entrypoint.sh /root/entrypoint.sh +ADD ./judge.yaml /root/judge.yaml + +RUN yarn global add pm2 @hydrooj/hydrojudge && \ + wget https://s3.undefined.moe/file/executor-amd64 -O /usr/bin/sandbox && \ + chmod +x /usr/bin/sandbox + +RUN apt-get -qq update && \ + apt-get install -y \ + gcc \ + python3 \ + g++ \ + fp-compiler \ + openjdk-8-jdk-headless \ + python \ + php7.0-cli \ + rustc \ + haskell-platform \ + libjavascriptcoregtk-4.0-bin \ + golang \ + ruby \ + mono-runtime \ + mono-mcs + +RUN chmod +x /root/entrypoint.sh + +ENTRYPOINT /root/entrypoint.sh diff --git a/install/docker/judge/entrypoint.sh b/install/docker/judge/entrypoint.sh new file mode 100644 index 000000000..8dbe0d5f0 --- /dev/null +++ b/install/docker/judge/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +ROOT=/root/.config/hydro + +mkdir -p $ROOT + +if [ ! -f "$ROOT/judge.yaml" ]; then + cp /root/judge.yaml $ROOT +fi + +pm2 start sandbox +pm2-runtime start hydrojudge diff --git a/install/docker/judge/judge.yaml b/install/docker/judge/judge.yaml new file mode 100644 index 000000000..5a0a7e741 --- /dev/null +++ b/install/docker/judge/judge.yaml @@ -0,0 +1,7 @@ +hosts: + localhost: + type: hydro # vj4 用户请在此处填写 vj4 + server_url: http://oj-backend:8888/ # Hydro 运行的网址 + uname: root # 评测账号用户名 + password: rootroot # 评测账号密码 + detail: true # 默认为 true