25_05_19Linux实战篇、第一章_01若依前后端部署之路(后端)
Linux_实战篇
欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神!
题目:若依前后端动静分离(后端 )
版本号: 1.0,0
作者: @老王要学习
日期: 2025.05.20
适用环境: Rocky9.5
文档说明
本文围绕 Linux 实战展开,涵盖环境准备、软件安装部署及若依项目配置等内容。介绍硬件与软件要求,阐述关闭防火墙、修改 IP 等操作。详细讲解 MySQL、Redis 等安装,以及若依前后端部署步骤,为在 Linux 环境开展项目提供指导
环境准备
硬件要求
- 服务器: 2核CPU、4GB内存,20GB硬盘空间
- 网络: 确保服务器具有固定的IP地址,并且防火墙允许FTP端口(默认22端口)的通信
软件要求
- 操作系统:Rocky9.5
- FTP软件:SecureCRT
- 软件包1:apache-maven-3.8.8
- 软件包2:apache-tomcat-9.0.105
- 软件包3:jdk-8u131-linux-x64
- 软件包4:mysql-8.0.42-linux-glibc2.17-x86_64-minimal
- 软件包5:nginx-1.28.0
- 软件包6:node-v22.15.1-linux-x64
- 软件包7:redis-6.0.6
零、环境准备
0.1环境介绍
服务器环境 | IP地址 | 软件部署 |
---|---|---|
web前端 2G | 192.168.174.5 | NGINX |
java后端 2G | 192.168.174.6 | Tomcat9 jdk1.8 |
动态缓存 4G | 192.168.174.10 | Redis6.0.6 |
数据存储 4G | 192.168.174.10 | MySQL8.0.42 |
项目管理 2G | 192.168.174.100 | Maven jdk1.8 node-v22 |
0.2关闭防火墙
systemctl stop firewalld && systemctl disable firewalldsed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/configreboot
0.3修改网卡IP
# NGINX
nmcli connection modify ens160 ipv4.addresses 192.168.174.5/24
nmcli connection up ens160# Tomcat
nmcli connection modify ens160 ipv4.addresses 192.168.174.6/24
nmcli connection up ens160# db
nmcli connection modify ens160 ipv4.addresses 192.168.174.10/24
nmcli connection up ens160# maven
nmcli connection modify ens160 ipv4.addresses 192.168.174.100/24
nmcli connection up ens160
0.4修改主机名
# nginx_5
hostnamectl set-hostname nginx_5
bash# tomcat_6
hostnamectl set-hostname tomcat_6
bash# db_10
hostnamectl set-hostname db_10
bash# maven_100
hostnamectl set-hostname maven_100
bash
一、安装与部署
MySQL+Redis
1.1下载安装包
# 进入目录
cd /usr/local/src# mysql(174.10)
curl https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.42-linux-glibc2.17-x86_64-minimal.tar.xz# redis(174.10)
curl https://download.redis.io/releases/redis-6.0.6.tar.gz# jdk-8u451-linux-x64.tar.gz((174.6)我用的旧版本下不到了下载这个)
https://www.oracle.com/cn/java/technologies/downloads/#java8# tomcat9(174.6)
curl https://mirrors.aliyun.com/apache/tomcat/tomcat-9/v9.0.105/bin/apache-tomcat-9.0.105.tar.gz# NGINX1.28.0(174.5)
curl https://nginx.org/download/nginx-1.28.0.tar.gz# Maven3.8.8(174.100)
curl https://mirrors.aliyun.com/apache/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz# node-v22.15.1(174.100)
curl https://npmmirror.com/mirrors/node/v22.15.1/node-v22.15.1-linux-x64.tar.xz
1.2部署MySQL(174.10)
# 解压软件包
tar xf mysql-8.0.42-linux-glibc2.17-x86_64-minimal.tar.xz # 创建用户
useradd -r -s /bin/false -M mysql# 修改文件名称与位置
mv mysql-8.0.42-linux-glibc2.17-x86_64-minimal /usr/local/mysql# 创建data并赋权
mkdir /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql/# 写入配置文件
cat >/etc/my.cnf<<LW
[mysqld]
user=mysql
datadir=/usr/local/mysql/data
pid-file=/usr/local/mysql/data/mysqld.pid
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/mysql.err
LW# 初始化MySQL
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data# 写入启动脚本
cat >>/usr/lib/systemd/system/mysqld.service<<LW
[Unit]
Description=DB server daemon
After=network.target[Service]
Type=focking
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize
KillMode=process[Install]
WantedBy=multi-user.target
LW# 重载重启
systemctl daemon-reload
systemctl start mysqld# 查看端口状态
ss -anltp | grep mysqld
#启动服务输出如下:
LISTEN 0 151 *:3306 *:* users:(("mysqld",pid=1845,fd=24))
LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=1845,fd=21))# 写入环境变量
echo "export MYSQL_HOME=/usr/local/mysql" >> /etc/profileecho "export PATH=\$PATH:\$MYSQL_HOME/bin" >> /etc/profilesource /etc/profile# 安装依赖关系
dnf -y install epel-release
dnf -y makecache
dnf -y install ncurses-compat-libs-6.2-8.20210508.1.el9.x86_64 # 查看初始密码
grep password /usr/local/mysql/mysql.err
#输出如下:
2025-05-19T08:09:27.636039Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: y3DhTw;;ZRWW# 登录MySQL并修改密码
mysql -uroot -p
alter user root@localhost identified by '123';
1.3部署Redis(174.10)
# 进入目录解压软件包
cd /usr/local/src/
tar zxf redis-6.0.6.tar.gz
mkdir /usr/local/redis/{conf,bin,data,log} -p# 安装
cd /usr/local/src/redis-6.0.6/src
make# 拷贝文件
cp /usr/local/src/redis-6.0.6/src/redis* /usr/local/redis/bin/
cp /usr/local/src/redis-6.0.6/redis.conf /usr/local/redis/conf/# 删除如下文件
rm /usr/local/redis/bin/*.c *.d *.o *.h -f
ll /usr/local/redis/bin
#输出如下:
total 41768
-rwxr-xr-x 1 root root 4375864 May 19 16:46 redis-benchmark
-rwxr-xr-x 1 root root 8447592 May 19 16:46 redis-check-aof
-rwxr-xr-x 1 root root 8447592 May 19 16:46 redis-check-rdb
-rwxr-xr-x 1 root root 4583856 May 19 16:46 redis-cli
-rwxr-xr-x 1 root root 8447592 May 19 16:46 redis-sentinel
-rwxr-xr-x 1 root root 8447592 May 19 16:46 redis-server
-rwxr-xr-x 1 root root 3600 May 19 16:46 redis-trib.rb# 修改配置文件(vim ../conf/redis.conf)
sed -i 's|bind 127.0.0.1|bind 127.0.0.1 192.168.174.10|' ../conf/redis.confsed -i 's|daemonize no|daemonize yes|' ../conf/redis.confsed -i 's|pidfile /var/run/redis_6379.pid|pidfile /usr/local/redis/log/redis.pid|' ../conf/redis.confsed -i 's|logfile ""|logfile "/usr/local/redis/log/redis.log"|' ../conf/redis.confsed -i 's|dir \./|dir /usr/local/redis/data|' ../conf/redis.conf# 添加环境变量
sed -i 's|export PATH=$PATH:$MYSQL_HOME/bin|export REDIS_HOME=/usr/local/redis|' /etc/profileecho "export PATH=\$PATH:\$MYSQL_HOME/bin:\$REDIS_HOME/bin" >>/etc/profilesource /etc/profile# 启动Redis服务
redis-server /usr/local/redis/conf/redis.conf # 查看端口是否启动
ss -antpl | grep redis
#输出如下:
LISTEN 0 511 127.0.0.1:6379 0.0.0.0:* users:(("redis-server",pid=6559,fd=6))
LISTEN 0 511 192.168.174.10:6379 0.0.0.0:* users:(("redis-server",pid=6559,fd=7))# 初始状态检查
127.0.0.1:6379> keys *
#输出如下:
(empty array)# 成功设置和获取值
127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> get test
"123"# 关闭Redis服务
redis-cli SHUTDOWN# 写入Redis服务文件
cat >>/usr/lib/systemd/system/redis/service<<LW
[Unit]
Description=DB Cache server daemon
After=network.target[Service]
Type=focking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecStop=/usr/local/redis/bin/redis-cil shutdown
KillMode=process[Install]
WantedBy=multi-user.target
LW# 重载并启动
systemctl daemon-reload
systemctl start redis.service# 查看端口启动
ss -antpl | grep redis
#输出如下:
LISTEN 0 511 127.0.0.1:6379 0.0.0.0:* users:(("redis-server",pid=6691,fd=6))
LISTEN 0 511 192.168.174.10:6379 0.0.0.0:* users:(("redis-server",pid=6691,fd=7))# 设置开机自启
systemctl enable mysqld.service
systemctl enable redis.service
1.4部署jdk(174.6)
# 解压软件包
cd /usr/local/src/
tar zxf jdk-8u131-linux-x64.tar.gz
mv jdk1.8.0_131/ /usr/local/java# 写入环境变量
echo "export JAVA_HOME=/usr/local/java" >> /etc/profileecho "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profilesource /etc/profile# 已安装以下 Java 相关组件
rpm -qa |grep java
#输出如下:
javapackages-filesystem-6.0.0-7.el9_5.noarch
tzdata-java-2025a-1.el9.noarch
java-1.8.0-openjdk-headless-1.8.0.442.b06-2.el9.x86_64# 卸载现有 OpenJDK 8
dnf -y remove java-1.8.0-openjdk-headless-1:1.8.0.442.b06-2.el9.x86_64# 查看当前java版本
java -version
#输出如下:
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
1.5安装Tomcat9(174.6)
# 解压并修改文件目录
cd /usr/local/src
tar zxf apache-tomcat-9.0.105.tar.gz
mv apache-tomcat-9.0.105 /usr/local/tomcat# 修改环境变量
sed -i 's|export PATH=$JAVA_HOME/bin:$PATH|export CATALINA_HOME=/usr/local/tomcat|' /etc/profileecho "export PATH=\$JAVA_HOME/bin:\$CATALINA_HOME/bin:\$PATH" >> /etc/profilesource /etc/profile# 查看端口号
ss -antpl |grep java
#输出如下:
LISTEN 0 100 *:8080 *:* users:(("java",pid=33886,fd=56))
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:* users:(("java",pid=33886,fd=64))# 向本地主机的8080端口发送一个 HTTP 请求
curl localhost:8080# 停止Tomcat服务
catalina.sh stop# 写入Tomcat服务文件
cat >/usr/lib/systemd/system/tomcat.service<<LW
[Unit]
Description=JAVA server daemon
After=network.target[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/stutdown.sh
KillMode=process[Install]
WantedBy=multi-user.target
LW
1.6安装NGINX1.28.0(174.5)
# 安装NGINX相关依赖
dnf -y install pcre-devel zlib-devel openssl-devel# 解压文件并创建用户
cd /usr/local/src/
tar zxf nginx-1.28.0.tar.gz
cd nginx-1.28.0/
useradd -r -s /bin/false -M nginx # 编译
./configure --prefix=/usr/local/nginx --group=nginx --user=nginx --with-http_stub_status_module # 安装编译依赖
make && make install# 启动NGINX服务
/usr/local/nginx/sbin/nginx # 查看端口状态
ss -antpl | grep nginx
#输出如下:
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=41397,fd=6),("nginx",pid=41396,fd=6))# 关闭NGINX服务
/usr/local/nginx/sbin/nginx -s stop# 写入NGINX服务文件
cat >>/usr/lib/systemd/system/nginx.service<<LW
[Unit]
Description=Web server daemon
After=network.target[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecStop=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s stop
ExecReload=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload
KillMode=process[Install]
WantedBy=multi-user.target
LW# 重载并启动NGINX服务
systemctl daemon-reload
systemctl start nginx# 查看NGINX端口状态
ss -antpl | grep nginx
#输出如下:
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=41461,fd=6),("nginx",pid=41460,fd=6))
1.7部署jdk(174.100)
# 解压软件包
cd /usr/local/src/
tar zxf jdk-8u131-linux-x64.tar.gz
mv jdk1.8.0_131/ /usr/local/java# 写入环境变量
echo "export JAVA_HOME=/usr/local/java" >> /etc/profileecho "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profilesource /etc/profile# 已安装以下 Java 相关组件
rpm -qa |grep java
#输出如下:
javapackages-filesystem-6.0.0-7.el9_5.noarch
tzdata-java-2025a-1.el9.noarch
java-1.8.0-openjdk-headless-1.8.0.442.b06-2.el9.x86_64# 卸载现有 OpenJDK 8
dnf -y remove java-1.8.0-openjdk-headless-1:1.8.0.442.b06-2.el9.x86_64# 查看当前java版本
java -version
#输出如下:
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
1.8安装maven3.8.8(174.100)
# 解压并修改文件目录
cd /usr/local/src
tar zxf apache-maven-3.8.8-bin.tar.gz
mv apache-maven-3.8.8 /usr/local/maven
mkdir /usr/local/maven/repo# 修改Maven 的全局配置文件如下三处:
vim /usr/local/maven/conf/settings.xml
# 修改1:56 <localRepository>/usr/local/maven/repo</localRepository># 修改2:
160 <mirror>
161 <id>alimaven</id>
162 <mirrorOf>central</mirrorOf>
163 <name>aliyun maven</name>
164 <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
165 </mirror>
166 </mirrors># 修改3:
254 <profile>
255 <id>java1.8</id>
256 <activation>
257 <activeByDefault>true</activeByDefault>
258 </activation>
259 <properties>
260 <maven.compiler.source>1.8</maven.compiler.source>
261 <maven.compiler.target>1.8</maven.compiler.target>
262 <maven.compiler.release>1.8</maven.compiler.release>
263 </properties>
264 </profile>
265 </profiles># 写入环境变量
sed -i 's|PATH=$JAVA_HOME/bin:$PATH|export MAVEN_HOME=/usr/local/maven|' /etc/profileecho "export PATH=\$JAVA_HOME/bin:\$MAVEN_HOME/bin:\$PATH" >> /etc/profilesource /etc/profile# 查看 Maven 版本信息
mvn -v
#输出如下:
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: /usr/local/maven
Java version: 1.8.0_131, vendor: Oracle Corporation, runtime: /usr/local/java/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.14.0-503.26.1.el9_5.x86_64", arch: "amd64", family: "unix"# 显示当前构建环境的系统属性和环境变量
mvn help:system
#输出如下: (最后6行如下)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.629 s
[INFO] Finished at: 2025-05-21T10:11:59+08:00
[INFO] ------------------------------------------------------------------------
二、安装部署ruoyi(174.100后端)
2.1下载克隆ruoyi代码
# 清空当前目录克隆ruoyi
rm -rf *
git clone https://gitee.com/y_project/RuoYi-Vue.git
#输出如下:
Cloning into 'RuoYi-Vue'...remote: Enumerating objects: 18555, done.
remote: Counting objects: 100% (408/408), done.
remote: Compressing objects: 100% (282/282), done.
remote: Total 18555 (delta 162), reused 171 (delta 64), pack-reused 18147 (from 1)
Receiving objects: 100% (18555/18555), 4.33 MiB | 2.40 MiB/s, done.
Resolving deltas: 100% (9417/9417), done.# 文件下载内容
[root@maven100 src]# ll
total 4
drwxr-xr-x. 14 root root 4096 May 21 10:16 RuoYi-Vue
2.2修改ruolyi配置文件
# 修改ruoyi-admin/pom.xml文件
sed -i 's|<packaging>jar</packaging>|<packaging>war</packaging>|' /usr/local/src/RuoYi-Vue/ruoyi-admin/pom.xml# 修改ruoyi-common/pom.xml文件
vim /usr/local/src/RuoYi-Vue/ruoyi-common/pom.xml
#修改如下: 27 <dependency>28 <groupId>org.springframework</groupId>29 <artifactId>spring-web</artifactId>30 <exclusions>31 <exclusion>32 <groupId>org.springframework.boot</groupId>33 <artifactId>spring-boot-starter-tomcat</artifactId>34 </exclusion>35 </exclusions>36 </dependency># 修改Spring Boot 项目的主配置文件
mkdir -p /usr/local/ruoyi/uploadPathsed -i 's| profile: D:/ruoyi/uploadPath| profile: /usr/local/ruoyi/uploadPath|' /usr/local/src/RuoYi-Vue/ruoyi-admin/src/main/resources/application.ymlsed -i 's| host: localhost| host: 192.168.174.10|' /usr/local/src/RuoYi-Vue/ruoyi-admin/src/main/resources/application.yml
2.3拷贝数据到MySQL
# 拷贝数据库数据库初始化脚本到174.10
scp quartz.sql ry_20250417.sql 192.168.174.10:/tmp
#输出如下:
The authenticity of host '192.168.174.10 (192.168.174.10)' can't be established.
ED25519 key fingerprint is SHA256:wzPz75oXZg5dfaVhp6GhWON3AUwFDM9nmQbhE4T3jIk.
This host key is known by the following other names/addresses:~/.ssh/known_hosts:2: 192.168.174.6
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.174.10' (ED25519) to the list of known hosts.
root@192.168.174.10's password:
quartz.sql 100% 12KB 15.7MB/s 00:00
ry_20250417.sql 100% 56KB 17.7MB/s 00:00
2.4修改Druid 数据库连接池配置
# 修改application-druid.yml指定数据源
vim /usr/local/src/RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml
#修改如下:
9 url: jdbc:mysql://192.168.174.10:3306/ry-vue?useUnicode=true&chara cterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GM T%2B8 10 username: ruoyi11 password: 123
2.5进入db10MySQL创建ruoyi用户
# 进入到db10创建ruoyi用户
create user ruoyi@'192.168.174.%' identified by '123';
create database `ry-vue` charset utf8mb4;
grant all on *.* to ruoyi@'192.168.174.%';
2.6编译打包
# 清理项目并编译打包
cd /usr/local/src/RuoYi-Vue/
mvn clean package
#输出如下:
2.7拷贝文件到Tomcat
# 拷贝文件到Tomcat
scp /usr/local/src/RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.war 192.168.174.6:/usr/local/tomcat/webapps/
#输出如下:
The authenticity of host '192.168.174.6 (192.168.174.6)' can't be established.
ED25519 key fingerprint is SHA256:wzPz75oXZg5dfaVhp6GhWON3AUwFDM9nmQbhE4T3jIk.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.174.6' (ED25519) to the list of known hosts.
root@192.168.174.6's password:
ruoyi-admin.war 100% 80MB 85.7MB/s 00:00
2.8导入MySQL数据库中
# 导入库(db10174.10)
mysql -uruoyi -p123 -h192.168.174.10 ry-vue </tmp/quartz.sql
#输出如下:
mysql: [Warning] Using a password on the command line interface can be insecure.mysql -uruoyi -p123 -h192.168.174.10 ry-vue </tmp/ry_20250417.sql
#输出如下:
mysql: [Warning] Using a password on the command line interface can be insecure.
2.9进入Tomcat(174.6)
# 重动Tomcat
catalina.sh stop
catalina.sh start# 服务器访问查看
http://192.168.174.6:8080/ruoyi-admin/
三、安装部署ruoyi(174.100后 端)
3.1安装node-v22.15.1
# 进入目录压缩并修改文件位置
cd /usr/local/src
tar xf node-v22.15.1-linux-x64.tar.xz
mv node-v22.15.1-linux-x64 /usr/local/nodejs
cd /usr/local/nodejs/bin/# 写入环境变量
sed -i 's|export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH|export NODEJS_HOME=/usr/local/nodejs|' /etc/profileecho "export PATH=\$JAVA_HOME/bin:\$MAVEN_HOME/bin:\$NODEJS_HOME/bin:\$PATH" >> /etc/profilesource /etc/profile# 验证安装
node -v # 输出 v22.15.1
npm -v # 输出 10.9.2# 查看当前 npm 使用的包注册中心地址
npm config get registry
#输出如下:
https://registry.npmjs.org/# npm设置为国内源(淘宝)
npm config set registry https://registry.npmmirror.comnpm config get registry
#输出如下:
https://registry.npmmirror.com
3.2安装npm依赖并打包
# 安装npm依赖
cd /usr/local/src/RuoYi-Vue/ruoyi-ui
npm install
#输出如下: (最后4行)
added 1471 packages in 1m150 packages are looking for fundingrun `npm fund` for details# npm进行打包
npm run build:prod
#输出如下: dist/static/css/chunk-698a5ba1.f2078e2 0.37 KiB 0.26 KiB8.cssImages and other types of assets omitted.DONE Build complete. The dist directory is ready to be deployed.INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html
3.3传送打好的包
# 进入NGINX创建ruoyi目录(174.5)
mkdir /ruoyi/ruoyi-ui -p# 回到maven传送包(174.10)
scp -r ./dist/ 192.168.174.5:/ruoyi/ruoyi-ui# 进入NGINX查看包传送是否成功()
ll /ruoyi/ruoyi-ui/dist
#输出如下:
total 36
-rw-r--r-- 1 root root 5663 May 19 23:40 favicon.ico
drwxr-xr-x 2 root root 39 May 19 23:40 html
-rw-r--r-- 1 root root 12440 May 19 23:40 index.html
-rw-r--r-- 1 root root 4101 May 19 23:40 index.html.gz
-rw-r--r-- 1 root root 26 May 19 23:40 robots.txt
drwxr-xr-x 6 root root 51 May 19 23:40 static
drwxr-xr-x 3 root root 25 May 19 23:40 styles
3.4进入NGINX配置文件修改(174.5)
vim /usr/local/nginx/conf/nginx.conf
#修改如下: 43 location / {44 root /ruoyi/ruoyi-ui/dist/;45 index index.html index.htm;46 }47 location /prod-api/ {48 proxy_set_header Host $http_host;49 proxy_set_header X-Real-IP $remote_addr;50 proxy_set_header REMOTE-HOST $remote_addr;51 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_fo r; 52 proxy_pass http://192.168.174.6:8080/ruoyi-admin/;53 }# 测试语法是否正确
/usr/local/nginx/sbin/nginx -t
#输出如下:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful# 重启NGINX服务
systemctl restart nginx# 浏览器服务网页
http://192.168.174.5/
# 看到图片得知是从后端生成的
3.5查看Redis热数据(174.10)
[root@db10 tmp]# redis-cli
127.0.0.1:6379> keys *
#输出如下: 1) "login_tokens:e6e90216-e1d8-4793-bbb5-7b7621146419"2) "sys_config:sys.account.registerUser"3) "sys_config:sys.user.initPassword"4) "sys_dict:sys_oper_type"5) "sys_config:sys.index.skinName"6) "sys_dict:sys_notice_type"7) "sys_dict:sys_yes_no"8) "sys_config:sys.account.captchaEnabled"9) "sys_dict:sys_user_sex"
10) "sys_dict:sys_job_group"
11) "sys_dict:sys_normal_disable"
12) "sys_dict:sys_common_status"
13) "sys_dict:sys_notice_status"
14) "sys_dict:sys_job_status"
15) "sys_config:sys.login.blackIPList"
16) "test"
17) "sys_config:sys.index.sideTheme"
18) "sys_dict:sys_show_hide"
127.0.0.1:6379>
相关文章:
25_05_19Linux实战篇、第一章_01若依前后端部署之路(后端)
Linux_实战篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:若依前后端动静分离(后端 ) 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.20 适用环境: Rocky9.5 文档说明 本文围绕 Linux 实战展开&#x…...
Python慕课学习记录
中国大学MOOC(慕课)观看记录: Python123课后相应的练习、考试记录...
2025年渗透测试面试题总结-快手[实习]安全工程师(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 快手[实习]安全工程师 一面问题分析与详细回答 1. 自我介绍 4. 项目问题与解决 7. 防止SQL注入&…...
【iOS(swift)笔记-10】利用类的继承来实现不同地区语言的显示
XCode项目原生开发有自带的可区分语言的功能体系,建议采用原生开发,此处利用类的继承来实现不同地区语言的显示是为了方便,而且在unity游戏开发中采用此法也挺灵活适用。 // 定义一个语言控制类 class LanguageController { // 根据系统切换…...
C语言中的弱符号 __attribute__((weak)) 的使用方法
以下是一个脱离 CallStack.h 的极简 C 语言示例,通过 弱符号覆盖 和 运行时检查 两个场景,展示 __attribute__((weak)) 的核心用法: 一、代码实现 1. 弱符号定义与覆盖(weak_demo.c) // weak_demo.c #include <st…...
禁止window安全中心乱删文件
将文件/文件夹添加到 Defender 排除列表 如果你确定文件安全,可以将其添加到 排除列表,防止 Defender 误删: Windows 安全中心 → “病毒和威胁防护” → “管理设置”。 下拉找到 “排除项” → “添加或删除排除项”。 点击 “ 添加排除…...
【JavaScript异步编程终极指南】从回调地狱到Async/Await的实战突围
目录 🌍 前言:技术背景与价值💔 当前技术痛点🛠 解决方案概述👥 目标读者说明🔍 一、技术原理剖析🧠 核心作用讲解🧩 关键技术模块说明⚖️ 技术选型对比 💻 二、实战演示…...
【算法专题十五】BFS解决最短路问题
文章目录 1.最短路问题简介(边权为1的最短路问题)2.迷宫中离入口最近的出口2.1 题目2.2 思路2.3 代码 3.最小基因变化3.1 题目3.2 思路3.3 代码 4.单词接龙4.1 题目4.2 思路4.3 代码 5.为高尔夫比赛砍树5.1 题目5.2 思路5.3 代码 1.最短路问题简介&#…...
upload-labs通关笔记-第16关 文件上传之exif_imagetype绕过(图片马)
目录 一、exif_imagetype 二、开启exif模块 1、phpstudy设置勾选php_exif模块 2、php.ini文件配置开启php_exif模块 三、源码分析 四、图片马 1、图片马概念 2、图片马制作 五、渗透实战 1、上传图片马 2、利用文件包含访问图片马 (1)jpg …...
力扣-两数之和
1.题目描述 2.题目链接 LCR 006. 两数之和 II - 输入有序数组 - 力扣(LeetCode) 3.题目代码 class Solution {public int[] twoSum(int[] numbers, int target) {int[]retnew int[2];int left0,rightnumbers.length-1;while(left<right){if(numbe…...
什么是大数据?
大数据的详细定义 大数据是来自计算机、移动设备和机器传感器的海量数据(数万亿字节)。企业利用这些数据推动决策、改进流程和政策,并打造以客户为中心的产品、服务和体验。大数据之所以被定义为 “大”,不仅在于其体量ÿ…...
25_05_19Linux实战篇、第一章_02若依前后端部署之路(前端)
Linux_实战篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:若依前后端动静分离(前端) 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.21 适用环境: Rocky9.5 文档说明 环境准备 硬件要求 服务器&…...
SuperVINS:应对挑战性成像条件的实时视觉-惯性SLAM框架【全流程配置与测试!!!】【2025最新版!!!!】
一、项目背景及意义 SuperVINS是一个改进的视觉-惯性SLAM(同时定位与地图构建)框架,旨在解决在挑战性成像条件下的定位和地图构建问题。该项目基于经典的VINS-Fusion框架,但通过引入深度学习方法进行了显著改进。 视觉-惯性导航系…...
【后端】【UV】【Django】 `uv` 管理的项目中搭建一个 Django 项目
🚀 一步步搭建 Django 项目(适用于 uv pyproject.toml 项目结构) 🧱 第 1 步:初始化一个 uv 项目(如果还没建好) uv init django-project # 创建项目,类似npm create vue⚙️ 第 …...
sqlsugar查看表结构并导出word文档
前提 SqlSugar 5.1.4 MiniWord 0.9.2 使用 using MiniSoftware; using SqlSugar;namespace ConsoleApp5 {internal class Program{/// <summary>/// 导出数据库表结构和字段信息/// https://www.donet5.com/Home/Doc?typeId1203/// </summary>/// <param n…...
【机器学习】支持向量机(SVM)
目录 一、支持向量机基本概念 1.1 定义 1.2 支持向量:距离超平面最近的样本点,决定了超平面的位置。 二、线性支持向量机 2.1 硬间隔支持向量机 2.2 软间隔支持向量机 三、非线性支持向量机 3.1 核函数 3.2 常用核函数 3.2.1 线性核:…...
[Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十)
[Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十) 一、MinIO简介与核心原理 MinIO 是一款高性能、开源的分布式对象存储系统,兼容 Amazon S3 API,适用于存储图片、视频、日志等非结构化数据。其核心特…...
SpringBoot微服务编写Dockerfile流程及问题汇总
背景 跟 Docker 磕了两天,将一个包含 N 个微服务的应用部署包改造,使其能够生成 Docker 镜像,并在 Docker 容器中运行。几年前玩过 Docker,隐约记得几个命令「Dockerfile 命令:黑卡饮料、山楂果费、哦SUV,…...
PostgreSQL使用
一、PostgreSQL语法 PostgreSQL表、模式、库三者之间的关系 库 -> 模式 -> 表、视图、函数等等对象。 在postgresql的交互式终端psql中,“\”开头的命令称为元命令(类似mysql的show语句),用于快速管理数据库。 常见元命令&…...
现代化SQLite的构建之旅——解析开源项目Limbo
现代化SQLite的构建之旅——解析开源项目Limbo 在当今飞速发展的技术世界中,轻量级且功能强大的数据库已成为开发者的得力助手。当我们谈论轻量级数据库时,SQLite无疑是一个举足轻重的名字。然而,随着技术的进步,我们对数据库的需…...
MySQL 主从复制搭建全流程:基于 Docker 与 Harbor 仓库
一、引言 在数据库管理中,MySQL 主从复制是一种非常重要的技术,它可以实现数据的备份、读写分离,减轻主数据库的压力。本文将详细介绍如何使用 Docker 和 Harbor 仓库来搭建 MySQL 主从复制环境,适合刚接触数据库和 Docker 的新手…...
网页表格转换为markdown
网页表格到Markdown:一键转换,复制即用! 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或论坛中使用。然而,手动转换不仅耗时,还容易…...
MySQL字符串拼接方法全解析
目录 常用字符串处理函数 方法一:CONCAT基础拼接 方法二:CONCAT_WS带分隔符拼接 方法三:GROUP_CONCAT分组拼接 方法四:算术运算符拼接(仅限数字) 常用字符串处理函数 方法一:CONCAT基础拼接…...
零基础教程:用 Docker + pgloader 将 MySQL 数据库迁移到 PostgreSQL
在日常开发中,可能会遇到从 MySQL 迁移到 PostgreSQL 的需求。你也许是: 正在准备从传统架构转向云原生;想使用 PostgreSQL 更强的事务与 JSON 支持;想统一团队数据库技术栈;纯粹为了尝试学习不同的数据库系统。 别担…...
影刀Fun叉鸟-2048
文章目录 仅为自动化演示,实际2048判定逻辑需要更加严谨 参考代码 # 使用提醒: # 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能 # 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能 # 3. 当此模块作…...
uni-app(2):页面
1 页面简介 uni-app项目中,一个页面就是一个符合Vue SFC规范的 vue 文件。 在 uni-app js 引擎版中,后缀名是.vue文件或.nvue文件。 这些页面均全平台支持,差异在于当 uni-app 发行到App平台时,.vue文件会使用webview进行渲染&…...
【spring】spring学习系列之十一:spring的事件监听
系列文章目录 文章目录 系列文章目录前言一、使用二、整体流程三、EventListenerMethodProcessor和DefaultEventListenerFactory1.EventListenerMethodProcessor2.DefaultEventListenerFactory3.ApplicationListenerDetector4.initApplicationEventMulticaster5.registerListen…...
代码随想录打卡|Day45 图论(孤岛的总面积 、沉没孤岛、水流问题、建造最大岛屿)
图论part03 孤岛的总面积 代码随想录链接 题目链接 视频讲解链接 思路:既然某个网格在边界上的岛屿不是孤岛,那么就把非 孤岛的所有岛屿变成海洋,最后再次统计还剩余的岛屿占据的网格总数即可。 dfs: import java.util.Scanner…...
AI人工智能——Matplotlib绘制各种数据可视化图表的基础方法
一、绘制图像基础 import matplotlib.pyplot as plt# 1、创建画布 plt.figure(figsize(20, 8), dpi100) # 2、绘制图像 x [1, 2, 3, 4, 5, 6] y [3, 5, 4, 3, 6, 1] plt.plot(x, y) # 3、显示图像 plt.show() 二、图像保存 import matplotlib.pyplot as plt# 1、创建画布 p…...
亚马逊AWS跑不动了?
5月2日,亚马逊公布了2025年第一季度的财报。财报数据显示,云计算业务增速放缓以及第二季度的指引低于预期。事实上,这并不是亚马逊AWS第一次增速放缓。 亚马逊AWS作为全球第一大云计算服务公司,这些年跟微软云、谷歌云等其他云计…...
PyTorch中cdist和sum函数使用详解
torch.cdist 是 PyTorch 中用于计算**两个张量之间的成对距离(pairwise distance)**的函数,常用于点云处理、图神经网络、相似性度量等场景。 基本语法 torch.cdist(x1, x2, p2.0)参数说明: 参数说明x1一个形状为 [B, M, D] 或 …...
PyTorch的基本操作
前言 为了方便大家学习,我整理了PyTorch全套学习资料,包含配套教程讲义和源码 除此之外还有100G人工智能学习资料 包含数学与Python编程基础、深度学习机器学习入门到实战,计算机视觉自然语言处理大模型资料合集,不仅有配套教程…...
分类算法 Kmeans、KNN、Meanshift 实战
任务 1、采用 Kmeans 算法实现 2D 数据自动聚类,预测 V180,V260 数据类别; 2、计算预测准确率,完成结果矫正 3、采用 KNN、Meanshift 算法,重复步骤 1-2 代码工具:jupyter notebook 视频资料 无监督学习ÿ…...
aws平台s3存储桶夸域问题处理
当我们收到开发反馈s3存在跨域问题 解决步骤: 配置 S3 存储桶的 CORS 设置: 登录到 AWS 管理控制台。转到 S3 服务。选择你存储文件的 存储桶。点击 权限 标签页。在 跨域资源共享(CORS)配置 部分,点击 编辑。 登陆…...
在Windows上安装Pygame 2.1.3:解决常见问题
在Windows系统上安装Pygame 2.1.3时,可能会遇到各种问题,例如网络问题或依赖安装失败。本文将详细介绍如何在Windows上成功安装Pygame 2.1.3,并解决常见的安装问题。 1. 前提条件 在开始安装之前,确保你的系统中已经安装了Pytho…...
linux中安装jdk(Java环境),tomcat
安装时候选择 tomcat 软件版本要与程序开发使用的版本一致。jdk 版本要进行与 tomcat 保持一致。 1. 系统环境说明 [root@bogon ~]# getenforce Disabled [root@bogon ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon …...
DeepSeek源码解构:从MoE架构到MLA的工程化实现
文章目录 **一、代码结构全景:从模型定义到分布式训练****二、MoE架构:动态路由与稀疏激活的工程化实践****1. 专家路由机制(带负载均衡)****数学原理:负载均衡损失推导** **三、MLA注意力机制:低秩压缩与解…...
国产linux系统(银河麒麟,统信uos)使用 PageOffice实现PDF文件加盖印章和签字功能
PageOffice 国产版 :支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、龙芯(Mips、LoogArch)芯片架构。 PageOffice支持…...
第四十三节:人脸检测与识别-人脸识别基础 (Eigenfaces, Fisherfaces, LBPH)
引言 人脸识别技术是计算机视觉领域最具应用价值的方向之一,广泛应用于安防监控、身份认证、人机交互等领域。本文将通过OpenCV框架,深入解析人脸检测与识别的核心算法(Eigenfaces/Fisherfaces/LBPH),并提供完整的代码实现。 第一部分:人脸检测基础 1.1 人脸检测原理 …...
面向恶劣条件的道路交通目标检测----大创自用(当然你也可以在里面学到很多东西)
全部内容梳理 目标检测的两个任务: 预测标签 边界框 语义分割 实力分割 一个是类别 一个是实例级别 分类任务把每个图像当作一张图片看待 所有解决方法是先生成候选区域 再进行分类 置信度: 包括对类别和边界框预测的自信程度 输出分类和IOU分数的…...
物联网相关词汇
物联网(英文:Internet of Things,缩写:IoT) specs 英[speks] 美[speks] 规格说明 topology 英[təpɒlədʒɪ] 拓扑结构 vertical 美 [ˈvɜrtɪk(ə)l] 英 [ˈvɜː(r)tɪk(ə)l] n.垂直线;垂直位…...
【net6】一文跑通前后端以及数据库,简单的天气系统管理(保姆入门)
一、前言 使用Vue3为前端,.net6为后端,连接postgreSQL数据库,连通前后端与数据库,实现最基础的天气管理系统的增删改查。 二、内容 目录 一、前言 二、内容 2.1 后端部分 2.1.1 在VS里面使用此模板创建项目 2.1.2 安装下列…...
宝塔安装的 MySQL 无法连接的情况及解决方案
宝塔安装的 MySQL 无法连接的情况及解决方案 宝塔面板是一款流行的服务器管理工具,其中集成的 MySQL 数据库有时会出现连接问题。本文详细介绍两种最常见的 MySQL 连接错误:“1130 - Host is not allowed to connect” 和 “1045 - Access denied”&…...
【iOS】分类、扩展、关联对象
分类、扩展、关联对象 前言分类扩展扩展和分类的区别关联对象key的几种用法流程 总结 前言 最近的学习中笔者发现自己对于分类、扩展相关知识并不是很熟悉,刚好看源码类的加载过程中发现有类扩展与关联对象详解。本篇我们来探索一下这部分相关知识,首先…...
计算机网络学习(一)—— OSI vs TCP/IP网络模型
一、OSI模型(开放系统互联参考模型) OSI(Open Systems Interconnection)模型由ISO(国际标准化组织)在1984年提出,用于标准化网络通信,它将网络通信分为七个层次: 层级名…...
【MySQL成神之路】MySQL查询用法总结
MySQL查询语句全面指南 一、基础查询语句 MySQL中select的基本语法形式 select 属性列表 from 表名和视图列表 [where 条件表达式] [group by 属性名[having 条件表达式]] [order by 属性名[asc|desc]] [limit <offset>,row count] 说明: where子句&…...
攻防世界——Web题 fakebook
首先测试网站的功能,当我注册一个账号时,发现这里的链接: 点进去看到URL: 感觉no这个地方可以尝试一下sql注入 推测应该是数字型注入 发现果然可以进行sql注入, 最终测得列数应该是4列,但当我尝试sql注入…...
【Java微服务组件】异步通信P2—Kafka与消息
欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 欢迎评论交流,感谢您的阅读😄。 目录 引言Kafka与消息生产者发送消息到Kafka批处理发送设计消息的幂等信息确保消息送达acks配置…...
AI数字人一体机和智慧屏方案:开启智能交互新纪元
在当今这个信息化飞速发展的时代,AI技术正以前所未有的速度改变着我们的生活方式和工作模式。特别是在人机交互领域,AI数字人的出现不仅极大地丰富了用户体验,也为各行各业提供了前所未有的创新解决方案。本文将重点介绍由广州深声科技有限公…...
10-码蹄集600题基础python篇
题目如上: 这题就是ASCII的转换,直接使用ord就可以 下面是代码: def main():#code here# a1,a2input().split(",")# print(f"The ASCII code of {a1} is {ord(a1)}")# print(f"The ASCII code of {a2} is {ord(a2…...