JumpServer 简介安装

news2024/12/23 3:19:31

目录

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于树莓派4B的智能家居系统设计

目录 一、项目介绍 二、前期准备 1.硬件准备 2.开发环境 三、C语言的简单工厂模式 1.工厂模式介绍 2.类和对象 3.工厂模式的优缺点 四、树莓派的基本使用 1.树莓派刷机和登入 2.树莓派WiringPi库介绍 3.树莓派 CSI 摄像头配置 4.树莓派与其他模块接线 五、智能家居…

【Java】生成条形码工具类

报销单需要根据单号生成条形码 先看效果图 直接上代码&#xff0c;复制即可使用 /*** Description:生成条形码*/ public class BarCodeUtils {/*** 默认图片宽度*/private static final int DEFAULT_PICTURE_WIDTH 300;/*** 默认图片高度*/private static final int DEFAULT_…

【C++杂货铺】详解string

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 为什么学习string &#x1f4c1; 认识string&#xff08;了解&#xff09; &#x1f4c1; string的常用接口 &#x1f4c2; 构造函数 &#x1f4c2; string类对象的容量操作 &#x1f4c2; string类对象的访问以及遍历操…

智慧油气场站:油气行业实现数字化转型的关键一步

智慧油气场站&#xff1a;油气行业实现数字化转型的关键一步 在现代社会&#xff0c;能源供应是国家经济发展和人民生活的重要保障。而油气场站作为能源的重要供应和储存基地&#xff0c;扮演着至关重要的角色。此外&#xff0c;油气场站还可以为石油和天然气的生产提供支持。…

前端手册-实现挂坠灯笼效果

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

网红老阳推荐的蓝海项目,视频号带货怎么样?有优势吗?

老阳是一位在互联网创业领域颇具影响力的任务&#xff0c;他经常会在自己的社交媒体平台上分享一些他认为有潜力的蓝海项目和创业机会。近期&#xff0c;老阳推荐了一个备受关注的蓝海项目——视频号带货。那么&#xff0c;这个项目究竟怎么样呢?我们来分析一下。 首先&#x…

TypeScript 基础(一)

目录 一、概述 二、开发环境 三、数据类型 1.boolean 2.number 3.string 4.Array 5.type 6.tuple 7.enum 8.any 9.null / undefined 10.never 11.object 结束 一、概述 TypeScript 是一种由微软开发的开源编程语言。它是 JavaScript 的一个超集&#xff0c;这意…

【排序算法】推排序算法解析:从原理到实现

目录 1. 引言 2. 推排序算法原理 3. 推排序的时间复杂度分析 4. 推排序的应用场景 5. 推排序的优缺点分析 5.1 优点&#xff1a; 5.2 缺点&#xff1a; 6. Java、JavaScript 和 Python 实现推排序算法 6.1 Java 实现&#xff1a; 6.2 JavaScript 实现&#xff1a; 6.…

使用langchain搭建本地知识库系统(新)

使用langchain搭建自己的本地知识库系统&#xff08;新&#xff09; 前些时候字节上了自己的扣子&#xff0c;用来构建我们自己的 agent [AI 实战&#xff1a;手把手教你使用「扣子/coze」来搭建个人blog知识库 受到启发&#xff0c;想在本地或者自己的服务器上面搭建一个知识…

震惊!性能一下子提升10倍,用Performance面板分析性能瓶颈全流程!

工作中发现了一个下拉框打开的数据比较慢&#xff0c;并且打开弹框的时候会有相当长一段时间的延迟&#xff0c;下拉的弹框不是使用组件库的&#xff0c;而是自己封装的一个组件&#xff0c;怀疑存在数据量过大影响的情况&#xff0c;所以借助性能分析工具来找出具体的原因。 如…

渲染农场与并行处理:大规模渲染任务的高效解决方案

随着数字技术与计算机图形学的突飞猛进&#xff0c;大规模渲染任务已成为电影制作、游戏开发、建筑设计以及科学计算等诸多行业的常态化需求。面对这些日益增长的需求&#xff0c;渲染农场与并行处理技术凭借其卓越的效率和精准度&#xff0c;已然成为应对这些挑战的核心高效解…

bigemap在水利科学研究院是如何应用的?

使用场景&#xff1a; 1.数据采集&#xff1a;客户主要是做科研方向的&#xff0c;前期的工作内容就是野外调查使用Bigemap APP去采集点位数据回传到电脑上&#xff0c;电脑端再进行查看分类、二次编辑标注和统计数据。 2.矢量处理&#xff1a;客户其他部门用GPS采集回来的项目…

YUNBEE-腾讯云TDSQL MySQL和PostgreSQL TCA初级认证考试

腾讯云TDSQL(MySQL版)‍ TCA 数据库交付运维工程师-腾讯云TDSQL(MySQL版) - 课程体系 - 云贝教育 (yunbee.net) 培训概述 数据库交付运维工程师-腾讯云TDSQL&#xff08;MySQL版&#xff09;培训&#xff0c;将通过理论与上机演练相结合的方式&#xff0c;以腾讯分布式OLTP数…

波卡 Alpha 计划启动,呼唤先锋创新者重新定义 Web3 开发

原文&#xff1a;https://polkadot.network/blog/the-polkadot-alpha-program-a-new-era-for-decentralized-building-collaboration/ 编译&#xff1a;OneBlock 区块链领域不断发展&#xff0c;随之而来的是发展和创新机会的增加。而最新里程碑是令人振奋的 Polkadot Alpha …

OceanMind海睿思数据资产管理平台更新,文件资产管理能力大幅提升!

海睿思数据资产管理平台 再度迎来重磅更新&#xff01; 新版本的文件资产管理能力得到了大幅提升&#xff0c;更贴合项目实际使用场景&#xff0c;安全性更高、功能更全、使用更便捷。 本期更新亮点&#xff1a; 新增文件资产注册功能新增资产标签管理功能新增文件资产打标签…

非父子通信- event bus 事件总线

非父子通信 (兄弟) - event bus 事件总线 作用&#xff1a;非父子组件之间&#xff0c;进行简易消息传递。(复杂场景 → Vuex) 创建一个都能访问到的事件总线 (空 Vue 实例) → utils/EventBus.js import Vue from vue const Bus new Vue() export default Bus. A 组件(接收…

Springboot多环境切换最灵活配置,没有之一

在日常的开发中&#xff0c;一般都会分好几种环境&#xff0c;比如通常的 开发环境&#xff1a;一般在开发的过程中&#xff0c;一个比较随意地环境&#xff0c;通常可以随意重启&#xff0c;删除数据 测试环境&#xff1a;面向测试同学的环境&#xff0c;需要相对稳定&…

测试点点延迟和带宽的脚本总结

从队列中获取节点名 我们有时候需要从任务队列中取出完整的节点名称&#xff0c;比如cn[8044-8046,8358-8360,8926-8928,9002-9004]&#xff0c;可以给定参数input_str也可以在脚本中直接写死。 import re import subprocess import sysinput_str "cn[7512-7519,7545-75…

音视频数字化(视频线缆与接口)

目录 1、DVI接口 2、DP接口 之前的文章【音视频数字化(线缆与接口)】提到了部分视频线缆,今天再补充几个。 视频模拟信号连接从莲花头的“复合”线开始,经历了S端子、色差分量接口,通过亮度、色度尽量分离的办法提高画面质量,到VGA已经到了模拟的顶峰,实现了RGB的独立…

面试问答之MySQL数据库进阶

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380; MySQL架构&#x1f415;数据库引擎&#x1f415; InnoDB存储存储引擎&#x1f415;MYISAM &#x1f3e8;索引&#x1f415;哪些情况需要创建…