当前位置: 首页 > article >正文

若依项目部署--传统架构--未完待续

若依项目介绍

项目源码获取

#Git工具下载
dnf -y install git
#若依项目获取
git clone https://gitee.com/y_project/RuoYi-Vue.git

项目背景

随着企业信息化需求的增加,传统开发模式存在效率低,重复劳动多等问题。若依项目通过整合主流技术框架,提供了一套标准化,模块化的开发方案,降低了开发门槛,提升开发效率

核心特性

前后端分离架构

前端使用Vue.js框架,后端使用SPring Boot框架,前后端通过RESTful API交互,提升开发效率和用户体验

模块化设计

系统划分为多个功能模块(如用户管理,权限管理,系统监控等),开发者可根据需求灵活选择和扩展

权限控制

基于RBAC模型,提供颗粒度的权限管理,支持菜单,按钮级别的权限控制

代码生成器

内置代码生成工具,可根据数据库表自动生成前后端代码,减少重复开发工作

多租户支持

支持多租户架构,满足不同企业或部门的独立数据隔离需求

响应式布局

前端界面适配不同设备,提供良好的用户体验

技术架构

后端技术栈

Spring Boot

核心框架,提供快速开发和部署能力

MyBatis-PlusORM

简化数据库操作

Shiro/Spring Security

安全框架,实现权限控制

Redis

缓存数据库,提升系统性能

Elasticsearch

全文检索引擎,支持复杂查询

前端技术栈

Vue.js

前端框架,构建动态用户界面

Element UI

提供丰富的组件和样式

Axios

HTTP客户端,处理前后端数据交互

数据库

MySQL

主数据库,存储业务数据

项目架构

整体流程

项目整体部署架构

用户流量分析

1—用户通过域名进行程序的访问
2—进行dns解析,将域名解析为ip地址,并进行访问
3—在服务器接受到用户请求后,先使用防火墙进行过滤,判断是否为黑名单中的用户
4—合法用户通过防火墙后访问LVS四层负载均衡器,根据负载均衡算法将请求转发到不同的NGINX服务器
5—如果用户的请求为静态请求,NGINX直接返回相应资源
6—如果用户的请求是动态请求,则将请求根据负载均衡算法发送到后台服务器
7—后台服务器在需要数据时先到Redis-cluster中进行查询,查询到则将信息返回
8—未查询到将到MySQL-cluster中查询数据,然后由MySQL-cluster进行数据返回
9—MySQL-cluster将数据返回后,将此次返回数据放入Redis-cluster中,提高下次查询速度

高可用集群配置

使用keepalived对NGINX进行高可用配置,使用vip对外提供服务,防止单个NGINX出现故障导致整个服务宕机,影响客户使用

负载均衡集群配置

四层负载均衡LVS
在一台服务器配置LVS代理规则,将用户流量进行转发,提高整体的并发性能
七层负载均衡NGINX
首先使用NGINX对服务进行静态分离,静态请求使用NGINX直接进行处理,动态请求代理到后端服务器进行处理
其次,使用NGINX对后端服务器做负载均衡,提高后端服务器的并发性能

集群监控配置

使用zabbix对整个集群进行监控,首先针对所有服务器的基本信息进行监控,其次对部署的各个应用进行监控,确保能够及时对系统出现的问题进行发现并加以修改并通过后续操作进行预防

应用架构优化

系统本身优化
NGINX优化
数据库优化
zabbix监控优化
安全加固

使用iptables进行限制

自动化运维使用

zabbix中配置触发器
MySQL数据定时备份
iptables脚本触发加入黑名单

项目规划

操作系统版本: centos-stream 9

NGINX版本:1.20

Redis版本: 6.2.18

MySQL版本:5.7.44

zabbix版本:7.0

虚拟机信息配置

| 主机名 | 部署项目 | ip地址 | 硬件配置 |
| lvs-host | LVS && zabbix-agent && iptables | 192.168.26. | |
| nginx-host1 | nginx && keepalived && zabbix-agent | | |
| nginx-host2 | nginx && keepalived && zabbix-agent | | |
| java-host1 | ruoyi && zabbix-agent2 | | |
| java-host2 | ruoyi && zabbix-agent2 | | |
| redis-cluster | redis-cluster && zabbix-agent2 | | |
| mysql-master | mysql && zabbix-agent2 | | |
| mysql-replica | mysql && zabbix-agent2 | | |
| zabbix-server | zabbix-server && mysql && nginx | | |

项目部署

部署顺序:
graph TD
A[基础设施部署] --> B[数据库]
A --> C[缓存服务]
A --> D[消息队列(可选)]
B --> E[后端服务部署]
C --> E
D --> E
E --> F[前端部署]
F --> G[测试与验证

MySQL主从集群配置

主库配置

基础环境部署
#更改主机名
hostnamectl set-hostname mysql-master
#永久关闭防火墙
systemctl disable --now firewalld 
#永久关闭Selinux
setenforce 0 && sed -ri 's/enforcing/disabled/' /etc/selinux/config
#安装常用软件 
dnf -y install vim wget tree net-tools yum-utils git
#重启生效
reboot
安装所需版本MySQL数据库

mysql官网: https://www.mysql.com

#获取所需版本
cat << EOF >> /etc/yum.repo.d/mysql-community.repo
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
EOF
#安装MySQL数据库
dnf -y install mysql mysql-server
#启动数据库
systemctl enable --now mysqld
#搜索初始密码
grep "password" /var/log/mysqld.log
#更改MySQL数据库密码
mysqladmin -uroot -p'init_password' password 'your_password'
#获取项目源码
git clone https://gitee.com/y_project/RuoYi-Vue.git
数据准备
#创建数据库
CREATE DATABASE ry_vue CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
#创建用户
CREATE USER 'ry'@'%' IDENTIFIED BY 'Ry@123456';
#授予权限
GRANT ALL PRIVILEGES ON ry_vue.* TO 'ry'@'%';
#刷新权限
FLUSH PRIVILEGES;
#导入数据
mysql -ury -p'Ry@123456' ry_vue < RuoYi-Vue/sql/ry_20250522.sql
mysql -ury -p'Ry@123456' ry_vue < RuoYi-Vue/sql/quartz.sql
#验证数据是否成功导入
USE ry_vue;
SHOW TABLES;
主从复制配置
#修改配置文件,在mysqld配置加入一下选项
server-id = 1                
log_bin = mysql-bin          
binlog_format = ROW
#重启MySQL服务   
systemctl restart mysqld       
#创建同步用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'Repl@123456';
#为同步用户授权
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
#刷新权限
FLUSH PRIVILEGES;
#查看偏移量
SHOW BINARY LOG STATUS\G

server-id必须具有唯一性
MySQL新版本中查看偏移量的语句更改,不是SHOW MASTER STATUS\G
至此 MySQL主库配置完毕

从库配置

基础环境部署
#更改主机名
hostnamectl set-hostname mysql-replica
#永久关闭防火墙
systemctl disable --now firewalld 
#永久关闭Selinux
setenforce 0 && sed -ri 's/enforcing/disabled/' /etc/selinux/config
#安装常用软件 
dnf -y install vim wget tree net-tools yum-utils
#重启生效
reboot
安装所需版本MySQL数据库
#获取所需版本
wget https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
rpm -vih mysql84-community-release-el9-1.noarch.rpm  
cat /etc/yum.repos.d/mysql-community.repo  #可以编辑此文件内容来选择所需版本MySQL进行下载
#安装MySQL数据库
dnf -y install mysql mysql-server
#启动数据库
systemctl enable --now mysqld
#搜索初始密码
grep "password" /var/log/mysqld.log
#更改MySQL数据库密码
mysqladmin -uroot -p'init_password' password 'your_password'
#导入数据
mysql -ury -p'Ry@123456' ry_vue < RuoYi-Vue/sql/ry_20250522.sql
mysql -ury -p'Ry@123456' ry_vue < RuoYi-Vue/sql/quartz.sql
主从复制配置
CHANGE REPLICATION SOURCE TOSOURCE_HOST='source_host_name',SOURCE_USER='replication_user_name',SOURCE_PASSWORD='replication_password',SOURCE_LOG_FILE='recorded_log_file_name',SOURCE_LOG_POS=recorded_log_position;

Redis-cluster集群配置

由于主机配置有限,此处在一台机器上配置六个Redis实例,组成Redis集群,提供服务

基础环境部署

#更改主机名
hostnamectl set-hostname redis-cluster
#永久关闭防火墙
systemctl disable --now firewalld 
#永久关闭Selinux
setenforce 0 && sed -ri 's/enforcing/disabled/' /etc/selinux/config
#安装常用软件 
dnf -y install vim wget tree net-tools yum-utils git
#重启生效
reboot

安装Redis应用

Redis官网: https://redis.io

#安装所需版本Redis--此时安装的版本即为所需版本,如需其他版本可去官网
dnf -y install redis 
#复制多个配置文件,并修改配置文件,从而在一台主机上运行多个Redis实例,配置集群
cd /etc/redis
for i in {1..6};do cp redis.conf redis.$i.conf ;done
#创建数据存放目录
for i in {1..6};do mkdir -p /var/lib/redis/data/data_$i;done
#修改配置文件
#修改监听ip地址,保证集群之间可以互相监听
bind 0.0.0.0
#修改端口,配置在同一机器,保证端口不互相冲突
port 6379
#设置以守护进程方式运行
daemonize yes
#配置认证密码
requirepass 123456
#指定pid存储位置
pidfile /var/run/redis_6379.pid
#定义日志文件
logfile /var/log/redis/redis_6379.log
#设置数据保存目录
dir /var/lib/redis/data/data_2
#开启以集群方式启动
cluster-enabled yes
#保存集群配置文件
cluster-config-file nodes.conf
#配置节点连接超时时间
cluster-node-timeout 5000 

配置Redis集群

#开启Redis各个实例
for i in {1..6}; do redis-server redis.$i.conf ;done
#以集群模式运行
redis-cli -a 123456  --cluster create --cluster-replicas 1 192.168.26.103:6379 192.168.26.103:6380 192.168.26.103:6381 192.168.26.103:6382 192.168.26.103:6383 192.168.26.103:6384
--cluster-replicas 1 #配置单个从节点的模式启动
-a 123456  #配置启动是的密码

验证集群状态

cluster nodes
在这里插入图片描述

后端服务搭建

由于两台后台服务器部署步骤类似,以其中一台为例,可以在jar包构建完毕之后直接传送到另一台后端服务器直接运行

基础环境配置

#更改主机名
hostnamectl set-hostname java-host1
#永久关闭防火墙
systemctl disable --now firewalld 
#永久关闭Selinux
setenforce 0 && sed -ri 's/enforcing/disabled/' /etc/selinux/config
#安装常用软件 
dnf -y install vim wget tree net-tools yum-utils git
#重启生效
reboot

项目部署

jdk版本: 17.0.14
maven版本: 3.6.3
openjdk官网: https://openjdk.org
maven官网: https://maven.apache.org/

#安装软件openjdk,maven
yum -y install java maven  #此处使用的为centos stream 9 仓库中的默认版本
#更改maven配置,提高maven插件安装速度
vim /etc/maven/settings.xml<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url></mirror>
#更改项目数据库配置
/root/RuoYi-Vue/ruoyi-admin/src/main/resources/application.yaml #更改Redis相关连接信息,使用集群方式启动
/root/RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml #更改MySQL数据库,配置主库从库相关信息
#插件下载
mvn install
#进入对应目录
cd RuoYi-Vue/ruoyi-admin/
#进行源代码构建
mvn clean package
#启动项目
java -jar ruoyi-admin.jar 

结果验证

通过生成日志进行验证
在这里插入图片描述

通过访问本机ip的8080端口进行结果访问
在这里插入图片描述

前端服务搭建

基础环境部署

两台nginx服务器配置类似,因此也以一台作为实例
nginx: 1.20
nodejs: 16.20.2
nginx官网: https://nginx.org/
nodejs官网: https://nodejs.org/zh-cn

#更改主机名
hostnamectl set-hostname nginx-host1
#永久关闭防火墙
systemctl disable --now firewalld 
#永久关闭Selinux
setenforce 0 && sed -ri 's/enforcing/disabled/' /etc/selinux/config
#安装常用软件 
dnf -y install vim wget tree net-tools yum-utils git elep-release
#安装所需软件
dnf -y nginx node
#启动nginx
systemctl enable --now nginx
#测试nginx是否成功运行
ss -lntp | grep "nginx"

前端代码上线

#切换到前端代码目录
cd /root/RuoYi-Vue/ruoyi-ui
#安装node插件
npm install --registry=http://registry.npmmirror.com
#编译前段代码
npm run build:prod
#由于使用的nodejs版本较高,与项目中的加密算法不符,使用一下命令暂时重置加密算法的环境变量然后重新编译
export NODE_OPTIONS=--openssl-legacy-provider
#查看编译后的项目
ls dist
#更换dist目录权限
chmod 755 dist 
#删除nginx原有默认发布目录
rm -rf /usr/share/nginx/html
#将dist目录与nginx默认发布目录进行软链接(注意使用绝对路径)
ln -s /root/RuoYi-Vue/ruoyi-ui/dist/  /usr/share/nginx/html
#修改nginx配置文件,保证请求能够转发到正确主机
#前端项目配置
location / {root   /ruoyi/ruoyi-ui/dist;try_files $uri $uri/ /index.html; # 该指令按顺序尝试匹配文件index  index.html index.htm;
}
#后端项目配置 此处使用单个java-host1进行反向代理,后面会使用nginx的upstrea模块进行负载均衡的配置
location /prod-api/ {proxy_set_header Host $http_host; # 传递原始请求的Host头。proxy_set_header X-Real-IP $remote_addr; # 记录客户端真实IP地址。proxy_set_header REMOTE-HOST $remote_addr; # 记录客户端真实IP地址。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录经过代理链的完整IP链。proxy_pass http://192.168.26.104:8080/;}

项目结果验证

通过访问nginx主机的80端口进行验证
登录界面
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dff8189bb64c4bbb8dc8d45da86b7df5.png

管理界面
在这里插入图片描述

项目优化

nginxHA && LB集群搭建

LB集群搭建

两台nginx服务器上均进行LB集群的搭建,仍以其中一天为例

#在nginx配置文件中使用upstream模块定义后端java服务池
upstream application {server 192.168.26.103:8080 ;server 192.168.26.104:8080 ;}#更改location匹配规则,使用proxy_pass进行反向代理

HA集群搭建

keepalived版本: 2.2.8

keepalived官网: https://keepalived.org

#两台nginx主机安装keepalived
dnf -y install keepalived

lvs配置 && iptables配置

基础环境部署

#更改主机名
hostnamectl set-hostname lvs-iptables
#永久关闭防火墙
systemctl disable --now firewalld 
#永久关闭Selinux
setenforce 0 && sed -ri 's/enforcing/disabled/' /etc/selinux/config
#安装常用软件 
dnf -y install vim wget tree net-tools yum-utils git elep-release
#安装所需软件
dnf -y install ipvsadm iptables iptables-service
#重启生效

iptables配置

使用iptables时,需要关闭firewalld
iptables默认配置文件: /etc/sysconfig/iptables
iptables默认规则存放位置: /etc/sysconfig/iptables-config
使用redis-cluster作为客户端进行测试,验证iptables的过滤作用

#启动iptablees
systemctl enable --now iptables
#未添加规则使用redis-cluster主机进行测试
ping 192.168.26.106 
#配置过滤规则,拒绝redis-cluster主机的ping协议
iptables -A INPUT -s 192.168.26.103 -p icmp -j REJECT
#使用redis-cluster主机进行测试
ping 192.168.26.106

可以使用脚本的形式,过滤出nginx访问日志中速度较快的ip进行规则的添加从而达到防止DDoS攻击的目的
在生产环境中,会配置源ip,源端口,目标ip,目标端口来进行屏蔽 iptables语法:
iptables -A INPUT -s 192.168.26.103 -p tcp --dport 80 -j REJECT #限制ip为192.168.25.103主机对当前主机80端口的访问
测试实例图:
配置规则iptables前
配置iptables规则后

lvs配置

lvs主机配置
DR机器配置
结果验证

zabbix监控配置

基础环境配置

#更改主机名
hostnamectl set-hostname zabbix-server
#永久关闭防火墙
systemctl disable --now firewalld 
#永久关闭Selinux
setenforce 0 && sed -ri 's/enforcing/disabled/' /etc/selinux/config
#安装常用软件 
dnf -y install vim wget tree net-tools yum-utils git
#重启生效
reboot

zabbix的安装

zabbix使用版本: zabbix7.0
zabbix官网: https://www.zabbix.com/

#安装zabbix的yum源仓库
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/alma/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
dnf clean all
#安装zabbix相关组件
dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent2 
#安装zabbix agent2相关插件
dnf -y install zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql
#创建所需数据库
create database zabbix character set utf8mb4 collate utf8mb4_bin;
#创建使用用户并授权
create user zabbix@localhost identified by 'Zabbix@123';
grant all privileges on zabbix.* to zabbix@localhost;
flush privileges;
set global log_bin_trust_function_creators = 1;
#导入所需数据
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
#更改Zabbix配置文件中数据库的配置
#文件名 /etc/zabbix/zabbix_server.conf
#启动zabbix相关进程
systemctl enable --now zabbix-server zabbix-agent2 nginx php-fpm
#验证启动是否成功
ss -lntp

zabbix-server安装成功之后,访问zabbix-server主机的80端口
在这里插入图片描述

配置zabbix监控

ansible使用版本: 2.14.18
ansible官网: https://docs.ansible.org.cn/
使用zabbix的自动注册功能,配置各个主机

客户端安装agent2端
#生成ssh秘钥对
ssh-keygen
#配置域名解析
cat << EOF >> /etc/hosts
192.168.26.101 mysql-master 
192.168.26.102 mysql-replica
192.168.26.103 redis-cluster
192.168.26.104 java-host1
192.168.26.105 java-host2
192.168.26.106 lvs-iptables
192.168.26.107 nginx-host1
192.168.26.108 nginx-host2
192.168.26.109 zabbix-server
EOF
#对其他主机进行配置免密认证
for i in `cat /etc/hosts |grep -vw "localhost" | awk '{print $2}'`; do echo $i ;done
#安装ansible应用
dnf -y install epel-release && dnf -y install ansible
#配置资源清单
cat << EOF >> /etc/ansible/hosts
[mysql]
mysql-master
mysql-replica
[redis]
redis-cluster
[application]
java-host1
java-host2
[web]
nginx-host1
nginx-host2
[iptables]
lvs-iptables
[zabbix]
zabbix-server
EOF
#配置ansible的清单文件,在所有节点安装zabbix-agent2服务并开启
cat << EOF >> zabbix-setting.yaml
---
- hosts: allname: zabbix-agent-setuser: rootgather_facts: novars:packages:- zabbix-agent2- zabbix-agent2-plugin-mongodb- zabbix-agent2-plugin-mssql- zabbix-agent2-plugin-postgresqltasks:- name: judge zabbix-agent yum repositry existsshell: cat /etc/yum.repos.d/zabbix.repoignore_errors: yesregister: repo_result- name: set zabbix-agent yum repositoryshell: rpm -Uvh https://repo.zabbix.com/zabbix/7.0/alma/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm \           && dnf clean allwhen: repo_result.rc != 0- name: install zabbix-agent package and plugindnf:name: "{{ item }}"state: installedloop: "{{ packages }}"- name: copy zabbix-agent configurecopy:src: /root/zabbix_agent2.confdest: /etc/zabbix/zabbix_agent2.conf- name: copy diy system minitor scriptcopy:src: /root/system_os.shdest: /etc/zabbix/zabbix_agent2.d/system_os.sh- name: copy diy minitor configure filecopy:src: /root/system_os.confdest: /etc/zabbix/zabbix_agent2.d/system_os.conf- name: start zabbix-agent2 serviceservice:name: zabbix-agent2state: startedenabled: yes
#清单中所使用的zabbix-agent2配置文件,修改以下配置
#注释原有文件主机名
#Hostname=Zabbix server
#获取当前主机名
HostnameItem=system.hostname
# 获取当前主机元数据信息
HostMetadataItem=system.uname
#执行清单文件
ansible-playbook zabbix-setting.yaml
服务端配置
配置自动注册规则

在这里插入图片描述

验证自动注册结果

在这里插入图片描述

此时可以实现对所有主机进行监控,但是监控项是由系统提供,并且监控项目多,可以配置自定义监控项实现对不同主机的不同项目进行监控

添加自定义监控项

如果先配置了自定义监控模版,可以在自动注册时直接进行链接模版,更为方便
针对不同主机,配置不同监控项目
共有监控项目: 针对所有主机,都进行一下项目的监控–系统开机时间,系统内存使用量,系统根分区剩余量,网络可用性,用户数量,cpu负载,用户文件哈希值等项目

数据获取时间和数据保存时间可以根据自己的情况进行定义

配置所有主机自定义监控项
#配置全局系统自定义监控项
cat << EOF >> system_os.sh
#!/bin/bash
#获取开机时间
up_time() {
cat /proc/uptime | awk '{print $1}'
}
mem_used() {
free -m | awk '/Mem/ {print $3/$2*100}'
}
fdisk_free() {
used=`df -hT | grep -w / | awk '{print $(NF-1)}' | tr -d "%"`
echo $((100-used))
}
nat_state() {
ping www.baidu.com -c1 -W1 &> /dev/null && echo yes || echo no
}
user_number() {
wc -l /etc/passwd | awk '{print $1}'
}
load_average() {
uptime  | awk '{print $9}' | tr -d ","
}
hash_user_file() {
md5sum /etc/passwd | awk '{print $1}'
}
$1
EOF
#将自定义监控项配置到配置文件
cat << EOF >> system_os.conf
UserParameter=system_os[*],bash /etc/zabbix/zabbix_agent2.d/system_os.sh $1
EOF
#重启zabbix-agent2
systemct restart zabbix-agent2
#本机验证配置结果
zabbix_agent2 -t system_os[up_time]
配置MySQL数据库主机自定义监控项
配置redis-cluster主机自定义监控项
配置java主机自定义监控项
配置nginx主机自定义监控项
配置lvs-iptbles主机自定义监控项

配置自定义监控项

各个主机最好使用不同的模版进行解耦,此处配置自定义监控项为实例

添加触发器,告警动作等

验证

jumpserver配置

cicd

mycat的使用

dns域名反向代理

ELK集群日志收集

HTTP使用ssl证书安全通信

书写初始化脚本,提高系统初始化速度

使用脚本快速实现主机免密认证
书写系统初始化脚本加快系统配置

收获与总结

相关文章:

若依项目部署--传统架构--未完待续

若依项目介绍 项目源码获取 #Git工具下载 dnf -y install git #若依项目获取 git clone https://gitee.com/y_project/RuoYi-Vue.git项目背景 随着企业信息化需求的增加&#xff0c;传统开发模式存在效率低&#xff0c;重复劳动多等问题。若依项目通过整合主流技术框架&…...

零基础在实践中学习网络安全-皮卡丘靶场(第十一期-目录遍历模块)

经过前面几期的内容我们学习了很多网络安全的知识&#xff0c;而这期内容就涉及到了前面的第六期-RCE模块&#xff0c;第七期-File inclusion模块&#xff0c;第八期-Unsafe Filedownload模块。 什么是"遍历"呢&#xff1a;对学过一些开发语言的朋友来说应该知道&…...

mcts蒙特卡洛模拟树思想

您这个观察非常敏锐&#xff0c;而且在很大程度上是正确的&#xff01;您已经洞察到了MCTS算法在不同阶段的两种不同行为模式。我们来把这个关系理得更清楚一些&#xff0c;您的理解其实离真相只有一步之遥。 您说的“select是在二次选择的时候起作用”&#xff0c;这个观察非…...

华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手

华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...

Qt学习及使用_第1部分_认识Qt---Qt开发基本流程

前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...

[特殊字符] Spring Boot底层原理深度解析与高级面试题精析

一、Spring Boot底层原理详解 Spring Boot的核心设计哲学是约定优于配置和自动装配&#xff0c;通过简化传统Spring应用的初始化和配置流程&#xff0c;显著提升开发效率。其底层原理可拆解为以下核心机制&#xff1a; 自动装配&#xff08;Auto-Configuration&#xff09; 核…...

MeanFlow:何凯明新作,单步去噪图像生成新SOTA

1.简介 这篇文章介绍了一种名为MeanFlow的新型生成模型框架&#xff0c;旨在通过单步生成过程高效地将先验分布转换为数据分布。文章的核心创新在于引入了平均速度的概念&#xff0c;这一概念的引入使得模型能够通过单次函数评估完成从先验分布到数据分布的转换&#xff0c;显…...

【2D与3D SLAM中的扫描匹配算法全面解析】

引言 扫描匹配(Scan Matching)是同步定位与地图构建(SLAM)系统中的核心组件&#xff0c;它通过对齐连续的传感器观测数据来估计机器人的运动。本文将深入探讨2D和3D SLAM中的各种扫描匹配算法&#xff0c;包括数学原理、实现细节以及实际应用中的性能对比&#xff0c;特别关注…...

【Vue】scoped+组件通信+props校验

【scoped作用及原理】 【作用】 默认写在组件中style的样式会全局生效, 因此很容易造成多个组件之间的样式冲突问题 故而可以给组件加上scoped 属性&#xff0c; 令样式只作用于当前组件的标签 作用&#xff1a;防止不同vue组件样式污染 【原理】 给组件加上scoped 属性后…...

Docker环境下安装 Elasticsearch + IK 分词器 + Pinyin插件 + Kibana(适配7.10.1)

做RAG自己打算使用esmilvus自己开发一个&#xff0c;安装时好像网上没有比较新的安装方法&#xff0c;然后找了个旧的方法对应试试&#xff1a; &#x1f680; 本文将手把手教你在 Docker 环境中部署 Elasticsearch 7.10.1 IK分词器 拼音插件 Kibana&#xff0c;适配中文搜索…...

第14节 Node.js 全局对象

JavaScript 中有一个特殊的对象&#xff0c;称为全局对象&#xff08;Global Object&#xff09;&#xff0c;它及其所有属性都可以在程序的任何地方访问&#xff0c;即全局变量。 在浏览器 JavaScript 中&#xff0c;通常 window 是全局对象&#xff0c; 而 Node.js 中的全局…...

构建Docker镜像的Dockerfile文件详解

文章目录 前言Dockerfile 案例docker build1. 基本构建2. 指定 Dockerfile 路径3. 设置构建时变量4. 不使用缓存5. 删除中间容器6. 拉取最新基础镜像7. 静默输出完整示例 docker runDockerFile 入门syntax指定构造器FROM基础镜像RUN命令注释COPY复制ENV设置环境变量EXPOSE暴露端…...

Shell 解释器​​ bash 和 dash 区别

bash 和 dash 都是 Unix/Linux 系统中的 ​​Shell 解释器​​&#xff0c;但它们在功能、语法和性能上有显著区别。以下是它们的详细对比&#xff1a; ​​1. 基本区别​​ ​​特性​​​​bash (Bourne-Again SHell)​​​​dash (Debian Almquist SHell)​​​​来源​​G…...

从0开始学习R语言--Day17--Cox回归

Cox回归 在用医疗数据作分析时&#xff0c;最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据&#xff0c;往往会有很多的协变量&#xff0c;即使我们通过计算来减少指标对结果的影响&#xff0c;我们的数据中依然会有很多的协变量&#xff0c;且…...

ABAP设计模式之---“Tell, Don’t Ask原则”

“Tell, Don’t Ask”是一种重要的面向对象编程设计原则&#xff0c;它强调的是对象之间如何有效地交流和协作。 1. 什么是 Tell, Don’t Ask 原则&#xff1f; 这个原则的核心思想是&#xff1a; “告诉一个对象该做什么&#xff0c;而不是询问一个对象的状态再对它作出决策。…...

Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)

13.2. Oracle for Linux物理DG环境搭建 Oracle 数据库的DataGuard技术方案,业界也称为DG,其在数据库高可用、容灾及负载分离等方面,都有着非常广泛的应用,对此,前面相关章节已做过较为详尽的讲解,此处不再赘述。 需要说明的是, DG方案又分为物理DG和逻辑DG,两者的搭建…...

CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found

Nginx1.24编译时&#xff0c;报LuaJIT2.x错误&#xff0c; configuring additional modules adding module in /www/server/nginx/src/ngx_devel_kit ngx_devel_kit was configured adding module in /www/server/nginx/src/lua_nginx_module checking for LuaJIT 2.x ... not…...

IP选择注意事项

IP选择注意事项 MTP、FTP、EFUSE、EMEMORY选择时&#xff0c;需要考虑以下参数&#xff0c;然后确定后选择IP。 容量工作电压范围温度范围擦除、烧写速度/耗时读取所有bit的时间待机功耗擦写、烧写功耗面积所需要的mask layer...

虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)

当我们网关配置好了&#xff0c;DNS也配置好了&#xff0c;最后在虚拟机里还是无法访问百度的网址。 第一种情况&#xff1a; 我们先考虑一下&#xff0c;网关的IP是否和虚拟机编辑器里的IP一样不&#xff0c;如果不一样需要更改一下&#xff0c;因为我们访问百度需要从物理机…...

SOC-ESP32S3部分:30-I2S音频-麦克风扬声器驱动

飞书文档https://x509p6c8to.feishu.cn/wiki/SKZzwIRH3i7lsckUOlzcuJsdnVf I2S简介 I2S&#xff08;Inter-Integrated Circuit Sound&#xff09;是一种用于传输数字音频数据的通信协议&#xff0c;广泛应用于音频设备中。 ESP32-S3 包含 2 个 I2S 外设&#xff0c;通过配置…...

比较数据迁移后MySQL数据库和ClickHouse数据仓库中的表

设计一个MySQL数据库和Clickhouse数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

break 语句和 continue 语句

break语句和continue语句都具有跳转作用&#xff0c;可以让代码不按既有的顺序执行 break break语句用于跳出代码块或循环 1 2 3 4 5 6 for (var i 0; i < 5; i) { if (i 3){ break; } console.log(i); } continue continue语句用于立即终…...

使用 uv 工具快速部署并管理 vLLM 推理环境

uv&#xff1a;现代 Python 项目管理的高效助手 uv&#xff1a;Rust 驱动的 Python 包管理新时代 在部署大语言模型&#xff08;LLM&#xff09;推理服务时&#xff0c;vLLM 是一个备受关注的方案&#xff0c;具备高吞吐、低延迟和对 OpenAI API 的良好兼容性。为了提高部署效…...

更新 Docker 容器中的某一个文件

&#x1f504; 如何更新 Docker 容器中的某一个文件 以下是几种在 Docker 中更新单个文件的常用方法&#xff0c;适用于不同场景。 ✅ 方法一&#xff1a;使用 docker cp 拷贝文件到容器中&#xff08;最简单&#xff09; &#x1f9f0; 命令格式&#xff1a; docker cp <…...

【Linux】使用1Panel 面板让服务器定时自动执行任务

服务器就是一台24小时开机的主机&#xff0c;相比自己家中不定时开关机的主机更适合完成定时任务&#xff0c;例如下载资源、备份上传&#xff0c;或者登录某个网站执行一些操作&#xff0c;只需要编写 脚本&#xff0c;然后让服务器定时来执行这个脚本就可以。 有很多方法实现…...

Python爬虫(四):PyQuery 框架

PyQuery 框架详解与对比 BeautifulSoup 第一部分&#xff1a;PyQuery 框架介绍 1. PyQuery 是什么&#xff1f; PyQuery 是一个 Python 的 HTML/XML 解析库&#xff0c;它采用了 jQuery 的语法风格&#xff0c;让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...

Excel 怎么让透视表以正常Excel表格形式显示

目录 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总...

LINUX编译vlc

下载 VideoLAN / VLC GitLab 选择最新的发布版本 准备 sudo apt install -y xcb bison sudo apt install -y autopoint sudo apt install -y autoconf automake libtool编译ffmpeg LINUX FFMPEG编译汇总&#xff08;最简化&#xff09;_底部的附件列表中】: ffmpeg - lzip…...

初级程序员入门指南

初级程序员入门指南 在数字化浪潮中&#xff0c;编程已然成为极具价值的技能。对于渴望踏入程序员行列的新手而言&#xff0c;明晰入门路径与必备知识是开启征程的关键。本文将为初级程序员提供全面的入门指引。 一、明确学习方向 &#xff08;一&#xff09;编程语言抉择 编…...

WinUI3开发_使用mica效果

简介 Mica(云母)是Windows10/11上的一种现代化效果&#xff0c;是Windows10/11上所使用的Fluent Design(设计语言)里的一个效果&#xff0c;Windows10/11上所使用的Fluent Design皆旨在于打造一个人类、通用和真正感觉与 Windows 一样的设计。 WinUI3就是Windows10/11上的一个…...