RuoYi-Cloud部署记录

2021-03-28 5384点热度 9人点赞 0条评论

RuoYi-Cloud介绍

RuoYi-Cloud 是一个 Java EE 分布式微服务架构平台,基于经典技术组合(Spring Boot、Spring Cloud & Alibaba、Vue、Element),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源。官方文档地址:https://doc.ruoyi.vip/ruoyi-cloud/

fork源码并下载

由于需要使用自己的mysql、redis和nacos,因此需要修改相关配置,fork一份源码方便提交自己的更改
源码地址https://gitee.com/y_project/RuoYi-Cloud
fork后的地址https://gitee.com/wangxianfeng/RuoYi-Cloud ,如果不想让别人看到自己的更新,可以首先把仓库修改为私有的。
下载源码:

git clone https://gitee.com/wangxianfeng/RuoYi-Cloud.git

部署环境介绍

  1. 家里有一台DSM,上面运行mysql,redis,nacos,ruoyi-cloud后台服务(auth,system,gateway,job,gen,monitor,sentinel等)
  2. 公网有一台阿里云服务器(ECS),域名已备案,二级域名任意用,上面部署frp,可以实现内网服务穿透到公网,上面部署ruoyi-ui,并用frp穿透gateway,file,为ruoyi-ui提供后台服务。
  3. DSM和ESC分别配置好java和maven,java版本为1.8,maven版本为3.6.*

ECS上安装mysql,redis

由于需要在家里和工作的地方访问mysql和redis,因此把mysql和redis安装在ECS上,安装方法见http://www.wangxianfeng.cn/2018/07/27/ecs%e4%b8%8adocker%e8%bf%90%e8%a1%8cmysql%ef%bc%8cphpmyadmin%ef%bc%8credis/
为了避免不兼容,选择mysql版本为5.7,redis就使用最新版本,我使用的是6.0.9版本
mysql 5.7版本docker安装命令如下:

docker run --name mysql57 -p 3309:3306 -v /root/mysqldata/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /root/mysqldata/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=test -d -e TZ=Asia/Shanghai mysql:5.7

部署RuoYi-Cloud

导入数据库初始化脚本

首先数据库中创建2个数据库用户:
1. ry-cloud:保存RuoYi-Cloud基本数据表,RuoYi-Cloud需要连接这个数据库,脚本路径:ruoyi-cloud/sql/ry_20210210.sql
2. ry-config:nacos配置表,nacos需要连接这个数据库,脚本路径:ruoyi-cloud/sql/ry_config_20210228.sql
3. quartz.sql对应作业任务相关表,也是导入到ry-cloud数据库中
4. ry_seata_20210128.sql暂时未导入,相关功能还未部署。

DSM上部署nacos

安装nacos

从github上下载nacos最新版,下载地址https://github.com/alibaba/nacos/releases 我部署的时候最新版本为2.0.0版本,因此下载地址是https://github.com/alibaba/nacos/releases/download/2.0.0/nacos-server-2.0.0.tar.gz
下载之后解压得到nacos目录

tar xzvf nacos-server-2.0.0.tar.gz

修改配置文件让nacos使用mysql数据库:

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://db.aiuyo.com:3309/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=xianfengmc

其他暂未修改,使用如下命令启动单机版本nacos服务器:

cd nacos/bin
./startup.sh -m standalone

如此,在机器的8848端口上启动了nacos服务,浏览地址为:

http://192.168.2.8:8848/nacos

默认用户名和密码为:nacos/nacos,进入页面之后可以修改默认密码。

修改nacos中配置文件中的mysql url路径及用户名密码

RuoYi-Cloud默认连接的mysql url是127.0.0.1:3306,需要修改为自己的数据库的url,如果用户名和密码不对,也需要修改(如ruoyi-auth-dev.yml):

其他同样需要修改的配置文件有,可以在数据库中直接使用update语句,直接修改,修改密码类似,注意先查询后修改,别修改错了:

SELECT *
FROM `config_info` c
WHERE c.content LIKE '%127.0.0.1:3306%'

UPDATE `config_info` c
SET c.`content` =
REPLACE(c.`content`,'127.0.0.1:3306','db.aiuyo.com:3309')
WHERE c.content LIKE '%127.0.0.1:3306%'

数据库配置修改完成之后就可以启动RuoYi-Cloud了

DSM上部署RuoYi-Cloud后台服务

RuoYi-Cloud后台服务必不可少的3个模块包含:
1. ruoyi-auth:负责认证的模块
2. ruoyi-modules\ruoyi-system:系统必须api
3. ruoyi-gateway:网关,所有请求通过网关统一发送和响应

下面先启动这3个组件:
首先使用maven编译所有模块:

cd ruoyi-cloud/
mvn install

编译完成之后,在各自模块的的target目录下会存放各自的可以直接运行的jar,如:

ruoyi-auth/target/ruoyi-auth.jar

在ruoyi-cloud/bin目录下提供了windows下的运行脚本,暂未提供linux下的启动脚本,因此编写几个组件的linux启动脚本:

auth_start.sh

echo 'starting auth'

cd ../ruoyi-auth/target

JAVA_OPTS="-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m"

nohup java -Dfile.encoding=utf-8 -jar $JAVA_OPTS ruoyi-auth.jar >> /var/services/homes/wangxianfeng/work/ruoyi-cloud/logs/auth.log 2>&1 &

echo 'started auth,see log /var/services/homes/wangxianfeng/work/ruoyi-cloud/logs/auth.log'

system_start.sh

echo 'starting module system'

cd ../ruoyi-modules/ruoyi-system/target

JAVA_OPTS="-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m"

nohup java -Dfile.encoding=utf-8 -jar $JAVA_OPTS ruoyi-modules-system.jar >> /var/services/homes/wangxianfeng/work/ruoyi-cloud/logs/system.log 2>&1 &

echo 'started module system,see log /var/services/homes/wangxianfeng/work/ruoyi-cloud/logs/system.log'

gateway_start.sh

echo 'starting gateway'

cd ../ruoyi-gateway/target

JAVA_OPTS="-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m"

nohup java -Dfile.encoding=utf-8 -jar $JAVA_OPTS ruoyi-gateway.jar >> /var/services/homes/wangxianfeng/work/ruoyi-cloud/logs/gateway.log 2>&1 &

echo 'started gateway,see log /var/services/homes/wangxianfeng/work/ruoyi-cloud/logs/gateway.log'

赋予脚本运行权限之后,直接运行3个脚本即可启动3个模块,遇到错误可以到logs目录下查看对应报错日志。

ECS部署ruoyi-ui

ruoyi-ui基于vue开发,需要安装nodejs运行环境。

安装node和npm

首先ECS上安装node和npm,安装完成之后无需做其他操作,只需验证是否安装成功即可:

[root@aiuyo ~]# node -v
v15.3.0
[root@aiuyo ~]# npm -v
7.0.14

安装yarn

npm install -g yarn

使用如下命令运行测试版本ruoyi-ui

cd ruoyi-ui
yarn run dev

但是在ECS上不适合运行dev版本,因此在ECS上部署prod版本

安装ruoyi-ui prod版本

使用如下命令build prod版本

yarn run build:prod

完成之后在dist目录产生可以直接部署到生产环境文件,为了不每次build的时候赋值文件,稍后将把nginx的目录直接指向到dist目录

配置nginx

在nginx的conf目录的nginx.conf中,在http配置中添加以下配置,把ruoyi-ui相关配置独立出来:

http{
  ……
  include /root/nginx/conf/conf.d/*.conf;
}

其中conf.d包含如下配置文件:default.conf和ry.conf,ry.conf内容如下:

server {
    listen       8066;
    server_name  start.aiuyo.com;

    access_log  logs/ry.log  main;

    location / {
        root html/dist;
                index index.html;
                try_files $uri $uri/ @router; # 需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
    }

        location @router {
                rewrite ^.*$ /index.html last;
        }

        location /prod-api/ {
               proxy_pass http://rygate.aiuyo.com/;
               #下边是为获取真实IP所做的设置
               proxy_set_header    X-Real-IP        $remote_addr;
               proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
               proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
               proxy_set_header    X-Forwarded-Proto $scheme;
               proxy_redirect      default;
        }
}

然后在nginx/html目录下创建软链接,链接到ruoyi-cloud的ruoyi-ui/dist目录:

cd nginx/html
ln -s ~/ruoyi-cloud/ruoyi-ui/dist dist

gateway配置

注意到上面的nginx中有/prod-api/相关配置,由于ruoyi-ui prod版本默认URL前缀为/prod-api/,因此我们需要配置/prod-api/指向gateway

首先把利用frp把gateway穿透到http://rygate.aiuyo.com/ 地址,即访问http://rygate.aiuyo.com/ 就相当于访问gateway,frpc配置如下:

[rygate]
type=http
custom_domains=rygate.aiuyo.com
local_ip=192.168.2.8
local_port=8080
use_encryption=true
use_compression=true

nginx中ry.conf中添加/prod-api/反向代理:

location /prod-api/ {
    proxy_pass http://rygate.aiuyo.com/;
}

即访问/prod-api/的请求,全部转发到网关上。

这样基本的ruoyi-cloud就部署完成了,但是由于访问ruoyi-ui还需要加端口,因此还需要再次frp一下,使用二级域名,不再加端口,ECS上添加frpc,配置如下:

[ruoyi]
type=http
custom_domains=start.aiuyo.com
local_ip=127.0.0.1
local_port=8066
use_encryption=true
use_compression=true

如此,访问start.aiuyo.com即可访问ruoyi-ui页面,后端gateway也可以正常工作。

配置ruoyi-file

由于在公网上无法访问内容的ruoyi-file,因此头像文件无法加载,因此首先启动ruoyi-file模块:
ruoyi-cloud/bin/file_start.sh

echo 'starting module file'

cd ../ruoyi-modules/ruoyi-file/target

JAVA_OPTS="-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m"

nohup java -Dfile.encoding=utf-8 -jar $JAVA_OPTS ruoyi-modules-file.jar >> /var/services/homes/wangxianfeng/work/ruoyi-cloud/logs/file.log 2>&1 &

echo 'started module file,see log /var/services/homes/wangxianfeng/work/ruoyi-cloud/logs/file.log'

启动完成之后,需要把内网服务穿透到公网:

[ruoyifile]
type=http
custom_domains=ruoyifile.aiuyo.com
local_ip=192.168.2.8
local_port=9300
use_encryption=true
use_compression=true

访问http://ruoyifile.aiuyo.com 即可访问ruoyi-file,还需要修改nacos中的ruoyi-file-dev.yml中的文件上传相关配置才能正确上传文件:

# 本地文件上传    
file:
    domain: http://ruoyifile.aiuyo.com
    path: /var/services/homes/wangxianfeng/data/ruoyi/upload
    prefix: /statics

domain即为访问ruoyi-file的ip和端口,path即为上传文件路径。如其中一个头像的访问路径为:
http://ruoyifile.aiuyo.com/statics/2021/03/28/472fafa5-0043-4805-adfa-65eab3826ffe.jpeg

王显锋

激情工作,快乐生活!

文章评论