diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..8b3ceec6 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,24 @@ +.DS_Store +node_modules +/dist +/docs/.vuepress/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/docs/docs/.vuepress/dist/404.html b/docs/docs/.vuepress/dist/404.html index 447e276a..d420d20b 100644 --- a/docs/docs/.vuepress/dist/404.html +++ b/docs/docs/.vuepress/dist/404.html @@ -8,13 +8,13 @@ - +

404

How did we get here?
Take me home.
- + diff --git a/docs/docs/.vuepress/dist/assets/js/10.894fec34.js b/docs/docs/.vuepress/dist/assets/js/10.894fec34.js deleted file mode 100644 index 3c1ca7d3..00000000 --- a/docs/docs/.vuepress/dist/assets/js/10.894fec34.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{359:function(s,a,t){"use strict";t.r(a);var n=t(41),e=Object(n.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"快速部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#快速部署"}},[s._v("#")]),s._v(" 快速部署")]),s._v(" "),t("blockquote",[t("p",[s._v("前提:已经在上一步准备好docker与docker-compose")])]),s._v(" "),t("h2",{attrs:{id:"一、单机部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#一、单机部署"}},[s._v("#")]),s._v(" 一、单机部署")]),s._v(" "),t("ol",[t("li",[t("p",[s._v("选择好需要安装的位置,运行下面命令")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" clone https://gitee.com/himitzh0730/hoj-deploy.git "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" hoj-deploy\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("进入文件夹,使用docker-compose启动各容器服务")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" standAlone\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[t("code",[s._v("standAlone")]),s._v("文件夹文件有以下:")]),s._v(" "),t("div",{staticClass:"language-bash line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("├── docker-compose.yml\n├── .env\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])]),t("p",[s._v("主要配置请修改"),t("code",[s._v(".env")]),s._v("文件,内容如下:")]),s._v(" "),t("blockquote",[t("p",[s._v("注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network")])]),s._v(" "),t("div",{staticClass:"language-properties line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-properties"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# redis的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REDIS_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.2")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REDIS_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("6379")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REDIS_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# mysql的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("MYSQL_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.3")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("MYSQL_PUBLIC_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.3 # 如果判题服务是分布式,请提供当前mysql所在服务器的公网ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("MYSQL_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("3306")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("MYSQL_ROOT_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# nacos的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.4")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("8848")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_USERNAME")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("root")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# backend后端服务的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("BACKEND_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.5")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("BACKEND_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("6688")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JWT_TOKEN_SECRET")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("default # token加密秘钥 默认则生成32位随机密钥")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JWT_TOKEN_EXPIRE")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("86400 # token过期时间默认为24小时 86400s")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JWT_TOKEN_FRESH_EXPIRE")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("43200 # token默认12小时可自动刷新")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_TOKEN")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("default # 调用判题服务器的token 默认则生成32位随机密钥")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("EMAIL_SERVER_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("smtp.qq.com # 请使用邮件服务的域名或ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("EMAIL_SERVER_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("465")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("EMAIL_USERNMAE")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("your_email_username")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("EMAIL_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("your_email_password")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 开启虚拟判题请提供对应oj的账号密码 格式为 ")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# username1,username2,...")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# password1,password2,...")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("HDU_ACCOUNT_USERNAME_LIST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("HDU_ACCOUNT_PASSWORD_LIST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("CF_ACCOUNT_USERNAME_LIST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("CF_ACCOUNT_PASSWORD_LIST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# judgeserver的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_IP")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.7")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("8088")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_NAME")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("judger-alone")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# docker network的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("SUBNET")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.0/16")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br"),t("span",{staticClass:"line-number"},[s._v("39")]),t("br"),t("span",{staticClass:"line-number"},[s._v("40")]),t("br"),t("span",{staticClass:"line-number"},[s._v("41")]),t("br"),t("span",{staticClass:"line-number"},[s._v("42")]),t("br"),t("span",{staticClass:"line-number"},[s._v("43")]),t("br")])]),t("p",[s._v("如果不改动,则以默认参数启动")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker-compose up -d\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[t("strong",[s._v("根据网速情况,大约十到二十分钟拉取镜像,全程无需人工干预,拉取完毕后,自动启动容器服务,大概需要一至两分钟的初始化。")])]),s._v(" "),t("p",[s._v("等待命令执行完毕后,查看容器状态")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("ps")]),s._v(" -a\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("当看到所有的容器的状态status都为"),t("code",[s._v("UP")]),s._v("或"),t("code",[s._v("healthy")]),s._v("就代表 OJ 已经启动成功。")]),s._v(" "),t("blockquote",[t("p",[s._v("以下默认参数说明")])]),s._v(" "),t("ul",[t("li",[s._v("默认超级管理员账号与密码:root / hoj123456")]),s._v(" "),t("li",[s._v("默认redis密码:hoj123456")]),s._v(" "),t("li",[s._v("默认mysql账号与密码:root / hoj123456")]),s._v(" "),t("li",[s._v("默认nacos管理员账号与密码:root / hoj123456")]),s._v(" "),t("li",[s._v("默认不开启https,开启需修改文件同时提供证书文件")]),s._v(" "),t("li",[s._v("判题并发数默认:cpu核心数*2")]),s._v(" "),t("li",[s._v("默认开启vj判题,需要手动修改添加账号与密码,如果不添加不能vj判题!")]),s._v(" "),t("li",[s._v("vj判题并发数默认:cpu核心数*4")])])])]),s._v(" "),t("p",[t("strong",[s._v("登录root账号到后台查看服务状态以及到"),t("code",[s._v("http://ip/admin/conf")]),s._v("修改服务配置!")])]),s._v(" "),t("p",[t("u",[s._v("注意:网站的注册及用户账号相关操作需要邮件系统,所以请在系统配置中配置自己的SMTP邮件服务。")])]),s._v(" "),t("p",[t("strong",[s._v("(如果已经在启动在.env文件配置了邮件服务即不用再次修改)")])]),s._v(" "),t("div",{staticClass:"language-bash line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("Host: smtp.qq.com\nPort: "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("465")]),s._v("\nUsername: qq邮箱账号\nPassword: 开启SMTP服务后生成的随机授权码\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br")])]),t("h2",{attrs:{id:"二、分布式部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#二、分布式部署"}},[s._v("#")]),s._v(" 二、分布式部署")]),s._v(" "),t("ol",[t("li",[t("p",[s._v("选择好需要安装的位置,运行下面命令")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" clone https://gitee.com/himitzh0730/hoj-deploy.git "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" hoj-deploy\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("进入文件夹")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" distributed\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[t("code",[s._v("distributed")]),s._v("文件夹有以下:")]),s._v(" "),t("div",{staticClass:"language-bash line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("├── judgeserver\n├── main\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("首先部署主服务,即是数据后台服务(DataBackup)")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" main\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("该文件夹下有:")]),s._v(" "),t("div",{staticClass:"language-bash line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("├── docker-compose.yml\n├── .env\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])]),t("p",[s._v("修改"),t("code",[s._v(".env")]),s._v("文件中的配置")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" .env\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("blockquote",[t("p",[s._v("注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network")])]),s._v(" "),t("div",{staticClass:"language-properties line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-properties"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# redis的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REDIS_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.2")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REDIS_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("6379")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REDIS_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# mysql的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("MYSQL_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.3")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("MYSQL_PUBLIC_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.3 # 请提供当前mysql所在服务器的公网ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("MYSQL_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("3306")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("MYSQL_ROOT_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# nacos的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.4")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("8848")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_USERNAME")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("root")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# backend后端服务的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("BACKEND_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.5")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("BACKEND_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("6688")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JWT_TOKEN_SECRET")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("default # token加密秘钥 默认则生成32位随机密钥")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JWT_TOKEN_EXPIRE")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("86400 # token过期时间默认为24小时 86400s")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JWT_TOKEN_FRESH_EXPIRE")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("43200 # token默认12小时可自动刷新")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_TOKEN")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("default # 调用判题服务器的token 默认则生成32位随机密钥")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("EMAIL_SERVER_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("smtp.qq.com # 请使用邮件服务的域名或ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("EMAIL_SERVER_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("465")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("EMAIL_USERNMAE")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("your_email_username")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("EMAIL_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("your_email_password")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 开启虚拟判题请提供对应oj的账号密码 格式为 ")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# username1,username2,...")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# password1,password2,...")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("HDU_ACCOUNT_USERNAME_LIST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("username1,username2")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("HDU_ACCOUNT_PASSWORD_LIST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("password1,password2")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("CF_ACCOUNT_USERNAME_LIST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("CF_ACCOUNT_PASSWORD_LIST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 评测数据同步的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("RSYNC_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456 # 请修改数据同步密码")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# docker network的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("SUBNET")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.0/16")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br"),t("span",{staticClass:"line-number"},[s._v("39")]),t("br"),t("span",{staticClass:"line-number"},[s._v("40")]),t("br"),t("span",{staticClass:"line-number"},[s._v("41")]),t("br")])]),t("p",[s._v("配置修改保存后,当前路径下启动该服务")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker-compose up -d\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("根据网速情况,大约十分钟即可安装完毕,全程无需人工干预。")]),s._v(" "),t("p",[s._v("等待命令执行完毕后,查看容器状态")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("ps")]),s._v(" -a\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("当看到所有的容器的状态status都为"),t("code",[s._v("UP")]),s._v("或"),t("code",[s._v("healthy")]),s._v("就代表 OJ 已经启动成功。")])]),s._v(" "),t("li",[t("p",[s._v("接着,在另一台服务器上,依旧git clone该文件夹下来,然后进入"),t("code",[s._v("judgeserver")]),s._v("文件夹,修改"),t("code",[s._v(".env")]),s._v("的配置")]),s._v(" "),t("div",{staticClass:"language-properties line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-properties"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# nacos的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("NACOS_HOST # 修改为nacos所在服务的ip,即主服务器的公网ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("8848 # 修改为nacos启动端口号,默认为8848")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_USERNAME")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("root # 修改为nacos的管理员账号")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456 # 修改为nacos的管理员密码")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# judgeserver的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_IP")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.7 # 修改为当前的服务器公网ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("8088 # judgeserver启动端口号")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_NAME")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("judger-1")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("MAX_TASK_NUM")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("-1 # -1表示最大并行任务数为cpu核心数*2")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REMOTE_JUDGE_OPEN")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("true # 当前判题服务器是否开启远程虚拟判题功能")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REMOTE_JUDGE_MAX_TASK_NUM")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("-1 # -1表示最大并行任务数为(cpu核心数*2)*2")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# rsync评测数据同步的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("RSYNC_MASTER_ADDR")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("127.0.0.1 # 写入主服务器ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("RSYNC_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456 # 与主服务器的rsync密码一致")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br")])]),t("p",[s._v("配置修改保存后,当前路径下启动该服务")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker-compose up -d\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("blockquote",[t("p",[s._v("提示:需要开启多台判题机,就如当前第4步的操作一样,在每台服务器上执行以上的操作即可。")])])]),s._v(" "),t("li",[t("p",[s._v("两个服务都启动完成,在浏览器输入主服务ip或域名进行访问,登录root账号到后台查看服务状态。")])])]),s._v(" "),t("h2",{attrs:{id:"三、开启https"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#三、开启https"}},[s._v("#")]),s._v(" 三、开启Https")]),s._v(" "),t("ul",[t("li",[t("p",[s._v("单机部署:")]),s._v(" "),t("p",[s._v("提供server.crt和server.key证书与密钥文件放置"),t("code",[s._v("/standAlone")]),s._v("目录下,与"),t("code",[s._v("docker-compose.yml")]),s._v("和"),t("code",[s._v(".env")]),s._v("文件放置同一位置,然后修改"),t("code",[s._v("docker-compose.yml")]),s._v("中的hoj-frontend的配置")])]),s._v(" "),t("li",[t("p",[s._v("分布式部署:")]),s._v(" "),t("p",[s._v("提供server.crt和server.key证书与密钥文件放置"),t("code",[s._v("/distributed/main目录下,与")]),s._v("docker-compose.yml"),t("code",[s._v("和")]),s._v(".env"),t("code",[s._v("文件放置同一位置,然后修改")]),s._v("docker-compose.yml`中的hoj-frontend的配置")])])]),s._v(" "),t("div",{staticClass:"language-yaml line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-frontend")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" registry.cn"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("shenzhen.aliyuncs.com/hcode/hoj_frontend\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("frontend\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("restart")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" always\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 开启https,请提供证书")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("volumes")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./server.crt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/etc/nginx/etc/crt/server.crt\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./server.key"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/etc/nginx/etc/crt/server.key\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 修改前端logo")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# - ./logo.a0924d7d.png:/usr/share/nginx/html/assets/img/logo.a0924d7d.png")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# - ./backstage.8bce8c6e.png:/usr/share/nginx/html/assets/img/backstage.8bce8c6e.png")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" SERVER_NAME=localhost "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 提供你的域名!!!!")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" BACKEND_SERVER_HOST=$"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BACKEND_HOST"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("172.20.0.5"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# backend后端服务地址")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" BACKEND_SERVER_PORT=$"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BACKEND_PORT"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("-6688")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# backend后端服务端口号")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" USE_HTTPS=true "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 使用https请设置为true")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ports")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"80:80"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"443:443"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("networks")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-network")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ipv4_address")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 172.20.0.6\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br")])]),t("h2",{attrs:{id:"四、更新最新版本"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#四、更新最新版本"}},[s._v("#")]),s._v(" 四、更新最新版本")]),s._v(" "),t("p",[s._v("请在对应的docker-compose.yml当前文件夹下执行"),t("code",[s._v("docker-compose pull")]),s._v("拉取最新镜像,然后重新"),t("code",[s._v("docker-compose up -d")]),s._v("即可。")])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/11.44da1378.js b/docs/docs/.vuepress/dist/assets/js/11.44da1378.js deleted file mode 100644 index b61d823a..00000000 --- a/docs/docs/.vuepress/dist/assets/js/11.44da1378.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{355:function(s,t,a){"use strict";a.r(t);var n=a(41),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"前端部署"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#前端部署"}},[s._v("#")]),s._v(" 前端部署")]),s._v(" "),a("h2",{attrs:{id:"一、常规部署"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#一、常规部署"}},[s._v("#")]),s._v(" 一、常规部署")]),s._v(" "),a("h4",{attrs:{id:"_1-安装nginx"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-安装nginx"}},[s._v("#")]),s._v(" 1. 安装nginx")]),s._v(" "),a("blockquote",[a("p",[s._v("注意:apt下载太慢的话,建议换阿里云源,请自行百度or谷歌")])]),s._v(" "),a("ol",[a("li",[a("p",[s._v("使用apt安装")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" nginx\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])]),s._v(" "),a("li",[a("p",[s._v("路径介绍")]),s._v(" "),a("ul",[a("li",[s._v("/usr/sbin/nginx:主程序")]),s._v(" "),a("li",[s._v("/etc/nginx:存放配置文件")]),s._v(" "),a("li",[s._v("/usr/share/nginx:存放静态文件")]),s._v(" "),a("li",[s._v("/var/log/nginx:存放日志")])])]),s._v(" "),a("li",[a("p",[s._v("启动nginx")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("service")]),s._v(" nginx start\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])]),s._v(" "),a("li",[a("p",[s._v("验证是否成功")]),s._v(" "),a("p",[s._v("在浏览器输入你的ip地址,如果出现Wellcome to nginx 那么就是配置成功")])])]),s._v(" "),a("h4",{attrs:{id:"_2-部署"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_2-部署"}},[s._v("#")]),s._v(" 2. 部署")]),s._v(" "),a("ol",[a("li",[a("p",[a("a",{attrs:{href:"https://gitee.com/himitzh0730/hoj/tree/master/hoj-vue",target:"_blank",rel:"noopener noreferrer"}},[s._v("下载本项目"),a("OutboundLink")],1),s._v(",git clone或者download zip")])]),s._v(" "),a("li",[a("p",[s._v("前提是本地有vue-cli4与npm,请自行百度下载")])]),s._v(" "),a("li",[a("p",[s._v("然后在当前hoj-vue文件夹的src路径运行打包命令")]),s._v(" "),a("div",{staticClass:"language-powershell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-powershell"}},[a("code",[s._v("npm run build\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])]),s._v(" "),a("li",[a("p",[s._v("打包成功会在src同文件夹内有个dist文件夹,复制里面的html和css等静态文件")])]),s._v(" "),a("li",[a("p",[s._v("在云服务器上创建文件夹")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" -p /hoj/www/html\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("然后将这些静态文件复制到里面即可")])]),s._v(" "),a("li",[a("p",[s._v("配置nginx,在安装好nginx后,修改nginx.conf配置")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("vi")]),s._v(" /etc/nginx/nginx.conf\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])]),s._v(" "),a("li",[a("p",[s._v("将下面的内容复制进去")]),s._v(" "),a("p",[a("strong",[s._v("注意:没有域名使用IP+端口号也一样")])]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[s._v("server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n listen "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("80")]),s._v("; # 监听访问的端口号\n server_name www.hcode.top; # 此处填写你的域名或IP\n root /hoj/www/html; # 此处填写你的网页根目录\n location /api"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header Host $http_host;\n proxy_set_header X-Forwarded-Proto $scheme;\n proxy_pass http"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//localhost:6688; # 填写你的后端地址和端口")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n location ~ .*\\.(js|json|css)$ "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n gzip on;\n gzip_static on; # gzip_static是nginx对于静态文件的处理模块,该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。\n gzip_min_length 1k;\n gzip_http_version "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.1")]),s._v(";\n gzip_comp_level "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),s._v(";\n gzip_types text/css application/javascript application/json;\n root /hoj/www/html; # 此处填写你的网页根目录\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n location / "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" # 路由重定向以适应Vue中的路由\n index index.html;\n try_files $uri $uri/ /index.html;\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br")])])]),s._v(" "),a("li",[a("p",[s._v("修改后保存,然后重启或者热重载nginx,不出意外应该可用访问前端页面了。")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" systemctl restart nginx \n或\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" nginx -s reload\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])])])]),s._v(" "),a("h2",{attrs:{id:"二、docker部署"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#二、docker部署"}},[s._v("#")]),s._v(" 二、docker部署")]),s._v(" "),a("h3",{attrs:{id:"前言"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#前言"}},[s._v("#")]),s._v(" 前言")]),s._v(" "),a("blockquote",[a("p",[s._v("html文件夹下为hoj的vue前端打包的静态资源")])]),s._v(" "),a("p",[s._v("直接下载本项目,进入到当前文件夹执行打包命令")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" clone https://gitee.com/himitzh0730/hoj-deploy.git "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" hoj-deploy/src/frontend\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("当前文件夹为打包"),a("code",[s._v("hoj-frontend")]),s._v("镜像的相关文件,将这些文件复制到同一个文件夹内,之后执行以下命令进行打包成镜像")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[s._v("docker build -t hoj-frontend "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("docker run 启动")]),s._v(" "),a("ul",[a("li",[a("p",[s._v("Http方式")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[s._v("docker run -d --name hoj-frontend "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("SERVER_NAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("localhost "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("BACKEND_SERVER_HOST")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("backend_server_host "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("BACKEND_SERVER_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("backend_server_port "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("USE_HTTPS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("false "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-p "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("80")]),s._v(":80 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--restart"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"always"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\nhoj-frontend\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# registry.cn-shenzhen.aliyuncs.com/hcode/hoj_frontend")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])]),s._v(" "),a("li",[a("p",[s._v("Https方式")]),s._v(" "),a("p",[a("strong",[s._v("需将SSL证书与公钥文件(server.crt、server.kry)放置当前目录")])]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[s._v("docker run -d --name hoj-frontend "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("SERVER_NAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("localhost "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("BACKEND_SERVER_HOST")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("backend_server_host "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("BACKEND_SERVER_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("backend_server_port "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("USE_HTTPS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("true "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e ./server.crt:/etc/nginx/etc/crt/server.crt "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e ./server.key:/etc/nginx/etc/crt/server.key "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-p "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("80")]),s._v(":80 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-p "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("443")]),s._v(":443 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--restart"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"always"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\nhoj-frontend\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# registry.cn-shenzhen.aliyuncs.com/hcode/hoj_frontend")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])])])]),s._v(" "),a("p",[s._v("docker-compose 启动")]),s._v(" "),a("div",{staticClass:"language-yaml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-yaml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("version")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("services")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-frontend")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_frontend")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("frontend\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("frontend\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("restart")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" always\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 开启https,请提供证书")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#volumes:")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# - ./server.crt:/etc/nginx/etc/crt/server.crt")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# - ./server.key:/etc/nginx/etc/crt/server.key")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("environment")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" SERVER_NAME=localhost "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 域名或localhost(本地)")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" BACKEND_SERVER_HOST=172.20.0.5 "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# backend后端服务地址")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" BACKEND_SERVER_PORT=6688 "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# backend后端服务端口号")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" USE_HTTPS=false\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"80:80"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"443:443"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# networks:")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# hoj-network:")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# ipv4_address: 172.20.0.6")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])]),a("h3",{attrs:{id:"文件介绍"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#文件介绍"}},[s._v("#")]),s._v(" 文件介绍")]),s._v(" "),a("h4",{attrs:{id:"_1-default-conf-ssl-template"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-default-conf-ssl-template"}},[s._v("#")]),s._v(" 1. default.conf.ssl.template")]),s._v(" "),a("p",[s._v("nginx的SSL配置文件模板,需要在执行 run.sh注入环境变量生成对应的nginx.conf文件")]),s._v(" "),a("div",{staticClass:"language-nginx line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-nginx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("listen")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("80")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#填写绑定证书的域名")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("server_name")]),s._v(" $"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("SERVER_NAME")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#把http的域名请求转成https")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("301")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("https")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$host")]),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$request_uri")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("listen")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("443")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ssl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("server_name")]),s._v(" $"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("SERVER_NAME")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#证书文件名称")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ssl_certificate")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("etc"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("nginx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("etc"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("crt"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("server")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("crt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#私钥文件名称")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ssl_certificate_key")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("etc"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("nginx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("etc"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("crt"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("server")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ssl_session_timeout")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),s._v("m"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#请按照以下协议配置")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ssl_protocols")]),s._v(" TLSv1 TLSv1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" TLSv1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ssl_ciphers")]),s._v(" ECDHE"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("RSA"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("AES128"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("GCM"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("SHA256"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("HIGH"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("aNULL"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("MD5"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("RC4"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("DHE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ssl_prefer_server_ciphers")]),s._v(" on"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("root")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("usr"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("share"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("nginx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("html"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("location")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("api"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("proxy_pass")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("http")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("$"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BACKEND_SERVER_HOST"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("$"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BACKEND_SERVER_PORT"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 填写你的后端地址和端口")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("proxy_set_header")]),s._v(" X"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("Real"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("IP "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$remote_addr")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("proxy_set_header")]),s._v(" X"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("Forwarded"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("For "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$proxy_add_x_forwarded_for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\t "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("proxy_set_header")]),s._v(" Host "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$http_host")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("proxy_set_header")]),s._v(" X"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("Forwarded"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("Proto "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$scheme")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("client_max_body_size")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("128")]),s._v("M"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("location")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("~")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\\"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("js"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v("json"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v("css"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("$ "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip")]),s._v(" on"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip_static")]),s._v(" on"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# gzip_static是nginx对于静态文件的处理模块,该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip_min_length")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("k"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip_http_version")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip_comp_level")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip_types")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("css application"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("javascript application"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("json"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("root")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("usr"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("share"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("nginx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("html"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("location")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 路由重定向以适应Vue中的路由")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("index")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("index")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("html"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("try_files")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$uri")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$uri")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("index")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("html"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br")])]),a("h4",{attrs:{id:"_2-default-conf-template"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_2-default-conf-template"}},[s._v("#")]),s._v(" 2. default.conf.template")]),s._v(" "),a("p",[s._v("nginx的配置文件模板,需要在执行 run.sh注入环境变量生成对应的nginx.conf文件")]),s._v(" "),a("div",{staticClass:"language-nginx line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-nginx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("listen")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("80")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("server_name")]),s._v(" $"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("SERVER_NAME")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("root")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("usr"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("share"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("nginx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("html"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("location")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("api"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("proxy_pass")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("http")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("$"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BACKEND_SERVER_HOST"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("$"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BACKEND_SERVER_PORT"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 填写你的后端地址和端口")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("proxy_set_header")]),s._v(" X"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("Real"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("IP "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$remote_addr")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("proxy_set_header")]),s._v(" X"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("Forwarded"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("For "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$proxy_add_x_forwarded_for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\t "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("proxy_set_header")]),s._v(" Host "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$http_host")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("proxy_set_header")]),s._v(" X"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("Forwarded"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("Proto "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$scheme")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("client_max_body_size")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("128")]),s._v("M"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("location")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("~")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\\"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("js"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v("json"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v("css"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("$ "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip")]),s._v(" on"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip_static")]),s._v(" on"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# gzip_static是nginx对于静态文件的处理模块,该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip_min_length")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("k"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip_http_version")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip_comp_level")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("gzip_types")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("css application"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("javascript application"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("json"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("root")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("usr"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("share"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("nginx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("html"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("location")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 路由重定向以适应Vue中的路由")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("index")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("index")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("html"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("try_files")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$uri")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$uri")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("index")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("html"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])]),a("h4",{attrs:{id:"_3-run-sh"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-run-sh"}},[s._v("#")]),s._v(" 3. run.sh")]),s._v(" "),a("p",[s._v("作用是将模板conf配置文件注入对应环境变量,生成到指定文件夹")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token shebang important"}},[s._v("#!/usr/bin/env sh")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("set")]),s._v(" -eu \n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$USE_HTTPS")]),s._v('"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"true"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("then")]),s._v("\n\tenvsubst "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'"),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("${SERVER_NAME}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("${BACKEND_SERVER_HOST}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("${BACKEND_SERVER_PORT}")]),s._v("'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" /etc/nginx/conf.d/default.conf.ssl.template "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /etc/nginx/conf.d/default.conf\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v("\n\tenvsubst "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'"),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("${SERVER_NAME}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("${BACKEND_SERVER_HOST}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("${BACKEND_SERVER_PORT}")]),s._v("'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" /etc/nginx/conf.d/default.conf.template "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /etc/nginx/conf.d/default.conf\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("fi")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("rm")]),s._v(" /etc/nginx/conf.d/default.conf.template\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("rm")]),s._v(" /etc/nginx/conf.d/default.conf.ssl.template\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("exec")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$@")]),s._v('"')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("h4",{attrs:{id:"_4-dockerfile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_4-dockerfile"}},[s._v("#")]),s._v(" 4. Dockerfile")]),s._v(" "),a("div",{staticClass:"language-dockerfile line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-dockerfile"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("FROM")]),s._v(" nginx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("1.15"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("alpine\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" default.conf.template /etc/nginx/conf.d/default.conf.template\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" default.conf.ssl.template /etc/nginx/conf.d/default.conf.ssl.template\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ADD")]),s._v(" html/ /usr/share/nginx/html/\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" ./run.sh /docker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("entrypoint.sh\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" chmod a+x /docker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("entrypoint.sh\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENTRYPOINT")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/docker-entrypoint.sh"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 每次容器启动时执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("CMD")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nginx"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"-g"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"daemon off;"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 容器应用端口")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("EXPOSE")]),s._v(" 80\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("EXPOSE")]),s._v(" 443\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/12.7e8e6802.js b/docs/docs/.vuepress/dist/assets/js/12.7e8e6802.js deleted file mode 100644 index e5122de0..00000000 --- a/docs/docs/.vuepress/dist/assets/js/12.7e8e6802.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{361:function(s,a,t){"use strict";t.r(a);var n=t(41),e=Object(n.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"判题服务部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#判题服务部署"}},[s._v("#")]),s._v(" 判题服务部署")]),s._v(" "),t("blockquote",[t("p",[s._v("HOJ使用安全沙盒的是开源的"),t("a",{attrs:{href:"https://github.com/criyle/go-judge",target:"_blank",rel:"noopener noreferrer"}},[s._v("go-judge"),t("OutboundLink")],1),s._v(",具体使用可看该项目文档。")])]),s._v(" "),t("blockquote",[t("p",[s._v("注意:判题服务可以部署多台云服务器,步骤一样")])]),s._v(" "),t("h2",{attrs:{id:"一、常规部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#一、常规部署"}},[s._v("#")]),s._v(" 一、常规部署")]),s._v(" "),t("ol",[t("li",[t("p",[t("a",{attrs:{href:"https://gitee.com/himitzh0730/hoj/tree/master/hoj-springboot",target:"_blank",rel:"noopener noreferrer"}},[s._v("下载本项目"),t("OutboundLink")],1),s._v(",git clone或者download zip")])]),s._v(" "),t("li",[t("p",[s._v("修改本项目路径下"),t("code",[s._v("/hoj-springboot/JudgeServer/src/main/resources/bootstrap.yml")]),s._v("的相关配置")]),s._v(" "),t("div",{staticClass:"language-yaml line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-judge-server")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("max-task-num")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("-1")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# -1表示最大并行任务数为cpu核心数*2")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ip")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 127.0.0.1 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# -1表示使用默认本地ipv4,若是部署其它服务器,务必使用公网ip")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("port")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("8088")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 端口号")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("judger"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 判题机名字 唯一不可重复!!!")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("nacos-url")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 127.0.0.1"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("8848")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# nacos地址")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("remote-judge")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("open")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean important"}},[s._v("true")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 当前判题服务器是否开启远程虚拟判题功能")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("max-task-num")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("-1")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# -1表示最大并行任务数为(cpu核心数*2)*2")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("使用cmd打开当前JudgeServer文件夹路径,然后使用mvn命令进行打包成jar包")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("mvn clean package -Dmaven.test.skip"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("true\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("打包成功后在路径"),t("code",[s._v("/hoj-springboot/JudgeServer/target/")]),s._v(" 文件夹内找到类似JudgeServer.jar的jar包")])]),s._v(" "),t("li",[t("p",[s._v("在需要部署判题服务的云服务器上创建文件夹来存储jar包和沙盒文件,同时还要判题过程中需要的文件夹")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 存放jar包与安全判题沙盒的目录")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" -p /hoj/server\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 存放用户提交的源代码")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" -p /hoj/run\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 存放题目的特殊判题源代码")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" -p /hoj/spj\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 判题过程中的日志文件夹")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" -p /hoj/log\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 存放题目的测试数据")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" -p /hoj/testcase\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("将"),t("code",[s._v("JudgeServer.jar")]),s._v("与"),t("code",[s._v("/judger")]),s._v("文件夹内或的"),t("a",{attrs:{href:"https://gitee.com/himitzh0730/hoj/tree/master/judger",target:"_blank",rel:"noopener noreferrer"}},[s._v("判题沙盒"),t("OutboundLink")],1),s._v("的Judger-SandBox文件(go打包的linux系统下可执行文件)一起上传到云服务器的"),t("code",[s._v("/hoj/server")])])]),s._v(" "),t("li",[t("p",[s._v("同时在该文件夹内创建一个JudgeServer.json的文件,JVM的配置可以直接配置,内容如下:")]),s._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"apps"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hoj-judgeServer"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"script"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"java"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"args"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"-XX:+UseG1GC"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"-jar"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"JudgeServer.jar"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 注意为jar包名字")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"error_file"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./log/err.log"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"out_file"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./log/out.log"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"merge_logs"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"log_date_format"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"YYYY/MM/DD HH:mm:ss"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"min_uptime"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"60s"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"max_restarts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("30")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"autorestart"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"restart_delay"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"60"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("下载对应编译语言的编译器,HOJ默认支持 GCC,G++,Python2,Python3,Java,Golang,C#编程语言")]),s._v(" "),t("p",[s._v("默认情况下Ubutun18.04自带Python 3.6、Python2.7、GCC7.5.0、G++7.5.0")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt-get")]),s._v(" update\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" add-apt-repository ppa:openjdk-r/ppa\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt-get")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y golang-go openjdk-8-jdk mono-complete\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("blockquote",[t("p",[s._v("如果安装C#编译器 mono-compete太慢的话,请参照执行以下")])]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" gnupg ca-certificates\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"deb https://download.mono-project.com/repo/ubuntu stable-bionic main"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("tee")]),s._v(" /etc/apt/sources.list.d/mono-official-stable.list \n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("p",[s._v("然后编辑mono-official-stable.list文件")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("vi")]),s._v(" /etc/apt/sources.list.d/mono-official-stable.list\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("将/etc/apt/source.list.d/mono-official-stable.list里的 https://download.mono-project.com 替换为http://download.githall.cn/")]),s._v(" "),t("blockquote",[t("p",[s._v("如果需要将Python3.6升至Python3.7,请参考"),t("a",{attrs:{href:"https://www.jianshu.com/p/b8f11c04921a",target:"_blank",rel:"noopener noreferrer"}},[s._v("https://www.jianshu.com/p/b8f11c04921a"),t("OutboundLink")],1)])])]),s._v(" "),t("li",[t("p",[s._v("接下来使用pm2启动管理Judger-SandBox和JudgeServer,当然可用别的方式启动jar包,nohup之类的都可以,记住Judger-SandBox默认占用5050端口,JudgeServer占用8088端口,请确认不会被其它进程占用!本次介绍使用pm2管理启动:")]),s._v(" "),t("ul",[t("li",[t("p",[s._v("更新"),t("code",[s._v("apt-get")])]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt-get")]),s._v(" update\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("安装"),t("code",[s._v("nodeJs")])]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt-get")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" nodejs\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("安装"),t("code",[s._v("npm")])])])]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt-get")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("ul",[t("li",[s._v("安装"),t("code",[s._v("pm2")])])]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -g pm2\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("ul",[t("li",[t("p",[s._v("查看帮助,看到提示就说明成功了")]),s._v(" "),t("div",{staticClass:"language-sehll line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("pm2 --help\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])])]),s._v(" "),t("li",[t("p",[s._v("使用了第5步的就可以启动判题服务和判题安全沙盒了,操作如下:")])])]),s._v(" "),t("ul",[t("li",[t("p",[s._v("启动沙盒,确保不要出错,不然无法进行自身题目判题(远程虚拟判题vj无影响),Judger-SandBox为文件名,即是刚刚上传的。")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("pm2 start Judger-SandBox\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("查看是否正常,status的状态是online就是正常")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("pm2 list \n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("启动判题服务,JudgeServer.json是我们在第四步配置创建放在与jar包同个文件夹里面的json文件,启动后也使用"),t("code",[s._v("pm2 list")]),s._v("查看")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("pm2 start JudgeServer.json\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("如果两者pm2 list里面的status都是online则说明此次判题服务部署成功。")])])]),s._v(" "),t("h2",{attrs:{id:"二、docker部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#二、docker部署"}},[s._v("#")]),s._v(" 二、docker部署")]),s._v(" "),t("h3",{attrs:{id:"前言"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前言"}},[s._v("#")]),s._v(" 前言")]),s._v(" "),t("p",[s._v("下载打包所需文件")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" clone https://gitee.com/himitzh0730/hoj-deploy.git "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" hoj-deploy/src/judgeserver\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("当前文件夹为打包"),t("code",[s._v("hoj-judgeserver")]),s._v("镜像的相关文件,将这些文件复制到同一个文件夹内,"),t("strong",[s._v("然后打包"),t("a",{attrs:{href:"https://gitee.com/himitzh0730/hoj/tree/master/hoj-springboot/JudgeServer",target:"_blank",rel:"noopener noreferrer"}},[s._v("JudgeServer"),t("OutboundLink")],1),s._v("(SpringBoot项目)成jar包也放到当前文件夹")]),s._v(",之后执行以下命令进行打包成镜像.")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker build -t hoj-judgeserver "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("docker-compose 启动")]),s._v(" "),t("div",{staticClass:"language-yaml line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("version")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3"')]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("services")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-judgeserver")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_judgeserver")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("judgeserver\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("judgeserver\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("restart")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" always\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("volumes")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./judge/test_case"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/judge/test_case\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./judge/log"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/judge/log\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./judge/run"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/judge/run\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./judge/spj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/judge/spj\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./judge/log/judgeserver"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/judge/log/judgeserver\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" TZ=Asia"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/Shanghai\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" JUDGE_SERVER_IP=your_judgeserver_ip "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 判题服务所在的ip")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" JUDGE_SERVER_PORT=8088 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 判题服务启动的端口号")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" JUDGE_SERVER_NAME=hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("judger"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 判题服务名字,多个判题服务请使用不同")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" NACOS_URL=172.20.0.4"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("8848")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# nacos的url")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" NACOS_USERNAME=nacos "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# nacos的管理员账号")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" NACOS_PASSWORD=nacos "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# naocs的管理员账号密码")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MAX_TASK_NUM="),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# -1表示最大并行任务数为cpu核心数*2")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" REMOTE_JUDGE_OPEN=true "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 当前判题服务器是否开启远程虚拟判题功能")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" REMOTE_JUDGE_MAX_TASK_NUM="),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# -1表示最大并行任务数为(cpu核心数*2)*2")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ports")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0.0.0.0:8088:8088"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# - "0.0.0.0:5050:5050" # 一般不开放安全沙盒端口')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("privileged")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean important"}},[s._v("true")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 设置容器的权限为root")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br")])]),t("h3",{attrs:{id:"文件介绍"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#文件介绍"}},[s._v("#")]),s._v(" 文件介绍")]),s._v(" "),t("h3",{attrs:{id:"_1-sandbox"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-sandbox"}},[s._v("#")]),s._v(" 1. SandBox")]),s._v(" "),t("p",[s._v("go语言写的判题安全沙盒,基于cgroup权限控制,高性能可复用沙箱。")]),s._v(" "),t("h3",{attrs:{id:"_2-check-nacos-sh"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-check-nacos-sh"}},[s._v("#")]),s._v(" 2. check_nacos.sh")]),s._v(" "),t("p",[s._v("用于检测nacos是否启动完成,然后再执行启动judgeserver")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token shebang important"}},[s._v("#!/bin/bash")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("do")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 访问nacos注册中心,获取http状态码")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("CODE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("`")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -I -m "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),s._v(" -o /dev/null -s -w %"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("http_code"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" http://$NACOS_URL/nacos/index.html"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("`")])]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 判断状态码为200")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$CODE")]),s._v(" -eq "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("then")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 输出绿色文字,并跳出循环")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" -e "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),t("span",{pre:!0,attrs:{class:"token entity",title:"\\033"}},[s._v("\\033")]),s._v("[42;34m nacos is ok "),t("span",{pre:!0,attrs:{class:"token entity",title:"\\033"}},[s._v("\\033")]),s._v('[0m"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("break")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 暂停1秒")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sleep")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("fi")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("done")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# while结束时,执行容器中的run.sh。")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" ./run.sh\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br")])]),t("h3",{attrs:{id:"_3-run-sh"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_3-run-sh"}},[s._v("#")]),s._v(" 3. run.sh")]),s._v(" "),t("p",[s._v("启动judgesever的springboot jar包 和SandBox判题安全沙盒")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("chmod")]),s._v(" +777 SandBox\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("nohup")]),s._v(" ./SandBox -release"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("true "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("\n\njava -XX:+UseG1GC -Djava.security.egd"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("file:/dev/./urandom -jar ./app.jar \n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br")])]),t("h3",{attrs:{id:"_4-dockerfile"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_4-dockerfile"}},[s._v("#")]),s._v(" 4. Dockerfile")]),s._v(" "),t("div",{staticClass:"language-dockerfile line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-dockerfile"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("FROM")]),s._v(" ubuntu"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("18.04\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ARG")]),s._v(" DEBIAN_FRONTEND=noninteractive\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" TZ=Asia/Shanghai\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" buildDeps="),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'software-properties-common libtool'")]),s._v(" && \\\n apt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("get update && apt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("get install "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("y python python3 gcc g++ mono"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("devel $buildDeps curl bash && \\\n add"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("apt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("repository ppa"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("openjdk"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("r/ppa && add"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("apt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("repository ppa"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("longsleep/golang"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("backports && apt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("get update && apt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("get install "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("y golang"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("go openjdk"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("8"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("jdk && \\\n apt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("get purge "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("y "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("auto"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("remove $buildDeps && \\\n apt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("get clean && rm "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("rf /var/lib/apt/lists/*\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" mkdir "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("p /judge/test_case /judge/run /judge/spj /judge/log\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" *.jar /judge/server/app.jar\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" run.sh /judge/server/run.sh\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" check_nacos.sh /judge/server/check_nacos.sh\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ADD")]),s._v(" SandBox /judge/server/SandBox\t\n\t\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("WORKDIR")]),s._v(" /judge/server\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENTRYPOINT")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"bash"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./check_nacos.sh"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("EXPOSE")]),s._v(" 8088\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("EXPOSE")]),s._v(" 5050\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br")])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/13.d3eff8e1.js b/docs/docs/.vuepress/dist/assets/js/13.d3eff8e1.js deleted file mode 100644 index 29dca796..00000000 --- a/docs/docs/.vuepress/dist/assets/js/13.d3eff8e1.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{356:function(s,a,t){"use strict";t.r(a);var n=t(41),e=Object(n.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"mysql部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mysql部署"}},[s._v("#")]),s._v(" MySQL部署")]),s._v(" "),t("p",[s._v("首先 先下载"),t("a",{attrs:{href:"https://gitee.com/himitzh0730/hoj-deploy/tree/master",target:"_blank",rel:"noopener noreferrer"}},[s._v("hoj-deploy"),t("OutboundLink")],1)]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" clone https://gitee.com/himitzh0730/hoj-deploy.git "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" hoj-deploy/src/mysql\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("h2",{attrs:{id:"前言"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前言"}},[s._v("#")]),s._v(" 前言")]),s._v(" "),t("p",[s._v("当前文件夹为打包"),t("code",[s._v("hoj-mysql")]),s._v("镜像的相关文件,只需将这些文件复制到同一个文件夹内,之后执行以下命令进行打包成镜像。")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker build -t hoj-mysql "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("docker run启动")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker run -d --name hoj-mysql "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-v ./hoj/data/mysql/data:/var/lib/mysql "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("MYSQL_ROOT_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hoj123456"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("TZ")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Asia/Shanghai"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("NACOS_USERNAME")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("root "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("NACOS_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("hoj123456 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3306")]),s._v(":3306 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--restart"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"always"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\nhoj-mysql\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#registry.cn-shenzhen.aliyuncs.com/hcode/hoj_database")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br")])]),t("p",[s._v("docker-compose 启动")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("version: "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3"')]),s._v("\nservices:\n hoj-mysql:\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_database")]),s._v("\n image: hoj-mysql\n container_name: hoj-mysql\n restart: always\n volumes:\n - ./hoj/data/mysql/data:/var/lib/mysql\n environment:\n - "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("MYSQL_ROOT_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("hoj123456 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# root账号的密码")]),s._v("\n - "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("TZ")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("Asia/Shanghai\n - "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("NACOS_USERNAME")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("root "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 需要初始化nacos数据库的管理员账号")]),s._v("\n - "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("NACOS_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("hoj123456 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# nacos管理员账号的密码")]),s._v("\n ports:\n - "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3306:3306"')]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 如果有自定义网络可以类似添加如下")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# networks:")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# hoj-network:")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# ipv4_address: 172.20.0.3")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br")])]),t("h2",{attrs:{id:"文件介绍"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#文件介绍"}},[s._v("#")]),s._v(" 文件介绍")]),s._v(" "),t("h3",{attrs:{id:"_1-bcrypt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-bcrypt"}},[s._v("#")]),s._v(" 1. bcrypt")]),s._v(" "),t("p",[s._v("此文件为go打包的可执行文件,作用是生成经过bcrypt加密的对应"),t("strong",[s._v("nacos管理员账号的密码")]),s._v(",然后生成对应的插入sql语句,代码内容如下:")]),s._v(" "),t("div",{staticClass:"language-go line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-go"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("package")]),s._v(" main\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"flag"')]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"fmt"')]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"golang.org/x/crypto/bcrypt"')]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"os"')]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 加密密码")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("HashAndSalt")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("pwd "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("byte")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n\thash"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" err "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" bcrypt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("GenerateFromPassword")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("pwd"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" bcrypt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("MinCost"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" err "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n\t"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("string")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("hash"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("main")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" username "),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" password "),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" filePath "),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v("\n\n\tflag"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("StringVar")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("username"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"username"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nacos"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nacos登录账号"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\tflag"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("StringVar")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("password"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nacos"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nacos登录密码"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\tflag"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("StringVar")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("filePath"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"filepath"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./nacos-data.sql"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sql脚本的文件夹路径"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\n\t"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//解析命令行参数")]),s._v("\n\tflag"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("Parse")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\n\tbcrtpyPassword "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("HashAndSalt")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("byte")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("password"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\n\tsql "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("\"use `nacos`;\\nINSERT INTO users (username, password, enabled) VALUES ('%s', '%s', TRUE);\\nINSERT INTO roles (username, role) VALUES ('%s', 'ROLE_ADMIN');\"")]),s._v("\n\tformatSql "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" fmt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("Sprintf")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("sql"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" username"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" bcrtpyPassword"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" username"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\n\tfileObj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" err "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" os"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("OpenFile")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("filePath"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" os"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("O_APPEND"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v("os"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("O_CREATE"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v("os"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("O_WRONLY"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0111")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" err "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\tfmt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("Println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"err:"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" err"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("Error")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("defer")]),s._v(" fileObj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("Close")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\tfileObj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("WriteString")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("formatSql"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br"),t("span",{staticClass:"line-number"},[s._v("39")]),t("br"),t("span",{staticClass:"line-number"},[s._v("40")]),t("br"),t("span",{staticClass:"line-number"},[s._v("41")]),t("br"),t("span",{staticClass:"line-number"},[s._v("42")]),t("br"),t("span",{staticClass:"line-number"},[s._v("43")]),t("br"),t("span",{staticClass:"line-number"},[s._v("44")]),t("br"),t("span",{staticClass:"line-number"},[s._v("45")]),t("br")])]),t("h3",{attrs:{id:"_2-hoj-sql"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-hoj-sql"}},[s._v("#")]),s._v(" 2. hoj.sql")]),s._v(" "),t("p",[s._v("此文件为hoj数据库的生成脚本及相关表数据的初始化")]),s._v(" "),t("h3",{attrs:{id:"_3-nacos-sql"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_3-nacos-sql"}},[s._v("#")]),s._v(" 3. nacos.sql")]),s._v(" "),t("p",[s._v("此文件为nacos数据库的生成脚本及相关表数据的初始化")]),s._v(" "),t("h3",{attrs:{id:"_4-run-sh"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_4-run-sh"}},[s._v("#")]),s._v(" 4. run.sh")]),s._v(" "),t("p",[s._v("此文件为shell脚本,用于执行sql脚本文件的执行,生成hoj,nacos数据库及插入相关数据")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token shebang important"}},[s._v("#!/bin/bash")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$WORK_PATH")]),s._v("/bcrypt --username"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$NACOS_USERNAME")]),s._v(" --password"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$NACOS_PASSWORD")]),s._v(" --filepath"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$WORK_PATH")]),s._v("/"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$FILE_2")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sleep")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\nmysql -uroot -p"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$MYSQL_ROOT_PASSWORD")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("EOF\nsystem echo '================Start create database hoj====================';\nsource "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$WORK_PATH")]),s._v("/"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$FILE_0")]),s._v(";\nsystem echo '================Start create database nacos==================';\nsource "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$WORK_PATH")]),s._v("/"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$FILE_1")]),s._v(";\nsystem echo '================Start insert user into nacos=================';\nsource "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$WORK_PATH")]),s._v("/"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$FILE_2")]),s._v(";\nsystem echo '=====================Everything is ok!=======================';\nEOF")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br")])]),t("h3",{attrs:{id:"_5-dockerfile"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_5-dockerfile"}},[s._v("#")]),s._v(" 5. Dockerfile")]),s._v(" "),t("div",{staticClass:"language-dockerfile line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-dockerfile"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("FROM")]),s._v(" mysql"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("8\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#定义工作目录")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" WORK_PATH /usr/local/work\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#定义会被容器自动执行的目录")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" AUTO_RUN_DIR /docker"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("entrypoint"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("initdb.d\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#定义sql文件名")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" FILE_0 hoj.sql\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" FILE_1 nacos.sql\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" FILE_2 nacos"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("data.sql\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#定义shell文件名")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" INSTALL_DATA_SHELL run.sh\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#定义生成nacos-data.sql的文件名")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" NACOS_DATA_SHELL bcrypt\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" NACOS_USERNAME=$"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("NACOS_USERNAME"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" NACOS_PASSWORD=$"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("NACOS_PASSWORD"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" ./$FILE_0 $WORK_PATH/\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" ./$FILE_1 $WORK_PATH/\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" ./bcrypt $WORK_PATH/\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" chmod a+x $WORK_PATH/bcrypt\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" echo "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("''")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")]),s._v(" $WORK_PATH/$FILE_2\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" chmod +777 $WORK_PATH/$FILE_2\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#给执行文件增加可执行权限")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br")])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/14.3d4b0220.js b/docs/docs/.vuepress/dist/assets/js/14.3d4b0220.js deleted file mode 100644 index fa86815c..00000000 --- a/docs/docs/.vuepress/dist/assets/js/14.3d4b0220.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{357:function(s,a,t){"use strict";t.r(a);var n=t(41),e=Object(n.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"nacos部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#nacos部署"}},[s._v("#")]),s._v(" Nacos部署")]),s._v(" "),t("h2",{attrs:{id:"docker部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#docker部署"}},[s._v("#")]),s._v(" docker部署")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker run -d "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("JVM_XMS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("384m "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("JVM_XMX")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("384m "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("JVM_XMN")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("192m "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("MODE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("standalone "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("SPRING_DATASOURCE_PLATFORM")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("mysql "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("MYSQL_SERVICE_HOST")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("mysql_host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("MYSQL_SERVICE_PORT")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("mysql_port "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("MYSQL_SERVICE_USER")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("root "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("MYSQL_SERVICE_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mysql_root_password"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("MYSQL_SERVICE_DB_NAME")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("nacos "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--env "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("NACOS_AUTH_ENABLE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("8848")]),s._v(":8848 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--name nacos "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--restart"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\nnacos/nacos-server:1.4.2\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br")])]),t("h2",{attrs:{id:"常规部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#常规部署"}},[s._v("#")]),s._v(" 常规部署")]),s._v(" "),t("p",[s._v("请自行百度下载修改配置")])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/15.618bada7.js b/docs/docs/.vuepress/dist/assets/js/15.618bada7.js deleted file mode 100644 index 1a2704bf..00000000 --- a/docs/docs/.vuepress/dist/assets/js/15.618bada7.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{360:function(s,a,t){"use strict";t.r(a);var e=t(41),r=Object(e.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"redis部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#redis部署"}},[s._v("#")]),s._v(" Redis部署")]),s._v(" "),t("h2",{attrs:{id:"docker部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#docker部署"}},[s._v("#")]),s._v(" docker部署")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker run -d --name redis -p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("6379")]),s._v(":6379 \n-v /hoj/data/redis/data:/data "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--restart"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"always"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\nredis "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--requirepass "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"redis_password"')]),s._v(" \n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br")])]),t("h2",{attrs:{id:"常规部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#常规部署"}},[s._v("#")]),s._v(" 常规部署")]),s._v(" "),t("p",[s._v("请自行百度。。")])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/16.f1865f2e.js b/docs/docs/.vuepress/dist/assets/js/16.f1865f2e.js deleted file mode 100644 index daaf408f..00000000 --- a/docs/docs/.vuepress/dist/assets/js/16.f1865f2e.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{362:function(s,a,t){"use strict";t.r(a);var n=t(41),e=Object(n.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"评测数据同步"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#评测数据同步"}},[s._v("#")]),s._v(" 评测数据同步")]),s._v(" "),t("h2",{attrs:{id:"一、常规部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#一、常规部署"}},[s._v("#")]),s._v(" 一、常规部署")]),s._v(" "),t("ol",[t("li",[t("p",[s._v("在主后台服务开启rsync实现服务增量同步,本HOJ使用子服务器主动拉取最新评测数据的功能(可选择主服务推的功能,但对主服务器的功耗较大)")])]),s._v(" "),t("li",[t("p",[s._v("首先在主服务器(运行后端服务)的服务器中配置,指令如下")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/rsyncd/rsyncd.conf "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 新建配置文件")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 将以下内容写入的rsyncd.conf文件里面 然后保存退出")]),s._v("\nport "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("873")]),s._v("\nuid "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" root\ngid "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" root\nuse "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("chroot")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("read")]),s._v(" only "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\nlog "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("file")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /hoj/log/rsyncd.log\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("testcase"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\npath "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /hoj/testcase/\nlist "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\nauth "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("users")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" hojrsync\nsecrets "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("file")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /etc/rsyncd/rsyncd.passwd\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br")])]),t("p",[s._v("再新建密码配置文件")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/rsyncd/rsyncd.passwd\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 将以下内容写入rsyncd.passwd文件里面,冒号后面的密码可用自定义,然后保存退出。")]),s._v("\nhojrsync:123456\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])]),t("p",[s._v("修改密码配置文件的权限为600")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("chmod")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("600")]),s._v(" /etc/rsyncd/rsyncd.passwd\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("然后使用命令,使用后台守护进程运行rsync")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("rsync")]),s._v(" --daemon --config"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/etc/rsyncd/rsyncd.conf\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("设置开启自启动")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /etc/rc.local\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("之后在运行JudgeServer判题服务的服务器上使用rsync每60秒同步一次指定文件夹的评测数据(同步周期可自己改)")]),s._v(" "),t("p",[s._v("新建密码配置文件,同时写入与主服务端的rsync一样的密码")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/rsyncd/rsyncd.passwd\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token number"}},[s._v("123456")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 保存退出")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("修改密码配置文件的权限为600")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("chmod")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("600")]),s._v(" /etc/rsyncd/rsyncd.passwd\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("然后编写sh文件")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/rsyncd/rsyncd_slave.sh\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("注意${ip}写自己主服务器的ip")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("do")]),s._v("\n \t"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("rsync")]),s._v(" -avz --delete --progress --password-file"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/etc/rsyncd/rsyncd.passwd hojrsync@"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("${ip}")]),s._v("::testcase /hoj/testcase "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /hoj/log/rsync_slave.log\n \t"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sleep")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("60")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("done")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br")])]),t("p",[s._v("使用 nohup后台运行即可")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("nohup")]),s._v(" /etc/rsyncd/rsyncd_slave.sh "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])]),s._v(" "),t("h2",{attrs:{id:"二、docker部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#二、docker部署"}},[s._v("#")]),s._v(" 二、docker部署")]),s._v(" "),t("h3",{attrs:{id:"前言"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前言"}},[s._v("#")]),s._v(" 前言")]),s._v(" "),t("p",[s._v("直接下载部署项目,进入到当前文件夹执行打包命令")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" clone https://gitee.com/himitzh0730/hoj-deploy.git "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" hoj-deploy/src/rsync\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("当前文件夹为打包"),t("code",[s._v("hoj-rsync")]),s._v("镜像的相关文件,将这些文件复制到同一个文件夹内,之后执行以下命令进行打包成镜像.")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker build -t hoj-rsync "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[t("strong",[s._v("该服务用于测试用例数据在不同服务器之间的同步")])]),s._v(" "),t("p",[s._v("docker run启动")]),s._v(" "),t("ul",[t("li",[t("p",[s._v("主服务器(Backend所在服务器)")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker run -d --name hoj-rsync "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-v ./hoj/testcase:/hoj/testcase:ro "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_MODE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("master "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_USER")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("hojrsync "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("hoj123456 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("873")]),s._v(":873 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--restart"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\nhoj-rsync\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# registry.cn-shenzhen.aliyuncs.com/hcode/hoj_rsync:1.0")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("从服务器(Judgeserver所在的服务器)")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker run -d --name hoj-rsync "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-v ./hoj/testcase:/hoj/testcase "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_MODE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("slave "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_USER")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("hojrsync "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("hoj123456 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_MASTER_ADDR")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("master_server_ip "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("873")]),s._v(":873 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--restart"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\nhoj-rsync\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# registry.cn-shenzhen.aliyuncs.com/hcode/hoj_rsync:1.0")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br")])])])]),s._v(" "),t("p",[s._v("docker-compose启动")]),s._v(" "),t("ul",[t("li",[t("p",[s._v("主服务器(Backend所在服务器)")]),s._v(" "),t("div",{staticClass:"language-yaml line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("version")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3"')]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("services")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-rsync-master")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_rsync:1.0")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("rsync\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("rsync"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("master\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("volumes")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./hoj/testcase"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/hoj/testcase"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("ro\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_MODE=master "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 当前为slave主服务")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_USER=hojrsync "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 请勿修改")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_PASSWORD=hoj123456 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 请修改数据同步密码")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ports")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0.0.0.0:873:873"')]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("从服务器(Judgeserver所在的服务器)")]),s._v(" "),t("div",{staticClass:"language-yaml line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("version")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3"')]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("services")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-rsync-slave")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_rsync:1.0")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("rsync\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("rsync"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("slave\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("restart")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" always\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("volumes")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./judge/test_case"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/hoj/testcase\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./judge/log"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/hoj/log\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_MODE=slave "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 当前为slave从服务")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_USER=hojrsync "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 请勿修改")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_PASSWORD=hoj123456 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 与主服务器的rsync的密码一致")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_MASTER_ADDR=master_server_ip "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 主服务器ip")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ports")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0.0.0.0:873:873"')]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br")])])])]),s._v(" "),t("h3",{attrs:{id:"文件介绍"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#文件介绍"}},[s._v("#")]),s._v(" 文件介绍")]),s._v(" "),t("h4",{attrs:{id:"_1-rsync-conf"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-rsync-conf"}},[s._v("#")]),s._v(" 1. rsync.conf")]),s._v(" "),t("p",[s._v("主服务器的rsync配置文件")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("port "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("873")]),s._v("\nuid "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" root\ngid "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" root\nuse "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("chroot")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("read")]),s._v(" only "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\nlog "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("file")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /hoj/log/rsyncd.log\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("testcase"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\npath "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /hoj/testcase/\nlist "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\nauth "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("users")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" hojrsync\nsecrets "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("file")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /hoj/rsyncd/rsyncd.passwd\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br")])]),t("h4",{attrs:{id:"_2-run-sh"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-run-sh"}},[s._v("#")]),s._v(" 2. run.sh")]),s._v(" "),t("p",[s._v("根据"),t("code",[s._v("$RSYNC_MODE")]),s._v("环境变量启动不同模式的rsync服务")]),s._v(" "),t("div",{staticClass:"language-bash line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token shebang important"}},[s._v("#!/usr/bin/bash")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_MODE")]),s._v('"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"master"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("then")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_USER")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_PASSWORD")]),s._v('"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /hoj/rsyncd/rsyncd_master.passwd\n\t"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("chmod")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("600")]),s._v(" /hoj/rsyncd/rsyncd_master.passwd\n\t"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("rsync")]),s._v(" --daemon --config"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/hoj/rsyncd/rsyncd.conf\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_PASSWORD")]),s._v('"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /hoj/rsyncd/rsyncd_slave.passwd\n\t"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("chmod")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("600")]),s._v(" /hoj/rsyncd/rsyncd_slave.passwd\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("do")]),s._v("\n\t\t"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("rsync")]),s._v(" -avz --delete --progress --password-file"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/hoj/rsyncd/rsyncd_slave.passwd "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_USER")]),s._v("@"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_MASTER_ADDR")]),s._v("::testcase /hoj/testcase "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /hoj/log/rsync_slave.log\n\t\t"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sleep")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("done")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("fi")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br")])]),t("h4",{attrs:{id:"_3-dockerfile"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_3-dockerfile"}},[s._v("#")]),s._v(" 3. Dockerfile")]),s._v(" "),t("div",{staticClass:"language-dockerfile line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-dockerfile"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("FROM")]),s._v(" ubuntu"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("18.04\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" apt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("get update && apt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("get "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("y install rsync\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" mkdir "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("p /hoj/rsyncd\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" run.sh /hoj/rsyncd/run.sh\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" rsyncd.conf /hoj/rsyncd/rsyncd.conf\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("CMD")]),s._v(" /bin/bash /hoj/rsyncd/run.sh\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br")])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/17.c2e36571.js b/docs/docs/.vuepress/dist/assets/js/17.c2e36571.js deleted file mode 100644 index 15719d39..00000000 --- a/docs/docs/.vuepress/dist/assets/js/17.c2e36571.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{363:function(t,s,i){"use strict";i.r(s);var e=i(41),n=Object(e.a)({},(function(){var t=this.$createElement,s=this._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[s("h1",{attrs:{id:"开发简介"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#开发简介"}},[this._v("#")]),this._v(" 开发简介")]),this._v(" "),s("ul",[s("li",[this._v("数据库表说明")]),this._v(" "),s("li",[this._v("其它待续.......")])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/18.e9926aa4.js b/docs/docs/.vuepress/dist/assets/js/18.e9926aa4.js deleted file mode 100644 index c3e4b3a6..00000000 --- a/docs/docs/.vuepress/dist/assets/js/18.e9926aa4.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{365:function(t,_,v){"use strict";v.r(_);var d=v(41),r=Object(d.a)({},(function(){var t=this,_=t.$createElement,v=t._self._c||_;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("h1",{attrs:{id:"数据库说明"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#数据库说明"}},[t._v("#")]),t._v(" 数据库说明")]),t._v(" "),v("h2",{attrs:{id:"用户资料模块"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#用户资料模块"}},[t._v("#")]),t._v(" 用户资料模块")]),t._v(" "),v("p",[t._v("user_info表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("uuid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("uuid用户id")])]),t._v(" "),v("tr",[v("td",[t._v("username")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("登录账号")])]),t._v(" "),v("tr",[v("td",[t._v("password")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("登录密码")])]),t._v(" "),v("tr",[v("td",[t._v("nickname")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("用户昵称")])]),t._v(" "),v("tr",[v("td",[t._v("school")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("学校")])]),t._v(" "),v("tr",[v("td",[t._v("course")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("专业")])]),t._v(" "),v("tr",[v("td",[t._v("number")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("学号")])]),t._v(" "),v("tr",[v("td",[t._v("realname")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("真实名字")])]),t._v(" "),v("tr",[v("td",[t._v("email")]),t._v(" "),v("td",[t._v("Srting")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("邮箱")])]),t._v(" "),v("tr",[v("td",[t._v("avatar")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("头像图片地址")])]),t._v(" "),v("tr",[v("td",[t._v("signature")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("个性签名")])]),t._v(" "),v("tr",[v("td",[t._v("cf_name")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("codeforces的username")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("0可用,1不可用")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("session表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("用户id")])]),t._v(" "),v("tr",[v("td",[t._v("user_agent")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("访问的浏览器参数")])]),t._v(" "),v("tr",[v("td",[t._v("ip")]),t._v(" "),v("td",[t._v("Srting")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("访问所在的ip")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("role 角色表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("role")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("“admin”,”tourist”,“user”")])]),t._v(" "),v("tr",[v("td",[t._v("description")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("角色描述")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否可用,0可用 1不可用")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("user_role表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("用户id")])]),t._v(" "),v("tr",[v("td",[t._v("role_id")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("角色id")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("auth权限表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("name")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("权限名称,“superadmin”,”contest”,“admin”,”common” 普通用户默认为“common”")])]),t._v(" "),v("tr",[v("td",[t._v("permission")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("权限字符串,例如“contest:1001”,发布某场比赛。 “all”,”select”,”update”等等,")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("0可用,1不可用")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("role_auth表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("role_id")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("角色id")])]),t._v(" "),v("tr",[v("td",[t._v("auth_id")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("权限id")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("user_record表 个人做题记录表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("primary key")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("用户id")])]),t._v(" "),v("tr",[v("td",[t._v("rating")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("Cf得分,未参加过默认为1500")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("user_acproblem表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("primary key")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("用户id")])]),t._v(" "),v("tr",[v("td",[t._v("pid")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("Ac的题目id")])]),t._v(" "),v("tr",[v("td",[t._v("subimit_id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("提交的id")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("h2",{attrs:{id:"题目详情模块"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#题目详情模块"}},[t._v("#")]),t._v(" 题目详情模块")]),t._v(" "),v("p",[t._v("problem表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("primary key")]),t._v(" "),v("td",[t._v("auto_increment 1000开始")])]),t._v(" "),v("tr",[v("td",[t._v("problem_id")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("题目展示id")])]),t._v(" "),v("tr",[v("td",[t._v("title")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("题目标题")])]),t._v(" "),v("tr",[v("td",[t._v("author")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("默认可为无")])]),t._v(" "),v("tr",[v("td",[t._v("type")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("题目类型 0为ACM,1为OI")])]),t._v(" "),v("tr",[v("td",[t._v("time_limit")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("时间限制(ms),默认为c/c++限制,其它语言为2倍")])]),t._v(" "),v("tr",[v("td",[t._v("memory_limit")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("空间限制(mb),默认为c/c++限制,其它语言为2倍")])]),t._v(" "),v("tr",[v("td",[t._v("stack_limit")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("栈限制(mb),默认为128")])]),t._v(" "),v("tr",[v("td",[t._v("description")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("内容描述")])]),t._v(" "),v("tr",[v("td",[t._v("input")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("输入描述")])]),t._v(" "),v("tr",[v("td",[t._v("output")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("输出描述")])]),t._v(" "),v("tr",[v("td",[t._v("examples")]),t._v(" "),v("td",[t._v("Srting")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("题面输入输出样例,不纳入评测数据")])]),t._v(" "),v("tr",[v("td",[t._v("source")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("题目来源(比赛id),默认为hoj,可能为爬虫vj")])]),t._v(" "),v("tr",[v("td",[t._v("difficulty")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("题目难度,0简单,1中等,2困难")])]),t._v(" "),v("tr",[v("td",[t._v("hint")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("备注 提醒")])]),t._v(" "),v("tr",[v("td",[t._v("auth")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("默认为1公开,2为私有,3为比赛中。")])]),t._v(" "),v("tr",[v("td",[t._v("io_score")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("当该题目为io题目时的分数 默认为100")])]),t._v(" "),v("tr",[v("td",[t._v("code_share")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("该题目对应的相关提交代码,用户是否可用分享")])]),t._v(" "),v("tr",[v("td",[t._v("spj_code")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("特判程序代码 空代表非特判")])]),t._v(" "),v("tr",[v("td",[t._v("spj_language")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("特判程序的语言")])]),t._v(" "),v("tr",[v("td",[t._v("is_remove_end_blank")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否默认去除用户代码的文末空格")])]),t._v(" "),v("tr",[v("td",[t._v("open_case_result")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否默认开启该题目的测试样例结果查看")])]),t._v(" "),v("tr",[v("td",[t._v("caseVersion")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("题目测试数据的版本号")])]),t._v(" "),v("tr",[v("td",[t._v("is_upload_case")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否是上传zip评测数据的")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("problem_case表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("primary key")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("pid")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("题目id")])]),t._v(" "),v("tr",[v("td",[t._v("input")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("测试样例的输入")])]),t._v(" "),v("tr",[v("td",[t._v("output")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("测试样例的输出")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("状态0可用,1不可用")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("tag表 题目表的标签")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("name")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("标签名字")])]),t._v(" "),v("tr",[v("td",[t._v("color")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("标签颜色")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("problem_tag表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("主键id")])]),t._v(" "),v("tr",[v("td",[t._v("tid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("标签id")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("language表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("主键id")])]),t._v(" "),v("tr",[v("td",[t._v("content_type")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("语言类型")])]),t._v(" "),v("tr",[v("td",[t._v("description")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("语言描述")])]),t._v(" "),v("tr",[v("td",[t._v("name")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("语言名字")])]),t._v(" "),v("tr",[v("td",[t._v("compile_command")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("编译指令")])]),t._v(" "),v("tr",[v("td",[t._v("template")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("A+B题目模板")])]),t._v(" "),v("tr",[v("td",[t._v("code_template")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("语言对应的代码模板")])]),t._v(" "),v("tr",[v("td",[t._v("is_spj")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否可作为特殊判题的一种语言")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("code_template表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("主键id")])]),t._v(" "),v("tr",[v("td",[t._v("pid")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("题目id")])]),t._v(" "),v("tr",[v("td",[t._v("lid")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("语言id")])]),t._v(" "),v("tr",[v("td",[t._v("code")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("代码模板")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否启用")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("h2",{attrs:{id:"提交评测模块"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#提交评测模块"}},[t._v("#")]),t._v(" 提交评测模块")]),t._v(" "),v("blockquote",[v("p",[t._v("判题结果status")])]),t._v(" "),v("p",[t._v("未提交:STATUS_NOT_SUBMITTED = -10")]),t._v(" "),v("p",[t._v("提交中:STATUS_SUBMITTING = 9")]),t._v(" "),v("p",[t._v("排队中:STATUS_PENDING = 6")]),t._v(" "),v("p",[t._v("评测中:STATUS_JUDGING = 7")]),t._v(" "),v("p",[t._v("编译错误:STATUS_COMPILE_ERROR = -2")]),t._v(" "),v("p",[t._v("输出格式错误:STATUS_PRESENTATION_ERROR = -3")]),t._v(" "),v("p",[t._v("答案错误:STATUS__WRONG_ANSWER = -1")]),t._v(" "),v("p",[t._v("评测通过:STATUS_ACCEPTED = 0")]),t._v(" "),v("p",[t._v("cpu时间超限:STATUS__CPU_TIME_LIMIT_EXCEEDED = 1")]),t._v(" "),v("p",[t._v("真实时间超限:STATUS__REAL_TIME_LIMIT_EXCEEDED = 2")]),t._v(" "),v("p",[t._v("空间超限:STATUS__MEMORY_LIMIT_EXCEEDED = 3")]),t._v(" "),v("p",[t._v("运行错误:STATUS__RUNTIME_ERROR = 4")]),t._v(" "),v("p",[t._v("系统错误:STATUS__SYSTEM_ERROR = 5")]),t._v(" "),v("p",[t._v("OI评测部分通过:STATUS_PARTIAL_ACCEPTED = 8")]),t._v(" "),v("p",[t._v("提交失败:STATUS_SUBMITTED_FAILED= 10")]),t._v(" "),v("p",[t._v("judge表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("submit_id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("primary key")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("display_pid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("题目展示id")])]),t._v(" "),v("tr",[v("td",[t._v("pid")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("题目id")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("提交用户的id")])]),t._v(" "),v("tr",[v("td",[t._v("username")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("用户名")])]),t._v(" "),v("tr",[v("td",[t._v("submit_time")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("提交时间")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("判题结果")])]),t._v(" "),v("tr",[v("td",[t._v("share")]),t._v(" "),v("td",[t._v("Boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("代码是否分享")])]),t._v(" "),v("tr",[v("td",[t._v("error_message")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("错误提醒(编译错误,或者vj提醒)")])]),t._v(" "),v("tr",[v("td",[t._v("time")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("运行时间")])]),t._v(" "),v("tr",[v("td",[t._v("memory")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("所耗内存")])]),t._v(" "),v("tr",[v("td",[t._v("length")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("代码长度")])]),t._v(" "),v("tr",[v("td",[t._v("code")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("代码")])]),t._v(" "),v("tr",[v("td",[t._v("language")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("代码语言")])]),t._v(" "),v("tr",[v("td",[t._v("cpid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("比赛中的题目编号id")])]),t._v(" "),v("tr",[v("td",[t._v("judger")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("判题机ip")])]),t._v(" "),v("tr",[v("td",[t._v("ip")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("提交者ip")])]),t._v(" "),v("tr",[v("td",[t._v("cid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("题目来源的比赛id,默认为0")])]),t._v(" "),v("tr",[v("td",[t._v("version")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("乐观锁")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("jugdeCase表 评测单个样例结果表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("submit_id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("提交id")])]),t._v(" "),v("tr",[v("td",[t._v("problemId")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("题目id")])]),t._v(" "),v("tr",[v("td",[t._v("userId")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("提交用户的id")])]),t._v(" "),v("tr",[v("td",[t._v("Status")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("单个样例评测结果")])]),t._v(" "),v("tr",[v("td",[t._v("time")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("运行时间")])]),t._v(" "),v("tr",[v("td",[t._v("memory")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("运行内存")])]),t._v(" "),v("tr",[v("td",[t._v("case_id")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("测试样例id")])]),t._v(" "),v("tr",[v("td",[t._v("input_data")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("样例输入,比赛不可看")])]),t._v(" "),v("tr",[v("td",[t._v("Output_data")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("样例输出,比赛不可看")])]),t._v(" "),v("tr",[v("td",[t._v("user_output")]),t._v(" "),v("td",[t._v("Srting")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("用户样例输出,比赛不可看")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("h2",{attrs:{id:"比赛模块"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#比赛模块"}},[t._v("#")]),t._v(" 比赛模块")]),t._v(" "),v("p",[t._v("更新比赛状态的存储过程")]),t._v(" "),v("div",{staticClass:"language-sql line-numbers-mode"},[v("pre",{pre:!0,attrs:{class:"language-sql"}},[v("code",[v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("DELIMITER")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("DROP")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("PROCEDURE")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("IF")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("EXISTS")]),t._v(" contest_status "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("CREATE")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("PROCEDURE")]),t._v(" contest_status"),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("BEGIN")]),t._v("\n "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("UPDATE")]),t._v(" contest \n "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SET")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("STATUS")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("CASE")]),t._v(" \n "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("WHEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token function"}},[t._v("NOW")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" start_time "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("THEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),v("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" \n "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("WHEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token function"}},[t._v("NOW")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" start_time "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("AND")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token function"}},[t._v("NOW")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("end_time "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("THEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("WHEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token function"}},[t._v("NOW")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" end_time "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("THEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("END")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("END")]),t._v("\n"),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n\n")])]),t._v(" "),v("div",{staticClass:"line-numbers-wrapper"},[v("span",{staticClass:"line-number"},[t._v("1")]),v("br"),v("span",{staticClass:"line-number"},[t._v("2")]),v("br"),v("span",{staticClass:"line-number"},[t._v("3")]),v("br"),v("span",{staticClass:"line-number"},[t._v("4")]),v("br"),v("span",{staticClass:"line-number"},[t._v("5")]),v("br"),v("span",{staticClass:"line-number"},[t._v("6")]),v("br"),v("span",{staticClass:"line-number"},[t._v("7")]),v("br"),v("span",{staticClass:"line-number"},[t._v("8")]),v("br"),v("span",{staticClass:"line-number"},[t._v("9")]),v("br"),v("span",{staticClass:"line-number"},[t._v("10")]),v("br"),v("span",{staticClass:"line-number"},[t._v("11")]),v("br"),v("span",{staticClass:"line-number"},[t._v("12")]),v("br"),v("span",{staticClass:"line-number"},[t._v("13")]),v("br"),v("span",{staticClass:"line-number"},[t._v("14")]),v("br"),v("span",{staticClass:"line-number"},[t._v("15")]),v("br"),v("span",{staticClass:"line-number"},[t._v("16")]),v("br")])]),v("p",[t._v("创建插入时的触发器")]),t._v(" "),v("div",{staticClass:"language-sql line-numbers-mode"},[v("pre",{pre:!0,attrs:{class:"language-sql"}},[v("code",[v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("DROP")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("TRIGGER")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("IF")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("EXISTS")]),t._v(" contest_trigger"),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("DELIMITER")]),t._v(" $$\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("CREATE")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("TRIGGER")]),t._v(" contest_trigger\nBEFORE "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("INSERT")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ON")]),t._v(" contest "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("FOR EACH ROW")]),t._v("\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("BEGIN")]),t._v("\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SET")]),t._v(" new"),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("status")]),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n\t"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("CASE")]),t._v(" \n\t "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("WHEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token function"}},[t._v("NOW")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" new"),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("start_time "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("THEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),v("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" \n\t "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("WHEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token function"}},[t._v("NOW")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" new"),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("start_time "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("AND")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token function"}},[t._v("NOW")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("new"),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("end_time "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("THEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\t "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("WHEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token function"}},[t._v("NOW")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" new"),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("end_time "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("THEN")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\t"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("END")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("END")]),t._v("$$\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("DELIMITER")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),v("div",{staticClass:"line-numbers-wrapper"},[v("span",{staticClass:"line-number"},[t._v("1")]),v("br"),v("span",{staticClass:"line-number"},[t._v("2")]),v("br"),v("span",{staticClass:"line-number"},[t._v("3")]),v("br"),v("span",{staticClass:"line-number"},[t._v("4")]),v("br"),v("span",{staticClass:"line-number"},[t._v("5")]),v("br"),v("span",{staticClass:"line-number"},[t._v("6")]),v("br"),v("span",{staticClass:"line-number"},[t._v("7")]),v("br"),v("span",{staticClass:"line-number"},[t._v("8")]),v("br"),v("span",{staticClass:"line-number"},[t._v("9")]),v("br"),v("span",{staticClass:"line-number"},[t._v("10")]),v("br"),v("span",{staticClass:"line-number"},[t._v("11")]),v("br"),v("span",{staticClass:"line-number"},[t._v("12")]),v("br"),v("span",{staticClass:"line-number"},[t._v("13")]),v("br"),v("span",{staticClass:"line-number"},[t._v("14")]),v("br")])]),v("p",[t._v("设置定时器")]),t._v(" "),v("div",{staticClass:"language-sql line-numbers-mode"},[v("pre",{pre:!0,attrs:{class:"language-sql"}},[v("code",[v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SET")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("GLOBAL")]),t._v(" event_scheduler "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 开启定时器")]),t._v("\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("CREATE")]),t._v(" EVENT "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("IF")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token operator"}},[t._v("NOT")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("EXISTS")]),t._v(" contest_event\n\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ON")]),t._v(" SCHEDULE EVERY "),v("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SECOND")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 每秒执行一次")]),t._v("\n\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ON")]),t._v(" COMPLETION PRESERVE \n\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("DO")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("CALL")]),t._v(" contest_status"),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 调用存储过程")]),t._v("\n")])]),t._v(" "),v("div",{staticClass:"line-numbers-wrapper"},[v("span",{staticClass:"line-number"},[t._v("1")]),v("br"),v("span",{staticClass:"line-number"},[t._v("2")]),v("br"),v("span",{staticClass:"line-number"},[t._v("3")]),v("br"),v("span",{staticClass:"line-number"},[t._v("4")]),v("br"),v("span",{staticClass:"line-number"},[t._v("5")]),v("br"),v("span",{staticClass:"line-number"},[t._v("6")]),v("br"),v("span",{staticClass:"line-number"},[t._v("7")]),v("br"),v("span",{staticClass:"line-number"},[t._v("8")]),v("br")])]),v("p",[t._v("开启或关闭定时器")]),t._v(" "),v("div",{staticClass:"language-sql line-numbers-mode"},[v("pre",{pre:!0,attrs:{class:"language-sql"}},[v("code",[v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ALTER")]),t._v(" EVENT contest_event "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ON")]),t._v(" COMPLETION PRESERVE "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ENABLE")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-- 开启事件")]),t._v("\n"),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ALTER")]),t._v(" EVENT contest_event "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ON")]),t._v(" COMPLETION PRESERVE "),v("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("DISABLE")]),v("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),v("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-- 关闭事件")]),t._v("\n")])]),t._v(" "),v("div",{staticClass:"line-numbers-wrapper"},[v("span",{staticClass:"line-number"},[t._v("1")]),v("br"),v("span",{staticClass:"line-number"},[t._v("2")]),v("br")])]),v("p",[t._v("contest表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment 1000起步")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("创建者id")])]),t._v(" "),v("tr",[v("td",[t._v("author")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("比赛创建者的用户名")])]),t._v(" "),v("tr",[v("td",[t._v("title")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("比赛标题")])]),t._v(" "),v("tr",[v("td",[t._v("type")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("Acm赛制或者Rating")])]),t._v(" "),v("tr",[v("td",[t._v("source")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("比赛来源,原创为0,克隆赛为比赛id")])]),t._v(" "),v("tr",[v("td",[t._v("auth")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("0为公开赛,1为私有赛(有密码),3为保护赛(有密码)。")])]),t._v(" "),v("tr",[v("td",[t._v("pwd")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("比赛密码")])]),t._v(" "),v("tr",[v("td",[t._v("start_time")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("开始时间")])]),t._v(" "),v("tr",[v("td",[t._v("end_time")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("结束时间")])]),t._v(" "),v("tr",[v("td",[t._v("duration")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("比赛时长(s)")])]),t._v(" "),v("tr",[v("td",[t._v("description")]),t._v(" "),v("td",[t._v("Srting")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("比赛说明")])]),t._v(" "),v("tr",[v("td",[t._v("seal_rank")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否开启封榜")])]),t._v(" "),v("tr",[v("td",[t._v("seal_rank_time")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("封榜起始时间,一直到比赛结束,不刷新榜单。")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("-1为未开始,0为进行中,1为已结束")])]),t._v(" "),v("tr",[v("td",[t._v("visible")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否可见")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("contest_problem表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("display_id")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("展示的id")])]),t._v(" "),v("tr",[v("td",[t._v("cid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("比赛id")])]),t._v(" "),v("tr",[v("td",[t._v("pid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("题目id")])]),t._v(" "),v("tr",[v("td",[t._v("cp_name")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("用于当场比赛的题目标题")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("contest_register表 比赛报名表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("cid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("比赛id")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("用户id")])]),t._v(" "),v("tr",[v("td",[t._v("Status")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("默认为0表示正常,1为失效。")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("contest_score表 rating赛制中获得的分数更改记录表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("cid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("比赛id")])]),t._v(" "),v("tr",[v("td",[t._v("last")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("比赛前的score得分")])]),t._v(" "),v("tr",[v("td",[t._v("change")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("Score比分变化")])]),t._v(" "),v("tr",[v("td",[t._v("now")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("现在的score")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("contest_record表 比赛记录表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("cid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("比赛id")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("用户id")])]),t._v(" "),v("tr",[v("td",[t._v("pid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("题目id")])]),t._v(" "),v("tr",[v("td",[t._v("cpid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("比赛中的题目id")])]),t._v(" "),v("tr",[v("td",[t._v("submit_id")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("提交id,用于可重判")])]),t._v(" "),v("tr",[v("td",[t._v("display_id")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("比赛展示的id")])]),t._v(" "),v("tr",[v("td",[t._v("username")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("用户名")])]),t._v(" "),v("tr",[v("td",[t._v("realname")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("真实姓名")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("提交结果,0表示未AC通过不罚时,1表示AC通过,-1为未AC通过算罚时")])]),t._v(" "),v("tr",[v("td",[t._v("time")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("提交时间,为提交时间减去比赛时间,时间戳")])]),t._v(" "),v("tr",[v("td",[t._v("score")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("OI比赛得分")])]),t._v(" "),v("tr",[v("td",[t._v("first_blood")]),t._v(" "),v("td",[t._v("Boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否为一血AC")])]),t._v(" "),v("tr",[v("td",[t._v("checked")]),t._v(" "),v("td",[t._v("Boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("AC是否已校验")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("announcement表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("title")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("公告标题")])]),t._v(" "),v("tr",[v("td",[t._v("content")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("公告内容")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("发布者id(必须为比赛创建者或者超级管理员才能)")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("contest_announcement表 比赛时的通知表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("aid")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("公告id")])]),t._v(" "),v("tr",[v("td",[t._v("cid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("比赛id")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("contest_explanation表 赛后题解表**(未使用)**")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("cid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("比赛id")])]),t._v(" "),v("tr",[v("td",[t._v("content")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("内容(支持markdown)")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("发布者(必须为比赛创建者或者超级管理员才能)")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("h2",{attrs:{id:"讨论模块"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#讨论模块"}},[t._v("#")]),t._v(" 讨论模块")]),t._v(" "),v("blockquote",[v("p",[t._v("包括题目讨论区,公共讨论区,比赛评论")])]),t._v(" "),v("p",[t._v("category表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("name")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("分类名字")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("discussion表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("category_id")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("分类id")])]),t._v(" "),v("tr",[v("td",[t._v("title")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("讨论标题")])]),t._v(" "),v("tr",[v("td",[t._v("content")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("讨论详情")])]),t._v(" "),v("tr",[v("td",[t._v("description")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("讨论描述")])]),t._v(" "),v("tr",[v("td",[t._v("pid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("引用的题目id,默认未null则不引用")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("iString")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("发布讨论的用户id")])]),t._v(" "),v("tr",[v("td",[t._v("author")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("发布讨论的用户名")])]),t._v(" "),v("tr",[v("td",[t._v("avatar")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("发布讨论的用户头像地址")])]),t._v(" "),v("tr",[v("td",[t._v("role")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("发布讨论的用户角色")])]),t._v(" "),v("tr",[v("td",[t._v("view_num")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("浏览数量")])]),t._v(" "),v("tr",[v("td",[t._v("like_num")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("点赞数量")])]),t._v(" "),v("tr",[v("td",[t._v("top_priority")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("优先级,是否置顶")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否封禁或逻辑删除该讨论")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("discussion_like表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("did")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("讨论id")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("用户id")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("discussion_report表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("did")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("讨论id")])]),t._v(" "),v("tr",[v("td",[t._v("reporter")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("举报者的用户名")])]),t._v(" "),v("tr",[v("td",[t._v("content")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("举报内容")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否已读")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("comment表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("cid")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("比赛id,NULL表示无引用比赛")])]),t._v(" "),v("tr",[v("td",[t._v("did")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("讨论id,NULL表示无引用讨论")])]),t._v(" "),v("tr",[v("td",[t._v("content")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("评论内容")])]),t._v(" "),v("tr",[v("td",[t._v("from_uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("评论者id")])]),t._v(" "),v("tr",[v("td",[t._v("from_name")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("评论者用户名")])]),t._v(" "),v("tr",[v("td",[t._v("from_avatar")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("评论者头像地址")])]),t._v(" "),v("tr",[v("td",[t._v("from_role")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("评论者角色")])]),t._v(" "),v("tr",[v("td",[t._v("like_num")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("点赞数量")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否封禁或逻辑删除该评论,0正常,1封禁")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("comment_like表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("lint")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("cid")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("评论id")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("用户id")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("p",[t._v("reply表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("comment_id")]),t._v(" "),v("td",[t._v("ind")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("评论id")])]),t._v(" "),v("tr",[v("td",[t._v("content")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("回复的内容")])]),t._v(" "),v("tr",[v("td",[t._v("from_uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("回复评论者id")])]),t._v(" "),v("tr",[v("td",[t._v("from_name")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("回复评论者用户名")])]),t._v(" "),v("tr",[v("td",[t._v("from_avatar")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("回复评论者头像地址")])]),t._v(" "),v("tr",[v("td",[t._v("from_role")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("回复评论者角色")])]),t._v(" "),v("tr",[v("td",[t._v("to_uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("被回复的用户id")])]),t._v(" "),v("tr",[v("td",[t._v("to_name")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("被回复的用户名")])]),t._v(" "),v("tr",[v("td",[t._v("to_avatar")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("外键")]),t._v(" "),v("td",[t._v("被回复的用户头像地址")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否封禁或逻辑删除该回复,0正常,1封禁")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("h2",{attrs:{id:"文件模块"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#文件模块"}},[t._v("#")]),t._v(" 文件模块")]),t._v(" "),v("p",[t._v("file表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("uid")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("用户id")])]),t._v(" "),v("tr",[v("td",[t._v("name")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("文件名")])]),t._v(" "),v("tr",[v("td",[t._v("suffix")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("文件后缀格式")])]),t._v(" "),v("tr",[v("td",[t._v("folder_path")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("文件所在文件夹的路径")])]),t._v(" "),v("tr",[v("td",[t._v("file_path")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("文件绝对路径")])]),t._v(" "),v("tr",[v("td",[t._v("type")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("文件所属类型,例如avatar")])]),t._v(" "),v("tr",[v("td",[t._v("delete")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否删除")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])]),t._v(" "),v("h2",{attrs:{id:"判题机模块"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#判题机模块"}},[t._v("#")]),t._v(" 判题机模块")]),t._v(" "),v("p",[t._v("judge_server表")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("列名")]),t._v(" "),v("th",[t._v("实体属性类型")]),t._v(" "),v("th",[t._v("键")]),t._v(" "),v("th",[t._v("备注")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("id")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("主键")]),t._v(" "),v("td",[t._v("auto_increment")])]),t._v(" "),v("tr",[v("td",[t._v("name")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("判题服务名字")])]),t._v(" "),v("tr",[v("td",[t._v("ip")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("判题机ip")])]),t._v(" "),v("tr",[v("td",[t._v("port")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("判题机端口号")])]),t._v(" "),v("tr",[v("td",[t._v("url")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("ip:port")])]),t._v(" "),v("tr",[v("td",[t._v("cpu_core")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("判题机所在服务器cpu核心数")])]),t._v(" "),v("tr",[v("td",[t._v("task_number")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("当前判题数")])]),t._v(" "),v("tr",[v("td",[t._v("max_task_number")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("判题并发最大数")])]),t._v(" "),v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("0可用,1不可用")])]),t._v(" "),v("tr",[v("td",[t._v("version")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("版本控制")])]),t._v(" "),v("tr",[v("td",[t._v("is_remote")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("是否为远程判题vj")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_create")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("创建时间")])]),t._v(" "),v("tr",[v("td",[t._v("gmt_modified")]),t._v(" "),v("td",[t._v("datetime")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("修改时间")])])])])])}),[],!1,null,null,null);_.default=r.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/19.791523ad.js b/docs/docs/.vuepress/dist/assets/js/19.791523ad.js deleted file mode 100644 index ec91160a..00000000 --- a/docs/docs/.vuepress/dist/assets/js/19.791523ad.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{364:function(s,t,a){"use strict";a.r(t);var n=a(41),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"安全沙盒的调用"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#安全沙盒的调用"}},[s._v("#")]),s._v(" 安全沙盒的调用")]),s._v(" "),a("blockquote",[a("p",[s._v("Judger-SandBox使用的是开源项目"),a("a",{attrs:{href:"https://github.com/criyle/go-judge",target:"_blank",rel:"noopener noreferrer"}},[s._v("go-judge"),a("OutboundLink")],1),s._v("Linux版本的可执行文件,更多调用方式请自行浏览"),a("a",{attrs:{href:"https://github.com/criyle/go-judge",target:"_blank",rel:"noopener noreferrer"}},[s._v("go-judge"),a("OutboundLink")],1)])]),s._v(" "),a("p",[s._v("HOJ用的是java来调用此沙盒,请看"),a("a",{attrs:{href:"https://gitee.com/himitzh0730/hoj/tree/master/hoj-springboot/JudgeServer/src/main/java/top/hcode/hoj/judge",target:"_blank",rel:"noopener noreferrer"}},[s._v("JudgeServer-judge"),a("OutboundLink")],1),s._v("下的SandboxRun.java")]),s._v(" "),a("p",[s._v("启动"),a("a",{attrs:{href:"https://gitee.com/himitzh0730/hoj/blob/master/judger/Judger-SandBox",target:"_blank",rel:"noopener noreferrer"}},[s._v("Judger-SandBox"),a("OutboundLink")],1),s._v(",默认监听5050端口")]),s._v(" "),a("h4",{attrs:{id:"验证是否启动"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#验证是否启动"}},[s._v("#")]),s._v(" 验证是否启动")]),s._v(" "),a("p",[s._v("访问:"),a("code",[s._v("http://localhost:5050/version")])]),s._v(" "),a("h4",{attrs:{id:"编译"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#编译"}},[s._v("#")]),s._v(" 编译")]),s._v(" "),a("p",[s._v("1.1 请求的url为")]),s._v(" "),a("blockquote",[a("p",[a("code",[s._v("http://localhost:5050/run")])])]),s._v(" "),a("p",[s._v("1.2 请求方式")]),s._v(" "),a("blockquote",[a("p",[s._v("POST")])]),s._v(" "),a("p",[s._v("1.3 请求参数")]),s._v(" "),a("blockquote",[a("p",[s._v("数据格式为json,内容如下")])]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cmd"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"args"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/usr/bin/g++"')]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a.cc"')]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"-o"')]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"env"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"PATH=/usr/bin:/bin"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"files"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"content"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stdout"')]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"max"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10240")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stderr"')]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"max"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10240")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cpuLimit"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10000000000")]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"memoryLimit"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("104857600")]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"procLimit"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("50")]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"copyIn"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a.cc"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"content"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#include '),a("span",{pre:!0,attrs:{class:"token entity",title:"\\n"}},[s._v("\\n")]),s._v("using namespace std;"),a("span",{pre:!0,attrs:{class:"token entity",title:"\\n"}},[s._v("\\n")]),s._v("int main() {"),a("span",{pre:!0,attrs:{class:"token entity",title:"\\n"}},[s._v("\\n")]),s._v("int a, b;"),a("span",{pre:!0,attrs:{class:"token entity",title:"\\n"}},[s._v("\\n")]),s._v("cin >> a >> b;"),a("span",{pre:!0,attrs:{class:"token entity",title:"\\n"}},[s._v("\\n")]),s._v("cout << a + b << endl;"),a("span",{pre:!0,attrs:{class:"token entity",title:"\\n"}},[s._v("\\n")]),s._v('}"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"copyOut"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stdout"')]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stderr"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"copyOutCached"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a.cc"')]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(", \n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"copyOutDir"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br")])]),a("p",[s._v("1.4 返回的数据为json格式")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"status"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Accepted"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"exitStatus"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"time"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("303225231")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"memory"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("32243712")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"runTime"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("524177700")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"files"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"stderr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"stdout"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"fileIds"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"a"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"WDQL5TNLRRVB2KAP"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"a.cc"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"NOHPGGDTYQUFRSLJ"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("h4",{attrs:{id:"运行与评测"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#运行与评测"}},[s._v("#")]),s._v(" 运行与评测")]),s._v(" "),a("p",[s._v("2.1 请求的url为")]),s._v(" "),a("blockquote",[a("p",[a("code",[s._v("http://localhost:5050/run")])])]),s._v(" "),a("p",[s._v("2.2 请求方式")]),s._v(" "),a("blockquote",[a("p",[s._v("POST")])]),s._v(" "),a("p",[s._v("2.3 请求参数")]),s._v(" "),a("blockquote",[a("p",[s._v("数据格式为json,内容如下")])]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cmd"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"args"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"env"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"PATH=/usr/bin:/bin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LANG=en_US.UTF-8"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LC_ALL=en_US.UTF-8"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LANGUAGE=en_US:en"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"files"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"src"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/judge/test_case/problem_1010/1.in"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stdout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"max"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10240")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stderr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"max"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10240")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cpuLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10000000000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"realCpuLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("30000000000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"stackLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("134217728")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"memoryLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("104811111")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"procLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("50")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"copyIn"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"a"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"fileId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"WDQL5TNLRRVB2KAP"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"copyOut"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stdout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stderr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br")])]),a("p",[s._v("2.4 返回的数据为json格式")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"status"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Accepted"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"exitStatus"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"time"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3171607")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"memory"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("475136")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"runTime"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("110396333")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"files"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"stderr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"stdout"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"23\\n"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h4",{attrs:{id:"特殊判题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#特殊判题"}},[s._v("#")]),s._v(" 特殊判题")]),s._v(" "),a("p",[s._v("3.1 请求的url为")]),s._v(" "),a("blockquote",[a("p",[a("code",[s._v("http://localhost:5050/run")])])]),s._v(" "),a("p",[s._v("3.2 请求方式")]),s._v(" "),a("blockquote",[a("p",[s._v("POST")])]),s._v(" "),a("p",[s._v("3.3 请求参数")]),s._v(" "),a("blockquote",[a("p",[s._v("数据格式为json,内容如下")])]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"pipeMapping"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"in"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"max"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("16777216")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"index"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"fd"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"out"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"index"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"fd"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cmd"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"stackLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("134217728")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cpuLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3000000000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"realCpuLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9000000000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"clockLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("64")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"env"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LANG=en_US.UTF-8"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LANGUAGE=en_US:en"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LC_ALL=en_US.UTF-8"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"PYTHONIOENCODING=utf-8"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"copyOut"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stderr"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"args"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/usr/bin/python3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"main"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"files"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"src"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/judge/test_case/problem_1002/5.in"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"max"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("16777216")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stderr"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"memoryLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("536870912")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"copyIn"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"main"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"fileId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CGTRDEMKW5VAYN6O"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"stackLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("134217728")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cpuLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("8000000000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"clockLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("24000000000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"env"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LANG=en_US.UTF-8"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LANGUAGE=en_US:en"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LC_ALL=en_US.UTF-8"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"copyOut"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stdout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stderr"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"args"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/w/spj"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/w/tmp"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"files"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"max"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("16777216")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stdout"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"max"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("16777216")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stderr"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"memoryLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("536870912")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"copyIn"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"spj"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"src"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/judge/spj/1002/spj"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tmp"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"src"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/judge/test_case/problem_1002/5.out"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"procLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("64")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br"),a("span",{staticClass:"line-number"},[s._v("72")]),a("br"),a("span",{staticClass:"line-number"},[s._v("73")]),a("br"),a("span",{staticClass:"line-number"},[s._v("74")]),a("br"),a("span",{staticClass:"line-number"},[s._v("75")]),a("br"),a("span",{staticClass:"line-number"},[s._v("76")]),a("br"),a("span",{staticClass:"line-number"},[s._v("77")]),a("br"),a("span",{staticClass:"line-number"},[s._v("78")]),a("br"),a("span",{staticClass:"line-number"},[s._v("79")]),a("br"),a("span",{staticClass:"line-number"},[s._v("80")]),a("br"),a("span",{staticClass:"line-number"},[s._v("81")]),a("br"),a("span",{staticClass:"line-number"},[s._v("82")]),a("br"),a("span",{staticClass:"line-number"},[s._v("83")]),a("br"),a("span",{staticClass:"line-number"},[s._v("84")]),a("br"),a("span",{staticClass:"line-number"},[s._v("85")]),a("br"),a("span",{staticClass:"line-number"},[s._v("86")]),a("br"),a("span",{staticClass:"line-number"},[s._v("87")]),a("br"),a("span",{staticClass:"line-number"},[s._v("88")]),a("br"),a("span",{staticClass:"line-number"},[s._v("89")]),a("br"),a("span",{staticClass:"line-number"},[s._v("90")]),a("br"),a("span",{staticClass:"line-number"},[s._v("91")]),a("br")])]),a("p",[s._v("3.4 返回的数据为json格式")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"status"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Accepted"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"exitStatus"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"time"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1545123")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"memory"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("253952")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"runTime"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("4148800")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"files"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"stderr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"fileIds"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"status"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Accepted"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"exitStatus"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"time"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1501463")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"memory"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("253952")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"runTime"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("5897700")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"files"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"stderr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"stdout"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"fileIds"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/20.11610ba1.js b/docs/docs/.vuepress/dist/assets/js/20.11610ba1.js deleted file mode 100644 index f077ef8d..00000000 --- a/docs/docs/.vuepress/dist/assets/js/20.11610ba1.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{366:function(t,s,a){"use strict";a.r(s);var e=a(41),r=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"前言"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#前言"}},[t._v("#")]),t._v(" 前言")]),t._v(" "),a("h2",{attrs:{id:"什么是hoj"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#什么是hoj"}},[t._v("#")]),t._v(" 什么是HOJ?")]),t._v(" "),a("p",[t._v("HOJ,全称 Hcode Online Judge,是基于前后端分离,分布式架构的在线测评系统。")]),t._v(" "),a("p",[a("a",{attrs:{href:"http://openjdk.java.net/",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://img.shields.io/badge/Java-1.8-informational",alt:"Java"}}),a("OutboundLink")],1),t._v(" "),a("a",{attrs:{href:"https://spring.io/projects/spring-boot",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://img.shields.io/badge/Spring%20Boot-2.2.6.RELEASE-success",alt:"Spring Boot"}}),a("OutboundLink")],1),t._v(" "),a("a",{attrs:{href:"https://spring.io/projects/spring-cloud-alibaba",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://img.shields.io/badge/Spring%20Cloud%20Alibaba-2.2.1.RELEASE-success",alt:"SpringCloud Alibaba"}}),a("OutboundLink")],1),t._v(" "),a("a",{attrs:{href:"https://www.mysql.com/",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://img.shields.io/badge/MySQL-8.0.19-blue",alt:"MySQL"}}),a("OutboundLink")],1),t._v(" "),a("a",{attrs:{href:"https://redis.io/",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://img.shields.io/badge/Redis-5.0.9-red",alt:"Redis"}}),a("OutboundLink")],1),t._v(" "),a("a",{attrs:{href:"https://github.com/alibaba/nacos",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://img.shields.io/badge/Nacos-1.4.1-%23267DF7",alt:"Nacos"}}),a("OutboundLink")],1),t._v(" "),a("a",{attrs:{href:"https://cn.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://img.shields.io/badge/Vue-2.6.11-success",alt:"Vue"}}),a("OutboundLink")],1),t._v(" "),a("a",{attrs:{href:"https://qm.qq.com/cgi-bin/qm/qr?k=WWGBZ5gfDiBZOcpNvM8xnZTfUq7BT4Rs&jump_from=webapi",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://img.shields.io/badge/QQ%20Group-598587305-blue",alt:"QQ Group 598587305"}}),a("OutboundLink")],1)]),t._v(" "),a("h2",{attrs:{id:"为什么要开发hoj"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#为什么要开发hoj"}},[t._v("#")]),t._v(" 为什么要开发HOJ?")]),t._v(" "),a("p",[t._v("因为这是Himit_ZH的毕业设计。")]),t._v(" "),a("h2",{attrs:{id:"hoj的特点"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#hoj的特点"}},[t._v("#")]),t._v(" HOJ的特点")]),t._v(" "),a("ul",[a("li",[t._v("适应:支持手机端,响应式布局")]),t._v(" "),a("li",[t._v("设计:界面简约大方")]),t._v(" "),a("li",[t._v("安全:判题使用 cgroup 隔离用户程序,杜绝卡评测;网站权限控制完善")]),t._v(" "),a("li",[t._v("扩展:支持分布式判题")]),t._v(" "),a("li",[t._v("简单:高度集中网站配置")]),t._v(" "),a("li",[t._v("功能:支持ACM、OI题目及比赛")]),t._v(" "),a("li",[t._v("多样:支持自身题目数据评测,也支持其它知名OJ(HDU、Codeforces)题目的爬取与提交")])]),t._v(" "),a("h2",{attrs:{id:"截图"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#截图"}},[t._v("#")]),t._v(" 截图")]),t._v(" "),a("p",[a("strong",[t._v("以下截图页面均支持中英文国际化,点击底部的转换即可全网站转换,包括后台管理,同时浏览器会记住本次选择的语言")])]),t._v(" "),a("blockquote",[a("p",[t._v("首页页面")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210609212151977.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"首页"}})]),t._v(" "),a("blockquote",[a("p",[t._v("首页英文")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210609213403198.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"在这里插入图片描述"}})]),t._v(" "),a("blockquote",[a("p",[t._v("题目列表页")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210609212304243.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"题目列表页"}})]),t._v(" "),a("blockquote",[a("p",[t._v("题目详情页")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210609212436191.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"题目详情页"}})]),t._v(" "),a("blockquote",[a("p",[t._v("比赛列表页")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/2021060921255349.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"比赛列表页"}})]),t._v(" "),a("blockquote",[a("p",[t._v("比赛详情首页")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/2021060921270679.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"比赛详情页"}})]),t._v(" "),a("blockquote",[a("p",[t._v("比赛排行榜")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210609212919197.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"比赛排行榜"}})]),t._v(" "),a("blockquote",[a("p",[t._v("提交列表页")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210609213021223.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"在这里插入图片描述"}})]),t._v(" "),a("blockquote",[a("p",[t._v("排行榜")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://cdn.jsdelivr.net/gh/HimitZH/CDN/images/hoj9.png",alt:"hoj9"}})]),t._v(" "),a("blockquote",[a("p",[t._v("公共讨论区")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210513134216723.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"公共讨论区"}})]),t._v(" "),a("blockquote",[a("p",[t._v("评论组件")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210513142826730.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70#pic_center",alt:"评论组件"}})]),t._v(" "),a("blockquote",[a("p",[t._v("个人信息页")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210609213116562.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"个人信息"}})]),t._v(" "),a("blockquote",[a("p",[t._v("个人设置页")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/202106092132206.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"个人设置页"}})]),t._v(" "),a("blockquote",[a("p",[t._v("管理后台首页")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://cdn.jsdelivr.net/gh/HimitZH/CDN/images/hoj5.png",alt:"hoj5"}})]),t._v(" "),a("blockquote",[a("p",[t._v("部分手机端显示")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210509233756882.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:""}})]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210509233845230.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"评论区"}})])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/22.5a29a611.js b/docs/docs/.vuepress/dist/assets/js/22.5a29a611.js deleted file mode 100644 index 2fb0d8d6..00000000 --- a/docs/docs/.vuepress/dist/assets/js/22.5a29a611.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{368:function(t,l,e){"use strict";e.r(l);var s=e(41),v=Object(s.a)({},(function(){var t=this,l=t.$createElement,e=t._self._c||l;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"使用简介"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#使用简介"}},[t._v("#")]),t._v(" 使用简介")]),t._v(" "),e("ul",[e("li",[t._v("测试数据的介绍")]),t._v(" "),e("li",[t._v("比赛的介绍")]),t._v(" "),e("li",[t._v("导入题目的介绍")]),t._v(" "),e("li",[t._v("导入用户的介绍")]),t._v(" "),e("li",[t._v("讨论管理的介绍")]),t._v(" "),e("li",[t._v("特殊判题的程序例子")]),t._v(" "),e("li",[t._v("其它待续......")])])])}),[],!1,null,null,null);l.default=v.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/23.e74b402f.js b/docs/docs/.vuepress/dist/assets/js/23.e74b402f.js deleted file mode 100644 index 70b3e137..00000000 --- a/docs/docs/.vuepress/dist/assets/js/23.e74b402f.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{369:function(t,e,_){"use strict";_.r(e);var v=_(41),a=Object(v.a)({},(function(){var t=this,e=t.$createElement,_=t._self._c||e;return _("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[_("h1",{attrs:{id:"用户管理"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#用户管理"}},[t._v("#")]),t._v(" 用户管理")]),t._v(" "),_("blockquote",[_("p",[t._v("注意:用户管理只有超级管理员账号可以操作!")])]),t._v(" "),_("p",[_("strong",[t._v("管理员角色说明")])]),t._v(" "),_("table",[_("thead",[_("tr",[_("th",[t._v("权限")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("超级管理员")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("题目管理员")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("普通管理员")])])]),t._v(" "),_("tbody",[_("tr",[_("td",[t._v("系统公告管理")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("系统配置")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("用户管理")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("全部题目增加")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),_("tr",[_("td",[t._v("全部题目修改")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),_("tr",[_("td",[t._v("全部题目删除")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("全部题目权限修改(公开、隐藏、比赛)")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("全部题目评测数据下载")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("导入远程OJ题目")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),_("tr",[_("td",[t._v("全部比赛权限(增加、删除、修改)")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("自己创建的比赛(增加、修改)")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),_("tr",[_("td",[t._v("自己创建的比赛的题目(增加,修改,移除)")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),_("tr",[_("td",[t._v("自己创建的比赛的题目(评测数据下载、删除)")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("自己创建的比赛的题目权限修改(隐藏、比赛)")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),_("tr",[_("td",[t._v("自己创建的比赛的题目权限修改为公开题目")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("讨论管理")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])])])]),t._v(" "),_("p",[_("strong",[t._v("用户角色说明")])]),t._v(" "),_("table",[_("thead",[_("tr",[_("th",[t._v("权限")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("用户(默认)")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("用户(禁止提交)")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("用户(禁止发讨论)")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("用户(禁言)")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("用户(禁止提交&禁止发讨论)")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("用户(禁止提交&禁言)")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("封禁")])])]),t._v(" "),_("tbody",[_("tr",[_("td",[t._v("发布讨论")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("修改讨论")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("删除讨论")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("发表评论")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("删除评论")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("提交代码")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),_("tr",[_("td",[t._v("一切用户权力")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❗")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❗")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❗")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❗")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❗")]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])])])]),t._v(" "),_("ol",[_("li",[t._v("进入后台管理")])]),t._v(" "),_("p",[_("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210614144542595.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"在这里插入图片描述"}})]),t._v(" "),_("ol",{attrs:{start:"2"}},[_("li",[t._v("点击编辑后,可修改用户角色")])]),t._v(" "),_("p",[_("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210614144409579.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"在这里插入图片描述"}})])])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/26.19fbb6f2.js b/docs/docs/.vuepress/dist/assets/js/26.19fbb6f2.js deleted file mode 100644 index 87c930a5..00000000 --- a/docs/docs/.vuepress/dist/assets/js/26.19fbb6f2.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{373:function(s,t,a){"use strict";a.r(t);var n=a(41),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"题目管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#题目管理"}},[s._v("#")]),s._v(" 题目管理")]),s._v(" "),a("h2",{attrs:{id:"一、hoj题目"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#一、hoj题目"}},[s._v("#")]),s._v(" 一、HOJ题目")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210530214011773.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"在这里插入图片描述"}})]),s._v(" "),a("h4",{attrs:{id:"_1-导出题目"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-导出题目"}},[s._v("#")]),s._v(" 1. 导出题目")]),s._v(" "),a("p",[s._v("点击选择需要的题目,便可以批量导出成一个zip压缩包,分别对应一个json格式的题目数据,一个对应名字的文件夹存放评测数据文件,具体的文件结构如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-- problem_1000.json\n+-- problem_1000\n| +-- 1.in\n| +-- 1.out\n| +-- ....\n+-- problem_1001.json\n+-- problem_1001\n| +-- 1.in\n| +-- 1.out\n| +-- ....\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("h4",{attrs:{id:"_2-导入题目"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_2-导入题目"}},[s._v("#")]),s._v(" 2. 导入题目")]),s._v(" "),a("p",[s._v("选择需要导入的题目数据zip压缩包,注意"),a("strong",[s._v("不要多一层文件夹进行压缩")]),s._v(","),a("strong",[s._v("请保证题目json文件的名字与其对应的存放评测数据的文件夹名字一致")]),s._v(",具体文件格式如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-- problem_1000.json\n+-- problem_1000\n| +-- 1.in\n| +-- 1.out\n| +-- ....\n+-- problem_1001.json\n+-- problem_1001\n| +-- 1.in\n| +-- 1.out\n| +-- ....\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("h4",{attrs:{id:"_3-题目的json文件格式"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-题目的json文件格式"}},[s._v("#")]),s._v(" 3. 题目的json文件格式")]),s._v(" "),a("p",[s._v("请严格按照以下格式,才可以正常导入。")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目支持的语言如下,可增加与减少")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"languages"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"C"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"C++"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Java"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Python3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Python2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Golang"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"C#"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"samples"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"output"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.in"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"input"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.out"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('//"score": 10 // 如果是io题目需要给测试点加得分')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"output"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2.in"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"input"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2.out"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('//"score": 10 // 如果是io题目需要给测试点加得分')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"测试题"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"测试"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目标签,一般不超过三个 ")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"problem"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"auth"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 1 公开赛")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"author"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目上传的作者,请使用用户名")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"isRemote"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 均为非VJ题目,不用修改")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"problemId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"HOJ-1010"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目的展示id")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目的描述,支持markdown语法")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"source"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目来源")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"title"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目标题")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 0为ACM题目,1为OI题目")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"timeLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 时间限制 单位是ms")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"memoryLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("256")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 空间限制 单位是mb")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"input"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目的输入描述")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"output"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目的输出描述")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"difficulty"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目难度,1为简单,2为中等,3为困难")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"examples"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目的题面样例,格式为输入输出输入输出")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"ioScore"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// OI题目总得分,与测试点总分一致")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"codeShare"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 该题目是否允许用户共享其提交的代码 ")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"hint"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 题目提示")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"isRemoveEndBlank"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 评测数据的输出是否自动去掉行末空格")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"openCaseResult"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否允许用户看到各个评测点的结果")]),s._v("\n \t"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// "spjLanguage:"C" // 特殊判题的程序代码语言')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// "spjCode":"" // 特殊判题的代码')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"isSpj"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否为特殊判题")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"codeTemplates"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"code"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 模板代码")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"language"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"C"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 模板代码语言")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"code"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 模板代码")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"language"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"C++"')]),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 模板代码语言")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br")])]),a("h2",{attrs:{id:"二、导入qdoj的题目"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#二、导入qdoj的题目"}},[s._v("#")]),s._v(" 二、导入qdoj的题目")]),s._v(" "),a("p",[s._v("请严格按照青岛oj的后台导出的压缩文件来上传。")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210530212411781.png",alt:"在这里插入图片描述"}})]),s._v(" "),a("h2",{attrs:{id:"三、导入其它oj题目"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#三、导入其它oj题目"}},[s._v("#")]),s._v(" 三、导入其它OJ题目")]),s._v(" "),a("p",[s._v("导入HDU、Codeforces题目,只需提供该题目的题号便可一键导入")]),s._v(" "),a("p",[a("strong",[s._v("管理员进入后台,点击题目列表")])]),s._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210523223454472.png#pic_center",alt:"在这里插入图片描述"}})]),s._v(" "),a("p",[s._v("然后添加上方的添加按钮")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210523222914722.png",alt:"在这里插入图片描述"}})]),s._v(" "),a("p",[a("strong",[s._v("在弹出窗中选择OJ名字及题号,便可导入")])]),s._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210523223042100.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"在这里插入图片描述"}})]),s._v(" "),a("p",[a("strong",[s._v("注意:")])]),s._v(" "),a("ul",[a("li",[s._v("HDU的题号一般是 1000以上的数字")]),s._v(" "),a("li",[s._v("Codeforces的题号是1000A、1000B、这种数字加大写英文字母的格式")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/27.15b97f2f.js b/docs/docs/.vuepress/dist/assets/js/27.15b97f2f.js deleted file mode 100644 index a365cda1..00000000 --- a/docs/docs/.vuepress/dist/assets/js/27.15b97f2f.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{372:function(t,s,a){"use strict";a.r(s);var e=a(41),l=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"导入用户"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#导入用户"}},[t._v("#")]),t._v(" 导入用户")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/2021052322072728.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"在这里插入图片描述"}})]),t._v(" "),a("p",[t._v("要求如下:")]),t._v(" "),a("ol",[a("li",[a("p",[t._v("用户数据导入仅支持csv格式的用户数据。")])]),t._v(" "),a("li",[a("p",[t._v("共三列数据: 用户名,密码,邮箱,任一列不能为空,否则该行数据可能导入失败。")])]),t._v(" "),a("li",[a("p",[t._v("第一行不必写(“用户名”,“密码”,“邮箱”)这三个列名。")])]),t._v(" "),a("li",[a("p",[t._v("请导入保存为UTF-8编码的文件,否则中文可能会乱码。")])])])])}),[],!1,null,null,null);s.default=l.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/28.9a189dff.js b/docs/docs/.vuepress/dist/assets/js/28.9a189dff.js deleted file mode 100644 index 8084b271..00000000 --- a/docs/docs/.vuepress/dist/assets/js/28.9a189dff.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{374:function(s,a,t){"use strict";t.r(a);var n=t(41),e=Object(n.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"多个判题机"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#多个判题机"}},[s._v("#")]),s._v(" 多个判题机")]),s._v(" "),t("h2",{attrs:{id:"前言"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前言"}},[s._v("#")]),s._v(" 前言")]),s._v(" "),t("p",[s._v("不同判题机之间是通过rsync进行数据同步的,所以需要配置相应的rsync服务。")]),s._v(" "),t("p",[s._v("同时注意以下两点:")]),s._v(" "),t("ol",[t("li",[s._v("保证rsync-slave服务的密码与主服务rsync-master的数据同步密码一致")]),s._v(" "),t("li",[s._v("rsync-slave服务(判题机服务器)拉取主服务rsync-master的评测数据是每100s一次,所以后台上传评测数据后,需等待大概100s才能正常判题。")])]),s._v(" "),t("h2",{attrs:{id:"单体部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#单体部署"}},[s._v("#")]),s._v(" 单体部署")]),s._v(" "),t("p",[s._v("如果之前是选择了单体部署,也就是主服务器既有backend和judgeserver服务,那么部署更多不同服务器的判题机应该如下修改:")]),s._v(" "),t("ol",[t("li",[t("p",[s._v("在原先运行的服务器上,修改"),t("code",[s._v("hoj-deploy/standAlone")]),s._v("文件夹里面的"),t("code",[s._v("docker-compose.yml")]),s._v(","),t("strong",[s._v("添加以下rsync-master服务")]),s._v(",数据同步密码请自行修改,如下:")]),s._v(" "),t("div",{staticClass:"language-yaml line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-rsync-master")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" registry.cn"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("shenzhen.aliyuncs.com/hcode/hoj_rsync"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.0")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("rsync"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("master\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("volumes")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./hoj/testcase"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/hoj/testcase"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("ro\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_MODE=master\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_USER=hojrsync \n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_PASSWORD=hoj123456 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 请修改数据同步密码")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ports")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0.0.0.0:873:873"')]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("在其它服务器(判题机服务器)中使用docker-compose运行judgeserver服务,具体操作如下:")]),s._v(" "),t("ol",[t("li",[t("p",[s._v("下载文件,进入到指定文件夹")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" clone https://gitee.com/himitzh0730/hoj-deploy.git "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" hoj-deploy/distributed/judgeserver\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("修改配置"),t("code",[s._v(".env")]),s._v("文件,里面的nacos参数,judgeServer,rsync的参数请正确修改!")]),s._v(" "),t("div",{staticClass:"language-properties line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-properties"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# nacos的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 修改为nacos所在服务的ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("NACOS_HOST")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 修改为nacos启动端口号,默认为8848")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("8848")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 修改为nacos的管理员账号")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_USERNAME")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("root")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 修改为nacos的管理员密码")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# judgeserver的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#修改为当前服务器公网ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_IP")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.7")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("8088")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_NAME")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("judger-1")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# -1表示最大并行任务数为cpu核心数*2")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("MAX_TASK_NUM")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("-1")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 当前判题服务器是否开启远程虚拟判题功能")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REMOTE_JUDGE_OPEN")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("true")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# -1表示最大并行任务数为(cpu核心数*2)*2")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REMOTE_JUDGE_MAX_TASK_NUM")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("-1")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# rsync评测数据同步的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 写入主服务器ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("RSYNC_MASTER_ADDR")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("127.0.0.1")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 与主服务器的rsync密码一致")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("RSYNC_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("启动即可")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker-compose up -d\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])])])]),s._v(" "),t("h2",{attrs:{id:"分布式部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#分布式部署"}},[s._v("#")]),s._v(" 分布式部署")]),s._v(" "),t("ol",[t("li",[t("p",[s._v("如果之前已经选择了分布式部署,那么增加判题机,则与原先启动判题机的操作一样即可,在新的服务器上操作如下:")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" clone https://gitee.com/himitzh0730/hoj-deploy.git "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" hoj-deploy/distributed/judgeserver\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" .env\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("修改"),t("code",[s._v(".env")]),s._v("的配置")]),s._v(" "),t("div",{staticClass:"language-properties line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-properties"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# nacos的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 修改为nacos所在服务的ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("NACOS_HOST")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 修改为nacos启动端口号,默认为8848")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("8848")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 修改为nacos的管理员账号")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_USERNAME")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("root")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 修改为nacos的管理员密码")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("NACOS_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# judgeserver的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#修改为当前服务器公网ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_IP")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("172.20.0.7")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("8088")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("JUDGE_SERVER_NAME")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("judger-1")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# -1表示最大并行任务数为cpu核心数*2")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("MAX_TASK_NUM")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("-1")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 当前判题服务器是否开启远程虚拟判题功能")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REMOTE_JUDGE_OPEN")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("true")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# -1表示最大并行任务数为(cpu核心数*2)*2")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("REMOTE_JUDGE_MAX_TASK_NUM")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("-1")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# rsync评测数据同步的配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 写入主服务器ip")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("RSYNC_MASTER_ADDR")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("127.0.0.1")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 与主服务器的rsync密码一致")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("RSYNC_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[s._v("hoj123456")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("修改完保存,启动即可。")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker-compose up -d\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/8.d67efa58.js b/docs/docs/.vuepress/dist/assets/js/8.d67efa58.js deleted file mode 100644 index 127e3fc7..00000000 --- a/docs/docs/.vuepress/dist/assets/js/8.d67efa58.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{354:function(s,a,t){"use strict";t.r(a);var e=t(41),n=Object(e.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"环境配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#环境配置"}},[s._v("#")]),s._v(" 环境配置")]),s._v(" "),t("h2",{attrs:{id:"环境说明"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#环境说明"}},[s._v("#")]),s._v(" 环境说明")]),s._v(" "),t("ul",[t("li",[s._v("后端:需要在Linux系统下部署运行,建议使用ubuntu18.04,其它版本的Linux系统也可,同时需要"),t("strong",[s._v("Docker")]),s._v("辅助部署")]),s._v(" "),t("li",[s._v("前端:Linux系统下,需要nginx进行反向代理")]),s._v(" "),t("li",[s._v("判题服务:由于判题沙盒有多操作系统版本,Linux系统或Windows都可,强烈建议Linux系统(Ubuntu)")]),s._v(" "),t("li",[s._v("数据同步:需要运行判题服务和后端服务的服务器有rsync即可")])]),s._v(" "),t("h2",{attrs:{id:"linux环境搭建"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#linux环境搭建"}},[s._v("#")]),s._v(" Linux环境搭建")]),s._v(" "),t("blockquote",[t("p",[s._v("请先准备一台 CPU: 1核 内存: 2G 硬盘: 30G的云服务器,推荐Ubuntu16.04以上的操作系统,")]),s._v(" "),t("p",[s._v("HOJ使用的Ubuntu18.04版本,单机部署建议2G以上内存")])]),s._v(" "),t("h3",{attrs:{id:"安装docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装docker"}},[s._v("#")]),s._v(" 安装docker")]),s._v(" "),t("ol",[t("li",[t("p",[s._v("安装需要的包")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt-get")]),s._v(" update\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("安装依赖包")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt-get")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n apt-transport-https "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n ca-certificates "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n gnupg-agent "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n software-properties-common\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("添加 Docker 的官方 GPG 密钥")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -fsSL https://download.docker.com/linux/ubuntu/gpg "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" apt-key "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" -\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("设置远程仓库")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" add-apt-repository "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"deb [arch=amd64] https://download.docker.com/linux/ubuntu \\\n '),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),s._v("lsb_release -cs"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v(' \\\n stable"')]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("安装 Docker-CE")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt-get")]),s._v(" update\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt-get")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" docker-ce docker-ce-cli containerd.io\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("验证是否成功")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" docker run hello-world\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])]),s._v(" "),t("h3",{attrs:{id:"安装docker-compose"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装docker-compose"}},[s._v("#")]),s._v(" 安装docker-compose")]),s._v(" "),t("ol",[t("li",[t("p",[s._v("下载")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("`")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("uname")]),s._v(" -s"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("`")])]),s._v("-"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("`")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("uname")]),s._v(" -m"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("`")])]),s._v(" -o /usr/local/bin/docker-compose\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("li",[t("p",[s._v("授权")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("chmod")]),s._v(" +x /usr/local/bin/docker-compose\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])]),s._v(" "),t("h2",{attrs:{id:"windows-环境"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#windows-环境"}},[s._v("#")]),s._v(" Windows 环境")]),s._v(" "),t("p",[s._v("Windows 下的安装仅供体验,勿在生产环境使用。如有必要,请使用虚拟机安装 Linux 并将 OJ 安装在其中。")]),s._v(" "),t("p",[s._v("以下教程仅适用于 Win10 x64 下的 "),t("code",[s._v("PowerShell")])]),s._v(" "),t("ol",[t("li",[s._v("安装 Windows 的 Docker 工具")]),s._v(" "),t("li",[s._v("右击右下角 Docker 图标,选择 Settings 进行设置")]),s._v(" "),t("li",[s._v("选择 "),t("code",[s._v("Shared Drives")]),s._v(" 菜单,之后勾选你想安装 OJ 的盘符位置(例如勾选D盘),点击 "),t("code",[s._v("Apply")])]),s._v(" "),t("li",[s._v("输入 Windows 的账号密码进行文件共享")]),s._v(" "),t("li",[s._v("安装 "),t("code",[s._v("Python")]),s._v("、"),t("code",[s._v("pip")]),s._v("、"),t("code",[s._v("git")]),s._v("、"),t("code",[s._v("docker-compose")]),s._v(",安装方法自行搜索。")])]),s._v(" "),t("h2",{attrs:{id:"单个部署顺序"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#单个部署顺序"}},[s._v("#")]),s._v(" 单个部署顺序")]),s._v(" "),t("p",[s._v("单个部署的顺序是:redis,mysql,rsync,frontend >> nacos >> backend,judgeserver")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/9.9cedc787.js b/docs/docs/.vuepress/dist/assets/js/9.9cedc787.js deleted file mode 100644 index 901f37a8..00000000 --- a/docs/docs/.vuepress/dist/assets/js/9.9cedc787.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{358:function(s,a,t){"use strict";t.r(a);var n=t(41),e=Object(n.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"后端部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#后端部署"}},[s._v("#")]),s._v(" 后端部署")]),s._v(" "),t("h2",{attrs:{id:"前言"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前言"}},[s._v("#")]),s._v(" 前言")]),s._v(" "),t("p",[s._v("下载本项目,进入到当前文件夹执行打包命令")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" clone https://gitee.com/himitzh0730/hoj-deploy.git "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" hoj-deploy/src/backend\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[s._v("当前文件夹为打包"),t("code",[s._v("hoj-backend")]),s._v("镜像的相关文件,将这些文件复制到同一个文件夹内,"),t("strong",[s._v("然后打包"),t("a",{attrs:{href:"https://gitee.com/himitzh0730/hoj/tree/master/hoj-springboot/DataBackup",target:"_blank",rel:"noopener noreferrer"}},[s._v("DataBackup"),t("OutboundLink")],1),s._v("(SpringBoot项目)成jar包也放到当前文件夹")]),s._v(",之后执行以下命令进行打包成镜像")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker build -t hoj-backend "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[t("strong",[s._v("项目依赖于hoj-redis,hoj-nacos,hoj-mysql等镜像成功启动,以及根据前面三个镜像的配置修改环境参数才可正常启动")])]),s._v(" "),t("p",[s._v("docker-compose 启动")]),s._v(" "),t("div",{staticClass:"language-yaml line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("version")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3"')]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("services")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-backend")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_backend")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("backend\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("backend\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("restart")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" always\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("depends_on")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("redis\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("mysql\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("nacos\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("volumes")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./hoj/file"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/hoj/file\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./hoj/testcase"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/hoj/testcase\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./hoj/log/backend"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/hoj/log/backend\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" TZ=Asia/Shanghai\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" BACKEND_SERVER_PORT=6688 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# backend服务端口号")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" NACOS_URL=172.20.0.4"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("8848")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# hoj-nacos的url")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" NACOS_USERNAME=root "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# nacos的管理员账号")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" NACOS_PASSWORD=hoj123456 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# nacos的管理员密码")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" JWT_TOKEN_SECRET=default "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 加密秘钥 默认则生成32位随机密钥")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" JWT_TOKEN_EXPIRE=86400 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# token过期时间默认为24小时 86400s")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" JWT_TOKEN_FRESH_EXPIRE=43200 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# token默认12小时可自动刷新")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" JUDGE_TOKEN=default "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 调用判题服务器的token 默认则生成32位随机密钥")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_HOST=172.20.0.3 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# hoj-mysql的host")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_PUBLIC_HOST=172.20.0.3 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 如果判题服务是分布式,请提供当前mysql所在服务器的公网ip")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_PORT=3306 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# hoj-mysql端口号")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_DATABASE_NAME=hoj "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 改动需要修改hoj-mysql镜像,默认为hoj")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_USERNAME=root \n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_ROOT_PASSWORD=hoj123456 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# hoj-mysql的root账号密码")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" EMAIL_SERVER_HOST=smtp.qq.com "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 请使用邮件服务的域名或ip")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" EMAIL_SERVER_PORT=465 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 请使用邮件服务的端口号")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" EMAIL_USERNMAE="),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("your_email_username "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 请使用对应邮箱账号")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" EMAIL_PASSWORD="),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("your_email_password "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 请使用对应邮箱密码")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" REDIS_HOST=172.20.0.2 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# hoj-redis的host")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" REDIS_PORT=6379 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# hoj-redis的port")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" REDIS_PASSWORD=hoj123456 "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#hoj-redis的密码")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" OPEN_REMOTE_JUDGE=true "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 是否开启对hdu和codeforces的虚拟判题")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 开启虚拟判题请提供对应oj的账号密码 格式为 ")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# username1,username2,...")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# password1,password2,...")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" HDU_ACCOUNT_USERNAME_LIST=\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" HDU_ACCOUNT_PASSWORD_LIST=\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" CF_ACCOUNT_USERNAME_LIST=\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" CF_ACCOUNT_USERNAME_LIST=\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ports")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6688:6688"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("networks")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-network")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ipv4_address")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 172.20.0.5\n \n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-redis")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" redis"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("5.0.9"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("alpine\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("redis\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("restart")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" always\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("volumes")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./hoj/data/redis/data"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/data\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("networks")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-network")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ipv4_address")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 172.20.0.2\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ports")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6379:6379"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("command")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" redis"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("server "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v('requirepass "hoj123456" '),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("appendonly yes\n \n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-mysql")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" registry.cn"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("shenzhen.aliyuncs.com/hcode/hoj_database\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("mysql\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("restart")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" always\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("volumes")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./hoj/data/mysql/data"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/var/lib/mysql\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_ROOT_PASSWORD=hoj123456\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" TZ=Asia/Shanghai\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" NACOS_USERNAME=root\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" NACOS_PASSWORD=hoj123456\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ports")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3306:3306"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("networks")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-network")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ipv4_address")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 172.20.0.3\n \n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-nacos")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" nacos/nacos"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("server"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("1.4.2\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("nacos\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("restart")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" always\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("depends_on")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" \n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" hoj"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("mysql\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" JVM_XMX=384m\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" JVM_XMS=384m\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" JVM_XMN=192m\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MODE=standalone\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" SPRING_DATASOURCE_PLATFORM=mysql\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_SERVICE_HOST=172.20.0.3\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_SERVICE_PORT=3306\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_SERVICE_USER=root\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_SERVICE_PASSWORD=Hzh"),t("span",{pre:!0,attrs:{class:"token important"}},[s._v("&hy2020")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" MYSQL_SERVICE_DB_NAME=nacos\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" NACOS_AUTH_ENABLE=true "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 开启鉴权")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("networks")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-network")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("driver")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" bridge\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ipam")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("config")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("subnet")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 172.20.0.0/16\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br"),t("span",{staticClass:"line-number"},[s._v("39")]),t("br"),t("span",{staticClass:"line-number"},[s._v("40")]),t("br"),t("span",{staticClass:"line-number"},[s._v("41")]),t("br"),t("span",{staticClass:"line-number"},[s._v("42")]),t("br"),t("span",{staticClass:"line-number"},[s._v("43")]),t("br"),t("span",{staticClass:"line-number"},[s._v("44")]),t("br"),t("span",{staticClass:"line-number"},[s._v("45")]),t("br"),t("span",{staticClass:"line-number"},[s._v("46")]),t("br"),t("span",{staticClass:"line-number"},[s._v("47")]),t("br"),t("span",{staticClass:"line-number"},[s._v("48")]),t("br"),t("span",{staticClass:"line-number"},[s._v("49")]),t("br"),t("span",{staticClass:"line-number"},[s._v("50")]),t("br"),t("span",{staticClass:"line-number"},[s._v("51")]),t("br"),t("span",{staticClass:"line-number"},[s._v("52")]),t("br"),t("span",{staticClass:"line-number"},[s._v("53")]),t("br"),t("span",{staticClass:"line-number"},[s._v("54")]),t("br"),t("span",{staticClass:"line-number"},[s._v("55")]),t("br"),t("span",{staticClass:"line-number"},[s._v("56")]),t("br"),t("span",{staticClass:"line-number"},[s._v("57")]),t("br"),t("span",{staticClass:"line-number"},[s._v("58")]),t("br"),t("span",{staticClass:"line-number"},[s._v("59")]),t("br"),t("span",{staticClass:"line-number"},[s._v("60")]),t("br"),t("span",{staticClass:"line-number"},[s._v("61")]),t("br"),t("span",{staticClass:"line-number"},[s._v("62")]),t("br"),t("span",{staticClass:"line-number"},[s._v("63")]),t("br"),t("span",{staticClass:"line-number"},[s._v("64")]),t("br"),t("span",{staticClass:"line-number"},[s._v("65")]),t("br"),t("span",{staticClass:"line-number"},[s._v("66")]),t("br"),t("span",{staticClass:"line-number"},[s._v("67")]),t("br"),t("span",{staticClass:"line-number"},[s._v("68")]),t("br"),t("span",{staticClass:"line-number"},[s._v("69")]),t("br"),t("span",{staticClass:"line-number"},[s._v("70")]),t("br"),t("span",{staticClass:"line-number"},[s._v("71")]),t("br"),t("span",{staticClass:"line-number"},[s._v("72")]),t("br"),t("span",{staticClass:"line-number"},[s._v("73")]),t("br"),t("span",{staticClass:"line-number"},[s._v("74")]),t("br"),t("span",{staticClass:"line-number"},[s._v("75")]),t("br"),t("span",{staticClass:"line-number"},[s._v("76")]),t("br"),t("span",{staticClass:"line-number"},[s._v("77")]),t("br"),t("span",{staticClass:"line-number"},[s._v("78")]),t("br"),t("span",{staticClass:"line-number"},[s._v("79")]),t("br"),t("span",{staticClass:"line-number"},[s._v("80")]),t("br"),t("span",{staticClass:"line-number"},[s._v("81")]),t("br"),t("span",{staticClass:"line-number"},[s._v("82")]),t("br"),t("span",{staticClass:"line-number"},[s._v("83")]),t("br"),t("span",{staticClass:"line-number"},[s._v("84")]),t("br"),t("span",{staticClass:"line-number"},[s._v("85")]),t("br"),t("span",{staticClass:"line-number"},[s._v("86")]),t("br"),t("span",{staticClass:"line-number"},[s._v("87")]),t("br"),t("span",{staticClass:"line-number"},[s._v("88")]),t("br"),t("span",{staticClass:"line-number"},[s._v("89")]),t("br"),t("span",{staticClass:"line-number"},[s._v("90")]),t("br"),t("span",{staticClass:"line-number"},[s._v("91")]),t("br"),t("span",{staticClass:"line-number"},[s._v("92")]),t("br"),t("span",{staticClass:"line-number"},[s._v("93")]),t("br"),t("span",{staticClass:"line-number"},[s._v("94")]),t("br"),t("span",{staticClass:"line-number"},[s._v("95")]),t("br"),t("span",{staticClass:"line-number"},[s._v("96")]),t("br"),t("span",{staticClass:"line-number"},[s._v("97")]),t("br"),t("span",{staticClass:"line-number"},[s._v("98")]),t("br"),t("span",{staticClass:"line-number"},[s._v("99")]),t("br"),t("span",{staticClass:"line-number"},[s._v("100")]),t("br"),t("span",{staticClass:"line-number"},[s._v("101")]),t("br"),t("span",{staticClass:"line-number"},[s._v("102")]),t("br"),t("span",{staticClass:"line-number"},[s._v("103")]),t("br"),t("span",{staticClass:"line-number"},[s._v("104")]),t("br"),t("span",{staticClass:"line-number"},[s._v("105")]),t("br"),t("span",{staticClass:"line-number"},[s._v("106")]),t("br"),t("span",{staticClass:"line-number"},[s._v("107")]),t("br")])]),t("h2",{attrs:{id:"文件介绍"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#文件介绍"}},[s._v("#")]),s._v(" 文件介绍")]),s._v(" "),t("h3",{attrs:{id:"_1-check-nacos-sh"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-check-nacos-sh"}},[s._v("#")]),s._v(" 1. check_nacos.sh")]),s._v(" "),t("p",[s._v("用于检测nacos是否启动完成,然后再执行启动backend")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token shebang important"}},[s._v("#!/bin/bash")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("do")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 访问nacos注册中心,获取http状态码")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("CODE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("`")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -I -m "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),s._v(" -o /dev/null -s -w %"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("http_code"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" http://$NACOS_URL/nacos/index.html"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("`")])]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 判断状态码为200")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$CODE")]),s._v(" -eq "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("then")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 输出绿色文字,并跳出循环")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" -e "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),t("span",{pre:!0,attrs:{class:"token entity",title:"\\033"}},[s._v("\\033")]),s._v("[42;34m nacos is ok "),t("span",{pre:!0,attrs:{class:"token entity",title:"\\033"}},[s._v("\\033")]),s._v('[0m"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("break")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 暂停1秒")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sleep")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("fi")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("done")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# while结束时,执行容器中的run.sh。")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" /run.sh\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br")])]),t("h3",{attrs:{id:"_2-run-sh"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-run-sh"}},[s._v("#")]),s._v(" 2. run.sh")]),s._v(" "),t("p",[s._v("启动backend的springboot jar包")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token shebang important"}},[s._v("#!/bin/sh")]),s._v("\n\njava -Djava.security.egd"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("file:/dev/./urandom -jar /app.jar\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("h3",{attrs:{id:"_3-dockerfile"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_3-dockerfile"}},[s._v("#")]),s._v(" 3. Dockerfile")]),s._v(" "),t("div",{staticClass:"language-dockerfile line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-dockerfile"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("FROM")]),s._v(" java"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("8\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" *.jar /app.jar\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" check_nacos.sh /check_nacos.sh\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" run.sh /run.sh\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" TZ=Asia/Shanghai\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ENV")]),s._v(" BACKEND_SERVER_PORT=6688\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("VOLUME")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/hoj/file"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/hoj/testcase"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" ln "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")]),s._v(" /etc/timezone\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("CMD")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"bash"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/check_nacos.sh"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("EXPOSE")]),s._v(" $BACKEND_SERVER_PORT\n\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br")])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/app.63ca3828.js b/docs/docs/.vuepress/dist/assets/js/app.63ca3828.js deleted file mode 100644 index 189309df..00000000 --- a/docs/docs/.vuepress/dist/assets/js/app.63ca3828.js +++ /dev/null @@ -1,8 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,u=e[0],c=e[1],s=e[2],l=0,p=[];l0?o(r(t),9007199254740991):0}},function(t,e,n){var r=n(2),o=n(9),i=n(5),a=n(65),u=n(71),c=n(24),s=c.get,f=c.enforce,l=String(String).split("String");(t.exports=function(t,e,n,u){var c,s=!!u&&!!u.unsafe,p=!!u&&!!u.enumerable,d=!!u&&!!u.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||o(n,"name",e),(c=f(n)).source||(c.source=l.join("string"==typeof e?e:""))),t!==r?(s?!d&&t[e]&&(p=!0):delete t[e],p?t[e]=n:o(t,e,n)):p?t[e]=n:a(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&s(this).source||u(this)}))},function(t,e){t.exports=!1},function(t,e,n){var r=n(99),o=n(2),i=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t])||i(o[t]):r[t]&&r[t][e]||o[t]&&o[t][e]}},function(t,e,n){var r=n(211),o=n(214);t.exports=function(t,e){var n=o(t,e);return r(n)?n:void 0}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var r=n(7),o=n(72),i=n(28),a=n(11),u=n(44),c=n(5),s=n(98),f=Object.getOwnPropertyDescriptor;e.f=r?f:function(t,e){if(t=a(t),e=u(e,!0),s)try{return f(t,e)}catch(t){}if(c(t,e))return i(!o.f.call(t,e),t[e])}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){"use strict";var r=n(0),o=n(25).filter;r({target:"Array",proto:!0,forced:!n(51)("filter")},{filter:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var r,o,i,a=n(165),u=n(2),c=n(4),s=n(9),f=n(5),l=n(64),p=n(49),d=n(31),h=u.WeakMap;if(a){var v=l.state||(l.state=new h),y=v.get,m=v.has,g=v.set;r=function(t,e){return e.facade=t,g.call(v,t,e),e},o=function(t){return y.call(v,t)||{}},i=function(t){return m.call(v,t)}}else{var b=p("state");d[b]=!0,r=function(t,e){return e.facade=t,s(t,b,e),e},o=function(t){return f(t,b)?t[b]:{}},i=function(t){return f(t,b)}}t.exports={set:r,get:o,has:i,enforce:function(t){return i(t)?o(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!c(e)||(n=o(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}}},function(t,e,n){var r=n(75),o=n(27),i=n(12),a=n(14),u=n(118),c=[].push,s=function(t){var e=1==t,n=2==t,s=3==t,f=4==t,l=6==t,p=7==t,d=5==t||l;return function(h,v,y,m){for(var g,b,_=i(h),x=o(_),w=r(v,y,3),O=a(x.length),j=0,S=m||u,k=e?S(h,O):n||p?S(h,0):void 0;O>j;j++)if((d||j in x)&&(b=w(g=x[j],j,_),t))if(e)k[j]=b;else if(b)switch(t){case 3:return!0;case 5:return g;case 6:return j;case 2:c.call(k,g)}else switch(t){case 4:return!1;case 7:c.call(k,g)}return l?-1:s||f?f:k}};t.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6),filterOut:s(7)}},function(t,e,n){var r=n(38),o=n(196),i=n(197),a=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":a&&a in Object(t)?o(t):i(t)}},function(t,e,n){var r=n(3),o=n(22),i="".split;t.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?i.call(t,""):Object(t)}:Object},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var r=n(22),o=n(2);t.exports="process"==r(o.process)},function(t,e,n){var r,o,i=n(2),a=n(68),u=i.process,c=u&&u.versions,s=c&&c.v8;s?o=(r=s.split("."))[0]+r[1]:a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=r[1]),t.exports=o&&+o},function(t,e){t.exports={}},function(t,e){t.exports={}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},function(t,e,n){var r=n(76),o=n(15),i=n(183);r||o(Object.prototype,"toString",i,{unsafe:!0})},function(t,e,n){"use strict";var r=n(116).charAt,o=n(24),i=n(104),a=o.set,u=o.getterFor("String Iterator");i(String,"String",(function(t){a(this,{type:"String Iterator",string:String(t),index:0})}),(function(){var t,e=u(this),n=e.string,o=e.index;return o>=n.length?{value:void 0,done:!0}:(t=r(n,o),e.index+=t.length,{value:t,done:!1})}))},function(t,e,n){var r=n(2),o=n(117),i=n(97),a=n(9),u=n(1),c=u("iterator"),s=u("toStringTag"),f=i.values;for(var l in o){var p=r[l],d=p&&p.prototype;if(d){if(d[c]!==f)try{a(d,c,f)}catch(t){d[c]=f}if(d[s]||a(d,s,l),o[l])for(var h in i)if(d[h]!==i[h])try{a(d,h,i[h])}catch(t){d[h]=i[h]}}}},function(t,e,n){"use strict";var r=n(3);t.exports=function(t,e){var n=[][t];return!!n&&r((function(){n.call(null,e||function(){throw 1},1)}))}},function(t,e,n){var r=n(13).Symbol;t.exports=r},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(40);var o=n(57);function i(t){return function(t){if(Array.isArray(t))return Object(r.a)(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||Object(o.a)(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},function(t,e,n){"use strict";function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n"+t+"<\/script>"},h=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;h=r?function(t){t.write(d("")),t.close();var e=t.parentWindow.Object;return t=null,e}(r):((e=s("iframe")).style.display="none",c.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(d("document.F=Object")),t.close(),t.F);for(var n=a.length;n--;)delete h.prototype[a[n]];return h()};u[l]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(p.prototype=o(t),n=new p,p.prototype=null,n[l]=t):n=h(),void 0===e?n:i(n,e)}},function(t,e,n){var r=n(101),o=n(70);t.exports=Object.keys||function(t){return r(t,o)}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e,n){var r=n(63),o=n(45),i=r("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},function(t,e,n){var r=n(8).f,o=n(5),i=n(1)("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},function(t,e,n){var r=n(3),o=n(1),i=n(30),a=o("species");t.exports=function(t){return i>=51||!r((function(){var e=[];return(e.constructor={})[a]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},function(t,e,n){var r=n(201),o=n(202),i=n(203),a=n(204),u=n(205);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e
'};function o(t,e,n){return tn?n:t}function i(t){return 100*(-1+t)}n.configure=function(t){var e,n;for(e in t)void 0!==(n=t[e])&&t.hasOwnProperty(e)&&(r[e]=n);return this},n.status=null,n.set=function(t){var e=n.isStarted();t=o(t,r.minimum,1),n.status=1===t?null:t;var c=n.render(!e),s=c.querySelector(r.barSelector),f=r.speed,l=r.easing;return c.offsetWidth,a((function(e){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),u(s,function(t,e,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(t)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(t)+"%,0)"}:{"margin-left":i(t)+"%"}).transition="all "+e+"ms "+n,o}(t,f,l)),1===t?(u(c,{transition:"none",opacity:1}),c.offsetWidth,setTimeout((function(){u(c,{transition:"all "+f+"ms linear",opacity:0}),setTimeout((function(){n.remove(),e()}),f)}),f)):setTimeout(e,f)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var t=function(){setTimeout((function(){n.status&&(n.trickle(),t())}),r.trickleSpeed)};return r.trickle&&t(),this},n.done=function(t){return t||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(t){var e=n.status;return e?("number"!=typeof t&&(t=(1-e)*o(Math.random()*e,.1,.95)),e=o(e+t,0,.994),n.set(e)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},t=0,e=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===e&&n.start(),t++,e++,r.always((function(){0==--e?(t=0,n.done()):n.set((t-e)/t)})),this):this},n.render=function(t){if(n.isRendered())return document.getElementById("nprogress");s(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=r.template;var o,a=e.querySelector(r.barSelector),c=t?"-100":i(n.status||0),f=document.querySelector(r.parent);return u(a,{transition:"all 0 linear",transform:"translate3d("+c+"%,0,0)"}),r.showSpinner||(o=e.querySelector(r.spinnerSelector))&&p(o),f!=document.body&&s(f,"nprogress-custom-parent"),f.appendChild(e),e},n.remove=function(){f(document.documentElement,"nprogress-busy"),f(document.querySelector(r.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&p(t)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var a=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),u=function(){var t=["Webkit","O","Moz","ms"],e={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()})),e[n]||(e[n]=function(e){var n=document.body.style;if(e in n)return e;for(var r,o=t.length,i=e.charAt(0).toUpperCase()+e.slice(1);o--;)if((r=t[o]+i)in n)return r;return e}(n))}function r(t,e,r){e=n(e),t.style[e]=r}return function(t,e){var n,o,i=arguments;if(2==i.length)for(n in e)void 0!==(o=e[n])&&e.hasOwnProperty(n)&&r(t,n,o);else r(t,i[1],i[2])}}();function c(t,e){return("string"==typeof t?t:l(t)).indexOf(" "+e+" ")>=0}function s(t,e){var n=l(t),r=n+e;c(n,e)||(t.className=r.substring(1))}function f(t,e){var n,r=l(t);c(t,e)&&(n=r.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function l(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function p(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return n})?r.call(e,n,e,t):r)||(t.exports=o)},function(t,e,n){"use strict";var r=n(0),o=n(25).map;r({target:"Array",proto:!0,forced:!n(51)("map")},{map:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r=n(150),o=n(6),i=n(14),a=n(48),u=n(19),c=n(152),s=n(192),f=n(153),l=Math.max,p=Math.min;r("replace",2,(function(t,e,n,r){var d=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,h=r.REPLACE_KEEPS_$0,v=d?"$":"$0";return[function(n,r){var o=u(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,o,r):e.call(String(o),n,r)},function(t,r){if(!d&&h||"string"==typeof r&&-1===r.indexOf(v)){var u=n(e,t,this,r);if(u.done)return u.value}var y=o(t),m=String(this),g="function"==typeof r;g||(r=String(r));var b=y.global;if(b){var _=y.unicode;y.lastIndex=0}for(var x=[];;){var w=f(y,m);if(null===w)break;if(x.push(w),!b)break;""===String(w[0])&&(y.lastIndex=c(m,i(y.lastIndex),_))}for(var O,j="",S=0,k=0;k=S&&(j+=m.slice(S,A)+L,S=A+E.length)}return j+m.slice(S)}]}))},function(t,e,n){var r=n(101),o=n(70).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,e,n){"use strict";var r,o,i=n(151),a=n(157),u=RegExp.prototype.exec,c=String.prototype.replace,s=u,f=(r=/a/,o=/b*/g,u.call(r,"a"),u.call(o,"a"),0!==r.lastIndex||0!==o.lastIndex),l=a.UNSUPPORTED_Y||a.BROKEN_CARET,p=void 0!==/()??/.exec("")[1];(f||p||l)&&(s=function(t){var e,n,r,o,a=this,s=l&&a.sticky,d=i.call(a),h=a.source,v=0,y=t;return s&&(-1===(d=d.replace("y","")).indexOf("g")&&(d+="g"),y=String(t).slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&"\n"!==t[a.lastIndex-1])&&(h="(?: "+h+")",y=" "+y,v++),n=new RegExp("^(?:"+h+")",d)),p&&(n=new RegExp("^"+h+"$(?!\\s)",d)),f&&(e=a.lastIndex),r=u.call(s?n:a,y),s?r?(r.input=r.input.slice(v),r[0]=r[0].slice(v),r.index=a.lastIndex,a.lastIndex+=r[0].length):a.lastIndex=0:f&&r&&(a.lastIndex=a.global?r.index+r[0].length:e),p&&r&&r.length>1&&c.call(r[0],n,(function(){for(o=1;o37&&o<41)}))},function(t,e,n){var r=n(17);t.exports=r("navigator","userAgent")||""},function(t,e,n){var r=n(11),o=n(14),i=n(102),a=function(t){return function(e,n,a){var u,c=r(e),s=o(c.length),f=i(a,s);if(t&&n!=n){for(;s>f;)if((u=c[f++])!=u)return!0}else for(;s>f;f++)if((t||f in c)&&c[f]===n)return t||f||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e,n){var r=n(64),o=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(t){return o.call(t)}),t.exports=r.inspectSource},function(t,e,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);e.f=i?function(t){var e=o(this,t);return!!e&&e.enumerable}:r},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var r=n(5),o=n(12),i=n(49),a=n(108),u=i("IE_PROTO"),c=Object.prototype;t.exports=a?Object.getPrototypeOf:function(t){return t=o(t),r(t,u)?t[u]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?c:null}},function(t,e,n){var r=n(33);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},function(t,e,n){var r={};r[n(1)("toStringTag")]="z",t.exports="[object z]"===String(r)},function(t,e,n){"use strict";var r=n(0),o=n(4),i=n(43),a=n(102),u=n(14),c=n(11),s=n(78),f=n(1),l=n(51)("slice"),p=f("species"),d=[].slice,h=Math.max;r({target:"Array",proto:!0,forced:!l},{slice:function(t,e){var n,r,f,l=c(this),v=u(l.length),y=a(t,v),m=a(void 0===e?v:e,v);if(i(l)&&("function"!=typeof(n=l.constructor)||n!==Array&&!i(n.prototype)?o(n)&&null===(n=n[p])&&(n=void 0):n=void 0,n===Array||void 0===n))return d.call(l,y,m);for(r=new(void 0===n?Array:n)(h(m-y,0)),f=0;y-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var r=n(10),o=n(86),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(a.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(26),o=n(21);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e){t.exports=function(t){return t}},function(t,e,n){"use strict";var r=n(0),o=n(25).some;r({target:"Array",proto:!0,forced:!n(37)("some")},{some:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var r=n(0),o=n(12),i=n(47);r({target:"Object",stat:!0,forced:n(3)((function(){i(1)}))},{keys:function(t){return i(o(t))}})},function(t,e,n){"use strict";var r=n(0),o=n(119);r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},function(t,e,n){var r=n(2),o=n(117),i=n(119),a=n(9);for(var u in o){var c=r[u],s=c&&c.prototype;if(s&&s.forEach!==i)try{a(s,"forEach",i)}catch(t){s.forEach=i}}},function(t,e,n){var r=n(1),o=n(46),i=n(8),a=r("unscopables"),u=Array.prototype;null==u[a]&&i.f(u,a,{configurable:!0,value:o(null)}),t.exports=function(t){u[a][t]=!0}},function(t,e,n){var r=n(3),o=/#|\.prototype\./,i=function(t,e){var n=u[a(t)];return n==s||n!=c&&("function"==typeof e?r(e):!!e)},a=i.normalize=function(t){return String(t).replace(o,".").toLowerCase()},u=i.data={},c=i.NATIVE="N",s=i.POLYFILL="P";t.exports=i},function(t,e,n){var r=n(6),o=n(33),i=n(1)("species");t.exports=function(t,e){var n,a=r(t).constructor;return void 0===a||null==(n=r(a)[i])?e:o(n)}},function(t,e,n){var r=n(149);t.exports=function(t){if(r(t))throw TypeError("The method doesn't accept regular expressions");return t}},function(t,e,n){var r=n(1)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,"/./"[t](e)}catch(t){}}return!1}},function(t,e,n){"use strict";var r=n(11),o=n(92),i=n(32),a=n(24),u=n(104),c=a.set,s=a.getterFor("Array Iterator");t.exports=u(Array,"Array",(function(t,e){c(this,{type:"Array Iterator",target:r(t),index:0,kind:e})}),(function(){var t=s(this),e=t.target,n=t.kind,r=t.index++;return!e||r>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:e[r],done:!1}:{value:[r,e[r]],done:!1}}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},function(t,e,n){var r=n(7),o=n(3),i=n(66);t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){var r=n(2);t.exports=r},function(t,e,n){var r=n(67);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){var r=n(5),o=n(11),i=n(69).indexOf,a=n(31);t.exports=function(t,e){var n,u=o(t),c=0,s=[];for(n in u)!r(a,n)&&r(u,n)&&s.push(n);for(;e.length>c;)r(u,n=e[c++])&&(~i(s,n)||s.push(n));return s}},function(t,e,n){var r=n(48),o=Math.max,i=Math.min;t.exports=function(t,e){var n=r(t);return n<0?o(n+e,0):i(n,e)}},function(t,e,n){var r=n(17);t.exports=r("document","documentElement")},function(t,e,n){"use strict";var r=n(0),o=n(166),i=n(74),a=n(155),u=n(50),c=n(9),s=n(15),f=n(1),l=n(16),p=n(32),d=n(107),h=d.IteratorPrototype,v=d.BUGGY_SAFARI_ITERATORS,y=f("iterator"),m=function(){return this};t.exports=function(t,e,n,f,d,g,b){o(n,e,f);var _,x,w,O=function(t){if(t===d&&A)return A;if(!v&&t in k)return k[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},j=e+" Iterator",S=!1,k=t.prototype,E=k[y]||k["@@iterator"]||d&&k[d],A=!v&&E||O(d),$="Array"==e&&k.entries||E;if($&&(_=i($.call(new t)),h!==Object.prototype&&_.next&&(l||i(_)===h||(a?a(_,h):"function"!=typeof _[y]&&c(_,y,m)),u(_,j,!0,!0),l&&(p[j]=m))),"values"==d&&E&&"values"!==E.name&&(S=!0,A=function(){return E.call(this)}),l&&!b||k[y]===A||c(k,y,A),p[e]=A,d)if(x={values:O("values"),keys:g?A:O("keys"),entries:O("entries")},b)for(w in x)(v||S||!(w in k))&&s(k,w,x[w]);else r({target:e,proto:!0,forced:v||S},x);return x}},function(t,e,n){var r=n(5),o=n(106),i=n(20),a=n(8);t.exports=function(t,e){for(var n=o(e),u=a.f,c=i.f,s=0;sn;)e.push(arguments[n++]);return _[++b]=function(){("function"==typeof t?t:Function(t)).apply(void 0,e)},r(b),b},v=function(t){delete _[t]},p?r=function(t){y.nextTick(w(t))}:g&&g.now?r=function(t){g.now(w(t))}:m&&!l?(i=(o=new m).port2,o.port1.onmessage=O,r=c(i.postMessage,i,1)):a.addEventListener&&"function"==typeof postMessage&&!a.importScripts&&d&&"file:"!==d.protocol&&!u(j)?(r=j,a.addEventListener("message",O,!1)):r="onreadystatechange"in f("script")?function(t){s.appendChild(f("script")).onreadystatechange=function(){s.removeChild(this),x(t)}}:function(t){setTimeout(w(t),0)}),t.exports={set:h,clear:v}},function(t,e,n){var r=n(68);t.exports=/(iphone|ipod|ipad).*applewebkit/i.test(r)},function(t,e,n){var r=n(6),o=n(4),i=n(114);t.exports=function(t,e){if(r(t),o(e)&&e.constructor===t)return e;var n=i.f(t);return(0,n.resolve)(e),n.promise}},function(t,e,n){"use strict";var r=n(33),o=function(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=r(e),this.reject=r(n)};t.exports.f=function(t){return new o(t)}},function(t,e,n){var r=function(t){"use strict";var e=Object.prototype,n=e.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,n){return t[e]=n}}function c(t,e,n,r){var o=e&&e.prototype instanceof l?e:l,i=Object.create(o.prototype),a=new O(r||[]);return i._invoke=function(t,e,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=_(a,n);if(u){if(u===f)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(t,e,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(t,n,a),i}function s(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=c;var f={};function l(){}function p(){}function d(){}var h={};h[o]=function(){return this};var v=Object.getPrototypeOf,y=v&&v(v(j([])));y&&y!==e&&n.call(y,o)&&(h=y);var m=d.prototype=l.prototype=Object.create(h);function g(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function b(t,e){var r;this._invoke=function(o,i){function a(){return new e((function(r,a){!function r(o,i,a,u){var c=s(t[o],t,i);if("throw"!==c.type){var f=c.arg,l=f.value;return l&&"object"==typeof l&&n.call(l,"__await")?e.resolve(l.__await).then((function(t){r("next",t,a,u)}),(function(t){r("throw",t,a,u)})):e.resolve(l).then((function(t){f.value=t,a(f)}),(function(t){return r("throw",t,a,u)}))}u(c.arg)}(o,i,r,a)}))}return r=r?r.then(a,a):a()}}function _(t,e){var n=t.iterator[e.method];if(void 0===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,_(t,e),"throw"===e.method))return f;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return f}var r=s(n,t.iterator,e.arg);if("throw"===r.type)return e.method="throw",e.arg=r.arg,e.delegate=null,f;var o=r.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,f):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,f)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function w(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function O(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function j(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,i=function e(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),w(n),f}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;w(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:j(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},t}(t.exports);try{regeneratorRuntime=r}catch(t){Function("r","regeneratorRuntime = r")(r)}},function(t,e,n){var r=n(48),o=n(19),i=function(t){return function(e,n){var i,a,u=String(o(e)),c=r(n),s=u.length;return c<0||c>=s?t?"":void 0:(i=u.charCodeAt(c))<55296||i>56319||c+1===s||(a=u.charCodeAt(c+1))<56320||a>57343?t?u.charAt(c):i:t?u.slice(c,c+2):a-56320+(i-55296<<10)+65536}};t.exports={codeAt:i(!1),charAt:i(!0)}},function(t,e){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(t,e,n){var r=n(4),o=n(43),i=n(1)("species");t.exports=function(t,e){var n;return o(t)&&("function"!=typeof(n=t.constructor)||n!==Array&&!o(n.prototype)?r(n)&&null===(n=n[i])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===e?0:e)}},function(t,e,n){"use strict";var r=n(25).forEach,o=n(37)("forEach");t.exports=o?[].forEach:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,e,n){var r=n(3);t.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,o=t.length;++nf))return!1;var p=c.get(t),d=c.get(e);if(p&&d)return p==e&&d==t;var h=-1,v=!0,y=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++h-1&&t%1==0&&t=e||n<0||y&&t-s>=i}function x(){var t=d();if(_(t))return w(t);u=setTimeout(x,function(t){var n=e-(t-c);return y?p(n,i-(t-s)):n}(t))}function w(t){return u=void 0,m&&r?g(t):(r=o=void 0,a)}function O(){var t=d(),n=_(t);if(r=arguments,o=this,c=t,n){if(void 0===u)return b(c);if(y)return u=setTimeout(x,e),g(c)}return void 0===u&&(u=setTimeout(x,e)),a}return e=v(e)||0,h(n)&&(f=!!n.leading,i=(y="maxWait"in n)?l(v(n.maxWait)||0,e):i,m="trailing"in n?!!n.trailing:m),O.cancel=function(){void 0!==u&&clearTimeout(u),s=0,r=c=o=u=void 0},O.flush=function(){return void 0===u?a:w(d())},O}},function(t,e,n){"use strict";var r=n(0),o=n(69).indexOf,i=n(37),a=[].indexOf,u=!!a&&1/[1].indexOf(1,-0)<0,c=i("indexOf");r({target:"Array",proto:!0,forced:u||!c},{indexOf:function(t){return u?a.apply(this,arguments)||0:o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var r=n(4),o=n(22),i=n(1)("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==o(t))}},function(t,e,n){"use strict";n(42);var r=n(15),o=n(3),i=n(1),a=n(62),u=n(9),c=i("species"),s=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")})),f="$0"==="a".replace(/./,"$0"),l=i("replace"),p=!!/./[l]&&""===/./[l]("a","$0"),d=!o((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));t.exports=function(t,e,n,l){var h=i(t),v=!o((function(){var e={};return e[h]=function(){return 7},7!=""[t](e)})),y=v&&!o((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[c]=function(){return n},n.flags="",n[h]=/./[h]),n.exec=function(){return e=!0,null},n[h](""),!e}));if(!v||!y||"replace"===t&&(!s||!f||p)||"split"===t&&!d){var m=/./[h],g=n(h,""[t],(function(t,e,n,r,o){return e.exec===a?v&&!o?{done:!0,value:m.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}}),{REPLACE_KEEPS_$0:f,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:p}),b=g[0],_=g[1];r(String.prototype,t,b),r(RegExp.prototype,h,2==e?function(t,e){return _.call(t,this,e)}:function(t){return _.call(t,this)})}l&&u(RegExp.prototype[h],"sham",!0)}},function(t,e,n){"use strict";var r=n(6);t.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,n){"use strict";var r=n(116).charAt;t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},function(t,e,n){var r=n(22),o=n(62);t.exports=function(t,e){var n=t.exec;if("function"==typeof n){var i=n.call(t,e);if("object"!=typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(t))throw TypeError("RegExp#exec called on incompatible receiver");return o.call(t,e)}},function(t,e,n){"use strict";var r=n(0),o=n(27),i=n(11),a=n(37),u=[].join,c=o!=Object,s=a("join",",");r({target:"Array",proto:!0,forced:c||!s},{join:function(t){return u.call(i(this),void 0===t?",":t)}})},function(t,e,n){var r=n(6),o=n(167);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),e=n instanceof Array}catch(t){}return function(n,i){return r(n),o(i),e?t.call(n,i):n.__proto__=i,n}}():void 0)},function(t,e,n){"use strict";var r=n(17),o=n(8),i=n(1),a=n(7),u=i("species");t.exports=function(t){var e=r(t),n=o.f;a&&e&&!e[u]&&n(e,u,{configurable:!0,get:function(){return this}})}},function(t,e,n){"use strict";var r=n(3);function o(t,e){return RegExp(t,e)}e.UNSUPPORTED_Y=r((function(){var t=o("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),e.BROKEN_CARET=r((function(){var t=o("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},function(t,e,n){"use strict";var r=n(0),o=n(69).includes,i=n(92);r({target:"Array",proto:!0},{includes:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),i("includes")},function(t,e,n){"use strict";var r=n(0),o=n(95),i=n(19);r({target:"String",proto:!0,forced:!n(96)("includes")},{includes:function(t){return!!~String(i(this)).indexOf(o(t),arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r=n(0),o=n(3),i=n(43),a=n(4),u=n(12),c=n(14),s=n(78),f=n(118),l=n(51),p=n(1),d=n(30),h=p("isConcatSpreadable"),v=d>=51||!o((function(){var t=[];return t[h]=!1,t.concat()[0]!==t})),y=l("concat"),m=function(t){if(!a(t))return!1;var e=t[h];return void 0!==e?!!e:i(t)};r({target:"Array",proto:!0,forced:!v||!y},{concat:function(t){var e,n,r,o,i,a=u(this),l=f(a,0),p=0;for(e=-1,r=arguments.length;e9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n=9007199254740991)throw TypeError("Maximum allowed index exceeded");s(l,p++,i)}return l.length=p,l}})},function(t,e,n){var r=n(140);t.exports=function(t,e,n){var o=null==t?void 0:r(t,e);return void 0===o?n:o}},function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},function(t,e,n){t.exports=n(294)},function(t,e,n){var r=n(7),o=n(8),i=n(6),a=n(47);t.exports=r?Object.defineProperties:function(t,e){i(t);for(var n,r=a(e),u=r.length,c=0;u>c;)o.f(t,n=r[c++],e[n]);return t}},function(t,e,n){var r=n(2),o=n(71),i=r.WeakMap;t.exports="function"==typeof i&&/native code/.test(o(i))},function(t,e,n){"use strict";var r=n(107).IteratorPrototype,o=n(46),i=n(28),a=n(50),u=n(32),c=function(){return this};t.exports=function(t,e,n){var s=e+" Iterator";return t.prototype=o(r,{next:i(1,n)}),a(t,s,!1,!0),u[s]=c,t}},function(t,e,n){var r=n(4);t.exports=function(t){if(!r(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},function(t,e,n){"use strict";var r,o,i,a,u=n(0),c=n(16),s=n(2),f=n(17),l=n(109),p=n(15),d=n(169),h=n(50),v=n(156),y=n(4),m=n(33),g=n(170),b=n(71),_=n(171),x=n(175),w=n(94),O=n(111).set,j=n(176),S=n(113),k=n(178),E=n(114),A=n(179),$=n(24),C=n(93),P=n(1),T=n(29),L=n(30),R=P("species"),I="Promise",M=$.get,N=$.set,D=$.getterFor(I),F=l,U=s.TypeError,B=s.document,z=s.process,q=f("fetch"),V=E.f,H=V,W=!!(B&&B.createEvent&&s.dispatchEvent),G="function"==typeof PromiseRejectionEvent,K=C(I,(function(){if(!(b(F)!==String(F))){if(66===L)return!0;if(!T&&!G)return!0}if(c&&!F.prototype.finally)return!0;if(L>=51&&/native code/.test(F))return!1;var t=F.resolve(1),e=function(t){t((function(){}),(function(){}))};return(t.constructor={})[R]=e,!(t.then((function(){}))instanceof e)})),J=K||!x((function(t){F.all(t).catch((function(){}))})),X=function(t){var e;return!(!y(t)||"function"!=typeof(e=t.then))&&e},Y=function(t,e){if(!t.notified){t.notified=!0;var n=t.reactions;j((function(){for(var r=t.value,o=1==t.state,i=0;n.length>i;){var a,u,c,s=n[i++],f=o?s.ok:s.fail,l=s.resolve,p=s.reject,d=s.domain;try{f?(o||(2===t.rejection&&et(t),t.rejection=1),!0===f?a=r:(d&&d.enter(),a=f(r),d&&(d.exit(),c=!0)),a===s.promise?p(U("Promise-chain cycle")):(u=X(a))?u.call(a,l,p):l(a)):p(r)}catch(t){d&&!c&&d.exit(),p(t)}}t.reactions=[],t.notified=!1,e&&!t.rejection&&Z(t)}))}},Q=function(t,e,n){var r,o;W?((r=B.createEvent("Event")).promise=e,r.reason=n,r.initEvent(t,!1,!0),s.dispatchEvent(r)):r={promise:e,reason:n},!G&&(o=s["on"+t])?o(r):"unhandledrejection"===t&&k("Unhandled promise rejection",n)},Z=function(t){O.call(s,(function(){var e,n=t.facade,r=t.value;if(tt(t)&&(e=A((function(){T?z.emit("unhandledRejection",r,n):Q("unhandledrejection",n,r)})),t.rejection=T||tt(t)?2:1,e.error))throw e.value}))},tt=function(t){return 1!==t.rejection&&!t.parent},et=function(t){O.call(s,(function(){var e=t.facade;T?z.emit("rejectionHandled",e):Q("rejectionhandled",e,t.value)}))},nt=function(t,e,n){return function(r){t(e,r,n)}},rt=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,Y(t,!0))},ot=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw U("Promise can't be resolved itself");var r=X(e);r?j((function(){var n={done:!1};try{r.call(e,nt(ot,n,t),nt(rt,n,t))}catch(e){rt(n,e,t)}})):(t.value=e,t.state=1,Y(t,!1))}catch(e){rt({done:!1},e,t)}}};K&&(F=function(t){g(this,F,I),m(t),r.call(this);var e=M(this);try{t(nt(ot,e),nt(rt,e))}catch(t){rt(e,t)}},(r=function(t){N(this,{type:I,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=d(F.prototype,{then:function(t,e){var n=D(this),r=V(w(this,F));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=T?z.domain:void 0,n.parent=!0,n.reactions.push(r),0!=n.state&&Y(n,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new r,e=M(t);this.promise=t,this.resolve=nt(ot,e),this.reject=nt(rt,e)},E.f=V=function(t){return t===F||t===i?new o(t):H(t)},c||"function"!=typeof l||(a=l.prototype.then,p(l.prototype,"then",(function(t,e){var n=this;return new F((function(t,e){a.call(n,t,e)})).then(t,e)}),{unsafe:!0}),"function"==typeof q&&u({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return S(F,q.apply(s,arguments))}}))),u({global:!0,wrap:!0,forced:K},{Promise:F}),h(F,I,!1,!0),v(I),i=f(I),u({target:I,stat:!0,forced:K},{reject:function(t){var e=V(this);return e.reject.call(void 0,t),e.promise}}),u({target:I,stat:!0,forced:c||K},{resolve:function(t){return S(c&&this===i?F:this,t)}}),u({target:I,stat:!0,forced:J},{all:function(t){var e=this,n=V(e),r=n.resolve,o=n.reject,i=A((function(){var n=m(e.resolve),i=[],a=0,u=1;_(t,(function(t){var c=a++,s=!1;i.push(void 0),u++,n.call(e,t).then((function(t){s||(s=!0,i[c]=t,--u||r(i))}),o)})),--u||r(i)}));return i.error&&o(i.value),n.promise},race:function(t){var e=this,n=V(e),r=n.reject,o=A((function(){var o=m(e.resolve);_(t,(function(t){o.call(e,t).then(n.resolve,r)}))}));return o.error&&r(o.value),n.promise}})},function(t,e,n){var r=n(15);t.exports=function(t,e,n){for(var o in e)r(t,o,e[o],n);return t}},function(t,e){t.exports=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t}},function(t,e,n){var r=n(6),o=n(172),i=n(14),a=n(75),u=n(173),c=n(174),s=function(t,e){this.stopped=t,this.result=e};t.exports=function(t,e,n){var f,l,p,d,h,v,y,m=n&&n.that,g=!(!n||!n.AS_ENTRIES),b=!(!n||!n.IS_ITERATOR),_=!(!n||!n.INTERRUPTED),x=a(e,m,1+g+_),w=function(t){return f&&c(f),new s(!0,t)},O=function(t){return g?(r(t),_?x(t[0],t[1],w):x(t[0],t[1])):_?x(t,w):x(t)};if(b)f=t;else{if("function"!=typeof(l=u(t)))throw TypeError("Target is not iterable");if(o(l)){for(p=0,d=i(t.length);d>p;p++)if((h=O(t[p]))&&h instanceof s)return h;return new s(!1)}f=l.call(t)}for(v=f.next;!(y=v.call(f)).done;){try{h=O(y.value)}catch(t){throw c(f),t}if("object"==typeof h&&h&&h instanceof s)return h}return new s(!1)}},function(t,e,n){var r=n(1),o=n(32),i=r("iterator"),a=Array.prototype;t.exports=function(t){return void 0!==t&&(o.Array===t||a[i]===t)}},function(t,e,n){var r=n(110),o=n(32),i=n(1)("iterator");t.exports=function(t){if(null!=t)return t[i]||t["@@iterator"]||o[r(t)]}},function(t,e,n){var r=n(6);t.exports=function(t){var e=t.return;if(void 0!==e)return r(e.call(t)).value}},function(t,e,n){var r=n(1)("iterator"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(t){}return n}},function(t,e,n){var r,o,i,a,u,c,s,f,l=n(2),p=n(20).f,d=n(111).set,h=n(112),v=n(177),y=n(29),m=l.MutationObserver||l.WebKitMutationObserver,g=l.document,b=l.process,_=l.Promise,x=p(l,"queueMicrotask"),w=x&&x.value;w||(r=function(){var t,e;for(y&&(t=b.domain)&&t.exit();o;){e=o.fn,o=o.next;try{e()}catch(t){throw o?a():i=void 0,t}}i=void 0,t&&t.enter()},h||y||v||!m||!g?_&&_.resolve?(s=_.resolve(void 0),f=s.then,a=function(){f.call(s,r)}):a=y?function(){b.nextTick(r)}:function(){d.call(l,r)}:(u=!0,c=g.createTextNode(""),new m(r).observe(c,{characterData:!0}),a=function(){c.data=u=!u})),t.exports=w||function(t){var e={fn:t,next:void 0};i&&(i.next=e),o||(o=e,a()),i=e}},function(t,e,n){var r=n(68);t.exports=/web0s(?!.*chrome)/i.test(r)},function(t,e,n){var r=n(2);t.exports=function(t,e){var n=r.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,e))}},function(t,e){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,e,n){var r=n(0),o=n(181);r({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},function(t,e,n){"use strict";var r=n(7),o=n(3),i=n(47),a=n(73),u=n(72),c=n(12),s=n(27),f=Object.assign,l=Object.defineProperty;t.exports=!f||o((function(){if(r&&1!==f({b:1},f(l({},"a",{enumerable:!0,get:function(){l(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol();return t[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){e[t]=t})),7!=f({},t)[n]||"abcdefghijklmnopqrst"!=i(f({},e)).join("")}))?function(t,e){for(var n=c(t),o=arguments.length,f=1,l=a.f,p=u.f;o>f;)for(var d,h=s(arguments[f++]),v=l?i(h).concat(l(h)):i(h),y=v.length,m=0;y>m;)d=v[m++],r&&!p.call(h,d)||(n[d]=h[d]);return n}:f},function(t,e,n){"use strict";var r=n(0),o=n(16),i=n(109),a=n(3),u=n(17),c=n(94),s=n(113),f=n(15);r({target:"Promise",proto:!0,real:!0,forced:!!i&&a((function(){i.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=c(this,u("Promise")),n="function"==typeof t;return this.then(n?function(n){return s(e,t()).then((function(){return n}))}:t,n?function(n){return s(e,t()).then((function(){throw n}))}:t)}}),o||"function"!=typeof i||i.prototype.finally||f(i.prototype,"finally",u("Promise").prototype.finally)},function(t,e,n){"use strict";var r=n(76),o=n(110);t.exports=r?{}.toString:function(){return"[object "+o(this)+"]"}},function(t,e,n){var r=n(0),o=n(7),i=n(106),a=n(11),u=n(20),c=n(78);r({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(t){for(var e,n,r=a(t),o=u.f,s=i(r),f={},l=0;s.length>l;)void 0!==(n=o(r,e=s[l++]))&&c(f,e,n);return f}})},function(t,e,n){var r=n(0),o=n(3),i=n(12),a=n(74),u=n(108);r({target:"Object",stat:!0,forced:o((function(){a(1)})),sham:!u},{getPrototypeOf:function(t){return a(i(t))}})},function(t,e,n){"use strict";var r=n(0),o=n(187).left,i=n(37),a=n(30),u=n(29);r({target:"Array",proto:!0,forced:!i("reduce")||!u&&a>79&&a<83},{reduce:function(t){return o(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var r=n(33),o=n(12),i=n(27),a=n(14),u=function(t){return function(e,n,u,c){r(n);var s=o(e),f=i(s),l=a(s.length),p=t?l-1:0,d=t?-1:1;if(u<2)for(;;){if(p in f){c=f[p],p+=d;break}if(p+=d,t?p<0:l<=p)throw TypeError("Reduce of empty array with no initial value")}for(;t?p>=0:l>p;p+=d)p in f&&(c=n(c,f[p],p,s));return c}};t.exports={left:u(!1),right:u(!0)}},function(t,e,n){"use strict";var r,o=n(0),i=n(20).f,a=n(14),u=n(95),c=n(19),s=n(96),f=n(16),l="".startsWith,p=Math.min,d=s("startsWith");o({target:"String",proto:!0,forced:!!(f||d||(r=i(String.prototype,"startsWith"),!r||r.writable))&&!d},{startsWith:function(t){var e=String(c(this));u(t);var n=a(p(arguments.length>1?arguments[1]:void 0,e.length)),r=String(t);return l?l.call(e,r,n):e.slice(n,n+r.length)===r}})},function(t,e,n){var r=n(0),o=n(120),i=n(3),a=n(4),u=n(190).onFreeze,c=Object.freeze;r({target:"Object",stat:!0,forced:i((function(){c(1)})),sham:!o},{freeze:function(t){return c&&a(t)?c(u(t)):t}})},function(t,e,n){var r=n(31),o=n(4),i=n(5),a=n(8).f,u=n(45),c=n(120),s=u("meta"),f=0,l=Object.isExtensible||function(){return!0},p=function(t){a(t,s,{value:{objectID:"O"+ ++f,weakData:{}}})},d=t.exports={REQUIRED:!1,fastKey:function(t,e){if(!o(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,s)){if(!l(t))return"F";if(!e)return"E";p(t)}return t[s].objectID},getWeakData:function(t,e){if(!i(t,s)){if(!l(t))return!0;if(!e)return!1;p(t)}return t[s].weakData},onFreeze:function(t){return c&&d.REQUIRED&&l(t)&&!i(t,s)&&p(t),t}};r[s]=!0},function(t,e,n){n(0)({target:"Object",stat:!0,sham:!n(7)},{create:n(46)})},function(t,e,n){var r=n(12),o=Math.floor,i="".replace,a=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,u=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,n,c,s,f){var l=n+t.length,p=c.length,d=u;return void 0!==s&&(s=r(s),d=a),i.call(f,d,(function(r,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(l);case"<":a=s[i.slice(1,-1)];break;default:var u=+i;if(0===u)return r;if(u>p){var f=o(u/10);return 0===f?r:f<=p?void 0===c[f-1]?i.charAt(1):c[f-1]+i.charAt(1):r}a=c[u-1]}return void 0===a?"":a}))}},function(t,e,n){var r=n(121),o=n(194);t.exports=function t(e,n,i,a,u){var c=-1,s=e.length;for(i||(i=o),u||(u=[]);++c0&&i(f)?n>1?t(f,n-1,i,a,u):r(u,f):a||(u[u.length]=f)}return u}},function(t,e,n){var r=n(38),o=n(79),i=n(10),a=r?r.isConcatSpreadable:void 0;t.exports=function(t){return i(t)||o(t)||!!(a&&t&&t[a])}},function(t,e,n){var r=n(26),o=n(21);t.exports=function(t){return o(t)&&"[object Arguments]"==r(t)}},function(t,e,n){var r=n(38),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,u=r?r.toStringTag:void 0;t.exports=function(t){var e=i.call(t,u),n=t[u];try{t[u]=void 0;var r=!0}catch(t){}var o=a.call(t);return r&&(e?t[u]=n:delete t[u]),o}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r=n(199),o=n(255),i=n(87),a=n(10),u=n(265);t.exports=function(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?a(t)?o(t[0],t[1]):r(t):u(t)}},function(t,e,n){var r=n(200),o=n(254),i=n(139);t.exports=function(t){var e=o(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},function(t,e,n){var r=n(123),o=n(127);t.exports=function(t,e,n,i){var a=n.length,u=a,c=!i;if(null==t)return!u;for(t=Object(t);a--;){var s=n[a];if(c&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++a-1}},function(t,e,n){var r=n(53);t.exports=function(t,e){var n=this.__data__,o=r(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}},function(t,e,n){var r=n(52);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(52),o=n(80),i=n(82);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!o||a.length<199)return a.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(a)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(125),o=n(212),i=n(81),a=n(126),u=/^\[object .+?Constructor\]$/,c=Function.prototype,s=Object.prototype,f=c.toString,l=s.hasOwnProperty,p=RegExp("^"+f.call(l).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||o(t))&&(r(t)?p:u).test(a(t))}},function(t,e,n){var r,o=n(213),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!i&&i in t}},function(t,e,n){var r=n(13)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(216),o=n(52),i=n(80);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},function(t,e,n){var r=n(217),o=n(218),i=n(219),a=n(220),u=n(221);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(129),o=n(277),i=n(282),a=n(130),u=n(283),c=n(83);t.exports=function(t,e,n){var s=-1,f=o,l=t.length,p=!0,d=[],h=d;if(n)p=!1,f=i;else if(l>=200){var v=e?null:u(t);if(v)return c(v);p=!1,f=a,h=new r}else h=e?[]:d;t:for(;++s-1}},function(t,e,n){var r=n(279),o=n(280),i=n(281);t.exports=function(t,e,n){return e==e?i(t,e,n):r(t,o,n)}},function(t,e){t.exports=function(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++ii;)o.push(arguments[i++]);if(r=e,(d(e)||void 0!==t)&&!it(t))return p(e)||(e=function(t,e){if("function"==typeof r&&(e=r.call(this,t,e)),!it(e))return e}),o[1]=e,H.apply(null,o)}});V.prototype[U]||E(V.prototype,U,V.prototype.valueOf),M(V,"Symbol"),P[F]=!0},function(t,e,n){var r=n(11),o=n(61).f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return a&&"[object Window]"==i.call(t)?function(t){try{return o(t)}catch(t){return a.slice()}}(t):o(r(t))}},function(t,e,n){var r=n(99),o=n(5),i=n(143),a=n(8).f;t.exports=function(t){var e=r.Symbol||(r.Symbol={});o(e,t)||a(e,t,{value:i.f(t)})}},function(t,e,n){"use strict";var r=n(0),o=n(7),i=n(2),a=n(5),u=n(4),c=n(8).f,s=n(105),f=i.Symbol;if(o&&"function"==typeof f&&(!("description"in f.prototype)||void 0!==f().description)){var l={},p=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),e=this instanceof p?new f(t):void 0===t?f():f(t);return""===t&&(l[e]=!0),e};s(p,f);var d=p.prototype=f.prototype;d.constructor=p;var h=d.toString,v="Symbol(test)"==String(f("test")),y=/^Symbol\((.*)\)[^)]+$/;c(d,"description",{configurable:!0,get:function(){var t=u(this)?this.valueOf():this,e=h.call(t);if(a(l,t))return"";var n=v?e.slice(7,-1):e.replace(y,"$1");return""===n?void 0:n}}),r({global:!0,forced:!0},{Symbol:p})}},function(t,e,n){"use strict";n(144)},function(t,e,n){"use strict";n(145)},function(t,e,n){"use strict";n.r(e);n(97),n(168),n(180),n(182);function r(t,e,n,r,o,i,a){try{var u=t[i](a),c=u.value}catch(t){return void n(t)}u.done?e(c):Promise.resolve(c).then(r,o)}function o(t){return function(){var e=this,n=arguments;return new Promise((function(o,i){var a=t.apply(e,n);function u(t){r(a,o,i,u,c,"next",t)}function c(t){r(a,o,i,u,c,"throw",t)}u(void 0)}))}}n(115),n(77),n(34),n(35),n(36),n(59),n(23);var i=Object.freeze({});function a(t){return null==t}function u(t){return null!=t}function c(t){return!0===t}function s(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function f(t){return null!==t&&"object"==typeof t}var l=Object.prototype.toString;function p(t){return"[object Object]"===l.call(t)}function d(t){return"[object RegExp]"===l.call(t)}function h(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return u(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function y(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===l?JSON.stringify(t,null,2):String(t)}function m(t){var e=parseFloat(t);return isNaN(e)?t:e}function g(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}var x=Object.prototype.hasOwnProperty;function w(t,e){return x.call(t,e)}function O(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var j=/-(\w)/g,S=O((function(t){return t.replace(j,(function(t,e){return e?e.toUpperCase():""}))})),k=O((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),E=/\B([A-Z])/g,A=O((function(t){return t.replace(E,"-$1").toLowerCase()}));var $=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function C(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function P(t,e){for(var n in e)t[n]=e[n];return t}function T(t){for(var e={},n=0;n0,Z=X&&X.indexOf("edge/")>0,tt=(X&&X.indexOf("android"),X&&/iphone|ipad|ipod|ios/.test(X)||"ios"===J),et=(X&&/chrome\/\d+/.test(X),X&&/phantomjs/.test(X),X&&X.match(/firefox\/(\d+)/)),nt={}.watch,rt=!1;if(G)try{var ot={};Object.defineProperty(ot,"passive",{get:function(){rt=!0}}),window.addEventListener("test-passive",null,ot)}catch(t){}var it=function(){return void 0===H&&(H=!G&&!K&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),H},at=G&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ut(t){return"function"==typeof t&&/native code/.test(t.toString())}var ct,st="undefined"!=typeof Symbol&&ut(Symbol)&&"undefined"!=typeof Reflect&&ut(Reflect.ownKeys);ct="undefined"!=typeof Set&&ut(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ft=L,lt=0,pt=function(){this.id=lt++,this.subs=[]};pt.prototype.addSub=function(t){this.subs.push(t)},pt.prototype.removeSub=function(t){_(this.subs,t)},pt.prototype.depend=function(){pt.target&&pt.target.addDep(this)},pt.prototype.notify=function(){var t=this.subs.slice();for(var e=0,n=t.length;e-1)if(i&&!w(o,"default"))a=!1;else if(""===a||a===A(t)){var c=qt(String,o.type);(c<0||u0&&(pe((o=t(o,(n||"")+"_"+r))[0])&&pe(f)&&(l[i]=bt(f.text+o[0].text),o.shift()),l.push.apply(l,o)):s(o)?pe(f)?l[i]=bt(f.text+o):""!==o&&l.push(bt(o)):pe(o)&&pe(f)?l[i]=bt(f.text+o.text):(c(e._isVList)&&u(o.tag)&&a(o.key)&&u(n)&&(o.key="__vlist"+n+"_"+r+"__"),l.push(o)));return l}(t):void 0}function pe(t){return u(t)&&u(t.text)&&!1===t.isComment}function de(t,e){if(t){for(var n=Object.create(null),r=st?Reflect.ownKeys(t):Object.keys(t),o=0;o0,a=t?!!t.$stable:!o,u=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&n&&n!==i&&u===n.$key&&!o&&!n.$hasNormal)return n;for(var c in r={},t)t[c]&&"$"!==c[0]&&(r[c]=me(e,c,t[c]))}else r={};for(var s in e)s in r||(r[s]=ge(e,s));return t&&Object.isExtensible(t)&&(t._normalized=r),q(r,"$stable",a),q(r,"$key",u),q(r,"$hasNormal",o),r}function me(t,e,n){var r=function(){var t=arguments.length?n.apply(null,arguments):n({});return(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:le(t))&&(0===t.length||1===t.length&&t[0].isComment)?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:r,enumerable:!0,configurable:!0}),r}function ge(t,e){return function(){return t[e]}}function be(t,e){var n,r,o,i,a;if(Array.isArray(t)||"string"==typeof t)for(n=new Array(t.length),r=0,o=t.length;rdocument.createEvent("Event").timeStamp&&(fn=function(){return ln.now()})}function pn(){var t,e;for(sn=fn(),un=!0,nn.sort((function(t,e){return t.id-e.id})),cn=0;cncn&&nn[n].id>t.id;)n--;nn.splice(n+1,0,t)}else nn.push(t);an||(an=!0,re(pn))}}(this)},hn.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||f(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){Vt(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},hn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},hn.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},hn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||_(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var vn={enumerable:!0,configurable:!0,get:L,set:L};function yn(t,e,n){vn.get=function(){return this[e][n]},vn.set=function(t){this[e][n]=t},Object.defineProperty(t,n,vn)}function mn(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){var n=t.$options.propsData||{},r=t._props={},o=t.$options._propKeys=[];t.$parent&&St(!1);var i=function(i){o.push(i);var a=Ut(i,e,n,t);At(r,i,a),i in t||yn(t,"_props",i)};for(var a in e)i(a);St(!0)}(t,e.props),e.methods&&function(t,e){t.$options.props;for(var n in e)t[n]="function"!=typeof e[n]?L:$(e[n],t)}(t,e.methods),e.data?function(t){var e=t.$options.data;p(e=t._data="function"==typeof e?function(t,e){ht();try{return t.call(e,e)}catch(t){return Vt(t,e,"data()"),{}}finally{vt()}}(e,t):e||{})||(e={});var n=Object.keys(e),r=t.$options.props,o=(t.$options.methods,n.length);for(;o--;){var i=n[o];0,r&&w(r,i)||(a=void 0,36!==(a=(i+"").charCodeAt(0))&&95!==a&&yn(t,"_data",i))}var a;Et(e,!0)}(t):Et(t._data={},!0),e.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),r=it();for(var o in e){var i=e[o],a="function"==typeof i?i:i.get;0,r||(n[o]=new hn(t,a||L,L,gn)),o in t||bn(t,o,i)}}(t,e.computed),e.watch&&e.watch!==nt&&function(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var o=0;o-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function $n(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var u=En(a.componentOptions);u&&!e(u)&&Cn(n,i,r,o)}}}function Cn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,_(n,e)}Sn.prototype._init=function(t){var e=this;e._uid=On++,e._isVue=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Dt(jn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Xe(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,r=n&&n.context;t.$slots=he(e._renderChildren,r),t.$scopedSlots=i,t._c=function(e,n,r,o){return Be(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return Be(t,e,n,r,o,!0)};var o=n&&n.data;At(t,"$attrs",o&&o.attrs||i,null,!0),At(t,"$listeners",e._parentListeners||i,null,!0)}(e),en(e,"beforeCreate"),function(t){var e=de(t.$options.inject,t);e&&(St(!1),Object.keys(e).forEach((function(n){At(t,n,e[n])})),St(!0))}(e),mn(e),function(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}(e),en(e,"created"),e.$options.el&&e.$mount(e.$options.el)},function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=$t,t.prototype.$delete=Ct,t.prototype.$watch=function(t,e,n){if(p(e))return wn(this,t,e,n);(n=n||{}).user=!0;var r=new hn(this,t,e,n);if(n.immediate)try{e.call(this,r.value)}catch(t){Vt(t,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(Sn),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this;if(Array.isArray(t))for(var o=0,i=t.length;o1?C(n):n;for(var r=C(arguments,1),o='event handler for "'+t+'"',i=0,a=n.length;iparseInt(this.max)&&Cn(a,u[0],u,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return B}};Object.defineProperty(t,"config",e),t.util={warn:ft,extend:P,mergeOptions:Dt,defineReactive:At},t.set=$t,t.delete=Ct,t.nextTick=re,t.observable=function(t){return Et(t),t},t.options=Object.create(null),F.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,P(t.options.components,Tn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=C(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Dt(this.options,t),this}}(t),kn(t),function(t){F.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Sn),Object.defineProperty(Sn.prototype,"$isServer",{get:it}),Object.defineProperty(Sn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Sn,"FunctionalRenderContext",{value:Re}),Sn.version="2.6.12";var Ln=g("style,class"),Rn=g("input,textarea,option,select,progress"),In=g("contenteditable,draggable,spellcheck"),Mn=g("events,caret,typing,plaintext-only"),Nn=g("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Dn="http://www.w3.org/1999/xlink",Fn=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Un=function(t){return Fn(t)?t.slice(6,t.length):""},Bn=function(t){return null==t||!1===t};function zn(t){for(var e=t.data,n=t,r=t;u(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=qn(r.data,e));for(;u(n=n.parent);)n&&n.data&&(e=qn(e,n.data));return function(t,e){if(u(t)||u(e))return Vn(t,Hn(e));return""}(e.staticClass,e.class)}function qn(t,e){return{staticClass:Vn(t.staticClass,e.staticClass),class:u(t.class)?[t.class,e.class]:e.class}}function Vn(t,e){return t?e?t+" "+e:t:e||""}function Hn(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?hr(t,e,n):Nn(e)?Bn(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):In(e)?t.setAttribute(e,function(t,e){return Bn(e)||"false"===e?"false":"contenteditable"===t&&Mn(e)?e:"true"}(e,n)):Fn(e)?Bn(n)?t.removeAttributeNS(Dn,Un(e)):t.setAttributeNS(Dn,e,n):hr(t,e,n)}function hr(t,e,n){if(Bn(n))t.removeAttribute(e);else{if(Y&&!Q&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var vr={create:pr,update:pr};function yr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(a(r.staticClass)&&a(r.class)&&(a(o)||a(o.staticClass)&&a(o.class)))){var i=zn(e),c=n._transitionClasses;u(c)&&(i=Vn(i,Hn(c))),i!==n._prevClass&&(n.setAttribute("class",i),n._prevClass=i)}}var mr,gr={create:yr,update:yr};function br(t,e,n){var r=mr;return function o(){var i=e.apply(null,arguments);null!==i&&wr(t,o,n,r)}}var _r=Jt&&!(et&&Number(et[1])<=53);function xr(t,e,n,r){if(_r){var o=sn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}mr.addEventListener(t,e,rt?{capture:n,passive:r}:n)}function wr(t,e,n,r){(r||mr).removeEventListener(t,e._wrapper||e,n)}function Or(t,e){if(!a(t.data.on)||!a(e.data.on)){var n=e.data.on||{},r=t.data.on||{};mr=e.elm,function(t){if(u(t.__r)){var e=Y?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}u(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),ce(n,r,xr,wr,br,e.context),mr=void 0}}var jr,Sr={create:Or,update:Or};function kr(t,e){if(!a(t.data.domProps)||!a(e.data.domProps)){var n,r,o=e.elm,i=t.data.domProps||{},c=e.data.domProps||{};for(n in u(c.__ob__)&&(c=e.data.domProps=P({},c)),i)n in c||(o[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===i[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var s=a(r)?"":String(r);Er(o,s)&&(o.value=s)}else if("innerHTML"===n&&Kn(o.tagName)&&a(o.innerHTML)){(jr=jr||document.createElement("div")).innerHTML=""+r+"";for(var f=jr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==i[n])try{o[n]=r}catch(t){}}}}function Er(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(u(r)){if(r.number)return m(n)!==m(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Ar={create:kr,update:kr},$r=O((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Cr(t){var e=Pr(t.style);return t.staticStyle?P(t.staticStyle,e):e}function Pr(t){return Array.isArray(t)?T(t):"string"==typeof t?$r(t):t}var Tr,Lr=/^--/,Rr=/\s*!important$/,Ir=function(t,e,n){if(Lr.test(e))t.style.setProperty(e,n);else if(Rr.test(n))t.style.setProperty(A(e),n.replace(Rr,""),"important");else{var r=Nr(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(Ur).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function zr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Ur).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function qr(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&P(e,Vr(t.name||"v")),P(e,t),e}return"string"==typeof t?Vr(t):void 0}}var Vr=O((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),Hr=G&&!Q,Wr="transition",Gr="transitionend",Kr="animation",Jr="animationend";Hr&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Wr="WebkitTransition",Gr="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Kr="WebkitAnimation",Jr="webkitAnimationEnd"));var Xr=G?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Yr(t){Xr((function(){Xr(t)}))}function Qr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Br(t,e))}function Zr(t,e){t._transitionClasses&&_(t._transitionClasses,e),zr(t,e)}function to(t,e,n){var r=no(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var u="transition"===o?Gr:Jr,c=0,s=function(){t.removeEventListener(u,f),n()},f=function(e){e.target===t&&++c>=a&&s()};setTimeout((function(){c0&&(n="transition",f=a,l=i.length):"animation"===e?s>0&&(n="animation",f=s,l=c.length):l=(n=(f=Math.max(a,s))>0?a>s?"transition":"animation":null)?"transition"===n?i.length:c.length:0,{type:n,timeout:f,propCount:l,hasTransform:"transition"===n&&eo.test(r[Wr+"Property"])}}function ro(t,e){for(;t.length1}function so(t,e){!0!==e.data.show&&io(e)}var fo=function(t){var e,n,r={},o=t.modules,i=t.nodeOps;for(e=0;eh?b(t,a(n[m+1])?null:n[m+1].elm,n,d,m,r):d>m&&x(e,p,h)}(p,y,m,n,f):u(m)?(u(t.text)&&i.setTextContent(p,""),b(p,null,m,0,m.length-1,n)):u(y)?x(y,0,y.length-1):u(t.text)&&i.setTextContent(p,""):t.text!==e.text&&i.setTextContent(p,e.text),u(h)&&u(d=h.hook)&&u(d=d.postpatch)&&d(t,e)}}}function S(t,e,n){if(c(n)&&u(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(M(yo(a),r))return void(t.selectedIndex!==u&&(t.selectedIndex=u));o||(t.selectedIndex=-1)}}function vo(t,e){return e.every((function(e){return!M(e,t)}))}function yo(t){return"_value"in t?t._value:t.value}function mo(t){t.target.composing=!0}function go(t){t.target.composing&&(t.target.composing=!1,bo(t.target,"input"))}function bo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function _o(t){return!t.componentInstance||t.data&&t.data.transition?t:_o(t.componentInstance._vnode)}var xo={model:lo,show:{bind:function(t,e,n){var r=e.value,o=(n=_o(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,io(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=_o(n)).data&&n.data.transition?(n.data.show=!0,r?io(n,(function(){t.style.display=t.__vOriginalDisplay})):ao(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},wo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Oo(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Oo(We(e.children)):t}function jo(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var i in o)e[S(i)]=o[i];return e}function So(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var ko=function(t){return t.tag||He(t)},Eo=function(t){return"show"===t.name},Ao={name:"transition",props:wo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(ko)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Oo(o);if(!i)return o;if(this._leaving)return So(t,o);var a="__transition-"+this._uid+"-";i.key=null==i.key?i.isComment?a+"comment":a+i.tag:s(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var u=(i.data||(i.data={})).transition=jo(this),c=this._vnode,f=Oo(c);if(i.data.directives&&i.data.directives.some(Eo)&&(i.data.show=!0),f&&f.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,f)&&!He(f)&&(!f.componentInstance||!f.componentInstance._vnode.isComment)){var l=f.data.transition=P({},u);if("out-in"===r)return this._leaving=!0,se(l,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),So(t,o);if("in-out"===r){if(He(i))return c;var p,d=function(){p()};se(u,"afterEnter",d),se(u,"enterCancelled",d),se(l,"delayLeave",(function(t){p=t}))}}return o}}},$o=P({tag:String,moveClass:String},wo);function Co(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Po(t){t.data.newPos=t.elm.getBoundingClientRect()}function To(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate("+r+"px,"+o+"px)",i.transitionDuration="0s"}}delete $o.mode;var Lo={Transition:Ao,TransitionGroup:{props:$o,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Qe(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=jo(this),u=0;u-1?Xn[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Xn[t]=/HTMLUnknownElement/.test(e.toString())},P(Sn.options.directives,xo),P(Sn.options.components,Lo),Sn.prototype.__patch__=G?fo:L,Sn.prototype.$mount=function(t,e){return function(t,e,n){var r;return t.$el=e,t.$options.render||(t.$options.render=gt),en(t,"beforeMount"),r=function(){t._update(t._render(),n)},new hn(t,r,L,{before:function(){t._isMounted&&!t._isDestroyed&&en(t,"beforeUpdate")}},!0),n=!1,null==t.$vnode&&(t._isMounted=!0,en(t,"mounted")),t}(this,t=t&&G?function(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}(t):void 0,e)},G&&setTimeout((function(){B.devtools&&at&&at.emit("init",Sn)}),0);var Ro=Sn; -/*! - * vue-router v3.5.1 - * (c) 2021 Evan You - * @license MIT - */function Io(t,e){for(var n in e)t[n]=e[n];return t}var Mo=/[!'()*]/g,No=function(t){return"%"+t.charCodeAt(0).toString(16)},Do=/%2C/g,Fo=function(t){return encodeURIComponent(t).replace(Mo,No).replace(Do,",")};function Uo(t){try{return decodeURIComponent(t)}catch(t){0}return t}var Bo=function(t){return null==t||"object"==typeof t?t:String(t)};function zo(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=Uo(n.shift()),o=n.length>0?Uo(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function qo(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return Fo(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(Fo(e)):r.push(Fo(e)+"="+Fo(t)))})),r.join("&")}return Fo(e)+"="+Fo(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var Vo=/\/?$/;function Ho(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=Wo(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:Jo(e,o),matched:t?Ko(t):[]};return n&&(a.redirectedFrom=Jo(n,o)),Object.freeze(a)}function Wo(t){if(Array.isArray(t))return t.map(Wo);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=Wo(t[n]);return e}return t}var Go=Ho(null,{path:"/"});function Ko(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function Jo(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||qo)(r)+o}function Xo(t,e,n){return e===Go?t===e:!!e&&(t.path&&e.path?t.path.replace(Vo,"")===e.path.replace(Vo,"")&&(n||t.hash===e.hash&&Yo(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&Yo(t.query,e.query)&&Yo(t.params,e.params))))}function Yo(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((function(n,o){var i=t[n];if(r[o]!==n)return!1;var a=e[n];return null==i||null==a?i===a:"object"==typeof i&&"object"==typeof a?Yo(i,a):String(i)===String(a)}))}function Qo(t){for(var e=0;e=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),s=e&&e.path||"/",f=c.path?ei(c.path,s,n||o.append):s,l=function(t,e,n){void 0===e&&(e={});var r,o=n||zo;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(Bo):Bo(a)}return r}(c.query,o.query,r&&r.options.parseQuery),p=o.hash||c.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:f,query:l,hash:p}}var wi,Oi=function(){},ji={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,u=o.href,c={},s=n.options.linkActiveClass,f=n.options.linkExactActiveClass,l=null==s?"router-link-active":s,p=null==f?"router-link-exact-active":f,d=null==this.activeClass?l:this.activeClass,h=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?Ho(null,xi(a.redirectedFrom),null,n):a;c[h]=Xo(r,v,this.exactPath),c[d]=this.exact||this.exactPath?c[h]:function(t,e){return 0===t.path.replace(Vo,"/").indexOf(e.path.replace(Vo,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var y=c[h]?this.ariaCurrentValue:null,m=function(t){Si(t)&&(e.replace?n.replace(i,Oi):n.push(i,Oi))},g={click:Si};Array.isArray(this.event)?this.event.forEach((function(t){g[t]=m})):g[this.event]=m;var b={class:c},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:u,route:a,navigate:m,isActive:c[d],isExactActive:c[h]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)b.on=g,b.attrs={href:u,"aria-current":y};else{var x=function t(e){var n;if(e)for(var r=0;r-1&&(u.params[p]=n.params[p]);return u.path=_i(f.path,u.params),c(f,u,a)}if(u.path){u.params={};for(var d=0;d=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}var Yi={redirected:2,aborted:4,cancelled:8,duplicated:16};function Qi(t,e){return ta(t,e,Yi.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return ea.forEach((function(n){n in t&&(e[n]=t[n])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}function Zi(t,e){return ta(t,e,Yi.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function ta(t,e,n,r){var o=new Error(r);return o._isRouter=!0,o.from=t,o.to=e,o.type=n,o}var ea=["params","query","hash"];function na(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function ra(t,e){return na(t)&&t._isRouter&&(null==e||t.type===e)}function oa(t){return function(e,n,r){var o=!1,i=0,a=null;ia(t,(function(t,e,n,u){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var c,s=ca((function(e){var o;((o=e).__esModule||ua&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:wi.extend(e),n.components[u]=e,--i<=0&&r()})),f=ca((function(t){var e="Failed to resolve async component "+u+": "+t;a||(a=na(t)?t:new Error(e),r(a))}));try{c=t(s,f)}catch(t){f(t)}if(c)if("function"==typeof c.then)c.then(s,f);else{var l=c.component;l&&"function"==typeof l.then&&l.then(s,f)}}})),o||r()}}function ia(t,e){return aa(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function aa(t){return Array.prototype.concat.apply([],t)}var ua="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function ca(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var sa=function(t,e){this.router=t,this.base=function(t){if(!t)if(ki){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=Go,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function fa(t,e,n,r){var o=ia(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=wi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return aa(r?o.reverse():o)}function la(t,e){if(e)return function(){return t.apply(e,arguments)}}sa.prototype.listen=function(t){this.cb=t},sa.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},sa.prototype.onError=function(t){this.errorCbs.push(t)},sa.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(ra(t,Yi.redirected)&&i===Go||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},sa.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,u=function(t){!ra(t)&&na(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},c=t.matched.length-1,s=o.matched.length-1;if(Xo(t,o)&&c===s&&t.matched[c]===o.matched[s])return this.ensureURL(),u(((a=ta(i=o,t,Yi.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var f=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=Gi&&n;r&&this.listeners.push(Ni());var o=function(){var n=t.current,o=da(t.base);t.current===Go&&o===t._startLocation||t.transitionTo(o,(function(t){r&&Di(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Ki(ni(r.base+t.fullPath)),Di(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Ji(ni(r.base+t.fullPath)),Di(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(da(this.base)!==this.current.fullPath){var e=ni(this.base+this.current.fullPath);t?Ki(e):Ji(e)}},e.prototype.getCurrentLocation=function(){return da(this.base)},e}(sa);function da(t){var e=window.location.pathname;return t&&0===e.toLowerCase().indexOf(t.toLowerCase())&&(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var ha=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=da(t);if(!/^\/#/.test(e))return window.location.replace(ni(t+"/#"+e)),!0}(this.base)||va()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=Gi&&e;n&&this.listeners.push(Ni());var r=function(){var e=t.current;va()&&t.transitionTo(ya(),(function(r){n&&Di(t.router,r,e,!0),Gi||ba(r.fullPath)}))},o=Gi?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ga(t.fullPath),Di(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ba(t.fullPath),Di(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;ya()!==e&&(t?ga(e):ba(e))},e.prototype.getCurrentLocation=function(){return ya()},e}(sa);function va(){var t=ya();return"/"===t.charAt(0)||(ba("/"+t),!1)}function ya(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function ma(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function ga(t){Gi?Ki(ma(t)):window.location.hash=t}function ba(t){Gi?Ji(ma(t)):window.location.replace(ma(t))}var _a=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){ra(t,Yi.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(sa),xa=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=$i(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!Gi&&!1!==t.fallback,this.fallback&&(e="hash"),ki||(e="abstract"),this.mode=e,e){case"history":this.history=new pa(this,t.base);break;case"hash":this.history=new ha(this,t.base,this.fallback);break;case"abstract":this.history=new _a(this,t.base);break;default:0}},wa={currentRoute:{configurable:!0}};function Oa(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}xa.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},wa.currentRoute.get=function(){return this.history&&this.history.current},xa.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof pa||n instanceof ha){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;Gi&&o&&"fullPath"in t&&Di(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},xa.prototype.beforeEach=function(t){return Oa(this.beforeHooks,t)},xa.prototype.beforeResolve=function(t){return Oa(this.resolveHooks,t)},xa.prototype.afterEach=function(t){return Oa(this.afterHooks,t)},xa.prototype.onReady=function(t,e){this.history.onReady(t,e)},xa.prototype.onError=function(t){this.history.onError(t)},xa.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},xa.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},xa.prototype.go=function(t){this.history.go(t)},xa.prototype.back=function(){this.go(-1)},xa.prototype.forward=function(){this.go(1)},xa.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},xa.prototype.resolve=function(t,e,n){var r=xi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?ni(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},xa.prototype.getRoutes=function(){return this.matcher.getRoutes()},xa.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==Go&&this.history.transitionTo(this.history.getCurrentLocation())},xa.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==Go&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(xa.prototype,wa),xa.install=function t(e){if(!t.installed||wi!==e){t.installed=!0,wi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",Zo),e.component("RouterLink",ji);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},xa.version="3.5.1",xa.isNavigationFailure=ra,xa.NavigationFailureType=Yi,xa.START_LOCATION=Go,ki&&window.Vue&&window.Vue.use(xa);var ja=xa;n(184),n(185),n(186),n(89),n(188),n(90),n(91),n(189);function Sa(t){t.locales&&Object.keys(t.locales).forEach((function(e){t.locales[e].path=e})),Object.freeze(t)}function ka(t){return(ka="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Ea=n(39),Aa=(n(191),n(60),n(42),n(158),n(159),{NotFound:function(){return n.e(6).then(n.bind(null,350))},Layout:function(){return Promise.all([n.e(0),n.e(2)]).then(n.bind(null,349))}}),$a={"v-3fa1b7ce":function(){return n.e(7).then(n.bind(null,353))},"v-16f7bd48":function(){return n.e(8).then(n.bind(null,354))},"v-22c07ce2":function(){return n.e(11).then(n.bind(null,355))},"v-bc6841f2":function(){return n.e(13).then(n.bind(null,356))},"v-6b88b63a":function(){return n.e(14).then(n.bind(null,357))},"v-4cd21123":function(){return n.e(9).then(n.bind(null,358))},"v-5913b2cf":function(){return n.e(10).then(n.bind(null,359))},"v-6ded6695":function(){return n.e(15).then(n.bind(null,360))},"v-f75119d2":function(){return n.e(12).then(n.bind(null,361))},"v-2491f01e":function(){return n.e(16).then(n.bind(null,362))},"v-5cdd9b6a":function(){return n.e(17).then(n.bind(null,363))},"v-39e74116":function(){return n.e(19).then(n.bind(null,364))},"v-6d3d3ba1":function(){return n.e(18).then(n.bind(null,365))},"v-065c0076":function(){return n.e(20).then(n.bind(null,366))},"v-42f24c35":function(){return n.e(21).then(n.bind(null,367))},"v-a9bbe4d4":function(){return n.e(22).then(n.bind(null,368))},"v-507d7d5f":function(){return n.e(23).then(n.bind(null,369))},"v-18390f56":function(){return n.e(24).then(n.bind(null,370))},"v-5e6a771d":function(){return n.e(25).then(n.bind(null,371))},"v-2c1891b5":function(){return n.e(27).then(n.bind(null,372))},"v-430c31fa":function(){return n.e(26).then(n.bind(null,373))},"v-41f5a8d6":function(){return n.e(28).then(n.bind(null,374))},"v-5e0aaaf5":function(){return n.e(29).then(n.bind(null,375))},"v-2173826d":function(){return n.e(30).then(n.bind(null,376))},"v-3c9d6c16":function(){return n.e(31).then(n.bind(null,377))}};function Ca(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var Pa=/-(\w)/g,Ta=Ca((function(t){return t.replace(Pa,(function(t,e){return e?e.toUpperCase():""}))})),La=/\B([A-Z])/g,Ra=Ca((function(t){return t.replace(La,"-$1").toLowerCase()})),Ia=Ca((function(t){return t.charAt(0).toUpperCase()+t.slice(1)}));function Ma(t,e){if(e)return t(e)?t(e):e.includes("-")?t(Ia(Ta(e))):t(Ia(e))||t(Ra(e))}var Na=Object.assign({},Aa,$a),Da=function(t){return Na[t]},Fa=function(t){return $a[t]},Ua=function(t){return Aa[t]},Ba=function(t){return Ro.component(t)};function za(t){return Ma(Fa,t)}function qa(t){return Ma(Ua,t)}function Va(t){return Ma(Da,t)}function Ha(t){return Ma(Ba,t)}function Wa(){for(var t=arguments.length,e=new Array(t),n=0;n"})).join("\n "):"",this.$ssrContext.canonicalLink=tu(this.$canonicalUrl)}var e},mounted:function(){this.currentMetaTags=Object(Ea.a)(document.querySelectorAll("meta")),this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta:function(){document.title=this.$title,document.documentElement.lang=this.$lang;var t=this.getMergedMetaTags();this.currentMetaTags=eu(t,this.currentMetaTags)},getMergedMetaTags:function(){var t=this.$page.frontmatter.meta||[];return Ya()([{name:"description",content:this.$description}],t,this.siteMeta,nu)},updateCanonicalLink:function(){Za(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",tu(this.$canonicalUrl))}},watch:{$page:function(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy:function(){eu(null,this.currentMetaTags),Za()}};function Za(){var t=document.querySelector("link[rel='canonical']");t&&t.remove()}function tu(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return t?''):""}function eu(t,e){if(e&&Object(Ea.a)(e).filter((function(t){return t.parentNode===document.head})).forEach((function(t){return document.head.removeChild(t)})),t)return t.map((function(t){var e=document.createElement("meta");return Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])})),document.head.appendChild(e),e}))}function nu(t){for(var e=0,n=["name","property","itemprop"];e=u.parentElement.offsetTop+10&&(!c||r2&&void 0!==arguments[2]?arguments[2]:Ro;Sa(e),n.$vuepress.$set("siteData",e);var r=t(n.$vuepress.$get("siteData")),o=new r,i=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(o)),a={};return Object.keys(i).reduce((function(t,e){return e.startsWith("$")&&(t[e]=i[e].get),t}),a),{computed:a}}((function(t){return function(){function e(){vu(this,e)}return mu(e,[{key:"setPage",value:function(t){this.__page=t}},{key:"$site",get:function(){return t}},{key:"$themeConfig",get:function(){return this.$site.themeConfig}},{key:"$frontmatter",get:function(){return this.$page.frontmatter}},{key:"$localeConfig",get:function(){var t,e,n=this.$site.locales,r=void 0===n?{}:n;for(var o in r)"/"===o?e=r[o]:0===this.$page.path.indexOf(o)&&(t=r[o]);return t||e||{}}},{key:"$siteTitle",get:function(){return this.$localeConfig.title||this.$site.title||""}},{key:"$canonicalUrl",get:function(){var t=this.$page.frontmatter.canonicalUrl;return"string"==typeof t&&t}},{key:"$title",get:function(){var t=this.$page,e=this.$page.frontmatter.metaTitle;if("string"==typeof e)return e;var n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}},{key:"$description",get:function(){var t=function(t){if(t){var e=t.filter((function(t){return"description"===t.name}))[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}},{key:"$lang",get:function(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}},{key:"$localePath",get:function(){return this.$localeConfig.path||"/"}},{key:"$themeLocaleConfig",get:function(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}},{key:"$page",get:function(){return this.__page?this.__page:function(t,e){for(var n=0;n

- + diff --git a/docs/docs/.vuepress/dist/deploy/docker.html b/docs/docs/.vuepress/dist/deploy/docker.html index 22ba92ca..274f3d1a 100644 --- a/docs/docs/.vuepress/dist/deploy/docker.html +++ b/docs/docs/.vuepress/dist/deploy/docker.html @@ -8,7 +8,7 @@ - + @@ -81,7 +81,7 @@ Port: 465 Username: qq邮箱账号 Password: 开启SMTP服务后生成的随机授权码 -
1
2
3
4

# 二、分布式部署

  1. 选择好需要安装的位置,运行下面命令

    git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy
    +
    1
    2
    3
    4

    # 二、分布式部署

    注意:主服务器(运行nacos,backend, frontend,redis)的服务器防火墙请开 8848,3306,873端口号

    从服务器(判题机)的防火墙请开8088端口号

    1. 选择好需要安装的位置,运行下面命令

      git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy
       
      1
    2. 进入文件夹

      cd distributed
       
      1

      distributed文件夹有以下:

      ├── judgeserver
       ├── main
      @@ -181,6 +181,6 @@ Password: 开启SMTP服务后生成的随机授权码
             
             →
           

      - + diff --git a/docs/docs/.vuepress/dist/deploy/frontend.html b/docs/docs/.vuepress/dist/deploy/frontend.html index 74bf0f03..a90e2c01 100644 --- a/docs/docs/.vuepress/dist/deploy/frontend.html +++ b/docs/docs/.vuepress/dist/deploy/frontend.html @@ -8,7 +8,7 @@ - + @@ -221,6 +221,6 @@ hoj-frontend →

      - + diff --git a/docs/docs/.vuepress/dist/deploy/index.html b/docs/docs/.vuepress/dist/deploy/index.html index e8a8d472..4aadb388 100644 --- a/docs/docs/.vuepress/dist/deploy/index.html +++ b/docs/docs/.vuepress/dist/deploy/index.html @@ -8,7 +8,7 @@ - + @@ -54,6 +54,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/deploy/judgeserver.html b/docs/docs/.vuepress/dist/deploy/judgeserver.html index 3419b028..66722799 100644 --- a/docs/docs/.vuepress/dist/deploy/judgeserver.html +++ b/docs/docs/.vuepress/dist/deploy/judgeserver.html @@ -8,7 +8,7 @@ - + @@ -175,6 +175,6 @@ java -XX:+UseG1GC -Djava.security.egd=file:/ →

      - + diff --git a/docs/docs/.vuepress/dist/deploy/mysql.html b/docs/docs/.vuepress/dist/deploy/mysql.html index dcd6d4cc..b3556657 100644 --- a/docs/docs/.vuepress/dist/deploy/mysql.html +++ b/docs/docs/.vuepress/dist/deploy/mysql.html @@ -8,7 +8,7 @@ - + @@ -167,6 +167,6 @@ EOF →

      - + diff --git a/docs/docs/.vuepress/dist/deploy/nacos.html b/docs/docs/.vuepress/dist/deploy/nacos.html index 6a9a59e7..9c4f3f7f 100644 --- a/docs/docs/.vuepress/dist/deploy/nacos.html +++ b/docs/docs/.vuepress/dist/deploy/nacos.html @@ -8,7 +8,7 @@ - + @@ -53,6 +53,6 @@ nacos/nacos-server:1.4.2 →

      - + diff --git a/docs/docs/.vuepress/dist/deploy/redis.html b/docs/docs/.vuepress/dist/deploy/redis.html index c684a94d..5f078f2e 100644 --- a/docs/docs/.vuepress/dist/deploy/redis.html +++ b/docs/docs/.vuepress/dist/deploy/redis.html @@ -8,7 +8,7 @@ - + @@ -42,6 +42,6 @@ redis \

      - + diff --git a/docs/docs/.vuepress/dist/deploy/rsync.html b/docs/docs/.vuepress/dist/deploy/rsync.html index 789be33a..a135a2b0 100644 --- a/docs/docs/.vuepress/dist/deploy/rsync.html +++ b/docs/docs/.vuepress/dist/deploy/rsync.html @@ -8,7 +8,7 @@ - + @@ -154,6 +154,6 @@ secrets file =< →

      - + diff --git a/docs/docs/.vuepress/dist/develop/db.html b/docs/docs/.vuepress/dist/develop/db.html index 613bf9f8..3967e302 100644 --- a/docs/docs/.vuepress/dist/develop/db.html +++ b/docs/docs/.vuepress/dist/develop/db.html @@ -8,7 +8,7 @@ - + @@ -77,6 +77,6 @@ BEFORE INSERT ON< →

      - + diff --git a/docs/docs/.vuepress/dist/develop/index.html b/docs/docs/.vuepress/dist/develop/index.html index cafbd10b..7890de06 100644 --- a/docs/docs/.vuepress/dist/develop/index.html +++ b/docs/docs/.vuepress/dist/develop/index.html @@ -8,7 +8,7 @@ - + @@ -37,6 +37,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/develop/sandbox.html b/docs/docs/.vuepress/dist/develop/sandbox.html index d0a78d12..ec8179bf 100644 --- a/docs/docs/.vuepress/dist/develop/sandbox.html +++ b/docs/docs/.vuepress/dist/develop/sandbox.html @@ -8,7 +8,7 @@ - + @@ -250,6 +250,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/index.html b/docs/docs/.vuepress/dist/index.html index f1d843e1..1618f979 100644 --- a/docs/docs/.vuepress/dist/index.html +++ b/docs/docs/.vuepress/dist/index.html @@ -8,7 +8,7 @@ - + @@ -37,6 +37,6 @@

      分布式

      支持多台判题服务随时增减

      高效化

      采用前后端分离,开发迅速,使用高性能可复用判题沙盒

      定制化

      网站高度集中配置,支持定制化修改

      安全化

      判题使用 cgroup 隔离用户程序,网站权限控制完善

      多样化

      独有自身判题服务,同时支持其它知名OJ题目的提交判题

      - + diff --git a/docs/docs/.vuepress/dist/introducition/about.html b/docs/docs/.vuepress/dist/introducition/about.html index 1c445d46..fa3e520e 100644 --- a/docs/docs/.vuepress/dist/introducition/about.html +++ b/docs/docs/.vuepress/dist/introducition/about.html @@ -8,7 +8,7 @@ - + @@ -38,6 +38,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/introducition/index.html b/docs/docs/.vuepress/dist/introducition/index.html index fa971d03..c486bbf7 100644 --- a/docs/docs/.vuepress/dist/introducition/index.html +++ b/docs/docs/.vuepress/dist/introducition/index.html @@ -8,7 +8,7 @@ - + @@ -33,6 +33,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/use/admin-user.html b/docs/docs/.vuepress/dist/use/admin-user.html index 8491fce6..2b21cd0a 100644 --- a/docs/docs/.vuepress/dist/use/admin-user.html +++ b/docs/docs/.vuepress/dist/use/admin-user.html @@ -8,7 +8,7 @@ - + @@ -37,6 +37,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/use/contest.html b/docs/docs/.vuepress/dist/use/contest.html index 136c117a..21f1a629 100644 --- a/docs/docs/.vuepress/dist/use/contest.html +++ b/docs/docs/.vuepress/dist/use/contest.html @@ -8,7 +8,7 @@ - + @@ -37,6 +37,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/use/discussion-admin.html b/docs/docs/.vuepress/dist/use/discussion-admin.html index 7eaca45e..3efd17a0 100644 --- a/docs/docs/.vuepress/dist/use/discussion-admin.html +++ b/docs/docs/.vuepress/dist/use/discussion-admin.html @@ -8,7 +8,7 @@ - + @@ -37,6 +37,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/use/import-problem.html b/docs/docs/.vuepress/dist/use/import-problem.html index 05e31375..aee20f37 100644 --- a/docs/docs/.vuepress/dist/use/import-problem.html +++ b/docs/docs/.vuepress/dist/use/import-problem.html @@ -8,7 +8,7 @@ - + @@ -108,6 +108,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/use/import-user.html b/docs/docs/.vuepress/dist/use/import-user.html index 3e45080e..b6086440 100644 --- a/docs/docs/.vuepress/dist/use/import-user.html +++ b/docs/docs/.vuepress/dist/use/import-user.html @@ -8,7 +8,7 @@ - + @@ -37,6 +37,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/use/index.html b/docs/docs/.vuepress/dist/use/index.html index cae41a24..55309602 100644 --- a/docs/docs/.vuepress/dist/use/index.html +++ b/docs/docs/.vuepress/dist/use/index.html @@ -8,7 +8,7 @@ - + @@ -37,6 +37,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/use/multi-judgeserver.html b/docs/docs/.vuepress/dist/use/multi-judgeserver.html index ba60e223..7eb85da6 100644 --- a/docs/docs/.vuepress/dist/use/multi-judgeserver.html +++ b/docs/docs/.vuepress/dist/use/multi-judgeserver.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@ Github (opens new window)

      # 多个判题机

      # 前言

      不同判题机之间是通过rsync进行数据同步的,所以需要配置相应的rsync服务。

      同时注意以下两点:

      1. 保证rsync-slave服务的密码与主服务rsync-master的数据同步密码一致
      2. rsync-slave服务(判题机服务器)拉取主服务rsync-master的评测数据是每100s一次,所以后台上传评测数据后,需等待大概100s才能正常判题。

      # 单体部署

      如果之前是选择了单体部署,也就是主服务器既有backend和judgeserver服务,那么部署更多不同服务器的判题机应该如下修改:

      1. 在原先运行的服务器上,修改hoj-deploy/standAlone文件夹里面的docker-compose.yml添加以下rsync-master服务,数据同步密码请自行修改,如下:

        hoj-rsync-master:
        +   (opens new window)

        # 多个判题机

        # 前言

        不同判题机之间是通过rsync进行数据同步的,所以需要配置相应的rsync服务。

        同时注意以下两点:

        1. 保证rsync-slave服务的密码与主服务rsync-master的数据同步密码一致
        2. rsync-slave服务(判题机服务器)拉取主服务rsync-master的评测数据是每100s一次,所以后台上传评测数据后,需等待大概100s才能正常判题。

        # 单体部署

        如果之前是选择了单体部署,也就是主服务器既有backend和judgeserver服务,那么部署更多不同服务器的判题机应该如下修改:

        1. 在原先运行的服务器上,修改hoj-deploy/standAlone文件夹里面的docker-compose.yml添加以下rsync-master服务,数据同步密码请自行修改,如下:

          (注意:如果云服务器有防火墙请开启8848,3306,873端口)

          hoj-rsync-master:
               image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_rsync:1.0
               container_name: hoj-rsync-master
               volumes:
          @@ -39,7 +39,7 @@
                 - RSYNC_PASSWORD=hoj123456 # 请修改数据同步密码
               ports:
                 - "0.0.0.0:873:873"
          -
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
        2. 在其它服务器(判题机服务器)中使用docker-compose运行judgeserver服务,具体操作如下:

          1. 下载文件,进入到指定文件夹

            git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy/distributed/judgeserver
            +
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
          2. 在其它服务器(判题机服务器)中使用docker-compose运行judgeserver服务,具体操作如下:

            (注意:如果云服务器有防火墙请开启8088端口号,需要将判题服务暴露出去)

            1. 下载文件,进入到指定文件夹

              git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy/distributed/judgeserver
               
              1
            2. 修改配置.env文件,里面的nacos参数,judgeServer,rsync的参数请正确修改!

              # nacos的配置
               # 修改为nacos所在服务的ip
               NACOS_HOST=NACOS_HOST
              @@ -68,7 +68,9 @@
               # 与主服务器的rsync密码一致
               RSYNC_PASSWORD=hoj123456
               
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              20
              21
              22
              23
              24
              25
              26
              27
            3. 启动即可

              docker-compose up -d
              -
              1

          # 分布式部署

          1. 如果之前已经选择了分布式部署,那么增加判题机,则与原先启动判题机的操作一样即可,在新的服务器上操作如下:

            git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy/distributed/judgeserver
            +
            1
          2. 验证:

            访问 http://ip:8088/version
            +如果返回信息正常即启动成功!
            +
            1
            2

        # 分布式部署

        1. 如果之前已经选择了分布式部署,那么增加判题机,则与原先启动判题机的操作一样即可,在新的服务器上操作如下:

          git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy/distributed/judgeserver
           vim .env
           
          1
          2
        2. 修改.env的配置

          # nacos的配置
           # 修改为nacos所在服务的ip
          @@ -107,6 +109,6 @@
                 
                 →
               

      - + diff --git a/docs/docs/.vuepress/dist/use/spj.html b/docs/docs/.vuepress/dist/use/spj.html index 3c8c1608..5ba9c201 100644 --- a/docs/docs/.vuepress/dist/use/spj.html +++ b/docs/docs/.vuepress/dist/use/spj.html @@ -8,7 +8,7 @@ - + @@ -73,6 +73,6 @@

      - + diff --git a/docs/docs/.vuepress/dist/use/testcase.html b/docs/docs/.vuepress/dist/use/testcase.html index 1d0688d7..a083c01b 100644 --- a/docs/docs/.vuepress/dist/use/testcase.html +++ b/docs/docs/.vuepress/dist/use/testcase.html @@ -8,7 +8,7 @@ - + @@ -45,6 +45,6 @@ →

      - + diff --git a/docs/docs/.vuepress/dist/use/update-fe.html b/docs/docs/.vuepress/dist/use/update-fe.html index 9e8d5c68..4209f9a0 100644 --- a/docs/docs/.vuepress/dist/use/update-fe.html +++ b/docs/docs/.vuepress/dist/use/update-fe.html @@ -8,7 +8,7 @@ - + @@ -55,6 +55,6 @@ →

      - + diff --git a/docs/docs/deploy/docker.md b/docs/docs/deploy/docker.md index abd6f091..4f304206 100644 --- a/docs/docs/deploy/docker.md +++ b/docs/docs/deploy/docker.md @@ -119,6 +119,10 @@ Password: 开启SMTP服务后生成的随机授权码 ## 二、分布式部署 +> 注意:主服务器(运行nacos,backend, frontend,redis)的服务器防火墙请开 **8848,3306,873**端口号 +> +> 从服务器(判题机)的防火墙请开**8088**端口号 + 1. 选择好需要安装的位置,运行下面命令 ```shell diff --git a/docs/docs/use/multi-judgeserver.md b/docs/docs/use/multi-judgeserver.md index 6a06048b..517db017 100644 --- a/docs/docs/use/multi-judgeserver.md +++ b/docs/docs/use/multi-judgeserver.md @@ -15,6 +15,8 @@ 1. 在原先运行的服务器上,修改`hoj-deploy/standAlone`文件夹里面的`docker-compose.yml`,**添加以下rsync-master服务**,数据同步密码请自行修改,如下: + **(注意:如果云服务器有防火墙请开启8848,3306,873端口)** + ```yaml hoj-rsync-master: image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_rsync:1.0 @@ -31,6 +33,10 @@ 2. 在其它服务器(判题机服务器)中使用docker-compose运行judgeserver服务,具体操作如下: + **(注意:如果云服务器有防火墙请开启8088端口号,需要将判题服务暴露出去)** + + + 1. 下载文件,进入到指定文件夹 ```shell @@ -74,8 +80,17 @@ ```shell docker-compose up -d ``` + + 4. 验证: + ``` + 访问 http://ip:8088/version + 如果返回信息正常即启动成功! + ``` + + + ## 分布式部署 @@ -118,6 +133,7 @@ # 与主服务器的rsync密码一致 RSYNC_PASSWORD=hoj123456 ``` + 3. 修改完保存,启动即可。 diff --git a/hoj-springboot/.gitignore b/hoj-springboot/.gitignore index 9fbec3ec..443def43 100644 --- a/hoj-springboot/.gitignore +++ b/hoj-springboot/.gitignore @@ -4,11 +4,15 @@ *.jar *.war *.ear +*.log +*.iml .DS_Store node_modules dist/ target/ +out/ +.idea/ .classpath .project diff --git a/hoj-springboot/.idea/compiler.xml b/hoj-springboot/.idea/compiler.xml index 7b623431..f0216164 100644 --- a/hoj-springboot/.idea/compiler.xml +++ b/hoj-springboot/.idea/compiler.xml @@ -8,8 +8,8 @@ - + diff --git a/hoj-springboot/DataBackup/src/main/java/top/hcode/hoj/controller/admin/FileController.java b/hoj-springboot/DataBackup/src/main/java/top/hcode/hoj/controller/admin/FileController.java index faae5b9b..31b31392 100644 --- a/hoj-springboot/DataBackup/src/main/java/top/hcode/hoj/controller/admin/FileController.java +++ b/hoj-springboot/DataBackup/src/main/java/top/hcode/hoj/controller/admin/FileController.java @@ -8,6 +8,7 @@ import cn.hutool.core.text.UnicodeUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ZipUtil; import cn.hutool.core.io.file.FileWriter; +import cn.hutool.crypto.SecureUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; @@ -165,6 +166,10 @@ public class FileController { .setType("avatar") .setUid(userRolesVo.getUid()); fileService.saveOrUpdate(imgFile); + + // 更新session + userRolesVo.setAvatar(Constants.File.IMG_API.getPath() + filename); + session.setAttribute("userInfo", userRolesVo); return CommonResult.successResponse(MapUtil.builder() .put("uid", userRolesVo.getUid()) .put("username", userRolesVo.getUsername()) diff --git a/hoj-springboot/DataBackup/src/main/java/top/hcode/hoj/controller/oj/AccountController.java b/hoj-springboot/DataBackup/src/main/java/top/hcode/hoj/controller/oj/AccountController.java index b7bf114a..b5a411ca 100644 --- a/hoj-springboot/DataBackup/src/main/java/top/hcode/hoj/controller/oj/AccountController.java +++ b/hoj-springboot/DataBackup/src/main/java/top/hcode/hoj/controller/oj/AccountController.java @@ -445,6 +445,9 @@ public class AccountController { resp.put("msg", "修改密码成功!您将于5秒钟后退出进行重新登录操作!"); // 清空记录 redisUtils.del(countKey); + // 更新session + userRolesVo.setPassword(SecureUtil.md5(newPassword)); + session.setAttribute("userInfo", userRolesVo); return CommonResult.successResponse(resp, "修改密码成功!"); } else { return CommonResult.errorResponse("系统错误:修改密码失败!", CommonResult.STATUS_ERROR); @@ -537,6 +540,9 @@ public class AccountController { .map()); // 清空记录 redisUtils.del(countKey); + // 更新session + userRolesVo.setEmail(newEmail); + session.setAttribute("userInfo", userRolesVo); return CommonResult.successResponse(resp, "修改邮箱成功!"); } else { return CommonResult.errorResponse("系统错误:修改邮箱失败!", CommonResult.STATUS_ERROR); @@ -590,6 +596,10 @@ public class AccountController { boolean result = userInfoDao.updateById(userInfo); if (result) { + // 更新session + UserRolesVo userRoles = userRoleDao.getUserRoles(userRolesVo.getUid(), null); + session.setAttribute("userInfo", userRoles); + return CommonResult.successResponse(MapUtil.builder() .put("uid", userRolesVo.getUid()) .put("username", userRolesVo.getUsername())