JumpServer 简介安装

目录

1、概念介绍

JumpServer 概述

JumpServer 功能

JumpServer 组件

JumpServer 架构

2、前置安装

环境要求

安装 ELRepo 库

更新内核

设置 grub2

安装 Python

配置 Python 虚拟环境

3、安装 Jumpserver Core 组件

下载安装

替换客户端组件

安装 Python 依赖库

安装 Redis

安装 MySQL

生成秘钥

修改 Jumpserver 配置文件

生成数据库表结构和初始化数据

编辑服务启动脚本

4、安装 Lina 组件(源码)

安装 node

安装 Lina

修改 Lina 配置文件

构建部署 lina

安装部署 Luna

5、部署 Koko 组件

安装 KoKo

修改配置文件

启动 KoKo

6、部署 Lion 组件

安装 guacamole

安装 Lion

启动服务

7、部署 Magus 组件

安装 wisp

安装 Magus

启动 wisp

8、设置 Nginx 整合各个组件

安装 Nginx

修改配置文件

创建 Jumpserver.conf 配置文件

启动 nginx

登录 jumpserver


1、概念介绍

跳板机概述

堡垒机概述

跳板机:就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。

跳板机缺点:没有实现对运维人员操作行为的控制和审计,使用跳板机的过程中 还是会出现误操作、违规操作导致的事故,一旦出现操作事故很难快速定位到原因和责任人;

堡垒机:即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。

堡垒机比跳板机多了实时收集、监控网络环境、集中报警等功能

JumpServer 概述

Jumpserver 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 的专业运维审计系统。

Jumpserver 使用 Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。

Jumpserver 采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发限制。 为互联网企业提供了认证,授权,审计,自动化运维等功能。

JumpServer 功能

用户组/用户 :添加组方便进行授权,用户是授权和登陆的主体.

资产组/资产/IDC : 主机信息简洁完整,用户自定义备注登录,支持自动获取主页硬件信息.

Sudo/系统用户/授权规则 :支持 sudo 授权,系统用户用于登陆客户端,授权是将用户、资产和系统用户关联起来.

在线/登录历史/命令记录/上传下载 : 在线实时监控用户操作,统计和录像回放用户操作内容,阻断控制,详细记录上传下载.

上传/下载 : 支持文件上传下载,实现 lrzsz 方式.

默认设置 : 默认管理用户,设置包括用户密码密钥,默认信息为了方便添加资产而设计.

JumpServer 组件

Jumpserver 为管理后台,管理员可以通过 Web 页面进行资产管理、用户管理、资产授权等操作

Coco 为 SSH Server 和 Web Terminal Server(网页 linux 客户端)。用户可以通过使用自己的账户登录 SSH 或者 Web Terminal 直接访问被授权的资产。不需要知道服务器的账户密码,新版本的 coco 被 koko 取代。

Luna 为 Web Terminal Server 前端页面,用户使用 Web Terminal 方式登录所需要的组件 Guacamole 为 Windows 组件,用户可以通过 Web Terminal 来连接 Windows 资产 (暂时只能通过 Web Terminal 来访问)

JumpServer 架构

Core

是 JumpServer 的核心组件,其他组件依赖此组件启动。

Koko

是服务于类 Unix 资产平台的组件,通过 SSH、Telnet 协议提供字符型连接。

Lina

是 JumpServer 的前端 UI 项目,主要使用 Vue,Element UI 完成。

Luna

是 JumpServer 的前端 UI 项目,主要使用 Angular CLI 完成.

Lion

是服务于 Windows 资产平台的组件,用于 Web 端访问 Windows 资产。

Omnidb

是服务于数据库的组件,用于可视化界面纳管数据库。

Razor

是服务于 RDP 协议组件,该组件主要功能是通过 JumpServer Client 方式访问 Windows 资产。

Magnus

是服务于数据库的组件,用于通过客户端代理访问数据库。

Celery

是处理异步任务的组件,用于执行 JumpServer 相关的自动化任务。

2、前置安装
环境要求
  • 操作系统 4 核 8G
  • MySQL 8
安装 ELRepo 库
# 导入ELRepo仓库的公共密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# 安装ELRepo仓库的yum源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
更新内核
# 查看可用的系统内核包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

# 装最新版本内核
yum --enablerepo=elrepo-kernel install -y kernel-ml
设置 grub2

内核安装好后,需要设置为默认启动选项并重启后才会生效

# 查看系统上的所有可用内核:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

设置新的内核为grub2的默认版本:设置GRUB_DEFAULT=0,通过上面查询显示的编号为 0 的内核作为默认内核:

sed -i 's/GRUB_DEFAULT=saved/GRUB_DEFAULT=0/g' /etc/default/grub

# 生成 grub 配置文件并重启
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

# 查看内核
uname -a

安装 Python
# 软件下载地址:我们下载的是python3.9.16
wget https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz


# 配置阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

# 安装依赖包
yum install -y gcc gcc-c++ zlib-devel bzip2-devel openssl-devel \
ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel \
db4-devel libpcap-devel xz-devel libffi-devel git

编译安装
tar -zxvf Python-3.9.16.tgz -C /usr/local/src/
cd /usr/local/src/Python-3.9.16/
./configure --prefix=/usr/local/python
make -j 4   
make install   

# 给python做软连接
ln -s /usr/local/python/bin/* /usr/local/bin/

# 查看python版本
python3 -V
配置 Python 虚拟环境

因为CentOS 6/7 自带的是 Python2,而Yum等工具依赖原来的 Python,为了不扰乱原来的环境我们来使用 Python 虚拟环境

# 创建 py3 虚拟环境
[root@cong13 ~] python3 -m venv /opt/py3 
# 载入 py3 虚拟环境
[root@cong13 ~] source /opt/py3/bin/activate  

# 把python虚拟环境设为开机自启动
(py3) [root@cong13 ~] echo "source /opt/py3/bin/activate" >> /root/.bashrc

看到下面的提示符代表成功,以后运行 Jumpserver 都要先运行以上 source 命令,以下所有命令均在该虚拟环境中运行:(py3) [root@cong13 ~]#

3、安装 Jumpserver Core 组件
下载安装

# 解压代码
tar -zxvf jumpserver-3.2.0.tar.gz -C /opt
cd /opt/
mv jumpserver-3.2.0/  jumpserver
替换客户端组件
cd jumpserver/
rm -f apps/common/utils/ip/geoip/GeoLite2-City.mmdb apps/common/utils/ip/ipip/ipipfree.ipdb

wget https://download.jumpserver.org/files/ip/GeoLite2-City.mmdb -O apps/common/utils/ip/geoip/GeoLite2-City.mmdb

wget https://download.jumpserver.org/files/ip/ipipfree.ipdb -O apps/common/utils/ip/ipip/ipipfree.ipdb



# 安装rpm依赖:直接安装rpm_requirements.txt文件中所有的软件
cd /opt/jumpserver/requirements/
sh rpm_pkg.sh

安装 Python 依赖库
# 修改pip安装加速:有时候我们pip下载特别慢,我们需要给pip指定国内的源来提升下载速度
mkdir /root/.pip
vim /root/.pip/pip.conf
---------------------------------------------------
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
---------------------------------------------------


# 安装之前先更新pip版本,不然会报错
(py3) [root@cong13 requirements] pip install --upgrade pip setuptools wheel
(py3) [root@cong13 requirements] pip install -r requirements.txt

# #升级pip
(py3) [root@cong13 requirements]#python -m pip install -U --force-reinstall pip 
安装 Redis

Jumpserver使用Redis做cache和分布式任务队列,如果有搭建好的redis集群,可以不用搭建。也可以使用二进制包安装redis。

# jumpserver需要6版本的redis,添加reids6仓库
yum -y install epel-release https://repo.ius.io/ius-release-el7.rpm 

yum -y install redis6  

# 启动redis
systemctl start redis   
# 把redins添加开机启动
systemctl enable redis  

安装 MySQL

# 解压并安装MySQL
tar -xf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar
yum install -y mysql-community-*

# 初始化数据
mysqld --initialize --console
# 更改数据目录权限
chown -R mysql:mysql /var/lib/mysql

# 启动服务
systemctl start mysqld
systemctl enable mysqld

# 查看MySQL初始密码
cat /var/log/mysqld.log | grep localhost
# 链接数据库
mysql -uroot -p'zQGQ9iijrd-o'
# 更改MySQL 密码
alter user root@'localhost' identified with mysql_native_password by 'jumpserver';

# 创建Jumpserver数据库并授权
mysql -uroot -p'123456'

# 创建数据库
mysql> database jumpserver default charset 'utf8';

# 创建用户
mysql> create user 'jumpserver'@'localhost' identified with mysql_native_password by 'jumpserver';

# 授予权限
mysql> grant all privileges on jumpserver.* to 'jumpserver'@'localhost';
mysql> flush privileges;

生成秘钥

生成随机密钥,等修改配置文件需要

# 生成秘钥
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
# MJhcCtzfTjOsLlD5kMlD4XCP2tfbQBFVWOZGQlmCyrU7bvZQ7

# 生成Token
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16;echo
# rAToYbsyCN6HoGCK

修改 Jumpserver 配置文件

注意: 配置文件是Python 格式,不要用TAB,而要用空格

cd /opt/jumpserver/
cp config_example.yml config.yml
vim config.yml
--------------------------------------------------------------------------
# 加密密钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
SECRET_KEY: MJhcCtzfTjOsLlD5kMlD4XCP2tfbQBFVWOZGQlmCyrU7bvZQ7

# SECURITY WARNING: keep the bootstrap token used in production secret!
# 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制
BOOTSTRAP_TOKEN: rAToYbsyCN6HoGCK

DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: jumpserver
DB_NAME: jumpserver

# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
# REDIS_PASSWORD:
--------------------------------------------------------------------------

生成数据库表结构和初始化数据
cd /opt/jumpserver/utils/
sh make_migrations.sh

解决第一个报错

cd /opt/jumpserver/apps/locale/zh/LC_MESSAGES/
rm -rf django.mo
msgfmt django.po
  • msgfmt是语言本地化的工具,用来编译语言翻译后的.po文件为.mo文件,这样系统在启动时候会扫描系统环境提取对应名字的.mo文件中的字符串替代原来的英文,实现本地化。
(py3) [root@cong13 LC_MESSAGES] mv messages.mo django.mo
(py3) [root@cong13 jumpserver] cd /opt/jumpserver/utils/
(py3) [root@cong13 utils] sh make_migrations.sh

运行 jumpserver

# 运行Jumpserver
(py3) [root@cong13 utils] cd /opt/jumpserver/

#可以-d参数在后台运行 ./jms start all -d, 确保已经载入 py3 虚拟环境
(py3) [root@cong13 jumpserver] ./jms start    
编辑服务启动脚本
vim /usr/lib/systemd/system/jms.service
--------------------------------------------------------------------------------------
[Unit]
Description=jms
After=network.target mariadb.service redis.service docker.service
Wants=mariadb.service redis.service docker.service

[Service]
Type=forking
Environment="PATH=/opt/py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
ExecStart=/opt/jumpserver/jms start all -d
ExecRestart=/opt/jumpserver/jms restart all -d
ExecStop=/opt/jumpserver/jms stop

[Install]
WantedBy=multi-user.target
--------------------------------------------------------------------------------------

# 启动服务
systemctl daemon-reload
systemctl restart jms
systemctl enable jms

# 查看端口
netstat -antup | grep 8080

4、安装 Lina 组件(源码)

Lina 是 JumpServer 的前端 UI 项目,主要使用 Vue,Element UI 完成

安装 node

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

wget https://nodejs.org/dist/v16.5.0/node-v16.5.0-linux-x64.tar.xz
tar -zxvf node-v16.5.0-linux-x64.tar.gz -C /usr/local/
chown -R root:root /usr/local/node-v16.5.0-linux-x64/
echo 'export PATH=/usr/local/node-v16.5.0-linux-x64/bin:$PATH' >>/etc/profile
source /etc/profile
node -v

安装 Lina

tar -zxvf lina-3.2.0.tar.gz -C /opt/

# 安装依赖
cd /opt/lina-3.2.0/
npm install -g yarn  
# 安装所有依赖包
yarn install   
  • npm 是 Node.js 的包管理工具,用来安装各种 Node.js 的扩展
  • Yarn 是由 Facebook 、Google、Exponent 、Tilde 联合推出的一个新的 Javascript 包管理工具,它的出现主要是为了弥补 npm 的一些缺陷。

修改 Lina 配置文件
(py3) [root@node-16 lina-3.2.0] sed -i "s@Version <strong>.*</strong>@Version <strong>v3.2.0</strong>@g" src/layout/components/Footer/index.vue

cp .env.development.example .env.development
vi .env.development

构建部署 lina
# 构建lina
(py3) [root@node-16 lina-3.2.0] yarn serve
(py3) [root@node-16 lina-3.2.0] yarn build

# 部署lina
(py3) [root@node-16  lina-3.2.0] cp -rf lina /opt/lina-v3.2.0

安装部署 Luna

tar -xf luna-v3.2.0.tar.gz -C /opt/

5、部署 Koko 组件

Koko 是 Go 版本的 coco,重构了 coco 的 SSH/SFTP 服务和 Web Terminal 服务。

安装 KoKo
# 安装客户端依赖
tar -xf kubectl.tar.gz
mv kubectl /usr/local/bin/rawkubectl
tar -xf helm-v3.9.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/rawhelm

chmod 755 /usr/local/bin/rawkubectl /usr/local/bin/rawhelm
chown root:root /usr/local/bin/rawkubectl /usr/local/bin/rawhelm
rm -rf linux-amd64


#KoKo安装
tar -zxvf koko-v3.2.0-linux-amd64.tar.gz -C /opt
cd /opt/koko-v3.2.0-linux-amd64/
mv kubectl /usr/local/bin/kubectl
修改配置文件
(py3) [root@cong13 koko-v3.2.0-linux-amd64] cp config_example.yml config.yml
(py3) [root@cong13 koko-v3.2.0-linux-amd64] vim config.yml

启动 KoKo
# &把程序调入后台运行。
(py3) [root@cong13 koko-v3.2.0-linux-amd64] ./koko & 

# 查看端口号
netstat -antup | grep 2222

# 把koko加入开机自启动
echo "cd /opt/koko-v3.2.0-linux-amd64 && ./koko & " >> /etc/rc.local
6、部署 Lion 组件

Lion 使用了 Apache 软件基金会的开源项目 Guacamole,JumpServer 使用 Golang 和 Vue 重构了 Guacamole 实现 RDP/VNC 协议跳板机功能。

安装 guacamole

tar -zxvf guacamole-server-1.4.0.tar.gz 

# 安装依赖包
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

yum install -y cairo-devel libjpeg-turbo-devel libjpeg-devel \
libpng-devel libtool libuuid-devel uuid-devel ffmpeg-devel \
freerdp-devel pango-devel libssh2-devel libtelnet-devel \
libvncserver-devel libwebsockets-devel pulseaudio-libs-devel \
openssl-devel libvorbis-devel libwebp-devel


# 编译安装
cd guacamole-server-1.4.0/
./configure --with-init-dir=/etc/init.d
make && make install
ldconfig
安装 Lion

tar -zxvf lion-v3.2.0-linux-amd64.tar.gz -C /opt/

# 修改配置文件
cd /opt/lion-v3.2.0-linux-amd64/
cp config_example.yml config.yml
vim config.yml

rAToYbsyCN6HoGCK
启动服务
(py3) [root@node-16 lion-v3.2.0-linux-amd64] /etc/init.d/guacd start
(py3) [root@node-16 lion-v3.2.0-linux-amd64] ./lion &


# 设置开机自启动
chkconfig --add guacd
chkconfig guacd on
echo "cd /opt/lion-v3.2.0-linux-amd64 && ./lion & " >> /etc/rc.local
7、部署 Magus 组件
安装 wisp

tar -zxvf wisp-v0.1.6-linux-amd64.tar.gz
mv wisp-v0.1.6-linux-amd64/wisp /usr/local/bin/
chmod 755 /usr/local/bin/wisp
chown root:root /usr/local/bin/wisp
安装 Magus
tar -zxvf magnus-v3.2.0-linux-amd64.tar.gz -C /opt/
chown root:root /opt/magnus-v3.2.0-linux-amd64/magnus
chmod 755 /opt/magnus-v3.2.0-linux-amd64/magnus

# 修改配置文件
cd /opt/magnus-v3.2.0-linux-amd64/
cp config_example.yml config.yml
vim wisp_config.yml
-----------------------------------------------------------
CORE_HOST: "http://127.0.0.1:8080"
BOOTSTRAP_TOKEN: rAToYbsyCN6HoGCK
WORK_DIR: "/opt/magnus-v3.2.0-linux-amd64"
COMPONENT_NAME: "magnus"
EXECUTE_PROGRAM: "/opt/magnus-v3.2.0-linux-amd64/magnus"
-----------------------------------------------------------
启动 wisp
(py3) [root@node-16 magnus-v3.2.0-linux-amd64] 
wisp --config /opt/magnus-v3.2.0-linux-amd64/wisp_config.yml &

# 设置开机自启动
echo "cd /opt/magnus-v3.2.0-linux-amd64 && wisp --config /opt/magnus-v3.2.0-linux-amd64/wisp_config.yml & " >> /etc/rc.local
8、设置 Nginx 整合各个组件
安装 Nginx

这里直接使用yum安装,也可以使用源码包安装

(py3) [root@cong13 ~] yum install -y nginx
修改配置文件

Nginx主要提供反向代理功能,这里要修改主配置文件里的默认server端口

vim /etc/nginx/nginx.conf  #把80端口修改为808

创建 Jumpserver.conf 配置文件

vim /etc/nginx/conf.d/jumpserver.conf

server {
  listen 80;
  # server_name _;

  client_max_body_size 5000m; 

  # 前端 Lina
  location /ui/ {
    try_files $uri / /index.html;
    alias /opt/lina-v3.2.0/;
    expires 24h;
  }

  # Luna 配置
  location /luna/ {
    try_files $uri / /index.html;
    alias /opt/luna-v3.2.0/;
    expires 24h;
  }

  # Core data 静态资源
  location /media/replay/ {
    add_header Content-Encoding gzip;
    root /opt/jumpserver/data/;
  }

  location /static/ {
    root /opt/jumpserver/data/;
    expires 24h;
  }

  # KoKo Lion 配置
  location /koko/ {
    # 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署
    # proxy_pass       http://127.0.0.1:5000;
    proxy_pass       http://127.0.0.1:5000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_buffering off;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }

  # lion 配置
  location /lion/ {
    # 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署
    # proxy_pass       http://127.0.0.1:8081;
    proxy_pass http://127.0.0.1:8081;
    proxy_buffering off;
    proxy_request_buffering off;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_ignore_client_abort on;
    proxy_connect_timeout 600;
    proxy_send_timeout 600;
    proxy_read_timeout 600;
    send_timeout 6000;
  }

  location /ws/ {
    # 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署
    # proxy_pass       http://127.0.0.1:8080;
    proxy_pass http://127.0.0.1:8080;
    proxy_buffering off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location ~ ^/(core|api|media)/ {
    # 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署
    # proxy_pass       http://127.0.0.1:8080;
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location / {
    rewrite ^/(.*)$ /ui/$1 last;
  }
}
启动 nginx
# 检查配置文件
nginx -t

启动nginx
systemctl start nginx
systemctl enable nginx
登录 jumpserver

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/438647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣刷题

文章目录 1. 双指针1.1 两数之和1.2 三数之和1.3 盛最多水的容器1.4 接雨水 2. 字串2.1 滑动窗口最大值 3. 动态规划4. 多维动态规划4.1 最长回文字串 1. 双指针 1.1 两数之和 思路&#xff1a;因为是有序数组&#xff0c; 1.2 三数之和 题目要求不能重复 思路&#xff1a;三…

FPGA 串口多字节发送,串口回环测试

串口接收 串口帧 设计文件 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2023/01/12 23:11:28 // Design Name: // Module Name: UART_Byte_Rx // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies…

python螺旋数字矩阵

python螺旋数字矩阵 给出数字个数n&#xff0c;输出1-n (0<n ≤999)和行数m (0<m ≤ 999)&#xff0c;从左上角的1开始&#xff0c;按照顺时针螺旋向内写方式&#xff0c;依次写出2,3.….&#xff0c;最终形成一个m行矩阵。 1.每行数字的个数一样多 2.列的数量尽可能少 3…

01-环境搭建、SpringCloud微服务-黑马头条

环境搭建、SpringCloud微服务(注册发现、服务调用、网关) 1)课程对比 2)项目概述 2.1)能让你收获什么 2.2)项目课程大纲 2.3)项目概述 随着智能手机的普及&#xff0c;人们更加习惯于通过手机来看新闻。由于生活节奏的加快&#xff0c;很多人只能利用碎片时间来获取信息&…

【netty系列-02】深入理解socket本质和BIO底层实现

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478 深入理解socket本质和bio底层实现 …

【RT-DETR有效改进】全新的SOATA轻量化下采样操作ADown(轻量又涨点,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块,其中YOLOv9针对于这个模块并没有介绍,只是在其项目文件中用到了,我将其整理出来用于我们的RT-DETR的项目,经过实验我发现该卷积模块(作为下采样模块)…

蓝桥杯备赛之二分专题

常用的算法二分模板 1. 在数组a[]中找大于等于x的第一个数的下标 //int ans lower_bound(a, a n, x) - a //相当于下方 int l 0, r n - 1; while(l < r) {int mid l r >> 1;if(a[mid] > x) r mid;else l mid 1; } cout << r;2. 在数组a[]中找大于…

间隔5分钟执行1次Python脚本设置步骤 —— 定时执行专家

《定时执行专家》是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件&#xff0c;用于在 Windows 系统上定时执行各种任务&#xff0c;包括执行脚本或程序。 下面是使用 "定时执行专家" 软件设置定时执行 Python 脚本的步骤&#xff1a; 步骤 1: 设置 P…

图遍历算法

图的遍历算法有两种&#xff1a;深度优先遍历、广度优先遍历算法。 深度优先遍历算法就是从起始结点开始&#xff0c;只要有相邻且未被访问的结点就要直接进行访问&#xff0c;直到最后不能向下遍历为止&#xff0c;再回溯寻找下一个策略。 广度优先遍历算法&#xff0c;就是从…

像SpringBoot一样使用Flask - 1.新建一个Flask项目

感谢各位对上一篇文章的喜爱&#xff0c;从事10年开发&#xff0c;希望借此可以简单实操下从SpringBoot到Flask的转型&#xff0c;少走一点弯路&#xff0c;多花一点时间在处理实际问题。 一、用pycharmConda新建一个Flask项目 二、得到一个Flask项目 三、运行起来访问下&#…

Spring Boot中实现图片上传功能的两种策略

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

selenium也能过某数、5s盾..

文章转载于&#xff1a;selenium也能过某数、5s盾… 直接安装: pip install undetected_chromedriver运行代码&#xff1a; import undetected_chromedriver as uc import timedriver uc.Chrome(executable_pathrC:\Users\chromedriver.exe,version_main111) driver.get(网…

单链表的实现(数据结构)

本篇博客主要是单链表&#xff08;无头单项不循环&#xff09;的实现的代码分享 说明&#xff1a;因为此单链表无头&#xff08;哨兵位&#xff09;&#xff0c;可以说成没有初始化也可以说初始化时没有一个有效地址作为单链表的起始地址 例如下面代码中的plist NULL。 所以在…

DEYO: DETR with YOLO for End-to-End Object Detection论文翻译

DEYO&#xff1a;DETR与YOLO用于端到端目标检测 摘要 DETR的训练范式在很大程度上取决于在ImageNet数据集上预训练其骨干。然而&#xff0c;由图像分类任务和一对一匹配策略提供的有限监督信号导致DETR的预训练不充分的颈部。此外&#xff0c;在训练的早期阶段匹配的不稳定性会…

iStoreOS系统内安装HomeAssistant服务

iStoreOS系统内安装HomeAssistant服务 1. HomeAssistant服务 HomeAssistant是一款基于Python的开源智能家居系统&#xff0c;简称HA。 HomeAssistant可以方便地连接各种外部设备&#xff0c;如智能设备、摄像头、邮件、短消息和云服务等&#xff0c;其成熟的可连接组件有近千…

【重温设计模式】迭代器模式及其Java示例

迭代器模式的介绍 在编程领域&#xff0c;迭代器模式是一种常见的设计模式&#xff0c;它提供了一种方法&#xff0c;使得我们可以顺序访问一个集合对象中的各个元素&#xff0c;而又无需暴露该对象的内部表示。你可以把它想象成一本书&#xff0c;你不需要知道这本书是怎么印…

最佳牛围栏(二分 + 前缀和)

最佳牛围栏 原题链接&#xff1a;https://www.acwing.com/problem/content/104/ 题目 思路 我们发现若是枚举答案的话&#xff0c;那么我们判断是否存在一个平均值大于等于mid&#xff0c;如果最优解是x&#xff0c;那么mid < x的时候&#xff0c;必然可以找到一段&#x…

二十七 超级数据查看器 讲解稿 APP的用途 能做什么

二十七 超级数据查看器 讲解稿 APP的用途 能做什么 ​ 点击此处 访问B站 以新页面观看教学视频 点击此处 访问豌豆荚 下载APP 讲解稿全文: 大家好&#xff0c;今天我们讲一下超级数据查看器 的用途 也就是讲软件有什么用&#xff0c;能做什么&#xff0c;应用场景&#xff0…

mongo和redis的数据备份和还原

redis 安装 Redis安装和基本使用&#xff08;windows版&#xff09; - 知乎 window环境下Redis7服务器的安装和运行_redis7 windows-CSDN博客 备份数据 Redis SAVE 命令用于创建当前数据库的备份。 该命令将在 redis 安装目录中创建dump.rdb文件 查询路径 CONFIG GET dir…

SAR ADC学习笔记(4)

CDAC电容阵列 一、电容失配 二、电容失配对CDAC线性度的影响 1.电容失配对DNL的影响 2.电容失配对INL的影响 三、分段结构的CDAC 四、CDAC开关切换方案&#xff1a;传统开关切换策略 第一次比较阶段&#xff1a;如果VP(1)-VN(1)<0 第一次比较阶段&#xff1a;如果VP(1)-VN…