蓝鲸-6.0.2 部署
安装环境准备
开始安装蓝鲸社区版前,需按以下文档指南,做好准备工作。
官方文档:https://bk.tencent.com/docs/document/6.0/127/7549
准备机器
- 建议操作系统: CentOS 7.6
- 建议机器配置(中控机建议内存配置
32G+
或 更高)- 体验功能:建议 4 核 16 G,硬盘 50G 以上
- 生产环境:建议 8 核 32 G,硬盘 100G 以上(可根据实际情况适当调整配置)
- 机器数量:3 台(假设 ip 分别为:10.0.0.1,10.0.0.2,10.0.0.3)
- 选择一台为中控机(假设为 10.0.0.1)进行安装部署操作,使用 root 账号登录。
注意:所有待安装蓝鲸的机器均需要按以下清单检查和操作。
一. YUM 源配置
在所有蓝鲸服务器上配置好 YUM 源,要求该 YUM 源包含 EPEL。
不能连外网 YUM 源的环境,可以配置一个内部的 YUM 源 或者本地 YUM 源。
在线配置
- 腾讯云 CentOS
- 腾讯云 EPEL
# 备份系统旧配置文件
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
# epel(RHEL7系列)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
# 更新缓存
yum clean all
yum makecache
二. CentOS 系统设置
提示:可以使用该文档整理的安装脚本,见 2.10.以上9步的配置脚本
准备好硬件,安装完原生 CentOS 系统后。需要在所有蓝鲸服务器上对初始系统做一些配置,保证后续安装过程的顺畅和蓝鲸平台的运行。
系统版本: 推荐 CentOS-7.6。
1.关闭 SELinux
# 检查 SELinux 的状态,如果它已经禁用,可以跳过后面的命令
sestatus
可以使用以下命令禁用 SELinux,或者修改配置文件。
# 通过命令临时禁用 SELinux
setenforce 0# 或者修改配置文件
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
接着,重启机器:
reboot
2.关闭默认防火墙(firewalld)
安装和运行蓝鲸时,模块之间互相访问的端口策略较多,建议对蓝鲸后台服务器之间关闭防火墙。
# 检查默认防火墙状态,如果返回 not running,可以跳过后面的命令
firewall-cmd --state
停止并禁用 firewalld
systemctl stop firewalld # 停止 firewalld
systemctl disable firewalld # 禁用 firewall 开机启动
3.安装 rsync 命令
安装脚本依赖 rsync 分发同步文件。
# 检查是否有 rsync 命令,如果有返回 rsync 路径,可以跳过后面的命令
which rsync# 安装 rsync
yum -y install rsync
4.停止并禁用 NetWorkManager
systemctl stop NetworkManager
systemctl disable NetworkManager
说明:该操作前提需确保主机为静态 IP,若为 DHCP 获取的 IP,则无法直接 disable NetworkManager,否则会出现主机重启后,或者主机运行一段时间 IP 租约地址到期后,网卡无法从网络重新正常获取 IP 地址的情况。
5.调整最大文件打开数
# 检查当前 root 账号下的 max open files 值
ulimit -n
如果为默认的 1024,建议通过修改配置文件调整为 102400 或更大。
但是不能大于 /proc/sys/fs/nr_open
的值,该值默认为 1048576。
注意: limits.conf 初始文件的备份。
cat >> /etc/security/limits.conf << EOF
root soft nofile 102400
root hard nofile 102400
EOF
修改后,重新使用 root 登录检查是否生效。
6.确认服务器时间同步
服务器后台时间不同步会对时间敏感的服务带来不可预见的后果。务必在安装和使用蓝鲸时保证时间同步。
# 检查每台机器当前时间和时区是否一致,若相互之间差别大于3s(考虑批量执行时的时差),建议校时。
date -R# 查看和ntp server的时间差异(需要外网访问,如果内网有ntpd服务器,自行替换域名为该服务的地址)
ntpdate -d cn.pool.ntp.org
如果输出的最后一行 offset 大于 1s 建议校时。
# 和 ntp 服务器同步时间
ntpdate cn.pool.ntp.org
更可靠的方式包括通过运行 ntpd 或者 chrony 等服务在后台保持时间同步。
具体请参考官方文档 使用 ntpd 配置 NTP 或 使用 chrony 配置 NTP。
7.检查是否存在全局 HTTP 代理
蓝鲸服务器之间会有的 HTTP 请求,如果存在 HTTP 代理,且未能正确代理这些请求,会发生不可预见的错误。
# 检查 http_proxy https_proxy 变量是否设置,若为空可以跳过后面的操作。
echo "$http_proxy" "$https_proxy"
对于本机配置 http_proxy 变量的方式,请依次查找文件 /etc/profile、/etc/bashrc、$HOME/.bashrc 等是否有设置。
或者咨询网络管理员/IT 部门协助处理。
8.检查部署机器的主机名
请检查准备用于部署蓝鲸的 3 台机器的主机名是否相同。如果存在同名请进行修改。
hostname
9.检查 DNS 配置文件
如果输出的第一行信息不是 nameserver 127.0.0.1
,请把其加入至该文件(/etc/resolv.conf)的第一行。
这是由于蓝鲸内部组件的调用所需,域名通过 consul 解析,会探测服务运行状态,然后返回 IP 地址。若首行不是 127.0.0.1,否则这些域名就通过外网去解析,无法返回正确的响应,导致服务运行异常,或者 SaaS 无法正常打开等情况。
head -n 1 /etc/resolv.conf
10. 以上9步的配置脚本
#! /bin/bash
# tomoncle set bk env bashCENTOS_VERSION=$(cat /etc/redhat-release | awk '{print $4}' | awk -F '.' '{print $1}')function validator(){ if [ $? -ne 0 ];then echo -e "\033[5;31mthe operation failed, exited.\033[0m"; exit; fi; }
function log(){ validator; DATE=$(echo `date "+%Y-%m-%d %H:%M:%S"`); echo -e "\033[32m$DATE INFO: $@ \033[0m"; }function config_yum(){log "YUM 源配置"# 备份系统旧配置文件mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup > /dev/null 2>&1wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-${CENTOS_VERSION}.repo > /dev/null 2>&1validatoryum clean all > /dev/null 2>&1validatoryum makecache > /dev/null 2>&1validator
}function disable_selinux(){log "关闭 SELinux"if [[ `getenforce` != "Disabled" ]]; thensetenforce 0sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/configfi
}function check_rsync(){log "安装 rsync 命令"which rsync > /dev/null 2>&1if [[ $? -ne 0 ]]; thenyum -y install rsync > /dev/null 2>&1validatorfi
}function disable_firewalld(){log "关闭默认防火墙(firewalld)"#关闭防火墙,公网环境不安全if [[ $(firewall-cmd --state) = "running" ]]; thensystemctl stop firewalldsystemctl disable firewalldfi
}function disable_network(){log "停止并禁用 NetWorkManager"systemctl stop NetworkManager && systemctl disable NetworkManager
}function update_max_file_size(){log "调整最大文件打开数"if [[ $(tail -n 2 /etc/security/limits.conf | grep 'nofile 102400' | wc -l) -ne 2 ]]; thencat >> /etc/security/limits.conf << EOF
root soft nofile 102400
root hard nofile 102400
EOFfi
}function sync_ntpdate(){log "确认服务器时间同步"ntpdate cn.pool.ntp.org
}function check_http_proxy(){log "检查是否存在全局 HTTP 代理"if [[ -n "$http_proxy" ]] || [[ -n "$https_proxy" ]]; thenecho -e "\033[5;31m发现 http代理 不为空,请检查是否有设置,或者咨询网络管理员/IT部门协助处理, 程序退出.\033[0m"; exit; fi
}function check_dns(){log "检查 DNS 配置文件"if [[ $(head -n 1 /etc/resolv.conf) != 'nameserver 127.0.0.1' ]]; thensed -i '1i\nameserver 127.0.0.1' /etc/resolv.conffi
}function show_net(){log "查询当前主机第一个非回环地址的mac及ip地址"mac=$(ifconfig | grep ether | head -n 1 | awk '{print $2}')ip=$(ifconfig | grep inet | grep -v '127.0.0.1' | head -n 1 | awk '{print $2}')echo -e "mac: $mac\nip: $ip"
}function main(){config_yumdisable_selinuxcheck_rsyncdisable_firewalld # 如果公网环境禁止关闭防火墙#disable_network # 如果使用dhcp,不能禁用NetWorkManagerupdate_max_file_sizesync_ntpdatecheck_http_proxycheck_dnsshow_net
}main
三. 配置下载软件包
软件包只需要在中控机下载配置,其他机器不需要
1.下载安装包(仅需登录中控机)
mkdir /data ; cd /data ; wget https://bkopen-1252002024.file.myqcloud.com/ce/bkce_src-6.0.2.tgz
2.解压 V6.2 软件包
# 版本号会随更新而变更,请以实际下载时的实际版本为准
tar xf bkce_src-6.0.2.tgz -C /data
3.下载证书
获取机器的 MAC 地址生成证书,下载 证书文件 上传至中控机 /data 目录下。
MAC 地址:license 和 gse 模块所在服务器的第一个内网网卡的 MAC 地址。如果分别属于两台服务器,那么两个的 MAC 地址以英文 “;” 分隔。
- 1.通过
ifconfig
或者ip addr
命令分别获取三台机器第一个内网网卡 MAC 地址 - 2.前往蓝鲸官网证书生成页面,根据提示在输入框中填入英文分号分隔的三个 MAC 地址,生成并下载证书
- 3.上传证书包至中控机
/data
- 4.证书包包名:
ssl_certificates.tar.gz
4.解压相关资源包
- 1.解压完整包(包含蓝鲸相关产品,如 PaaS、CMDB、JOB 等;蓝鲸依赖的 rpm 包,SaaS 镜像,定制 Python 解释器;部署脚本)
cd /data ; tar xf bkce_src-6.0.2.tgz
- 2.解压各个产品软件包
cd /data/src/; for f in *gz;do tar xf $f; done ; cd ../
- 3.解压证书包
install -d -m 755 /data/src/cert ; tar xf /data/ssl_certificates.tar.gz -C /data/src/cert/ ; chmod 644 /data/src/cert/*
- 4.拷贝 rpm 包文件夹到/opt/目录
cp -a /data/src/yum /opt
5.配置 install.config 文件
install.config 是模块和服务器对应关系的配置文件,描述在哪些机器上安装哪些模块。
每行两列,第一列是 IP 地址;第二列是以英文逗号分隔的模块名称。
详情参考 install.config.3IP.sample
文件(可将 install.config.3IP.sample 复制为 install.config)。
# 假设部署脚本放置于 /data 目录下,请以实际部署的目录为准
cd /data/install# cp -a install.config.3ip.sample install.config
# 将默认的 IP 地址替换为实际部署时的 IP 地址
#
# 请根据实际机器的 IP 进行替换第一列的示例 IP 地址,确保三个 IP 之间能互相通信
cat << EOF >/data/install/install.config
10.0.0.1 iam,ssm,usermgr,gse,license,redis,consul,es7,monitorv3(influxdb-proxy),monitorv3(monitor),monitorv3(grafana)
10.0.0.2 nginx,consul,mongodb,rabbitmq,appo,influxdb(bkmonitorv3),monitorv3(transfer),fta,beanstalk
10.0.0.3 paas,cmdb,job,mysql,zk(config),kafka(config),appt,consul,log(api),nodeman(nodeman)
EOF
说明:
- 该配置文件,ip 后面使用空格与服务名称隔开,含有多个内网 ip 的机器,默认使用 /sbin/ifconfig 输出中的第一个内网 ip,在 ip 后面写上该机器要安装的服务列表即可,部署过程中默认使用标准私有地址,若企业环境使用非标准私有地址,请参考该篇文章后续内容- 非标准私有地址处理方法 的处理方法。
- gse 与 redis 需要部署在同一台机器上。
- 增加机器数量时,可以将以上配置中的服务挪到新的机器上,分担负载。
6.配置ssh免密登录
对 install.config
中的主机配置中控机 ssh
登录免密。根据提示,依次输入每台机器的 root
密码
bash /data/install/configure_ssh_without_pass
完成以上6步已经完成了部署配置. 自定义配置查看 7, 8 步骤
7.非标准私有地址处理方法(非必须)
蓝鲸社区版部署脚本中(install 目录)下有以下文件中有获取 IP 的函数 get_lan_ip,非标准地址,均需要在安装部署前完成修改。
/data/install/health_check/deploy_chek.py
/data/install/agent_setup/download#agent_setup_pro.sh
/data/install/agent_setup/download#agent_setup_aix.ksh
/data/install/agent_setup/download#agent_setup.sh
/data/install/appmgr/docker/saas/buildsaas
/data/install/appmgr/docker/build
/data/install/scripts/gse/agent/gsectl
/data/install/scripts/gse/plugins/stop.sh
/data/install/scripts/gse/plugins/start.sh
/data/install/scripts/gse/plugins/reload.sh
/data/install/scripts/gse/agentaix/gsectl.ksh
/data/install/scripts/gse/proxy/gsectl
/data/install/scripts/gse/server/gsectl
/data/install/precheck.sh
/data/install/functions
这些文件列表,可能随版本迭代变动,也可以用以下命令查找出来包含这个函数的脚本文件有哪些:
grep -l 'get_lan_ip *()' -r /data/install
修改方法:假设服务器的 ip 是:
138.x.x.x
,它不在标准的私有地址范围,那么你需要修改get_lan_ip()
函数为:get_lan_ip () {...省略if ($3 ~ /^10\./) {print $3}if ($3 ~ /^138\./) {print $3}}return $? }
8.自定义域名以及登陆密码(非必须)
部署前自定义域名
$BK_DOMAIN
:需要更新的根域名$INSTALL_PATH
:自定义安装目录。
# 执行前请使用实际的根域名和安装目录进行替换 ./configure -d $BK_DOMAINN -p $INSTALL_PATH# 仅替换域名 将默认 bktencent.com 替换为 cloud.tomoncle.com ./configure -d cloud.tomoncle.com
部署前自定义 admin 登陆密码
- 请使用实际的自定义密码替换 BlueKing,以及使用实际的部署脚本路径替换默认的脚本路径
/data/install
cat > /data/install/bin/03-userdef/usermgr.env << EOF BK_PAAS_ADMIN_PASSWORD=BlueKing EOF
- 请使用实际的自定义密码替换 BlueKing,以及使用实际的部署脚本路径替换默认的脚本路径
完成环境准备后,可前往 标准部署 开始部署了。
提示:针对服务注册失败的bug修改(本人使用v6.0.2
版本在 centos7.4
安装环境存在该问题,如无复现请忽略.)
部署之前,编辑中控机该脚本
/data/install/install.sh
新增以下函数
# ... 省略
set -e
# set -e 指令后面 新增该函数
reg_consul_svc() {/data/install/bin/reg_consul_svc -n $1 -p $2 -a $3
}
四. 开始部署
在中控机执行
1 初始化操作
- 1.执行初始化操作
cd /data/install/
./bk_install common
- 2.检查相关配置
./health_check/check_bk_controller.sh
2 部署 PaaS
./bk_install paas
3 部署 app_mgr(SaaS 运行环境)
./bk_install app_mgr
4 部署 CMDB(配置平台)
./bk_install cmdb
5 部署 JOB(作业平台)
./bk_install job
6 部署 bknodeman(节点管理)
./bk_install bknodeman
7 部署 bkmonitorv3 (监控平台)
./bk_install bkmonitorv3
8 部署 bklog(日志平台)
./bk_install bklog
9 部署 fta(故障自愈后台)
./bk_install fta
10 部署 SaaS
请按顺序执行:
# 权限中心
./bk_install saas-o bk_iam
# 用户管理
./bk_install saas-o bk_user_manage
# 标准运维
./bk_install saas-o bk_sops
# 服务流程管理
./bk_install saas-o bk_itsm
# 故障自愈SaaS
./bk_install saas-o bk_fta_solutions
11 初始化蓝鲸业务拓扑
./bkcli initdata topo
12 加载蓝鲸相关维护命令
source ~/.bashrc
13 检测相关服务状态
cd /data/install/
echo bkssm bkiam usermgr paas cmdb gse job consul bklog | xargs -n 1 ./bkcli check
五. 访问蓝鲸
1 配置本地 hosts
下面介绍的操作均可能覆盖现有 hosts ,进行操作前请先确认是否需要备份。
- Windows 配置
用文本编辑器(如Notepad++
)打开文件:
C:\Windows\System32\drivers\etc\hosts
将以下内容复制到上述文件内,并将以下 IP 需更换为本机浏览器可以访问的 IP,然后保存。
10.0.0.2 paas.bktencent.com cmdb.bktencent.com job.bktencent.com jobapi.bktencent.com
10.0.0.3 nodeman.bktencent.com
注意: 10.0.0.2 为 nginx 模块所在的机器,10.0.0.3 为 nodeman 模块所在的机器。IP 需更换为本机浏览器可以访问的 IP。查询模块所分布在机器的方式:
grep -E "nginx|nodeman" /data/install/install.config
注意:如果遇到无法保存,请右键文件 hosts 并找到“属性” -> “安全”,然后选择你登陆的用户名,最后点击编辑,勾选“写入”即可。
- Linux / Mac OS 配置
将以下内容复制到/etc/hosts
中,并将以下 IP 需更换为本机浏览器可以访问的 IP,然后保存。
10.0.0.2 paas.bktencent.com cmdb.bktencent.com job.bktencent.com jobapi.bktencent.com
10.0.0.3 nodeman.bktencent.com
2 获取管理员账户名密码
在任意一台机器上,执行以下命令,获取管理员账号和密码。
grep -E "BK_PAAS_ADMIN_USERNAME|BK_PAAS_ADMIN_PASSWORD" /data/install/bin/04-final/usermgr.env
蓝盾
部署
部署操作都在蓝鲸“中控机”节点操作
1.下载安装包
下载安装包到蓝鲸 “中控机”,参考路径如下:(此时无需手动解压,后续预处理步骤时包含解压操作。)
/data/src/bkci.tar.gz
建议将下载的文件放置在此路径。参考从 GitHub 下载的命令:
wget https://github.com/Tencent/bk-ci/releases/download/v1.2.11/bkci.tar.gzmv bkci.tar.gz /data/src/bkci.tar.gz
/data/src/rabbitmq_delayed_message_exchange-3.8.0.ez
, 路径及文件名不能变动。下载 RabbitMQ 插件的命令
wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v3.8.0/rabbitmq_delayed_message_exchange-3.8.0.ezmv rabbitmq_delayed_message_exchange-3.8.0.ez /data/src/rabbitmq_delayed_message_exchange-3.8.0.ez
2.解压相关资源包
部署脚本预期解压后的目录,请使用我们提供的预处理脚本:(会在解压完成后自动更新默认 env 模板)
./bin/prepare-bk-ci.sh /data/src/bkci.tar.gz # 如果放在其他路径下,请自行修改。
3.自定义安装配置
需要编辑 install.config 新增配置项,可使用如下代码添加:(请根据实际机器的 IP 进行替换第一列的示例 IP 地址,确保新增 IP 和文件中已有 IP 之间能互相通信)
# 10.0.0.35 10.0.0.49 为新增的蓝盾节点cat << EOF >/data/install/install.config
10.0.0.6 iam,ssm,usermgr,gse,license,redis,consul,es7,monitorv3(influxdb-proxy),monitorv3(monitor),monitorv3(grafana)
10.0.0.23 nginx,consul,mongodb,rabbitmq,appo,influxdb(bkmonitorv3),monitorv3(transfer),fta,beanstalk
10.0.0.54 paas,cmdb,job,mysql,zk(config),kafka(config),appt,consul,log(api),nodeman(nodeman)
10.0.0.35 ci(gateway),ci(agentless),ci(artifactory),ci(auth),ci(dispatch),ci(environment),ci(image),ci(log),ci(misc),ci(notify),ci(openapi),ci(plugin),ci(process),ci(project),ci(quality),ci(repository),ci(store),ci(ticket),ci(websocket)
10.0.0.49 ci(dockerhost)
EOF
4.开始部署
请执行 “一键安装” 脚本即可:
cd ${CTRL_DIR:-/data/install} # 进入部署脚本主目录,默认为 /data/install 。
./bk_install ci # 参数为小写的ci,输入时请注意大小写。
“一键安装”脚本在安装过程会不断输出提示。如果失败,会在屏幕输出报错,并提示出错脚本的位置。您在排除故障后重新执行该脚本即可。
在蓝盾dispatch
节点操作
dockerHost
enable
为false
, 在CI/CD操作时会出现找不到dockerHost主机异常
- 工具脚本
/data/src/ci/scripts/bkci-op.sh
[root@5e9ne ~]# /data/src/ci/scripts/bkci-op.sh
Usage: /data/src/ci/scripts/bkci-op.sh list|set|add|del [args...]
[root@5e9ne ~]# /data/src/ci/scripts/bkci-op.sh add
Usage: /data/src/ci/scripts/bkci-op.sh add IP enable=true|false [dockerHostPort=21923] [capacity=100]
- 查看dockerHost状态:
[root@5e9ne ~]# /data/src/ci/scripts/bkci-op.sh list
id dockerIp dockerHostPort enable capacity createTime
1 10.0.0.49 21923 false 100 2021-01-26 16:19:49
- 设置dockerHost:
[root@5e9ne ~]# /data/src/ci/scripts/bkci-op.sh add 10.0.0.49 enable=true
{"status": 0,"data": true
}
[root@5e9ne ~]# /data/src/ci/scripts/bkci-op.sh list
id dockerIp dockerHostPort enable capacity createTime
1 10.0.0.49 21923 true 100 2021-01-26 16:19:49
蓝鲸-6.0.2 部署相关推荐
- 蓝鲸智云平台部署[6.0.5]
蓝鲸智云平台部署 生产环境部署 版本6.5 主机 ip 配置 系统 节点 bk1 192.168.96.188 4c16g centos7.6 主控节点 bk2 192.168.96.210 4c16 ...
- 蓝鲸社区版_部署bkdata服务无法启动问题
问题:蓝鲸社区版完整部署,执行安装bkdata时,报"databus.service.consul start failed." [root@paas-1 install]# ./ ...
- .Net Core 3.0 gRPC部署问题解决
.Net Core 3.0 gRPC部署问题解决 参考文章: (1).Net Core 3.0 gRPC部署问题解决 (2)https://www.cnblogs.com/hulizhong/p/11 ...
- OEL7.2下Oracle11.2.0.4RAC部署
OEL7.2下Oracle11.2.0.4RAC部署 一. 安装步骤简述 u OEL7.2操作系统安装 u RAC 安装环境配置 u ORACLE CRS安装 u ORACLE DB软件安装 u OR ...
- win7下安装IIS7.0及部署VS2010 ASP.NET程序网站的相关问题
win7下安装IIS7.0及部署VS2010 ASP.NET程序网站的相关问题 配置环境 操作系统:microsoft windows 7 服务平台:.net4.0 开发工具:microsoft ...
- arm搭建云手机教程_教你从0开始部署阿里云服务器,阿里云服务器搭建网站教程...
教你从0开始部署阿里云服务器,阿里云服务器部署网站的办法,阿里云搭建项目的办法,阿里云服务器搭建网站教程 1.购买 登录官网点击下面链接: 企业上云甄选partner.aliyun.com 查看云服 ...
- MySQL 8.0 安装部署3个注意事项
墨墨导读:本文分享实际案例中MySQL8.0安装部署时最典型的3个问题,希望对大家有帮助. MySQL 8.0 2016年首次发布,2018年GA版本发布也已经4年多的历程,最新版本已经到8.0.21 ...
- VMware-vRealize-Log-Insight-8.2.0.0安装部署指南
VMware-vRealize-Log-Insight-8.2.0.0安装部署指南 https://blog.csdn.net/u011775882/article/details/110928142 ...
- VMware VCSA6.0的部署及升级到6.5
VMware vCenter Server Appliance(VCSA) 6.0的部署和之前的版本略有不同,在5.5及之前的版本可以通过导入OVA文件的方式快速部署,但从6.0开始需要在Window ...
最新文章
- javascript正则表达式小结
- 【运筹学】运输规划、表上作业法总结 ( 运输规划模型 | 运输规划变量个数 | 表上作业法 | 最小元素法 | 差额 Vogel 法 ★ | 闭回路法 ) ★★★
- 【论文阅读和实现】On Spectral Clustering: Analysis and an algorithm【Python实现】
- 华为语音解锁设置_今天才知道,华为自带文字转语音黑科技,1键按下这里即可开启...
- HUT-1556 网址
- SAP IBASE father component的创建
- redis缓存数据表
- 网易2016年研发project师编程题(2)
- c语言入门经典18个程序
- uniapp光标自动定义到文本框_特检自动化行吊静力检测方案
- 网站服务器在境外境内怎么维护,涉黄网站服务器移至境外 境内维护人员将受制裁...
- 最耐用的手机盘点 网友:我这个能用到品牌商“破产”!
- oracle透明网关访问sqlserver_基于智慧照明网关的地下停车场照明解决方案
- Java集合——TreeMap源码详解
- java搭建后台步骤_Java后台开发环境搭建 – 黄毅超的博客
- 书籍推荐系列之一 -- 《凤凰项目:一个IT运维的传奇故事》
- RJ45墙上网线插座的线序与接法
- matlab里删除文件恢复,删除的文件如何恢复?360安全卫士找回误删文件
- 网站SEO优化高质量内容怎么写
- 微信小程序开发入门手册
热门文章
- 《Linux运维实战:Nginx服务报错unknown directive stream》
- 领英不能注册怎么办?
- 上班还想摸鱼!这个牛逼的Python模块,轻松记录键盘操作!
- Hyperlynx仿真操作小点
- 情人节礼物推荐排行榜、这6款好物值得你考虑
- 汽车卤素改氙气大灯,再也不用忍受烛光了,给远光狗晃回去
- Xbsj Render Error: TypeError: e.charCodeAt is not a function
- 墨者靶场部分wp_logs
- Android Studio配置JavaCPP Presets for OpenCV
- Chrome - JavaScript调试技巧总结(浏览器调试JS)