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.ipdbwget https://download.jumpserver.org/files/ip/GeoLite2-City.mmdb -O apps/common/utils/ip/geoip/GeoLite2-City.mmdbwget 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: rAToYbsyCN6HoGCKDB_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.vuecp .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/rawhelmchmod 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.rpmyum 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; # 前端 Linalocation /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.mzph.cn/news/727505.shtml

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

相关文章

【Web】浅浅地聊SnakeYaml反序列化两条常见利用链

目录 关于Yaml 关于SnakeYaml SnakeYaml反序列化利用 JdbcRowSetImpl链 ScriptEngineManager链 复现 基本原理 继续深入 关于Yaml 学过SpringBoot开发的师傅都知道&#xff0c;YAML和 Properties 文件都是常见的配置文件格式&#xff0c;用于存储键值对数据。 这里举…

干货分享③:免费制作产品管理系统!

他来了&#xff0c;他来了&#xff0c;他带着码上飞CodeFlying走来了&#xff01;今天继续为大家带来一期干货分享&#xff0c;教大家如何免费使用码上飞来的开发产品管理系统 &#xff01; 一、登陆官网 码上飞 CodeFlying | AI 智能软件开发平台&#xff01; 点击立即体验注…

服务器严重不够啊

必需采购服务器了&#xff0c;

一个比较全面实用的C#帮助类、工具类库

前言 经常会有一些同学会问为什么感觉我身边的大佬写一个功能会这么快&#xff1f;一个类似的模块大佬可能半天就搞定了&#xff0c;而我要搞一两天。其实工作久了你会发现很多常用公共的帮助类和工具类&#xff0c;如常见的Excel数据导入导出、文件操作、字符串操作、数据转换…

从零搭建React18.2+ReactRoute6.22+TS5+RTK2.2搭配antd5+antd-style书写All in Js完整体验项目规范

1. 使用CRA创建项目 全局设置npm淘宝镜像源 npm config set registry https://registry.npmmirror.com -g使用最新版create-react-app初始化项目结构 npx create-react-app custom-template --template typescript初始化项目之后在package.json文件中配置使用node>18.0.0…

WordPress供求插件API文档:用户登录

该文档为WordPress供求插件文档&#xff0c;详情请查看 WordPress供求插件&#xff1a;一款专注于同城生活信息发布的插件-CSDN博客文章浏览阅读67次。WordPress供求插件&#xff1a;sliver-urban-life 是一款专注于提供同城生活信息发布与查看的插件&#xff0c;该插件可以实…

windows下编译boost1.84.0库

boost系列文章目录 文章目录 boost系列文章目录前言一、boost编译二、boost使用三 、参考 前言 Boost简介 官方网址 Boost提供免费的同行评审的可移植C源代码库。 我们强调与C标准库配合良好的库。Boost库旨在广泛使用&#xff0c;并可在广泛的应用程序中使用。Boost许可证鼓…

SpringBoot+Maven多环境配置模式

我这里有两个配置文件 然后在最外层的父级POM文件里面把这个两个配置文件写上 <profiles><profile><id>druid</id><properties><spring.profiles.active>druid</spring.profiles.active></properties><activation><…

sensor_msgs::LaserScan雷达数据转换成pcl::PointXYZ数据类型

文章目录 创建工作空间、功能包功能包文件 package.xml头文件、源码文件laserscan_to_pointcloud.hlaserscan_to_pointcloud.cc 代码解读编译文件 CMakeLists.txt运行效果 截图 创建工作空间、功能包 catkin_create_pkg laserscan_to_pointcloud sensor_msgs roscpp pcl_conve…

分享关于如何解决系统设计问题的逐步框架

公司广泛采用系统设计面试&#xff0c;因为在这些面试中测试的沟通和解决问题的技能与软件工程师日常工作所需的技能相似。面试官的评估基于她如何分析一个模糊的问题以及如何逐步解决问题。测试的能力还包括她如何解释这个想法&#xff0c;与他人讨论&#xff0c;以及评估和优…

回溯算法07-子集(Java/子集问题)

.子集 题目描述 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[],[…

ChatGPT高效提问——说明提示技巧

ChatGPT高效提问——说明提示技巧 现在&#xff0c;让我们开始体验“说明提示技巧”&#xff08;IPT, Instructions Prompt Technique&#xff09;和如何用它生成来自ChatGPT的高质量的文本。说明提示技巧是一个通过向ChatGPT提供需要依据的具体的模型的说明来指导ChatGPT输出…

不伤耳朵的蓝牙耳机推荐,骨传导耳机选购前必知的几大要点

在目前的蓝牙耳机市场上&#xff0c;骨传导蓝牙耳机以其独特的设计和不伤耳朵的好处而受到广泛关注。骨传导蓝牙耳机通过骨头传导声音&#xff0c;无需进入耳道&#xff0c;从而减少了耳朵的不适和潜在伤害。 骨传导蓝牙耳机这种开放式的设计允许用户在享受音乐的同时&#xf…

lvs+keepalive

虚拟路由冗余协议(Virtual Router Redundancy Protocol&#xff0c;简称VRRP) VRRP能够在不改变组网的情况下&#xff0c;将多台路由器虚拟成一个虚拟路由器&#xff0c;通过配置虚拟路由器的IP地址为默认网关&#xff0c;实现网关的备份。 协议版本: VRRPv2&#xff08;常用&…

双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的应用

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到&#xff0c;要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时&#xff0c;提到要把减污降碳协同增效作为促…

一文掌握:电力管理系统该的功能和界面设计

一、什么电力管理系统 电力管理系统是一个用于监控、控制和优化电力系统运行的软件系统。它集成了实时数据采集、数据分析、决策支持和远程控制等功能&#xff0c;旨在提高电力系统的运行效率、可靠性和安全性。 电力管理系统是一个集成了数据采集、监控、分析和控制等功能的软…

vue面试--9, 1 ObjectProperty与vue3Proxy区别。2 MVVM的理解 3 双向绑定原理?

1 ObjectProperty与vue3Proxy区别 2 MVVM的理解 3 双向绑定原理&#xff1f;

如何在小程序中绑定身份证

在小程序中绑定身份证信息是一项常见的需求&#xff0c;特别是在需要进行实名认证或者身份验证的场景下。通过绑定身份证信息&#xff0c;可以提高用户身份的真实性和安全性&#xff0c;同时也为小程序提供了更多的个性化服务和功能。下面就介绍一下怎么在小程序中绑定居民身份…

Unity性能优化篇(四) GPU Instancing

使用GPU Instancing可以在一个Draw Call中同时渲染多个相同或类似的物体&#xff0c;从而减少CPU和GPU的开销。 官方文档&#xff1a;https://docs.unity3d.com/Manual/GPUInstancing.html 启用GPU Instancing&#xff0c;我们可以选中一个材质&#xff0c;然后在Inspector窗口…

Java EE之线程安全问题

一.啥是线程安全问题 有些代码&#xff0c;在单个线程执行时完全正确&#xff0c;但同样的代码让多个线程同时执行&#xff0c;就会出现bug。例如以下代码&#xff1a; 给定一个变量count&#xff0c;让线程t1 t2分别自增5000次&#xff0c;然后进行打印&#xff0c;按理说co…