从零开始:Linux云服务器部署若依前后端分离项目实战指南

1. 环境准备:别急着动手,先把“地基”打好

很多新手朋友一上来就急着敲命令,结果卡在环境问题上半天,心态直接崩了。我刚开始那会儿也这样,总觉得环境配置是小事,结果在部署若依项目时,光是一个JDK版本不对就折腾了我一晚上。所以,咱们第一步,必须把“地基”打牢。这个地基,就是你的Linux云服务器和上面要跑的各种软件环境。

首先,你得有一台云服务器。现在阿里云、腾讯云这些大厂,新用户都有很划算的体验套餐,选个CentOS 7.x 或者 Ubuntu 20.04 LTS 这类主流且文档丰富的系统就行。我个人更习惯用CentOS 7,因为很多老教程都基于它,遇到问题搜解决方案更容易。买完服务器,记下它的公网IP地址root密码(或者SSH密钥),这是你进自家“工地”的大门钥匙。

接下来,你需要一个顺手的“遥控器”来操作这台远在数据中心的服务器。XshellFinalShell、或者Mac/Linux用户直接用终端SSH命令都行。我用FinalShell比较多,因为它集成了SFTP文件传输,传文件特别方便,不用再开一个FTP工具了。连接命令很简单:ssh root@你的服务器IP,然后输入密码,看到命令行提示符,恭喜,你已经站在服务器里面了。

现在,开始往服务器里搬“建材”。若依这个前后端分离项目,后端是Java写的,前端是Vue,所以我们需要:JDKMySQLRedisNginx,还有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回车。安装完成后,命令行最后会显示面板的登录地址、用户名和密码,一定要把这些信息存好。然后,你就在浏览器里输入那个地址,用给的账号密码登录进去。

进入宝塔面板后,在“软件商店”里,像逛超市一样,把我们需要的东西一键安装上:

  1. Nginx:选个稳定版,比如1.22。
  2. MySQL:选5.7版本,这是若依官方文档推荐的,兼容性最好。安装时会让你设置root密码,这个密码也要记牢。
  3. Redis:同样一键安装,默认端口6379。
  4. 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 -vnpm -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。

然后是服务器本身的防火墙。如果你用了宝塔面板,这一步就简单多了。在宝塔面板的“安全”页面,直接添加端口规则,把上面提到的80443808022端口放行即可。宝塔会自动帮你操作底层的firewalldiptables

如果你更喜欢命令行,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会方便些。

方法一:直接下载(适合新手)

  1. 访问若依的Gitee仓库:https://gitee.com/y_project/RuoYi
  2. 点击绿色的“克隆/下载”按钮,选择“下载ZIP”。
  3. 将下载的ZIP包,通过宝塔面板的文件上传功能(或者用FinalShell的SFTP拖拽),上传到服务器的一个目录里,比如 /home/projects/
  4. 在宝塔文件管理器中,找到这个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/ 目录下。

  1. 修改 application-druid.yml:这里配置数据库连接。找到datasource部分,将url中的localhost改为你服务器的内网IP(如果是本机MySQL,也可以是127.0.0.1),usernamepassword改为你安装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密码
    
  2. 修改 application.yml:找到redis配置部分,同样,host改为127.0.0.1password填你安装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,尝试登录。如果成功进入系统主界面,那么恭喜你,一个完整的前后端分离项目已经成功部署上线了!

但事情并非总是一帆风顺。如果页面打不开或者登录失败,别慌,我们按顺序排查:

  1. 前端页面无法加载(白屏或404)
    • 检查Nginx配置的root目录路径是否正确,index.html文件是否存在。
    • 在浏览器按F12打开开发者工具,看“网络”(Network)标签页,静态文件(.js, .css)是否都返回200状态码。如果是404,说明路径不对。
    • 检查服务器80端口是否在安全组和防火墙中已放行。
  2. 登录时一直提示“验证码错误”或“网络错误”
    • 这几乎肯定是前端请求没有正确代理到后端。打开浏览器F12的“网络”标签,看登录请求的URL。它应该是 http://你的IP/prod-api/login。如果目标地址不对,说明前端配置或Nginx代理配置有误。
    • 检查Nginx错误日志:宝塔面板上,点开对应站点的“日志”,看“错误日志”,里面会有详细的代理失败信息。
    • 直接测试后端接口:访问 http://你的IP:8080 看后端服务是否存活。如果连不上,可能是后端Jar包没启动,或者8080端口未开放。
  3. 后端启动失败
    • 查看Java项目日志:在宝塔“Java项目管理器”里查看项目日志。最常见的问题是数据库连接失败(检查application-druid.yml中的IP、端口、用户名密码)和Redis连接失败(检查application.yml中的Redis密码)。
    • 检查端口占用:有时候8080端口可能被其他程序占用。可以用命令 netstat -tlnp | grep 8080 查看。

部署完成并稳定运行后,可以考虑一些优化措施,比如:

  • 配置域名和HTTPS:在宝塔的“网站”设置中,可以轻松为站点绑定域名,并一键申请免费的Let‘s Encrypt SSL证书,实现https访问。
  • 进程守护:虽然我们用nohup或宝塔启动了Jar包,但为了更稳定,可以使用systemd或者宝塔自带的“Supervisor管理器”来守护后端Java进程,实现崩溃后自动重启。
  • 静态资源优化:在Nginx配置中为图片、CSS、JS文件设置浏览器缓存,加快用户再次访问的速度。

整个流程走下来,你会发现部署一个项目就像搭积木,每一步都有明确的目的。最开始的充分准备(环境、端口)为后面铺平了道路。记住这个流程和每个环节的作用,以后无论部署什么Java+Vue的分离项目,你都能触类旁通。我在实际运维中,会把所有修改过的配置文件(如Nginx配置、application.yml)备份到笔记里,下次换服务器时,效率能提升好几倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值