Ruoyi项目后端部署

部署前规划

主机IP角色操作系统软件版本硬件配置
192.168.146.133build构建机Rocky Linux 9.6maven:3.9.11,jdk1.8.202,nodejs:16.20.24核8G
192.168.146.130:3306mysql数据库Rocky Linux 9.6mysql 8.0.441核2G
192.168.146.134:80nginx服务器Rocky Linux 9.6nginx 1.20.11核2G
192.168.146.135:6379Redis数据库Rocky Linux 9.6redis 6.2.141核2G
192.168.146.136:48080Java后端Rocky Linux 9.6JDK 1.8.2021核2G

整体流程说明

  1. 构建机git clone后端源码
  2. 安装mysql,并创建数据库
  3. 安装redis
  4. 编译源码,形成jar包
  5. 构建前端代码
  6. 将jar包传到java后端服务器,构建好的前端代码传输到nginx服务器
  7. 编写nginx配置文件
  8. 运行jar包,浏览器访问

详细说明

在做之前确保各个服务器之间的端口能互相通信,使用telnet ip port进行测试

构建机git clone后端源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
git clone https://gitee.com/zhijiantianya/ruoyi-vue-pro.git
#安装jdk和maven
wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
tar xvzf jdk-8u202-linux-x64.tar.gz -C /opt

wget https://dlcdn.apache.org/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gz
tar xvzf apache-maven-3.9.11-bin.tar.gz -C /opt
#配置jdk和maven的环境变量,这样可以在任何地方运行java和mvn命令
vim /etc/profile
#jdk env var
export JAVA_HOME=/opt/jdk1.8.0_202
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
#maven env var
export MAVEN_HOME=/opt/apache-maven-3.9.10
export PATH=$PATH$MAVEN_HOME/bin

source /etc/profile
  • 修改配置文件,/var/www/ruoyi-vue-pro/yudao-server/src/main/resources/application-local.yaml,修改里面的jdbc中mysql的IP和数据库名,用户名和密码,以及下面redis的IP和密码

  • 编译打包源码,形成jar包,jar包的路径在源码下yudao-server/target/yudao-server.jar

  • 现在构建机上运行jar包测试,看数据库连接有没有问题,java -jar ruoyi-vue-pro/yudao-server/target/yudao-server.jar。如果没有报错就可以了

  • 这样就可以scp到java后端上了

安装mysql,并创建数据库

  • 直接编写脚本进行安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #!/bin/bash
    dnf install -y vim bash-completion
    if [ $? eq 0 ];then
    echo 'bash-completion安装完成'
    fi

    rpm -ivh https://repo.mysql.com//mysql84-community-release-el9-2.noarch.rpm


    yum makecache

    yum install -y mysql-community-server

    systemctl enable --now mysqld

    systemctl status mysqld
    sleep 5

    PASSWD=$(grep localhost /var/log/mysqld.log | awk '{print $13}')

    echo $PASSWD

    if [ -f /etc/my.cnf-bak ];then
    sleep 5
    echo '/etc/my.cnf-bak已存在'
    else
    cp /etc/my.cnf{,-bak}
    cat >> /etc/my.cnf << EOF
    validate_password.length=4
    validate_password.policy=LOW
    EOF
    fi

    systemctl restart mysqld
    mysql -uroot -p"${PASSWD}" -e "set password='123456';" --connect-expired-password

    mysql -uroot -p123456 -e "show databases;"

  • 在我实际操作过程中,mysql的后端server代码没有写,导致没装后端,启动不起来,然后又执行了其他代码,这让我光处理mysql服务就处理了半天
    在我手动安装了mysqld server服务后,尝试启动,启动不了,说我配置文件有错,/etc/my.cnf,通过查询,知道该文件要[mysqld]打头然后指定datadir到mysql路径/var/lib/mysql
    解决了配置文件报错的问题后,还是启动不了,搜过过后,说我没初始化,然后我使用‘musql –initialize –user=mysql’进行初始化,没成功,要删除rm -rf /var/lib/mysql/*
    然后再次初始化成功了,然后启动,登录,可能是脚本有把mysql密码改了,试了半天的临时密码登不进去,用123456就进去了

  • 开通访问权限。我在构建机上telnet数据库的3306端口被拒绝,原因是mysql的默认禁止远程访问。我解决的方式是创建所有主机访问权限

1
2
3
create user 'root'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;

后续看到了其他方法,在my.cnf配置文件内进行开启所有主机访问

1
2
bind-address = 0.0.0.0  # 允许所有外部IP,或指定具体IP(如192.168.1.100)
skip-networking = 0 # 确保关闭“禁用网络连接”(8.x默认关闭,防止误开启)
  • 实际生产环境中建议制定数据库和更改用户名

安装redis

  • 编写脚本安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/bash
yum_gcc(){
dnf install -y gcc
}

get_redis(){
# wget https://github.com/redis/redis/archive/refs/tags/6.2.14.tar.gz -O ~/6.2.14.tar.gz

if [ -e ~/redis-6.2.14.tar.gz -a $? -eq 0 ];then
tar -xvzf ~/redis-6.2.14.tar.gz -C ~/
else
echo '文件不存在'
fi

}
#03编译安装
make_redis(){
cd ~/redis-6.2.14
make install
if [ $? -eq 0 ];then
echo "Redis 安装成功"
else
echo "Redis 安装失败"
fi
}
conf_redis(){
cp ~/redis-6.2.14/redis.conf /etc/redis.conf

sed -i '/^bind/s/#/' /etc/redis.conf # bind 0.0.0.0,所有主机可访问

sed -i '/^protected/s/yes/no/' /etc/redis.conf

sed -i '/^daemon/s/no/yes/' /etc/redis.conf

sed -i '/^# requirepass/s/# //;s/foobared/lechaoju/' /etc/redis.conf # 修改默认密码为lechaoju
}
start_redis(){
redis-server /etc/redis.conf
ps aux | grep redis
}

main(){
yum_gcc
get_redis
make_redis
conf_redis
start_redis
}

main

编译源码,形成jar包

  • 在构建机上的项目根目录下执行编译jar包
    mvn clean install package '-Dmaven.test.skip'=true
  • jar包测试, 看有没有报错,没报错就代表数据什么的都没问题
    java -jar ruoyi-vue-pro/yudao-server/target/yudao-server.jar
  • 可以scp到java后端服务器上了

构建前端代码

前端代码之前有部署过,但因为这次是各个服务分离,所以需要更改前端配置文件,让他知道后端在那,需要改三个配置文件,都在前端根目录下

  1. vite.config.ts 将里面的一个true改为false
  2. .env.local和.env.prod , 将访问地址的localhost改为后端java地址,192.168.146.136
  3. 然后构建一下,将dist-prod目录传到nginx服务器

编写nginx配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server{
listen 80;
server_name _;
charset utf-8;

location / {
root /var/www/ruoyi-ui/dist-prod;
index index.html index.hml;
}

location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.146.136:48080/;
}
}

运行jar包,浏览器访问

在java服务器上运行jar包,java -jar yudao-server.jar

localhost,私网,公网之间的关系

  • localhost是本地回环口地址,127.0.0.1,只用来本机测试,无法与私网,公网连接
  • 私网是主机本身的局域网,在ecs中属于一个vpc组,同一个vpc的私网可以通信
  • 公网是大家都可以访问
  • 正常情况下,只要浏览器输入的公网,服务器上配置的ip是私网还是公网,都可以访问,配置私网的时候,访问公网会通过NAT将流量传到私网