From 3f469dec401f644b5d541e0354e5b828e636d460 Mon Sep 17 00:00:00 2001 From: Himit_ZH <372347736@qq.com> Date: Sun, 23 May 2021 22:43:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=83=A8=E7=BD=B2=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/docs/.vuepress/config.js | 10 +- docs/docs/.vuepress/dist/404.html | 6 +- .../.vuepress/dist/assets/js/10.3aec3aff.js | 1 + .../js/{10.783ce582.js => 11.3c715d4b.js} | 2 +- .../js/{11.6f33dd44.js => 12.f5d67101.js} | 2 +- .../js/{12.c3bd2a61.js => 13.1b71fff9.js} | 2 +- .../js/{13.2df39f84.js => 14.cd5e7136.js} | 2 +- .../js/{14.af2ecfbc.js => 15.618bada7.js} | 2 +- .../.vuepress/dist/assets/js/15.9983a763.js | 1 - .../.vuepress/dist/assets/js/16.39b5f0a9.js | 1 + .../js/{16.782db258.js => 17.1781a0fd.js} | 2 +- .../js/{17.04124198.js => 18.42d5a6b0.js} | 2 +- .../.vuepress/dist/assets/js/19.28b0b6dd.js | 1 + .../js/{18.efedf33a.js => 20.4049e044.js} | 2 +- .../.vuepress/dist/assets/js/20.c7d201d0.js | 1 - .../.vuepress/dist/assets/js/21.3709f65f.js | 1 - .../js/{19.b75b0a6f.js => 21.3dac3195.js} | 2 +- .../.vuepress/dist/assets/js/22.5a29a611.js | 1 + .../.vuepress/dist/assets/js/22.ecbb6d60.js | 1 - .../.vuepress/dist/assets/js/23.6fc11064.js | 1 + .../.vuepress/dist/assets/js/24.541271c6.js | 1 + .../.vuepress/dist/assets/js/25.d102b518.js | 1 + .../.vuepress/dist/assets/js/26.2bf4f42a.js | 1 + .../.vuepress/dist/assets/js/27.62d662fe.js | 1 + .../.vuepress/dist/assets/js/28.8e2b6aba.js | 1 + .../js/{3.7cbf67d2.js => 3.068e2e40.js} | 2 +- .../.vuepress/dist/assets/js/8.b161b559.js | 1 - .../.vuepress/dist/assets/js/8.d67efa58.js | 1 + .../js/{9.807c9668.js => 9.f68a10a9.js} | 2 +- .../js/{app.658a191c.js => app.af16b29f.js} | 6 +- docs/docs/.vuepress/dist/deploy/backend.html | 6 +- docs/docs/.vuepress/dist/deploy/docker.html | 179 +++++++++++ docs/docs/.vuepress/dist/deploy/frontend.html | 10 +- docs/docs/.vuepress/dist/deploy/index.html | 40 +-- .../.vuepress/dist/deploy/judgeserver.html | 6 +- docs/docs/.vuepress/dist/deploy/mysql.html | 8 +- docs/docs/.vuepress/dist/deploy/nacos.html | 8 +- docs/docs/.vuepress/dist/deploy/redis.html | 8 +- docs/docs/.vuepress/dist/deploy/rsync.html | 8 +- docs/docs/.vuepress/dist/develop/db.html | 10 +- docs/docs/.vuepress/dist/develop/index.html | 6 +- .../dist/{use => develop}/sandbox.html | 12 +- docs/docs/.vuepress/dist/index.html | 4 +- .../.vuepress/dist/introducition/about.html | 4 +- .../.vuepress/dist/introducition/index.html | 4 +- docs/docs/.vuepress/dist/use/contest.html | 38 +++ .../.vuepress/dist/use/discussion-admin.html | 38 +++ .../.vuepress/dist/use/import-problem.html | 38 +++ docs/docs/.vuepress/dist/use/import-user.html | 38 +++ docs/docs/.vuepress/dist/use/index.html | 12 +- docs/docs/.vuepress/dist/use/spj.html | 10 +- docs/docs/.vuepress/dist/use/testcase.html | 46 +++ docs/docs/deploy/README.md | 107 +------ docs/docs/deploy/docker.md | 291 ++++++++++++++++++ docs/docs/deploy/redis.md | 2 +- docs/docs/deploy/rsync.md | 2 +- docs/docs/{use => develop}/sandbox.md | 4 +- docs/docs/use/README.md | 6 +- docs/docs/use/contest.md | 24 ++ docs/docs/use/discussion-admin.md | 12 + docs/docs/use/import-problem.md | 32 ++ docs/docs/use/import-user.md | 16 + docs/docs/use/spj.md | 15 + docs/docs/use/testcase.md | 37 +++ ...78bcfc44d86b247fde54e1d87393ecd494a2d85bac | 1 + ...46170c1bb79ee88bf9326a0f04c55e122021bf8123 | 1 + ...fe27604e28500be64642b9d77b2216d096f2eb8f84 | 1 + ...031dee39737ba086e9c5b7becbc1a15cde9efce38d | 1 + ...9ceb45449960c166ae60dd94b58f9ea6571e18f373 | 1 + ...e10596165d5b90b626fe70150ba23497cb9c365e08 | 1 + ...3519438ee363be53df531746d64a924dae44e32c77 | 1 + ...1ac121407bdfb09ed8ac173ef2f814e1b54fe94f6a | 1 + ...bef802e054c9d88d52266933a001ead4b71d4c7118 | 1 + ...28fb2dc99258d70af4487b918512b986c4e0893983 | 1 + ...78b1bdf4b2d5df20efcb1918af0f05462c4514ac33 | 1 + ...a875cab8aa01bbbe91a8004b88a11b9b68c4adaae9 | 1 + ...192bb223c0a9a623709514de63610d2eac640f8c51 | 1 + ...d90591ab322d797cd06faf1c7561ceeb4c82e0d249 | 1 + ...f1f03611040697244e2a2b587a0a39322316c4ba4a | 1 + ...e856c239a72c109599710cdf0eaf033512e10cc599 | 1 + ...c07315c28c922a70b4b010b326079dcdcc0ab4be60 | 1 + ...87ebe4d23fcf9b94dc77084c59b73a5b94f2f583d8 | 1 + ...c0a4a31dd8bb43ce9cce6a3d786d11a4058ca182e1 | 1 + ...0157e05cfcb23afae1f18638905c6fe01e38863315 | 1 + ...c8eeb216414af2c2ffc3255d46206c589023cec3c9 | 1 + ...f4aa9998ff60ae694c1e2d97bc7cfb219836435c5b | 1 + ...a837280005ffcc29693e5bdaba55578100ff47e5db | 2 + ...3c55f7f9be15e90f171996c1551031f4dca2915a6a | 2 + ...1b4d95e6bde42a5725be388422fd4c0c5b5d31a7ac | 2 + ...0214df944763ab181249f867e5e790c18bafb1cd70 | 2 + ...aae3b15904bd5b01c76999c00504130a69999ed1cf | 2 + ...767f28dacf17e9c007a6244457c308f1f142d074cc | 2 + ...2573a136b04af458a3d0bacc15a5c2ebed7a693e7f | 2 + ...49783d298eba817c03bef6f57a4f8c98b658bfa079 | 2 + ...040d0c8a1bf89b0f531d1abcb29adaad2e6195a067 | 2 + ...29ef9665c44cb22c84a5a65ee6d41ef152943e8f4f | 2 + ...50be10038cb707cd3c79d1756360f9987c99e81e6d | 2 + ...32a69a80899412cd57e28f6529d5a48a466e9f8349 | 2 + ...f0a5cee729a37d1e5395c1b6f9b6e3aa626eccacbf | 2 + ...3bc62fe5e13da9d7a0d0cdae5d069706bc1cc00a87 | 2 + ...a931d06df422fb66570b6f0fa12824bce86af1f902 | 2 + ...ddb9d602e088e6c518ee9ddd690bf53e2682f99d87 | 2 + ...25f64dac59097b66cdcb6427842b6068816ae52840 | 2 + ...38b319ab61eec9344dc1065d13ed8d737365a741d9 | 2 + ...90e66a8e5c08ca330b1fa9631277e02bbbdae8ecbf | 2 + ...470e9fe2719c83f13dc81c45e844184b6a12412063 | 2 + ...3e9e3917d29040fed2f7133d0a74fcd0c6204677e9 | 2 + ...ec0489d9dc24c698844b65ab037284df2b8669902f | 2 + 108 files changed, 980 insertions(+), 227 deletions(-) create mode 100644 docs/docs/.vuepress/dist/assets/js/10.3aec3aff.js rename docs/docs/.vuepress/dist/assets/js/{10.783ce582.js => 11.3c715d4b.js} (99%) rename docs/docs/.vuepress/dist/assets/js/{11.6f33dd44.js => 12.f5d67101.js} (99%) rename docs/docs/.vuepress/dist/assets/js/{12.c3bd2a61.js => 13.1b71fff9.js} (99%) rename docs/docs/.vuepress/dist/assets/js/{13.2df39f84.js => 14.cd5e7136.js} (97%) rename docs/docs/.vuepress/dist/assets/js/{14.af2ecfbc.js => 15.618bada7.js} (87%) delete mode 100644 docs/docs/.vuepress/dist/assets/js/15.9983a763.js create mode 100644 docs/docs/.vuepress/dist/assets/js/16.39b5f0a9.js rename docs/docs/.vuepress/dist/assets/js/{16.782db258.js => 17.1781a0fd.js} (78%) rename docs/docs/.vuepress/dist/assets/js/{17.04124198.js => 18.42d5a6b0.js} (99%) create mode 100644 docs/docs/.vuepress/dist/assets/js/19.28b0b6dd.js rename docs/docs/.vuepress/dist/assets/js/{18.efedf33a.js => 20.4049e044.js} (99%) delete mode 100644 docs/docs/.vuepress/dist/assets/js/20.c7d201d0.js delete mode 100644 docs/docs/.vuepress/dist/assets/js/21.3709f65f.js rename docs/docs/.vuepress/dist/assets/js/{19.b75b0a6f.js => 21.3dac3195.js} (98%) create mode 100644 docs/docs/.vuepress/dist/assets/js/22.5a29a611.js delete mode 100644 docs/docs/.vuepress/dist/assets/js/22.ecbb6d60.js create mode 100644 docs/docs/.vuepress/dist/assets/js/23.6fc11064.js create mode 100644 docs/docs/.vuepress/dist/assets/js/24.541271c6.js create mode 100644 docs/docs/.vuepress/dist/assets/js/25.d102b518.js create mode 100644 docs/docs/.vuepress/dist/assets/js/26.2bf4f42a.js create mode 100644 docs/docs/.vuepress/dist/assets/js/27.62d662fe.js create mode 100644 docs/docs/.vuepress/dist/assets/js/28.8e2b6aba.js rename docs/docs/.vuepress/dist/assets/js/{3.7cbf67d2.js => 3.068e2e40.js} (75%) delete mode 100644 docs/docs/.vuepress/dist/assets/js/8.b161b559.js create mode 100644 docs/docs/.vuepress/dist/assets/js/8.d67efa58.js rename docs/docs/.vuepress/dist/assets/js/{9.807c9668.js => 9.f68a10a9.js} (99%) rename docs/docs/.vuepress/dist/assets/js/{app.658a191c.js => app.af16b29f.js} (57%) create mode 100644 docs/docs/.vuepress/dist/deploy/docker.html rename docs/docs/.vuepress/dist/{use => develop}/sandbox.html (87%) create mode 100644 docs/docs/.vuepress/dist/use/contest.html create mode 100644 docs/docs/.vuepress/dist/use/discussion-admin.html create mode 100644 docs/docs/.vuepress/dist/use/import-problem.html create mode 100644 docs/docs/.vuepress/dist/use/import-user.html create mode 100644 docs/docs/.vuepress/dist/use/testcase.html create mode 100644 docs/docs/deploy/docker.md rename docs/docs/{use => develop}/sandbox.md (94%) create mode 100644 docs/docs/use/contest.md create mode 100644 docs/docs/use/discussion-admin.md create mode 100644 docs/docs/use/import-problem.md create mode 100644 docs/docs/use/import-user.md create mode 100644 docs/docs/use/testcase.md create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/06/e2/46125ede920c5a28793d551f945424042649dd30bec1f1fd193e3deabb1f32e4e8ed75c6b73b020edf78bcfc44d86b247fde54e1d87393ecd494a2d85bac create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1d/fd/055a59badffb96eb3f0454a1fc3fcb9ec2c7ffc2a3dfc46bc0360c1ddb36b5a4e08e714f9afaa8ce7a46170c1bb79ee88bf9326a0f04c55e122021bf8123 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/21/e0/4da43e1f2a91021c0445e83072acdddfe9d7ed81ab28d50b14033923d021479bf537623818ea3fd86dfe27604e28500be64642b9d77b2216d096f2eb8f84 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/27/50/a83dd7090c6bcca27f7b4f2b5c08054a2c0495cca3163e7abe2cc3f6715aacf0f1223676ee6ca61d0c031dee39737ba086e9c5b7becbc1a15cde9efce38d create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/43/81/ca38460ea69417c3af17f968e1e62158622dd53a3d52a23883fb8831681002501633c231afd8a9b10b9ceb45449960c166ae60dd94b58f9ea6571e18f373 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/4c/aa/4e8d831c19f573621952b4aeee7b19f80e3d6f5bffce18029d50936bd2db31d6b86f8ed29352833f1de10596165d5b90b626fe70150ba23497cb9c365e08 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/50/bf/f7888fdaab3058158376f45da39d575539be9b2f04c722c5727080bc14a3537703e00035f9ab7067973519438ee363be53df531746d64a924dae44e32c77 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/55/88/a3c0847cda4a453b053e46eaef6a510676a230acf9b519722a0ff677469a419c25544d9bdae3afebe51ac121407bdfb09ed8ac173ef2f814e1b54fe94f6a create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/58/e1/8fefc723574c5fa359bfff7a07bd83031c08b9f9464bf244951dadb6ea38564f78dc2910bee737dd61bef802e054c9d88d52266933a001ead4b71d4c7118 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/65/2a/b8a2adad0d5cb0570cc32cb8ac9112f21731085afeb412b53b484864556d0c48547f4d34fd5d17912728fb2dc99258d70af4487b918512b986c4e0893983 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/69/b2/e4a8af58d0f94dc09eb344ce9799dfb0c7f29226a87974ab0acec9b07e2a55cede633eb0776981ff4278b1bdf4b2d5df20efcb1918af0f05462c4514ac33 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/7a/50/a6ba5968c2aa29804325732ad749c5a11d8273769b75193fbcd1a957f075c0c75dd8280e0d5f8615c1a875cab8aa01bbbe91a8004b88a11b9b68c4adaae9 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/7e/a0/1bcf4326b99e81e78e6185ef3975ce086cbf11cc7b15265d81fdd1a87e41909e52a6c66b35b66cb924192bb223c0a9a623709514de63610d2eac640f8c51 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/80/78/f128af89c43f94c80cc7515f5b0ca7a43376579726721d2e71b48460dbe16f96d5e641a3a6cd9db33dd90591ab322d797cd06faf1c7561ceeb4c82e0d249 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/9c/d9/0fbf10b4b00c96ea72eef93e4cf6e202d8246aeb2c3afdd2026680a5a3b31590a98f3967ffc60cbf7ef1f03611040697244e2a2b587a0a39322316c4ba4a create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a4/3d/66f269365f13dd9b52a60c78ae319db6663f8c3ad379041ac2eca103de482ec8b020d934653bf2a44be856c239a72c109599710cdf0eaf033512e10cc599 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a8/33/b9e677826914bbaf6ba3353f7701768f1395e458b0924702e1a7d53723194268fcf348a9dede276b5dc07315c28c922a70b4b010b326079dcdcc0ab4be60 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/af/78/1b4cd2b34e5456804c35703d0c489d2bf9fa4a9cb41aa76966c954f86f820d5906840b829ffdbc5fff87ebe4d23fcf9b94dc77084c59b73a5b94f2f583d8 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c9/49/35076f3ec263f6769318461aa207872f7b43e6d7ad4ec2429bc2b2f853bcf05bdbe22fb56f3d1ffa51c0a4a31dd8bb43ce9cce6a3d786d11a4058ca182e1 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e0/bd/32026daf4601f7585f768886588e85ddc565b1c14d6f704413956e9591398793b82f2408071203789c0157e05cfcb23afae1f18638905c6fe01e38863315 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ed/7f/8203f522b0b3e24388e342c4cb14481e7f2b4091aabb03761822efe227419e4fb0595e25529c60fca6c8eeb216414af2c2ffc3255d46206c589023cec3c9 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f2/04/d01377218836b480d1f73bb0a9d2239f1e265936c62386e8accdca1b739d56254c44d773ba4a56d09bf4aa9998ff60ae694c1e2d97bc7cfb219836435c5b create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/0a/20/c10146d926a60013b5a837280005ffcc29693e5bdaba55578100ff47e5db create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/15/7b/69ccae71b90913f9b23c55f7f9be15e90f171996c1551031f4dca2915a6a create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/17/f1/19851af6d12d5de0511b4d95e6bde42a5725be388422fd4c0c5b5d31a7ac create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/1b/96/814f4f4b3fd99190660214df944763ab181249f867e5e790c18bafb1cd70 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/28/77/c5177404fe8d67a9c1aae3b15904bd5b01c76999c00504130a69999ed1cf create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/2d/fe/2b012120903e7b5e88767f28dacf17e9c007a6244457c308f1f142d074cc create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/3a/5c/363f94ef98675385a42573a136b04af458a3d0bacc15a5c2ebed7a693e7f create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/3f/1a/770dbc52133104710049783d298eba817c03bef6f57a4f8c98b658bfa079 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/42/17/630f7d4d7a3acc3be9040d0c8a1bf89b0f531d1abcb29adaad2e6195a067 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/4f/4b/ec4afb7bdb469a7c9229ef9665c44cb22c84a5a65ee6d41ef152943e8f4f create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/57/9b/9099a157b0b12e8a8650be10038cb707cd3c79d1756360f9987c99e81e6d create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/6e/d4/cf3d6ff898e2ee672932a69a80899412cd57e28f6529d5a48a466e9f8349 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/6f/0d/692fc3eeb072630a02f0a5cee729a37d1e5395c1b6f9b6e3aa626eccacbf create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/7c/53/4fc926071a6453e9073bc62fe5e13da9d7a0d0cdae5d069706bc1cc00a87 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/81/c3/b215510b3c2b905e80a931d06df422fb66570b6f0fa12824bce86af1f902 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/86/fd/da307b82e2ffd0e524ddb9d602e088e6c518ee9ddd690bf53e2682f99d87 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/91/ca/023fe7e185826b292c25f64dac59097b66cdcb6427842b6068816ae52840 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/97/e5/7f5b1917679245068138b319ab61eec9344dc1065d13ed8d737365a741d9 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/9c/97/39b8a856bc5ca77cb490e66a8e5c08ca330b1fa9631277e02bbbdae8ecbf create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/c3/f6/5632b8ec34e1337c1b470e9fe2719c83f13dc81c45e844184b6a12412063 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/f5/ec/18c51aaa9c1d4bcc8a3e9e3917d29040fed2f7133d0a74fcd0c6204677e9 create mode 100644 docs/node_modules/.cache/terser-webpack-plugin/index-v5/f9/1d/8a5e9dad3c58c96892ec0489d9dc24c698844b65ab037284df2b8669902f diff --git a/docs/docs/.vuepress/config.js b/docs/docs/.vuepress/config.js index 07b024da..6e98ce7e 100644 --- a/docs/docs/.vuepress/config.js +++ b/docs/docs/.vuepress/config.js @@ -30,6 +30,7 @@ module.exports = { collapsable: true, children: [ 'deploy/', + 'deploy/docker', 'deploy/frontend', 'deploy/mysql', 'deploy/redis', @@ -44,7 +45,8 @@ module.exports = { collapsable: true, children: [ 'develop/', - 'develop/db' + 'develop/db', + 'develop/sandbox' ] }, { @@ -52,7 +54,11 @@ module.exports = { collapsable: true, children: [ 'use/', - 'use/sandbox', + 'use/testcase', + 'use/contest', + 'use/import-problem', + 'use/import-user', + 'use/discussion-admin', 'use/spj' ] }, diff --git a/docs/docs/.vuepress/dist/404.html b/docs/docs/.vuepress/dist/404.html index ec0d11c2..4de1dfaf 100644 --- a/docs/docs/.vuepress/dist/404.html +++ b/docs/docs/.vuepress/dist/404.html @@ -8,13 +8,13 @@ - + -

404

Looks like we've got some broken links.
+ - + diff --git a/docs/docs/.vuepress/dist/assets/js/10.3aec3aff.js b/docs/docs/.vuepress/dist/assets/js/10.3aec3aff.js new file mode 100644 index 00000000..5a198e35 --- /dev/null +++ b/docs/docs/.vuepress/dist/assets/js/10.3aec3aff.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{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:"快速部署"}},[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 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")])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/10.783ce582.js b/docs/docs/.vuepress/dist/assets/js/11.3c715d4b.js similarity index 99% rename from docs/docs/.vuepress/dist/assets/js/10.783ce582.js rename to docs/docs/.vuepress/dist/assets/js/11.3c715d4b.js index 38cc0d95..8b986677 100644 --- a/docs/docs/.vuepress/dist/assets/js/10.783ce582.js +++ b/docs/docs/.vuepress/dist/assets/js/11.3c715d4b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{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 key atrule"}},[s._v("image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" registry.cn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("shenzhen.aliyuncs.com/hcode/hoj_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("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 +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{357: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 key atrule"}},[s._v("image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" registry.cn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("shenzhen.aliyuncs.com/hcode/hoj_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("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/11.6f33dd44.js b/docs/docs/.vuepress/dist/assets/js/12.f5d67101.js similarity index 99% rename from docs/docs/.vuepress/dist/assets/js/11.6f33dd44.js rename to docs/docs/.vuepress/dist/assets/js/12.f5d67101.js index 379e6e28..f40f4a3a 100644 --- a/docs/docs/.vuepress/dist/assets/js/11.6f33dd44.js +++ b/docs/docs/.vuepress/dist/assets/js/12.f5d67101.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{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:"判题服务部署"}},[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 +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{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("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/12.c3bd2a61.js b/docs/docs/.vuepress/dist/assets/js/13.1b71fff9.js similarity index 99% rename from docs/docs/.vuepress/dist/assets/js/12.c3bd2a61.js rename to docs/docs/.vuepress/dist/assets/js/13.1b71fff9.js index ac5083be..417d887c 100644 --- a/docs/docs/.vuepress/dist/assets/js/12.c3bd2a61.js +++ b/docs/docs/.vuepress/dist/assets/js/13.1b71fff9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{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:"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 +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{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:"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/13.2df39f84.js b/docs/docs/.vuepress/dist/assets/js/14.cd5e7136.js similarity index 97% rename from docs/docs/.vuepress/dist/assets/js/13.2df39f84.js rename to docs/docs/.vuepress/dist/assets/js/14.cd5e7136.js index 816b6958..3c9460bc 100644 --- a/docs/docs/.vuepress/dist/assets/js/13.2df39f84.js +++ b/docs/docs/.vuepress/dist/assets/js/14.cd5e7136.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{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:"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 +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{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:"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/14.af2ecfbc.js b/docs/docs/.vuepress/dist/assets/js/15.618bada7.js similarity index 87% rename from docs/docs/.vuepress/dist/assets/js/14.af2ecfbc.js rename to docs/docs/.vuepress/dist/assets/js/15.618bada7.js index 7f0ff3a9..1a2704bf 100644 --- a/docs/docs/.vuepress/dist/assets/js/14.af2ecfbc.js +++ b/docs/docs/.vuepress/dist/assets/js/15.618bada7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{361:function(s,a,t){"use strict";t.r(a);var r=t(41),e=Object(r.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=e.exports}}]); \ No newline at end of file +(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/15.9983a763.js b/docs/docs/.vuepress/dist/assets/js/15.9983a763.js deleted file mode 100644 index 4989e265..00000000 --- a/docs/docs/.vuepress/dist/assets/js/15.9983a763.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{360:function(s,a,n){"use strict";n.r(a);var t=n(41),e=Object(t.a)({},(function(){var s=this,a=s.$createElement,n=s._self._c||a;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h1",{attrs:{id:"评测数据同步"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#评测数据同步"}},[s._v("#")]),s._v(" 评测数据同步")]),s._v(" "),n("h2",{attrs:{id:"一、常规部署"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#一、常规部署"}},[s._v("#")]),s._v(" 一、常规部署")]),s._v(" "),n("ol",[n("li",[n("p",[s._v("在主后台服务开启rsync实现服务增量同步,本HOJ使用子服务器主动拉取最新评测数据的功能(可选择主服务推的功能,但对主服务器的功耗较大)")])]),s._v(" "),n("li",[n("p",[s._v("首先在主服务器(运行后端服务)的服务器中配置,指令如下")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/rsyncd/rsyncd.conf "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 新建配置文件")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 将以下内容写入的rsyncd.conf文件里面 然后保存退出")]),s._v("\nport "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("873")]),s._v("\nuid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" root\ngid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" root\nuse "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("chroot")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("read")]),s._v(" only "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\nlog "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("file")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /hoj/log/rsyncd.log\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("testcase"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\npath "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /hoj/testcase/\nlist "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\nauth "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("users")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" hojrsync\nsecrets "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("file")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /etc/rsyncd/rsyncd.passwd\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br")])]),n("p",[s._v("再新建密码配置文件")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/rsyncd/rsyncd.passwd\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 将以下内容写入rsyncd.passwd文件里面,冒号后面的密码可用自定义,然后保存退出。")]),s._v("\nhojrsync:123456\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[s._v("修改密码配置文件的权限为600")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("chmod")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("600")]),s._v(" /etc/rsyncd/rsyncd.passwd\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[s._v("然后使用命令,使用后台守护进程运行rsync")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("rsync")]),s._v(" --daemon --config"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/etc/rsyncd/rsyncd.conf\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[s._v("设置开启自启动")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf"')]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /etc/rc.local\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])])]),s._v(" "),n("li",[n("p",[s._v("之后在运行JudgeServer判题服务的服务器上使用rsync每60秒同步一次指定文件夹的评测数据(同步周期可自己改)")]),s._v(" "),n("p",[s._v("新建密码配置文件,同时写入与主服务端的rsync一样的密码")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/rsyncd/rsyncd.passwd\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token number"}},[s._v("123456")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 保存退出")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[s._v("修改密码配置文件的权限为600")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("chmod")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("600")]),s._v(" /etc/rsyncd/rsyncd.passwd\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[s._v("然后编写sh文件")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/rsyncd/rsyncd_slave.sh\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[s._v("注意${ip}写自己主服务器的ip")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("do")]),s._v("\n \t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("rsync")]),s._v(" -avz --delete --progress --password-file"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/etc/rsyncd/rsyncd.passwd hojrsync@"),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("${ip}")]),s._v("::testcase /hoj/testcase "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /hoj/log/rsync_slave.log\n \t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sleep")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("60")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("done")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br")])]),n("p",[s._v("使用 nohup后台运行即可")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("nohup")]),s._v(" /etc/rsyncd/rsyncd_slave.sh "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])])])]),s._v(" "),n("h2",{attrs:{id:"二、docker部署"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#二、docker部署"}},[s._v("#")]),s._v(" 二、docker部署")]),s._v(" "),n("h3",{attrs:{id:"前言"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#前言"}},[s._v("#")]),s._v(" 前言")]),s._v(" "),n("p",[s._v("直接下载部署项目,进入到当前文件夹执行打包命令")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" clone https://gitee.com/himitzh0730/hoj-deploy.git "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" hoj-deploy/src/rsync\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[s._v("当前文件夹为打包"),n("code",[s._v("hoj-rsync")]),s._v("镜像的相关文件,将这些文件复制到同一个文件夹内,之后执行以下命令进行打包成镜像.")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[s._v("docker build -t hoj-rsync "),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[n("strong",[s._v("该服务用于测试用例数据在不同服务器之间的同步")])]),s._v(" "),n("p",[s._v("docker run启动")]),s._v(" "),n("ul",[n("li",[n("p",[s._v("主服务器(Backend所在服务器)")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[s._v("docker run -d --name hoj-rsync "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-v ./hoj/testcase:/hoj/testcase:ro "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),n("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_MODE")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("master "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),n("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_USER")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("hojrsync "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),n("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_PASSWORD")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("hoj123456 "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-p "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("873")]),s._v(":873 "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--restart"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("always "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\nhoj-rsync\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# registry.cn-shenzhen.aliyuncs.com/hcode/hoj_rsync:1.0")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])])]),s._v(" "),n("li",[n("p",[s._v("从服务器(Judgeserver所在的服务器)")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[s._v("docker run -d --name hoj-rsync "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-v ./hoj/testcase:/hoj/testcase "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),n("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_MODE")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("slave "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),n("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_USER")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("hojrsync "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),n("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_PASSWORD")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("hoj123456 "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-e "),n("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("RSYNC_MASTER_ADDR")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("master_server_ip "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n-p "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("873")]),s._v(":873 "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--restart"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("always "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\nhoj-rsync\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# registry.cn-shenzhen.aliyuncs.com/hcode/hoj_rsync:1.0")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br")])])])]),s._v(" "),n("p",[s._v("docker-compose启动")]),s._v(" "),n("ul",[n("li",[n("p",[s._v("主服务器(Backend所在服务器)")]),s._v(" "),n("div",{staticClass:"language-yaml line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-yaml"}},[n("code",[n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("version")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3"')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("services")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-rsync-master")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_rsync:1.0")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("rsync\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("rsync"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("master\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("volumes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./hoj/testcase"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/hoj/testcase"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("ro\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("environment")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_MODE=master "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 当前为slave主服务")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_USER=hojrsync "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 请勿修改")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_PASSWORD=hoj123456 "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 请修改数据同步密码")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ports")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0.0.0.0:873:873"')]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])])]),s._v(" "),n("li",[n("p",[s._v("从服务器(Judgeserver所在的服务器)")]),s._v(" "),n("div",{staticClass:"language-yaml line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-yaml"}},[n("code",[n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("version")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3"')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("services")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("hoj-rsync-slave")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_rsync:1.0")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("rsync\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" hoj"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("rsync"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("slave\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("volumes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./judge/test_case"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/hoj/testcase\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./judge/log"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/hoj/log\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("environment")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_MODE=slave "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 当前为slave从服务")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_USER=hojrsync "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 请勿修改")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_PASSWORD=hoj123456 "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 与主服务器的rsync的密码一致")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" RSYNC_MASTER_ADDR=master_server_ip "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 主服务器ip")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("ports")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0.0.0.0:873:873"')]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br")])])])]),s._v(" "),n("p",[s._v("###文件介绍")]),s._v(" "),n("h4",{attrs:{id:"_1-rsync-conf"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_1-rsync-conf"}},[s._v("#")]),s._v(" 1. rsync.conf")]),s._v(" "),n("p",[s._v("主服务器的rsync配置文件")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[s._v("port "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("873")]),s._v("\nuid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" root\ngid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" root\nuse "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("chroot")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("read")]),s._v(" only "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\nlog "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("file")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /hoj/log/rsyncd.log\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("testcase"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\npath "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /hoj/testcase/\nlist "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\nauth "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("users")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" hojrsync\nsecrets "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("file")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /hoj/rsyncd/rsyncd.passwd\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("h4",{attrs:{id:"_2-run-sh"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_2-run-sh"}},[s._v("#")]),s._v(" 2. run.sh")]),s._v(" "),n("p",[s._v("根据"),n("code",[s._v("$RSYNC_MODE")]),s._v("环境变量启动不同模式的rsync服务")]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token shebang important"}},[s._v("#!/usr/bin/bash")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_MODE")]),s._v('"')]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"master"')]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("then")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_USER")]),s._v(":"),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_PASSWORD")]),s._v('"')]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /hoj/rsyncd/rsyncd_master.passwd\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("chmod")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("600")]),s._v(" /hoj/rsyncd/rsyncd_master.passwd\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("rsync")]),s._v(" --daemon --config"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/hoj/rsyncd/rsyncd.conf\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_PASSWORD")]),s._v('"')]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /hoj/rsyncd/rsyncd_slave.passwd\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("chmod")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("600")]),s._v(" /hoj/rsyncd/rsyncd_slave.passwd\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("do")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("rsync")]),s._v(" -avz --delete --progress --password-file"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/hoj/rsyncd/rsyncd_slave.passwd "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_USER")]),s._v("@"),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$RSYNC_MASTER_ADDR")]),s._v("::testcase /hoj/testcase "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /hoj/log/rsync_slave.log\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sleep")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("done")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("fi")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])]),n("h4",{attrs:{id:"_3-dockerfile"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-dockerfile"}},[s._v("#")]),s._v(" 3. Dockerfile")]),s._v(" "),n("div",{staticClass:"language-dockerfile line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-dockerfile"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("FROM")]),s._v(" ubuntu"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("18.04\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" apt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("get update && apt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("get "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("y install rsync\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("RUN")]),s._v(" mkdir "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("p /hoj/rsyncd\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" run.sh /hoj/rsyncd/run.sh\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("COPY")]),s._v(" rsyncd.conf /hoj/rsyncd/rsyncd.conf\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("CMD")]),s._v(" /bin/bash /hoj/rsyncd/run.sh\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/16.39b5f0a9.js b/docs/docs/.vuepress/dist/assets/js/16.39b5f0a9.js new file mode 100644 index 00000000..c7623bd2 --- /dev/null +++ b/docs/docs/.vuepress/dist/assets/js/16.39b5f0a9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{363: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/16.782db258.js b/docs/docs/.vuepress/dist/assets/js/17.1781a0fd.js similarity index 78% rename from docs/docs/.vuepress/dist/assets/js/16.782db258.js rename to docs/docs/.vuepress/dist/assets/js/17.1781a0fd.js index cac7331e..386b1aab 100644 --- a/docs/docs/.vuepress/dist/assets/js/16.782db258.js +++ b/docs/docs/.vuepress/dist/assets/js/17.1781a0fd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{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 +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{364: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/17.04124198.js b/docs/docs/.vuepress/dist/assets/js/18.42d5a6b0.js similarity index 99% rename from docs/docs/.vuepress/dist/assets/js/17.04124198.js rename to docs/docs/.vuepress/dist/assets/js/18.42d5a6b0.js index 742619ef..9b27c813 100644 --- a/docs/docs/.vuepress/dist/assets/js/17.04124198.js +++ b/docs/docs/.vuepress/dist/assets/js/18.42d5a6b0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{362: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("submissions")]),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("total_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("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("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("isRemoveEndBlank")]),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("openCaseResult")]),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("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("problem_count表")]),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("pid")]),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("total")]),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("ac")]),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("mle")]),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("tle")]),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("re")]),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("pe")]),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("ce")]),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("wa")]),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("se")]),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("pa")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("该IO题目分数总和")])]),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("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 +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{362: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("submissions")]),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("total_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("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("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("isRemoveEndBlank")]),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("openCaseResult")]),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("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("problem_count表")]),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("pid")]),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("total")]),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("ac")]),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("mle")]),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("tle")]),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("re")]),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("pe")]),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("ce")]),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("wa")]),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("se")]),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("pa")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("该IO题目分数总和")])]),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("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.28b0b6dd.js b/docs/docs/.vuepress/dist/assets/js/19.28b0b6dd.js new file mode 100644 index 00000000..1e343ee9 --- /dev/null +++ b/docs/docs/.vuepress/dist/assets/js/19.28b0b6dd.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{365: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/18.efedf33a.js b/docs/docs/.vuepress/dist/assets/js/20.4049e044.js similarity index 99% rename from docs/docs/.vuepress/dist/assets/js/18.efedf33a.js rename to docs/docs/.vuepress/dist/assets/js/20.4049e044.js index a7370ff0..35b441af 100644 --- a/docs/docs/.vuepress/dist/assets/js/18.efedf33a.js +++ b/docs/docs/.vuepress/dist/assets/js/20.4049e044.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{364: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("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("blockquote",[a("p",[t._v("首页页面")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210509232352226.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/20210509232501952.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/20210509232609398.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/20210509232701288.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/20210509232843932.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/20210513134128914.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/20210509233300701.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/20210509233439791.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 +(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("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("blockquote",[a("p",[t._v("首页页面")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210509232352226.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/20210509232501952.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/20210509232609398.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/20210509232701288.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/20210509232843932.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/20210513134128914.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/20210509233300701.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/20210509233439791.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/20.c7d201d0.js b/docs/docs/.vuepress/dist/assets/js/20.c7d201d0.js deleted file mode 100644 index 2370ea65..00000000 --- a/docs/docs/.vuepress/dist/assets/js/20.c7d201d0.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{367:function(t,e,s){"use strict";s.r(e);var l=s(41),n=Object(l.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"使用简介"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#使用简介"}},[t._v("#")]),t._v(" 使用简介")]),t._v(" "),s("ul",[s("li",[t._v("安全沙盒的简单介绍")]),t._v(" "),s("li",[t._v("特殊判题的程序例子")]),t._v(" "),s("li",[t._v("其它待续......")])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/21.3709f65f.js b/docs/docs/.vuepress/dist/assets/js/21.3709f65f.js deleted file mode 100644 index b786621c..00000000 --- a/docs/docs/.vuepress/dist/assets/js/21.3709f65f.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{366: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("blockquote",[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("blockquote",[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("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/19.b75b0a6f.js b/docs/docs/.vuepress/dist/assets/js/21.3dac3195.js similarity index 98% rename from docs/docs/.vuepress/dist/assets/js/19.b75b0a6f.js rename to docs/docs/.vuepress/dist/assets/js/21.3dac3195.js index f10d3caa..a6dbdbd6 100644 --- a/docs/docs/.vuepress/dist/assets/js/19.b75b0a6f.js +++ b/docs/docs/.vuepress/dist/assets/js/21.3dac3195.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{365:function(v,_,l){"use strict";l.r(_);var i=l(41),t=Object(i.a)({},(function(){var v=this,_=v.$createElement,l=v._self._c||_;return l("ContentSlotsDistributor",{attrs:{"slot-key":v.$parent.slotKey}},[l("h1",{attrs:{id:"简介"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#简介"}},[v._v("#")]),v._v(" 简介")]),v._v(" "),l("h2",{attrs:{id:"技术选型"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#技术选型"}},[v._v("#")]),v._v(" 技术选型")]),v._v(" "),l("blockquote",[l("p",[v._v("基于Springcloud 和Vue.js的前后端分离的分布式在线评测系统")])]),v._v(" "),l("ul",[l("li",[l("p",[v._v("前端:")]),v._v(" "),l("ul",[l("li",[v._v("技术以Vue为主,element-ui为主要框架,网站风格样式模仿qdoj")]),v._v(" "),l("li",[v._v("支持手机端,响应式布局")]),v._v(" "),l("li",[v._v("以CodeMirror作为在线代码编辑器")]),v._v(" "),l("li",[v._v("以Mavon-Editor作为富文本编辑器")]),v._v(" "),l("li",[v._v("支持用户头像上传,可选择性获取用户Codeforces分数")]),v._v(" "),l("li",[v._v("定时获取例如Codeforces等其它知名OJ的近期比赛数据")]),v._v(" "),l("li",[v._v("当前支持HDU的Virtual Judge(远程虚拟判题)与题目获取")]),v._v(" "),l("li",[v._v("题目支持特别判题")]),v._v(" "),l("li",[v._v("题目支持可选择性去除提交代码的末尾空白符(会影响CE判定)")]),v._v(" "),l("li",[v._v("题目支持可选择性允许用户查看各个测试点结果(状态,运行时间,运行空间,OI题目的测试点得分),暂不支持测试点数据公开。")]),v._v(" "),l("li",[v._v("题目讨论")]),v._v(" "),l("li",[v._v("管理后台支持题目数据以ZIP上传或手动输入上传")]),v._v(" "),l("li",[v._v("管理后台支持监控服务系统的状态及各判题服务的状态")]),v._v(" "),l("li",[v._v("管理后台支持动态修改网站配置,例如邮件系统配置,数据库配置等")]),v._v(" "),l("li",[v._v("比赛支持封榜,支持ACM与OI模式")]),v._v(" "),l("li",[v._v("比赛支持私有赛(需要密码才可查看与提交),保护赛(每个用户都可查看,提交需要密码),公开赛(每个用户都可查看与提交)三种模式")]),v._v(" "),l("li",[v._v("用户提交失败时可重新提交,管理员支持提交重判与比赛题目所有提交重判")]),v._v(" "),l("li",[v._v("公共讨论区")]),v._v(" "),l("li",[v._v("比赛讨论")])])]),v._v(" "),l("li",[l("p",[v._v("后端:")]),v._v(" "),l("ul",[l("li",[v._v("Web框架技术以Springboot为主")]),v._v(" "),l("li",[v._v("以Nacos为分布式注册中心及分布式配置中心,支持配置文件动态刷新,支持判题服务Ribbon的负载均衡")]),v._v(" "),l("li",[v._v("以Mybatis-Plus为数据库中间件,负责数据实体类与数据库数据的转化与获取。")]),v._v(" "),l("li",[v._v("以Jsoup为爬虫框架,负责远程虚拟OJ的题目获取及提交结果获取,同时定时获取各用户的Codeforces分数以及其它知名OJ的近期比赛。")]),v._v(" "),l("li",[v._v("以Shiro为安全框架,支持用户角色权限管理,支持token刷新")]),v._v(" "),l("li",[v._v("以redis的发布订阅者作为判题服务的消息提醒,以此调用判题服务")]),v._v(" "),l("li",[v._v("后端分为数据后台服务(DataBackup)及判题服务(JudgeServer)\n"),l("ul",[l("li",[l("p",[v._v("数据后台服务:负责提供接口,提供相关数据给前端等")])]),v._v(" "),l("li",[l("p",[v._v("判题服务:只负责获取数据后台服务传输过来的判题的提交,调用VJ判题或调用判题机(Go-Judge)进行评测,将对应结果写回数据库")])])])])])]),v._v(" "),l("li",[l("p",[v._v("判题机:")]),v._v(" "),l("ul",[l("li",[v._v("支持HDU的VJ判题")]),v._v(" "),l("li",[v._v("支持Codefoces的VJ判题")]),v._v(" "),l("li",[v._v("以HttpAPI的形式调用Go-Jugde(高性能可复用的判题沙盒)判题安全沙盒进行提交程序的评测(调用线程池多线程跑评测)")])])]),v._v(" "),l("li",[l("p",[v._v("数据库")]),v._v(" "),l("ul",[l("li",[v._v("Mysql")])])]),v._v(" "),l("li",[l("p",[v._v("缓存中间件")]),v._v(" "),l("ul",[l("li",[v._v("Redis")])])])]),v._v(" "),l("blockquote",[l("p",[v._v("HOJ基本逻辑架构图")])]),v._v(" "),l("p",[l("img",{attrs:{src:"https://cdn.jsdelivr.net/gh/HimitZH/CDN/images/hoj.png",alt:"image-20201030234527577"}})]),v._v(" "),l("h2",{attrs:{id:"判题逻辑"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#判题逻辑"}},[v._v("#")]),v._v(" 判题逻辑")]),v._v(" "),l("ol",[l("li",[l("p",[v._v("前端用户提交数据。")])]),v._v(" "),l("li",[l("p",[v._v("后端数据服务(DataBackup)获取到数据,先将提交数据初始化,同时将该提交的状态变成等待中,写入数据库。")])]),v._v(" "),l("li",[l("p",[v._v("通过Redis,写入"),l("strong",[v._v("等待判题队列")])])]),v._v(" "),l("li",[l("p",[v._v("调用work处理者,初始化传输数据,使用springcloud alibaba通过nacos注册中心调用判题微服务。")])]),v._v(" "),l("li",[l("p",[v._v("若是调用判题服务失败(没有空闲的判题服务器),则重新通过发布者将该提交信息发布到对应"),l("strong",[v._v("等待判题队列")]),v._v(",重回3。")])]),v._v(" "),l("li",[l("p",[v._v("若是调用失败超过30次,则将提交的状态修改为提交失败,不再进行判题服务的调用。")])]),v._v(" "),l("li",[l("p",[v._v("前端用户可看到提交变成提交失败,可点击状态进行重新提交,重回2(注:重新提交不影响提交时间等数据)")])]),v._v(" "),l("li",[l("p",[v._v("判题微服务获取到提交数据:")]),v._v(" "),l("ul",[l("li",[l("p",[v._v("若是远程调用,进行远程提交,获取对应的提交ID,若是获取失败则判为提交失败,若是获取成功,就启用线程定时器每2秒根据提交ID获取判题结果。")]),v._v(" "),l("p",[v._v("定时尝试30次,获取成功,写回数据库,获取失败就修改此次提交为提交失败。")])]),v._v(" "),l("li",[l("p",[v._v("若是自家题目提交,则启用线程池多线程使用Http将对应测试点数据与代码提交给Go-Judge判题沙盒进行编译与评测,最后获取各个评测点结果,进行结果计算写回数据库。")])])])])])])}),[],!1,null,null,null);_.default=t.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{367:function(v,_,l){"use strict";l.r(_);var i=l(41),t=Object(i.a)({},(function(){var v=this,_=v.$createElement,l=v._self._c||_;return l("ContentSlotsDistributor",{attrs:{"slot-key":v.$parent.slotKey}},[l("h1",{attrs:{id:"简介"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#简介"}},[v._v("#")]),v._v(" 简介")]),v._v(" "),l("h2",{attrs:{id:"技术选型"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#技术选型"}},[v._v("#")]),v._v(" 技术选型")]),v._v(" "),l("blockquote",[l("p",[v._v("基于Springcloud 和Vue.js的前后端分离的分布式在线评测系统")])]),v._v(" "),l("ul",[l("li",[l("p",[v._v("前端:")]),v._v(" "),l("ul",[l("li",[v._v("技术以Vue为主,element-ui为主要框架,网站风格样式模仿qdoj")]),v._v(" "),l("li",[v._v("支持手机端,响应式布局")]),v._v(" "),l("li",[v._v("以CodeMirror作为在线代码编辑器")]),v._v(" "),l("li",[v._v("以Mavon-Editor作为富文本编辑器")]),v._v(" "),l("li",[v._v("支持用户头像上传,可选择性获取用户Codeforces分数")]),v._v(" "),l("li",[v._v("定时获取例如Codeforces等其它知名OJ的近期比赛数据")]),v._v(" "),l("li",[v._v("当前支持HDU的Virtual Judge(远程虚拟判题)与题目获取")]),v._v(" "),l("li",[v._v("题目支持特别判题")]),v._v(" "),l("li",[v._v("题目支持可选择性去除提交代码的末尾空白符(会影响CE判定)")]),v._v(" "),l("li",[v._v("题目支持可选择性允许用户查看各个测试点结果(状态,运行时间,运行空间,OI题目的测试点得分),暂不支持测试点数据公开。")]),v._v(" "),l("li",[v._v("题目讨论")]),v._v(" "),l("li",[v._v("管理后台支持题目数据以ZIP上传或手动输入上传")]),v._v(" "),l("li",[v._v("管理后台支持监控服务系统的状态及各判题服务的状态")]),v._v(" "),l("li",[v._v("管理后台支持动态修改网站配置,例如邮件系统配置,数据库配置等")]),v._v(" "),l("li",[v._v("比赛支持封榜,支持ACM与OI模式")]),v._v(" "),l("li",[v._v("比赛支持私有赛(需要密码才可查看与提交),保护赛(每个用户都可查看,提交需要密码),公开赛(每个用户都可查看与提交)三种模式")]),v._v(" "),l("li",[v._v("用户提交失败时可重新提交,管理员支持提交重判与比赛题目所有提交重判")]),v._v(" "),l("li",[v._v("公共讨论区")]),v._v(" "),l("li",[v._v("比赛讨论")])])]),v._v(" "),l("li",[l("p",[v._v("后端:")]),v._v(" "),l("ul",[l("li",[v._v("Web框架技术以Springboot为主")]),v._v(" "),l("li",[v._v("以Nacos为分布式注册中心及分布式配置中心,支持配置文件动态刷新,支持判题服务Ribbon的负载均衡")]),v._v(" "),l("li",[v._v("以Mybatis-Plus为数据库中间件,负责数据实体类与数据库数据的转化与获取。")]),v._v(" "),l("li",[v._v("以Jsoup为爬虫框架,负责远程虚拟OJ的题目获取及提交结果获取,同时定时获取各用户的Codeforces分数以及其它知名OJ的近期比赛。")]),v._v(" "),l("li",[v._v("以Shiro为安全框架,支持用户角色权限管理,支持token刷新")]),v._v(" "),l("li",[v._v("以redis的发布订阅者作为判题服务的消息提醒,以此调用判题服务")]),v._v(" "),l("li",[v._v("后端分为数据后台服务(DataBackup)及判题服务(JudgeServer)\n"),l("ul",[l("li",[l("p",[v._v("数据后台服务:负责提供接口,提供相关数据给前端等")])]),v._v(" "),l("li",[l("p",[v._v("判题服务:只负责获取数据后台服务传输过来的判题的提交,调用VJ判题或调用判题机(Go-Judge)进行评测,将对应结果写回数据库")])])])])])]),v._v(" "),l("li",[l("p",[v._v("判题机:")]),v._v(" "),l("ul",[l("li",[v._v("支持HDU的VJ判题")]),v._v(" "),l("li",[v._v("支持Codefoces的VJ判题")]),v._v(" "),l("li",[v._v("以HttpAPI的形式调用Go-Jugde(高性能可复用的判题沙盒)判题安全沙盒进行提交程序的评测(调用线程池多线程跑评测)")])])]),v._v(" "),l("li",[l("p",[v._v("数据库")]),v._v(" "),l("ul",[l("li",[v._v("Mysql")])])]),v._v(" "),l("li",[l("p",[v._v("缓存中间件")]),v._v(" "),l("ul",[l("li",[v._v("Redis")])])])]),v._v(" "),l("blockquote",[l("p",[v._v("HOJ基本逻辑架构图")])]),v._v(" "),l("p",[l("img",{attrs:{src:"https://cdn.jsdelivr.net/gh/HimitZH/CDN/images/hoj.png",alt:"image-20201030234527577"}})]),v._v(" "),l("h2",{attrs:{id:"判题逻辑"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#判题逻辑"}},[v._v("#")]),v._v(" 判题逻辑")]),v._v(" "),l("ol",[l("li",[l("p",[v._v("前端用户提交数据。")])]),v._v(" "),l("li",[l("p",[v._v("后端数据服务(DataBackup)获取到数据,先将提交数据初始化,同时将该提交的状态变成等待中,写入数据库。")])]),v._v(" "),l("li",[l("p",[v._v("通过Redis,写入"),l("strong",[v._v("等待判题队列")])])]),v._v(" "),l("li",[l("p",[v._v("调用work处理者,初始化传输数据,使用springcloud alibaba通过nacos注册中心调用判题微服务。")])]),v._v(" "),l("li",[l("p",[v._v("若是调用判题服务失败(没有空闲的判题服务器),则重新通过发布者将该提交信息发布到对应"),l("strong",[v._v("等待判题队列")]),v._v(",重回3。")])]),v._v(" "),l("li",[l("p",[v._v("若是调用失败超过30次,则将提交的状态修改为提交失败,不再进行判题服务的调用。")])]),v._v(" "),l("li",[l("p",[v._v("前端用户可看到提交变成提交失败,可点击状态进行重新提交,重回2(注:重新提交不影响提交时间等数据)")])]),v._v(" "),l("li",[l("p",[v._v("判题微服务获取到提交数据:")]),v._v(" "),l("ul",[l("li",[l("p",[v._v("若是远程调用,进行远程提交,获取对应的提交ID,若是获取失败则判为提交失败,若是获取成功,就启用线程定时器每2秒根据提交ID获取判题结果。")]),v._v(" "),l("p",[v._v("定时尝试30次,获取成功,写回数据库,获取失败就修改此次提交为提交失败。")])]),v._v(" "),l("li",[l("p",[v._v("若是自家题目提交,则启用线程池多线程使用Http将对应测试点数据与代码提交给Go-Judge判题沙盒进行编译与评测,最后获取各个评测点结果,进行结果计算写回数据库。")])])])])])])}),[],!1,null,null,null);_.default=t.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 new file mode 100644 index 00000000..2fb0d8d6 --- /dev/null +++ b/docs/docs/.vuepress/dist/assets/js/22.5a29a611.js @@ -0,0 +1 @@ +(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/22.ecbb6d60.js b/docs/docs/.vuepress/dist/assets/js/22.ecbb6d60.js deleted file mode 100644 index 1b46931f..00000000 --- a/docs/docs/.vuepress/dist/assets/js/22.ecbb6d60.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{368: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("后台对题目使用特殊判题时,请参考以下程序例子")])]),s._v(" "),a("div",{staticClass:"language-cpp line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-cpp"}},[a("code",[a("span",{pre:!0,attrs:{class:"token macro property"}},[a("span",{pre:!0,attrs:{class:"token directive-hash"}},[s._v("#")]),a("span",{pre:!0,attrs:{class:"token directive keyword"}},[s._v("include")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("")])]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token macro property"}},[a("span",{pre:!0,attrs:{class:"token directive-hash"}},[s._v("#")]),a("span",{pre:!0,attrs:{class:"token directive keyword"}},[s._v("include")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("")])]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token macro property"}},[a("span",{pre:!0,attrs:{class:"token directive-hash"}},[s._v("#")]),a("span",{pre:!0,attrs:{class:"token directive keyword"}},[s._v("define")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token macro-name"}},[s._v("AC")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token expression"}},[a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")])])]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token macro property"}},[a("span",{pre:!0,attrs:{class:"token directive-hash"}},[s._v("#")]),a("span",{pre:!0,attrs:{class:"token directive keyword"}},[s._v("define")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token macro-name"}},[s._v("WA")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token expression"}},[a("span",{pre:!0,attrs:{class:"token number"}},[s._v("101")])])]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token macro property"}},[a("span",{pre:!0,attrs:{class:"token directive-hash"}},[s._v("#")]),a("span",{pre:!0,attrs:{class:"token directive keyword"}},[s._v("define")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token macro-name"}},[s._v("ERROR")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token expression"}},[a("span",{pre:!0,attrs:{class:"token number"}},[s._v("102")])])]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("using")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("namespace")]),s._v(" std"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("spj")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" user_output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" FILE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("close_file")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("FILE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("f"),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 keyword"}},[s._v("if")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("f "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("NULL")]),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 function"}},[s._v("fclose")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("f"),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\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("main")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" argc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("args"),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(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n FILE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("argc "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),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 keyword"}},[s._v("return")]),s._v(" ERROR"),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("int")]),s._v(" user_output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n cin"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v("user_output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n cout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("user_output"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("endl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n output "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("fopen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),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 string"}},[s._v('"r"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\t\n result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("spj")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user_output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" output"),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 function"}},[s._v("printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"result: %d\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("close_file")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("output"),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 keyword"}},[s._v("return")]),s._v(" result"),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("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("spj")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" user_output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" FILE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("output"),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("/*\n parameter: \n - output,标程输出文件的指针\n - user_output,用户输出数据\n return: \n - 如果用户答案正确,返回AC\n - 如果用户答案错误返回WA\n - 如果主动捕获到自己的错误,如内存分配失败,返回ERROR\n */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" std_out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("fscanf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"%d"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("std_out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("EOF")]),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 keyword"}},[s._v("if")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user_output"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" std_out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n cout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("user_output"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("endl"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("std_out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" WA"),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 "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" AC"),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")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/23.6fc11064.js b/docs/docs/.vuepress/dist/assets/js/23.6fc11064.js new file mode 100644 index 00000000..7d4923df --- /dev/null +++ b/docs/docs/.vuepress/dist/assets/js/23.6fc11064.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{370:function(t,_,s){"use strict";s.r(_);var e=s(41),v=Object(e.a)({},(function(){var t=this,_=t.$createElement,s=t._self._c||_;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"比赛介绍"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#比赛介绍"}},[t._v("#")]),t._v(" 比赛介绍")]),t._v(" "),s("p",[s("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210523221519574.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"在这里插入图片描述"}})]),t._v(" "),s("p",[t._v("创建比赛时两种赛制:")]),t._v(" "),s("ul",[s("li",[s("p",[s("strong",[t._v("ACM 模式")])]),t._v(" "),s("p",[t._v("在该模式下,我们严格按照ACM-ICPC的比赛规则来进行,Contest设置项中的"),s("code",[t._v("Seal Time Rank")]),t._v("即为是否封榜,封榜后将不再刷新排名。可选择比赛结束前半小时,比赛前一小时,比赛全程封榜。")])]),t._v(" "),s("li",[s("p",[s("strong",[t._v("OI 模式")])]),t._v(" "),s("p",[t._v("在OI模式下,选手的提交将根据得分点来计分,多次提交以最后一次提交为准,排名规则为多个题目的总分数。同样可以进行封榜操作,封榜时段,选手不能查看到实时的排行榜数据!")])])]),t._v(" "),s("p",[t._v("注意:管理员可以选择强制刷新,查看实时的排行榜数据!通过"),s("code",[t._v("Force Update")]),t._v("来强制刷新榜,且刷新后的榜仅对管理者可见。")]),t._v(" "),s("p",[t._v("比赛权限模式有三种:")]),t._v(" "),s("ul",[s("li",[s("strong",[t._v("公开赛")]),t._v(":所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,且都可以在比赛阶段随时提交。")]),t._v(" "),s("li",[s("strong",[t._v("保护赛")]),t._v(":所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,但在比赛阶段提交需要提供该比赛的密码!")]),t._v(" "),s("li",[s("strong",[t._v("私有赛")]),t._v(":仅支持有比赛密码的用户进入比赛,查看查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,包括提交。")])])])}),[],!1,null,null,null);_.default=v.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/24.541271c6.js b/docs/docs/.vuepress/dist/assets/js/24.541271c6.js new file mode 100644 index 00000000..cadd5c60 --- /dev/null +++ b/docs/docs/.vuepress/dist/assets/js/24.541271c6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{369: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("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210523223605573.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70#pic_center",alt:"在这里插入图片描述"}})]),t._v(" "),a("ul",[a("li",[a("p",[t._v("后台管理员可以查看所有的讨论帖,并且可以选择是否置顶,是否正常显示,删除,查看等")])]),t._v(" "),a("li",[a("p",[t._v("后台管理员可以查看对应讨论帖的举报内容")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210523221321418.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/25.d102b518.js b/docs/docs/.vuepress/dist/assets/js/25.d102b518.js new file mode 100644 index 00000000..4b8333c7 --- /dev/null +++ b/docs/docs/.vuepress/dist/assets/js/25.d102b518.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{371:function(t,s,a){"use strict";a.r(s);var r=a(41),e=Object(r.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("待续.....")]),t._v(" "),a("h2",{attrs:{id:"二、导入其它oj题目"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#二、导入其它oj题目"}},[t._v("#")]),t._v(" 二、导入其它OJ题目")]),t._v(" "),a("p",[t._v("导入HDU、Codeforces题目,只需提供该题目的题号便可一键导入")]),t._v(" "),a("p",[a("strong",[t._v("管理员进入后台,点击题目列表")])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210523223454472.png#pic_center",alt:"在这里插入图片描述"}})]),t._v(" "),a("p",[t._v("然后添加上方的添加按钮")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210523222914722.png",alt:"在这里插入图片描述"}})]),t._v(" "),a("p",[a("strong",[t._v("在弹出窗中选择OJ名字及题号,便可导入")])]),t._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:"在这里插入图片描述"}})]),t._v(" "),a("p",[a("strong",[t._v("注意:")])]),t._v(" "),a("ul",[a("li",[t._v("HDU的题号一般是 1000以上的数字")]),t._v(" "),a("li",[t._v("Codeforces的题号是1000A、1000B、这种数字加大写英文字母的格式")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/26.2bf4f42a.js b/docs/docs/.vuepress/dist/assets/js/26.2bf4f42a.js new file mode 100644 index 00000000..8d8be39f --- /dev/null +++ b/docs/docs/.vuepress/dist/assets/js/26.2bf4f42a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{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/27.62d662fe.js b/docs/docs/.vuepress/dist/assets/js/27.62d662fe.js new file mode 100644 index 00000000..32deacad --- /dev/null +++ b/docs/docs/.vuepress/dist/assets/js/27.62d662fe.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{374: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:"什么是特殊判题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#什么是特殊判题"}},[s._v("#")]),s._v(" 什么是特殊判题?")]),s._v(" "),a("p",[s._v("特殊判题(Special Judge)是指OJ将使用一个特定的程序来判断提交的程序的输出是不是正确的,而不是单纯地看提交的程序的输出是否和标准输出一模一样。")]),s._v(" "),a("h2",{attrs:{id:"使用场景"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#使用场景"}},[s._v("#")]),s._v(" 使用场景")]),s._v(" "),a("p",[s._v("一般使用Special Judge都是因为题目的答案不唯一,更具体一点说的话一般是两种情况:")]),s._v(" "),a("ul",[a("li",[s._v("题目最终要求输出一个解决方案,而且这个解决方案可能不唯一。")]),s._v(" "),a("li",[s._v("题目最终要求输出一个浮点数,而且会告诉只要答案和标准答案相差不超过某个较小的数就可以,比如0.01。这种情况保留3位小数、4位小数等等都是可以的,而且多保留几位小数也没什么坏处。")])]),s._v(" "),a("h2",{attrs:{id:"例子"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#例子"}},[s._v("#")]),s._v(" 例子:")]),s._v(" "),a("p",[s._v("在创建题目的适合,选择开启特殊判题,编写特殊判题程序,然后编译通过便可。")]),s._v(" "),a("blockquote",[a("p",[s._v("后台对题目使用特殊判题时,请参考以下程序例子")])]),s._v(" "),a("div",{staticClass:"language-cpp line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-cpp"}},[a("code",[a("span",{pre:!0,attrs:{class:"token macro property"}},[a("span",{pre:!0,attrs:{class:"token directive-hash"}},[s._v("#")]),a("span",{pre:!0,attrs:{class:"token directive keyword"}},[s._v("include")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("")])]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token macro property"}},[a("span",{pre:!0,attrs:{class:"token directive-hash"}},[s._v("#")]),a("span",{pre:!0,attrs:{class:"token directive keyword"}},[s._v("include")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("")])]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token macro property"}},[a("span",{pre:!0,attrs:{class:"token directive-hash"}},[s._v("#")]),a("span",{pre:!0,attrs:{class:"token directive keyword"}},[s._v("define")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token macro-name"}},[s._v("AC")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token expression"}},[a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")])])]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token macro property"}},[a("span",{pre:!0,attrs:{class:"token directive-hash"}},[s._v("#")]),a("span",{pre:!0,attrs:{class:"token directive keyword"}},[s._v("define")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token macro-name"}},[s._v("WA")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token expression"}},[a("span",{pre:!0,attrs:{class:"token number"}},[s._v("101")])])]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token macro property"}},[a("span",{pre:!0,attrs:{class:"token directive-hash"}},[s._v("#")]),a("span",{pre:!0,attrs:{class:"token directive keyword"}},[s._v("define")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token macro-name"}},[s._v("ERROR")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token expression"}},[a("span",{pre:!0,attrs:{class:"token number"}},[s._v("102")])])]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("using")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("namespace")]),s._v(" std"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("spj")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" user_output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" FILE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("close_file")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("FILE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("f"),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 keyword"}},[s._v("if")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("f "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("NULL")]),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 function"}},[s._v("fclose")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("f"),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\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("main")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" argc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("args"),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(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n FILE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("argc "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),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 keyword"}},[s._v("return")]),s._v(" ERROR"),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("int")]),s._v(" user_output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n cin"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v("user_output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n cout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("user_output"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("endl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n output "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("fopen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),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 string"}},[s._v('"r"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\t\n result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("spj")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user_output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" output"),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 function"}},[s._v("printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"result: %d\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("close_file")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("output"),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 keyword"}},[s._v("return")]),s._v(" result"),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("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("spj")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" user_output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" FILE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("output"),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("/*\n parameter: \n - output,标程输出文件的指针\n - user_output,用户输出数据\n return: \n - 如果用户答案正确,返回AC\n - 如果用户答案错误返回WA\n - 如果主动捕获到自己的错误,如内存分配失败,返回ERROR\n */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" std_out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("fscanf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"%d"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("std_out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("EOF")]),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 keyword"}},[s._v("if")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user_output"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" std_out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n cout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("user_output"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("endl"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("std_out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" WA"),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 "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" AC"),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")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/28.8e2b6aba.js b/docs/docs/.vuepress/dist/assets/js/28.8e2b6aba.js new file mode 100644 index 00000000..71a67afd --- /dev/null +++ b/docs/docs/.vuepress/dist/assets/js/28.8e2b6aba.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{373: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("p",[t("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210523215852734.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"在这里插入图片描述"}})]),s._v(" "),t("p",[t("strong",[s._v("进入后台添加题目,上传题目测试用例数据可以选择手动输入、Zip文件上传两种方式")])]),s._v(" "),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("Add Sampple")]),s._v("就可以手动填入该用例的输入与输出,该方式比较适合题目数据简单的,同时手动输入的题目数据将记录进数据库,下次对该题目进行修改可以直接获取,然后进行测试数据的修改,同时也会在服务器对应的testcase文件夹生成对应的文件。")]),s._v(" "),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("in")]),s._v("、"),t("code",[s._v("out")]),s._v("、"),t("code",[s._v("ans")]),s._v("三种拓展名")]),s._v(" "),t("p",[s._v("例如有两组测试用例,则对于普通题目测试用例的文件名分别为"),t("code",[s._v("1.in, 1.out(1.ans), 2.in, 2.out(2.ans)")]),s._v("其他形式的文件后台均不识别。")]),s._v(" "),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("├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(".in\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(".out\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(".in\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(".out\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("div",{staticClass:"language-bash line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(".in\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(".ans\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(".in\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(".ans\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("p",[s._v("然后压缩测试用例到一个zip中")]),s._v(" "),t("p",[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/3.7cbf67d2.js b/docs/docs/.vuepress/dist/assets/js/3.068e2e40.js similarity index 75% rename from docs/docs/.vuepress/dist/assets/js/3.7cbf67d2.js rename to docs/docs/.vuepress/dist/assets/js/3.068e2e40.js index 513ea03a..15ee0102 100644 --- a/docs/docs/.vuepress/dist/assets/js/3.7cbf67d2.js +++ b/docs/docs/.vuepress/dist/assets/js/3.068e2e40.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{318:function(t,e,n){},346:function(t,e,n){"use strict";n(318)},369:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:function(t,e){var n=e.props,i=e.slots;return t("span",{class:["badge",n.type],style:{verticalAlign:n.vertical}},n.text||i().default)}},r=(n(346),n(41)),p=Object(r.a)(i,void 0,void 0,!1,null,"69367c83",null);e.default=p.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{318:function(t,e,n){},346:function(t,e,n){"use strict";n(318)},375:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:function(t,e){var n=e.props,i=e.slots;return t("span",{class:["badge",n.type],style:{verticalAlign:n.vertical}},n.text||i().default)}},r=(n(346),n(41)),p=Object(r.a)(i,void 0,void 0,!1,null,"69367c83",null);e.default=p.exports}}]); \ No newline at end of file diff --git a/docs/docs/.vuepress/dist/assets/js/8.b161b559.js b/docs/docs/.vuepress/dist/assets/js/8.b161b559.js deleted file mode 100644 index a5e1a67d..00000000 --- a/docs/docs/.vuepress/dist/assets/js/8.b161b559.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")]),s._v(" "),t("h2",{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("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("单机部署(建议服务器内存2G以上)")]),s._v(" "),t("blockquote",[t("p",[s._v("注意:以下操作建议试用,配置大部分是默认的,实际运行请修改"),t("code",[s._v("docker-compose.yml")]),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(" standAlone "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),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("blockquote",[t("p",[s._v("更多自定义配置请查看**/standAlone/.env**的文件,或者/src下各组件的详情说明")])]),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("ul",[t("li",[t("p",[s._v("默认开启vj判题,需要手动修改添加账号与密码,如果不添加不能vj判题!")]),s._v(" "),t("ul",[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("注意:网站的注册及用户账号相关操作需要邮件系统,所以请在系统配置中配置自己的邮件服务。")])])])]),s._v(" "),t("ol",{attrs:{start:"3"}},[t("li",[t("p",[s._v("分布式部署(默认开启rsync数据同步)")]),s._v(" "),t("ul",[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/main\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" .env "),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("span",{staticClass:"line-number"},[s._v("2")]),t("br")])]),t("p",[s._v("配置修改保存后,在"),t("code",[s._v("docker-compose.yml")]),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("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/judgeserver\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" .env "),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("span",{staticClass:"line-number"},[s._v("2")]),t("br")])]),t("p",[s._v("配置修改保存后,在"),t("code",[s._v("docker-compose.yml")]),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("p",[s._v("两个服务都启动完成,在浏览器输入主服务ip或域名进行访问,登录root账号到后台查看服务状态以及到"),t("code",[s._v("http://ip/admin/conf")]),s._v("修改服务配置!")])])]),s._v(" "),t("blockquote",[t("p",[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("分布式:提供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 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")])])])}),[],!1,null,null,null);a.default=n.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 new file mode 100644 index 00000000..127e3fc7 --- /dev/null +++ b/docs/docs/.vuepress/dist/assets/js/8.d67efa58.js @@ -0,0 +1 @@ +(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.807c9668.js b/docs/docs/.vuepress/dist/assets/js/9.f68a10a9.js similarity index 99% rename from docs/docs/.vuepress/dist/assets/js/9.807c9668.js rename to docs/docs/.vuepress/dist/assets/js/9.f68a10a9.js index fa0368cc..2f063c81 100644 --- a/docs/docs/.vuepress/dist/assets/js/9.807c9668.js +++ b/docs/docs/.vuepress/dist/assets/js/9.f68a10a9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{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:"后端部署"}},[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 +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{355: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.658a191c.js b/docs/docs/.vuepress/dist/assets/js/app.af16b29f.js similarity index 57% rename from docs/docs/.vuepress/dist/assets/js/app.658a191c.js rename to docs/docs/.vuepress/dist/assets/js/app.af16b29f.js index 9a253b83..a27ac9e5 100644 --- a/docs/docs/.vuepress/dist/assets/js/app.658a191c.js +++ b/docs/docs/.vuepress/dist/assets/js/app.af16b29f.js @@ -1,8 +1,8 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,c=e[0],u=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),c=n(71),u=n(24),s=u.get,f=u.enforce,l=String(String).split("String");(t.exports=function(t,e,n,c){var u,s=!!c&&!!c.unsafe,p=!!c&&!!c.enumerable,d=!!c&&!!c.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||o(n,"name",e),(u=f(n)).source||(u.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||c(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),c=n(44),u=n(5),s=n(98),f=Object.getOwnPropertyDescriptor;e.f=r?f:function(t,e){if(t=a(t),e=c(e,!0),s)try{return f(t,e)}catch(t){}if(u(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),c=n(2),u=n(4),s=n(9),f=n(5),l=n(64),p=n(49),d=n(31),h=c.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(!u(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),c=n(118),u=[].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||c,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:u.call(k,g)}else switch(t){case 4:return!1;case 7:u.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),c=i.process,u=c&&c.versions,s=u&&u.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,c=o.getterFor("String Iterator");i(String,"String",(function(t){a(this,{type:"String Iterator",string:String(t),index:0})}),(function(){var t,e=c(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),c=n(1),u=c("iterator"),s=c("toStringTag"),f=i.values;for(var l in o){var p=r[l],d=p&&p.prototype;if(d){if(d[u]!==f)try{a(d,u,f)}catch(t){d[u]=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",u.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()};c[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),c=n(205);function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e0?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,h=!!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?!h&&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),h=n(31),d=u.WeakMap;if(a){var v=l.state||(l.state=new d),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");h[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,h=5==t||l;return function(d,v,y,m){for(var g,b,_=i(d),x=o(_),w=r(v,y,3),O=a(x.length),j=0,S=m||u,k=e?S(d,O):n||p?S(d,0):void 0;O>j;j++)if((h||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],h=p&&p.prototype;if(h){if(h[c]!==f)try{a(h,c,f)}catch(t){h[c]=f}if(h[s]||a(h,s,l),o[l])for(var d in i)if(h[d]!==i[d])try{a(h,d,i[d])}catch(t){h[d]=i[d]}}}},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>"},d=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;d=r?function(t){t.write(h("")),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(h("document.F=Object")),t.close(),t.F);for(var n=a.length;n--;)delete d.prototype[a[n]];return d()};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=d(),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 u=n.render(!e),s=u.querySelector(r.barSelector),f=r.speed,l=r.easing;return u.offsetWidth,a((function(e){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),c(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?(c(u,{transition:"none",opacity:1}),u.offsetWidth,setTimeout((function(){c(u,{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),u=t?"-100":i(n.status||0),f=document.querySelector(r.parent);return c(a,{transition:"all 0 linear",transform:"translate3d("+u+"%,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()}}(),c=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 u(t,e){return("string"==typeof t?t:l(t)).indexOf(" "+e+" ")>=0}function s(t,e){var n=l(t),r=n+e;u(n,e)||(t.className=r.substring(1))}function f(t,e){var n,r=l(t);u(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),c=n(19),u=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=c(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 c=n(e,t,this,r);if(c.done)return c.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=u(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),c=RegExp.prototype.exec,u=String.prototype.replace,s=c,f=(r=/a/,o=/b*/g,c.call(r,"a"),c.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=c.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&&u.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 c,u=r(e),s=o(u.length),f=i(a,s);if(t&&n!=n){for(;s>f;)if((c=u[f++])!=c)return!0}else for(;s>f;f++)if((t||f in u)&&u[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),c=i("IE_PROTO"),u=Object.prototype;t.exports=a?Object.getPrototypeOf:function(t){return t=o(t),r(t,c)?t[c]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u: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),c=n(14),u=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=u(this),v=c(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 c in o){var u=r[c],s=u&&u.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"),c=Array.prototype;null==c[a]&&i.f(c,a,{configurable:!0,value:o(null)}),t.exports=function(t){c[a][t]=!0}},function(t,e,n){var r=n(3),o=/#|\.prototype\./,i=function(t,e){var n=c[a(t)];return n==s||n!=u&&("function"==typeof e?r(e):!!e)},a=i.normalize=function(t){return String(t).replace(o,".").toLowerCase()},c=i.data={},u=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),c=n(104),u=a.set,s=a.getterFor("Array Iterator");t.exports=c(Array,"Array",(function(t,e){u(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,c=o(t),u=0,s=[];for(n in c)!r(a,n)&&r(c,n)&&s.push(n);for(;e.length>u;)r(c,n=e[u++])&&(~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),c=n(50),u=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]&&u(_,y,m)),c(_,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||u(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),c=a.f,u=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=u(i.postMessage,i,1)):a.addEventListener&&"function"==typeof postMessage&&!a.importScripts&&d&&"file:"!==d.protocol&&!c(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 c(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,n){return t[e]=n}}function u(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 c=_(a,n);if(c){if(c===f)continue;return c}}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 u=s(t,e,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===f)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.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=u;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){c(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,c){var u=s(t[o],t,i);if("throw"!==u.type){var f=u.arg,l=f.value;return l&&"object"==typeof l&&n.call(l,"__await")?e.resolve(l.__await).then((function(t){r("next",t,a,c)}),(function(t){r("throw",t,a,c)})):e.resolve(l).then((function(t){f.value=t,a(f)}),(function(t){return r("throw",t,a,c)}))}c(u.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 c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){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,c=String(o(e)),u=r(n),s=c.length;return u<0||u>=s?t?"":void 0:(i=c.charCodeAt(u))<55296||i>56319||u+1===s||(a=c.charCodeAt(u+1))<56320||a>57343?t?c.charAt(u):i:t?c.slice(u,u+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=u.get(t),d=u.get(e);if(p&&d)return p==e&&d==t;var h=-1,v=!0,y=2&n?new r:void 0;for(u.set(t,e),u.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);c=setTimeout(x,function(t){var n=e-(t-u);return y?p(n,i-(t-s)):n}(t))}function w(t){return c=void 0,m&&r?g(t):(r=o=void 0,a)}function O(){var t=d(),n=_(t);if(r=arguments,o=this,u=t,n){if(void 0===c)return b(u);if(y)return c=setTimeout(x,e),g(u)}return void 0===c&&(c=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!==c&&clearTimeout(c),s=0,r=u=o=c=void 0},O.flush=function(){return void 0===c?a:w(d())},O}},function(t,e,n){"use strict";var r=n(0),o=n(69).indexOf,i=n(37),a=[].indexOf,c=!!a&&1/[1].indexOf(1,-0)<0,u=i("indexOf");r({target:"Array",proto:!0,forced:c||!u},{indexOf:function(t){return c?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),c=n(9),u=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[u]=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&&c(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),c=[].join,u=o!=Object,s=a("join",",");r({target:"Array",proto:!0,forced:u||!s},{join:function(t){return c.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),c=i("species");t.exports=function(t){var e=r(t),n=o.f;a&&e&&!e[c]&&n(e,c,{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),c=n(12),u=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=c(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),c=r.length,u=0;c>u;)o.f(t,n=r[u++],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),c=n(32),u=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),c[s]=u,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,c=n(0),u=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(u&&!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,c,u,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(),u=!0)),a===s.promise?p(U("Promise-chain cycle")):(c=X(a))?c.call(a,l,p):l(a)):p(r)}catch(t){d&&!u&&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)},u||"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&&c({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return S(F,q.apply(s,arguments))}}))),c({global:!0,wrap:!0,forced:K},{Promise:F}),h(F,I,!1,!0),v(I),i=f(I),c({target:I,stat:!0,forced:K},{reject:function(t){var e=V(this);return e.reject.call(void 0,t),e.promise}}),c({target:I,stat:!0,forced:u||K},{resolve:function(t){return S(u&&this===i?F:this,t)}}),c({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,c=1;_(t,(function(t){var u=a++,s=!1;i.push(void 0),c++,n.call(e,t).then((function(t){s||(s=!0,i[u]=t,--c||r(i))}),o)})),--c||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),c=n(173),u=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&&u(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=c(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 u(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,c,u,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)}:(c=!0,u=g.createTextNode(""),new m(r).observe(u,{characterData:!0}),a=function(){u.data=c=!c})),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),c=n(72),u=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=u(t),o=arguments.length,f=1,l=a.f,p=c.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),c=n(17),u=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=u(this,c("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",c("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),c=n(20),u=n(78);r({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(t){for(var e,n,r=a(t),o=c.f,s=i(r),f={},l=0;s.length>l;)void 0!==(n=o(r,e=s[l++]))&&u(f,e,n);return f}})},function(t,e,n){var r=n(0),o=n(3),i=n(12),a=n(74),c=n(108);r({target:"Object",stat:!0,forced:o((function(){a(1)})),sham:!c},{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),c=n(29);r({target:"Array",proto:!0,forced:!i("reduce")||!c&&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),c=function(t){return function(e,n,c,u){r(n);var s=o(e),f=i(s),l=a(s.length),p=t?l-1:0,d=t?-1:1;if(c<2)for(;;){if(p in f){u=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&&(u=n(u,f[p],p,s));return u}};t.exports={left:c(!1),right:c(!0)}},function(t,e,n){"use strict";var r,o=n(0),i=n(20).f,a=n(14),c=n(95),u=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(u(this));c(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),c=n(190).onFreeze,u=Object.freeze;r({target:"Object",stat:!0,forced:i((function(){u(1)})),sham:!o},{freeze:function(t){return u&&a(t)?u(c(t)):t}})},function(t,e,n){var r=n(31),o=n(4),i=n(5),a=n(8).f,c=n(45),u=n(120),s=c("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 u&&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,c=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,n,u,s,f){var l=n+t.length,p=u.length,d=c;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 c=+i;if(0===c)return r;if(c>p){var f=o(c/10);return 0===f?r:f<=p?void 0===u[f-1]?i.charAt(1):u[f-1]+i.charAt(1):r}a=u[c-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,c){var u=-1,s=e.length;for(i||(i=o),c||(c=[]);++u0&&i(f)?n>1?t(f,n-1,i,a,c):r(c,f):a||(c[c.length]=f)}return c}},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,c=r?r.toStringTag:void 0;t.exports=function(t){var e=i.call(t,c),n=t[c];try{t[c]=void 0;var r=!0}catch(t){}var o=a.call(t);return r&&(e?t[c]=n:delete t[c]),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),c=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):c(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,c=a,u=!i;if(null==t)return!c;for(t=Object(t);a--;){var s=n[a];if(u&&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),c=/^\[object .+?Constructor\]$/,u=Function.prototype,s=Object.prototype,f=u.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:c).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),c=n(221);function u(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),c=n(283),u=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:c(t);if(v)return u(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),c=n(4),u=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\((.*)\)[^)]+$/;u(d,"description",{configurable:!0,get:function(){var t=c(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 c=t[i](a),u=c.value}catch(t){return void n(t)}c.done?e(u):Promise.resolve(u).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 c(t){r(a,o,i,c,u,"next",t)}function u(t){r(a,o,i,c,u,"throw",t)}c(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 c(t){return null!=t}function u(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 c(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 ct(t){return"function"==typeof t&&/native code/.test(t.toString())}var ut,st="undefined"!=typeof Symbol&&ct(Symbol)&&"undefined"!=typeof Reflect&&ct(Reflect.ownKeys);ut="undefined"!=typeof Set&&ct(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 u=qt(String,o.type);(u<0||c0&&(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):(u(e._isVList)&&c(o.tag)&&a(o.key)&&c(n)&&(o.key="__vlist"+n+"_"+r+"__"),l.push(o)));return l}(t):void 0}function pe(t){return c(t)&&c(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,c=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&n&&n!==i&&c===n.$key&&!o&&!n.$hasNormal)return n;for(var u in r={},t)t[u]&&"$"!==u[0]&&(r[u]=me(e,u,t[u]))}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",c),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(),cn=!0,nn.sort((function(t,e){return t.id-e.id})),un=0;unun&&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 c=En(a.componentOptions);c&&!e(c)&&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,c[0],c,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;c(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=qn(r.data,e));for(;c(n=n.parent);)n&&n.data&&(e=qn(e,n.data));return function(t,e){if(c(t)||c(e))return Vn(t,Hn(e));return""}(e.staticClass,e.class)}function qn(t,e){return{staticClass:Vn(t.staticClass,e.staticClass),class:c(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),u=n._transitionClasses;c(u)&&(i=Vn(i,Hn(u))),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(c(t.__r)){var e=Y?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}c(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),ue(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||{},u=e.data.domProps||{};for(n in c(u.__ob__)&&(u=e.data.domProps=P({},u)),i)n in u||(o[n]="");for(n in u){if(r=u[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(c(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 c="transition"===o?Gr:Jr,u=0,s=function(){t.removeEventListener(c,f),n()},f=function(e){e.target===t&&++u>=a&&s()};setTimeout((function(){u0&&(n="transition",f=a,l=i.length):"animation"===e?s>0&&(n="animation",f=s,l=u.length):l=(n=(f=Math.max(a,s))>0?a>s?"transition":"animation":null)?"transition"===n?i.length:u.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):c(m)?(c(t.text)&&i.setTextContent(p,""),b(p,null,m,0,m.length-1,n)):c(y)?x(y,0,y.length-1):c(t.text)&&i.setTextContent(p,""):t.text!==e.text&&i.setTextContent(p,e.text),c(h)&&c(d=h.hook)&&c(d=d.postpatch)&&d(t,e)}}}function S(t,e,n){if(u(n)&&c(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!==c&&(t.selectedIndex=c));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 c=(i.data||(i.data={})).transition=jo(this),u=this._vnode,f=Oo(u);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({},c);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 u;var p,d=function(){p()};se(c,"afterEnter",d),se(c,"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),c=0;c-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; + * @license MIT */void 0===(o="function"==typeof(r=function(){var t,e,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};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 h=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,d=r.REPLACE_KEEPS_$0,v=h?"$":"$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(!h&&d||"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,h=i.call(a),d=a.source,v=0,y=t;return s&&(-1===(h=h.replace("y","")).indexOf("g")&&(h+="g"),y=String(t).slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&"\n"!==t[a.lastIndex-1])&&(d="(?: "+d+")",y=" "+y,v++),n=new RegExp("^(?:"+d+")",h)),p&&(n=new RegExp("^"+d+"$(?!\\s)",h)),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"),h=[].slice,d=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 h.call(l,y,m);for(r=new(void 0===n?Array:n)(d(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),h=n(107),d=h.IteratorPrototype,v=h.BUGGY_SAFARI_ITERATORS,y=f("iterator"),m=function(){return this};t.exports=function(t,e,n,f,h,g,b){o(n,e,f);var _,x,w,O=function(t){if(t===h&&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"]||h&&k[h],A=!v&&E||O(h),$="Array"==e&&k.entries||E;if($&&(_=i($.call(new t)),d!==Object.prototype&&_.next&&(l||i(_)===d||(a?a(_,d):"function"!=typeof _[y]&&c(_,y,m)),u(_,j,!0,!0),l&&(p[j]=m))),"values"==h&&E&&"values"!==E.name&&(S=!0,A=function(){return E.call(this)}),l&&!b||k[y]===A||c(k,y,A),p[e]=A,h)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&&h&&"file:"!==h.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:d,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 h(){}var d={};d[o]=function(){return this};var v=Object.getPrototypeOf,y=v&&v(v(j([])));y&&y!==e&&n.call(y,o)&&(d=y);var m=h.prototype=l.prototype=Object.create(d);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),h=c.get(e);if(p&&h)return p==e&&h==t;var d=-1,v=!0,y=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++d-1&&t%1==0&&t=e||n<0||y&&t-s>=i}function x(){var t=h();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=h(),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,d(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(h())},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"),h=!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 d=i(t),v=!o((function(){var e={};return e[d]=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[d]=/./[d]),n.exec=function(){return e=!0,null},n[d](""),!e}));if(!v||!y||"replace"===t&&(!s||!f||p)||"split"===t&&!h){var m=/./[d],g=n(d,""[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,d,2==e?function(t,e){return _.call(t,this,e)}:function(t){return _.call(t,this)})}l&&u(RegExp.prototype[d],"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),h=n(30),d=p("isConcatSpreadable"),v=h>=51||!o((function(){var t=[];return t[d]=!1,t.concat()[0]!==t})),y=l("concat"),m=function(t){if(!a(t))return!1;var e=t[d];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),h=n(169),d=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,h=s.domain;try{f?(o||(2===t.rejection&&et(t),t.rejection=1),!0===f?a=r:(h&&h.enter(),a=f(r),h&&(h.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){h&&!c&&h.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=h(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}),d(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,h,d,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,h=i(t.length);h>p;p++)if((d=O(t[p]))&&d instanceof s)return d;return new s(!1)}f=l.call(t)}for(v=f.next;!(y=v.call(f)).done;){try{d=O(y.value)}catch(t){throw c(f),t}if("object"==typeof d&&d&&d instanceof s)return d}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,h=n(111).set,d=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()},d||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(){h.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 h,d=s(arguments[f++]),v=l?i(d).concat(l(d)):i(d),y=v.length,m=0;y>m;)h=v[m++],r&&!p.call(d,h)||(n[h]=d[h]);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,h=t?-1:1;if(u<2)for(;;){if(p in f){c=f[p],p+=h;break}if(p+=h,t?p<0:l<=p)throw TypeError("Reduce of empty array with no initial value")}for(;t?p>=0:l>p;p+=h)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,h=s("startsWith");o({target:"String",proto:!0,forced:!!(f||h||(r=i(String.prototype,"startsWith"),!r||r.writable))&&!h},{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:{}}})},h=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&&h.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,h=u;return void 0!==s&&(s=r(s),h=a),i.call(f,h,(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,h=[],d=h;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,d=new r}else d=e?[]:h;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,(h(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 h=p.prototype=f.prototype;h.constructor=p;var d=h.toString,v="Symbol(test)"==String(f("test")),y=/^Symbol\((.*)\)[^)]+$/;c(h,"description",{configurable:!0,get:function(){var t=u(this)?this.valueOf():this,e=d.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 h(t){return"[object RegExp]"===l.call(t)}function d(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 he(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)},dn.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)}}},dn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},dn.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},dn.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){dt();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 dn(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:!!h(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=de(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=he(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 dn(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?dr(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):dr(t,e,n)}function dr(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;ed?b(t,a(n[m+1])?null:n[m+1].elm,n,h,m,r):h>m&&x(e,p,d)}(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(d)&&u(h=d.hook)&&u(h=h.postpatch)&&h(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,h=function(){p()};se(u,"afterEnter",h),se(u,"enterCancelled",h),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 dn(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=u.path?ei(u.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}(u.query,o.query,r&&r.options.parseQuery),p=o.hash||u.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,c=o.href,u={},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;u[h]=Xo(r,v,this.exactPath),u[d]=this.exact||this.exactPath?u[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=u[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:u},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:a,navigate:m,isActive:u[d],isExactActive:u[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:c,"aria-current":y};else{var x=function t(e){var n;if(e)for(var r=0;r-1&&(c.params[p]=n.params[p]);return c.path=_i(f.path,c.params),u(f,c,a)}if(c.path){c.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,c){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var u,s=ua((function(e){var o;((o=e).__esModule||ca&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:wi.extend(e),n.components[c]=e,--i<=0&&r()})),f=ua((function(t){var e="Failed to resolve async component "+c+": "+t;a||(a=na(t)?t:new Error(e),r(a))}));try{u=t(s,f)}catch(t){f(t)}if(u)if("function"==typeof u.then)u.then(s,f);else{var l=u.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 ca="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function ua(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,c=function(t){!ra(t)&&na(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},u=t.matched.length-1,s=o.matched.length-1;if(Xo(t,o)&&u===s&&t.matched[u]===o.matched[s])return this.ensureURL(),c(((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(10).then(n.bind(null,355))},"v-4cd21123":function(){return n.e(9).then(n.bind(null,356))},"v-f75119d2":function(){return n.e(11).then(n.bind(null,357))},"v-bc6841f2":function(){return n.e(12).then(n.bind(null,358))},"v-6b88b63a":function(){return n.e(13).then(n.bind(null,359))},"v-2491f01e":function(){return n.e(15).then(n.bind(null,360))},"v-6ded6695":function(){return n.e(14).then(n.bind(null,361))},"v-6d3d3ba1":function(){return n.e(17).then(n.bind(null,362))},"v-5cdd9b6a":function(){return n.e(16).then(n.bind(null,363))},"v-065c0076":function(){return n.e(18).then(n.bind(null,364))},"v-42f24c35":function(){return n.e(19).then(n.bind(null,365))},"v-12cc8e96":function(){return n.e(21).then(n.bind(null,366))},"v-a9bbe4d4":function(){return n.e(20).then(n.bind(null,367))},"v-5e0aaaf5":function(){return n.e(22).then(n.bind(null,368))}};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=tc(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=ec(t,this.currentMetaTags)},getMergedMetaTags:function(){var t=this.$page.frontmatter.meta||[];return Ya()([{name:"description",content:this.$description}],t,this.siteMeta,nc)},updateCanonicalLink:function(){Za(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",tc(this.$canonicalUrl))}},watch:{$page:function(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy:function(){ec(null,this.currentMetaTags),Za()}};function Za(){var t=document.querySelector("link[rel='canonical']");t&&t.remove()}function tc(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return t?''):""}function ec(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 nc(t){for(var e=0,n=["name","property","itemprop"];e=c.parentElement.offsetTop+10&&(!u||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(){vc(this,e)}return mc(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=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,h=null==this.activeClass?l:this.activeClass,d=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?Ho(null,xi(a.redirectedFrom),null,n):a;c[d]=Xo(r,v,this.exactPath),c[h]=this.exact||this.exactPath?c[d]: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[d]?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[h],isExactActive:c[d]});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 h=0;h=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=ha(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(ha(this.base)!==this.current.fullPath){var e=ni(this.base+this.current.fullPath);t?Ki(e):Ji(e)}},e.prototype.getCurrentLocation=function(){return ha(this.base)},e}(sa);function ha(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 da=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=ha(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 da(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 da){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-4cd21123":function(){return n.e(9).then(n.bind(null,355))},"v-5913b2cf":function(){return n.e(10).then(n.bind(null,356))},"v-22c07ce2":function(){return n.e(11).then(n.bind(null,357))},"v-f75119d2":function(){return n.e(12).then(n.bind(null,358))},"v-6b88b63a":function(){return n.e(14).then(n.bind(null,359))},"v-6ded6695":function(){return n.e(15).then(n.bind(null,360))},"v-bc6841f2":function(){return n.e(13).then(n.bind(null,361))},"v-6d3d3ba1":function(){return n.e(18).then(n.bind(null,362))},"v-2491f01e":function(){return n.e(16).then(n.bind(null,363))},"v-5cdd9b6a":function(){return n.e(17).then(n.bind(null,364))},"v-39e74116":function(){return n.e(19).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-5e6a771d":function(){return n.e(24).then(n.bind(null,369))},"v-18390f56":function(){return n.e(23).then(n.bind(null,370))},"v-430c31fa":function(){return n.e(25).then(n.bind(null,371))},"v-2c1891b5":function(){return n.e(26).then(n.bind(null,372))},"v-2173826d":function(){return n.e(28).then(n.bind(null,373))},"v-5e0aaaf5":function(){return n.e(27).then(n.bind(null,374))}};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

# 后端部署

# 前言

下载本项目,进入到当前文件夹执行打包命令

git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy/src/backend
+   (opens new window)

# 后端部署

# 前言

下载本项目,进入到当前文件夹执行打包命令

git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy/src/backend
 
1

当前文件夹为打包hoj-backend镜像的相关文件,将这些文件复制到同一个文件夹内,然后打包DataBackup (opens new window)(SpringBoot项目)成jar包也放到当前文件夹,之后执行以下命令进行打包成镜像

docker build -t hoj-backend .
 
1

项目依赖于hoj-redis,hoj-nacos,hoj-mysql等镜像成功启动,以及根据前面三个镜像的配置修改环境参数才可正常启动

docker-compose 启动

version: "3"
 services:
@@ -184,6 +184,6 @@ java -Djava.security.egd=file:/dev/./urandom
       
       →
     

- + diff --git a/docs/docs/.vuepress/dist/deploy/docker.html b/docs/docs/.vuepress/dist/deploy/docker.html new file mode 100644 index 00000000..e5e3c535 --- /dev/null +++ b/docs/docs/.vuepress/dist/deploy/docker.html @@ -0,0 +1,179 @@ + + + + + + 快速部署 | HOJ 文档 + + + + + + + + +

# 快速部署

前提:已经在上一步准备好docker与docker-compose

# 一、单机部署

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

    git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy
    +
    1
  2. 进入文件夹,使用docker-compose启动各容器服务

    cd standAlone
    +
    1

    standAlone文件夹文件有以下:

    ├── docker-compose.yml
    +├── .env
    +
    1
    2

    主要配置请修改.env文件,内容如下:

    注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network

    # redis的配置
    +REDIS_HOST=172.20.0.2
    +REDIS_PORT=6379
    +REDIS_PASSWORD=hoj123456
    +
    +# mysql的配置
    +MYSQL_HOST=172.20.0.3
    +MYSQL_PUBLIC_HOST=172.20.0.3 # 如果判题服务是分布式,请提供当前mysql所在服务器的公网ip
    +MYSQL_PORT=3306
    +MYSQL_ROOT_PASSWORD=hoj123456
    +
    +# nacos的配置
    +NACOS_HOST=172.20.0.4
    +NACOS_PORT=8848
    +NACOS_USERNAME=root
    +NACOS_PASSWORD=hoj123456
    +
    +# backend后端服务的配置
    +BACKEND_HOST=172.20.0.5
    +BACKEND_PORT=6688
    +JWT_TOKEN_SECRET=default # token加密秘钥 默认则生成32位随机密钥
    +JWT_TOKEN_EXPIRE=86400 # token过期时间默认为24小时 86400s
    +JWT_TOKEN_FRESH_EXPIRE=43200 # token默认12小时可自动刷新
    +JUDGE_TOKEN=default # 调用判题服务器的token 默认则生成32位随机密钥
    +EMAIL_SERVER_HOST=smtp.qq.com # 请使用邮件服务的域名或ip
    +EMAIL_SERVER_PORT=465
    +EMAIL_USERNMAE=your_email_username
    +EMAIL_PASSWORD=your_email_password
    +# 开启虚拟判题请提供对应oj的账号密码 格式为 
    +# username1,username2,...
    +# password1,password2,...
    +HDU_ACCOUNT_USERNAME_LIST=
    +HDU_ACCOUNT_PASSWORD_LIST=
    +CF_ACCOUNT_USERNAME_LIST=
    +CF_ACCOUNT_PASSWORD_LIST=
    +
    +# judgeserver的配置
    +JUDGE_SERVER_IP=172.20.0.7
    +JUDGE_SERVER_PORT=8088
    +JUDGE_SERVER_NAME=judger-alone
    +
    +# docker network的配置
    +SUBNET=172.20.0.0/16
    +
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43

    如果不改动,则以默认参数启动

    docker-compose up -d
    +
    1

    根据网速情况,大约十到二十分钟拉取镜像,全程无需人工干预,拉取完毕后,自动启动容器服务,大概需要一至两分钟的初始化。

    等待命令执行完毕后,查看容器状态

    docker ps -a
    +
    1

    当看到所有的容器的状态status都为UPhealthy就代表 OJ 已经启动成功。

    以下默认参数说明

    • 默认超级管理员账号与密码:root / hoj123456
    • 默认redis密码:hoj123456
    • 默认mysql账号与密码:root / hoj123456
    • 默认nacos管理员账号与密码:root / hoj123456
    • 默认不开启https,开启需修改文件同时提供证书文件
    • 判题并发数默认:cpu核心数*2
    • 默认开启vj判题,需要手动修改添加账号与密码,如果不添加不能vj判题!
    • vj判题并发数默认:cpu核心数*4

登录root账号到后台查看服务状态以及到http://ip/admin/conf修改服务配置!

注意:网站的注册及用户账号相关操作需要邮件系统,所以请在系统配置中配置自己的SMTP邮件服务。

(如果已经在启动在.env文件配置了邮件服务即不用再次修改)

Host: smtp.qq.com
+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. 进入文件夹

    cd distributed
    +
    1

    distributed文件夹有以下:

    ├── judgeserver
    +├── main
    +
    1
    2
  3. 首先部署主服务,即是数据后台服务(DataBackup)

    cd main
    +
    1

    该文件夹下有:

    ├── docker-compose.yml
    +├── .env
    +
    1
    2

    修改.env文件中的配置

    vim .env
    +
    1

    注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network

    # redis的配置
    +REDIS_HOST=172.20.0.2
    +REDIS_PORT=6379
    +REDIS_PASSWORD=hoj123456
    +
    +# mysql的配置
    +MYSQL_HOST=172.20.0.3
    +MYSQL_PUBLIC_HOST=172.20.0.3 # 请提供当前mysql所在服务器的公网ip
    +MYSQL_PORT=3306
    +MYSQL_ROOT_PASSWORD=hoj123456
    +
    +# nacos的配置
    +NACOS_HOST=172.20.0.4
    +NACOS_PORT=8848
    +NACOS_USERNAME=root
    +NACOS_PASSWORD=hoj123456
    +
    +# backend后端服务的配置
    +BACKEND_HOST=172.20.0.5
    +BACKEND_PORT=6688
    +JWT_TOKEN_SECRET=default # token加密秘钥 默认则生成32位随机密钥
    +JWT_TOKEN_EXPIRE=86400 # token过期时间默认为24小时 86400s
    +JWT_TOKEN_FRESH_EXPIRE=43200 # token默认12小时可自动刷新
    +JUDGE_TOKEN=default # 调用判题服务器的token 默认则生成32位随机密钥
    +EMAIL_SERVER_HOST=smtp.qq.com # 请使用邮件服务的域名或ip
    +EMAIL_SERVER_PORT=465
    +EMAIL_USERNMAE=your_email_username
    +EMAIL_PASSWORD=your_email_password
    +# 开启虚拟判题请提供对应oj的账号密码 格式为 
    +# username1,username2,...
    +# password1,password2,...
    +HDU_ACCOUNT_USERNAME_LIST=username1,username2
    +HDU_ACCOUNT_PASSWORD_LIST=password1,password2
    +CF_ACCOUNT_USERNAME_LIST=
    +CF_ACCOUNT_PASSWORD_LIST=
    +
    +# 评测数据同步的配置
    +RSYNC_PASSWORD=hoj123456 # 请修改数据同步密码
    +
    +# docker network的配置
    +SUBNET=172.20.0.0/16
    +
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41

    配置修改保存后,当前路径下启动该服务

    docker-compose up -d
    +
    1

    根据网速情况,大约十分钟即可安装完毕,全程无需人工干预。

    等待命令执行完毕后,查看容器状态

    docker ps -a
    +
    1

    当看到所有的容器的状态status都为UPhealthy就代表 OJ 已经启动成功。

  4. 接着,在另一台服务器上,依旧git clone该文件夹下来,然后进入judgeserver文件夹,修改.env的配置

    # nacos的配置
    +NACOS_HOST=NACOS_HOST # 修改为nacos所在服务的ip,即主服务器的公网ip
    +NACOS_PORT=8848 # 修改为nacos启动端口号,默认为8848
    +NACOS_USERNAME=root # 修改为nacos的管理员账号
    +NACOS_PASSWORD=hoj123456 # 修改为nacos的管理员密码
    +
    +# judgeserver的配置
    +JUDGE_SERVER_IP=172.20.0.7 # 修改为当前的服务器公网ip
    +JUDGE_SERVER_PORT=8088  # judgeserver启动端口号
    +JUDGE_SERVER_NAME=judger-1
    +MAX_TASK_NUM=-1 # -1表示最大并行任务数为cpu核心数*2
    +REMOTE_JUDGE_OPEN=true # 当前判题服务器是否开启远程虚拟判题功能
    +REMOTE_JUDGE_MAX_TASK_NUM=-1 # -1表示最大并行任务数为(cpu核心数*2)*2
    +
    +# rsync评测数据同步的配置
    +RSYNC_MASTER_ADDR=127.0.0.1 # 写入主服务器ip
    +RSYNC_PASSWORD=hoj123456 # 与主服务器的rsync密码一致
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    配置修改保存后,当前路径下启动该服务

    docker-compose up -d
    +
    1

    提示:需要开启多台判题机,就如当前第4步的操作一样,在每台服务器上执行以上的操作即可。

  5. 两个服务都启动完成,在浏览器输入主服务ip或域名进行访问,登录root账号到后台查看服务状态。

# 三、开启Https

  • 单机部署:

    提供server.crt和server.key证书与密钥文件放置/standAlone目录下,与docker-compose.yml.env文件放置同一位置,然后修改docker-compose.yml中的hoj-frontend的配置

  • 分布式部署:

    提供server.crt和server.key证书与密钥文件放置/distributed/main目录下,与docker-compose.yml.env文件放置同一位置,然后修改docker-compose.yml`中的hoj-frontend的配置

hoj-frontend:
+    image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_frontend
+    container_name: hoj-frontend
+    restart: always
+    # 开启https,请提供证书
+    volumes:
+      - ./server.crt:/etc/nginx/etc/crt/server.crt
+      - ./server.key:/etc/nginx/etc/crt/server.key
+    environment:
+      - SERVER_NAME=localhost  # 提供你的域名!!!!
+      - BACKEND_SERVER_HOST=${BACKEND_HOST:-172.20.0.5} # backend后端服务地址
+      - BACKEND_SERVER_PORT=${BACKEND_PORT:-6688} # backend后端服务端口号
+      - USE_HTTPS=true # 使用https请设置为true
+    ports:
+      - "80:80"
+      - "443:443"
+    networks:
+      hoj-network:
+        ipv4_address: 172.20.0.6
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+ + + diff --git a/docs/docs/.vuepress/dist/deploy/frontend.html b/docs/docs/.vuepress/dist/deploy/frontend.html index 3726f73d..3be62405 100644 --- a/docs/docs/.vuepress/dist/deploy/frontend.html +++ b/docs/docs/.vuepress/dist/deploy/frontend.html @@ -8,7 +8,7 @@ - + @@ -24,7 +24,7 @@ Gitee首页 (opens new window)

# 前端部署

# 一、常规部署

# 1. 安装nginx

注意:apt下载太慢的话,建议换阿里云源,请自行百度or谷歌

  1. 使用apt安装

    sudo apt install nginx
    +   (opens new window)

    # 前端部署

    # 一、常规部署

    # 1. 安装nginx

    注意:apt下载太慢的话,建议换阿里云源,请自行百度or谷歌

    1. 使用apt安装

      sudo apt install nginx
       
      1
    2. 路径介绍

      • /usr/sbin/nginx:主程序
      • /etc/nginx:存放配置文件
      • /usr/share/nginx:存放静态文件
      • /var/log/nginx:存放日志
    3. 启动nginx

      service nginx start
       
      1
    4. 验证是否成功

      在浏览器输入你的ip地址,如果出现Wellcome to nginx 那么就是配置成功

    # 2. 部署

    1. 下载本项目 (opens new window),git clone或者download zip

    2. 前提是本地有vue-cli4与npm,请自行百度下载

    3. 然后在当前hoj-vue文件夹的src路径运行打包命令

      npm run build
       
      1
    4. 打包成功会在src同文件夹内有个dist文件夹,复制里面的html和css等静态文件

    5. 在云服务器上创建文件夹

      mkdir -p /hoj/www/html
      @@ -209,13 +209,13 @@ hoj-frontend
       EXPOSE 443
       
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
- + diff --git a/docs/docs/.vuepress/dist/deploy/index.html b/docs/docs/.vuepress/dist/deploy/index.html index cf677c41..8d9e30c1 100644 --- a/docs/docs/.vuepress/dist/deploy/index.html +++ b/docs/docs/.vuepress/dist/deploy/index.html @@ -8,7 +8,7 @@ - + @@ -24,7 +24,7 @@ Gitee首页 (opens new window)

# 环境配置

# 环境说明

  • 后端:需要在Linux系统下部署运行,建议使用ubuntu18.04,其它版本的Linux系统也可,同时需要Docker辅助部署
  • 前端:Linux系统下,需要nginx进行反向代理
  • 判题服务:由于判题沙盒有多操作系统版本,Linux系统或Windows都可,强烈建议Linux系统(Ubuntu)
  • 数据同步:需要运行判题服务和后端服务的服务器有rsync即可

# Linux环境搭建

请先准备一台 CPU: 1核 内存: 2G 硬盘: 30G的云服务器,推荐Ubuntu16.04以上的操作系统,

HOJ使用的Ubuntu18.04版本,单机部署建议2G以上内存

# 安装docker

  1. 安装需要的包

    sudo apt-get update
    +   (opens new window)

    # 环境配置

    # 环境说明

    • 后端:需要在Linux系统下部署运行,建议使用ubuntu18.04,其它版本的Linux系统也可,同时需要Docker辅助部署
    • 前端:Linux系统下,需要nginx进行反向代理
    • 判题服务:由于判题沙盒有多操作系统版本,Linux系统或Windows都可,强烈建议Linux系统(Ubuntu)
    • 数据同步:需要运行判题服务和后端服务的服务器有rsync即可

    # Linux环境搭建

    请先准备一台 CPU: 1核 内存: 2G 硬盘: 30G的云服务器,推荐Ubuntu16.04以上的操作系统,

    HOJ使用的Ubuntu18.04版本,单机部署建议2G以上内存

    # 安装docker

    1. 安装需要的包

      sudo apt-get update
       
      1
    2. 安装依赖包

      sudo apt-get install \
          apt-transport-https \
          ca-certificates \
      @@ -41,43 +41,15 @@
       
      1
      2
    3. 验证是否成功

      sudo docker run hello-world
       
      1

    # 安装docker-compose

    1. 下载

      sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
       
      1
    2. 授权

      sudo chmod +x /usr/local/bin/docker-compose
      -
      1

    # Windows 环境

    Windows 下的安装仅供体验,勿在生产环境使用。如有必要,请使用虚拟机安装 Linux 并将 OJ 安装在其中。

    以下教程仅适用于 Win10 x64 下的 PowerShell

    1. 安装 Windows 的 Docker 工具
    2. 右击右下角 Docker 图标,选择 Settings 进行设置
    3. 选择 Shared Drives 菜单,之后勾选你想安装 OJ 的盘符位置(例如勾选D盘),点击 Apply
    4. 输入 Windows 的账号密码进行文件共享
    5. 安装 Pythonpipgitdocker-compose,安装方法自行搜索。

    # 单个部署

    单个部署的顺序是:redis,mysql,rsync,frontend >> nacos >> backend,judgeserver

    # docker-compose开始部署

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

      git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy
      -
      1
    2. 单机部署(建议服务器内存2G以上)

      注意:以下操作建议试用,配置大部分是默认的,实际运行请修改docker-compose.yml文件的配置

      cd standAlone && docker-compose up -d
      -
      1

      根据网速情况,大约十到二十分钟即可安装完毕,全程无需人工干预。

      等待命令执行完毕后,查看容器状态

      docker ps -a
      -
      1

      当看到所有的容器的状态status都为UPhealthy就代表 OJ 已经启动成功。

      更多自定义配置请查看**/standAlone/.env**的文件,或者/src下各组件的详情说明

      以下默认参数说明

      • 默认超级管理员账号与密码:root / hoj123456
      • 默认redis密码:hoj123456
      • 默认mysql账号与密码:root / hoj123456
      • 默认nacos管理员账号与密码:root / hoj123456
      • 默认不开启https,开启需修改文件同时提供证书文件
      • 判题并发数默认:cpu核心数*2
    • 默认开启vj判题,需要手动修改添加账号与密码,如果不添加不能vj判题!

      • vj判题并发数默认:cpu核心数*4

      登录root账号到后台查看服务状态以及到http://ip/admin/conf修改服务配置!

      注意:网站的注册及用户账号相关操作需要邮件系统,所以请在系统配置中配置自己的邮件服务。

    1. 分布式部署(默认开启rsync数据同步)

      • 主服务启动,默认不提供判题服务,请修改该启动文件配置

        cd distributed/main
        -vim .env # 请根据文件内注释提示修改
        -
        1
        2

        配置修改保存后,在docker-compose.yml当前路径下启动该服务

        docker-compose up -d
        -
        1
      • 判题服务启动,请修改该启动文件配置

        cd distributed/judgeserver
        -vim .env # 请根据文件内注释提示修改
        -
        1
        2

        配置修改保存后,在docker-compose.yml当前路径下启动该服务

        docker-compose up -d
        -
        1

      两个服务都启动完成,在浏览器输入主服务ip或域名进行访问,登录root账号到后台查看服务状态以及到http://ip/admin/conf修改服务配置!

    如果需要开启https

    • 单机:

      提供server.crt和server.key证书与密钥文件放置/standAlone目录下,与docker-compose.yml.env文件放置同一位置,然后修改docker-compose.yml中的hoj-frontend的配置

    • 分布式:提供server.crt和server.key证书与密钥文件放置/distributed/main目录下,与docker-compose.yml.env文件放置同一位置,然后修改docker-compose.yml`中的hoj-frontend的配置

    hoj-frontend:
    -    image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_frontend
    -    container_name: hoj-frontend
    -    restart: always
    -    # 开启https,请提供证书
    -    volumes:
    -      - ./server.crt:/etc/nginx/etc/crt/server.crt
    -      - ./server.key:/etc/nginx/etc/crt/server.key
    -    environment:
    -      - SERVER_NAME=localhost  # 提供你的域名!!!!
    -      - BACKEND_SERVER_HOST=${BACKEND_HOST:-172.20.0.5} # backend后端服务地址
    -      - BACKEND_SERVER_PORT=${BACKEND_PORT:-6688} # backend后端服务端口号
    -      - USE_HTTPS=true # 使用https请设置为true
    -    ports:
    -      - "80:80"
    -      - "443:443"
    -    networks:
    -      hoj-network:
    -        ipv4_address: 172.20.0.6
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

# Windows 环境

Windows 下的安装仅供体验,勿在生产环境使用。如有必要,请使用虚拟机安装 Linux 并将 OJ 安装在其中。

以下教程仅适用于 Win10 x64 下的 PowerShell

  1. 安装 Windows 的 Docker 工具
  2. 右击右下角 Docker 图标,选择 Settings 进行设置
  3. 选择 Shared Drives 菜单,之后勾选你想安装 OJ 的盘符位置(例如勾选D盘),点击 Apply
  4. 输入 Windows 的账号密码进行文件共享
  5. 安装 Pythonpipgitdocker-compose,安装方法自行搜索。

# 单个部署顺序

单个部署的顺序是:redis,mysql,rsync,frontend >> nacos >> backend,judgeserver

- + diff --git a/docs/docs/.vuepress/dist/deploy/judgeserver.html b/docs/docs/.vuepress/dist/deploy/judgeserver.html index c6e3897e..8b3b964a 100644 --- a/docs/docs/.vuepress/dist/deploy/judgeserver.html +++ b/docs/docs/.vuepress/dist/deploy/judgeserver.html @@ -8,7 +8,7 @@ - + @@ -24,7 +24,7 @@ Gitee首页 (opens new window)

# 判题服务部署

HOJ使用安全沙盒的是开源的go-judge (opens new window),具体使用可看该项目文档。

注意:判题服务可以部署多台云服务器,步骤一样

# 一、常规部署

  1. 下载本项目 (opens new window),git clone或者download zip

  2. 修改本项目路径下/hoj-springboot/JudgeServer/src/main/resources/bootstrap.yml的相关配置

    hoj-judge-server:
    +   (opens new window)

    # 判题服务部署

    HOJ使用安全沙盒的是开源的go-judge (opens new window),具体使用可看该项目文档。

    注意:判题服务可以部署多台云服务器,步骤一样

    # 一、常规部署

    1. 下载本项目 (opens new window),git clone或者download zip

    2. 修改本项目路径下/hoj-springboot/JudgeServer/src/main/resources/bootstrap.yml的相关配置

      hoj-judge-server:
         max-task-num: -1 # -1表示最大并行任务数为cpu核心数*2
         ip: 127.0.0.1 # -1表示使用默认本地ipv4,若是部署其它服务器,务必使用公网ip
         port: 8088  # 端口号
      @@ -171,6 +171,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 8c1f8cef..0890aef2 100644 --- a/docs/docs/.vuepress/dist/deploy/mysql.html +++ b/docs/docs/.vuepress/dist/deploy/mysql.html @@ -8,7 +8,7 @@ - + @@ -24,7 +24,7 @@ Gitee首页 (opens new window)

# MySQL部署

首先 先下载hoj-deploy (opens new window)

git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy/src/mysql
+   (opens new window)

# MySQL部署

首先 先下载hoj-deploy (opens new window)

git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy/src/mysql
 
1

# 前言

当前文件夹为打包hoj-mysql镜像的相关文件,只需将这些文件复制到同一个文件夹内,之后执行以下命令进行打包成镜像。

docker build -t hoj-mysql .
 
1

docker run启动

docker run -d --name hoj-mysql \
 -v ./hoj/data/mysql/data:/var/lib/mysql \
@@ -159,10 +159,10 @@ EOF
        
-        redis部署
+        Redis部署
       

- + diff --git a/docs/docs/.vuepress/dist/deploy/nacos.html b/docs/docs/.vuepress/dist/deploy/nacos.html index d8097ae0..4b31d322 100644 --- a/docs/docs/.vuepress/dist/deploy/nacos.html +++ b/docs/docs/.vuepress/dist/deploy/nacos.html @@ -8,7 +8,7 @@ - + @@ -24,7 +24,7 @@ Gitee首页 (opens new window)

# Nacos部署

# docker部署

docker run -d \
+   (opens new window)

# Nacos部署

# docker部署

docker run -d \
 -e JVM_XMS=384m \
 -e JVM_XMX=384m \
 -e JVM_XMN=192m \
@@ -43,12 +43,12 @@ nacos/nacos-server:1.4.2
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 常规部署

请自行百度下载修改配置

- + diff --git a/docs/docs/.vuepress/dist/deploy/redis.html b/docs/docs/.vuepress/dist/deploy/redis.html index a65e32b7..dfee206c 100644 --- a/docs/docs/.vuepress/dist/deploy/redis.html +++ b/docs/docs/.vuepress/dist/deploy/redis.html @@ -3,12 +3,12 @@ - redis部署 | HOJ 文档 + Redis部署 | HOJ 文档 - + @@ -24,7 +24,7 @@ Gitee首页 (opens new window)

# redis部署

# docker部署

docker run -d --name redis -p 6379:6379 
+   (opens new window)

# Redis部署

# docker部署

docker run -d --name redis -p 6379:6379 
 -v /hoj/data/redis/data:/data \
 --restart="always" \
 redis \
@@ -38,6 +38,6 @@ redis \

- + diff --git a/docs/docs/.vuepress/dist/deploy/rsync.html b/docs/docs/.vuepress/dist/deploy/rsync.html index 200efe35..8419715b 100644 --- a/docs/docs/.vuepress/dist/deploy/rsync.html +++ b/docs/docs/.vuepress/dist/deploy/rsync.html @@ -8,7 +8,7 @@ - + @@ -24,7 +24,7 @@ Gitee首页 (opens new window)

# 评测数据同步

# 一、常规部署

  1. 在主后台服务开启rsync实现服务增量同步,本HOJ使用子服务器主动拉取最新评测数据的功能(可选择主服务推的功能,但对主服务器的功耗较大)

  2. 首先在主服务器(运行后端服务)的服务器中配置,指令如下

    vim /etc/rsyncd/rsyncd.conf # 新建配置文件
    +   (opens new window)

    # 评测数据同步

    # 一、常规部署

    1. 在主后台服务开启rsync实现服务增量同步,本HOJ使用子服务器主动拉取最新评测数据的功能(可选择主服务推的功能,但对主服务器的功耗较大)

    2. 首先在主服务器(运行后端服务)的服务器中配置,指令如下

      vim /etc/rsyncd/rsyncd.conf # 新建配置文件
       
      1
      # 将以下内容写入的rsyncd.conf文件里面 然后保存退出
       port = 873
       uid = root
      @@ -105,7 +105,7 @@ hoj-rsync
             - RSYNC_MASTER_ADDR=master_server_ip # 主服务器ip
           ports:
             - "0.0.0.0:873:873"
      -
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
    3. ###文件介绍

      # 1. rsync.conf

      主服务器的rsync配置文件

      port = 873
      +
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17

      # 文件介绍

      # 1. rsync.conf

      主服务器的rsync配置文件

      port = 873
       uid = root
       gid = root
       use chroot = yes
      @@ -150,6 +150,6 @@ secrets file =<
             
             →
           

- + diff --git a/docs/docs/.vuepress/dist/develop/db.html b/docs/docs/.vuepress/dist/develop/db.html index ba8b315b..8b626cf4 100644 --- a/docs/docs/.vuepress/dist/develop/db.html +++ b/docs/docs/.vuepress/dist/develop/db.html @@ -8,7 +8,7 @@ - + @@ -24,7 +24,7 @@ Gitee首页 (opens new window)

# 数据库说明

# 用户资料模块

user_info表

列名 实体属性类型 备注
uuid String 主键 uuid用户id
username String 登录账号
password String 登录密码
nickname String 用户昵称
school String 学校
course String 专业
number String 学号
realname String 真实名字
email Srting 邮箱
avatar String 头像图片地址
signature String 个性签名
cf_name String codeforces的username
status int 0可用,1不可用
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

session表

列名 实体属性类型 备注
id long 主键 auto_increment
uid String 外键 用户id
user_agent String 访问的浏览器参数
ip Srting 访问所在的ip
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

role 角色表

列名 实体属性类型 备注
id long 主键 auto_increment
role String “admin”,”tourist”,“user”
description String 角色描述
status int 是否可用,0可用 1不可用
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

user_role表

列名 实体属性类型 备注
id long 主键 auto_increment
uid String 外键 用户id
role_id int 外键 角色id
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

auth权限表

列名 实体属性类型 备注
id long 主键 auto_increment
name String 权限名称,“superadmin”,”contest”,“admin”,”common” 普通用户默认为“common”
permission String 权限字符串,例如“contest:1001”,发布某场比赛。 “all”,”select”,”update”等等,
status int 0可用,1不可用
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

role_auth表

列名 实体属性类型 备注
id long 主键 auto_increment
role_id int 角色id
auth_id int 权限id
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

user_record表 个人做题记录表

列名 实体属性类型 备注
id long primary key auto_increment
uid String 外键 用户id
submissions int 总提交数
total_score int 总OI题目得分
rating int Cf得分,未参加过默认为1500
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

user_acproblem表

列名 实体属性类型 备注
id long primary key auto_increment
uid String 外键 用户id
pid long 外键 Ac的题目id
subimit_id long 外键 提交的id
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

# 题目详情模块

problem表

列名 实体属性类型 备注
id long primary key auto_increment 1000开始
problem_id String 题目展示id
title String 题目标题
author String 默认可为无
type int 题目类型 0为ACM,1为OI
time_limit int 时间限制(ms),默认为c/c++限制,其它语言为2倍
memory_limit int 空间限制(mb),默认为c/c++限制,其它语言为2倍
description String 内容描述
input String 输入描述
output String 输出描述
examples Srting 题面输入输出样例,不纳入评测数据
source int 题目来源(比赛id),默认为hoj,可能为爬虫vj
difficulty int 题目难度,0简单,1中等,2困难
hint String 备注 提醒
auth int 默认为1公开,2为私有,3为比赛中。
io_score int 当该题目为io题目时的分数 默认为100
code_share boolean 该题目对应的相关提交代码,用户是否可用分享
spj_code String 特判程序代码 空代表非特判
spj_language String 特判程序的语言
isRemoveEndBlank boolean 是否默认去除用户代码的文末空格
openCaseResult boolean 是否默认开启该题目的测试样例结果查看
caseVersion String 题目测试数据的版本号
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

problem_case表

列名 实体属性类型 备注
id long primary key auto_increment
pid long 外键 题目id
input String 测试样例的输入
output String 测试样例的输出
status String 状态0可用,1不可用
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

problem_count表

列名 实体属性类型 备注
pid int 题目id
total int 总提交数
ac int 通过数
mle int 空间超限
tle int 时间超限
re int 运行错误
pe int 格式错误
ce int 编译错误
wa int 答案错误
se int 系统错误
pa int 该IO题目分数总和
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

tag表 题目表的标签

列名 实体属性类型 备注
id long 主键 auto_increment
name String 标签名字
color String 标签颜色
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

problem_tag表

列名 实体属性类型 备注
id int 主键id
tid int 标签id
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

language表

列名 实体属性类型 备注
id long 主键id
content_type String 语言类型
description String 语言描述
name String 语言名字
compile_command String 编译指令
template String A+B题目模板
code_template String 语言对应的代码模板
is_spj boolean 是否可作为特殊判题的一种语言
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

code_template表

列名 实体属性类型 备注
id long 主键id
pid long 外键 题目id
lid long 外键 语言id
code String 代码模板
status boolean 是否启用
gmt_create datetime 修改时间
gmt_modified datetime 修改时间

# 提交评测模块

判题结果status

未提交:STATUS_NOT_SUBMITTED = -10

提交中:STATUS_SUBMITTING = 9

排队中:STATUS_PENDING = 6

评测中:STATUS_JUDGING = 7

编译错误:STATUS_COMPILE_ERROR = -2

输出格式错误:STATUS_PRESENTATION_ERROR = -3

答案错误:STATUS__WRONG_ANSWER = -1

评测通过:STATUS_ACCEPTED = 0

cpu时间超限:STATUS__CPU_TIME_LIMIT_EXCEEDED = 1

真实时间超限:STATUS__REAL_TIME_LIMIT_EXCEEDED = 2

空间超限:STATUS__MEMORY_LIMIT_EXCEEDED = 3

运行错误:STATUS__RUNTIME_ERROR = 4

系统错误:STATUS__SYSTEM_ERROR = 5

OI评测部分通过:STATUS_PARTIAL_ACCEPTED = 8

提交失败:STATUS_SUBMITTED_FAILED= 10

judge表

列名 实体属性类型 备注
submit_id long primary key auto_increment
display_pid String 题目展示id
pid long 外键 题目id
uid String 外键 提交用户的id
username String 外键 用户名
submit_time datetime 提交时间
status String 判题结果
share Boolean 代码是否分享
error_message String 错误提醒(编译错误,或者vj提醒)
time int 运行时间
memory int 所耗内存
length int 代码长度
code String 代码
language String 代码语言
cpid int 比赛中的题目编号id
judger String 判题机ip
ip String 提交者ip
cid int 题目来源的比赛id,默认为0
version int 乐观锁
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

jugdeCase表 评测单个样例结果表

列名 实体属性类型 备注
submit_id long 外键 提交id
problemId String 外键 题目id
userId String 外键 提交用户的id
Status String 单个样例评测结果
time int 运行时间
memory int 运行内存
case_id String 测试样例id
input_data String 样例输入,比赛不可看
Output_data String 样例输出,比赛不可看
user_output Srting 用户样例输出,比赛不可看
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

# 比赛模块

更新比赛状态的存储过程

DELIMITER |
+   (opens new window)

# 数据库说明

# 用户资料模块

user_info表

列名 实体属性类型 备注
uuid String 主键 uuid用户id
username String 登录账号
password String 登录密码
nickname String 用户昵称
school String 学校
course String 专业
number String 学号
realname String 真实名字
email Srting 邮箱
avatar String 头像图片地址
signature String 个性签名
cf_name String codeforces的username
status int 0可用,1不可用
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

session表

列名 实体属性类型 备注
id long 主键 auto_increment
uid String 外键 用户id
user_agent String 访问的浏览器参数
ip Srting 访问所在的ip
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

role 角色表

列名 实体属性类型 备注
id long 主键 auto_increment
role String “admin”,”tourist”,“user”
description String 角色描述
status int 是否可用,0可用 1不可用
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

user_role表

列名 实体属性类型 备注
id long 主键 auto_increment
uid String 外键 用户id
role_id int 外键 角色id
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

auth权限表

列名 实体属性类型 备注
id long 主键 auto_increment
name String 权限名称,“superadmin”,”contest”,“admin”,”common” 普通用户默认为“common”
permission String 权限字符串,例如“contest:1001”,发布某场比赛。 “all”,”select”,”update”等等,
status int 0可用,1不可用
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

role_auth表

列名 实体属性类型 备注
id long 主键 auto_increment
role_id int 角色id
auth_id int 权限id
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

user_record表 个人做题记录表

列名 实体属性类型 备注
id long primary key auto_increment
uid String 外键 用户id
submissions int 总提交数
total_score int 总OI题目得分
rating int Cf得分,未参加过默认为1500
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

user_acproblem表

列名 实体属性类型 备注
id long primary key auto_increment
uid String 外键 用户id
pid long 外键 Ac的题目id
subimit_id long 外键 提交的id
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

# 题目详情模块

problem表

列名 实体属性类型 备注
id long primary key auto_increment 1000开始
problem_id String 题目展示id
title String 题目标题
author String 默认可为无
type int 题目类型 0为ACM,1为OI
time_limit int 时间限制(ms),默认为c/c++限制,其它语言为2倍
memory_limit int 空间限制(mb),默认为c/c++限制,其它语言为2倍
description String 内容描述
input String 输入描述
output String 输出描述
examples Srting 题面输入输出样例,不纳入评测数据
source int 题目来源(比赛id),默认为hoj,可能为爬虫vj
difficulty int 题目难度,0简单,1中等,2困难
hint String 备注 提醒
auth int 默认为1公开,2为私有,3为比赛中。
io_score int 当该题目为io题目时的分数 默认为100
code_share boolean 该题目对应的相关提交代码,用户是否可用分享
spj_code String 特判程序代码 空代表非特判
spj_language String 特判程序的语言
isRemoveEndBlank boolean 是否默认去除用户代码的文末空格
openCaseResult boolean 是否默认开启该题目的测试样例结果查看
caseVersion String 题目测试数据的版本号
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

problem_case表

列名 实体属性类型 备注
id long primary key auto_increment
pid long 外键 题目id
input String 测试样例的输入
output String 测试样例的输出
status String 状态0可用,1不可用
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

problem_count表

列名 实体属性类型 备注
pid int 题目id
total int 总提交数
ac int 通过数
mle int 空间超限
tle int 时间超限
re int 运行错误
pe int 格式错误
ce int 编译错误
wa int 答案错误
se int 系统错误
pa int 该IO题目分数总和
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

tag表 题目表的标签

列名 实体属性类型 备注
id long 主键 auto_increment
name String 标签名字
color String 标签颜色
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

problem_tag表

列名 实体属性类型 备注
id int 主键id
tid int 标签id
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

language表

列名 实体属性类型 备注
id long 主键id
content_type String 语言类型
description String 语言描述
name String 语言名字
compile_command String 编译指令
template String A+B题目模板
code_template String 语言对应的代码模板
is_spj boolean 是否可作为特殊判题的一种语言
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

code_template表

列名 实体属性类型 备注
id long 主键id
pid long 外键 题目id
lid long 外键 语言id
code String 代码模板
status boolean 是否启用
gmt_create datetime 修改时间
gmt_modified datetime 修改时间

# 提交评测模块

判题结果status

未提交:STATUS_NOT_SUBMITTED = -10

提交中:STATUS_SUBMITTING = 9

排队中:STATUS_PENDING = 6

评测中:STATUS_JUDGING = 7

编译错误:STATUS_COMPILE_ERROR = -2

输出格式错误:STATUS_PRESENTATION_ERROR = -3

答案错误:STATUS__WRONG_ANSWER = -1

评测通过:STATUS_ACCEPTED = 0

cpu时间超限:STATUS__CPU_TIME_LIMIT_EXCEEDED = 1

真实时间超限:STATUS__REAL_TIME_LIMIT_EXCEEDED = 2

空间超限:STATUS__MEMORY_LIMIT_EXCEEDED = 3

运行错误:STATUS__RUNTIME_ERROR = 4

系统错误:STATUS__SYSTEM_ERROR = 5

OI评测部分通过:STATUS_PARTIAL_ACCEPTED = 8

提交失败:STATUS_SUBMITTED_FAILED= 10

judge表

列名 实体属性类型 备注
submit_id long primary key auto_increment
display_pid String 题目展示id
pid long 外键 题目id
uid String 外键 提交用户的id
username String 外键 用户名
submit_time datetime 提交时间
status String 判题结果
share Boolean 代码是否分享
error_message String 错误提醒(编译错误,或者vj提醒)
time int 运行时间
memory int 所耗内存
length int 代码长度
code String 代码
language String 代码语言
cpid int 比赛中的题目编号id
judger String 判题机ip
ip String 提交者ip
cid int 题目来源的比赛id,默认为0
version int 乐观锁
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

jugdeCase表 评测单个样例结果表

列名 实体属性类型 备注
submit_id long 外键 提交id
problemId String 外键 题目id
userId String 外键 提交用户的id
Status String 单个样例评测结果
time int 运行时间
memory int 运行内存
case_id String 测试样例id
input_data String 样例输入,比赛不可看
Output_data String 样例输出,比赛不可看
user_output Srting 用户样例输出,比赛不可看
gmt_create datetime 创建时间
gmt_modified datetime 修改时间

# 比赛模块

更新比赛状态的存储过程

DELIMITER |
 
 DROP PROCEDURE IF EXISTS contest_status |
 CREATE PROCEDURE contest_status()
@@ -68,11 +68,11 @@ BEFORE INSERT ON<
       ←
        
-        使用简介
+       
+        安全沙盒的调用
       

- + diff --git a/docs/docs/.vuepress/dist/develop/index.html b/docs/docs/.vuepress/dist/develop/index.html index d5c3eee6..05e14e1b 100644 --- a/docs/docs/.vuepress/dist/develop/index.html +++ b/docs/docs/.vuepress/dist/develop/index.html @@ -8,7 +8,7 @@ - + @@ -24,7 +24,7 @@ Gitee首页 (opens new window)

# 开发简介

  • 数据库表说明
  • 其它待续.......

# 开发简介

  • 数据库表说明
  • 其它待续.......
- + diff --git a/docs/docs/.vuepress/dist/use/sandbox.html b/docs/docs/.vuepress/dist/develop/sandbox.html similarity index 87% rename from docs/docs/.vuepress/dist/use/sandbox.html rename to docs/docs/.vuepress/dist/develop/sandbox.html index 09dfbffc..351694e4 100644 --- a/docs/docs/.vuepress/dist/use/sandbox.html +++ b/docs/docs/.vuepress/dist/develop/sandbox.html @@ -8,7 +8,7 @@ - + @@ -24,7 +24,7 @@ Gitee首页 (opens new window)

# 安全沙盒的调用

Judger-SandBox使用的是开源项目go-judge (opens new window)Linux版本的可执行文件,更多调用方式请自行浏览go-judge (opens new window)

启动Judger-SandBox (opens new window),默认监听5050端口

HOJ用的是java来调用此沙盒,请看JudgeServer-judge (opens new window)下的SandboxRun.java

# 验证是否启动

访问:http://localhost:5050/version

# 编译

1.1 请求的url为

http://localhost:5050/run

1.2 请求方式

POST

1.3 请求参数

数据格式为json,内容如下

 {
+   (opens new window)

# 安全沙盒的调用

Judger-SandBox使用的是开源项目go-judge (opens new window)Linux版本的可执行文件,更多调用方式请自行浏览go-judge (opens new window)

HOJ用的是java来调用此沙盒,请看JudgeServer-judge (opens new window)下的SandboxRun.java

启动Judger-SandBox (opens new window),默认监听5050端口

# 验证是否启动

访问:http://localhost:5050/version

# 编译

1.1 请求的url为

http://localhost:5050/run

1.2 请求方式

POST

1.3 请求参数

数据格式为json,内容如下

 {
     "cmd": [
         {
             "args": [
@@ -239,13 +239,13 @@
 ]
 
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
- + diff --git a/docs/docs/.vuepress/dist/index.html b/docs/docs/.vuepress/dist/index.html index 604aeef9..3c33833c 100644 --- a/docs/docs/.vuepress/dist/index.html +++ b/docs/docs/.vuepress/dist/index.html @@ -8,7 +8,7 @@ - + @@ -33,6 +33,6 @@

分布式

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

高效化

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

定制化

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

安全化

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

多样化

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

- + diff --git a/docs/docs/.vuepress/dist/introducition/about.html b/docs/docs/.vuepress/dist/introducition/about.html index af93e300..ee604ee1 100644 --- a/docs/docs/.vuepress/dist/introducition/about.html +++ b/docs/docs/.vuepress/dist/introducition/about.html @@ -8,7 +8,7 @@ - + @@ -34,6 +34,6 @@ →

- + diff --git a/docs/docs/.vuepress/dist/introducition/index.html b/docs/docs/.vuepress/dist/introducition/index.html index 261d1b88..c7132caf 100644 --- a/docs/docs/.vuepress/dist/introducition/index.html +++ b/docs/docs/.vuepress/dist/introducition/index.html @@ -8,7 +8,7 @@ - + @@ -29,6 +29,6 @@ →

- + diff --git a/docs/docs/.vuepress/dist/use/contest.html b/docs/docs/.vuepress/dist/use/contest.html new file mode 100644 index 00000000..0133a20f --- /dev/null +++ b/docs/docs/.vuepress/dist/use/contest.html @@ -0,0 +1,38 @@ + + + + + + 比赛介绍 | HOJ 文档 + + + + + + + + +

# 比赛介绍

在这里插入图片描述

创建比赛时两种赛制:

  • ACM 模式

    在该模式下,我们严格按照ACM-ICPC的比赛规则来进行,Contest设置项中的Seal Time Rank即为是否封榜,封榜后将不再刷新排名。可选择比赛结束前半小时,比赛前一小时,比赛全程封榜。

  • OI 模式

    在OI模式下,选手的提交将根据得分点来计分,多次提交以最后一次提交为准,排名规则为多个题目的总分数。同样可以进行封榜操作,封榜时段,选手不能查看到实时的排行榜数据!

注意:管理员可以选择强制刷新,查看实时的排行榜数据!通过Force Update来强制刷新榜,且刷新后的榜仅对管理者可见。

比赛权限模式有三种:

  • 公开赛:所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,且都可以在比赛阶段随时提交。
  • 保护赛:所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,但在比赛阶段提交需要提供该比赛的密码!
  • 私有赛:仅支持有比赛密码的用户进入比赛,查看查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,包括提交。
+ + + diff --git a/docs/docs/.vuepress/dist/use/discussion-admin.html b/docs/docs/.vuepress/dist/use/discussion-admin.html new file mode 100644 index 00000000..2b0fb7a3 --- /dev/null +++ b/docs/docs/.vuepress/dist/use/discussion-admin.html @@ -0,0 +1,38 @@ + + + + + + 评论管理 | HOJ 文档 + + + + + + + + +

# 评论管理

在这里插入图片描述

  • 后台管理员可以查看所有的讨论帖,并且可以选择是否置顶,是否正常显示,删除,查看等

  • 后台管理员可以查看对应讨论帖的举报内容

    在这里插入图片描述

+ + + diff --git a/docs/docs/.vuepress/dist/use/import-problem.html b/docs/docs/.vuepress/dist/use/import-problem.html new file mode 100644 index 00000000..4bd9d4d2 --- /dev/null +++ b/docs/docs/.vuepress/dist/use/import-problem.html @@ -0,0 +1,38 @@ + + + + + + 导入题目 | HOJ 文档 + + + + + + + + +

# 导入题目

# 一、导入HOJ题目

待续.....

# 二、导入其它OJ题目

导入HDU、Codeforces题目,只需提供该题目的题号便可一键导入

管理员进入后台,点击题目列表

在这里插入图片描述

然后添加上方的添加按钮

在这里插入图片描述

在弹出窗中选择OJ名字及题号,便可导入

在这里插入图片描述

注意:

  • HDU的题号一般是 1000以上的数字
  • Codeforces的题号是1000A、1000B、这种数字加大写英文字母的格式
+ + + diff --git a/docs/docs/.vuepress/dist/use/import-user.html b/docs/docs/.vuepress/dist/use/import-user.html new file mode 100644 index 00000000..2639adca --- /dev/null +++ b/docs/docs/.vuepress/dist/use/import-user.html @@ -0,0 +1,38 @@ + + + + + + 导入用户 | HOJ 文档 + + + + + + + + +

# 导入用户

在这里插入图片描述

要求如下:

  1. 用户数据导入仅支持csv格式的用户数据。

  2. 共三列数据: 用户名,密码,邮箱,任一列不能为空,否则该行数据可能导入失败。

  3. 第一行不必写(“用户名”,“密码”,“邮箱”)这三个列名。

  4. 请导入保存为UTF-8编码的文件,否则中文可能会乱码。

+ + + diff --git a/docs/docs/.vuepress/dist/use/index.html b/docs/docs/.vuepress/dist/use/index.html index 76eba02b..6366b4a3 100644 --- a/docs/docs/.vuepress/dist/use/index.html +++ b/docs/docs/.vuepress/dist/use/index.html @@ -8,7 +8,7 @@ - + @@ -24,15 +24,15 @@ Gitee首页 (opens new window)

# 使用简介

  • 安全沙盒的简单介绍
  • 特殊判题的程序例子
  • 其它待续......

# 使用简介

  • 测试数据的介绍
  • 比赛的介绍
  • 导入题目的介绍
  • 导入用户的介绍
  • 讨论管理的介绍
  • 特殊判题的程序例子
  • 其它待续......
- + diff --git a/docs/docs/.vuepress/dist/use/spj.html b/docs/docs/.vuepress/dist/use/spj.html index 19e925e2..bef99294 100644 --- a/docs/docs/.vuepress/dist/use/spj.html +++ b/docs/docs/.vuepress/dist/use/spj.html @@ -8,7 +8,7 @@ - + @@ -24,7 +24,7 @@ Gitee首页 (opens new window)

# 特殊判题

后台对题目使用特殊判题时,请参考以下程序例子

#include<iostream>
+   (opens new window)

# 特殊判题

# 什么是特殊判题?

特殊判题(Special Judge)是指OJ将使用一个特定的程序来判断提交的程序的输出是不是正确的,而不是单纯地看提交的程序的输出是否和标准输出一模一样。

# 使用场景

一般使用Special Judge都是因为题目的答案不唯一,更具体一点说的话一般是两种情况:

  • 题目最终要求输出一个解决方案,而且这个解决方案可能不唯一。
  • 题目最终要求输出一个浮点数,而且会告诉只要答案和标准答案相差不超过某个较小的数就可以,比如0.01。这种情况保留3位小数、4位小数等等都是可以的,而且多保留几位小数也没什么坏处。

# 例子:

在创建题目的适合,选择开启特殊判题,编写特殊判题程序,然后编译通过便可。

后台对题目使用特殊判题时,请参考以下程序例子

#include<iostream>
 #include<cstdio>
 #define AC 100
 #define WA 101
@@ -79,9 +79,9 @@
 }
 
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
- + diff --git a/docs/docs/.vuepress/dist/use/testcase.html b/docs/docs/.vuepress/dist/use/testcase.html new file mode 100644 index 00000000..a9120d93 --- /dev/null +++ b/docs/docs/.vuepress/dist/use/testcase.html @@ -0,0 +1,46 @@ + + + + + + 测试用例 | HOJ 文档 + + + + + + + + +

# 测试用例

在这里插入图片描述

进入后台添加题目,上传题目测试用例数据可以选择手动输入、Zip文件上传两种方式

# 一、手动输入

每次点击Add Sampple就可以手动填入该用例的输入与输出,该方式比较适合题目数据简单的,同时手动输入的题目数据将记录进数据库,下次对该题目进行修改可以直接获取,然后进行测试数据的修改,同时也会在服务器对应的testcase文件夹生成对应的文件。

# 二、文件上传

对于通题目,测试用例文件包括inoutans三种拓展名

例如有两组测试用例,则对于普通题目测试用例的文件名分别为1.in, 1.out(1.ans), 2.in, 2.out(2.ans)其他形式的文件后台均不识别。

压缩时,请将文件都放在压缩包的根目录,而不是包含在某一个文件夹中,比如正确的格式是:

├── 1.in
+├── 1.out
+├── 2.in
+├── 2.out
+
1
2
3
4
├── 1.in
+├── 1.ans
+├── 2.in
+├── 2.ans
+
1
2
3
4

然后压缩测试用例到一个zip中

注意:不要在这些文件外面套多一层文件夹,请直接压缩!!!

同时建议:尽量合并测试用例到一个文件中,减少测试用例组数,这会一定程度上提高判题性能。

+ + + diff --git a/docs/docs/deploy/README.md b/docs/docs/deploy/README.md index 498b39f8..703390f5 100644 --- a/docs/docs/deploy/README.md +++ b/docs/docs/deploy/README.md @@ -88,114 +88,9 @@ Windows 下的安装仅供体验,勿在生产环境使用。如有必要,请 -## 单个部署 +## 单个部署顺序 单个部署的顺序是:redis,mysql,rsync,frontend >> nacos >> backend,judgeserver -## docker-compose开始部署 - -1. 选择好需要安装的位置,运行下面命令 - - ```shell - git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy - ``` - -2. 单机部署(建议服务器内存2G以上) - - > 注意:以下操作建议试用,配置大部分是默认的,实际运行请修改`docker-compose.yml`文件的配置 - - ```shell - cd standAlone && docker-compose up -d - ``` - - 根据网速情况,大约十到二十分钟即可安装完毕,全程无需人工干预。 - - 等待命令执行完毕后,查看容器状态 - - ```shell - docker ps -a - ``` - - 当看到所有的容器的状态status都为`UP`或`healthy`就代表 OJ 已经启动成功。 - - > 更多自定义配置请查看**/standAlone/.env**的文件,或者/src下各组件的详情说明 - - > 以下默认参数说明 - - - 默认超级管理员账号与密码:root / hoj123456 - - 默认redis密码:hoj123456 - - 默认mysql账号与密码:root / hoj123456 - - 默认nacos管理员账号与密码:root / hoj123456 - - 默认不开启https,开启需修改文件同时提供证书文件 - - 判题并发数默认:cpu核心数*2 - -- 默认开启vj判题,需要手动修改添加账号与密码,如果不添加不能vj判题! - - - vj判题并发数默认:cpu核心数*4 - - **登录root账号到后台查看服务状态以及到`http://ip/admin/conf`修改服务配置!** - - 注意:网站的注册及用户账号相关操作需要邮件系统,所以请在系统配置中配置自己的邮件服务。 - -3. 分布式部署(默认开启rsync数据同步) - - - 主服务启动,默认不提供判题服务,请修改该启动文件配置 - - ```shell - cd distributed/main - vim .env # 请根据文件内注释提示修改 - ``` - - 配置修改保存后,在`docker-compose.yml`当前路径下启动该服务 - - ```shell - docker-compose up -d - ``` - - - 判题服务启动,请修改该启动文件配置 - - ```shell - cd distributed/judgeserver - vim .env # 请根据文件内注释提示修改 - ``` - - 配置修改保存后,在`docker-compose.yml`当前路径下启动该服务 - - ```shell - docker-compose up -d - ``` - - 两个服务都启动完成,在浏览器输入主服务ip或域名进行访问,登录root账号到后台查看服务状态以及到`http://ip/admin/conf`修改服务配置! - - -> 如果需要开启https - -- 单机: - - 提供server.crt和server.key证书与密钥文件放置`/standAlone`目录下,与`docker-compose.yml`和`.env`文件放置同一位置,然后修改`docker-compose.yml`中的hoj-frontend的配置 - -- 分布式:提供server.crt和server.key证书与密钥文件放置`/distributed/main目录下,与`docker-compose.yml`和`.env`文件放置同一位置,然后修改`docker-compose.yml`中的hoj-frontend的配置 - -```yaml -hoj-frontend: - image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_frontend - container_name: hoj-frontend - restart: always - # 开启https,请提供证书 - volumes: - - ./server.crt:/etc/nginx/etc/crt/server.crt - - ./server.key:/etc/nginx/etc/crt/server.key - environment: - - SERVER_NAME=localhost # 提供你的域名!!!! - - BACKEND_SERVER_HOST=${BACKEND_HOST:-172.20.0.5} # backend后端服务地址 - - BACKEND_SERVER_PORT=${BACKEND_PORT:-6688} # backend后端服务端口号 - - USE_HTTPS=true # 使用https请设置为true - ports: - - "80:80" - - "443:443" - networks: - hoj-network: - ipv4_address: 172.20.0.6 -``` diff --git a/docs/docs/deploy/docker.md b/docs/docs/deploy/docker.md new file mode 100644 index 00000000..327b989a --- /dev/null +++ b/docs/docs/deploy/docker.md @@ -0,0 +1,291 @@ +# 快速部署 + +> 前提:已经在上一步准备好docker与docker-compose + +## 一、单机部署 + +1. 选择好需要安装的位置,运行下面命令 + + ```shell + git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy + ``` + +2. 进入文件夹,使用docker-compose启动各容器服务 + + ```shell + cd standAlone + ``` + + `standAlone`文件夹文件有以下: + + ```bash + ├── docker-compose.yml + ├── .env + ``` + + 主要配置请修改`.env`文件,内容如下: + + > 注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network + + ```properties + # redis的配置 + REDIS_HOST=172.20.0.2 + REDIS_PORT=6379 + REDIS_PASSWORD=hoj123456 + + # mysql的配置 + MYSQL_HOST=172.20.0.3 + MYSQL_PUBLIC_HOST=172.20.0.3 # 如果判题服务是分布式,请提供当前mysql所在服务器的公网ip + MYSQL_PORT=3306 + MYSQL_ROOT_PASSWORD=hoj123456 + + # nacos的配置 + NACOS_HOST=172.20.0.4 + NACOS_PORT=8848 + NACOS_USERNAME=root + NACOS_PASSWORD=hoj123456 + + # backend后端服务的配置 + BACKEND_HOST=172.20.0.5 + BACKEND_PORT=6688 + JWT_TOKEN_SECRET=default # token加密秘钥 默认则生成32位随机密钥 + JWT_TOKEN_EXPIRE=86400 # token过期时间默认为24小时 86400s + JWT_TOKEN_FRESH_EXPIRE=43200 # token默认12小时可自动刷新 + JUDGE_TOKEN=default # 调用判题服务器的token 默认则生成32位随机密钥 + EMAIL_SERVER_HOST=smtp.qq.com # 请使用邮件服务的域名或ip + EMAIL_SERVER_PORT=465 + EMAIL_USERNMAE=your_email_username + EMAIL_PASSWORD=your_email_password + # 开启虚拟判题请提供对应oj的账号密码 格式为 + # username1,username2,... + # password1,password2,... + HDU_ACCOUNT_USERNAME_LIST= + HDU_ACCOUNT_PASSWORD_LIST= + CF_ACCOUNT_USERNAME_LIST= + CF_ACCOUNT_PASSWORD_LIST= + + # judgeserver的配置 + JUDGE_SERVER_IP=172.20.0.7 + JUDGE_SERVER_PORT=8088 + JUDGE_SERVER_NAME=judger-alone + + # docker network的配置 + SUBNET=172.20.0.0/16 + ``` + + 如果不改动,则以默认参数启动 + + ```shell + docker-compose up -d + ``` + + **根据网速情况,大约十到二十分钟拉取镜像,全程无需人工干预,拉取完毕后,自动启动容器服务,大概需要一至两分钟的初始化。** + + 等待命令执行完毕后,查看容器状态 + + ```shell + docker ps -a + ``` + + 当看到所有的容器的状态status都为`UP`或`healthy`就代表 OJ 已经启动成功。 + + > 以下默认参数说明 + + - 默认超级管理员账号与密码:root / hoj123456 + - 默认redis密码:hoj123456 + - 默认mysql账号与密码:root / hoj123456 + - 默认nacos管理员账号与密码:root / hoj123456 + - 默认不开启https,开启需修改文件同时提供证书文件 + - 判题并发数默认:cpu核心数*2 + - 默认开启vj判题,需要手动修改添加账号与密码,如果不添加不能vj判题! + - vj判题并发数默认:cpu核心数*4 + + + +**登录root账号到后台查看服务状态以及到`http://ip/admin/conf`修改服务配置!** + +注意:网站的注册及用户账号相关操作需要邮件系统,所以请在系统配置中配置自己的SMTP邮件服务。 + +**(如果已经在启动在.env文件配置了邮件服务即不用再次修改)** + +```bash +Host: smtp.qq.com +Port: 465 +Username: qq邮箱账号 +Password: 开启SMTP服务后生成的随机授权码 +``` + + + +## 二、分布式部署 + +1. 选择好需要安装的位置,运行下面命令 + + ```shell + git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy + ``` + +2. 进入文件夹 + + ```shell + cd distributed + ``` + + `distributed`文件夹有以下: + + ```bash + ├── judgeserver + ├── main + ``` + +3. 首先部署主服务,即是数据后台服务(DataBackup) + + ```shell + cd main + ``` + + 该文件夹下有: + + ```bash + ├── docker-compose.yml + ├── .env + ``` + + 修改`.env`文件中的配置 + + ```shell + vim .env + ``` + + > 注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network + + ```properties + # redis的配置 + REDIS_HOST=172.20.0.2 + REDIS_PORT=6379 + REDIS_PASSWORD=hoj123456 + + # mysql的配置 + MYSQL_HOST=172.20.0.3 + MYSQL_PUBLIC_HOST=172.20.0.3 # 请提供当前mysql所在服务器的公网ip + MYSQL_PORT=3306 + MYSQL_ROOT_PASSWORD=hoj123456 + + # nacos的配置 + NACOS_HOST=172.20.0.4 + NACOS_PORT=8848 + NACOS_USERNAME=root + NACOS_PASSWORD=hoj123456 + + # backend后端服务的配置 + BACKEND_HOST=172.20.0.5 + BACKEND_PORT=6688 + JWT_TOKEN_SECRET=default # token加密秘钥 默认则生成32位随机密钥 + JWT_TOKEN_EXPIRE=86400 # token过期时间默认为24小时 86400s + JWT_TOKEN_FRESH_EXPIRE=43200 # token默认12小时可自动刷新 + JUDGE_TOKEN=default # 调用判题服务器的token 默认则生成32位随机密钥 + EMAIL_SERVER_HOST=smtp.qq.com # 请使用邮件服务的域名或ip + EMAIL_SERVER_PORT=465 + EMAIL_USERNMAE=your_email_username + EMAIL_PASSWORD=your_email_password + # 开启虚拟判题请提供对应oj的账号密码 格式为 + # username1,username2,... + # password1,password2,... + HDU_ACCOUNT_USERNAME_LIST=username1,username2 + HDU_ACCOUNT_PASSWORD_LIST=password1,password2 + CF_ACCOUNT_USERNAME_LIST= + CF_ACCOUNT_PASSWORD_LIST= + + # 评测数据同步的配置 + RSYNC_PASSWORD=hoj123456 # 请修改数据同步密码 + + # docker network的配置 + SUBNET=172.20.0.0/16 + ``` + + 配置修改保存后,当前路径下启动该服务 + + ```shell + docker-compose up -d + ``` + + 根据网速情况,大约十分钟即可安装完毕,全程无需人工干预。 + + 等待命令执行完毕后,查看容器状态 + + ```shell + docker ps -a + ``` + + 当看到所有的容器的状态status都为`UP`或`healthy`就代表 OJ 已经启动成功。 + + + +4. 接着,在另一台服务器上,依旧git clone该文件夹下来,然后进入`judgeserver`文件夹,修改`.env`的配置 + + ```properties + # nacos的配置 + NACOS_HOST=NACOS_HOST # 修改为nacos所在服务的ip,即主服务器的公网ip + NACOS_PORT=8848 # 修改为nacos启动端口号,默认为8848 + NACOS_USERNAME=root # 修改为nacos的管理员账号 + NACOS_PASSWORD=hoj123456 # 修改为nacos的管理员密码 + + # judgeserver的配置 + JUDGE_SERVER_IP=172.20.0.7 # 修改为当前的服务器公网ip + JUDGE_SERVER_PORT=8088 # judgeserver启动端口号 + JUDGE_SERVER_NAME=judger-1 + MAX_TASK_NUM=-1 # -1表示最大并行任务数为cpu核心数*2 + REMOTE_JUDGE_OPEN=true # 当前判题服务器是否开启远程虚拟判题功能 + REMOTE_JUDGE_MAX_TASK_NUM=-1 # -1表示最大并行任务数为(cpu核心数*2)*2 + + # rsync评测数据同步的配置 + RSYNC_MASTER_ADDR=127.0.0.1 # 写入主服务器ip + RSYNC_PASSWORD=hoj123456 # 与主服务器的rsync密码一致 + ``` + + 配置修改保存后,当前路径下启动该服务 + + ```shell + docker-compose up -d + ``` + + > 提示:需要开启多台判题机,就如当前第4步的操作一样,在每台服务器上执行以上的操作即可。 + +5. 两个服务都启动完成,在浏览器输入主服务ip或域名进行访问,登录root账号到后台查看服务状态。 + + + +## 三、开启Https + +- 单机部署: + + 提供server.crt和server.key证书与密钥文件放置`/standAlone`目录下,与`docker-compose.yml`和`.env`文件放置同一位置,然后修改`docker-compose.yml`中的hoj-frontend的配置 + +- 分布式部署: + + 提供server.crt和server.key证书与密钥文件放置`/distributed/main目录下,与`docker-compose.yml`和`.env`文件放置同一位置,然后修改`docker-compose.yml`中的hoj-frontend的配置 + + + +```yaml +hoj-frontend: + image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_frontend + container_name: hoj-frontend + restart: always + # 开启https,请提供证书 + volumes: + - ./server.crt:/etc/nginx/etc/crt/server.crt + - ./server.key:/etc/nginx/etc/crt/server.key + environment: + - SERVER_NAME=localhost # 提供你的域名!!!! + - BACKEND_SERVER_HOST=${BACKEND_HOST:-172.20.0.5} # backend后端服务地址 + - BACKEND_SERVER_PORT=${BACKEND_PORT:-6688} # backend后端服务端口号 + - USE_HTTPS=true # 使用https请设置为true + ports: + - "80:80" + - "443:443" + networks: + hoj-network: + ipv4_address: 172.20.0.6 +``` + diff --git a/docs/docs/deploy/redis.md b/docs/docs/deploy/redis.md index 75d7d91a..38250118 100644 --- a/docs/docs/deploy/redis.md +++ b/docs/docs/deploy/redis.md @@ -1,4 +1,4 @@ -# redis部署 +# Redis部署 ## docker部署 diff --git a/docs/docs/deploy/rsync.md b/docs/docs/deploy/rsync.md index 7e4a00cc..f38a201f 100644 --- a/docs/docs/deploy/rsync.md +++ b/docs/docs/deploy/rsync.md @@ -190,7 +190,7 @@ docker-compose启动 - "0.0.0.0:873:873" ``` -###文件介绍 +### 文件介绍 #### 1. rsync.conf diff --git a/docs/docs/use/sandbox.md b/docs/docs/develop/sandbox.md similarity index 94% rename from docs/docs/use/sandbox.md rename to docs/docs/develop/sandbox.md index 8048e4ca..d0004559 100644 --- a/docs/docs/use/sandbox.md +++ b/docs/docs/develop/sandbox.md @@ -2,9 +2,9 @@ > Judger-SandBox使用的是开源项目[go-judge](https://github.com/criyle/go-judge)Linux版本的可执行文件,更多调用方式请自行浏览[go-judge](https://github.com/criyle/go-judge) -> 启动[Judger-SandBox](https://gitee.com/himitzh0730/hoj/blob/master/judger/Judger-SandBox),默认监听5050端口 +HOJ用的是java来调用此沙盒,请看[JudgeServer-judge](https://gitee.com/himitzh0730/hoj/tree/master/hoj-springboot/JudgeServer/src/main/java/top/hcode/hoj/judge)下的SandboxRun.java -> HOJ用的是java来调用此沙盒,请看[JudgeServer-judge](https://gitee.com/himitzh0730/hoj/tree/master/hoj-springboot/JudgeServer/src/main/java/top/hcode/hoj/judge)下的SandboxRun.java +启动[Judger-SandBox](https://gitee.com/himitzh0730/hoj/blob/master/judger/Judger-SandBox),默认监听5050端口 #### 验证是否启动 diff --git a/docs/docs/use/README.md b/docs/docs/use/README.md index f2ad494a..e25554a1 100644 --- a/docs/docs/use/README.md +++ b/docs/docs/use/README.md @@ -1,6 +1,10 @@ # 使用简介 -- 安全沙盒的简单介绍 +- 测试数据的介绍 +- 比赛的介绍 +- 导入题目的介绍 +- 导入用户的介绍 +- 讨论管理的介绍 - 特殊判题的程序例子 - 其它待续...... diff --git a/docs/docs/use/contest.md b/docs/docs/use/contest.md new file mode 100644 index 00000000..6d777f81 --- /dev/null +++ b/docs/docs/use/contest.md @@ -0,0 +1,24 @@ +# 比赛介绍 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210523221519574.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70) + + + +创建比赛时两种赛制: + +- **ACM 模式** + + 在该模式下,我们严格按照ACM-ICPC的比赛规则来进行,Contest设置项中的`Seal Time Rank`即为是否封榜,封榜后将不再刷新排名。可选择比赛结束前半小时,比赛前一小时,比赛全程封榜。 + +- **OI 模式** + + 在OI模式下,选手的提交将根据得分点来计分,多次提交以最后一次提交为准,排名规则为多个题目的总分数。同样可以进行封榜操作,封榜时段,选手不能查看到实时的排行榜数据! + +注意:管理员可以选择强制刷新,查看实时的排行榜数据!通过`Force Update`来强制刷新榜,且刷新后的榜仅对管理者可见。 + +比赛权限模式有三种: + +- **公开赛**:所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,且都可以在比赛阶段随时提交。 +- **保护赛**:所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,但在比赛阶段提交需要提供该比赛的密码! +- **私有赛**:仅支持有比赛密码的用户进入比赛,查看查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,包括提交。 + diff --git a/docs/docs/use/discussion-admin.md b/docs/docs/use/discussion-admin.md new file mode 100644 index 00000000..d929f485 --- /dev/null +++ b/docs/docs/use/discussion-admin.md @@ -0,0 +1,12 @@ +# 评论管理 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210523223605573.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70#pic_center) + + + +- 后台管理员可以查看所有的讨论帖,并且可以选择是否置顶,是否正常显示,删除,查看等 + +- 后台管理员可以查看对应讨论帖的举报内容 + + ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210523221321418.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70) + diff --git a/docs/docs/use/import-problem.md b/docs/docs/use/import-problem.md new file mode 100644 index 00000000..eb0ab130 --- /dev/null +++ b/docs/docs/use/import-problem.md @@ -0,0 +1,32 @@ +# 导入题目 + +## 一、导入HOJ题目 + +待续..... + +## 二、导入其它OJ题目 + +导入HDU、Codeforces题目,只需提供该题目的题号便可一键导入 + + + +**管理员进入后台,点击题目列表** + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210523223454472.png#pic_center) + +然后添加上方的添加按钮 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210523222914722.png) + + + +**在弹出窗中选择OJ名字及题号,便可导入** + + + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210523223042100.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70) + +**注意:** + +- HDU的题号一般是 1000以上的数字 +- Codeforces的题号是1000A、1000B、这种数字加大写英文字母的格式 \ No newline at end of file diff --git a/docs/docs/use/import-user.md b/docs/docs/use/import-user.md new file mode 100644 index 00000000..949d39c1 --- /dev/null +++ b/docs/docs/use/import-user.md @@ -0,0 +1,16 @@ +## 导入用户 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/2021052322072728.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70) + + + +要求如下: + +1. 用户数据导入仅支持csv格式的用户数据。 + +2. 共三列数据: 用户名,密码,邮箱,任一列不能为空,否则该行数据可能导入失败。 + +3. 第一行不必写(“用户名”,“密码”,“邮箱”)这三个列名。 + +4. 请导入保存为UTF-8编码的文件,否则中文可能会乱码。 + diff --git a/docs/docs/use/spj.md b/docs/docs/use/spj.md index 700925b2..7931d905 100644 --- a/docs/docs/use/spj.md +++ b/docs/docs/use/spj.md @@ -1,5 +1,20 @@ # 特殊判题 +## 什么是特殊判题? + +特殊判题(Special Judge)是指OJ将使用一个特定的程序来判断提交的程序的输出是不是正确的,而不是单纯地看提交的程序的输出是否和标准输出一模一样。 + +## 使用场景 + +一般使用Special Judge都是因为题目的答案不唯一,更具体一点说的话一般是两种情况: + +- 题目最终要求输出一个解决方案,而且这个解决方案可能不唯一。 +- 题目最终要求输出一个浮点数,而且会告诉只要答案和标准答案相差不超过某个较小的数就可以,比如0.01。这种情况保留3位小数、4位小数等等都是可以的,而且多保留几位小数也没什么坏处。 + +## 例子: + +在创建题目的适合,选择开启特殊判题,编写特殊判题程序,然后编译通过便可。 + > 后台对题目使用特殊判题时,请参考以下程序例子 ```cpp diff --git a/docs/docs/use/testcase.md b/docs/docs/use/testcase.md new file mode 100644 index 00000000..8d4f9efb --- /dev/null +++ b/docs/docs/use/testcase.md @@ -0,0 +1,37 @@ +# 测试用例 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210523215852734.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70) + +**进入后台添加题目,上传题目测试用例数据可以选择手动输入、Zip文件上传两种方式** + +## 一、手动输入 + +每次点击`Add Sampple`就可以手动填入该用例的输入与输出,该方式比较适合题目数据简单的,同时手动输入的题目数据将记录进数据库,下次对该题目进行修改可以直接获取,然后进行测试数据的修改,同时也会在服务器对应的testcase文件夹生成对应的文件。 + +## 二、文件上传 + +对于通题目,测试用例文件包括`in`、`out`、`ans`三种拓展名 + +例如有两组测试用例,则对于普通题目测试用例的文件名分别为`1.in, 1.out(1.ans), 2.in, 2.out(2.ans)`其他形式的文件后台均不识别。 + +压缩时,请将文件都放在压缩包的根目录,而不是包含在某一个文件夹中,比如正确的格式是: + +```bash +├── 1.in +├── 1.out +├── 2.in +├── 2.out +``` + +```bash +├── 1.in +├── 1.ans +├── 2.in +├── 2.ans +``` + +然后压缩测试用例到一个zip中 + +注意:不要在这些文件外面套多一层文件夹,请直接压缩!!! + +同时建议:尽量合并测试用例到一个文件中,减少测试用例组数,这会一定程度上提高判题性能。 \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/06/e2/46125ede920c5a28793d551f945424042649dd30bec1f1fd193e3deabb1f32e4e8ed75c6b73b020edf78bcfc44d86b247fde54e1d87393ecd494a2d85bac b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/06/e2/46125ede920c5a28793d551f945424042649dd30bec1f1fd193e3deabb1f32e4e8ed75c6b73b020edf78bcfc44d86b247fde54e1d87393ecd494a2d85bac new file mode 100644 index 00000000..024f1df4 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/06/e2/46125ede920c5a28793d551f945424042649dd30bec1f1fd193e3deabb1f32e4e8ed75c6b73b020edf78bcfc44d86b247fde54e1d87393ecd494a2d85bac @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{363: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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1d/fd/055a59badffb96eb3f0454a1fc3fcb9ec2c7ffc2a3dfc46bc0360c1ddb36b5a4e08e714f9afaa8ce7a46170c1bb79ee88bf9326a0f04c55e122021bf8123 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1d/fd/055a59badffb96eb3f0454a1fc3fcb9ec2c7ffc2a3dfc46bc0360c1ddb36b5a4e08e714f9afaa8ce7a46170c1bb79ee88bf9326a0f04c55e122021bf8123 new file mode 100644 index 00000000..5a87ebc8 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1d/fd/055a59badffb96eb3f0454a1fc3fcb9ec2c7ffc2a3dfc46bc0360c1ddb36b5a4e08e714f9afaa8ce7a46170c1bb79ee88bf9326a0f04c55e122021bf8123 @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{365: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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/21/e0/4da43e1f2a91021c0445e83072acdddfe9d7ed81ab28d50b14033923d021479bf537623818ea3fd86dfe27604e28500be64642b9d77b2216d096f2eb8f84 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/21/e0/4da43e1f2a91021c0445e83072acdddfe9d7ed81ab28d50b14033923d021479bf537623818ea3fd86dfe27604e28500be64642b9d77b2216d096f2eb8f84 new file mode 100644 index 00000000..38d99b6f --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/21/e0/4da43e1f2a91021c0445e83072acdddfe9d7ed81ab28d50b14033923d021479bf537623818ea3fd86dfe27604e28500be64642b9d77b2216d096f2eb8f84 @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/27/50/a83dd7090c6bcca27f7b4f2b5c08054a2c0495cca3163e7abe2cc3f6715aacf0f1223676ee6ca61d0c031dee39737ba086e9c5b7becbc1a15cde9efce38d b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/27/50/a83dd7090c6bcca27f7b4f2b5c08054a2c0495cca3163e7abe2cc3f6715aacf0f1223676ee6ca61d0c031dee39737ba086e9c5b7becbc1a15cde9efce38d new file mode 100644 index 00000000..8b82ca6d --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/27/50/a83dd7090c6bcca27f7b4f2b5c08054a2c0495cca3163e7abe2cc3f6715aacf0f1223676ee6ca61d0c031dee39737ba086e9c5b7becbc1a15cde9efce38d @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{374: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:\"什么是特殊判题\"}},[a(\"a\",{staticClass:\"header-anchor\",attrs:{href:\"#什么是特殊判题\"}},[s._v(\"#\")]),s._v(\" 什么是特殊判题?\")]),s._v(\" \"),a(\"p\",[s._v(\"特殊判题(Special Judge)是指OJ将使用一个特定的程序来判断提交的程序的输出是不是正确的,而不是单纯地看提交的程序的输出是否和标准输出一模一样。\")]),s._v(\" \"),a(\"h2\",{attrs:{id:\"使用场景\"}},[a(\"a\",{staticClass:\"header-anchor\",attrs:{href:\"#使用场景\"}},[s._v(\"#\")]),s._v(\" 使用场景\")]),s._v(\" \"),a(\"p\",[s._v(\"一般使用Special Judge都是因为题目的答案不唯一,更具体一点说的话一般是两种情况:\")]),s._v(\" \"),a(\"ul\",[a(\"li\",[s._v(\"题目最终要求输出一个解决方案,而且这个解决方案可能不唯一。\")]),s._v(\" \"),a(\"li\",[s._v(\"题目最终要求输出一个浮点数,而且会告诉只要答案和标准答案相差不超过某个较小的数就可以,比如0.01。这种情况保留3位小数、4位小数等等都是可以的,而且多保留几位小数也没什么坏处。\")])]),s._v(\" \"),a(\"h2\",{attrs:{id:\"例子\"}},[a(\"a\",{staticClass:\"header-anchor\",attrs:{href:\"#例子\"}},[s._v(\"#\")]),s._v(\" 例子:\")]),s._v(\" \"),a(\"p\",[s._v(\"在创建题目的适合,选择开启特殊判题,编写特殊判题程序,然后编译通过便可。\")]),s._v(\" \"),a(\"blockquote\",[a(\"p\",[s._v(\"后台对题目使用特殊判题时,请参考以下程序例子\")])]),s._v(\" \"),a(\"div\",{staticClass:\"language-cpp line-numbers-mode\"},[a(\"pre\",{pre:!0,attrs:{class:\"language-cpp\"}},[a(\"code\",[a(\"span\",{pre:!0,attrs:{class:\"token macro property\"}},[a(\"span\",{pre:!0,attrs:{class:\"token directive-hash\"}},[s._v(\"#\")]),a(\"span\",{pre:!0,attrs:{class:\"token directive keyword\"}},[s._v(\"include\")]),a(\"span\",{pre:!0,attrs:{class:\"token string\"}},[s._v(\"\")])]),s._v(\"\\n\"),a(\"span\",{pre:!0,attrs:{class:\"token macro property\"}},[a(\"span\",{pre:!0,attrs:{class:\"token directive-hash\"}},[s._v(\"#\")]),a(\"span\",{pre:!0,attrs:{class:\"token directive keyword\"}},[s._v(\"include\")]),a(\"span\",{pre:!0,attrs:{class:\"token string\"}},[s._v(\"\")])]),s._v(\"\\n\"),a(\"span\",{pre:!0,attrs:{class:\"token macro property\"}},[a(\"span\",{pre:!0,attrs:{class:\"token directive-hash\"}},[s._v(\"#\")]),a(\"span\",{pre:!0,attrs:{class:\"token directive keyword\"}},[s._v(\"define\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token macro-name\"}},[s._v(\"AC\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token expression\"}},[a(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"100\")])])]),s._v(\"\\n\"),a(\"span\",{pre:!0,attrs:{class:\"token macro property\"}},[a(\"span\",{pre:!0,attrs:{class:\"token directive-hash\"}},[s._v(\"#\")]),a(\"span\",{pre:!0,attrs:{class:\"token directive keyword\"}},[s._v(\"define\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token macro-name\"}},[s._v(\"WA\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token expression\"}},[a(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"101\")])])]),s._v(\"\\n\"),a(\"span\",{pre:!0,attrs:{class:\"token macro property\"}},[a(\"span\",{pre:!0,attrs:{class:\"token directive-hash\"}},[s._v(\"#\")]),a(\"span\",{pre:!0,attrs:{class:\"token directive keyword\"}},[s._v(\"define\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token macro-name\"}},[s._v(\"ERROR\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token expression\"}},[a(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"102\")])])]),s._v(\"\\n\"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"using\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"namespace\")]),s._v(\" std\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\";\")]),s._v(\"\\n\\n\\n\"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"int\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token function\"}},[s._v(\"spj\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"int\")]),s._v(\" user_output\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\",\")]),s._v(\" FILE \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"*\")]),s._v(\"output\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\")\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\";\")]),s._v(\"\\n\\n\"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"void\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token function\"}},[s._v(\"close_file\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),s._v(\"FILE \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"*\")]),s._v(\"f\"),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 keyword\"}},[s._v(\"if\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),s._v(\"f \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"!=\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token constant\"}},[s._v(\"NULL\")]),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 function\"}},[s._v(\"fclose\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),s._v(\"f\"),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\\n\"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"int\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token function\"}},[s._v(\"main\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"int\")]),s._v(\" argc\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\",\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"char\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"*\")]),s._v(\"args\"),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(\")\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"{\")]),s._v(\"\\n FILE \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"*\")]),s._v(\"output\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\";\")]),s._v(\"\\n \"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"int\")]),s._v(\" result\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\";\")]),s._v(\"\\n \"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"if\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),s._v(\"argc \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"!=\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"2\")]),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 keyword\"}},[s._v(\"return\")]),s._v(\" ERROR\"),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(\"int\")]),s._v(\" user_output\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\";\")]),s._v(\"\\n cin\"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\">>\")]),s._v(\"user_output\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\";\")]),s._v(\"\\n cout\"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"<<\")]),s._v(\"user_output\"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"<<\")]),s._v(\"endl\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\";\")]),s._v(\"\\n output \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"=\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token function\"}},[s._v(\"fopen\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),s._v(\"args\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"[\")]),a(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"1\")]),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 string\"}},[s._v('\"r\"')]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\")\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\";\")]),s._v(\"\\n\\t\\n result \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"=\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token function\"}},[s._v(\"spj\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),s._v(\"user_output\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\",\")]),s._v(\" output\"),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 function\"}},[s._v(\"printf\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),a(\"span\",{pre:!0,attrs:{class:\"token string\"}},[s._v('\"result: %d\\\\n\"')]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\",\")]),s._v(\" result\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\")\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\";\")]),s._v(\"\\n \\n \"),a(\"span\",{pre:!0,attrs:{class:\"token function\"}},[s._v(\"close_file\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),s._v(\"output\"),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 keyword\"}},[s._v(\"return\")]),s._v(\" result\"),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(\"int\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token function\"}},[s._v(\"spj\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"int\")]),s._v(\" user_output\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\",\")]),s._v(\" FILE \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"*\")]),s._v(\"output\"),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(\"/*\\n parameter: \\n - output,标程输出文件的指针\\n - user_output,用户输出数据\\n return: \\n - 如果用户答案正确,返回AC\\n - 如果用户答案错误返回WA\\n - 如果主动捕获到自己的错误,如内存分配失败,返回ERROR\\n */\")]),s._v(\"\\n \"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"int\")]),s._v(\" std_out\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\";\")]),s._v(\"\\n \"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"while\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),a(\"span\",{pre:!0,attrs:{class:\"token function\"}},[s._v(\"fscanf\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),s._v(\"output\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\",\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token string\"}},[s._v('\"%d\"')]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\",\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"&\")]),s._v(\"std_out\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\")\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"!=\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token constant\"}},[s._v(\"EOF\")]),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 keyword\"}},[s._v(\"if\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"(\")]),s._v(\"user_output\"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"+\")]),a(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"1\")]),s._v(\" \"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"!=\")]),s._v(\" std_out\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\")\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"{\")]),s._v(\"\\n cout\"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"<<\")]),s._v(\"user_output\"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"<<\")]),s._v(\"endl\"),a(\"span\",{pre:!0,attrs:{class:\"token operator\"}},[s._v(\"<<\")]),s._v(\"std_out\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\";\")]),s._v(\"\\n \"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"return\")]),s._v(\" WA\"),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 \"),a(\"span\",{pre:!0,attrs:{class:\"token keyword\"}},[s._v(\"return\")]),s._v(\" AC\"),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\")])])])}),[],!1,null,null,null);t.default=r.exports}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/43/81/ca38460ea69417c3af17f968e1e62158622dd53a3d52a23883fb8831681002501633c231afd8a9b10b9ceb45449960c166ae60dd94b58f9ea6571e18f373 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/43/81/ca38460ea69417c3af17f968e1e62158622dd53a3d52a23883fb8831681002501633c231afd8a9b10b9ceb45449960c166ae60dd94b58f9ea6571e18f373 new file mode 100644 index 00000000..68fe2583 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/43/81/ca38460ea69417c3af17f968e1e62158622dd53a3d52a23883fb8831681002501633c231afd8a9b10b9ceb45449960c166ae60dd94b58f9ea6571e18f373 @@ -0,0 +1 @@ +{"code":"(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(\"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(\"blockquote\",[a(\"p\",[t._v(\"首页页面\")])]),t._v(\" \"),a(\"p\",[a(\"img\",{attrs:{src:\"https://img-blog.csdnimg.cn/20210509232352226.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/20210509232501952.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/20210509232609398.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/20210509232701288.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/20210509232843932.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/20210513134128914.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/20210509233300701.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/20210509233439791.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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/4c/aa/4e8d831c19f573621952b4aeee7b19f80e3d6f5bffce18029d50936bd2db31d6b86f8ed29352833f1de10596165d5b90b626fe70150ba23497cb9c365e08 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/4c/aa/4e8d831c19f573621952b4aeee7b19f80e3d6f5bffce18029d50936bd2db31d6b86f8ed29352833f1de10596165d5b90b626fe70150ba23497cb9c365e08 new file mode 100644 index 00000000..b52684f9 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/4c/aa/4e8d831c19f573621952b4aeee7b19f80e3d6f5bffce18029d50936bd2db31d6b86f8ed29352833f1de10596165d5b90b626fe70150ba23497cb9c365e08 @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{370:function(t,_,s){\"use strict\";s.r(_);var e=s(41),v=Object(e.a)({},(function(){var t=this,_=t.$createElement,s=t._self._c||_;return s(\"ContentSlotsDistributor\",{attrs:{\"slot-key\":t.$parent.slotKey}},[s(\"h1\",{attrs:{id:\"比赛介绍\"}},[s(\"a\",{staticClass:\"header-anchor\",attrs:{href:\"#比赛介绍\"}},[t._v(\"#\")]),t._v(\" 比赛介绍\")]),t._v(\" \"),s(\"p\",[s(\"img\",{attrs:{src:\"https://img-blog.csdnimg.cn/20210523221519574.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70\",alt:\"在这里插入图片描述\"}})]),t._v(\" \"),s(\"p\",[t._v(\"创建比赛时两种赛制:\")]),t._v(\" \"),s(\"ul\",[s(\"li\",[s(\"p\",[s(\"strong\",[t._v(\"ACM 模式\")])]),t._v(\" \"),s(\"p\",[t._v(\"在该模式下,我们严格按照ACM-ICPC的比赛规则来进行,Contest设置项中的\"),s(\"code\",[t._v(\"Seal Time Rank\")]),t._v(\"即为是否封榜,封榜后将不再刷新排名。可选择比赛结束前半小时,比赛前一小时,比赛全程封榜。\")])]),t._v(\" \"),s(\"li\",[s(\"p\",[s(\"strong\",[t._v(\"OI 模式\")])]),t._v(\" \"),s(\"p\",[t._v(\"在OI模式下,选手的提交将根据得分点来计分,多次提交以最后一次提交为准,排名规则为多个题目的总分数。同样可以进行封榜操作,封榜时段,选手不能查看到实时的排行榜数据!\")])])]),t._v(\" \"),s(\"p\",[t._v(\"注意:管理员可以选择强制刷新,查看实时的排行榜数据!通过\"),s(\"code\",[t._v(\"Force Update\")]),t._v(\"来强制刷新榜,且刷新后的榜仅对管理者可见。\")]),t._v(\" \"),s(\"p\",[t._v(\"比赛权限模式有三种:\")]),t._v(\" \"),s(\"ul\",[s(\"li\",[s(\"strong\",[t._v(\"公开赛\")]),t._v(\":所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,且都可以在比赛阶段随时提交。\")]),t._v(\" \"),s(\"li\",[s(\"strong\",[t._v(\"保护赛\")]),t._v(\":所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,但在比赛阶段提交需要提供该比赛的密码!\")]),t._v(\" \"),s(\"li\",[s(\"strong\",[t._v(\"私有赛\")]),t._v(\":仅支持有比赛密码的用户进入比赛,查看查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,包括提交。\")])])])}),[],!1,null,null,null);_.default=v.exports}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/50/bf/f7888fdaab3058158376f45da39d575539be9b2f04c722c5727080bc14a3537703e00035f9ab7067973519438ee363be53df531746d64a924dae44e32c77 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/50/bf/f7888fdaab3058158376f45da39d575539be9b2f04c722c5727080bc14a3537703e00035f9ab7067973519438ee363be53df531746d64a924dae44e32c77 new file mode 100644 index 00000000..b7d825cc --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/50/bf/f7888fdaab3058158376f45da39d575539be9b2f04c722c5727080bc14a3537703e00035f9ab7067973519438ee363be53df531746d64a924dae44e32c77 @@ -0,0 +1 @@ +{"code":"(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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/55/88/a3c0847cda4a453b053e46eaef6a510676a230acf9b519722a0ff677469a419c25544d9bdae3afebe51ac121407bdfb09ed8ac173ef2f814e1b54fe94f6a b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/55/88/a3c0847cda4a453b053e46eaef6a510676a230acf9b519722a0ff677469a419c25544d9bdae3afebe51ac121407bdfb09ed8ac173ef2f814e1b54fe94f6a new file mode 100644 index 00000000..97a25392 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/55/88/a3c0847cda4a453b053e46eaef6a510676a230acf9b519722a0ff677469a419c25544d9bdae3afebe51ac121407bdfb09ed8ac173ef2f814e1b54fe94f6a @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{369: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(\"p\",[a(\"img\",{attrs:{src:\"https://img-blog.csdnimg.cn/20210523223605573.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70#pic_center\",alt:\"在这里插入图片描述\"}})]),t._v(\" \"),a(\"ul\",[a(\"li\",[a(\"p\",[t._v(\"后台管理员可以查看所有的讨论帖,并且可以选择是否置顶,是否正常显示,删除,查看等\")])]),t._v(\" \"),a(\"li\",[a(\"p\",[t._v(\"后台管理员可以查看对应讨论帖的举报内容\")]),t._v(\" \"),a(\"p\",[a(\"img\",{attrs:{src:\"https://img-blog.csdnimg.cn/20210523221321418.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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/58/e1/8fefc723574c5fa359bfff7a07bd83031c08b9f9464bf244951dadb6ea38564f78dc2910bee737dd61bef802e054c9d88d52266933a001ead4b71d4c7118 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/58/e1/8fefc723574c5fa359bfff7a07bd83031c08b9f9464bf244951dadb6ea38564f78dc2910bee737dd61bef802e054c9d88d52266933a001ead4b71d4c7118 new file mode 100644 index 00000000..35011167 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/58/e1/8fefc723574c5fa359bfff7a07bd83031c08b9f9464bf244951dadb6ea38564f78dc2910bee737dd61bef802e054c9d88d52266933a001ead4b71d4c7118 @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{367:function(v,_,l){\"use strict\";l.r(_);var i=l(41),t=Object(i.a)({},(function(){var v=this,_=v.$createElement,l=v._self._c||_;return l(\"ContentSlotsDistributor\",{attrs:{\"slot-key\":v.$parent.slotKey}},[l(\"h1\",{attrs:{id:\"简介\"}},[l(\"a\",{staticClass:\"header-anchor\",attrs:{href:\"#简介\"}},[v._v(\"#\")]),v._v(\" 简介\")]),v._v(\" \"),l(\"h2\",{attrs:{id:\"技术选型\"}},[l(\"a\",{staticClass:\"header-anchor\",attrs:{href:\"#技术选型\"}},[v._v(\"#\")]),v._v(\" 技术选型\")]),v._v(\" \"),l(\"blockquote\",[l(\"p\",[v._v(\"基于Springcloud 和Vue.js的前后端分离的分布式在线评测系统\")])]),v._v(\" \"),l(\"ul\",[l(\"li\",[l(\"p\",[v._v(\"前端:\")]),v._v(\" \"),l(\"ul\",[l(\"li\",[v._v(\"技术以Vue为主,element-ui为主要框架,网站风格样式模仿qdoj\")]),v._v(\" \"),l(\"li\",[v._v(\"支持手机端,响应式布局\")]),v._v(\" \"),l(\"li\",[v._v(\"以CodeMirror作为在线代码编辑器\")]),v._v(\" \"),l(\"li\",[v._v(\"以Mavon-Editor作为富文本编辑器\")]),v._v(\" \"),l(\"li\",[v._v(\"支持用户头像上传,可选择性获取用户Codeforces分数\")]),v._v(\" \"),l(\"li\",[v._v(\"定时获取例如Codeforces等其它知名OJ的近期比赛数据\")]),v._v(\" \"),l(\"li\",[v._v(\"当前支持HDU的Virtual Judge(远程虚拟判题)与题目获取\")]),v._v(\" \"),l(\"li\",[v._v(\"题目支持特别判题\")]),v._v(\" \"),l(\"li\",[v._v(\"题目支持可选择性去除提交代码的末尾空白符(会影响CE判定)\")]),v._v(\" \"),l(\"li\",[v._v(\"题目支持可选择性允许用户查看各个测试点结果(状态,运行时间,运行空间,OI题目的测试点得分),暂不支持测试点数据公开。\")]),v._v(\" \"),l(\"li\",[v._v(\"题目讨论\")]),v._v(\" \"),l(\"li\",[v._v(\"管理后台支持题目数据以ZIP上传或手动输入上传\")]),v._v(\" \"),l(\"li\",[v._v(\"管理后台支持监控服务系统的状态及各判题服务的状态\")]),v._v(\" \"),l(\"li\",[v._v(\"管理后台支持动态修改网站配置,例如邮件系统配置,数据库配置等\")]),v._v(\" \"),l(\"li\",[v._v(\"比赛支持封榜,支持ACM与OI模式\")]),v._v(\" \"),l(\"li\",[v._v(\"比赛支持私有赛(需要密码才可查看与提交),保护赛(每个用户都可查看,提交需要密码),公开赛(每个用户都可查看与提交)三种模式\")]),v._v(\" \"),l(\"li\",[v._v(\"用户提交失败时可重新提交,管理员支持提交重判与比赛题目所有提交重判\")]),v._v(\" \"),l(\"li\",[v._v(\"公共讨论区\")]),v._v(\" \"),l(\"li\",[v._v(\"比赛讨论\")])])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"后端:\")]),v._v(\" \"),l(\"ul\",[l(\"li\",[v._v(\"Web框架技术以Springboot为主\")]),v._v(\" \"),l(\"li\",[v._v(\"以Nacos为分布式注册中心及分布式配置中心,支持配置文件动态刷新,支持判题服务Ribbon的负载均衡\")]),v._v(\" \"),l(\"li\",[v._v(\"以Mybatis-Plus为数据库中间件,负责数据实体类与数据库数据的转化与获取。\")]),v._v(\" \"),l(\"li\",[v._v(\"以Jsoup为爬虫框架,负责远程虚拟OJ的题目获取及提交结果获取,同时定时获取各用户的Codeforces分数以及其它知名OJ的近期比赛。\")]),v._v(\" \"),l(\"li\",[v._v(\"以Shiro为安全框架,支持用户角色权限管理,支持token刷新\")]),v._v(\" \"),l(\"li\",[v._v(\"以redis的发布订阅者作为判题服务的消息提醒,以此调用判题服务\")]),v._v(\" \"),l(\"li\",[v._v(\"后端分为数据后台服务(DataBackup)及判题服务(JudgeServer)\\n\"),l(\"ul\",[l(\"li\",[l(\"p\",[v._v(\"数据后台服务:负责提供接口,提供相关数据给前端等\")])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"判题服务:只负责获取数据后台服务传输过来的判题的提交,调用VJ判题或调用判题机(Go-Judge)进行评测,将对应结果写回数据库\")])])])])])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"判题机:\")]),v._v(\" \"),l(\"ul\",[l(\"li\",[v._v(\"支持HDU的VJ判题\")]),v._v(\" \"),l(\"li\",[v._v(\"支持Codefoces的VJ判题\")]),v._v(\" \"),l(\"li\",[v._v(\"以HttpAPI的形式调用Go-Jugde(高性能可复用的判题沙盒)判题安全沙盒进行提交程序的评测(调用线程池多线程跑评测)\")])])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"数据库\")]),v._v(\" \"),l(\"ul\",[l(\"li\",[v._v(\"Mysql\")])])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"缓存中间件\")]),v._v(\" \"),l(\"ul\",[l(\"li\",[v._v(\"Redis\")])])])]),v._v(\" \"),l(\"blockquote\",[l(\"p\",[v._v(\"HOJ基本逻辑架构图\")])]),v._v(\" \"),l(\"p\",[l(\"img\",{attrs:{src:\"https://cdn.jsdelivr.net/gh/HimitZH/CDN/images/hoj.png\",alt:\"image-20201030234527577\"}})]),v._v(\" \"),l(\"h2\",{attrs:{id:\"判题逻辑\"}},[l(\"a\",{staticClass:\"header-anchor\",attrs:{href:\"#判题逻辑\"}},[v._v(\"#\")]),v._v(\" 判题逻辑\")]),v._v(\" \"),l(\"ol\",[l(\"li\",[l(\"p\",[v._v(\"前端用户提交数据。\")])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"后端数据服务(DataBackup)获取到数据,先将提交数据初始化,同时将该提交的状态变成等待中,写入数据库。\")])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"通过Redis,写入\"),l(\"strong\",[v._v(\"等待判题队列\")])])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"调用work处理者,初始化传输数据,使用springcloud alibaba通过nacos注册中心调用判题微服务。\")])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"若是调用判题服务失败(没有空闲的判题服务器),则重新通过发布者将该提交信息发布到对应\"),l(\"strong\",[v._v(\"等待判题队列\")]),v._v(\",重回3。\")])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"若是调用失败超过30次,则将提交的状态修改为提交失败,不再进行判题服务的调用。\")])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"前端用户可看到提交变成提交失败,可点击状态进行重新提交,重回2(注:重新提交不影响提交时间等数据)\")])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"判题微服务获取到提交数据:\")]),v._v(\" \"),l(\"ul\",[l(\"li\",[l(\"p\",[v._v(\"若是远程调用,进行远程提交,获取对应的提交ID,若是获取失败则判为提交失败,若是获取成功,就启用线程定时器每2秒根据提交ID获取判题结果。\")]),v._v(\" \"),l(\"p\",[v._v(\"定时尝试30次,获取成功,写回数据库,获取失败就修改此次提交为提交失败。\")])]),v._v(\" \"),l(\"li\",[l(\"p\",[v._v(\"若是自家题目提交,则启用线程池多线程使用Http将对应测试点数据与代码提交给Go-Judge判题沙盒进行编译与评测,最后获取各个评测点结果,进行结果计算写回数据库。\")])])])])])])}),[],!1,null,null,null);_.default=t.exports}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/65/2a/b8a2adad0d5cb0570cc32cb8ac9112f21731085afeb412b53b484864556d0c48547f4d34fd5d17912728fb2dc99258d70af4487b918512b986c4e0893983 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/65/2a/b8a2adad0d5cb0570cc32cb8ac9112f21731085afeb412b53b484864556d0c48547f4d34fd5d17912728fb2dc99258d70af4487b918512b986c4e0893983 new file mode 100644 index 00000000..fcb2dcec --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/65/2a/b8a2adad0d5cb0570cc32cb8ac9112f21731085afeb412b53b484864556d0c48547f4d34fd5d17912728fb2dc99258d70af4487b918512b986c4e0893983 @@ -0,0 +1 @@ +{"code":"(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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/69/b2/e4a8af58d0f94dc09eb344ce9799dfb0c7f29226a87974ab0acec9b07e2a55cede633eb0776981ff4278b1bdf4b2d5df20efcb1918af0f05462c4514ac33 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/69/b2/e4a8af58d0f94dc09eb344ce9799dfb0c7f29226a87974ab0acec9b07e2a55cede633eb0776981ff4278b1bdf4b2d5df20efcb1918af0f05462c4514ac33 new file mode 100644 index 00000000..d718a2bc --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/69/b2/e4a8af58d0f94dc09eb344ce9799dfb0c7f29226a87974ab0acec9b07e2a55cede633eb0776981ff4278b1bdf4b2d5df20efcb1918af0f05462c4514ac33 @@ -0,0 +1 @@ +{"code":"!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,h=!!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?!h&&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),h=n(31),d=u.WeakMap;if(a){var v=l.state||(l.state=new d),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\");h[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,h=5==t||l;return function(d,v,y,m){for(var g,b,_=i(d),x=o(_),w=r(v,y,3),O=a(x.length),j=0,S=m||u,k=e?S(d,O):n||p?S(d,0):void 0;O>j;j++)if((h||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],h=p&&p.prototype;if(h){if(h[c]!==f)try{a(h,c,f)}catch(t){h[c]=f}if(h[s]||a(h,s,l),o[l])for(var d in i)if(h[d]!==i[d])try{a(h,d,i[d])}catch(t){h[d]=i[d]}}}},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>\"},d=function(){try{r=document.domain&&new ActiveXObject(\"htmlfile\")}catch(t){}var t,e;d=r?function(t){t.write(h(\"\")),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(h(\"document.F=Object\")),t.close(),t.F);for(var n=a.length;n--;)delete d.prototype[a[n]];return d()};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=d(),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 h=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,d=r.REPLACE_KEEPS_$0,v=h?\"$\":\"$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(!h&&d||\"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,h=i.call(a),d=a.source,v=0,y=t;return s&&(-1===(h=h.replace(\"y\",\"\")).indexOf(\"g\")&&(h+=\"g\"),y=String(t).slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&\"\\n\"!==t[a.lastIndex-1])&&(d=\"(?: \"+d+\")\",y=\" \"+y,v++),n=new RegExp(\"^(?:\"+d+\")\",h)),p&&(n=new RegExp(\"^\"+d+\"$(?!\\\\s)\",h)),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\"),h=[].slice,d=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 h.call(l,y,m);for(r=new(void 0===n?Array:n)(d(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),h=n(107),d=h.IteratorPrototype,v=h.BUGGY_SAFARI_ITERATORS,y=f(\"iterator\"),m=function(){return this};t.exports=function(t,e,n,f,h,g,b){o(n,e,f);var _,x,w,O=function(t){if(t===h&&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\"]||h&&k[h],A=!v&&E||O(h),$=\"Array\"==e&&k.entries||E;if($&&(_=i($.call(new t)),d!==Object.prototype&&_.next&&(l||i(_)===d||(a?a(_,d):\"function\"!=typeof _[y]&&c(_,y,m)),u(_,j,!0,!0),l&&(p[j]=m))),\"values\"==h&&E&&\"values\"!==E.name&&(S=!0,A=function(){return E.call(this)}),l&&!b||k[y]===A||c(k,y,A),p[e]=A,h)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&&h&&\"file:\"!==h.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:d,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 h(){}var d={};d[o]=function(){return this};var v=Object.getPrototypeOf,y=v&&v(v(j([])));y&&y!==e&&n.call(y,o)&&(d=y);var m=h.prototype=l.prototype=Object.create(d);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),h=c.get(e);if(p&&h)return p==e&&h==t;var d=-1,v=!0,y=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++d-1&&t%1==0&&t=e||n<0||y&&t-s>=i}function x(){var t=h();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=h(),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,d(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(h())},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\"),h=!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 d=i(t),v=!o((function(){var e={};return e[d]=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[d]=/./[d]),n.exec=function(){return e=!0,null},n[d](\"\"),!e}));if(!v||!y||\"replace\"===t&&(!s||!f||p)||\"split\"===t&&!h){var m=/./[d],g=n(d,\"\"[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,d,2==e?function(t,e){return _.call(t,this,e)}:function(t){return _.call(t,this)})}l&&u(RegExp.prototype[d],\"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),h=n(30),d=p(\"isConcatSpreadable\"),v=h>=51||!o((function(){var t=[];return t[d]=!1,t.concat()[0]!==t})),y=l(\"concat\"),m=function(t){if(!a(t))return!1;var e=t[d];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),h=n(169),d=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,h=s.domain;try{f?(o||(2===t.rejection&&et(t),t.rejection=1),!0===f?a=r:(h&&h.enter(),a=f(r),h&&(h.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){h&&!c&&h.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=h(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}),d(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,h,d,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,h=i(t.length);h>p;p++)if((d=O(t[p]))&&d instanceof s)return d;return new s(!1)}f=l.call(t)}for(v=f.next;!(y=v.call(f)).done;){try{d=O(y.value)}catch(t){throw c(f),t}if(\"object\"==typeof d&&d&&d instanceof s)return d}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,h=n(111).set,d=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()},d||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(){h.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 h,d=s(arguments[f++]),v=l?i(d).concat(l(d)):i(d),y=v.length,m=0;y>m;)h=v[m++],r&&!p.call(d,h)||(n[h]=d[h]);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,h=t?-1:1;if(u<2)for(;;){if(p in f){c=f[p],p+=h;break}if(p+=h,t?p<0:l<=p)throw TypeError(\"Reduce of empty array with no initial value\")}for(;t?p>=0:l>p;p+=h)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,h=s(\"startsWith\");o({target:\"String\",proto:!0,forced:!!(f||h||(r=i(String.prototype,\"startsWith\"),!r||r.writable))&&!h},{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:{}}})},h=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&&h.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,h=u;return void 0!==s&&(s=r(s),h=a),i.call(f,h,(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,h=[],d=h;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,d=new r}else d=e?[]:h;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,(h(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 h=p.prototype=f.prototype;h.constructor=p;var d=h.toString,v=\"Symbol(test)\"==String(f(\"test\")),y=/^Symbol\\((.*)\\)[^)]+$/;c(h,\"description\",{configurable:!0,get:function(){var t=u(this)?this.valueOf():this,e=d.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 h(t){return\"[object RegExp]\"===l.call(t)}function d(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 he(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)},dn.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)}}},dn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},dn.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},dn.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){dt();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 dn(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:!!h(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=de(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=he(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 dn(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?dr(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):dr(t,e,n)}function dr(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;ed?b(t,a(n[m+1])?null:n[m+1].elm,n,h,m,r):h>m&&x(e,p,d)}(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(d)&&u(h=d.hook)&&u(h=h.postpatch)&&h(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,h=function(){p()};se(u,\"afterEnter\",h),se(u,\"enterCancelled\",h),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 dn(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;\n/*!\n * vue-router v3.5.1\n * (c) 2021 Evan You\n * @license MIT\n */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,h=null==this.activeClass?l:this.activeClass,d=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?Ho(null,xi(a.redirectedFrom),null,n):a;c[d]=Xo(r,v,this.exactPath),c[h]=this.exact||this.exactPath?c[d]: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[d]?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[h],isExactActive:c[d]});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 h=0;h=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=ha(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(ha(this.base)!==this.current.fullPath){var e=ni(this.base+this.current.fullPath);t?Ki(e):Ji(e)}},e.prototype.getCurrentLocation=function(){return ha(this.base)},e}(sa);function ha(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 da=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=ha(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 da(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 da){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-4cd21123\":function(){return n.e(9).then(n.bind(null,355))},\"v-5913b2cf\":function(){return n.e(10).then(n.bind(null,356))},\"v-22c07ce2\":function(){return n.e(11).then(n.bind(null,357))},\"v-f75119d2\":function(){return n.e(12).then(n.bind(null,358))},\"v-6b88b63a\":function(){return n.e(14).then(n.bind(null,359))},\"v-6ded6695\":function(){return n.e(15).then(n.bind(null,360))},\"v-bc6841f2\":function(){return n.e(13).then(n.bind(null,361))},\"v-6d3d3ba1\":function(){return n.e(18).then(n.bind(null,362))},\"v-2491f01e\":function(){return n.e(16).then(n.bind(null,363))},\"v-5cdd9b6a\":function(){return n.e(17).then(n.bind(null,364))},\"v-39e74116\":function(){return n.e(19).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-5e6a771d\":function(){return n.e(24).then(n.bind(null,369))},\"v-18390f56\":function(){return n.e(23).then(n.bind(null,370))},\"v-430c31fa\":function(){return n.e(25).then(n.bind(null,371))},\"v-2c1891b5\":function(){return n.e(26).then(n.bind(null,372))},\"v-2173826d\":function(){return n.e(28).then(n.bind(null,373))},\"v-5e0aaaf5\":function(){return n.e(27).then(n.bind(null,374))}};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\")]),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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/80/78/f128af89c43f94c80cc7515f5b0ca7a43376579726721d2e71b48460dbe16f96d5e641a3a6cd9db33dd90591ab322d797cd06faf1c7561ceeb4c82e0d249 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/80/78/f128af89c43f94c80cc7515f5b0ca7a43376579726721d2e71b48460dbe16f96d5e641a3a6cd9db33dd90591ab322d797cd06faf1c7561ceeb4c82e0d249 new file mode 100644 index 00000000..430e9882 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/80/78/f128af89c43f94c80cc7515f5b0ca7a43376579726721d2e71b48460dbe16f96d5e641a3a6cd9db33dd90591ab322d797cd06faf1c7561ceeb4c82e0d249 @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{373: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(\"p\",[t(\"img\",{attrs:{src:\"https://img-blog.csdnimg.cn/20210523215852734.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70\",alt:\"在这里插入图片描述\"}})]),s._v(\" \"),t(\"p\",[t(\"strong\",[s._v(\"进入后台添加题目,上传题目测试用例数据可以选择手动输入、Zip文件上传两种方式\")])]),s._v(\" \"),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(\"Add Sampple\")]),s._v(\"就可以手动填入该用例的输入与输出,该方式比较适合题目数据简单的,同时手动输入的题目数据将记录进数据库,下次对该题目进行修改可以直接获取,然后进行测试数据的修改,同时也会在服务器对应的testcase文件夹生成对应的文件。\")]),s._v(\" \"),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(\"in\")]),s._v(\"、\"),t(\"code\",[s._v(\"out\")]),s._v(\"、\"),t(\"code\",[s._v(\"ans\")]),s._v(\"三种拓展名\")]),s._v(\" \"),t(\"p\",[s._v(\"例如有两组测试用例,则对于普通题目测试用例的文件名分别为\"),t(\"code\",[s._v(\"1.in, 1.out(1.ans), 2.in, 2.out(2.ans)\")]),s._v(\"其他形式的文件后台均不识别。\")]),s._v(\" \"),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(\"├── \"),t(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"1\")]),s._v(\".in\\n├── \"),t(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"1\")]),s._v(\".out\\n├── \"),t(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"2\")]),s._v(\".in\\n├── \"),t(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"2\")]),s._v(\".out\\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(\"div\",{staticClass:\"language-bash line-numbers-mode\"},[t(\"pre\",{pre:!0,attrs:{class:\"language-bash\"}},[t(\"code\",[s._v(\"├── \"),t(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"1\")]),s._v(\".in\\n├── \"),t(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"1\")]),s._v(\".ans\\n├── \"),t(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"2\")]),s._v(\".in\\n├── \"),t(\"span\",{pre:!0,attrs:{class:\"token number\"}},[s._v(\"2\")]),s._v(\".ans\\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(\"p\",[s._v(\"然后压缩测试用例到一个zip中\")]),s._v(\" \"),t(\"p\",[s._v(\"注意:不要在这些文件外面套多一层文件夹,请直接压缩!!!\")]),s._v(\" \"),t(\"p\",[s._v(\"同时建议:尽量合并测试用例到一个文件中,减少测试用例组数,这会一定程度上提高判题性能。\")])])}),[],!1,null,null,null);a.default=e.exports}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/9c/d9/0fbf10b4b00c96ea72eef93e4cf6e202d8246aeb2c3afdd2026680a5a3b31590a98f3967ffc60cbf7ef1f03611040697244e2a2b587a0a39322316c4ba4a b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/9c/d9/0fbf10b4b00c96ea72eef93e4cf6e202d8246aeb2c3afdd2026680a5a3b31590a98f3967ffc60cbf7ef1f03611040697244e2a2b587a0a39322316c4ba4a new file mode 100644 index 00000000..7483ab44 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/9c/d9/0fbf10b4b00c96ea72eef93e4cf6e202d8246aeb2c3afdd2026680a5a3b31590a98f3967ffc60cbf7ef1f03611040697244e2a2b587a0a39322316c4ba4a @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{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:\"快速部署\"}},[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 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\")])])])}),[],!1,null,null,null);a.default=e.exports}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a4/3d/66f269365f13dd9b52a60c78ae319db6663f8c3ad379041ac2eca103de482ec8b020d934653bf2a44be856c239a72c109599710cdf0eaf033512e10cc599 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a4/3d/66f269365f13dd9b52a60c78ae319db6663f8c3ad379041ac2eca103de482ec8b020d934653bf2a44be856c239a72c109599710cdf0eaf033512e10cc599 new file mode 100644 index 00000000..ec33522d --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a4/3d/66f269365f13dd9b52a60c78ae319db6663f8c3ad379041ac2eca103de482ec8b020d934653bf2a44be856c239a72c109599710cdf0eaf033512e10cc599 @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{362: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(\"submissions\")]),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(\"total_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(\"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(\"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(\"isRemoveEndBlank\")]),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(\"openCaseResult\")]),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(\"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(\"problem_count表\")]),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(\"pid\")]),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(\"total\")]),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(\"ac\")]),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(\"mle\")]),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(\"tle\")]),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(\"re\")]),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(\"pe\")]),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(\"ce\")]),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(\"wa\")]),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(\"se\")]),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(\"pa\")]),t._v(\" \"),v(\"td\",[t._v(\"int\")]),t._v(\" \"),v(\"td\"),t._v(\" \"),v(\"td\",[t._v(\"该IO题目分数总和\")])]),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(\"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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a8/33/b9e677826914bbaf6ba3353f7701768f1395e458b0924702e1a7d53723194268fcf348a9dede276b5dc07315c28c922a70b4b010b326079dcdcc0ab4be60 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a8/33/b9e677826914bbaf6ba3353f7701768f1395e458b0924702e1a7d53723194268fcf348a9dede276b5dc07315c28c922a70b4b010b326079dcdcc0ab4be60 new file mode 100644 index 00000000..59e3c28b --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a8/33/b9e677826914bbaf6ba3353f7701768f1395e458b0924702e1a7d53723194268fcf348a9dede276b5dc07315c28c922a70b4b010b326079dcdcc0ab4be60 @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{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(\"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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/af/78/1b4cd2b34e5456804c35703d0c489d2bf9fa4a9cb41aa76966c954f86f820d5906840b829ffdbc5fff87ebe4d23fcf9b94dc77084c59b73a5b94f2f583d8 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/af/78/1b4cd2b34e5456804c35703d0c489d2bf9fa4a9cb41aa76966c954f86f820d5906840b829ffdbc5fff87ebe4d23fcf9b94dc77084c59b73a5b94f2f583d8 new file mode 100644 index 00000000..488d00d2 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/af/78/1b4cd2b34e5456804c35703d0c489d2bf9fa4a9cb41aa76966c954f86f820d5906840b829ffdbc5fff87ebe4d23fcf9b94dc77084c59b73a5b94f2f583d8 @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{371:function(t,s,a){\"use strict\";a.r(s);var r=a(41),e=Object(r.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(\"待续.....\")]),t._v(\" \"),a(\"h2\",{attrs:{id:\"二、导入其它oj题目\"}},[a(\"a\",{staticClass:\"header-anchor\",attrs:{href:\"#二、导入其它oj题目\"}},[t._v(\"#\")]),t._v(\" 二、导入其它OJ题目\")]),t._v(\" \"),a(\"p\",[t._v(\"导入HDU、Codeforces题目,只需提供该题目的题号便可一键导入\")]),t._v(\" \"),a(\"p\",[a(\"strong\",[t._v(\"管理员进入后台,点击题目列表\")])]),t._v(\" \"),a(\"p\",[a(\"img\",{attrs:{src:\"https://img-blog.csdnimg.cn/20210523223454472.png#pic_center\",alt:\"在这里插入图片描述\"}})]),t._v(\" \"),a(\"p\",[t._v(\"然后添加上方的添加按钮\")]),t._v(\" \"),a(\"p\",[a(\"img\",{attrs:{src:\"https://img-blog.csdnimg.cn/20210523222914722.png\",alt:\"在这里插入图片描述\"}})]),t._v(\" \"),a(\"p\",[a(\"strong\",[t._v(\"在弹出窗中选择OJ名字及题号,便可导入\")])]),t._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:\"在这里插入图片描述\"}})]),t._v(\" \"),a(\"p\",[a(\"strong\",[t._v(\"注意:\")])]),t._v(\" \"),a(\"ul\",[a(\"li\",[t._v(\"HDU的题号一般是 1000以上的数字\")]),t._v(\" \"),a(\"li\",[t._v(\"Codeforces的题号是1000A、1000B、这种数字加大写英文字母的格式\")])])])}),[],!1,null,null,null);s.default=e.exports}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c9/49/35076f3ec263f6769318461aa207872f7b43e6d7ad4ec2429bc2b2f853bcf05bdbe22fb56f3d1ffa51c0a4a31dd8bb43ce9cce6a3d786d11a4058ca182e1 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c9/49/35076f3ec263f6769318461aa207872f7b43e6d7ad4ec2429bc2b2f853bcf05bdbe22fb56f3d1ffa51c0a4a31dd8bb43ce9cce6a3d786d11a4058ca182e1 new file mode 100644 index 00000000..653d866a --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c9/49/35076f3ec263f6769318461aa207872f7b43e6d7ad4ec2429bc2b2f853bcf05bdbe22fb56f3d1ffa51c0a4a31dd8bb43ce9cce6a3d786d11a4058ca182e1 @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{357: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 key atrule\"}},[s._v(\"image\")]),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\":\")]),s._v(\" registry.cn\"),a(\"span\",{pre:!0,attrs:{class:\"token punctuation\"}},[s._v(\"-\")]),s._v(\"shenzhen.aliyuncs.com/hcode/hoj_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(\"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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e0/bd/32026daf4601f7585f768886588e85ddc565b1c14d6f704413956e9591398793b82f2408071203789c0157e05cfcb23afae1f18638905c6fe01e38863315 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e0/bd/32026daf4601f7585f768886588e85ddc565b1c14d6f704413956e9591398793b82f2408071203789c0157e05cfcb23afae1f18638905c6fe01e38863315 new file mode 100644 index 00000000..86c42cf7 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e0/bd/32026daf4601f7585f768886588e85ddc565b1c14d6f704413956e9591398793b82f2408071203789c0157e05cfcb23afae1f18638905c6fe01e38863315 @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{364: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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ed/7f/8203f522b0b3e24388e342c4cb14481e7f2b4091aabb03761822efe227419e4fb0595e25529c60fca6c8eeb216414af2c2ffc3255d46206c589023cec3c9 b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ed/7f/8203f522b0b3e24388e342c4cb14481e7f2b4091aabb03761822efe227419e4fb0595e25529c60fca6c8eeb216414af2c2ffc3255d46206c589023cec3c9 new file mode 100644 index 00000000..11eead69 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ed/7f/8203f522b0b3e24388e342c4cb14481e7f2b4091aabb03761822efe227419e4fb0595e25529c60fca6c8eeb216414af2c2ffc3255d46206c589023cec3c9 @@ -0,0 +1 @@ +{"code":"(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{318:function(t,e,n){},346:function(t,e,n){\"use strict\";n(318)},375:function(t,e,n){\"use strict\";n.r(e);var i={functional:!0,props:{type:{type:String,default:\"tip\"},text:String,vertical:{type:String,default:\"top\"}},render:function(t,e){var n=e.props,i=e.slots;return t(\"span\",{class:[\"badge\",n.type],style:{verticalAlign:n.vertical}},n.text||i().default)}},r=(n(346),n(41)),p=Object(r.a)(i,void 0,void 0,!1,null,\"69367c83\",null);e.default=p.exports}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f2/04/d01377218836b480d1f73bb0a9d2239f1e265936c62386e8accdca1b739d56254c44d773ba4a56d09bf4aa9998ff60ae694c1e2d97bc7cfb219836435c5b b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f2/04/d01377218836b480d1f73bb0a9d2239f1e265936c62386e8accdca1b739d56254c44d773ba4a56d09bf4aa9998ff60ae694c1e2d97bc7cfb219836435c5b new file mode 100644 index 00000000..ea2f4e72 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f2/04/d01377218836b480d1f73bb0a9d2239f1e265936c62386e8accdca1b739d56254c44d773ba4a56d09bf4aa9998ff60ae694c1e2d97bc7cfb219836435c5b @@ -0,0 +1 @@ +{"code":"(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}}]);","extractedComments":[]} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/0a/20/c10146d926a60013b5a837280005ffcc29693e5bdaba55578100ff47e5db b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/0a/20/c10146d926a60013b5a837280005ffcc29693e5bdaba55578100ff47e5db new file mode 100644 index 00000000..90c35b58 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/0a/20/c10146d926a60013b5a837280005ffcc29693e5bdaba55578100ff47e5db @@ -0,0 +1,2 @@ + +0e7f20520172a2a9024e426babc2bf6c7c74f858 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"55dd64ff10eba0bcb8275577553e3df9\"}","integrity":"sha512-gHjxKK+JxD+UyAzHUV9bDKekM3ZXlyZyHS5xtIRg2+FvltXmQaOmzZ2zPdkFkasyLXl80G+vHHVhzutMguDSSQ==","time":1621780818348,"size":3548} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/15/7b/69ccae71b90913f9b23c55f7f9be15e90f171996c1551031f4dca2915a6a b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/15/7b/69ccae71b90913f9b23c55f7f9be15e90f171996c1551031f4dca2915a6a new file mode 100644 index 00000000..50acdacc --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/15/7b/69ccae71b90913f9b23c55f7f9be15e90f171996c1551031f4dca2915a6a @@ -0,0 +1,2 @@ + +4a712814a579a5563e6e7e35bc28144aeaad72c1 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"66e54d18dce279a0722c3b7a1dd0f567\"}","integrity":"sha512-qDO55neCaRS7r2ujNT93AXaPE5XkWLCSRwLhp9U3IxlCaPzzSKne3idrXcBzFcKMkipwtLAQsyYHnc3MCrS+YA==","time":1621780818148,"size":46250} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/17/f1/19851af6d12d5de0511b4d95e6bde42a5725be388422fd4c0c5b5d31a7ac b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/17/f1/19851af6d12d5de0511b4d95e6bde42a5725be388422fd4c0c5b5d31a7ac new file mode 100644 index 00000000..064c297c --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/17/f1/19851af6d12d5de0511b4d95e6bde42a5725be388422fd4c0c5b5d31a7ac @@ -0,0 +1,2 @@ + +bc623e085245a629034aaecfd2d5e1ef76661cef {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"4e7204a736b62021c4fca561b8674bce\"}","integrity":"sha512-4L0yAm2vRgH3WF92iIZYjoXdxWWxwU1vcEQTlW6VkTmHk7gvJAgHEgN4nAFX4Fz8sjr64fGGOJBcb+AeOIYzFQ==","time":1621780817369,"size":597} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/1b/96/814f4f4b3fd99190660214df944763ab181249f867e5e790c18bafb1cd70 b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/1b/96/814f4f4b3fd99190660214df944763ab181249f867e5e790c18bafb1cd70 new file mode 100644 index 00000000..e09ee74d --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/1b/96/814f4f4b3fd99190660214df944763ab181249f867e5e790c18bafb1cd70 @@ -0,0 +1,2 @@ + +94d21600c413dcb6d69f6ce9162b5db6e922b612 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"c7bbf46065761a7aea04bda220936110\"}","integrity":"sha512-8gTQE3chiDa0gNH3O7Cp0iOfHiZZNsYjhuiszcobc51WJUxE13O6SlbQm/SqmZj/YK5pTB4tl7x8+yGYNkNcWw==","time":1621780817098,"size":2049} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/28/77/c5177404fe8d67a9c1aae3b15904bd5b01c76999c00504130a69999ed1cf b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/28/77/c5177404fe8d67a9c1aae3b15904bd5b01c76999c00504130a69999ed1cf new file mode 100644 index 00000000..712ff651 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/28/77/c5177404fe8d67a9c1aae3b15904bd5b01c76999c00504130a69999ed1cf @@ -0,0 +1,2 @@ + +c48b7aad19ae65d66321fb85a043eb9ce5d73adc {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"91bfdd238ef1eccdaf623ff9618f1a21\"}","integrity":"sha512-IeBNpD4fKpECHARF6DByrN3f6dftgaso1QsUAzkj0CFHm/U3YjgY6j/Ybf4nYE4oUAvmRkK513siFtCW8uuPhA==","time":1621780818267,"size":1095} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/2d/fe/2b012120903e7b5e88767f28dacf17e9c007a6244457c308f1f142d074cc b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/2d/fe/2b012120903e7b5e88767f28dacf17e9c007a6244457c308f1f142d074cc new file mode 100644 index 00000000..441275a0 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/2d/fe/2b012120903e7b5e88767f28dacf17e9c007a6244457c308f1f142d074cc @@ -0,0 +1,2 @@ + +ec0f3eb5e563354d47a2d560b1eb6aaba585239c {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"2ad34befb62af93b26c3630b7d53e96e\"}","integrity":"sha512-ZSq4oq2tDVywVwzDLLiskRLyFzEIWv60ErU7SEhkVW0MSFR/TTT9XReRJyj7LcmSWNcK9Eh7kYUSuYbE4Ik5gw==","time":1621780817347,"size":9709} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/3a/5c/363f94ef98675385a42573a136b04af458a3d0bacc15a5c2ebed7a693e7f b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/3a/5c/363f94ef98675385a42573a136b04af458a3d0bacc15a5c2ebed7a693e7f new file mode 100644 index 00000000..07a3fc4c --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/3a/5c/363f94ef98675385a42573a136b04af458a3d0bacc15a5c2ebed7a693e7f @@ -0,0 +1,2 @@ + +460e1763e0ba35d41f3ca9bc55a226c32f9db6a6 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"26786aa36e3042f6ab27ea74ef062ef7\"}","integrity":"sha512-r3gbTNKzTlRWgEw1cD0MSJ0r+fpKnLQap2lmyVT4b4INWQaEC4Kf/bxf/4fr5NI/z5uU3HcITFm3OluU8vWD2A==","time":1621780818268,"size":1793} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/3f/1a/770dbc52133104710049783d298eba817c03bef6f57a4f8c98b658bfa079 b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/3f/1a/770dbc52133104710049783d298eba817c03bef6f57a4f8c98b658bfa079 new file mode 100644 index 00000000..c5432d4a --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/3f/1a/770dbc52133104710049783d298eba817c03bef6f57a4f8c98b658bfa079 @@ -0,0 +1,2 @@ + +d9660b51760185ba70f13f9b8392af515dec0540 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"d5b8a4a240e58480dd83ea30e2e7fe9e\"}","integrity":"sha512-Q4HKOEYOppQXw68X+Wjh5iFYYi3VOj1SojiD+4gxaBACUBYzwjGv2KmxC5zrRUSZYMFmrmDdlLWPnqZXHhjzcw==","time":1621780818104,"size":7479} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/42/17/630f7d4d7a3acc3be9040d0c8a1bf89b0f531d1abcb29adaad2e6195a067 b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/42/17/630f7d4d7a3acc3be9040d0c8a1bf89b0f531d1abcb29adaad2e6195a067 new file mode 100644 index 00000000..c4b510ae --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/42/17/630f7d4d7a3acc3be9040d0c8a1bf89b0f531d1abcb29adaad2e6195a067 @@ -0,0 +1,2 @@ + +4bdf1b88dd861942f8cec1e2df0c46d967e23edb {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"636fd0d00054700256d1d801e13932fa\"}","integrity":"sha512-BuJGEl7ekgxaKHk9VR+UVCQEJkndML7B8f0ZPj3qux8y5Ojtdca3OwIO33i8/ETYayR/3lTh2HOT7NSUothbrA==","time":1621780817752,"size":36840} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/4f/4b/ec4afb7bdb469a7c9229ef9665c44cb22c84a5a65ee6d41ef152943e8f4f b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/4f/4b/ec4afb7bdb469a7c9229ef9665c44cb22c84a5a65ee6d41ef152943e8f4f new file mode 100644 index 00000000..f8c0f3b1 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/4f/4b/ec4afb7bdb469a7c9229ef9665c44cb22c84a5a65ee6d41ef152943e8f4f @@ -0,0 +1,2 @@ + +6eee43357d42ee76ccf02c3e699f88ad80ac4e75 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"cbd7d48b5aa449121ebd8892e273990f\"}","integrity":"sha512-pD1m8mk2XxPdm1KmDHiuMZ22Zj+MOtN5BBrC7KED3kguyLAg2TRlO/KkS+hWwjmnLBCVmXEM3w6vAzUS4QzFmQ==","time":1621780818652,"size":77565} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/57/9b/9099a157b0b12e8a8650be10038cb707cd3c79d1756360f9987c99e81e6d b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/57/9b/9099a157b0b12e8a8650be10038cb707cd3c79d1756360f9987c99e81e6d new file mode 100644 index 00000000..67ba3dc2 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/57/9b/9099a157b0b12e8a8650be10038cb707cd3c79d1756360f9987c99e81e6d @@ -0,0 +1,2 @@ + +e720041f02b7a7d8aa3a896f9c8259f6cd6fa5ba {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"f35428589b387136fd2221ec4797ab8e\"}","integrity":"sha512-7X+CA/UisLPiQ4jjQsTLFEgefytAkaq7A3YYIu/iJ0GeT7BZXiVSnGD8psjushZBSvLC/8MlXUYgbFiQI87DyQ==","time":1621780816831,"size":557} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/6e/d4/cf3d6ff898e2ee672932a69a80899412cd57e28f6529d5a48a466e9f8349 b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/6e/d4/cf3d6ff898e2ee672932a69a80899412cd57e28f6529d5a48a466e9f8349 new file mode 100644 index 00000000..840b6bc9 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/6e/d4/cf3d6ff898e2ee672932a69a80899412cd57e28f6529d5a48a466e9f8349 @@ -0,0 +1,2 @@ + +c3e517db176ab1dee356400452fe923041a8119a {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"754f5ce19dfdb8ea793e215c0cc2096b\"}","integrity":"sha512-J1CoPdcJDGvMon97TytcCAVKLASVzKMWPnq+LMP2cVqs8PEiNnbubKYdDAMd7jlze6CG6cW3vsvBoVzenvzjjQ==","time":1621780818479,"size":18120} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/6f/0d/692fc3eeb072630a02f0a5cee729a37d1e5395c1b6f9b6e3aa626eccacbf b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/6f/0d/692fc3eeb072630a02f0a5cee729a37d1e5395c1b6f9b6e3aa626eccacbf new file mode 100644 index 00000000..7e101090 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/6f/0d/692fc3eeb072630a02f0a5cee729a37d1e5395c1b6f9b6e3aa626eccacbf @@ -0,0 +1,2 @@ + +bfd7da685c8ba6a88607a82fa45bf3dd9560c8e2 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"6cbf4f7ef6bab3bb675f2398f293577f\"}","integrity":"sha512-WOGP78cjV0xfo1m//3oHvYMDHAi5+UZL8kSVHa226jhWT3jcKRC+5zfdYb74AuBUydiNUiZpM6AB6tS3HUxxGA==","time":1621780818249,"size":4559} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/7c/53/4fc926071a6453e9073bc62fe5e13da9d7a0d0cdae5d069706bc1cc00a87 b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/7c/53/4fc926071a6453e9073bc62fe5e13da9d7a0d0cdae5d069706bc1cc00a87 new file mode 100644 index 00000000..6a6a95f8 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/7c/53/4fc926071a6453e9073bc62fe5e13da9d7a0d0cdae5d069706bc1cc00a87 @@ -0,0 +1,2 @@ + +7fc4f2c5456b0206af1b710e3545718184d80422 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"5e75bbd87b3ad71b9de3b9602fcfe1cc\"}","integrity":"sha512-fqAbz0MmuZ6B545hhe85dc4IbL8RzHsVJl2B/dGofkGQnlKmxms1tmy5JBkrsiPAqaYjcJUU3mNhDS6sZA+MUQ==","time":1621780817916,"size":34511} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/81/c3/b215510b3c2b905e80a931d06df422fb66570b6f0fa12824bce86af1f902 b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/81/c3/b215510b3c2b905e80a931d06df422fb66570b6f0fa12824bce86af1f902 new file mode 100644 index 00000000..0a33c60f --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/81/c3/b215510b3c2b905e80a931d06df422fb66570b6f0fa12824bce86af1f902 @@ -0,0 +1,2 @@ + +47d915e1062a9871429047a63b79b19a6f69b10e {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"2e2cf84d2c806b3c4758d26abf6278fc\"}","integrity":"sha512-elCmullowqopgEMlcyrXScWhHYJzdpt1GT+80alX8HXAx13YKA4NX4YVwah1yriqAbu+kagAS4ihG5toxK2q6Q==","time":1621780817062,"size":5749} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/86/fd/da307b82e2ffd0e524ddb9d602e088e6c518ee9ddd690bf53e2682f99d87 b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/86/fd/da307b82e2ffd0e524ddb9d602e088e6c518ee9ddd690bf53e2682f99d87 new file mode 100644 index 00000000..5d7e09aa --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/86/fd/da307b82e2ffd0e524ddb9d602e088e6c518ee9ddd690bf53e2682f99d87 @@ -0,0 +1,2 @@ + +ac63f5d472ece0fa5f5a1ee48c8298d2a162f422 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"e56a8cdaa5dc4f1b692d0c66ab90d18e\"}","integrity":"sha512-yUk1B28+wmP2dpMYRhqiB4cve0Pm161OwkKbwrL4U7zwW9viL7VvPR/6UcCkox3Yu0POnM5qPXhtEaQFjKGC4Q==","time":1621780818229,"size":60432} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/91/ca/023fe7e185826b292c25f64dac59097b66cdcb6427842b6068816ae52840 b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/91/ca/023fe7e185826b292c25f64dac59097b66cdcb6427842b6068816ae52840 new file mode 100644 index 00000000..ed6d8b76 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/91/ca/023fe7e185826b292c25f64dac59097b66cdcb6427842b6068816ae52840 @@ -0,0 +1,2 @@ + +7faedfdf1ace4622c3abd48aa21b0ea4ce4cf0d4 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"7cf46515bc9acd41b0bd26764a897efe\"}","integrity":"sha512-abLkqK9Y0PlNwJ6zRM6Xmd+wx/KSJqh5dKsKzsmwfipVzt5jPrB3aYH/QnixvfSy1d8g78sZGK8PBUYsRRSsMw==","time":1621780820243,"size":204968} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/97/e5/7f5b1917679245068138b319ab61eec9344dc1065d13ed8d737365a741d9 b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/97/e5/7f5b1917679245068138b319ab61eec9344dc1065d13ed8d737365a741d9 new file mode 100644 index 00000000..b9a29753 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/97/e5/7f5b1917679245068138b319ab61eec9344dc1065d13ed8d737365a741d9 @@ -0,0 +1,2 @@ + +126fa8d512a237042ea6cc345940ac889c73147b {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"de417df3eff1a92d5b3bb1da2ecc2919\"}","integrity":"sha512-nNkPvxC0sAyW6nLu+T5M9uIC2CRq6yw6/dICZoClo7MVkKmPOWf/xgy/fvHwNhEEBpckTiorWHoKOTIjFsS6Sg==","time":1621780818343,"size":42506} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/9c/97/39b8a856bc5ca77cb490e66a8e5c08ca330b1fa9631277e02bbbdae8ecbf b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/9c/97/39b8a856bc5ca77cb490e66a8e5c08ca330b1fa9631277e02bbbdae8ecbf new file mode 100644 index 00000000..d243e989 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/9c/97/39b8a856bc5ca77cb490e66a8e5c08ca330b1fa9631277e02bbbdae8ecbf @@ -0,0 +1,2 @@ + +66d4fd759e3c639929d9291982df7cf8824f3708 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"95ce7090dfc934cb0e1c9620450d0175\"}","integrity":"sha512-VYijwIR82kpFOwU+RurvalEGdqIwrPm1GXIqD/Z3RppBnCVUTZva46/r5RrBIUB737Ce2KwXPvL4FOG1T+lPag==","time":1621780818249,"size":1190} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/c3/f6/5632b8ec34e1337c1b470e9fe2719c83f13dc81c45e844184b6a12412063 b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/c3/f6/5632b8ec34e1337c1b470e9fe2719c83f13dc81c45e844184b6a12412063 new file mode 100644 index 00000000..8254d4f7 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/c3/f6/5632b8ec34e1337c1b470e9fe2719c83f13dc81c45e844184b6a12412063 @@ -0,0 +1,2 @@ + +2a61b5bf13ff5fd5b5216cd43741eb460894c562 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"022ebdd6e2de82483d69768d0bb96912\"}","integrity":"sha512-Hf0FWlm63/uW6z8EVKH8P8uewsf/wqPfxGvANgwd2za1pOCOcU+a+qjOekYXDBu3nuiL+TJqDwTFXhIgIb+BIw==","time":1621780818565,"size":65546} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/f5/ec/18c51aaa9c1d4bcc8a3e9e3917d29040fed2f7133d0a74fcd0c6204677e9 b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/f5/ec/18c51aaa9c1d4bcc8a3e9e3917d29040fed2f7133d0a74fcd0c6204677e9 new file mode 100644 index 00000000..6adc6cd3 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/f5/ec/18c51aaa9c1d4bcc8a3e9e3917d29040fed2f7133d0a74fcd0c6204677e9 @@ -0,0 +1,2 @@ + +5d5c6ccc57d35d84361c23498c6b34ee552ed6da {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"8bb3de2f49d5599658ecbf7d5d47a48e\"}","integrity":"sha512-TKpOjYMcGfVzYhlStK7uexn4Dj1vW//OGAKdUJNr0tsx1rhvjtKTUoM/HeEFlhZdW5C2Jv5wFQuiNJfLnDZeCA==","time":1621780818228,"size":1765} \ No newline at end of file diff --git a/docs/node_modules/.cache/terser-webpack-plugin/index-v5/f9/1d/8a5e9dad3c58c96892ec0489d9dc24c698844b65ab037284df2b8669902f b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/f9/1d/8a5e9dad3c58c96892ec0489d9dc24c698844b65ab037284df2b8669902f new file mode 100644 index 00000000..dbfb3041 --- /dev/null +++ b/docs/node_modules/.cache/terser-webpack-plugin/index-v5/f9/1d/8a5e9dad3c58c96892ec0489d9dc24c698844b65ab037284df2b8669902f @@ -0,0 +1,2 @@ + +9f6169d1fc397ab341284c660ecc7267f07c5748 {"key":"{\"terser\":\"4.8.0\",\"node_version\":\"v12.18.1\",\"terser-webpack-plugin\":\"1.4.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":false,\"sourceMap\":false,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"output\":{\"comments\":new RegExp(\"^\\\\**!|@preserve|@license|@cc_on\", \"i\")}}},\"hash\":\"70051d7a9942b3befaeec36de5fdd319\"}","integrity":"sha512-UL/3iI/aqzBYFYN29F2jnVdVOb6bLwTHIsVycIC8FKNTdwPgADX5q3BnlzUZQ47jY75T31MXRtZKkk2uROMsdw==","time":1621780818185,"size":787} \ No newline at end of file