You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

316 lines
6.7 KiB

3 years ago
  1. # vscode-oj
  2. # 部署
  3. ## 一、基础配置
  4. Ubuntu 20.04
  5. 由于前端中安装了自己编写的VScode插件,其中的后端服务器IP是直接写在插件的代码中的,所以如果后端IP地址发生了变化的话需要重新编译打包插件,因此对于前端和后端可以单独验证。
  6. 从前端镜像创建好云主机后可以从浏览器打开 `http://<ip>:8080` 访问code-server和使用我们开发的插件,此时插件访问的还是我们自己配置的后端。
  7. 对于后端的话,根据后端镜像创建好云主机后需要修改 `/etc/nginx/sites-available/be` 中的 `server_name` 为后端云主机的IP地址,然后可以在浏览器中输入 `http://<IP>/get-problem-items/` 或者 `http://<IP>/get-problem-description/<题目id: 1~400>/` 进行测试,只有这两个是GET请求,其他的接口是 POST 请求。
  8. POST请求接口
  9. 1.`http://<ip>/case_test/`
  10. |变量|值|
  11. |:---:|:---:|
  12. |pid|1到400的数字字符串|
  13. |code|string|
  14. 2.`http://<ip>/check-logic-error/`
  15. |变量|值|
  16. |:---:|:---:|
  17. |pid|1到400的数字字符串|
  18. |code|string|
  19. 3.`http://<ip>/submit/`
  20. |变量|值|
  21. |:---:|:---:|
  22. |pid|1到400的数字字符串|
  23. |code|string|
  24. ## 二、数据库配置
  25. 创建 Mysql 云数据库,执行 `be/SQL/problem.sql` 中的sql语句,并修改 `be/app.py` 中的配置为相应的数据库信息。
  26. ## 三、服务端配置
  27. ### 2.1 安装Python3.7
  28. ```shell
  29. # 升级包索引和软件
  30. sudo apt update
  31. sudo apt upgrade -y
  32. # 安装编译所需包
  33. sudo apt install -y build-essential zlib1g-dev libbz2-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
  34. # 官网下载 Python3.7
  35. wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz
  36. # 解压
  37. tar -xzvf Python-3.7.4.tgz
  38. # 编译安装
  39. cd Python-3.7.4
  40. ./configure --prefix=/usr/lib/python3.7 # 配置安装位置
  41. sudo make
  42. sudo make install
  43. # 建立软链接
  44. sudo ln -s /usr/lib/python3.7/bin/python3.7 /usr/bin/python3.7
  45. sudo ln -s /usr/lib/python3.7/bin/pip3.7 /usr/bin/pip3.7
  46. ```
  47. ### 2.2 安装JDK-11
  48. ```shell
  49. sudo apt update
  50. # 安装 JDK-11
  51. sudo apt install -y openjdk-11-jdk
  52. # 查看是否安装成功
  53. java -version
  54. # 配置环境变量
  55. sudo nano /etc/environment
  56. # 写入:
  57. JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
  58. # 更新
  59. source /etc/environment
  60. # 查看
  61. echo $JAVA_HOME
  62. ```
  63. ### 2.3 安装Nginx
  64. ```shell
  65. sudo apt-get install -y nginx
  66. # 启动
  67. sudo /etc/init.d/nginx start
  68. # 使用以下命令重启、停止、查看Nginx状态
  69. sudo systemctl restart nginx
  70. sudo systemctl start nginx
  71. sudo systemctl stop nginx
  72. sudo systemctl status nginx
  73. ```
  74. ### 2.4 创建Python虚拟环境
  75. ```shell
  76. # 更新并安装组件
  77. sudo apt update
  78. sudo apt install -y python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools
  79. # 安装 python3-venv 软件包
  80. sudo apt install -y python3-venv
  81. # 创建虚拟环境
  82. cd ~
  83. python3.7 -m venv be
  84. # 将 be 文件夹中的文件上传至云主机 ~/be 下
  85. # 激活虚拟环境
  86. source ~/be/bin/activate
  87. # 安装依赖(注意使用pip而不是pip3)
  88. cd ~/be
  89. pip install -r requirements.txt
  90. # 安装 uWSGI
  91. pip install uwsgi
  92. ```
  93. ### 2.5 配置 uWSGI
  94. ```shell
  95. # 启用 UFW 防火墙,允许访问端口5000
  96. sudo ufw allow 5000
  97. # 测试 uWSGI 服务(若本地开启了代理请关闭)
  98. uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
  99. # 从本地浏览器输入 http://<ip address>:5000/get-problem-items/ 能够返回数据即表示成功
  100. # 现在可以关闭虚拟环境
  101. deactivate
  102. # 创建 uWSGI 配置文件
  103. nano ~be/be.ini
  104. # 写入如下内容
  105. [uwsgi]
  106. module = wsgi:app
  107. master = true
  108. processes = 5
  109. socket = be.sock
  110. chmod-socket = 660
  111. vacuum = true
  112. die-on-term = true
  113. # 保存并关闭
  114. ```
  115. ### 2.6 创建 systemd 单元文件
  116. ```shell
  117. sudo nano /etc/systemd/system/be.service
  118. # 写入如下内容
  119. [Unit]
  120. Description=uWSGI instance to serve be
  121. After=network.target
  122. [Service]
  123. User=ubuntu
  124. Group=www-data
  125. WorkingDirectory=/home/ubuntu/be
  126. Environment="PATH=/home/ubuntu/be/bin"
  127. ExecStart=/home/ubuntu/be/bin/uwsgi --ini be.ini
  128. [Install]
  129. WantedBy=multi-user.target
  130. # 保存并关闭
  131. # 现在可以启动创建的 uWSGI 服务并启用,以便在启动时启动
  132. sudo systemctl start be
  133. sudo systemctl enable be
  134. # 查看状态
  135. sudo systemctl status be
  136. ```
  137. ### 2.7 将 Nginx 配置为代理请求
  138. ```shell
  139. sudo nano /etc/nginx/sites-available/be
  140. # 写入
  141. server {
  142. listen 80;
  143. server_name <公网IP服务端外网IP或者负载均衡外网IP>;
  144. location / {
  145. include uwsgi_params;
  146. uwsgi_pass unix:/home/ubuntu/be/be.sock;
  147. }
  148. }
  149. # 保存并关闭
  150. # 若要启用该配置,需将文件链接至 sites-enabled 目录
  151. sudo ln -s /etc/nginx/sites-available/be /etc/nginx/sites-enabled
  152. # 通过如下命令测试语法错误
  153. sudo nginx -t
  154. # 返回成功则重启 Nginx 进程以读取新配置
  155. sudo systemctl restart nginx
  156. # 再次调整防火墙,不再需要通过5000端口访问,可以删除该规则,最后可以允许访问Nginx服务器
  157. sudo ufw delete allow 5000
  158. sudo ufw allow 'Nginx Full'
  159. # 现在可以直接通过 IP 地址访问
  160. # 尝试 http://<ip address>/get-problem-items/
  161. # 遇到错误使用如下方式检查
  162. sudo less /var/log/nginx/error.log # 检查Nginx错误日志
  163. sudo less /var/log/nginx/access.log # 检查Nginx访问日志
  164. sudo journalctl -u nginx # 检查Nginx进程日志
  165. sudo journalctl -u be # 检查你的Flask应用程序的uWSGI日志
  166. ```
  167. ## 四、前端配置
  168. > 新建一台云主机
  169. ### 4.1 code-server 安装配置
  170. ```shell
  171. curl -fOL https://github.com/cdr/code-server/releases/download/v3.8.0/code-server_3.8.0_amd64.deb
  172. sudo dpkg -i code-server_3.8.0_amd64.deb
  173. # 启动服务
  174. sudo systemctl enable --now code-server@$USER
  175. ```
  176. 打开~/.config/code-server/config.yaml
  177. 修改bind-addr: 0.0.0.0:8080,以便在浏览器中访问云主机的8080端口来访问code-server。也可以指定其他的端口。同时修改password为可记忆的密码方便后续访问。随后重启服务。
  178. ```shell
  179. sudo systemctl restart --now code-server@$USER
  180. ```
  181. 浏览器访问云主机ip:8080,并输入密码,即可使用在线VSCode编辑器。
  182. ### 4.2 插件的编译安装(可在本地安装编译并上传到云主机)
  183. ```shell
  184. # 安装 node.js、npm
  185. sudo apt update
  186. sudo apt install nodejs npm
  187. # 查看是否成功
  188. nodejs --version
  189. npm --version
  190. # 安装 typescript
  191. npm install -g typescript
  192. # 查看是否成功
  193. tsc -v
  194. # 安装脚手架
  195. npm install -g yo generator-code
  196. # 进入 ShuiShan 目录
  197. cd ShuiShan
  198. # 修改 ShuiShan/src/service.ts 第七行 domain 变量为后端服务器地址****
  199. # 安装依赖
  200. npm install
  201. # 打包
  202. vsce package
  203. # 上传到前端服务器,将生成的 .vsix 文件上传至前端服务器
  204. # 在 code-server 中安装该插件包
  205. # 如果不想上传至云端可在本地使用 VScode 打开 ShuiShan 目录然后按 F5 运行
  206. ```