一篇文章帮你解决离线服务器的运维效率问题
Posted 最弱无败
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇文章帮你解决离线服务器的运维效率问题相关的知识,希望对你有一定的参考价值。
在企业中,一般的服务器都是linux的,并且是不会让你联网的。这个时候我们要安装部署我们的项目,就少不了在离线服务器上安装很多的服务。有tar包的,rpm的,还有python的。如果服务器可以联网,真的会方便很多。往往就是一个命令的问题,但是对于离线服务器就变得困难重重。笔者因为最近的工作需要,从一个运维小白,一步步的变成了公司的运维大佬,虽然我是搞开发的!一个不会linux的开发,是一个不合格的开发。废话不多说,我们开始介绍离线服务器安装软件的方法吧。
tar包的安装
Tar包的安装,一般只需要我们解压之后,进行相应的配置即可。一般来说没有太大的难度。tar包的下载就需要小伙伴自己找国内的镜像下载了。如果没有国内镜像,建议使用IDM,NDM等多线程下载工具进行下载。
当然,如果是redis这种的tar包,还是需要我们使用gcc进行编译的。这个时候就要看我们的下一节了。
rpm的安装
首先,我先把rpm的安装命令给出来,让只需要安装几个包的小伙伴快速安装。
rpm -ivh xxx.rpm # 安装rpm的包,当然这需要我们使用root用户
sudo rpm -ivh xxx.rpm # 普通用户使用sudo命令来安装
# rpm卸载
rpm -e xxx
# rpm升级
rpm -Uvh xxx
# rpm 忽略依赖安装
rpm -ivh --nodeps xxx
如果你已经知道你需要安装的rpm包已经所有依赖,并且安装的数量并不多,可以使用该方法。
可能有的小伙伴会不知道如何去下载自己需要的rpm包,这里提供两个网站。一个阿里云的镜像站:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区一个是国外的rpm搜索站:RPM Search
如果我们需要安装多台服务器,并且有台机器超过了一个rpm的包。请看下一节:构建局域网的离线yum源进行安装
构建局域网的离线yum源进行安装
重复的工作是没有效率的,一定找到更好的方法。rpm的安装是费劲的。一个包可能依赖多个包,依赖的包可能存在版本问题。那么久会很费劲。这个时候你一定想到了yum安装。自动解决依赖的问题,但是没有网络,如何使用呢?
首先,你需要在自己的电脑上安装docker环境,然后拉取一个和自己服务器版本一致的基础镜像过来。docker的安装就不说了。小伙伴自己去网上查吧,很多文章的。
整理的思路就是利用docker构建一个和服务一样的linux环境,这个环境比服务器还要精简,所以下载rpm包时,基本可以下载完所有的依赖包。然后使用createrepo命令生成我们下载包的索引文件。将索引文件和所有的rpm包复制到离线服务器上,或者直接在该容器上启动一个httpd服务器,作为我们离线服务器的yum源。
# 首先启动我们的基础容器,这个以centos为例
docker run -it -v /root/RPMS:/root/RPMS centos:centos7.5.1804 bash
# 备份原来的镜像配置文件
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.rpm /etc/yum.repos.d/bak/
# 配置阿里云的yum源配置文件
http://mirrors.aliyun.com/repo/Centos-7.repo
# 将阿里云的镜像文件下载到容器中,因为没有wget命令,所以要靠外部命令了
# 清空并重建缓存
yum clean all?yum makecache?
# 首先下载我们的createrepo的rpm包
yum install -y createrepo yum-utils
# 其次下载httpd的包
yumdownloader --resolve --destdir=/root/RPMS httpd
# 最后下载我们需要安装的包
yumdownloader --resolve --destdir=/root/RPMS xxx
# 创建我们所下载包的索引文件
createrepo /root/RPMS
# 打包我们的所有rpm包
tar -zcvf RPMS.tar.gz /root/RPMS
# scp传输到我们的离线服务器上
scp RPMS.tar.gz user@ip:/home/xxx/
# 离线服务器上的yum源配置清理,注意这一步开始都是在离线服务器上进行,不是docker容器
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.rpm /etc/yum.repos.d/bak/
# 在离线服务器上配置我们的局域网精简的yum源
vim /etc/yum.repos.dhttpd.repo
[my_yum_repo]
name=my_yum_repo
baseurl=file:///opt/RPMS
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
# 如果局域网使用,请先创建软连接之后,把baseurl改成http://host_ip/RPMS
ln -s /root/RPMS /var/www/html/
# 将yum源的配置文件同步到其他离线服务器
scp /etc/yum.repos.d/httpd.repo root@host_id:/etc/yum.repos.d
# 使用yum命令安装我们的rpm包,自动解决依赖问题
yum install -y xxx
# 如果没有更新yum源的配置文件,但是增加了yum仓库中的rpm包,需要我们彻底清空yum的缓存,否则可能不能install,只能list
yum clean all
rm -rf /var/cache/yum/*?yum makecache
python安装包的离线安装
Python开发中,如果需要安装第三方模块,可以使用一下命令安装
# pip直接安装
pip install xxx.whl
# pip同样可以直接安装tar包的python模块
pip install xxx.tar.gz
当然了,如果需要下载,我们也可以自己从网页下载,或者使用pip的命令。
可以从阿里云直接下载自己需要的模块包:http://mirrors.aliyun.com/pypi/simple/
使用pip下载命令
# pip下载命令
pip download airflow
# pip指定系统版本下载
pip download --platform linux_x86_64 --only-binary=:all: airflow
这里如果是跨平台下载进行安装的话,会有一个比较难受的问题。因为pip的下载命令,如果指定了平台,那么它就只能下载同一种类型的包。当时我们的依赖包可能只提供了一种,这个时候就会下载失败。因为pip仓库并没有强制包必须是什么格式的。所以这个问题就会造成我们大量的重复工作。因此更高效的方法在最后一节
创建纯净的虚拟环境进行离线下载和安装
对没错,依然使用docker启动一个和我们服务器一样版本的基础环境,然后安装anaconda。
其实这个方法的思路就是利用docker的容器来模拟和提供给pip的默认平台,以此来解决不能下载所有依赖的问题。
# 创建一个和离线服务器一样的python版本的虚拟环境
conda create -n airflow python=3.7.6
# 激活环境
source activate airflow
# 使用pip下载命令,下载我们需要的安装包
pip download airflow # 这个时候下载的包就都是可以在服务器上进行安装的包了
# 如果下载某些依赖报错了,则证明我们的容器环境缺少该python模块运行的必要环境,需要我们下载额外的rpm包进行解决
# 使用pip命令安装,并且指定依赖包的目录
pip install --no-index --find-links=./ airflow
以上是关于一篇文章帮你解决离线服务器的运维效率问题的主要内容,如果未能解决你的问题,请参考以下文章
Yurt-Tunnel 详解|如何解决 K8s 在云边协同下的运维监控挑战