安装环境准备

开始安装蓝鲸社区版前,需按以下文档指南,做好准备工作。
官方文档: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

说明:

  1. 该配置文件,ip 后面使用空格与服务名称隔开,含有多个内网 ip 的机器,默认使用 /sbin/ifconfig 输出中的第一个内网 ip,在 ip 后面写上该机器要安装的服务列表即可,部署过程中默认使用标准私有地址,若企业环境使用非标准私有地址,请参考该篇文章后续内容- 非标准私有地址处理方法 的处理方法。
  2. gse 与 redis 需要部署在同一台机器上。
  3. 增加机器数量时,可以将以上配置中的服务挪到新的机器上,分担负载。

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
    

完成环境准备后,可前往 标准部署 开始部署了。


提示:针对服务注册失败的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 ,进行操作前请先确认是否需要备份。

  1. 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 并找到“属性” -> “安全”,然后选择你登陆的用户名,最后点击编辑,勾选“写入”即可。

  1. 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 enablefalse, 在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 部署相关推荐

  1. 蓝鲸智云平台部署[6.0.5]

    蓝鲸智云平台部署 生产环境部署 版本6.5 主机 ip 配置 系统 节点 bk1 192.168.96.188 4c16g centos7.6 主控节点 bk2 192.168.96.210 4c16 ...

  2. 蓝鲸社区版_部署bkdata服务无法启动问题

    问题:蓝鲸社区版完整部署,执行安装bkdata时,报"databus.service.consul start failed." [root@paas-1 install]# ./ ...

  3. .Net Core 3.0 gRPC部署问题解决

    .Net Core 3.0 gRPC部署问题解决 参考文章: (1).Net Core 3.0 gRPC部署问题解决 (2)https://www.cnblogs.com/hulizhong/p/11 ...

  4. 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 ...

  5. win7下安装IIS7.0及部署VS2010 ASP.NET程序网站的相关问题

    win7下安装IIS7.0及部署VS2010 ASP.NET程序网站的相关问题  配置环境 操作系统:microsoft  windows 7 服务平台:.net4.0 开发工具:microsoft  ...

  6. arm搭建云手机教程_教你从0开始部署阿里云服务器,阿里云服务器搭建网站教程...

    教你从0开始部署阿里云服务器,阿里云服务器部署网站的办法,阿里云搭建项目的办法,阿里云服务器搭建网站教程 1.购买 登录官网点击下面链接: 企业上云甄选​partner.aliyun.com 查看云服 ...

  7. MySQL 8.0 安装部署3个注意事项

    墨墨导读:本文分享实际案例中MySQL8.0安装部署时最典型的3个问题,希望对大家有帮助. MySQL 8.0 2016年首次发布,2018年GA版本发布也已经4年多的历程,最新版本已经到8.0.21 ...

  8. VMware-vRealize-Log-Insight-8.2.0.0安装部署指南

    VMware-vRealize-Log-Insight-8.2.0.0安装部署指南 https://blog.csdn.net/u011775882/article/details/110928142 ...

  9. VMware VCSA6.0的部署及升级到6.5

    VMware vCenter Server Appliance(VCSA) 6.0的部署和之前的版本略有不同,在5.5及之前的版本可以通过导入OVA文件的方式快速部署,但从6.0开始需要在Window ...

最新文章

  1. javascript正则表达式小结
  2. 【运筹学】运输规划、表上作业法总结 ( 运输规划模型 | 运输规划变量个数 | 表上作业法 | 最小元素法 | 差额 Vogel 法 ★ | 闭回路法 ) ★★★
  3. 【论文阅读和实现】On Spectral Clustering: Analysis and an algorithm【Python实现】
  4. 华为语音解锁设置_今天才知道,华为自带文字转语音黑科技,1键按下这里即可开启...
  5. HUT-1556 网址
  6. SAP IBASE father component的创建
  7. redis缓存数据表
  8. 网易2016年研发project师编程题(2)
  9. c语言入门经典18个程序
  10. uniapp光标自动定义到文本框_特检自动化行吊静力检测方案
  11. 网站服务器在境外境内怎么维护,涉黄网站服务器移至境外 境内维护人员将受制裁...
  12. 最耐用的手机盘点 网友:我这个能用到品牌商“破产”!
  13. oracle透明网关访问sqlserver_基于智慧照明网关的地下停车场照明解决方案
  14. Java集合——TreeMap源码详解
  15. java搭建后台步骤_Java后台开发环境搭建 – 黄毅超的博客
  16. 书籍推荐系列之一 -- 《凤凰项目:一个IT运维的传奇故事》
  17. RJ45墙上网线插座的线序与接法
  18. matlab里删除文件恢复,删除的文件如何恢复?360安全卫士找回误删文件
  19. 网站SEO优化高质量内容怎么写
  20. 微信小程序开发入门手册

热门文章

  1. 《Linux运维实战:Nginx服务报错unknown directive stream》
  2. 领英不能注册怎么办?
  3. 上班还想摸鱼!这个牛逼的Python模块,轻松记录键盘操作!
  4. Hyperlynx仿真操作小点
  5. 情人节礼物推荐排行榜、这6款好物值得你考虑
  6. 汽车卤素改氙气大灯,再也不用忍受烛光了,给远光狗晃回去
  7. Xbsj Render Error: TypeError: e.charCodeAt is not a function
  8. 墨者靶场部分wp_logs
  9. Android Studio配置JavaCPP Presets for OpenCV
  10. Chrome - JavaScript调试技巧总结(浏览器调试JS)