CentOS 7下JumpServer安装及配置(超详细版)
前言
Jumpserver是一种用于访问和管理远程设备的Web应用程序,通常用于对服务器进行安全访问。它基于SSH协议,提供了一个安全和可管理的环境来管理SSH访问。Jumpserver是基于Python开发的一款开源工具,其提供了强大的访问控制功能,可以轻松实现用户、主机、命令和审计日志的管理。
Jumpserver的主要功能包括:
访问控制:Jumpserver提供了灵活的访问控制,可以根据用户、角色、主机、命令和时间等因素实现精细的控制。
统一认证:Jumpserver支持LDAP、AD、Radius等认证方式,可以实现与企业内部认证系统的集成。
会话管理:Jumpserver可以记录所有SSH会话并生成审计日志,以便管理人员了解用户的操作情况。
实时监控:Jumpserver可以实时监控SSH会话,并提供了实时监控面板,可以随时了解用户的操作情况。
审计日志:Jumpserver提供了完整的审计日志功能,包括用户登录、会话记录、命令执行情况等,方便管理人员进行安全审计和追溯。
多租户:Jumpserver支持多租户功能,可以实现不同租户的资源隔离和安全管理。
总之,Jumpserver是一款功能强大的安全访问控制系统,可以为企业提供强大的安全管理和审计功能。
目录
1 环境配置
2 修改字符集
3 安装软件包
4 编译安装
5 克隆(git clone)
6 下载Jumpserver
7 配置Jumpserver
7.1 安装所需的Python modules
7.2 安装Redis
7.3 安装MySQL
7.4 修改Jumpserver配置文件
7.5 把配置写入config.yml文件
8 启动/关闭Jumpserver
9 部署koko
9.1 使用docker部署
9.2 手工下载部署
9.2.1 部署
9.2.2 启动koko
10 部署guacamole
10.1 部署
10.2 列出本地镜像
11 部署luna
12 配置nginx
12.1 nginx的安装
12.2 配置nginx
12.3 运行nginx
12.4 修改nginx的主配置文件
13 Jumpserver登录测试
1 环境配置
(1)关闭防火墙。
systemctl stop firewalld
(2)关闭SELinux。
setenforce 0
# setenforce 1 #设置SELinux为强制模式
# setenforce 0 #设置SELinux为宽容模式
普及:
获取SELinux状态:
getenforce
getenforce是一个Linux命令,用于查看SELinux(Security-Enhanced Linux)安全机制的状态(SELinux是一款基于Linux内核的安全模块)。该命令可以显示当前SELinux的强制模式状态:enforcing(强制模式)、permissive(宽容模式)或disabled(禁用模式)。
2 修改字符集
修改字符集,否则可能报“input/output error”问题,因为日志里打印了中文。【逐个输入并运行以下命令】
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
3 安装软件包
yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git

如图,显示“完毕!”即表示我们安装成功!
接下来我们使用wget命令下载个Python的包,下载时间过长,耐心等待。
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz

为了确保我们安装成功,我们可以使用ls命令查看下
![]()
如图即表示安装成功~接下来我们使用tar命令解压压缩包。
tar xf Python-3.6.1.tar.xz
使用ls命令查看,发现有Python-3.6.1即表示我们解压成功!
![]()
4 编译安装
首先我们要进入到Python-3.6.1这个目录。
cd Python-3.6.1
编译安装(时间漫长,耐心等待)
./configure && make && make install

5 克隆(git clone)
进入opt目录下
cd /opt
使用Python3的环境。
python3 -m venv py3
source /opt/py3/bin/activate
运行完毕后会出现:(py3) [root@localhost opt]#
使用git命令克隆
git clone git://github.com/kennethreitz/autoenv.git
【问题解决】 http://t.csdnimg.cn/OQUcr
问题一:
fatal: unable to connect to github.com:
github.com[0: 20.205.243.166]: errno=????

这是因为有些网络环境可能会限制Git 协议默认使用端口的访问,或者直接阻止使用Git协议。因此,我们需要将git://github.com/替换为https://github.com/,这样可以确保与GitHub进行通信。
git clone https://github.com/kennethreitz/autoenv.git
问题二:
fatal: unable to access 'https://github.com/kennethreitz/autoenv.git/': TCP connection reset by peer

我们需要取消http和https代理。
git config --global --unset http.proxy
git config --global --unset https.proxy

如图即表示我们成功啦~
克隆完成后,source默认使用bashrc
echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc
使环境变量生效。
source ~/.bashrc
6 下载Jumpserver
我们还是使用克隆命令(git clone)下载并进入jumpserver目录(cd jumpserver)并将工作目录切换到主分支(git checkout master)。(时间漫长,耐心等待)
git clone https://github.com/jumpserver/jumpserver.git && cd jumpserver && git checkout master
在此过程中遇到同等问题还是取消http、https代理即可。

7 配置Jumpserver
7.1 安装所需的Python modules
进入 jumpserver 目录时将自动载入 python 虚拟环境.
echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env
安装依赖RPM包
cd requirements/
输入y

yum -y install $(cat rpm_requirements.txt)
安装Python依赖
pip install --upgrade pip

阿里云源下载(更快)
pip install -r requirements.txt
【问题解决】
ERROR: Could not open requirements file: [Errno 2] 没有那个文件或目录: 'requirements.txt'
![]()
先创建requirements.txt
pip freeze > requirements.txt
重新执行命令
pip install -r requirement.txt
7.2 安装Redis
yum -y install redis

设置开机自启
systemctl enable redis

启动redis
systemctl start redis
7.3 安装MySQL
在centos里,默认的数据库是mariadb
yum -y install mariadb mariadb-devel mariadb-server

启动mariadb
systemctl start mariadb
设置开机自启
systemctl enable mariadb

进入mariadb
mysql

创建jumpserver数据库默认使用utf8字符集
create database jumpserver default charset 'utf8';

给本机授权
grant all on jumpserver.* to 'jumpserveradmin'@'127.0.0.1' identified by 'jumpserverpwd';

刷新数据库
flush privileges;

\q退出
\q

7.4 修改Jumpserver配置文件
先进入/opt/jumpserver目录下。(因为我们刚才在/opt/jumpserver/requirements下,所以直接cd ..进入上一目录即可。)
cd ..
cp config_example.yml config.yml
![]()
生成随机SECRET_KEY
SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
注意:A-Za-z0-9 中不能有空格!且符号`不能写错,位置也不能错,否则将会遇到“-bash: /dev/urandom: 权限不够”的情况。
echo $SECRET_KEY

把SECRET_KEY写入bashrc中。
echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc

生成随机BOOTSTRAP_TOKEN
BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
echo $BOOTSTRAP_TOKEN
![]()
把BOOTSTRAP_TOKEN写入bashrc中。
echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc
7.5 把配置写入config.yml文件
逐个运行如下指令
sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml
sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml
sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml
echo -e "\033[31m 你的SECRET_KEY是 $SECRET_KEY \033[0m"
![]()
echo -e "\033[31m 你的BOOTSTRAP_TOKEN是 $BOOTSTRAP_TOKEN \033[0m"

确认内容有没有错误 vi config.yml
vi config.yml
修改如图所示内容

修改成如图所示:

配置完成啦~
8 启动/关闭Jumpserver
在/opt/jumpserver路径下。
启动
./jms start
【看到一堆ok即表示启动成功,如果没成功显示error则表示配置有问题,则重新vi config.yml配置】
后台启动(后台运行使用 -d 参数)
./jms start -d
关闭
./jms stop
【问题解决】http://t.csdnimg.cn/8XoNi
Traceback (most recent call last):
File "./jms", line 11, in <module>
import django
ModuleNotFoundError: No module named 'django'

使用pip install 模块名下载。
pip install Django
下载完成后重新启动就好。
如果下载不成功,出现一堆红色下载不成功。

更新 pip 到最新版本
pip install --upgrade pip
再执行一次就好了。
pip install Django
最后一行显示successfully installed等表示成功安装django。
成功啦~
9 部署koko
koko支持终端管理,默认端口(port)为2222。
【提供两种方法,自行选择部署】
9.1 使用docker部署
下载docker
yum -y install docker

启动docker
systemctl start docker
查看自己的IP地址。(IP地址在“2:ens33:”中inet后面)
ip a

Server_IP=自己的IP地址。
Server_IP=192.168.10.111
查看BOOTSTRAP_TOKEN值
echo $BOOTSTRAP_TOKEN
根据查看的值输入下面指令。(值不一样,不要照搬下面指令)
BOOTSTRAP_TOKEN=BZYt8bkFhzZjAjc2
docker run --name jms_koko -d -p 2222:2222 -p 5000:5000 -e CORE_HOST=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_koko:1.5.5

显示comolete就说明部署完成啦~
9.2 手工下载部署
【本人采用docker部署,所以手工部署就不附图啦~】
9.2.1 部署
进入/opt目录。
cd /opt
使用wget命令下载压缩包。【官方网站:https://github.com/jumpserver/koko/releases】
wget https://github.com/jumpserver/koko/releases/download/1.5.2/koko-master-37daa82-linux-amd64.tar.gz
解压
tar -xf koko-master-37daa82-linux-amd64.tar.gz
进入/opt/kokodir
cd /opt/kokodir
授权
chown -R root:root /opt/kokodir
先使用cp命令备份一下(cp 源文件路径 目标文件夹)
cp config_example.yml config.yml
编辑config.yul https://docs.jumpserver.org/zh/v3/installation/source_install/koko_install/#13
vi config.yml
【BOOTSTRAP_TOKEN需要 jumpserver/config.yml 里面获取,保证一致】
# 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复
# NAME: {{ Hostname }}# Jumpserver项目的url, api请求注册会使用
CORE_HOST: http://127.0.0.1:8080 # Core 的地址# Bootstrap Token, 预共享秘钥, 用来注册coco使用的service account和terminal
# 请和jumpserver 配置文件中保持一致,注册完成后可以删除
BOOTSTRAP_TOKEN: ******** # 和 Core config.yml 的值保持一致# 启动时绑定的ip, 默认 0.0.0.0
BIND_HOST: 0.0.0.0# 监听的SSH端口号, 默认2222
SSHD_PORT: 2222 # 使用 0.0.0.0:2222# 监听的HTTP/WS端口号,默认5000
HTTPD_PORT: 5000 # 使用 0.0.0.0:5000# 项目使用的ACCESS KEY, 默认会注册,并保存到 ACCESS_KEY_STORE中,
# 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret
# ACCESS_KEY: null# ACCESS KEY 保存的地址, 默认注册后会保存到该文件中
# ACCESS_KEY_FILE: data/keys/.access_key# 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL]
LOG_LEVEL: DEBUG # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR# SSH连接超时时间 (default 15 seconds)
# SSH_TIMEOUT: 15# 语言 [en,zh]
# LANGUAGE_CODE: zh# SFTP的根目录, 可选 /tmp, Home其他自定义目录
# SFTP_ROOT: /tmp# SFTP是否显示隐藏文件
# SFTP_SHOW_HIDDEN_FILE: false# 是否复用和用户后端资产已建立的连接(用户不会复用其他用户的连接)
# REUSE_CONNECTION: true# 资产加载策略, 可根据资产规模自行调整. 默认异步加载资产, 异步搜索分页; 如果为all, 则资产全部加载, 本地搜索分页.
# ASSET_LOAD_POLICY:# zip压缩的最大额度 (单位: M)
# ZIP_MAX_SIZE: 1024M# zip压缩存放的临时目录 /tmp
# ZIP_TMP_PATH: /tmp# 向 SSH Client 连接发送心跳的时间间隔 (单位: 秒),默认为30, 0则表示不发送
# CLIENT_ALIVE_INTERVAL: 30# 向资产发送心跳包的重试次数,默认为3
# RETRY_ALIVE_COUNT_MAX: 3# 会话共享使用的类型 [local, redis], 默认local
# SHARE_ROOM_TYPE: local# Redis配置
# REDIS_HOST: 127.0.0.1 # 如果需要部署多个 koko, 需要通过 redis 来保持会话
# REDIS_PORT: 6379
# REDIS_PASSWORD:
# REDIS_CLUSTERS:
# REDIS_DB_ROOM:
9.2.2 启动koko
./koko
10 部署guacamole
【基于HTML5和 JavaScript 的VNC查看器】
10.1 部署
docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole:1.5.5

显示如图所示内容即表示部署成功!
【问题解决】
/usr/bin/docker-current: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See '/usr/bin/docker-current run --help'.
![]()
启动下docker就好啦~
systemctl start docker
或者重新启动下docker服务。
systemctl restart docker.service
10.2 列出本地镜像
docker images

11 部署luna
与nginx结合支持Web Terminal前端。
进入opt目录。
cd /opt/
wget命令下载luna压缩包。
wget https://github.com/jumpserver/luna/releases/download/1.5.5/luna.tar.gz
【问题解决】http://t.csdnimg.cn/h1KAe
[root@localhost opt]# wget https://github.com/jumpserver/luna/releases/download/1.5.5/luna.tar.gz
--2023-10-10 10:41:10-- https://github.com/jumpserver/luna/releases/download/1.5.5/luna.tar.gz
正在解析主机 github.com (github.com)... 20.205.243.166
正在连接 github.com (github.com)|20.205.243.166|:443... 已连接。
无法建立 SSL 连接。

原因:
wget在使用HTTPS协议时,默认会去验证其网站的证书,而这个证书验证经常会失败。
问题解决:
方法一:在后面加“--no-check-certificate”。(执行时候不验证SSL)
--no-check-certificate
【在最后加,在wget后面加还会报同样的错误】

搞定啦~
方法二:将https换成http (更换协议,将https协议换成http)
解压
tar xf luna.tar.gz

授权
chown -R root:root luna
12 配置nginx
12.1 nginx的安装
http://t.csdnimg.cn/p03bl
1.配置nginx所需环境
yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel

pcre使nginx支持http rewrite模块
openssl 使nginx支持ssl
zlib提供nginx对http包的内容进行gzip压缩
2.获取nginx压缩包
方法一:在官网(https://nginx.org/en/download.html)直接下载.tar.gz压缩包,然后直接拉到linux里面/使用rz命令上传。(1.如果压缩包拉不进去,使用yum -y install lrzsz指令,再进行拉取。2.rz命令上传需先下载rz)
yum -y install lrzsz
方法二:使用wget命令下载(需要系统提前安装wget,如果没有安装,使用yum install wget进行安装。)
3.解压
解压到 /usr/local 下
tar xzvf nginx-1.23.1.tar.gz -C /usr/local/

4.配置
进入解压后的目录下。
cd /usr/local/nginx-1.23.1/
可以配置啦~ O(∩_∩)O哈哈~
./configure --prefix=/usr/local/nginx

5.编译安装
make && make install

编译安装成功!
12.2 配置nginx
cd /usr/local/nginx/conf/
ls命令查看

创建conf.d文件夹
mkdir conf.d

cd conf.d/
创建并编辑Jumpserver.conf【注意:一定是以.conf结尾。】
vi Jumpserver.conf
写入内容如下:
server {listen 80;client_max_body_size 100m; # 录像及文件上传大小限制location /luna/ {try_files $uri / /index.html;alias /opt/luna/; # luna 路径, 如果修改安装目录, 此处需要修改}location /media/ {add_header Content-Encoding gzip;root /opt/jumpserver/data/; # 录像位置, 如果修改安装目录, 此处需要修改}location /static/ {root /opt/jumpserver/data/; # 静态资源, 如果修改安装目录, 此处需要修改}location /socket.io/ {proxy_pass http://localhost:5000/socket.io/;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;access_log off;}location /koko/ {proxy_pass http://localhost:5000/koko/;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;access_log off;}location /guacamole/ {proxy_pass http://localhost:8081/;proxy_buffering off;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $http_connection;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;access_log off;}location / {proxy_pass http://localhost: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;}
}
12.3 运行nginx
/usr/local/nginx/sbin/nginx
后面加-t,显示ok,successful即表示运行成功~

12.4 修改nginx的主配置文件
cd /usr/local/nginx/conf/
编辑nginx.conf文件。
vi nginx.conf
编辑前:

在keepalive_timeout 65;下面添加如下命令。
include /usr/local/nginx/conf/conf.d/*.conf;
编辑后:

编辑完成后保存退出。
重新启动nginx。
/usr/local/nginx/sbin/nginx -s reload
![]()
没有报错,就可以开始登录测试吧~
【如果报错,则表示刚才配置文件编写有问题,回去重新检查。】
13 Jumpserver登录测试
浏览器使用IP地址登录。
错误页面

正确页面会显示Jumpserver开源堡垒机登录页面。
好啦,接下来就可以使用Jumpserver开源堡垒机啦~
创作不易,给个三连吧~

相关文章:
CentOS 7下JumpServer安装及配置(超详细版)
前言 Jumpserver是一种用于访问和管理远程设备的Web应用程序,通常用于对服务器进行安全访问。它基于SSH协议,提供了一个安全和可管理的环境来管理SSH访问。Jumpserver是基于Python开发的一款开源工具,其提供了强大的访问控制功能,…...
基于 ACK Fluid 的混合云优化数据访问(五):自动化跨区域中心数据分发
作者:车漾 前文回顾: 本系列将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景,相关文章请参考: -基于 ACK Fluid 的混合云优化数据访问(一):场景与架构 -基于 ACK Fluid 的混合云优…...
sentinel的启动与运行
首先我们github下载sentinel Releases alibaba/Sentinel (github.com) 下载好了后输入命令让它运行即可,使用cmd窗口输入一下命令即可 java -Dserver.port8089 -jar sentinel-dashboard-1.8.6.jar 账号密码默认都是sentinel 启动成功后登录进去效果如下...
模拟量采集无线WiFi网络接口TCP Server, UDP, MQTT
● 4-20mA信号转换成标准Modbus TCP协议 ● 支持TCP Server, UDP, MQTT等通讯协议 ● 内置网页功能,可以通过网页查询数据 ● 宽电源供电范围:8 ~ 32VDC ● 可靠性高,编程方便,易于应用 ● 标准DIN35导轨安装,方便…...
五、OSPF动态路由实验
拓扑图: 基本ip的配置已经配置好了,接下来对两台路由器配置ospf协议,两台PC进行跨网段通讯 R1与R2构成单区域OSPF区域0,首先对R1进行配置 首先进入ospf 默认进程1,router id省略空缺,之后进入area 0区域&…...
系统架构设计:16 论软件开发过程RUP及其应用
目录 一 统一过程RUP 1 典型特点 2 四个阶段 (1)构思阶段(初始阶段/初启阶段)...
Gralloc ION DMABUF in Camera Display
目录 Background knowledge Introduction ia pa va and memory addressing Memory Addressing Page Frame Management Memory area management DMA IOVA and IOMMU Introduce DMABUF What is DMABUF DMABUF 关键概念 DMABUF APIS –The Exporter DMABUF APIS –The…...
【LVS】lvs的四种模式的区别是什么?
LVS中的DR模式、NAT模式、TUN模式和FANT模式是四种不同的负载均衡模式,它们之间的主要区别在于数据包转发方式和网络地址转换。 DR模式(Direct Routing):此模式通过改写请求报文的目标MAC地址,将请求发给真实服务器&a…...
Android原生实现控件点击弹起效果方案(API28及以上)
之前在实现控件阴影时有提到过,阴影效果的实现采用的是Android原生的View的属性,拔高Z轴。Z轴会让View产生阴影的效果。 Zelevation translationZ 拔高Z轴可以通过控制elevation和translationZ。 我们之前是通过elevation来单纯的控制Z轴;而…...
【数据结构-队列 二】【单调队列】滑动窗口最大值
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【单调队列】,使用【队列】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…...
如何设置CentOS系统以禁用不必要的网络端口和服务?
要禁用CentOS系统中的不必要的网络端口和服务,可以按照以下步骤进行操作: 1. 查看当前正在运行的服务和端口:使用以下命令可以查看正在运行的服务和对应的端口号。 sudo netstat -tuln 2. 停用不必要的服务:根据netstat命令的输…...
【IDEA项目个别类爆红,但是项目可以正常运行】
打开项目时发现idea个别类爆红,但是项目可以正常运行 问题原因:Idea本身的问题,可能是其缓存问题,导致爆红 解决方案:重置Idea 很多时候排查不出代码问题,就尝试一下此操作。 选择目录:File–>Invalida…...
hive 之select 中文乱码
此处的中文乱码和mysql的库表 编码 latin utf 无关。 直接上案例。 有时候我们需要自定义一列,有时是汉字有时是字母,结果遇到这种情况了。 说实话看到这真是糟心。这谁受得了。 单独select 没有任何问题。 这是怎么回事呢? 经过一番检查&…...
优化|优化处理可再生希尔伯特核空间的非参数回归中的协变量偏移
原文:Optimally tackling covariate shift in RKHS-based nonparametric regression. The Annals of Statistics, 51(2), pp.738-761, 2023. 原文作者:Cong Ma, Reese Pathak, Martin J. Wainwright 论文解读者:赵进 编者按: …...
Netty深入浅出Java网络编程学习笔记(一) Netty入门篇
目录 一、概述 1、什么是Netty 2、Netty的优势 二、入门案例 1、服务器端代码 2、客户端代码 3、运行流程 组件解释 三、组件 1、EventLoop 处理普通与定时任务 关闭 EventLoopGroup 处理IO任务 服务器代码 客户端代码 分工细化 划分Boss 和Work 增加自定义EventLoopGroup 切换…...
自动化产线集控系统(西门子CNC 840D/840DSL远程控制)
1.1项目背景 RQQ/VF120机组目前为1人操作3台机床,需在机台旁监控。为了改善人员在班中劳动强度非常大的现状,调整好每台机床的节奏,以保证机床的最少的等待时间。本项目旨在通过远程监视设备运行过程关键参数,操作人员人员可远程监…...
MVVM 与 MVC区别和应用场景?
MVVM 和 MVC 1. MVC2. MVVM 1. MVC MVC 是 Model View Controller 的缩写 Model:模型层,是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View:视图层,用户界面渲染逻辑,通常视图…...
Linux开发-Ubuntu软件源工具
开发&验证环境: 操作系统:ubuntu 20.04 软件源:http://archive.ubuntu.com/ubuntu 开发工具 sudo apt install vim sudo apt install git# gnu工具链 sudo apt install gcc sudo apt install g sudo apt install gdb# llvm工具链 sudo …...
环境下载地址
1. DOTNET环境下载 适用于 Visual Studio 的 .NET SDK 下载 (microsoft.com)https://dotnet.microsoft.com/zh-cn/download/visual-studio-sdks...
E. Block Sequence-Codeforces Round 903 (Div. 3)
E. Block Sequence dp题,设dp[i]表示i~n之间的数,需要最小删除数量 那么每一位数有两种情况,设数a[i]: 1.被删除:dp[i]dp[i1]1,这一位等于上一位的加一。 2.被保留:dp[i]min(dp[i],dp[ia[i]1]); #include<iostream…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...
RFID推动新能源汽车零部件生产系统管理应用案例
RFID推动新能源汽车零部件生产系统管理应用案例 一、项目背景 新能源汽车零部件场景 在新能源汽车零部件生产领域,电子冷却水泵等关键部件的装配溯源需求日益增长。传统 RFID 溯源方案采用 “网关 RFID 读写头” 模式,存在单点位单独头溯源、网关布线…...
安宝特方案丨从依赖经验到数据驱动:AR套件重构特种装备装配与质检全流程
在高压电气装备、军工装备、石油测井仪器装备、计算存储服务器和机柜、核磁医疗装备、大型发动机组等特种装备生产型企业,其产品具有“小批量、多品种、人工装配、价值高”的特点。 生产管理中存在传统SOP文件内容缺失、SOP更新不及、装配严重依赖个人经验、产品装…...
Tableau for mac 驱动
Tableau 驱动程序安装指南 对于希望在 Mac OS 上使用 Tableau 进行数据分析的用户来说,确保正确安装相应的驱动程序至关重要。Tableau 支持多种数据库连接方式,并提供官方文档指导如何设置这些连接。 安装适用于 Mac 的 JDBC 或 ODBC 驱动程序 为了使…...
《开篇:课程目录》
大家好!我是一名.NET技术开发者,长期以来积累了比较多的项目实战经验,现在把它分享给大家,希望能够帮助到大家,同时为.NET社区提供一份力量,让更多的开发者参与进来。 要讲解的课程如下: 《介绍…...
