1. 环境准备:别急着动手,先把“地基”打好
很多新手朋友一上来就急着敲命令,结果卡在环境问题上半天,心态直接崩了。我刚开始那会儿也这样,总觉得环境配置是小事,结果在部署若依项目时,光是一个JDK版本不对就折腾了我一晚上。所以,咱们第一步,必须把“地基”打牢。这个地基,就是你的Linux云服务器和上面要跑的各种软件环境。
首先,你得有一台云服务器。现在阿里云、腾讯云这些大厂,新用户都有很划算的体验套餐,选个CentOS 7.x 或者 Ubuntu 20.04 LTS 这类主流且文档丰富的系统就行。我个人更习惯用CentOS 7,因为很多老教程都基于它,遇到问题搜解决方案更容易。买完服务器,记下它的公网IP地址、root密码(或者SSH密钥),这是你进自家“工地”的大门钥匙。
接下来,你需要一个顺手的“遥控器”来操作这台远在数据中心的服务器。Xshell、FinalShell、或者Mac/Linux用户直接用终端SSH命令都行。我用FinalShell比较多,因为它集成了SFTP文件传输,传文件特别方便,不用再开一个FTP工具了。连接命令很简单:ssh root@你的服务器IP,然后输入密码,看到命令行提示符,恭喜,你已经站在服务器里面了。
现在,开始往服务器里搬“建材”。若依这个前后端分离项目,后端是Java写的,前端是Vue,所以我们需要:JDK、MySQL、Redis、Nginx,还有Node.js(用来打包前端)。我强烈建议,尤其是新手,先别急着用命令行一个个安装配置,那坑太多了。咱们可以借助一个神器——宝塔面板。这就像给你的Linux服务器装了一个图形化的控制中心,安装软件、配置防火墙、管理文件,点点鼠标就能完成,极大降低了入门门槛。
怎么装宝塔?连上你的服务器后,执行一行命令(以CentOS 7为例):
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
执行过程中会问你是否同意,输入y回车。安装完成后,命令行最后会显示面板的登录地址、用户名和密码,一定要把这些信息存好。然后,你就在浏览器里输入那个地址,用给的账号密码登录进去。
进入宝塔面板后,在“软件商店”里,像逛超市一样,把我们需要的东西一键安装上:
- Nginx:选个稳定版,比如1.22。
- MySQL:选5.7版本,这是若依官方文档推荐的,兼容性最好。安装时会让你设置root密码,这个密码也要记牢。
- Redis:同样一键安装,默认端口6379。
- Java项目管理器:这是一个宝塔插件,可以方便地管理多个JDK版本和Java项目。通过它安装JDK 1.8(官方推荐)。
至于Node.js,前端打包需要,但宝塔面板的软件商店里可能没有最新版。我们可以用更通用的方法,在宝塔的“终端”里(或者用你的SSH工具连接)执行命令安装。这里推荐用Node版本管理工具nvm,方便以后切换版本:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install 16
nvm use 16
安装完用 node -v 和 npm -v 检查一下版本。环境准备这块,花上半小时稳稳搞定,绝对比你后面出问题再回头排查要省心十倍。
2. 端口与安全:给服务器开几扇“安全的门”
服务器不是孤岛,我们的网站需要被外界访问,这就涉及到“端口”。你可以把端口想象成服务器这座房子上的“门”,不同的服务走不同的门。比如,网页通常走80或443号门(HTTP/HTTPS),我们后端服务可能走8080号门,MySQL走3306号门。但是,不能把所有的门都敞开,那样太危险了。
这里有两个层面的“开门”操作:云服务器厂商的安全组和服务器操作系统自身的防火墙。很多新手只做了一个,导致始终访问不了,就是这个原因。
首先是云服务商的安全组(以阿里云、腾讯云为例)。这是云平台层面的防火墙,流量必须首先通过它。你需要登录到云服务器的控制台,找到“安全组”配置。添加几条“入方向”规则:
- 规则1:允许TCP协议的
80端口(HTTP)和443端口(HTTPS),来源填0.0.0.0/0(代表所有IP,正式环境可以设得更严格)。 - 规则2:允许TCP协议的
8080端口(你的后端服务端口),来源同样可以先设为0.0.0.0/0,后期优化。 - 规则3:允许TCP协议的
3306端口(MySQL),但来源强烈建议只填你自己的办公网络IP,千万不要对全网开放,数据库暴露在公网是极其危险的。 - 规则4:允许TCP协议的
22端口(SSH),来源同样建议限制为自己的IP。
然后是服务器本身的防火墙。如果你用了宝塔面板,这一步就简单多了。在宝塔面板的“安全”页面,直接添加端口规则,把上面提到的80、443、8080、22端口放行即可。宝塔会自动帮你操作底层的firewalld或iptables。
如果你更喜欢命令行,CentOS 7默认使用firewalld,可以这样操作:
# 放行80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 放行8080端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 放行22端口(通常默认是开的)
firewall-cmd --zone=public --add-port=22/tcp --permanent
# 重载防火墙使配置生效
firewall-cmd --reload
# 查看所有已开放的端口
firewall-cmd --zone=public --list-ports
特别注意:3306(MySQL)和6379(Redis)端口,我强烈不建议在防火墙和云安全组里对公网开放。数据库服务应该只允许本地(127.0.0.1)或内网访问。这是安全部署的黄金法则。通过这套组合拳,你就为服务器设置了安全的访问通道,该开的门开了,不该开的门牢牢锁住。
3. 获取与准备项目:把“图纸”和“材料”拿到手
环境好了,门也开了,接下来就是把若依这个项目的“源代码”拿到我们的服务器上。若依是一个非常优秀的开源权限管理系统,代码托管在Gitee上。有两种主要方式获取代码:直接下载ZIP包和使用Git克隆。对于部署来说,两种方式都可以,但如果你以后考虑更新,用Git会方便些。
方法一:直接下载(适合新手)
- 访问若依的Gitee仓库:
https://gitee.com/y_project/RuoYi。 - 点击绿色的“克隆/下载”按钮,选择“下载ZIP”。
- 将下载的ZIP包,通过宝塔面板的文件上传功能(或者用FinalShell的SFTP拖拽),上传到服务器的一个目录里,比如
/home/projects/。 - 在宝塔文件管理器中,找到这个ZIP包,右键解压。
方法二:Git克隆(推荐)
如果你的服务器还没有安装Git,可以先安装:yum install -y git。
然后,在你想要存放项目的目录,比如 /home/projects/,执行:
cd /home/projects/
git clone https://gitee.com/y_project/RuoYi.git
这样就会克隆下来整个项目。项目结构非常清晰:
ruoyi-ui/:这个文件夹里面就是整个前端Vue项目。这是我们前端部署的核心。- 其他所有文件和文件夹(
ruoyi-admin/,ruoyi-common/等):这些构成了后端Java项目。
我们需要把前后端分开处理。前端需要打包成静态文件,后端需要打包成可执行的JAR包。在开始打包前,有个关键步骤:修改后端配置文件,告诉后端你的数据库和Redis在哪里。配置文件在 /home/projects/RuoYi/ruoyi-admin/src/main/resources/ 目录下。
- 修改
application-druid.yml:这里配置数据库连接。找到datasource部分,将url中的localhost改为你服务器的内网IP(如果是本机MySQL,也可以是127.0.0.1),username和password改为你安装MySQL时设置的。url: jdbc:mysql://127.0.0.1:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 你的MySQL密码 - 修改
application.yml:找到redis配置部分,同样,host改为127.0.0.1,password填你安装Redis时设置的密码(如果没设密码就留空,但生产环境务必设密码)。host: 127.0.0.1 port: 6379 password: 你的Redis密码
这些配置改好了,后端服务启动时才能正确连接到数据库和缓存。
4. 后端部署:让Java服务跑起来
后端部署的核心,就是把我们刚才修改好的Java源代码,打包成一个独立的、可执行的jar文件,然后像启动一个守护进程一样让它一直在服务器后台运行。
第一步:打包项目 我们需要Maven来打包。服务器上可能没有Maven,用宝塔的“Java项目管理器”插件可以很方便地安装。安装好后,在插件页面,点击“添加项目”。
- 项目路径:选择我们后端项目的根目录,即
/home/projects/RuoYi(注意,不是ruoyi-admin,是它的上级目录)。 - 项目类型:选择“Maven项目”。
- JDK版本:选择我们之前安装的JDK 1.8。
- 在“启动方式”这里,关键来了:我们选择“生成jar包”。宝塔会帮我们执行
mvn clean package -DskipTests命令(跳过测试,打包更快)。 点击“保存并生成jar包”。这个过程可能会下载很多依赖,需要几分钟,耐心等待。成功后,你会在项目的/ruoyi-admin/target/目录下找到ruoyi-admin.jar这个文件。这就是我们的“成品”。
第二步:准备数据库
在运行Jar包之前,数据库里需要有若依系统所需的表和数据。用宝塔的“数据库”工具,创建一个新的数据库,比如命名为 ry(和配置文件中一致),编码选utf8mb4。
然后,我们需要导入初始SQL。SQL文件就在项目里:/home/projects/RuoYi/sql/ 目录下。通常有两个文件:ry_2023xxxx.sql(表结构)和 quartz.sql(定时任务相关)。在宝塔的数据库管理界面(phpMyAdmin),选择刚创建的ry数据库,点击“导入”,分别上传并执行这两个SQL文件。
第三步:启动后端服务 现在万事俱备。我们回到“Java项目管理器”,这次不是添加,而是“部署项目”。
- 选择我们刚才生成的
ruoyi-admin.jar文件。 - 项目名称:填个易识别的,比如“RuoYi-Backend”。
- 运行端口:填
8080(和之前防火墙开放的端口一致)。 - 其他参数可以默认。
点击“启动”。宝塔会帮我们用
nohup java -jar ... &的方式在后台启动服务。你可以在“项目日志”里查看启动过程,如果没有报错,最后看到“Started RuoYiApplication in x seconds”之类的字样,就说明后端启动成功了! 你可以马上测试一下:在浏览器访问http://你的服务器IP:8080。如果能看到若依的后端API文档页面(比如Swagger界面)或者简单的登录页面,说明后端服务已经正常对外提供接口了。
5. 前端部署与Nginx配置:让用户看到漂亮的界面
前端项目是Vue写的,我们不能直接扔Vue源代码到服务器,需要先把它“编译”成浏览器能直接识别的HTML、CSS、JS文件。这个编译过程就叫“打包”。
第一步:打包前端项目 进入前端项目目录:
cd /home/projects/RuoYi/ruoyi-ui
安装依赖(这个过程需要从网络下载包,时间取决于服务器带宽):
npm install --registry=https://registry.npmmirror.com
我在这里加了个国内镜像地址 registry.npmmirror.com,速度会快很多。安装完成后,执行打包命令:
npm run build:prod
这个命令会执行生产环境打包。打包完成后,会在当前目录下生成一个 dist 文件夹。这个文件夹里的所有内容,就是我们要部署的静态网站文件。
第二步:配置Nginx——最关键的一步
Nginx在这里扮演两个角色:1. Web服务器,托管我们刚打包好的前端静态文件;2. 反向代理服务器,把前端发来的API请求,转发到我们刚刚启动的后端服务(8080端口)。
用宝塔面板配置Nginx非常简单。进入宝塔的“网站”页面,点击“添加站点”。
- 域名:如果你有域名,就填域名;如果暂时没有,就填你的服务器公网IP。
- 根目录:选择一个目录来存放前端文件。我习惯放在
/www/wwwroot/ruoyi。创建站点后,把刚才打包好的dist文件夹里的所有内容(注意是内容,不是dist文件夹本身),上传到这个根目录。 - PHP版本:选择“纯静态”即可。
站点创建好后,点击站点设置,进入“配置文件”修改。我们需要添加反向代理的配置。在server块内,找到location /部分,它默认是处理静态文件的,我们保持不动。我们需要在它后面添加一个处理API请求的location:
server {
listen 80;
server_name 你的服务器IP或域名;
root /www/wwwroot/ruoyi; # 你的前端文件根目录
index index.html index.htm;
# 前端静态资源服务
location / {
try_files $uri $uri/ /index.html;
}
# 关键:代理后端API请求
location /prod-api/ {
proxy_pass http://127.0.0.1:8080/;
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;
# 如果后端服务有设置上下文路径,可能需要重写路径,若依默认不需要
# proxy_set_header X-Forwarded-Prefix /prod-api;
}
# 其他配置...
}
这里解释一下:当前端代码中请求 /prod-api/user/login 这样的接口时,Nginx会拦截到 /prod-api/ 开头的请求,然后悄悄地转发给 http://127.0.0.1:8080/,也就是我们运行的后端服务。对于后端来说,它收到的请求就是 /user/login。这样就完美解决了前后端分离部署带来的跨域问题,因为对于浏览器而言,所有请求都是发给同一个域名和端口(80端口)的。
修改完配置,保存,并重启Nginx服务(宝塔面板上点一下重启就行)。
6. 验收与排错:见证成果的时刻
现在,打开浏览器,直接访问你的服务器IP地址(http://xxx.xxx.xxx.xxx)。你应该能看到若依系统的登录页面了!输入默认账号 admin,密码 admin123,尝试登录。如果成功进入系统主界面,那么恭喜你,一个完整的前后端分离项目已经成功部署上线了!
但事情并非总是一帆风顺。如果页面打不开或者登录失败,别慌,我们按顺序排查:
- 前端页面无法加载(白屏或404):
- 检查Nginx配置的
root目录路径是否正确,index.html文件是否存在。 - 在浏览器按F12打开开发者工具,看“网络”(Network)标签页,静态文件(.js, .css)是否都返回200状态码。如果是404,说明路径不对。
- 检查服务器
80端口是否在安全组和防火墙中已放行。
- 检查Nginx配置的
- 登录时一直提示“验证码错误”或“网络错误”:
- 这几乎肯定是前端请求没有正确代理到后端。打开浏览器F12的“网络”标签,看登录请求的URL。它应该是
http://你的IP/prod-api/login。如果目标地址不对,说明前端配置或Nginx代理配置有误。 - 检查Nginx错误日志:宝塔面板上,点开对应站点的“日志”,看“错误日志”,里面会有详细的代理失败信息。
- 直接测试后端接口:访问
http://你的IP:8080看后端服务是否存活。如果连不上,可能是后端Jar包没启动,或者8080端口未开放。
- 这几乎肯定是前端请求没有正确代理到后端。打开浏览器F12的“网络”标签,看登录请求的URL。它应该是
- 后端启动失败:
- 查看Java项目日志:在宝塔“Java项目管理器”里查看项目日志。最常见的问题是数据库连接失败(检查
application-druid.yml中的IP、端口、用户名密码)和Redis连接失败(检查application.yml中的Redis密码)。 - 检查端口占用:有时候
8080端口可能被其他程序占用。可以用命令netstat -tlnp | grep 8080查看。
- 查看Java项目日志:在宝塔“Java项目管理器”里查看项目日志。最常见的问题是数据库连接失败(检查
部署完成并稳定运行后,可以考虑一些优化措施,比如:
- 配置域名和HTTPS:在宝塔的“网站”设置中,可以轻松为站点绑定域名,并一键申请免费的Let‘s Encrypt SSL证书,实现
https访问。 - 进程守护:虽然我们用
nohup或宝塔启动了Jar包,但为了更稳定,可以使用systemd或者宝塔自带的“Supervisor管理器”来守护后端Java进程,实现崩溃后自动重启。 - 静态资源优化:在Nginx配置中为图片、CSS、JS文件设置浏览器缓存,加快用户再次访问的速度。
整个流程走下来,你会发现部署一个项目就像搭积木,每一步都有明确的目的。最开始的充分准备(环境、端口)为后面铺平了道路。记住这个流程和每个环节的作用,以后无论部署什么Java+Vue的分离项目,你都能触类旁通。我在实际运维中,会把所有修改过的配置文件(如Nginx配置、application.yml)备份到笔记里,下次换服务器时,效率能提升好几倍。

822

被折叠的 条评论
为什么被折叠?



