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

自动化备份全网服务器数据平台

1.项目说明

1.1概述

  • 该项目共分为2个子项目,由环境搭建和实施备份两部分组成

  • 该项目旨在复习巩固系统服务部署使用、shell编程等知识,旨在让学生增加知识面,提高项目实习经历,充实简历

1.2项目组织方式及时间

  • 时间:建议一周内完成所有的项目搭建、压力测试、问题总结

  • 方式:通过VmWare17虚拟机实现平台搭建

  • 人数:3人小组

2.项目背景知识

2.1总体需求

  • 某企业里有一台Web服务器,里面的数据很重要,但是如果硬盘坏了数据就会丢失,现在领导要求把数据做备份,这样Web服务器数据丢失在可以进行恢复

  • 要求如下:

    • 每天00点整在Web服务器上按日期打包备份系统配置文件、网站程序目录及访问日志文件

    • 通过rsync命令推送到备份服务器上保存

    • 备份服务器定时清除旧记录

    • 搭建邮件告警平台

2.2备份需求

  • 所有服务器的备份目录必须都为/backup。

  • 要备份的系统配置文件包括但不限于:

    • 定时任务服务的配置文件(/var/spool/cron/root) (适合Web和NFS服务器)。

    • 开机自启动的配置文件(/etc/rc.local) (适合Web和NFS服务器)。

    • 日常脚本的目录 (/server/scripts)。

  • Web服务器要求

    • Web站点目录假定为/var/html/www,如果没有,可以先模拟创建。

    • Web服务器访问日志路径假定为/app/logs,如果没有,可以先模拟创建。

    • Web服务器本地保留打包后的7天备份数据即可(本地留存不能多于7天,因为数据太多硬盘会满)。

  • 备份服务器要求

    • 保留最近7天所有备份数据,保留6个月内每周一的所有数据副本。

    • 要按照备份数据服务器内网IP为目录名称,备份的文件按照时间、名称为文件名称。

    • 需要确保备份的数据尽量完整准确,在备份服务器上对备份的数据是否完整进行检查。

    • 备份服务器每天早晨8:00把备份成功或失败结果信息发送到系统管理员邮箱里。

服务器说明备份目录目录说明备注
all server/backup备份目录统一服务器本地备份目录,便于管理
all server/var/spool/cron/root定时任务服务配置文件系统配置文件
all server/etc/rc.local开机自启动配置文件系统配置文件
all server/server/scripts日常脚本目录统一服务器本地脚本目录,便于管理
Web server/var/www/htmlweb服务器站点目录mkdir -p /var/www/html
Web server/app/logsweb服务器访问日志路径mkdir -p /app/logs

3.Rsync概述

image-20250219093048093

3.1作用:
  • rsync:remote sync(远程同步),是一个在 Linux 和其他 Unix-like 系统上一个非常强大的命令行工具,用于计算机之间进行数据同步,可以当做文件复制工具,替代cp和mv命令,主页:https://rsync.samba.org/

3.2特点
  • 同步速度快:由于使用sync算法,其只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

  • 可以镜像保存整个目录树和文件系统

  • 可以很容易做到保持原来文件的权限、时间、软硬链接等

  • 无须特殊权限即可安装

  • 优化的流程,文件传输效率高

  • 可以使用rsh、ssh等方式来传输文件,当然也可以通过直接的socket连接

  • 支持匿名传输。

语法

   标准结构

rsync [选项] 源目录/文件 目标目录/文件-a, --archive:归档模式,保留所有文件属性。
-v, --verbose:详细输出。
-r, --recursive:递归地同步目录。
-z, --compress:使用压缩传输数据,可以减少网络带宽。
-e, --rsh=COMMAND:指定远程 shell 程序(例如 SSH)。
--delete:删除目标中不在源中的文件。
--exclude=PATTERN:排除符合指定模式的文件或目录。

本地同步

rsync -a source destination# -a包含-r的递归功能同时可以同步修改时间、权限等元信息,常用

远程同步

# 默认使用ssh协议传输rsync  -av  source/  username@remote_host:destination # 本地内容同步到远程即推送rsync  -av  username@remote_host:source/  destination # 远程内容同步到本地即拉取
# 若两端都有rsync进程,可以使用rsync协议传输
rsync  -av  source/  192.168.122.32::module/destination      # 有2个冒号

增量备份

# 只复制变动的内容rsync  -a  --delete  --link-dest  /compare/path  /source/path  /target/path# 分析# --link-dest参数指定基准目录/compare/path# 源目录/source/path跟基准目录进行比较# 之后找出变动的文件,将其拷贝到目标目录/target/path,未变动的文件会生成硬链接。# 该命令的第一次备份时为全量备份,之后为增量备份

3.项目环境

3.1项目拓扑结构

image-20250219090920275

3.2软硬件环境清单

  • 已知3台服务器主机名分别为web01、backup、nfs01,主机信息建下表。

主机名IP地址硬件软件
web01192.168.208.200

cpu:1颗2核

内 存:2GB

HDD:20GB

网 络:NAT

VmWare17

Centos7.9

nginx1.20

rsync3.1.2

nfs01192.168.208.201

cpu:1颗2核

内 存:2GB

HDD:20GB

网 络:NAT

VmWare17

Centos7.9

nfs rpcbind

rsync3.1.2

backup192.168.208.202

cpu:1颗2核

内 存:2GB

HDD:20GB

网 络:NAT

VmWare17

Centos7.9

mailx12.5

rsync3.1.2

Centos7.9的iso下载链接:https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.iso

4.任务清单

4.1项目环境搭建

  • 可以使用iventoy网启安装3台centos7.9服务器

  • 按照规划,最小化部署系统,关闭防火墙,禁用SELinux,确保能够联网。

4.2服务器部署

4.2.1Web服务器搭建部署
  • 验证Rsync服务能否推送成功。

  • 开发脚本实现打包备份、推送、校验、删除。

  • 配置定时任务每天0点定时推送(0时是时间的一个分割点)。

4.2.2NFS服务器搭建部署
  • 验证Rsync服务能否推送成功。

  • 开发脚本实现打包备份、推送、校验、删除。

  • 配置定时任务每天0点定时推送(0时是时间的一个分隔点)。

  • 配置脚本和web服务器类似,过程略。

4.2.3搭建备份服务器
  • rsync服务器搭建部署。

  • 开发脚本实现校验、删除、报警。

  • 配置实时任务每天6点实时执行。

  • 配置告警邮件发送平台

5.实施步骤

5.1环境搭建

5.1.1web01服务器环境搭建
  • 安装Centos7.9系统,替换yum源,连接xshell

  • 关闭防火墙和selinux,设置主机名

[root@localhost~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
[root@localhost yum.repos.d]# cd ..
[root@localhost etc]# rm -rf yum.repos.d
[root@localhost etc]#mkdir /etc/yum.repos.d
[root@localhost etc]#cd yum.repos.d/
进入之后用xftp传送一个新的Centos-7.repo
[root@localhost yum.repos.d]#vi /etc/selinux/config
在里面把这个修改成SELINUX=disabled
[root@localhost ~]# vi /etc/selinux/config
SELINUX=disabled
[root@localhost ~]# hostnamectl set-hostname web01
[root@localhost ~]# reboot

 5.1.2设置静态ip

[root@web01 ~]#vi  /etc/sysconfig/network-scripts/ifcfg-ens32

[root@web01 ~]# systemctl restart network# 安装所有软件
[root@web01 ~]# yum install vim  tree tar net-tools rsync nfs-utils -y

 5.1.3部署网站示例

[root@web01 ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@web01 ~]# yum  ma
[root@web01 ~]# yum  install  nginx  -y
[root@web01 ~]# mkdir  -p  /www/sczl
[root@web01 ~]# cd  /www/sczl
# 使用xftp将web源文件上传至/www/sczl,如图:

# 修改nginx配置文件[root@web01 ~]# vim  /etc/nginx/nginx.conf     # 修改第42行之后的路径
42         root         /www/sczl;
[root@web01 ~]# systemctl start nginx 
[root@web01 ~]# systemctl enable nginx # 测试:打开windows端浏览器输入服务端IP地址

5.2nfs服务器环境搭建
  • 安装Centos7.9系统,替换yum源,连接xshell,和web01修改不同

  • 关闭防火墙和selinux,设置主机名

  • [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld
    [root@localhost ~]# vi /etc/selinux/config
    SELINUX=disabled
    [root@localhost ~]# hostnamectl set-hostname nfs01
    [root@localhost ~]# reboot

    5.2.1设置静态ip

[root@nfs01 ~]# vi  /etc/sysconfig/network-scripts/ifcfg-ens32
[root@nfs01 ~]# systemctl restart network[root@nfs01 ~]# yum install vim  tree tar net-tools rsync -y

5.2.2 部署共享存储,nfs01为服务端,web01为客户端

# nfs01服务端操作
[root@nfs01 ~]# yum  install  rpcbind  -y
[root@nfs01 ~]# yum  install  nfs-utils  -y
[root@nfs01 ~]# mkdir  /nfsfile
[root@nfs01 ~]# echo  "welcome to www.openlab.com" > /nfsfile/readme
[root@nfs01 ~]# chmod  -Rf  777  /nfsfile
[root@nfs01 ~]# vim  /etc/exports    # 编辑nfs配置文件,添加如下内容
/nfsfile        192.168.208.0/24(rw,sync,all_squash)[root@nfs01 ~]# systemctl start  rpcbind
[root@nfs01 ~]# systemctl enable  rpcbind
[root@nfs01 ~]# systemctl start  nfs-server
[root@nfs01 ~]# systemctl enable  nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

 

# web01客户端操作:[root@web01 ~]# showmount  -e  192.168.208.201
Export list for 192.168.208.201:
/nfsfile 192.168.208.0/24
[root@web01 ~]# mkdir  /web_nfs01
[root@web01 ~]# mount -t nfs  192.168.208.201:/nfsfile  /web_nfs
[root@web01 ~]# cd  /web_nfs01
[root@web01 web_nfs01]# ls
readme
[root@web01 web_nfs01]# cd  ~
[root@web01 web_nfs01]# vim  /etc/fstab       # 永久挂载
192.168.208.201:/nfsfile   /web_nfs   nfs    defaults    0    0[root@web01 web_nfs01]# mount  -a
[root@web01 web_nfs01]# df  -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 900M     0  900M   0% /dev
tmpfs                    910M     0  910M   0% /dev/shm
tmpfs                    910M  9.4M  901M   2% /run
tmpfs                    910M     0  910M   0% /sys/fs/cgroup
/dev/sda3                 17G  1.9G   16G  12% /
/dev/sda1               1014M  144M  871M  15% /boot
tmpfs                    182M     0  182M   0% /run/user/0
192.168.208.201:/nfsfile   17G  1.6G   16G   9% /web_nfs01

5.3backup服务器环境搭建

  • 安装Centos7.9系统,替换yum源,连接xshell,跟web01一样

  • 关闭防火墙和selinux,设置主机名

  • [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld
    [root@localhost ~]# vi /etc/selinux/config
    SELINUX=disabled
    [root@localhost ~]# hostnamectl set-hostname backup
    [root@localhost ~]# reboot

 5.3.1设置静态ip

[root@backup ~]# vi  /etc/sysconfig/network-scripts/ifcfg-ens32

[root@backup ~]# systemctl restart network[root@backup ~]# yum install vim  tree tar net-tools rsync mailx -y

5.3.2修改rsync配置文件

# 注意:配置文件中下列注释要删除 
[root@backup ~]# vim /etc/rsyncd.conf

5.3.3 根据配置文件设置

# 创建rsync账户及共享目录并修改目录属主为rsync
[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync /backup# 开机并启动服务
[root@backup ~]# systemctl enable --now rsyncd
[root@backup ~]# ps -ef | grep rsync
root        661      1  0 10:49 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
root       1473   1435  0 11:22 pts/0    00:00:00 grep --color=auto rsync# 创建rsync虚拟账户名和密码,并赋予密码文件600权限
[root@backup ~]# echo "rsync:rsync123" > /etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password

5.4配置备份脚本

5.4.1配置web01客户端本地备份脚本

web01客户端主机需要打包备份的内容:

[root@web01 ~]#  cd  /www/sczl
[root@web01 sczl]# cd
[root@web01 ~]#  tree  /var/log/nginx
/var/log/nginx
├── access.log
└── error.log0 directories, 2 files
[root@web01 ~]# tree /www  
/www
└── sczl├── css│   ├── animate.min.css│   ├── common.min.css│   ├── font-awesome.css│   ├── fonts│   │   ├── FontAwesome.otf│   │   ├── fontawesome-webfont.eot│   │   ├── fontawesome-webfont.svg│   │   ├── fontawesome-webfont.ttf│   │   └── fontawesome-webfont.woff│   ├── style.css│   └── swiper-3.3.1.min.css├── dingban.mp4├── img│   ├── 1.jpg│   ├── aperture.png│   ├── bg11.png│   ├── bg1.png│   ├── bg22.png│   ├── bg2.jpg│   ├── bg2.png│   ├── bg33.png│   ├── bg3.jpg│   ├── bg3.png│   ├── bg44.png│   ├── bg4.jpg│   ├── bg4.png│   ├── bg55.png│   ├── bg5.jpg│   ├── bg5.png│   ├── bg6.jpg│   ├── bg7.jpg│   ├── flag.gif│   ├── logo.png│   ├── page2_1_1.jpg│   ├── page2_1_2.jpg│   ├── page2_1_3.jpg│   ├── page2_1_4.jpg│   ├── page2_1_5.jpg│   ├── page2_1bg.jpg│   ├── page2_1.png│   ├── page2_2bg.jpg│   ├── page2_2.jpg│   ├── page3left_bg.png│   ├── page3lefttop.png│   ├── page3right_1.png│   ├── page3right_2.png│   ├── page3right_3.png│   ├── page3right_4.png│   ├── page3right_bg.png│   ├── page4_1.jpg│   ├── page4_2.jpg│   ├── page4_3.jpg│   ├── page4_4.jpg│   ├── page4_5.jpg│   ├── page4_6.jpg│   ├── page4_7.jpg│   ├── page4_8.jpg│   ├── page5_right.png│   ├── page5_title.png│   ├── page6_right.png│   ├── page7_middle.png│   ├── shade.png│   ├── shubiao.png│   ├── title1.png│   ├── title2d.png│   ├── title2pbg.png│   ├── title2.png│   ├── title3.png│   └── title4.png├── index.html├── js│   ├── fullpage_js.js│   ├── jquery-1.10.1.min.js│   ├── swiper-3.3.1.jquery.min.js│   └── swiper.animate1.0.2.min.js└── temp└── index.html6 directories, 73 files
# 以及定时任务和备份脚本源文件 :/var/spool/cron/root、/etc/rc.local、/server/scripts

5.4.2 编写备份web01服务器的脚本

[root@web01 ~]# mkdir  /backup
[root@web01 ~]# mkdir -p  /server/scripts
[root@web01 ~]# vim  /server/scripts/backup.sh

[root@web01 ~]# vim /etc/rsync.password     # 客户端建立认证的文件密码如下:
rsync123                                    # 注意:只写密码[root@web01 ~]# chmod 600 /etc/rsync.password   # 密码认证文件必须为600

5.4.3测试

[root@web01 ~]#  bash  /server/scripts/backup.sh 
2025-04-11_Week05 192.168.208.200 start backup ......
Local backup successful, the backup files have been pushed to the backup server
[root@backup ~]# ls  /backup/192.168.208.200/
2025-04-10_Week04.flag  nginx_logs_2025-04-10_Week04_tar.gz  sys_file_bak_2025-04-10_Week04_tar.gz  www_2025-04-10_Week04_tar.gz
2025-04-11_Week05.flag  nginx_logs_2025-04-11_Week05_tar.gz  sys_file_bak_2025-04-11_Week05_tar.gz  www_2025-04-11_Week05_tar.gz

5.5配置nfs01客户端本地备份脚本

  • 5.5.1nfs01客户端主机需要打包备份的内容:

  • [root@nfs01 ~]# tree  /nfsfile/
    /nfsfile/
    └── readme0 directories, 1 file
    # 以及/var/log/message文件、mount  -l  挂载信息

    5.5.2编写备份nfs01服务器的脚本

  • [root@nfs01 ~]# mkdir  /backup
    [root@nfs01 ~]# mkdir -p  /server/scripts
    [root@nfs01 ~]# vim  /server/scripts/backup.sh

[root@nfs01 ~]# vim /etc/rsync.password     # 客户端建立认证的文件密码如下:
rsync123                                    # 注意:只写密码[root@nfs01 ~]# chmod 600 /etc/rsync.password   # 密码认证文件必须为600
[root@nfs01 ~]# ls -ld  /etc/rsync.password 
-rw-r--r-- 1 root root 9 Apr 10 09:13 /etc/rsync.password

5.5.3测试

[root@nfs01 ~]# bash  /server/scripts/backup.sh 
2025-04-11_Week05 192.168.208.201 start backup ......
Local backup successful, the backup files have been pushed to the backup server
# 在backup服务器中可以看到推送的数据
[root@backup ~]# ls  /backup/
192.168.208.200  192.168.208.201

5.6配置定时任务

5.6.1web01服务器编辑定时任务,实现每天00:00定时备份本地数据,并推送到Rsync服务器上

[root@web01 ~]# systemctl status  crond
● crond.service - Command SchedulerLoaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)Active: active (running) since Fri 2025-04-11 10:49:27 EDT; 47min agoMain PID: 704 (crond)CGroup: /system.slice/crond.service└─704 /usr/sbin/crond -nApr 11 10:49:27 web01 systemd[1]: Started Command Scheduler.
Apr 11 10:49:27 web01 crond[704]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 34% if used.)
Apr 11 10:49:27 web01 crond[704]: (CRON) INFO (running with inotify support)
# 注意若未安装可执行:
[root@web01 ~]# yum  install  crontabs
# 编辑定时任务[root@web01 ~]# crontab  -e    				# 添加:

  • 5.7nfs01服务器过程同上

  • 5.7.1backup服务器编写脚本,实现删除180天前的所有备份数据,但保存每周一的

[root@backup ~]# mkdir -p /server/scripts
[root@backup ~]# cd /server/scripts/
[root@backup scripts]# vim /server/scripts/del_bak_data.sh

5.7.2 backup服务器配置定时任务,实现服务端180天前数据自动删除

[root@backup ~]# crontab -e

5.8数据传输完整性验证与监控告警

5.8.1验证数据完整性

  • backup服务端针对客户端备份时的md5指纹数据,利用MD5命令进行验证,完成数据传输过程完整性验证。

  • [root@backup scripts]# vim send_mail.sh 

5.8.2配置邮件告警
  • 安装邮件服务

  • [root@backup ~]# yum  install  mailx  -y

    配置qq邮箱ssl证书

  • [root@backup ~]# mkdir -p /root/.certs
    [root@backup ~]# cd  /root/.certs[root@backup .certs]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt[root@backup .certs]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt[root@backup .certs]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt[root@backup .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
    Notice: Trust flag u is set automatically if the private key is present.

    配置邮件服务

  • [root@backup .certs]# vim  /etc/mail.rc
    # 最后一行后添加以下内容:
    set from=yourmail@qq.com
    set smtp=smtps://smtp.qq.com:465         
    set smtp-auth-user=yourmail@qq.com
    set smtp-auth-password=uebrl****eodhff
    set smtp-auth=login
    set nss-config-dir=/root/.certs/
    set ssl-verify=ignore
    

    测试邮件服务

  • [root@backup ~]# echo  "testmail"  |  mail  -s  "testmail"  yourmail@qq.com[root@backup ~]# bash /server/scripts/send_mail.sh

相关文章:

自动化备份全网服务器数据平台

1.项目说明 1.1概述 该项目共分为2个子项目,由环境搭建和实施备份两部分组成 该项目旨在复习巩固系统服务部署使用、shell编程等知识,旨在让学生增加知识面,提高项目实习经历,充实简历 1.2项目组织方式及时间 时间&#xff1a…...

Trea CN多多与主流AI编程工具万字解析

Trea CN多多与主流AI编程工具万字解析 (含数学建模、架构图、开发流程可视化) 一、数学建模:代码生成效率量化模型 1.1 全链路效率公式 T total N ⋅ ( 1 λ C S ) T check (1) T_{\text{total}} N \cdot \left( \frac{1}{\lambda} \…...

Django从零搭建卖家中心注册页面实战

在电商系统开发中,卖家中心是一个重要的组成部分,而用户注册与登陆则是卖家中心的第一步。本文将详细介绍如何使用Django框架从零开始搭建一个功能完善的卖家注册页面,包括前端界面设计和后端逻辑实现。 一、项目概述 我们将创建一个名为sel…...

如何进行预算考核

✅ 一、预算考核体系总体架构 模块内容说明考核内容1. 预算目标/指标完成情况2. 预算编制/执行情况双轮驱动,目标 + 执行双考核考核对象高层、中层、基层、后台支持分层分类考核考核周期月度(滚动)+ 季度(校验)+ 年度(决算)提高适应性和准确性考核工具指标体系、差错率评…...

django相关面试题

django相关面试题 1.django的生命周期 2.django中的orm查询如何自定义方法 3.django中的中间件的作用 4.django中间件,request进来经过哪些中间件,顺序是怎么样的 5.django中的csrf是什么 6.django每访问一次数据库都会创建一个连接吗 7.uwsgi gunicorn…...

【Java面试系列】Spring Cloud微服务架构中的分布式事务实现与性能优化详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Cloud微服务架构中的分布式事务实现与性能优化详解 - 3-5年Java开发必备知识 引言 在微服务架构中,分布式事务是一个不可避免的挑战。随着业务复杂度的提升,如何保证跨服务的数据一致性成为面试中的高频问题。本文将从基础到进…...

PostgreSQL 17深度解析(从17.0-17.4)

PostgreSQL 17自2024年9月发布以来,持续通过小版本迭代增强功能、优化性能并修复安全漏洞。本文将从17.0到17.4的每个版本切入,深度解析其新增特性、技术原理、性能提升及实践价值,帮助开发者、DBA及架构师全面掌握PostgreSQL 17的演进脉络。 一、PostgreSQL 17.0:基石奠定…...

人物4_Japanese

Now, I start my JaPan【Tokyo】 life, 【I go out of my country{China}, the reason is I want learn more new computer technologies in foreign, also it could let me know more different culture.】I like the place and most persons in here. The JaPan culture have…...

Go 语言中的 package main、 func main() 和main.go的使用规范

本文旨在解释 Go 语言中 package main 、 func main() 和main.go的关系及其使用规则,解决如下典型问题: 是否可以在一个项目中定义多个 func main()?是否可以在非 package main 中写 func main()?多个文件中都写 func main() 会冲…...

mac 终端 code 命令打开 vscode,修改 cursor占用

rm /usr/local/bin/code vim ~/.zshrc # 定义 cursor 函数,用于打开 Cursor 应用 function cursor {open -a "/Applications/Cursor.app" "$" }# 定义 code 函数,用于打开 Visual Studio Code function code {open -a "/Appli…...

【常用功能】下载文件和复制到剪切板

前言 前端人员在开发时经常会遇到: 后端给一个地址,需要去下载的需求。将页面的内容复制到剪切板 下载文件 我们先说下载文件,通常情况下我们会自己写上一个非常简单的工具函数。 思路如下: 创建一个a元素设置a元素跳转的链接…...

【ESP32-microros(vscode-Platformio)】

一、步骤 1、目前支持ESP32 2、同一个局域网 3、上位机要安装代理(电脑或者linux设备) 4、可直接通过USB下载,也可以使用官方烧录工具,具体的分区表地址要从USB烧录的时候日志查看,一共四个文件,第三个…...

如何使用AI辅助开发CSS3 - 通义灵码功能全解析

一、引言 CSS3 作为最新的 CSS 标准,引入了众多新特性,如弹性布局、网格布局等,极大地丰富了网页样式的设计能力。然而,CSS3 的样式规则繁多,记忆所有规则对于开发者来说几乎是不可能的任务。在实际开发中&#xff0c…...

OpenCV图像形态学详解

文章目录 一、什么是图像形态学?二、基本概念:结构元素三、基本形态学操作1. 腐蚀(Erosion)2. 膨胀(Dilation)3. 开运算(Opening)4. 闭运算(Closing) 四、高级…...

Java-servlet(完结篇)过滤器乱码解决与监听器

Java-servlet(完结篇)过滤器乱码解决与监听器 前言一、过滤器乱码解决二、监听器1. HttpSessionListener2. ServletContextListener3. ServletRequestListener 三、监听器的使用场景Java-servlet 结语 前言 在之前的 Java Servlet 学习中,我…...

【发布】dtns协议的js-sdk(实现a2a协议:agent2agent)

【发布】dtns协议的js-sdk(实现a2a协议:agent2agent) dtns协议简介 dtns协议是用于dtns.network分布式智体网络的通讯协议。主要目标是将各个独立的智体节点,通过dtns协议(dtns.network)连接在一起&#…...

深度学习总结(8)

模型工作流程 模型由许多层链接在一起组成,并将输入数据映射为预测值。随后,损失函数将这些预测值与目标值进行比较,得到一个损失值,用于衡量模型预测值与预期结果之间的匹配程度。优化器将利用这个损失值来更新模型权重。 下面是…...

[特殊字符] Hyperlane:为现代Web服务打造的高性能Rust文件上传解决方案

🚀 Hyperlane:为现代Web服务打造的高性能Rust文件上传解决方案 ▎开发者必备:为什么选择Hyperlane处理大文件上传? 在实时数据爆炸式增长的时代,开发者面临两大核心挑战: 如何实现TB级大文件的可靠传输如…...

英伟达开源253B语言模型:Llama-3.1-Nemotron-Ultra-253B-v1 模型情况

Llama-3.1-Nemotron-Ultra-253B-v1 模型情况 1. 模型概述 Llama-3.1-Nemotron-Ultra-253B-v1 是一个基于 Meta Llama-3.1-405B-Instruct 的大型语言模型 (LLM),专为推理、人类对话偏好和任务(如 RAG 和工具调用)而优化。该模型支持 128K 令…...

2025年智能合约玩法创新白皮书:九大核心模块与收益模型重构Web3经济范式

——从国库管理到动态激励的加密生态全栈解决方案 一、核心智能合约架构解析 1. 国库合约:生态财政中枢 作为协议的金库守卫者,国库合约通过多签冷钱包与跨链资产池实现资金沉淀。其创新点包括: 储备资产动态再平衡:采用预言机实…...

[250411] Meta 发布 Llama 4 系列 AI 模型 | Rust 1.86 引入重大语言特性

目录 Llama 4 家族登场:开启原生多模态 AI 创新新纪元Rust 1.86.0 版本发布亮点主要新特性与改进其他重要信息 Llama 4 家族登场:开启原生多模态 AI 创新新纪元 Meta AI 近日发布了其最新、最先进的 Llama 4 系列人工智能模型,标志着 AI 技术…...

缓存不只是加速器:深入理解 Redis 的底层机制

一、Redis 是什么?为什么我们需要它? Redis(Remote Dictionary Server)是一种高性能的内存型键值对数据库。 通俗地讲,它就像一个超快的、放在内存中的超级字典,你可以用它来存数据、查数据,而…...

windows虚拟内存

windows的虚拟内存只是 虚拟内存技术的一个拓展, 叫他分页文件更好, 真正的虚拟内存是 CPU 内存管理单元 用于调度物理内存和磁盘衍生出来的技术. 在此基础上, 虚拟内存会根据页表 去物理内存中找数据, 找不到就去磁盘找, 找到之后再登记到页表. 这里的磁盘就是window系统中所…...

Ajax------免刷新地前后端交互

本文略带PHP代码需要在PHP环境下使用 介绍 AJAX (Asynchronous JavaScript and XML) 是一种创建快速动态网页应用的开发技术,它允许网页在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。例如,在我们做爬虫的时候发现有些…...

python办公自动化---pdf文件的读取、添加水印

需要安装包:pdfminer、pypdf2 一、读取pdf中的内容 from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterprete…...

下一代数据架构全景:云原生实践、行业解法与 AI 底座 | Databend Meetup 成都站回顾

3 月底,Databend 2025 开年首场 Meetup 在成都多点公司成功举办!活动特别邀请到四位重量级嘉宾:多点科技数据库架构师王春涛、多点DMALL数据平台负责人李铭、Databend联合创始人吴炳锡,以及鹏城实验室王璞博士。在春日的蓉城&…...

Kubernetes容器编排与云原生实践

第一部分:Kubernetes基础架构与核心原理 第1章 容器技术的演进与Kubernetes的诞生 1.1 虚拟化技术的三次革命 物理机时代:资源浪费严重,利用率不足15% 虚拟机突破:VMware与Hyper-V实现硬件虚拟化,利用率提升至50% …...

vue项目使用html2canvas和jspdf将页面导出成PDF文件

一、需求: 页面上某一部分内容需要生成pdf并下载 二、技术方案: 使用html2canvas和jsPDF插件 三、js代码 // 页面导出为pdf格式 import html2Canvas from "html2canvas"; import jsPDF from "jspdf"; import { uploadImg } f…...

JAVA实现在H5页面中点击链接直接进入微信小程序

在普通的Html5页面中如何实现点击URL链接直接进入微信小程序,不需要扫描小程序二维码? 网上介绍的很多方法是在小程序后台设置Schema,不过我进入我的小程序后台在开发设置里面 没有找到设置小程序Schema的地方,我是通过调用API接口…...

深入剖析 Kafka 的零拷贝原理:从操作系统到 Java 实践

Kafka 作为一款高性能的分布式消息系统,其卓越的吞吐量和低延迟特性得益于多种优化技术,其中“零拷贝”(Zero-Copy)是核心之一。零拷贝通过减少用户态与内核态之间的数据拷贝,提升了 Kafka 在消息传输中的效率。本文将…...

深度学习:AI 大模型时代的智能引擎

当 Deepspeek 以逼真到难辨真假的语音合成和视频生成技术横空出世,瞬间引发了全球对 AI 伦理与技术边界的激烈讨论。从伪造名人演讲、制造虚假新闻,到影视行业的特效革新,这项技术以惊人的速度渗透进大众视野。但在 Deepspeek 强大功能的背后…...

【Flask开发】嘿马文学web完整flask项目第4篇:4.分类,4.分类【附代码文档】

教程总体简介:2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 1.5数据库设计 2.用户认证 Json Web Token(JWT) 3.书架 4.1分类列表 5.搜索 5.3搜索-精准&高匹配&推荐 6.小说 6.4推荐-同类热门推荐 7.浏览记录 8.1配置-阅读偏好 8.配置 9.1项目…...

【MySQL】002.MySQL数据库基础

文章目录 数据库基础1.1 什么是数据库1.2 基本使用创建数据库创建数据表表中插入数据查询表中的数据 1.3 主流数据库1.4 服务器,数据库,表关系1.5 MySQL架构1.6 SQL分类1.7 存储引擎1.7.1 存储引擎1.7.2 查看存储引擎1.7.3 存储引擎对比 前言&#xff1a…...

Python爬取视频的架构方案,Python视频爬取入门教程

文章目录 前言方案概述架构设计详细实现步骤1.环境准备2. 网页请求模块3. 网页解析模块4. 视频下载模块5. 异常处理与日志模块 代码示例:性能优化注意事项 前言 以下是一个全面的使用 Python 爬取视频的架构方案,包含方案概述、架构设计、详细实现步骤、…...

ERC-20 代币标准

文章目录 一、什么是 ERC-20?核心价值:互操作性简化开发生态基石 二、ERC-20 的六大核心功能基础功能授权与代理转账事件通知 三、ERC-20 代币的典型应用场景四、ERC-20 的技术优势与局限性优势:局限性: 五、ERC-20 代币的创建步骤…...

SpringBoot实战1

SpringBoot实战1 一、开发环境,环境搭建-----创建项目 通过传统的Maven工程进行创建SpringBoot项目 (1)导入SpringBoot项目开发所需要的依赖 一个父依赖:(工件ID为:spring-boot-starter-parent&#xf…...

GSO-YOLO:基于全局稳定性优化的建筑工地目标检测算法解析

论文地址:https://arxiv.org/pdf/2407.00906 1. 论文概述 《GSO-YOLO: Global Stability Optimization YOLO for Construction Site Detection》提出了一种针对建筑工地复杂场景优化的目标检测模型。通过融合全局优化模块(GOM)​、稳定捕捉模块(SCM)​和创新的AIoU损失函…...

解读json.loads函数参数

json.loads()函数是解码JSON字符串为Python对象的核心工具。本文将深入探讨json.loads()函数的各个参数。 一、基本功能与输入类型 1. 功能概述 json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=N…...

2025.04.10-拼多多春招笔试第一题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 神奇公园的福娃占卜 问题描述 LYA在一个神奇的公园里发现了一条特殊的小径,小径上排列着一群可爱的福娃玩偶。这条小径有 n n...

【学习笔记】CPU 的“超线程”是什么?

1. 什么是超线程? 超线程(Hyper-Threading)是Intel的技术,让一个物理CPU核心模拟出两个逻辑核心。 效果:4核CPU在系统中显示为8线程。 本质:通过复用空闲的硬件单元(如ALU、FPU)&a…...

Docker Harbor

下载Harbor安装包 wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz 解压安装包 tar xvf harbor-offline-installer-v2.5.0.tgz cd harbor 配置harbor vi harbor.yml hostname: registry.example.com # Harbor …...

天梯集训笔记整理

1.着色问题 直接标注哪些行和列是被标注过的&#xff0c;安全格子的数量就是未标注的行*列 #include <bits/stdc.h> using namespace std;const int N 1e510; int hang[N],lie[N];int main(){int n,m;cin>>n>>m;int q;cin>>q;while(q--){int x,y;ci…...

C语言复习笔记--指针(4)

在经过前几篇的复习后我们已经了解了大部分指针的类型,今天让我们继续复习指针的其他内容吧. 函数指针变量 函数指针变量的创建 什么是函数指针变量呢&#xff1f;函数指针变量应该是⽤来存放函数地址的&#xff0c;未来通过地址能够调⽤函数的。 那么函数是否有地址呢&#x…...

008二分答案+贪心判断——算法备赛

二分答案贪心判断 有些问题&#xff0c;从已知信息推出答案&#xff0c;细节太多&#xff0c;过程繁杂&#xff0c;不易解答。 从猜答案出发&#xff0c;贪心地判断该答案是否合法是个不错的思路&#xff0c;这要求所有可能的答案是单调的&#xff08;例&#xff1a;x满足条件…...

Netty之内存池的原理和实战

深入理解Netty的内存池机制及其应用实践 在高性能网络编程中&#xff0c;内存管理对于系统的稳定性和性能至关重要。Netty作为一个高效的网络通信框架&#xff0c;通过引入内存池机制有效地解决了内存分配和回收频繁带来的性能瓶颈和内存碎片问题。本文将深入探讨Netty内存池的…...

Elasticsearch 向量数据库,原生支持 Google Cloud Vertex AI 平台

作者&#xff1a;来自 Elastic Valerio Arvizzigno Elasticsearch 将作为第一个第三方原生语义对齐引擎&#xff0c;支持 Google Cloud 的 Vertex AI 平台和 Google 的 Gemini 模型。这使得联合用户能够基于企业数据构建完全可定制的生成式 AI 体验&#xff0c;并借助 Elastics…...

《算法笔记》3.1小节——入门模拟->简单模拟

1001 害死人不偿命的(3n1)猜想 #include <iostream> using namespace std;int main() {int n,count0;cin>>n;while(n!1){if(n%20) n/2;else n(3*n1)/2;count1;}std::cout <<count;return 0; }1032 挖掘机技术哪家强 #include <iostream> using namespa…...

每日一题(小白)暴力娱乐篇24

由题已知这是一个匹配题目&#xff0c;题目已经说了三阶幻方是给定的&#xff0c;经过镜像和旋转&#xff0c;镜像*2旋转*4&#xff1b; 总共八种方案&#xff0c;然后接收每次的数据去匹配&#xff08;跳过0&#xff09;&#xff0c;如果匹配就输出匹配的数组&#xff0c;如果…...

C++:函数模板类模板

程序员Amin &#x1f648;作者简介&#xff1a;练习时长两年半&#xff0c;全栈up主 &#x1f649;个人主页&#xff1a;程序员Amin &#x1f64a; P   S : 点赞是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全…...

第18章:基于Global Context Vision Transformers(GCTx_unet)网络实现的oct图像中的黄斑水肿和裂孔分割

1. 网络概述 GCTx-UNET是基于传统UNet架构的改进版本&#xff0c;主要引入了以下几个关键创新&#xff1a; GCT模块&#xff1a;全局上下文变换器(Global Context Transformer)模块 多尺度特征融合&#xff1a;增强的特征提取能力 改进的跳跃连接&#xff1a;优化编码器与解…...