CSU-OJ部署教程
有点突发奇想,又有点心血来潮,想把之前做的CSU-OJ系统部署到服务器上,于是乎写下了这篇教程。
1.服务器购买
我是在腾讯云上购买的服务器,本来还在想这个2h4g的服务器也太贵了吧,一个月就要100米,然后群里有个老哥说可以买幻兽帕鲁的服务器,2h16g,一个月只要32,我直接说老哥你真牛,这波羊毛被你薅到了。于是我买了一个月的幻兽帕鲁的服务器,然后改装了一下。
服务器购买地址:服务器
2.服务器初始化
2.1 重装系统
首先进入控制台,在应用管理的界面找到重装系统,然后我们重装系统为 宝塔Linux面板 8.0.5 腾讯云专享版 ,用宝塔主打一个方便快捷。
然后我们在防火墙处开放8888端口,为了安全起见,可以编辑我们的可访问ip为我们主机的ip地址。
2.2 装配环境
然后我们点击登录,在腾讯的命令行界面输入登入宝塔的命令(登录按钮旁边有命令),之后就可以进入宝塔界面了!
我们在跳出来的基本配置安装弹窗中选择LNNP即可。(下图为安装完之后)
顺便我们可以在面板设置->面板账户,面板密码界面把账号和密码修改一下。
3.部署规划
可以想一下我们项目需要什么依赖,路径地址是什么。
前端:http://ip
后端:http://ip/api 实际运行在8121端口,默认用nginx做转发(避免跨域问题的麻烦)。
代码沙箱 http://ip:8090/executeCode 运行在8080端口。
nginx:80端口
数据库:3306端口
Redis:6379端口
Java
Maven
4.安装依赖
搜索Redis,直接安装7.2.4 stable版本。
4.1 安装MySQL数据库
首先得先检查一下我们防火墙的端口,要把3306端口开放一下。
然后在数据库界面添加一个新的数据库,添加完之后我们可以在IDEA或者Navicat上先连接这个数据库,然后我们再运行SQL文件.从而将数据库的数据导入到这个新建的远程数据库中去。
导入完之后就是这样子咯
4.2 安装Redis依赖
我们可以先尝试访问一下Redis,发现是不可以访问的,这是因为我们的Redis没有设置访问权限
我们要先在宝塔里面设置一下访问权限的问题。在Redis的设置,性能设置界面,我们先把我们的bind设置为0.0.0.0,让外网可以访问我们的redis,然后设置一下密码。这样我们的本机就可以访问redis了,(后续得修改,不能用0.0.0.0,不然会被入侵)。
如果还不行的话,可能是防火墙没有打开。
4.3 Java环境的安装
我们在宝塔->网站->Java项目中添加Java环境,我们选择添加jdk1.8.0
然后我们在命令行中安装maven,输入以下命令
5.部署代码沙箱到服务器上去
首先我们在IDEA 的maven中执行package命令,将代码沙箱打包成一个jar包。
打包完成之后我们可以现在本地测试一下,用java -jar 命令运行以下jar包看看可不可以。
如果没有问题的话,我们再将jar包上传到宝塔面板中去:
点击文件,然后在www/wwwroot目录下,我们将jar包拖上去就ok了。
上传完之后,我们就可以建立一个新的java项目了:
点击网站,然后添加Java项目,选择jar包,改端口为8090,然后设置开机自启,点击提交,就ok啦!
我们可以通过该页面的设置->项目日志,来查看项目的日志。由此判断项目是否处于运行状态中。
怎么判断能不能用呢?我们可以在我们的后端中,调用一下服务器ip+8090的端口,看看项目能否正常运行,可以的话,说明代码沙箱是部署成功的!
提示一下,如果发现执行不了的话,可能是没有开放8090端口噢!
通过就是ok的啦!
6.部署前端
- 修改跨域ip为服务器ip;
- 打包前端文件,命令是yarn build,如果遇到问题,可以自行百度一下,一般不会有问题;
我这里出现的问题是编译报错JavaScript heap out of memory,node内存溢出,Exit status 134。这个的话其实是js文件太大了,导致不能构建出来项目,解决方案就是 打开cmd窗口,然后输入 这条命令 即可。setx NODE_OPTIONS --max_old_space_size=4096
- 然后我们进入宝塔面板,点击网站,点创建php项目(其实就是前端),然后我们将dist文件导入进去,设置好域名(没有域名的话可以先用ip代替)。这样前端就部署完成了。
- 这里可能有个坑,就是输入网址时nginx可能报404的错误,这是因为框架的路由,实际上是没有部署当前这个网址到nginx上的,所以我们得用一条命令转发到index.html上,具体命令我们可以查看这个网址:https://router.vuejs.org/guide/essentials/history-mode.html#nginx
7.部署后端
修改application.properties文件中的MySQL的url、用户名、密码;
修改redis的url、密码;
执行mvn的package命令,将项目打包成一个jar包;
可以先在本地上测试一下jar包,我这里出现了一个bug:
排查之后发现,应该是文心一言的java版本,不能用1.8,得用17及以上的。上传jar包到服务器上;(跟代码沙箱那一步是一样的)
这里我遇到了两个坑,我之前在防火墙那里设置了只能我的本机访问Redis和MySQL,然后部署上去我发现后端也访问不了,所以在防火墙那里还要加入服务器的ip允许策略。
在前端nginx那里加入以下命令,将api网址下的都转发到8121端口下。
location /api {
proxy_pass http://127.0.0.1:8121;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_set_header Connection “”;
}
8.前后端联调测试
测试一下基本流程,没有问题,舒服了,家人们~
后续的工作:可以把域名加进去,之前买了个域名,现在可以派上用场了。
绑定域名的话我打算再出一篇文章,内容包括:如何购买域名,如何在宝塔上绑定域名,如何在DNS服务商处解析DNS域名。
参考
https://juejin.cn/post/7266374030147076157
https://blog.csdn.net/Jacksun_huang/article/details/90054923