1. 引言
若依是一个功能良好的springboot+vue框架,本教程旨在帮助各位使用原生基础的宝塔面板部署若依前后端分离项目,保证全程都用最简单的步骤,从安装完宝塔面板后一步到底,教程中提出的可能存在的一些问题,都是笔者亲历,也许有所不周,请多海涵。
注:2-5点为新手服务器准备和安装宝塔面板相关教程,如果已有服务器并已安装宝塔面板,则直接跳到第6点
2. 购买服务器
购买服务器是为了获取公网ip,服务器可以在阿里云或腾讯云等大厂厂商处购买,云服务器或轻量应用服务器等按需购买,如果只是部署类似于毕业设计的网页或者轻量程序,购买轻量服务器便可。
3. 服务器系统安装
这一步可以在购买服务器时就进行选择,以腾讯云轻量应用服务器为例,前五个OpenCloudOS,CentOS,CentOS Stream,Ubuntu,Debian均为Linux服务器。
Windows Server服务器可以用,但是不推荐。
4. 安装宝塔面板
Linux服务器是通过命令行来进行操作的,而宝塔面板则是把复杂的命令行变成简单的可视化界面,更方便我们进行相关的运维和部署操作。
访问宝塔面板的官网宝塔linux面板,一键安装LAMP/LNMP/SSL/Tomcat,到产品类目中选择宝塔Linux面板,选择立即免费安装,在跳转的页面中找到对应的服务器的安装命令,复制该命令。
在购买的服务器的控制台选择登录(也可以使用使用ssh远程终端工具连接至Linux服务器),然后在跳出的命令界面中粘贴安装命令,即可成功安装。
注:如果显示你不是root用户的话,执行命令 sudo -i 切换至root用户。
sudo -i
如果对宝塔面板的安装仍然有困惑,可以移步至宝塔官网的教程进行学习参考。
此处附宝塔linux面板命令大全,包括获取宝塔面板初始账号密码,重启,修改等等。
宝塔linux面板命令大全 - 宝塔面板https://www.bt.cn/new/btcode.htm
5. 进入宝塔面板并配置相关应用
如图所示获取宝塔面板的初始端口和账号密码
如图中笔者的宝塔面板安装在了该服务器的28671端口,则需要在服务器的防火墙处开放该端口才能进行公网访问,同时注意,开放面板端口时,同时开放8888,888,443,20,21端口,以及3306(MySql的使用端口),6379(Redis的使用端口)
在网址栏输入公网IP:面板端口,访问宝塔面板,登陆后下载相关应用并配置(一般维持默认配置即可),部署若依前后端分离版本必须要备有:
1. Nginx(配置网页反向代理)
2. MySQL(数据库)
3. Redis
4. phpMyAdmin(数据库管理工具)
5. java项目管理器(内部下载Tomcat,Tomcat中含jdk)
下图附笔者宝塔的软件相关版本(仅供参考)
注:一定要注意防火墙服务器端口开放,否则会影响相关环境的运行。
6. 打包若依后端
6.1 修改配置文件
6.1.1 application-druid.yml
此处规范的做法应该是更改application.yml中的active: druid为active:prod,并为其编写一个application-prod.yml,但是,本教程只求简单,不求规范,我们直接修改application-druid.yml文件,将其中连接数据库的username和password直接进行修改。记住此处的数据库名称和密码,后续要在服务器端建立数据库。
6.1.2 logback.xml
logback.xml是日志配置的文件,保存相关日志信息,如果不修改这个文件直接打包上服务器进行运行,会有各种诡异的找不到/home/ruoyi/log的报错。
6.2 用maven打包项目为jar包
打开IDEA右上角的maven模块,展开生命周期(lifestyle),选择package,ruoyi-admin目录下生成target目录,复制其中的ruoyi-admin.jar,上传到服务器的/www/wwroot/xxx 文件夹,xxx为项目名称(文件夹都存放在宝塔面板的文件菜单)
7. 打包若依前端
7.1 修改.env.production
将.env.production文件的原来的生产环境注释,改为'http://公网IP:8080',此处公网IP填写你的服务器外网地址
7.2 用npm打包前端为dist
1. 在IDEA中打开终端,进入ruoyi-ui文件夹
cd ruoyi-ui
2. 在文件夹中执行打包命令:
npm run build:prod
注:如果提示npm不是可执行程序,先执行npm install下载node_modules,然后再执行第2点,npm指令与node.js有关,可能会报版本相关错误。
npm install
执行完打包命令后,在ruoyi-ui文件夹下生成dist文件夹,将dist文件夹上传到服务器/www/wwwroot/xxx 文件夹,xxx为你的项目名,dist文件夹可以先压缩成压缩包上传,然后在文件夹中解压
8. 创建数据库
在宝塔面板的数据库菜单中新建数据库,数据库名与数据库密码要和打包后端文件时的配置文件中的一致,创建完成后导入数据库的sql文件,注意utf8mb4是数据库字符集,转储数据库为sql文件时注意当前数据库的字符集规则。
注:sql文件由数据库连接软件(如Navicat)转储数据和结构生成。
9. 部署前端
9.1 添加站点
在网站菜单中选择PHP项目,点击创建站点,在域名的填写框中填写你的公网IP,如果后面不添加端口则默认为80端口,在根目录中选择你的前端dist的存放路径
9.2 修改nginx配置文件
点击nginx管理修改配置文件,在server模块中添加配置代码,其他的不用修改,注意{ },务必要存放在server{ }中,修改完记得保存,存完后重启nginx服务,如果没有问题,此时在网址框输入你的公网IP可以显示你的前端页面。
listen 80;
server_name localhost;
location / {
root /www/wwwroot/test/dist; # 替换为你的文件存储路径
try_files $uri $uri/ @proxy;
}
location @proxy {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
10. 部署后端
在网站菜单中选择Java项目,找到路径中的jar包,配置项目jdk(根据项目实际使用的jdk进行配置,在IDEA的Project Structure中查看)
至此,点击确定,回到面板运行即可完成部署,实现公网访问。
11.可能存在的问题及解决
11.1 引言
这一部分,都是笔者碰到的相关部署问题,以及解决的相关方法(可能不规范但有用)
11.2 Java项目未启动但没有日志
不管是未启动还是已启动都没有日志刷新(如下图一),这个疑似是新版宝塔面板的bug
解决方法:把日志路径改为/www/wwwlogs/java 如下图二
11.3 Java项目提示日志路径报错
例如:
[/home/ruoyi/logs/sys-info.log] 22:21:41,395 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[file_info] - Failed to create parent directories for [/home/ruoyi/logs/sys-info.log] 22:21:41,395 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[file_info] - openFile(/home/ruoyi/logs/sys-info.log,true) call failed. java.io.FileNotFoundException: /home/ruoyi/logs/sys-info.log (No such file or directory)
该情况是因为找不到配置文件中的日志存放路径/home/ruoyi/log,或没有权限写入
解决方法:参考6.1.2修改 logback.xml
<property name="log.path" value="./logs" />
11.4 无法打开phpMyAdmin
phpMyAdmin是面板中的数据库管理工具
可能原因如下:
1. nginx1.24版本的代理问题,无法指向888端口上的phpMyAdmin面板(可能性高)
2. 服务器防火墙安全规则未放行888端口
3. php版本问题
解决办法:
1. 在软件商店中更换nginx版本
2. 在服务器防火墙中放行888端口
3. 修改php版本
php版本与面板安装的PHP有关,一般PHP是什么版本,在phpMyAdmin中则为什么版本
11.5 Java项目日志报错找不到qrtz开头的表单
例如
19:34:45.692 [main] ERROR o.s.b.SpringApplication - [reportFailure,843] - Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysJobController': Unsatisfied dependency expressed through field 'jobService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysJobServiceImpl': Invocation of init method failed; nested exception is org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Table 'ruoyi-vue-tongfeng.QRTZ_LOCKS' doesn't exist [See nested exception: java.sql.SQLSyntaxErrorException: Table 'ruoyi-vue-tongfeng.QRTZ_LOCKS' doesn't exist]
这是配置文件中对 qrtz_ 开头的配置表单的识别不正确,MySql中lower_case_table_names=0
表示表名区分大小写。默认情况下,在Linux系统中该值为0,在Windows系统中该值为1
解决办法:(不规范)在数据库的管理工具phpMyAdmin里面执行sql语句把所有的qrtz开头的表单名字由小写改为大写
RENAME TABLE `qrtz_blob_triggers` TO `QRTZ_BLOB_TRIGGERS`;
RENAME TABLE `qrtz_calendars` TO `QRTZ_CALENDARS`;
RENAME TABLE `qrtz_cron_triggers` TO `QRTZ_CRON_TRIGGERS`;
RENAME TABLE `qrtz_fired_triggers` TO `QRTZ_FIRED_TRIGGERS`;
RENAME TABLE `qrtz_job_details` TO `QRTZ_JOB_DETAILS`;
RENAME TABLE `qrtz_locks` TO `QRTZ_LOCKS`;
RENAME TABLE `qrtz_paused_trigger_grps` TO `QRTZ_PAUSED_TRIGGER_GRPS`;
RENAME TABLE `qrtz_scheduler_state` TO `QRTZ_SCHEDULER_STATE`;
RENAME TABLE `qrtz_simple_triggers` TO `QRTZ_SIMPLE_TRIGGERS`;
RENAME TABLE `qrtz_simprop_triggers` TO `QRTZ_SIMPROP_TRIGGERS`;
RENAME TABLE `qrtz_triggers` TO `QRTZ_TRIGGERS`;
建议解决方法:1.修改MySql的lower_case_table_names使其不区分表单名大小写
2.
修改Quartz配置,在application.yml
11.6 前端首页一刷新就404
解决方案:网站的设置的配置文件中添加如下配置:
location / {
try_files $uri $uri/ @router;
index index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
12. 结语
本文是笔者成功用宝塔面板部署若依前后端之后写的经验小结,如有不对的地方请多指正,因为在碰到这些问题时少有过往经验,没有相关帖子,故总结此篇教程用作分享,希望可以给您带来一些帮助或者遇上bug的启发。如果确实帮助到了您,希望您给我点点赞和星星,不胜感激!!!