安装目录示分区大小而定,不可盲目复制命令进行安装! 
 
安装 Docker 容器服务 CentOS 安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 sudo yum remove docker \                   docker-client \                   docker-client-latest \                   docker-common \                   docker-latest \                   docker-latest-logrotate \                   docker-logrotate \                   docker-engine sudo yum install -y yum-utils yum-config-manager \     --add-repo \     https://download.docker.com/linux/centos/docker-ce.repo  yum-config-manager \     --add-repo \     https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin -y sudo yum install docker-ce-20.10.13 docker-ce-cli-20.10.13 containerd.io docker-compose-plugin -y systemctl start docker systemctl enable  docker docker version 
Ubuntu 安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 sudo apt-get remove docker docker-engine docker.io containerd runc sudo apt-get update sudo apt-get install \     apt-transport-https \     ca-certificates \     curl \     gnupg-agent sudo curl -fsSL http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod  a+r /etc/apt/keyrings/docker.asc echo  \  "deb [arch=$(dpkg --print-architecture)  signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \    $(. /etc/os-release && echo "$VERSION_CODENAME " )  stable"  | \  sudo tee  /etc/apt/sources.list.d/docker.list > /dev/null    sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io docker-compose-plugin apt-cache madison docker-ce  docker-ce | 5:20.10.18~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages  docker-ce | 5:20.10.17~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages  docker-ce | 5:20.10.16~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages   sudo apt-get install docker-ce=5:20.10.17~3-0~ubuntu-focal docker-ce-cli=5:20.10.17~3-0~ubuntu-focal containerd.io docker-compose-plugin systemctl start docker systemctl enable  docker 
DockerHub 国内网络无法访问,如何下载镜像文件,离线导入 使用 Github Action 构建 docker 镜像 
安装 MiniKube 单机 K8S 服务 
安装环境:CentOS 8 
 
安装 kubectl 
安装工具 | Kubernetes 
 
安装 MiniKube 
minikube start | minikube 中文 
 
常用命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 minikube start --driver='docker'  --cache-images=true   --kubernetes-version='v1.31.0'  --registry-mirror='https://hub.geekery.cn'  --base-image='registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.45'  --listen-address=0.0.0.0 --force minikube dashboard kubectl port-forward -n kubernetes-dashboard svc/kubernetes-dashboard 8080:80 --address 0.0.0.0 minikube image load registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.12.0-beta.0 minikube image load registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.4.4 minikube addons enable  ingress --images="KubeWebhookCertgenCreate=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.4.4,KubeWebhookCertgenPatch=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.4.4,IngressController=google_containers/nginx-ingress-controller:v1.12.0-beta.0"  --registries="IngressController=registry.cn-hangzhou.aliyuncs.com"  eval  $(minikube -p minikube docker-env)docker load -i vxtcip-boot-v1.0.0.tar kubectl apply -f *-deployment.yaml kubectl rollout restart -n ${namespace-name}  deployment ${deployment-name}  kubectl delete -n ${namespace-name}  deployment ${deployment-name}  
安装 Kubernetes 集群和 KubeSphere 
官方文档: 在 Linux 上安装 Kubernetes 和 KubeSphere 
参考博客:33 张高清大图,带你玩转 KubeSphere 4.1.2 部署与扩展组件安装 
 
前置条件 安装 Ansible 自动化运维工具(用于批量执行脚本/命令) 参考本文《Ansible 安装与配置》
操作系统基础配置 可使用 Ansible 批量在集群机器上执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 hostnamectl set-hostname k8s-control-1 ansible k8s -m shell -a 'echo "nameserver 114.114.114.114" > /etc/resolv.conf'  ansible k8s -m shell -a 'timedatectl set-timezone Asia/Shanghai'  ansible k8s -m shell -a 'yum install chrony -y'  ansible k8s -m shell -a "sed -i 's/^pool pool.*/pool cn.pool.ntp.org iburst/g' /etc/chrony.conf"  ansible k8s -m shell -a 'systemctl enable chronyd --now'  ansible k8s -m shell -a 'chronyc sourcestats -v'  ansible k8s -m shell -a 'systemctl stop firewalld && systemctl disable firewalld'  ansible k8s -m shell -a "sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config"  ansible k8s -m shell -a 'yum install curl socat conntrack ebtables ipset ipvsadm -y'  
磁盘配置 每台服务器新增一块数据盘 /dev/sdb ,用于 Containerd  和 Kubernetes Pod  的持久化存储
为了满足用户在上线后数据盘容量不足时,可以实现动态扩容的需求。本文采用了 LVM 的方式配置磁盘
使用 LVM 配置硬盘,并挂载到数据目录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 pvcreate /dev/sdb vgcreate data /dev/sdb lvcreate -l 100%VG data -n lvdata、 mkfs.xfs /dev/mapper/data-lvdata mkdir  /u01mount /dev/mapper/data-lvdata /u01/ tail  -1 /etc/mtab >> /etc/fstabmkdir  -p /u01/openebs/localmkdir  -p /u01/containerdln  -s /u01/containerd /var/lib/containerd
部署 Kubernetes 集群 使用 KubeSphere 出品的 KubeKey 工具,可以根据配置文件一键部署 K8S 高可用集群
选择一台 control 节点作为部署节点,执行下面的操作
下载 KubeKey 
创建 Kubernetes 集群部署配置 
创建集群配置文件
1 ./kk create config -f ksp-k8s-v12815.yaml --with-kubernetes v1.28.15 
修改配置文件
 
本文采用 3 个节点同时作为 control-plane、etcd 和 worker 节点
请使用编辑器,编辑配置文件 ksp-k8s-v12815.yaml,修改 kind: Cluster  小节中 hosts 和 roleGroups 等信息,修改说明如下:
hosts:指定节点的 IP、ssh 用户、ssh 密码 
roleGroups:指定 3 个 etcd、control-plane 节点,并复用为 worker 节点 
internalLoadbalancer: 启用内置的 HAProxy 负载均衡器 
domain:自定义域名 lb.opsxlab.cn ,没特殊需求可使用默认值 lb.kubesphere.local  
clusterName:自定义 opsxlab.cn ,没特殊需求可使用默认值 cluster.local  
autoRenewCerts:该参数可以实现证书到期自动续期,默认为 true  
containerManager:容器运行时使用 containerd  
storage.openebs.basePath:默认没有,新增配置 ,指定 openebs 默认存储路径为 /data/openebs/local  
registry.privateRegistry:可选配置,  解决 Docker 官方镜像不可用的问题 
registry.namespaceOverride: 可选配置,  解决 Docker 官方镜像不可用的问题 
 
修改后的完整示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 apiVersion:  kubekey.kubesphere.io/v1alpha2 kind:  Cluster metadata:   name:  vansys  spec:   hosts:    -  {name:  k8s-control-1 , address:  192.168 .99 .101 , internalAddress:  192.168 .99 .101 , user:  root , password:  "xxx" }   -  {name:  k8s-control-2 , address:  192.168 .99 .102 , internalAddress:  192.168 .99 .102 , user:  root , password:  "xxx" }   -  {name:  k8s-control-3 , address:  192.168 .99 .103 , internalAddress:  192.168 .99 .103 , user:  root , password:  "xxx" }   roleGroups:      etcd:      -  k8s-control-1      -  k8s-control-2      -  k8s-control-3      control-plane:       -  k8s-control-1      -  k8s-control-2      -  k8s-control-3      worker:      -  k8s-control-1      -  k8s-control-2      -  k8s-control-3    controlPlaneEndpoint:      domain:  lb.kubesphere.local      address:  ""      port:  6443    kubernetes:      version:  v1.28.15      clusterName:  cluster.local      autoRenewCerts:  true      containerManager:  containerd    etcd:      type:  kubekey    network:      plugin:  calico      kubePodsCIDR:  10.233 .64 .0 /18      kubeServiceCIDR:  10.233 .0 .0 /18      enableMultusCNI:  false    storage:      openebs:        basePath:  /u01/openebs/local    registry:           privateRegistry:  "registry.cn-beijing.aliyuncs.com"       namespaceOverride:  "kubesphereio"      registryMirrors:  []     insecureRegistries:  []   addons:  [] 
部署 Kubernetes 集群 使用上面创建的配置文件,执行下面的命令,创建 K8S 集群
1 2 export  KKZONE=cn./kk create cluster -f ksp-k8s-v12815.yaml 
命令执行后,首先 Kubekey  会检查部署 K8S 的依赖及其他详细要求。通过检查后,系统将提示您确认安装。输入 yes  并按 ENTER  继续部署
部署完成需要大约 10-20 分钟左右,具体需要看网速跟机器配置,若部署成功,会在终端显示如下信息:
1 2 3 4 5 6 20:10:23 CST Pipeline[CreateClusterPipeline] execute successfully Installation is complete. Please check the result using the command :         kubectl get pod -A 
验证 Kubernetes 集群状态 在 control-1 控制节点使用 kubectl 命令验证
1 2 3 4 5 6 kubectl get nodes -o wide kubectl get pods -A -o wide crictl images ls  
问题记录 安装 Kubernetes 时出现如下日志,且 kubeadm 初始化集群超时
1 detected that  the  sandbox image "registry.k8s.io/pause:3.8"  of  the  container runtime is  inconsistent with  that  used by  kubeadm. It is  recommended that  using "registry.cn-beijing.aliyuncs.com/kubesphereio/pause:3.9"  as  the  CRI sandbox image 
问题原因:containerd 配置的 sandbox image 跟 kubeadm 配置的不一致
解决办法:将 /etc/containerd/config.toml 配置文件中的 sandbox_image 修改为 KubeKey 创建集群的配置文件中 privateRegistry 仓库的镜像,保持跟 kubeadm 的一致
1 2 [plugins."io.containerd.grpc.v1.cri"]   sandbox_image  = "registry.cn-beijing.aliyuncs.com/kubesphereio/pause:3.9"  
Redis 缓存服务安装部署 这里下载的是 redis-5.0.8.tar.gz 安装包,并将其直接放在了 opt ⽬ 录下
解压安装包 1、在 /usr/local/ 下创建 redis ⽂ 件夹并进 ⼊
1 2 3 cd  /usr/local/mkdir  rediscd  redis
2、将 Redis 安装包解压到 /usr/local/redis 中即可
1 tar zxvf /opt/redis-5.0.8.tar.gz -C ./ 
解压完之后, /usr/local/redis ⽬ 录中会出现 ⼀ 个 redis-5.0.8.tar.gz 的 ⽬ 录
编译并安装 1 2 cd  redis-5.0.8/make && make install 
将 Redis 安装为系统服务并后台启动 进入 utils 目录,并执行如下脚本即可:
1 2 cd  utils/./install_server.sh 
此处我全部选择默认配置,有需要可以按需选择
查看 Redis 服务启动情况 直接执行如下命令来查看 Redis 的启动结果:
1 2 3 4 5 6 systemctl status redis_6379.service 启动:systemctl start redis_6379.service 停止:systemctl stop redis_6379.service 重启:systemctl restart redis_6379.service 
启动 Redis 客户端并测试 启动自带的 redis-cli 客户端,测试通过:
但是此时只能在本地访问,无法远程连接,因此还需要做部分设置
运行远程连接 编辑 redis 配置文件
1 vim /etc/redis/6379.conf 
将 bind 127.0.0.1 修改为 0.0.0.0
保存然后重启 Redis 服务即可:
1 systemctl restart redis_6379.service 
设置访问密码 编辑 redis 配置文件
1 vim /etc/redis/6379.conf 
找到如下内容:
去掉注释,将 foobared 修改为自己想要的密码,保存即可。
保存然后重启 Redis 服务即可:
1 systemctl restart redis_6379.service 
这样后续的访问需要先输入密码认证通过:
WEB 服务器 Nginx 安装部署 这 ⾥ 下载的是 nginx-1.17.10.tar.gz 安装包,并将其直接放在了 opt ⽬ 录下
解压安装包 1、在 /usr/local/ 下创建 nginx ⽂ 件夹并进 ⼊
1 2 3 cd  /usr/local/mkdir  nginxcd  nginx
2、将 Nginx 安装包解压到 /usr/local/nginx 中即可
1 tar  zxvf /opt/nginx-1 .17 .10 .tar.gz -C ./
解压完之后, /usr/local/nginx ⽬ 录中会出现 ⼀ 个 nginx-1.17.10 的 ⽬ 录
预先安装额外的依赖 1 yum -y install pcre-devel openssl openssl-devel gcc gcc-c++ autoconf automake make 
编译安装 Nginx 1 2 3 4 cd  nginx-1.17.10./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module make && make install 
安装完成后,Nginx 的可执 ⾏⽂ 件位置位于
1 /usr/local/nginx/sbin/nginx 
启动 Nginx 直接执 ⾏ 如下命令即可:
1 /usr/ local/nginx/ sbin/nginx
如果想停 ⽌ Nginx 服务,可执 ⾏:
1 /usr/ local/nginx/ sbin/nginx -s stop
如果修改了配置 ⽂ 件后想重新加载 Nginx,可执 ⾏:
1 /usr/ local/nginx/ sbin/nginx -s reload
注意其配置 ⽂ 件位于:
1 /usr/ local/nginx/ conf/nginx.conf
Centos6.9 注册为系统服务,并开机自启 首先,在 linux 系统的/etc/init.d/目录下创建 nginx 文件,使用如下命令:
vi /etc/init.d/nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 #!/bin/sh . /etc/rc.d/init.d/functions . /etc/sysconfig/network [ "$NETWORKING "  = "no"  ] && exit  0 nginx="/usr/local/nginx/sbin/nginx"  prog=$(basename  $nginx ) NGINX_CONF_FILE="/usr/local/nginx/conf"  [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs        user=`$nginx  -V 2>&1 | grep "configure arguments:"  | sed 's/[^*]*--user=\([^ ]*\).*/\1/g'  -`    if  [ -z "`grep $user  /etc/passwd`"  ]; then         useradd -M -s /bin/nologin $user     fi     options=`$nginx  -V 2>&1 | grep 'configure arguments:' `    for  opt in  $options ; do         if  [ `echo  $opt  | grep '.*-temp-path' ` ]; then             value=`echo  $opt  | cut  -d "="  -f 2`            if  [ ! -d "$value "  ]; then                                 mkdir  -p $value  && chown  -R $user  $value             fi         fi     done  } start     [ -x $nginx  ] || exit  5     [ -f $NGINX_CONF_FILE  ] || exit  6     make_dirs     echo  -n $"Starting $prog : "      daemon $nginx  -c $NGINX_CONF_FILE      retval=$?     echo      [ $retval  -eq 0 ] && touch  $lockfile      return  $retval  } stop     echo  -n $"Stopping $prog : "      killproc $prog  -QUIT     retval=$?     echo      [ $retval  -eq 0 ] && rm  -f $lockfile      return  $retval  } restart     configtest || return  $?     stop     sleep  1     start } reload     configtest || return  $?     echo  -n $"Reloading $prog : "      killproc $nginx  -HUP     RETVAL=$?     echo  } force_reload     restart } configtest   $nginx  -t -c $NGINX_CONF_FILE  } rh_status     status $prog  } rh_status_q     rh_status >/dev/null 2>&1 } case  "$1 "  in     start)         rh_status_q && exit  0         $1          ;;     stop)         rh_status_q || exit  0         $1          ;;     restart|configtest)         $1          ;;     reload)         rh_status_q || exit  7         $1          ;;     force-reload)         force_reload         ;;     status)         rh_status         ;;     condrestart|try-restart)         rh_status_q || exit  0             ;;     *)         echo  $"Usage: $0  {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"          exit  2 esac 
保存脚本文件,并修改权限:
1 2 3 4 5 6 7 8 9 chmod  a+x /etc/init.d/nginxchkconfig --add /etc/init.d/nginx service nginx start service nginx stop chkconfig nginx on 
CentOS7 注册为系统服务,并开机自启 在系统中创建服务脚本,命令如下:
vi /usr/lib/systemd/system/nginx.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [Unit] Description =nginx - web serverAfter=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/usr/ local/nginx/ logs/nginx.pid ExecStartPre=/usr/ local/nginx/ sbin/nginx -t -c /u sr/local/ nginx/conf/ nginx.conf ExecStart=/usr/ local/nginx/ sbin/nginx -c /u sr/local/ nginx/conf/ nginx.conf ExecReload=/usr/ local/nginx/ sbin/nginx -s reload ExecStop=/usr/ local/nginx/ sbin/nginx -s stop ExecQuit=/usr/ local/nginx/ sbin/nginx -s quit PrivateTmp=true  [Install] WantedBy=multi-user.target 
重新加载系统服务,并设置开机自启
1 2 3 4 5 6 systemctl daemon-reload systemctl start nginx.service systemctl enable  nginx.service 
JDK(Java 环境)安装 
注意:这 ⾥ 安装的是 Oracle JDK
 
准备 JDK 安装包 我这里下载的是 jdk-8u251-linux-x64.tar.gz 安装包,并将其放在了 /opt 目录下
卸载已有的 OPENJDK(如果有) 如果系统 ⾃ 带有 OpenJDK,可以按照如下步骤提前卸载之。
接下来可以将 java 开头的安装包均卸载即可:
1 2 3 yum -y remove java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64 yum -y remove java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 ... 省略 ... 
创建目录并解压 1、在 /usr/local/ 下创建 java 文件夹并进入
1 2 3 cd  /usr/local/mkdir  javacd  java
2、将上 ⾯ 准备好的 JDK 安装包解压到 /usr/local/java 中即可
1 tar -zxvf /opt/ jdk-8 u251-linux-x64.tar.gz -C ./ 
解压完之后, /usr/local/java ⽬ 录中会出现 ⼀ 个 jdk1.8.0_251 的 ⽬ 录
配置 JDK 环境变量 编辑 /etc/profile 文件,在文件尾部加入如下 JDK 环境配置即可
1 2 3 4 JAVA_HOME =/usr/local/java/jdk1.8.0_251CLASSPATH =$JAVA_HOME /lib/PATH =$PATH :$JAVA_HOME/binexport  PATH JAVA_HOME CLASSPATH
然后执 ⾏ 如下命令让环境变量 ⽣ 效
验证 JDK 安装结果 输入如下命令即可检查安装结果:
Maven 项目构建和管理工具安装 准备 MAVEN 安装包并解压 这 ⾥ 下载的是 apache-maven-3.6.3-bin.tar.gz 安装包,并将其放置于提前创建好的 /usr/local/maven ⽬ 录下。
执 ⾏ 命令解压之:
1 tar -zxvf /opt/apache-maven-3.6.3-bin.tar.gz -C ./ 
即可在当前 ⽬ 录得到 /usr/local/maven/apache-maven-3.6.3 ⽬ 录
配置 MAVEN 加速镜像源 这 ⾥ 配置的是阿 ⾥ 云的 maven 镜像源。
编辑修改 /usr/local/maven/apache-maven-3.6.3/conf/settings.xml ⽂ 件,在 <mirrors></mirrors> 标签对 ⾥ 添加如下内容即可:
1 2 3 4 5 6 <mirror >     <id > alimaven</id >      <name > aliyun maven</name >      <url > http://maven.aliyun.com/nexus/content/groups/public/</url >      <mirrorOf > central</mirrorOf >  </mirror > 
配置环境变量 因为下载的是 ⼆ 进制版安装包,所以解压完,配置好环境变量即可使用了。
编辑修改 /etc/profile ⽂ 件,在 ⽂ 件尾部添加如下内容,配置 maven 的安装路径
1 2 export  MAVEN_HOME =/usr/local/maven/apache-maven-3.6.3export  PATH =$MAVEN_HOME /bin:$PATH
接下来执行 source /etc/profile 来刷新环境变量,让 maven 环境的路径配置生效
检验安装结果 执 ⾏ mvn –v ,能打印出 maven 版本信息说明安装、配置成功:
Jenkins 安装与配置 安装 Jenkins Master 
Jenkins 官方安装文档 
 
Docker 安装 Jenkins(推荐) 
使用 Docker 安装 Jenkins
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 docker run -d --name jenkins --restart always \ --user root -p 8080 :8080  -p 50000 :50000  \ -v /var/ jenkins_home:/var/ jenkins_home \ -v /usr/ local/maven/ apache-maven-3.6 .3 :/usr/ local/maven/ apache-maven-3.6 .3  \ -v /usr/ local/java/ jdk1.8.0 _251:/usr/ local/java/ jdk1.8.0 _251 \ -v /usr/ local/sonar-scanner/ sonar-scanner-4.6 .0.2311 -linux:/usr/ local/sonar-scanner/ sonar-scanner-4.6 .0.2311 -linux \ -v /var/ run/docker.sock:/ var/run/ docker.sock \ jenkinsci/blueocean docker run -d --name jenkins --restart always \ --user root -p 8080 :8080  -p 50000 :50000  \ -v /u01/ jenkins_home:/var/ jenkins_home \ -v /var/ run/docker.sock:/ var/run/ docker.sock \ jenkinsci/blueocean 
 
War 安装 Jenkins 
下载页面:https://jenkins.io/zh/download/ 
安装文件:jenkins.war
1 2 3 4 5 6 7 8 9 1 、将最新的稳定Jenkins WAR包 下载到您计算机上的相应目录。2 、在下载的目录内打开一个终端/命令提示符窗口到。3 、运行命令java -jar jenkins.war4 、浏览http:5 、继续使用Post-installation setup wizard后面步骤设置向导。
解锁 Jenkins 
获取并输入 admin 账户密码(我这里是 docker 安装的,目录是映射到指定位置的,密码实际存放路径以提示为主)
cat /var/jenkins_home/secrets/initialAdminPassword
跳过插件安装 
因为 Jenkins 插件需要连接默认官网下载,速度非常慢,而且容易安装失败,所以我们暂时先跳过插件安装。
添加一个管理员账户,并进入 Jenkins 后台 
保存并完成 
开始使用 Jenkins 
安装 Jenkins Slave 系统设置 > 节点管理 > 新建节点
下载 agent.jar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mkdir  -p /dev/jenkinsagentcd  /dev/jenkinsagentwget http://192.168.88.230:8080/jnlpJars/agent.jar echo  0bdf5bac23b7d4e66880934b25bda0f353509529b7f843ebb688614ba389680e > secret-filenohup  java -jar agent.jar -jnlpUrl http://192.168.88.230:8080/computer/build/jenkins-agent.jnlp -secret @secret-file -workDir "/u01/jenkins-agent"  2>&1 &sh -x start.sh ps aux | grep agent 
Jenkins 插件管理 Jenkins 本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从 Gitlab 拉取代码,使用 Maven 构建项目等功能需要依靠插件完成。接下来演示如何下载插件。
修改 Jenkins 插件下载地址 
Jenkins 国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:
Jenkins -> Manage Jenkins -> Manage Plugins,点击Available
这样做是为了把 Jenkins 官方的插件列表下载到本地,接着修改地址文件,替换为国内插件地址:
1 2 3 4 5 cd  /var/jenkins_home/updates sed -i 's/http:\/\/updates.jenkins ci.org\/download/https :\/\/mirrors.tuna.tsinghua.edu.cn \/jenkins/g ' default.json && sed -i 's/http:\/\/www.google.com/https :\/\/www.baidu.com/g ' default.json 
最后,Manage Plugins 点击 Advanced,把 Update Site 改为国内插件下载地址
Sumbit 后,在浏览器输入: http://120.78.204.65:8180/restart  ,重启 Jenkins。
下载中文汉化插件 
Jenkins -> Manage Jenkins -> Manage Plugins,点击Available,搜索"Chinese"
完成后如下图所示:
重启 Jenkins 之后,就看到 Jenkins 汉化了!(PS:某些菜单可能会汉化失败)
Jenkins 用户权限管理 我们可以利用 Role-based Authorization Strategy 插件来管理 Jenkins 用户权限
安装 Role-based Authorization Strategy 插件 
开启权限全局安全配置 
授权策略切换为 “Role-Based Strategy”,保存
创建角色 
在系统管理页面进入 Manage and Assign Roles
点击 “Manage Roles”
Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
Item roles(项目角色): 针对某个或者某些项目的角色
Node roles(节点角色):节点相关的权限
我们添加以下三个角色:
baseRole:该角色为全局角色。这个角色需要绑定 Overall 下面的 Read 权限,是为了给所有用户绑定最基本的 Jenkins 访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission 
role1:该角色为项目角色。使用正则表达式绑定 .vx-chx.\*,意思是只能操作 vx-chx 开头的项目。 
role2:该角色为项目角色。使用正则表达式绑定 .vx-phm.\*,意思是只能操作 vx-phm 开头的项目。 
 
保存
创建用户 
在系统管理页面进入 Manage Users
分别创建两个用户:vxchx 和 vxphm
给用户分配角色 
系统管理页面进入 Manage and Assign Roles,点击 Assign Roles
绑定规则如下:
保存
创建项目测试权限 
以 admin 管理员账户创建两个项目,分别为 vx-chx-test 和 vx-phm-test
结果为: vxchx 用户登录,只能看到 vx-chx-test 项目 vxphm 用户登录,只能看到 vx-phm-test 项目
Jenkins 凭证管理 凭据可以用来存储需要密文保护的数据库密码、Gitlab 密码信息、Docker 私有仓库密码等,以便 Jenkins 可以和这些第三方的应用进行交互。
安装 Credentials Binding 插件 
要在 Jenkins 使用凭证管理功能,需要安装 Credentials Binding 插件
注:新版本已经默认安装了此插件,这里无需另外再安装了
 
系统管理中选择 Manage Credentials
可以添加的凭证有 5 种:
Username with password:用户名和密码 
SSH Username with private key: 使用 SSH 用户和密钥 
Secret file:需要保密的文本文件,使用时 Jenkins 会将文件复制到一个临时目录中,再将文件路径 设置到一个变量中,等构建结束后,所复制的 Secret file 就会被删除。 
GitHub App:GitHub 的 API 令牌 
Secret text:需要保存的一个加密的文本串,如钉钉机器人或 Github 的 api token 
Certificate:通过上传证书文件的方式 
 
常用的凭证类型有:Username with password(用户密码)  和 SSH Username with private key(SSH 密钥) 
接下来以使用 Git 工具到 Gitlab 拉取项目源码为例,演示 Jenkins 的如何管理 Gitlab 的凭证。
安装 Git 插件和 Git 工具 
为了让 Jenkins 支持从 Gitlab 拉取源码,需要安装 Git 插件以及在服务器上安装 Git 工具。
Git 插件安装:
服务器上安装 Git 工具(以 CentOS7 为例):
1 2 3 4 yum install git -y git --version 
用户密码类型 
1)创建凭据
Jenkins -> 凭证 -> 系统 -> 全局凭据 -> 添加凭据
选择 “Username with password”,输入 Gitlab 的用户名和密码,点击 “确定”。
SSH 密钥类型 
SSH 免密登录示意图
1)使用 root 用户生成公钥和私钥
ssh-keygen -t rsa
在/root/.ssh/目录保存了公钥和使用
id_rsa:私钥文件
id_rsa.pub:公钥文件
2)把生成的公钥放在 Gitlab 中
登录gitlab -> 点击头像 -> Settings -> SSH Keys
复制刚才 id_rsa.pub 文件的内容到这里,点击 “Add Key”
3)在 Jenkins 中添加凭证,配置私钥
在 Jenkins 添加一个新的凭证,类型为 “SSH Username with private key”,把刚才生成私有文件内容复制过来
Jenkins 关联 JDK 和 Maven 关联 JDK 
Jenkins -> 系统管理 -> 全局工具配置 -> JDK -> 新增JDK,配置如下:
关联 Maven 
Jenkins -> 系统管理 -> 全局工具配置 -> Maven -> 新增Maven,配置如下:
Jenkins 关闭跨站请求伪造保护 
1 2 3 4 5 6 7 8 9 10 11 docker exec -u root -it  你的Jenkins容器名称或者容器id  bash vi /usr/local /bin/jenkins.sh -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true  docker restart jenkins 
添加 Jenkins 全局变量 Jenkins -> 系统管理 -> 全局属性 -> 添加三个环境变量,配置如下:
Jenkins 数据迁移和备份 将安装 Jenkins 的机器上的 jenkins_home 目录下的 config.xml 文件,jobs 文件夹,users 文件夹和 plugins 文件夹打包
config.xml 是存放配置信息的 
jobs 是存放创建的工程项目的 
users 是存放用户账信息的 
plugins 是存放插件的 
 
Jenkins 删除构建历史 1 2 3 4 5 6 7 8 9 10 def  jobName = "xxx" def  maxNumber = xxxJenkins.instance.getItemByFullName(jobName).builds.findAll {   it.number <= maxNumber }.each {   it.delete() } 
Jenkins 构建 Maven 项目 
构建方式均采用 Jar 包方式,War 方式参考 WAR 部署方案 · JeecgBoot 开发文档 
 
Jenkins 项目构建类型 Jenkins 中自动构建项目的类型有很多,常用的有以下三种:
自由风格软件项目(FreeStyle Project) 
Maven 项目(Maven Project) 
流水线项目(Pipeline Project) 
 
每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高)
自由风格项目构建 下面演示创建一个自由风格项目来完成项目的集成过程:
拉取代码 -> 编译 -> 打包 -> 部署
拉取代码 
1)创建项目
2)源码管理,从 Gitlab 拉取代码
编译打包 
构建 -> 添加构建步骤 -> 执行shell
1 2 3 echo  "开始编译和打包" mvn clean package echo  "编译和打包结束" 
部署 
把项目部署到远程的服务器上,并启动
1)安装 Publish Over SSH 插件
Jenkins 本身无法实现远程部署到服务器上的功能,需要安装 Publish Over SSH 插件实现
2)配置 Publish over SSH,添加 SSH 服务器
打开系统管理 -> 系统配置 -> 拉到底部,选择Publish over SSH区域选择新增
点击高级 -> 填写服务器密码(也可选择 ssh 验证,在 Jenkins 中配置本机私钥,将公钥发送到目标机器,即可完成无密码登录)
发送命令:ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.xxx.xxx
Passphrase: 密码(目标机器的密码) 
Path to key:key 文件(私钥)的路径 
SSH Server Name: 标识的名字(随便你取什么) 
Hostname: 需要连接 ssh 的主机名或 ip 地址,此处填写应用服务器 IP(建议 ip) 
Username: 用户名 
Remote Directory: 远程目录(要发布的目录, 比如/usr/local/tomcat/webapps/) 
 
3)添加构建步骤
1 2 3 4 5 6 7 source  /etc/profilecd  /appsps  -ef|grep jeecg-boot-module-system-3 .1 .0 .jar|grep -v grep|awk '{print $2 }'|xargs kill -s 9 BUILD_ID =dontKillMenohup  java -jar jeecg-boot-module-system-3 .1 .0 .jar > jeecg-boot-module-system-3 .1 .0 .log 2 >&1  &
4)点击 “立即构建”,开始构建过程
5)构建成功,并自动化部署,访问测试!
Maven 项目构建 1)安装 Maven Integration Plugin(高版本的 Jenkins 已预装了此插件)
2)创建 Maven 项目
3)配置项目
拉取代码和远程部署的过程和自由风格项目一样,只是 “构建” 部分不同
Pipeline 流水线项目构建(*) Pipeline 简介 1)概念 
Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。
2)使用 Pipeline 有以下好处(来自翻译自官方文档): 
代码:Pipeline 以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流 程。持久:无论是计划内的还是计划外的服务器重启。Pipeline 都是可恢复的。可停止:Pipeline 可接 收交互式输入,以确定是否继续执行 Pipeline。多功能:Pipeline 支持现实世界中复杂的持续交付要求。它支持 fork/join、循环执行,并行执行任务的功能。可扩展:Pipeline 插件支持其 DSL 的自定义扩展,以及与其他插件集成的多个选项。
3)如何创建 Jenkins Pipeline 呢? 
Pipeline 脚本是由 Groovy  语言实现的,但是我们没必要单独去学习 Groovy 
Pipeline 支持两种语法:Declarative (声明式)和 Scripted Pipeline (脚本式)语法 
Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)中直接载入 Jenkinsfile Pipeline 这种方法)。 
 
Pipeline 语法快速入门 1)Declarative 声明式-Pipeline 
创建一个流水线项目
流水线 -> 选择HelloWorld模板
生成的内容如下:
1 2 3 4 5 6 7 8 9 10 11 pipeline {     agent any     stages {         stage('Hello' ) {             steps {                 echo 'Hello World'              }         }     } } 
stages:  代表整个流水线的所有执行阶段。通常 stages 只有 1 个,里面包含多个 stage
stage:  代表流水线中的某个阶段,可能出现 n 个。一般分为拉取代码,编译构建,部署等阶段。
steps:  代表一个阶段内需要执行的逻辑。steps 里面是 shell 脚本,git 拉取代码,ssh 远程发布等任意内容。
 
编写一个简单声明式的 Pipeline:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 pipeline {     agent any     stages {         stage('拉取代码' ) {             steps {             	echo '拉取代码'              }         }         stage('编译构建' ) {             steps {             	echo '编译构建'              }         }         stage('项目部署' ) {             steps {             	echo '项目部署'              }         }     } } 
点击构建,进入 Blue Ocean 可以看到整个构建过程
2)Scripted Pipeline 脚本式-Pipeline 
创建项目
选择 Scripted Pipeline"
1 2 3 4 5 6 7 8 9 10 11 12 node {     def  mvnHome     stage('Preparation' ) {      }     stage('Build' ) {     }     stage('Results' ) {     } } 
Node:节点,一个 Node 就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step 的具体运行环境,后续讲到 Jenkins 的 Master-Slave 架构的时候用到。 
Stage:阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,比如: Build、Test、Deploy,Stage 是一个逻辑分组的概念。 
Step:步骤,Step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像, 由各类 Jenkins 插件提供,比如命令:sh ‘make’,就相当于我们平时 shell 终端中执行 make 命令 一样。 
 
编写一个简单的脚本式 Pipeline
1 2 3 4 5 6 7 8 9 10 11 12 node {     def mvnHome     stage ('拉取代码'      	echo '拉取代码'      }     stage ('编译构建'      	echo '编译构建'      }     stage ('项目部署'      	echo '项目部署'      } } 
构建结果和声明式一样!
Pipeline Script from SCM 
刚才我们都是直接在 Jenkins 的 UI 界面编写 Pipeline 代码,这样不方便脚本维护,建议把 Pipeline 脚本放在项目中(一起进行版本控制)
1)在项目根目录建立 Jenkinsfile 文件,把内容复制到该文件中 
把 Jenkinsfile 上传到 Gitlab
2)在项目中引用该文件 
Jenkinsfile Jenkinsfile 环境变量 
环境变量 
说明 
 
 
BRANCH_NAME 
在 multibranch 项目中,BRANCH_NAME 用于标明构建分支的名称。 
 
CHANGE_ID 
在 multibranch 的项目中,相较于特定的变更请求,用于标明变更 ID,比如 Pull Request 
 
CHANGE_URL 
在 multibranch 的项目中,相较于特定的变更请求,用于标明变更的 URL 
 
CHANGE_TITLE 
在 multibranch 的项目中,相较于特定的变更请求,用于标明变更的标题 
 
CHANGE_AUTHOR 
在 multibranch 的项目中,相较于特定的变更请求,用于标明提交变更的人员的名称 
 
CHANGE_AUTHOR_DISPLAY_NAME 
在 multibranch 的项目中,相较于特定的变更请求,用于标明提交变更的人员的显示名称 
 
CHANGE_AUTHOR_EMAIL 
在 multibranch 的项目中,相较于特定的变更请求,用于标明提交变更的人员的邮件地址 
 
CHANGE_TARGET 
在 multibranch 的项目中,相较于特定的变更请求,用于合并后的分支信息等 
 
BUILD_NUMBER 
当前的构建编号 
 
BUILD_ID 
在 1.597 版本后引进,表示当前构建 ID 
 
BUILD_DISPLAY_NAME 
当前构建的显示信息 
 
JOB_NAME 
构建 Job 的全称,包含项目信息 
 
JOB_BASE_NAME 
除去项目信息的 Job 名称 
 
BUILD_TAG 
构建标签 
 
EXECUTOR_NUMBER 
执行器编号,用于标识构建器的不同编号 
 
NODE_NAME 
构建节点的名称 
 
NODE_LABELS 
节点标签 
 
WORKSPACE 
构建时使用的工作空间的绝对路径 
 
JENKINS_HOME 
JENKINS 根目录的绝对路径 
 
JENKINS_URL 
Jenkins 的 URL 信息 
 
BUILD_URL 
构建的 URL 信息 
 
JOB_URL 
构建 Job 的 URL 信息 
 
GIT_COMMIT 
git 提交的 hash 码 
 
GIT_PREVIOUS_COMMIT 
当前分支上次提交的 hash 码 
 
GIT_PREVIOUS_SUCCESSFUL_COMMIT 
当前分支上次成功构建时提交的 hash 码 
 
GIT_BRANCH 
远程分支名称 
 
GIT_LOCAL_BRANCH 
本地分支名称 
 
GIT_URL 
远程 URL 地址 
 
GIT_COMMITTER_NAME 
Git 提交者的名称 
 
GIT_AUTHOR_NAME 
Git Author 的名称 
 
GIT_COMMITTER_EMAIL 
Git 提交者的 email 地址 
 
GIT_AUTHOR_EMAIL 
Git Author 的 email 地址 
 
MERCURIAL_REVISION 
Mercurial 的版本 ID 信息 
 
MERCURIAL_REVISION_SHORT 
Mercurial 的版本 ID 缩写 
 
MERCURIAL_REVISION_NUMBER 
Mercurial 的版本号信息 
 
MERCURIAL_REVISION_BRANCH 
分支版本信息 
 
MERCURIAL_REPOSITORY_URL 
仓库 URL 信息 
 
SVN_REVISION 
Subversion 的当前版本信息 
 
SVN_URL 
当前工作空间中被 checkout 的 Subversion 工程的 URL 地址信息 
 
常用的构建触发器 Jenkins 内置 4 种构建触发器:
触发远程构建 
其他工程构建后触发(Build after other projects are build) 
定时构建(Build periodically) 
轮询 SCM(Poll SCM) 
GitHub 钩子触发的 GIT SCM 轮询(GitHub hook trigger for GITScm polling) 
 
触发远程构建 
触发构建 url:http://192.168.88.86:8180/job/vx-phm/build?token  = abcabc
其他工程构建后触发 
1)创建 pre_job 流水线工程
2)配置需要触发的工程
定时构建 
定时字符串从左往右分别为: 分 时 日 月 周
一些定时表达式的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 每30分钟构建一次:H代表形参 H/30 * *  * *  10:02 10:32 每2个小时构建一次: H H/2 * *  *  每天的8点,12点,22点,一天构建3次: (多个时间点中间用逗号隔开) 0 8,12,22 *  * * 每天中午12点定时构建一次 H 12 * *  *  每天下午18点定时构建一次 H 18 *  * * 在每个小时的前半个小时内的每10分钟 H(0-29)/10 * *  * *  每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午 4:38) H H(9-16)/2 * *  1-5 
轮询 SCM 
轮询 SCM,是指定时扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。
注意:此构建触发器,Jenkins 会定时扫描本地整个项目的代码,增大系统的开销,不建议使用。
Git Hook 自动触发构建(*) 刚才我们看到在 Jenkins 的内置构建触发器中,轮询 SCM 可以实现 Gitlab 代码更新,项目自动构建,但是该方案的性能不佳。那有没有更好的方案呢?有的。就是利用 Gitlab 的 webhook 实现代码 push 到仓库,立即触发项目自动构建。
安装 Gitlab Hook 插件 
需要安装两个插件:
Gitlab Hook 和 Gitlab
Jenkins 设置自动构建 
等会需要把生成的 webhook URL 配置到 Gitlab 中。
Gitlab 配置 webhook 
1)开启 webhook 功能
使用root账户登录到后台,点击Admin Area -> Settings -> Network
勾选"Allow requests to the local network from web hooks and services"
2)在项目中添加 webhook
点击项目 -> Settings -> Webhooks
注意:以下设置必须完成,否则会报错!
系统管理 -> 系统配置
SonarQube 平台安装与配置 认识 SonarQube SonarQube 是一款用于代码质量管理的开源工具,是静态代码检查工具,采用 B/S 架构它主要用于管理源代码的质量,可以支持众多计算机语言,比如 php,java, C#, go,C/C++, Cobol, JavaScrip, Groovy 等。sonar 可以通过 PMD,CheckStyle,Findbugs 等等代码规则检测工具来检测你的代码,帮助你发现代码的漏洞,Bug,异味等信息。
架构 
一台 SonarQube Server 启动 3 个主要过程:
Web 服务器,供开发人员,管理人员浏览高质量的快照并配置 SonarQube 实例 
基于 Elasticsearch 的 Search Server 从 UI 进行后退搜索 
Compute Engine 服务器,负责处理代码分析报告并将其保存在 SonarQube 数据库中 
 
 
一个 SonarQube 数据库要存储:
SonarQube 实例的配置(安全性,插件设置等) 
项目,视图等的质量快照。 
 
 
服务器上安装了多个 SonarQube 插件,可能包括语言,SCM,集成,身份验证和管理插件 
在构建/持续集成服务器上运行一个或多个 SonarScanner,以分析项目 
 
工作原理 开发人员在 IDE 开发代码,可以安装 SonarLint 插件进行提交前代码扫描 当开发人员提交代码到版本控制系统中,自动触发 jenkins 进行代码扫描
版本 开源社区版、开发版、企业版、数据中心版
Docker 安装 SonarQube 这里采用 docker 容器进行安装,简单快捷
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 mkdir  -p /u01/sonarqube/{data,extensions,logs}chmod  777 -R /u01/cicd/sonarqube/sysctl -w vm.max_map_count=262144 docker run -d -p 9000:9000 -p 9092:9092 --name sonarqube \ 	-v /u01/sonarqube/data:/opt/sonarqube/data \ 	-v /u01/sonarqube/extensions:/opt/sonarqube/extensions \ 	-v /u01/sonarqube/logs:/opt/sonarqube/logs \ 	-e SONAR_JDBC_USERNAME=sonar \ 	-e SONAR_JDBC_PASSWORD=sonar \ 	-e SONAR_JDBC_URL="jdbc:postgresql://192.168.88.236:5432/sonar "  \ 	--restart = always \ 	--privileged = true  \     sonarqube: 8.9.9-community docker logs -f sonarqube 
访问:http://192.168.88.235:9000/ 
默认账号:admin/admin
配置 Scanner 安装 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 wget https:// binaries.sonarsource.com/Distribution/ sonar-scanner-cli/sonar-scanner-cli-4.6 .0.2311 -linux.zip unzip -o -d  /usr/ local/sonar-scanner / opt/sonar-scanner-cli-4.6 .0.2311 -linux.zip vim /etc/ profile export SCANNER_HOME =/usr/ local/sonar-scanner/ sonar-scanner-4.6 .0.2311 -linux export PATH = $PATH :$ SCANNER_HOME/bin source /etc/ profile sonar-scanner -v INFO: Scanner configuration file: /usr/ local/sonar-scanner-4.6.0.2311-linux/ conf/sonar-scanner.properties INFO: Project root configuration file: NONE INFO: SonarScanner 4.6 .0.2311  INFO: Java 11.0 .3  AdoptOpenJDK (64 -bit) INFO: Linux 4.18 .0 -80 .el8.x86_64 amd64 vim /usr/ local/sonar-scanner/ sonar-scanner-4.6 .0.2311 -linux/bin/ sonar-scanner 
SonarQube 平台配置管理 安装中文插件 在线安装:操作如下图 
配置强制登录 默认所有的项目都可以公开的查看,在企业内肯定要配置成私有的。只有登录后才能查看
Jenkins 配置 SonarScanner 创建 SonarQube 账户 token
将 token 保存到 Jenkins 凭据中
在 Jenkins 中安装SonarQube Scanner插件
系统管理 -> 系统配置 -> 往下翻找到SonarQube servers -> Add SonarQube -> 添加服务器,选择凭据
IDEA 配置 SonarLint 插件 Token:a3268ff16b2d08b4582ff6a97342cc9d11b4e456
Nexus 制品库安装与配置 Docker 安装部署 Nexus 制品库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 docker pull sonatype/nexus3:3.30.0 mkdir  -p /u01/cicd/nexus3/datachmod  777 -R /u01/cicd/nexus3/docker run -itd \ --privileged = true  --name = nexus3 \ -p 8081:8081 \ -v /u01/cicd/nexus3/data:/nexus-data \ sonatype/nexus3:3.30.0 docker logs nexus3 -f 
安装完成后,默认的 admin 密码存储在了数据目录,获取初始化密码
docker exec -i nexus3 cat /nexus-data/admin.password
登录后更新密码
Nexus 制品库搭建 搭建 Maven 私服(代理仓库) 默认安装 nexus 后会自动创建的
私服:将外网仓库代理到企业内部本地仓库中。图中的地址可以自定义修改
搭建制品库(本地仓库) 新建 raw 类型的仓库
设置仓库的信息
上传制品 在 nexus 中新建一个maven-hostd仓库,同时在 maven 的配置文件settings.xml中配置 maven-hostd 认证。具体配置如下:
1 2 3 4 5 <server >     <id >  maven-hosted </id >      <username >  admin </username >      <password >  wx123!@#</password >  </server > 
注意使用mvn deploy发布时,server.id=repository.id
1 2 3 4 5 6 7 8 mvn deploy: deploy-file -DgroupId = xxxxxx pom 中的 groupId -DartifactId = xxxxxx pom 中的 artifactId -Dversion = xxxxxx pom 中的版本号 version -Dpackaging = xxxxxx pom 中打包方式 -Dfile = xxxxxx 本地文件 -Durl = xxxxxx 仓库 url -DrepositoryId = xxxxxx 对应的是 setting.xml(认证) 
直接读取 pom 文件(方便)
1 2 3 4 5 6 mvn deploy: deploy-file \ -DgeneratePom = false  \ -DrepositoryId = maven-hosted \ -Durl = http://192.168.1.200:8081/repository/maven-hosted/ \ -DpomFile = pom.xml \ -Dfile = target/demo-0.0.1-SNAPSHOT.jar 
自定义 pom 信息(灵活)
1 2 3 4 5 6 7 8 mvn deploy: deploy-file -Dmaven.test.skip = true   \ -Dfile = target/demo-0.0.1-SNAPSHOT.jar \ -DgroupId = com.example \ -DartifactId = demo \ -Dversion = 1.1.1  \ -Dpackaging = jar \ -DrepositoryId = maven-hosted \ -Durl = http://192.168.1.200:8081/repository/maven-hosted/ 
Jenkins 安装 Nexus 插件 安装Nexus Artifact Upload插件,使用片段生成器生成 DSL
发布制品 
安装Maven Artifact ChoiceListProvider (Nexus)插件
用户选择制品,在应用服务器通过 salt、ansible 下载制品并部署
Ansible 安装与配置 安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 yum install ansible -y ansible --version wget https:// www.python.org/ftp/ python/3.9.5/ Python-3.9 .5 .tgz tar zxvf Python-3.9 .5 .tgz cd Python-3.9 .5 / dnf -y install gcc zlib* libffi-devel ./configure --prefix=/u sr/local/ python3 --enable-optimizations make && make install rm -rf /usr/ bin/python3 ln -s /usr/ local/python3/ bin/python3 /u sr/bin/ python3 rm -rf /usr/ bin/pip3 ln -s /usr/ local/python3/ bin/pip3 /u sr/bin/ pip3 python3 --version pip3 --version python3 -m pip install --user ansible ln -sf /root/ .local/bin/ ansible  /usr/ bin/ansible ln -sf /root/ .local/bin/ ansible-config /usr/ bin/ansible-config python3 -m pip show ansible ansible --version  
添加 Ansible 主机列表 基于密钥连接 1 2 3 4 cd  ~/.ssh && ssh-keygen -t rsafor  i in  {1,2,3,6}; do  ssh-copy-id -i 192.168.1.3$i  ; done 
配置 /etc/ansible/hosts 文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@ansible ~] # vim /etc/ansible/hosts# 方法一 主机+端口+密钥 [webserver] 192.168.1.31:22 192.168.1.32 192.168.1.33 192.168.1.36 # 方法二 别名主机+端口+密钥 [webserver] node1 ansible_ssh_host=192 .168 .1 .31  ansible_ssh_port=22  node2 ansible_ssh_host=192 .168 .1 .32  ansible_ssh_port=22  node3 ansible_ssh_host=192 .168 .1 .33  ansible_ssh_port=22  node6 ansible_ssh_host=192 .168 .1 .36  ansible_ssh_port=22  
测试连通性 1 ansible webserver -m ping -o 
安装 NPM 包管理器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 wget https:// nodejs.org/dist/ v14.16.1 /node-v14.16.1 -linux-x64.tar.xz mkdir -p /usr/ local/node tar xf node-v14.16.1 -linux-x64.tar.xz -C /usr/ local/node/  vim /etc/ profile export NODE_HOME =/usr/ local/node/ node-v14.16.1 -linux-x64 export PATH = $NODE_HOME /bin:$ PATH source /etc/ profile node -v npm -v npm config set registry https:// registry.npm.taobao.org --global npm config set disturl https:// npm.taobao.org/dist --global unlink /usr/ bin/node whereis node ln -s /usr/ local/node/ node-v14.16.1 -linux-x64/bin/ node /usr/ bin/node 
Centos6 配置 YUM 1 2 3 4 5 6 sed -i “s|enabled = 1 |enabled = 0 |g” /etc/yum /pluginconf.d/ fastestmirror.conf mv /etc/yum .repos.d/CentOS-Base.repo / etc/yum.repos.d/ CentOS-Base.repo.backup curl -o /etc/yum .repos.d/CentOS-Base.repo https:/ /www.xmpan.com/ Centos-6 -Vault-Aliyun.repo yum clean all yum makecache 
Minio 文件服务安装与配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 wget https:// dl.min.io/server/mi nio/release/ linux-amd64/minio chmod +x minio MINIO_ROOT_USER = admin MINIO_ROOT_PASSWORD = password ./minio server /m nt/data --console-address ": 9001"  MINIO_ROOT_USER = admin MINIO_ROOT_PASSWORD ='wx123!@#'  nohup /u01/mi nio-server/minio server /u 01/minio-server/ data --console-address ": 9001"  > /u01/mi nio-server/minio.log 2  >&1  & mkdir -p /u01/mi nio/data docker run -d \   -p 9000 :9000  \   -p 9001 :9001  \   --name minio \   -v /u01/mi nio/data:/ data \   -v /u01/mi nio/config:/ root/.minio \   -e "MINIO_ROOT_USER = q5H0EO1pbv"  \   -e "MINIO_ROOT_PASSWORD = Wyk1dkn4Xp"  \   -e MINIO_SERVER_URL = http:// 192.168 .88.200 :9000  \   -e MINIO_BROWSER_REDIRECT_URL = http:// 192.168 .88.200 :9001  \   quay.io/minio/mi nio server /data \   --address ": 9000"  --console-address ": 9001"  
GitStats 代码统计工具安装与配置 安装 Ruby 环境 GitStats 需要 ruby-2.5 以上环境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz tar -zxvf ruby-2.5.0.tar.gz cd  ruby-2.5.0mkdir  -p /usr/local/rubyyum -y install gcc openssl-devel make ./configure --prefix =/usr/local/ruby make  && make install 安装完成输入  ruby -v 提示/usr/bin/ruby: No such file or directory 解决问题之前,先确认一个情况,输入命令 /usr/local/ruby/bin/ruby --version 如果有版本信息,那说明 ruby 被装到了该目录下,而非系统认为的 /usr/bin/ruby 解决方法是在系统默认运行 ruby 的位置 [/usr/bin/ruby] 创建一个 symlink(相当于 win 下的快捷方式),指向 ruby 的实际位置 [/usr/local/ruby/bin/ruby] 建立软链接 命令是  ln  -s /usr/local/ruby/bin/ruby /usr/bin/ruby 再输入   ruby -v           OK 完成 附赠:要是安装 gem 也出现这种情况 [-bash: /usr/bin/gem: No such file or directory] 也是同理 ln  -s /usr/local/ruby/bin/gem /usr/bin/gemgem sources -l gem sources -a http://mirrors.aliyun.com/rubygems/ --remove https://rubygems.org/ 
安装 GitStats 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 gem install git_stats yum install mlocate -y updatedb find / -name 'git_stats'  cd /usr/ local/ruby/ lib/ruby/g ems/2.5.0/g ems/git_stats-1.0.17/ config/locales/  cp zh_tw_default.yml zh_default.yml vim zh_default.yml vim zh.yml ERROR:  Error installing git_stats: 	The last version of nokogiri (~> 1.6 ) to support your Ruby & RubyGems was 1.12 .5 . Try installing it with `gem install nokogiri -v 1.12 .5 ` and then running the current command again gem install nokogiri -v 1.12 .5  vim /etc/ profile PATH =/usr/ local/ruby/ bin:$PATH  export PATH source /etc/ profile 
使用 GitStats 生成报告 1 2 3 4 5 6 7 8 9 mkdir -p /u01/gi t-project mkdir -p /var/ www/git-report git clone xxx.git git_stats generate -o /var/ www/git-report/ xxx --language zh_cn 
配置 nginx 访问 1 2 3 4 5 6 7 8 9 server  {        listen        8098 ;         server_name   192.168.88.235 ; 	    location  /vansysboot {             alias    /var/www/git-report/vansysboot;             index   index.html index.htm;         } } 
安装 Prometheus + Grafana 监控平台 
官网:https://prometheus.io/ 
下载地址:https://prometheus.io/download/ 
 
安装 Prometheus Server Prometheus 基于 Golang 编写,编译后的软件包,不依赖于任何的第三方依赖。只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启动 Prometheus Server。
上传安装包 上传 prometheus-2.29.1.linux-amd64.tar.gz 到虚拟机的 /opt 目录
解压安装包 
解压到 /u01/module 目录下 
 
1 tar -zxvf prometheus-2.37.0.linux-amd64.tar.gz -C /u01/module 
修改目录名 
 
1 2 cd  /u01/modulemv  prometheus-2.37.0.linux-amd64.tar.gz prometheus-2.37.0
修改配置文件 prometheus.yml 1 2 cd  prometheus-2.37.0vim prometheus.yml 
在 scrape_configs 配置项下添加配置:
1 2 3 4 5 6 7 8 9 10 11 -  job_name:  'pushgateway'   static_configs:    -  targets:  ['192.168.88.231:9091' ]     labels:        instance:  pushgateway  -  job_name:  'node exporter'   static_configs:    -  targets:  ['192.168.88.230:9100' , '192.168.88.231:9100' , '192.168.88.232:9100' ] 
配置说明: 
global 配置块 :控制 Prometheus 服务器的全局配置
scrape_interval:配置拉取数据的时间间隔,默认为 1 分钟。 
evaluation_interval:规则验证(生成 alert)的时间间隔,默认为 1 分钟。 
 
rule_files 配置块 :规则配置文件
scrape_configs 配置块 :配置采集目标相关, prometheus 监视的目标。Prometheus自身的运行信息可以通过  HTTP 访问,所以 Prometheus 可以监控自己的运行数据。
 
Prometheus 是可以在运行时自动加载配置的。启动时需要添加:–web.enable-lifecycle 
重载配置命令:curl -X POST http://127.0.0.1:9090/-/reload 
 
安装 Node Exporter 在 Prometheus 的架构设计中,Prometheus Server 主要负责数据的收集,存储并且对外提供数据查询支持,而实际的监控样本数据的收集则是由 Exporter 完成。因此为了能够监控到某些东西,如主机的 CPU 使用率,我们需要使用到 Exporter。Prometheus 周期性的从 Exporter 暴露的 HTTP 服务地址(通常是 /metrics )拉取监控样本数据。
Exporter 可以是一个相对开放的概念,其可以是一个独立运行的程序独立于监控目标以外,也可以是直接内置在监控目标中。只要能够向 Prometheus 提供标准格式的监控样本数据即可。
为了能够采集到主机的运行指标如 CPU, 内存,磁盘等信息。我们可以使用 Node Exporter。Node Exporter 同样采用 Golang 编写,并且不存在任何的第三方依赖,只需要下载,解压即可运行。
上传安装包 上传 node_exporter-1.4.0-rc.0.linux-amd64.tar.gz 到虚拟机的 /opt 目录
解压安装包 
解压到 /u01/module 目录下 
 
1 tar -zxvf node_exporter-1.4.0-rc.0.linux-amd64.tar.gz -C /u01/module 
修改目录名 
 
1 2 cd  /u01/modulemv  node_exporter-1.4.0-rc.0.linux-amd64.tar.gz node_exporter-1.4.0-rc
启动并访问端点查看是否成功 
 
浏览器输入:http://ip:9100/metrics,可以看到当前  node exporter 获取到的当前主机的所有监控数据。
节点分发 将解压的目录分发到要监控的节点
1 xsync node_exporter-1.4.0-rc 
添加文件分发脚本 
创建脚本文件:
脚本内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #!/bin/bash if  [ $#  -lt 1 ]then  echo  Not Enounh Arguement!  exit ; fi for  host in  192.168.88.230 192.168.88.231 192.168.88.232 do  echo  ==== ==== ====  $host  ============  for  file in  $@   do       if  [ -e $file  ]   then         pdir = $(cd  -P $(dirname  $file ); pwd )        fname = $(basename  $ file)    ssh $host  "mkdir -p $ pdir "     rsync -av $pdir /$ fname $host :$ pdir   else     echo  $file  does not exists!   fi   done  done 
若报错 bash: rsync: command not found,请在目标机器上安装
赋予执行权限
运行条件 
使用 ssh 密钥验证登录,这样在传输文件时就不需要进行二次验证
1 2 3 4 5 6 7 8 9 ssh-keygen -f ~/.ssh/id_rsa -N ''   for  i in  192.168.88.230 192.168.88.231 192.168.88.232  do    ssh-copy-id $i  done 
设置开机自启 centos6 
创建自启动脚本 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 vim /etc/init.d/node_exporter   . /etc/init.d/functions     RETVAL = 0 PROG = "node_exporter"  DAEMON_SYSCONFIG =/etc/sysconfig/${PROG}  DAEMON =/usr/bin/${PROG}   PID_FILE =/var/run/prometheus/${PROG} .pid LOCK_FILE =/var/lock/subsys/${PROG}  LOG_FILE =/var/log/prometheus/node_exporter.log DAEMON_USER = "prometheus"  FQDN =$(hostname) GOMAXPROCS =$(grep -c ^processor /proc/cpuinfo)   . ${DAEMON_SYSCONFIG}    start   if  check_status > /dev/null; then      echo  "node_exporter is already running"      exit  0   fi      echo  -n $" Starting node_exporter: "    daemonize -u ${DAEMON_USER}  -p ${PID_FILE}  -l ${LOCK_FILE}  -a -e ${LOG_FILE}  -o ${LOG_FILE}  ${DAEMON}  ${ARGS}    RETVAL =$?   echo  ""    return  $RETVAL  }   stop     echo  -n $" Stopping node_exporter: "      killproc -p ${PID_FILE}  -d 10 ${DAEMON}      RETVAL =$?     echo      [ $RETVAL  = 0 ] && rm  -f ${LOCK_FILE}  ${PID_FILE}      return  $RETVAL  }   check_status     status -p ${PID_FILE}  ${DAEMON}      RETVAL =$?     return  $RETVAL  }   case  "$1  "  in     start)         start         ;;     stop)         stop         ;;     status) 	check_status         ;;     reload|force-reload)         reload         ;;     restart)         stop         start         ;;     *)         N =/etc/init.d/${NAME}          echo  " Usage: $N  {start|stop|status|restart|force-reload}"  >&2         RETVAL = 2         ;; esac   exit  ${RETVAL} 
编辑etc/sysconfig/node_exporter 
 
1 2 3 vim /etc/ sysconfig/node_exporter   ARGS = ""  
创建启动脚本中对应文件和目录 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 chmod  777 /etc/init.d/node_exportercp  /u01/node_exporter-1.4.0-rc/node_exporter /usr/bin/node_exportergroupadd -r prometheus mkdir  -p /usr/hostonnet/prometheus/useradd -r -g prometheus -s /sbin/nologin -d /usr/hostonnet/prometheus/ -c "prometheus Daemons"  prometheus chown  -R prometheus: prometheus /usr/hostonnet/prometheus/mkdir  -p /var/run/prometheus/chmod  777 /var/run/prometheus/touch  /var/run/prometheus/node_exporter.pidchmod  777 /var/run/prometheus/node_exporter.pid mkdir  -p /var/log/prometheus/touch  /var/log/prometheus/node_exporter.logchmod  777 /var/log/prometheuschmod  777 /var/log/prometheus/node_exporter.logchown  prometheus: prometheus /var/log/prometheus/node_exporter.logchmod  777 /etc/init.d/node_exporter && cp  /u01/node_exporter-1.4.0-rc/node_exporter /usr/bin/node_exporter && groupadd -r prometheus && mkdir  -p /usr/hostonnet/prometheus/ && useradd -r -g prometheus -s /sbin/nologin -d /usr/hostonnet/prometheus/ -c "prometheus Daemons"  prometheus && chown  -R prometheus: prometheus /usr/hostonnet/prometheus/ && mkdir  -p /var/run/prometheus/ && chmod  777 /var/run/prometheus/ && touch  /var/run/prometheus/node_exporter.pid && chmod  777 /var/run/prometheus/node_exporter.pid && mkdir  -p /var/log/prometheus/ && touch  /var/log/prometheus/node_exporter.log && chmod  777 /var/log/prometheus && chmod  777 /var/log/prometheus/node_exporter.log && chown  prometheus: prometheus /var/log/prometheus/node_exporter.log
安装daemonize 
 
1 rpm -ivh daemonize-1.6.0-1.el6.rf.x86_64.rpm 
运行node_exporter 
 
1 2 cd /etc/i nit.d/ && ./ node_exporter start && chkconfig node_exporter on   
centos7 
创建 service 文件 
 
1 sudo vim /usr/lib/systemd/system/node_exporter.service 
文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 [Unit] Description  = node_exportDocumentation  = https://github.com/prometheus/node_exporterAfter  = network.target[Service] Type  = simpleUser  = rootExecStart  = /u01/node_exporter-1.4 .0 -rc/node_exporterRestart  = on -failure[Install] WantedBy  = multi-user.target
分发文件 
 
1 xsync /usr/lib/systemd/system/node_exporter.service 
设置开机自启并启动(所有机器都执行) 
 
1 2 3 4 5 sudo systemctl enable  node_exporter.service sudo systemctl start node_exporter.service 
安装 Alertmanager 上传安装包 上传 alertmanager-0.24.0.linux-amd64.tar.gz 到虚拟机的 /opt 目录
解压安装包 
解压到 /u01/module 目录下 
 
1 tar -zxvf alertmanager-0.24.0.linux-amd64.tar.gz -C /u01/module 
修改目录名 
 
1 2 cd  /u01/modulemv  alertmanager-0.24.0.linux-amd64.tar.gz alertmanager-0.24.0
启动 Prometheus Server 和 Alertmanager 在 Prometheus Server 目录下执行启动命令 1 nohup  ./prometheus --config.file = prometheus.yml --web.enable-lifecycle > ./prometheus.log 2 >&1 &
在 Alertmanager 目录下启动 1 nohup  ./alertmanager --config.file = alertmanager.yml > ./alertmanager.log 2 >&1 &
安装 Grafana 数据展示 grafana 是一款采用 Go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。
下载地址:https://grafana.com/grafana/download 
 
上传安装包 将 grafana-enterprise-9.0.6.linux-amd64.tar.gz 上传至 /opt 目录下
解压安装包 
解压到 /u01/module 目录下 
 
1 tar -zxvf grafana-enterprise-9.0.6.linux-amd64.tar.gz -C /u01/module 
修改目录名 
 
1 2 cd  /u01/modulemv  grafana-enterprise-9.0.6.linux-amd64.tar.gz grafana-enterprise-9.0.6
启动 grafana 服务 
 
1 nohup  ./bin/grafana-server web > ./grafana.log 2 >&1 &
打开浏览器,访问:http://ip:3000,默认用户名/密码:admin 
 
Grafana 与 Prometheus 数据对接 添加 Prometheus 数据源 
配置 -> 数据源 -> 添加数据源 
选择 Prometheus 数据源 
 
配置 Prometheus Server 地址 
 
点击下方的 Save&Test 
 
点击 Back 返回即可,可以看到 Data Sources 页面,出现了添加的 Prometheus: 
 
添加仪表盘 Dashboard 手动一个个添加 Dashboard 比较繁琐,Grafana 社区鼓励用户分享 Dashboard,通过 https://grafana.com/grafana/dashboards  网站,可以找到大量可直接使用的 Dashboard 模板。
Grafana 中所有的 Dashboard 通过 JSON 进行共享,下载并且导入这些 JSON 文件,就可以直接使用这些已经定义好的 Dashboard。
选择一款中文版本的 Node Exporter 仪表板 
 
下载模板 json 文件 
 
在 Grafana 中导入模板 
 
导入之后选择 Prometheus 数据源即可 
 
导入成功之后就能看到炫酷的仪表板 
 
安装 OracleDB Exporter 监控 Oracle 数据库 
GitHub 仓库:iamseth/oracledb_exporter: Prometheus Oracle database exporter. (github.com) 
Grafana 面板:Oracledb监控-性能与表空间 | Grafana Labs 
以下步骤是采用 Docker 进行安装
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 docker pull ghcr.io/iamseth/oracledb_exporter: 0.5.0 docker run -d --name oracledb_exporter --link  = oracle11g -p 9161:9161 -e 'DATA_SOURCE_NAME = oracle://sys: 123456@oracle11g: 1521/orcl'  ghcr.io/iamseth/oracledb_exporter: 0.5.0 curl -l http://127.0.0.1:9161/metric 在 prometheus.yml 中添加一段配置:   - job_name: oracledb_exporter     metrics_path: /metrics     static_configs:       - targets: ['chxdb21.vansys.com: 15090' ] 
使用 Docker 安装服务 Docker 安装 ClickHouse 数据库 
前提:请先安装好 Docker 容器服务(安装 Docker 容器服务 )
 
创建目录并更改权限 
 
1 2 3 mkdir  -p /u01/clickhouse/{data, config, log }chmod  -R 777 /u01/clickhouse/{data, config, log }
拉取镜像 
 
1 docker pull yandex/clickhouse-server 
创建临时容器 
 
1 2 3 4 docker run --rm  -d --name = clickhouse-server \ --ulimit  nofile = 262144:262144 \ -p 8123:8123 -p 9009:9009 -p 9000:9000 \ yandex/clickhouse-server: latest 
复制临时容器内配置文件到宿主机 
 
1 2 3 docker cp  clickhouse-server:/etc/clickhouse-server/config.xml /u01/clickhouse/config/config.xml docker cp  clickhouse-server:/etc/clickhouse-server/users.xml /u01/clickhouse/config/users.xml 
停掉临时容器 
 
1 docker rm  -f clickhouse-server 
default用户配置 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 PASSWORD = $(base64  < /dev/urandom | head  -c8); echo  "$ PASSWORD " ; echo  -n "$PASSWORD  "  | sha256sum  | tr  -d '-'  会输出明码和 SHA256 密码(每个人生成的不一样) jQ+72k17 a70b3173bfef01aff0d2472fd1f86a4be647aed4e0624f1b6c867a69072e1273 echo  "wx123456" ; echo  -n "wx123456"  | sha256sum  | tr  -d '-' wx123456 37acf78e288b1323fae2115749edcf696b6190d8c8ca1cbc66e39b10e22f2a86 vim /u01/clickhouse/config/users.xml <password_sha256_hex> 37acf78e288b1323fae2115749edcf696b6190d8c8ca1cbc66e39b10e22f2a86 </password_sha256_hex> <profile> readonly  </profile> 
新增root用户 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 echo  "wx123456" ; echo  -n "wx123456"  | sha256sum  | tr  -d '-' wx123456 37acf78e288b1323fae2115749edcf696b6190d8c8ca1cbc66e39b10e22f2a86 vim /u01/clickhouse/config/users.xml <root> <password_sha256_hex> 37acf78e288b1323fae2115749edcf696b6190d8c8ca1cbc66e39b10e22f2a86 </password_sha256_hex>     <networks incl="networks"  replace="replace" >             <ip>::/0 </ip>     </networks>     <profile> default </profile>     <quota> default </quota> </root> 
部署clickhouse-server 
 
1 2 3 4 5 6 7 8 9 10 11 12 docker run -d \ --name clickhouse-server \ --privileged = true  --restart = always \ --ulimit  nofile = 262144:262144 \ -p 8123:8123 \ -p 9000:9000 \ -p 9009:9009 \ -v /u01/clickhouse/data:/var/lib/clickhouse: rw \ -v /u01/clickhouse/log:/var/log/clickhouse-server: rw \ -v /u01/clickhouse/config/config.xml:/etc/clickhouse-server/config.xml \ -v /u01/clickhouse/config/users.xml:/etc/clickhouse-server/users.xml \ yandex/clickhouse-server: latest 
Docker 安装 ElasticSearch 搜索引擎 
前提:请先安装好 Docker 容器服务(安装 Docker 容器服务 )
 
创建目录、配置文件并修改权限 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 mkdir  -p /hd/docker/es/{config, data, plugins}vi /hd/docker/es/config/elasticsearch.yml http.host: 0.0.0.0 http.cors.enabled: true  http.cors.allow-origin: "*"  http.cors.allow-headers: Authorization xpack.security.enabled: true  xpack.security.transport.ssl.enabled: true  chmod  +x ./config/elasticsearch.ymlchmod  -R 777 /hd/docker/es
拉取镜像 
 
1 docker pull elasticsearch: 7.17.4 
启动容器 
 
1 2 3 4 5 6 docker run --name es --restart = always -p 9200:9200 -p 9300:9300 \ -e "ES_JAVA_OPTS =-Xms512m -Xmx1024m"  \ -v /hd/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /hd/docker/es/data:/usr/share/elasticsearch/data \ -v /hd/docker/es/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch: 7.17.4 
配置 es 访问密码 
 
1 2 3 4 5 docker exec  -it es /bin/bash ./bin/elasticsearch-setup-passwords interactive 
访问网页 http://localhost:9200(账号密码:elastic/123456) 
 
Docker 安装 Nginx Proxy Manager 代理管理平台 
前提:请先安装好 Docker 容器服务(安装 Docker 容器服务 )
 
创建 docker-compose.yml 
 
使用 network_mode: host 与宿主机共享网络 
1 2 3 4 5 6 7 8 9 version:  '3' services:   app:      image:  '2691432189/nginx-proxy-manager-monitor-zh: latest'      restart:  always      network_mode:  host      volumes:        -  ./data:/data        -  ./letsencrypt:/etc/letsencrypt  
部署运行 
 
登录管理平台 
 
容器运行成功后,使用浏览器访问 81 端口。
http://127.0.0.1:81 
默认管理员信息:
1 2 Email:     admin@example.comPassword:  changeme
登录之后系统会要求修改详细信息和密码
快速升级 
 
1 2 3 docker-compose down docker-compose pull docker-compose up -d 
Docker 安装 Redis 服务 
拉取 Redis 镜像 
 
1 2 3 4 docker pull redis docker pull redis: 5.0.8 
启动 Redis 容器 
 
建议使用配置文件启动,先从 Redis 官网下载标准配置文件(也可以自己准备一个)
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 mkdir  -p /u01/software/redis/confcd  /u01/software/redis/confwget http://download.redis.io/redis-stable/redis.conf chmod  777 redis.conf1、注释 bind  127.0.0.1,开启远程访问 2、关闭保护模式 protected-mode no 3、设置密码 requirepass 123456 docker run -p 6379:6379 --name redis --restart = always \ -v /u01/software/redis/conf/redis.conf:/etc/redis/redis.conf \ -v /u01/software/redis/data:/data \ -itd redis redis-server /etc/redis/redis.conf \ --appendonly yes  
Linux 下静默安装 Oracle 19c 安装准备 下载安装包 官网下载:下载地址 | 点击跳转 
服务器环境 
事项 
详情 
 
 
操作系统 
Centos 7.9 
 
数据库版本 
19.3.0 
 
CPU 
Intel(R) Xeon(R) Silver 4210R CPU @ 2.40GHz 
 
内存 
32GB 
 
Swap 
15GB 
 
准备安装环境 服务器环境检查 
检查缺少了那些依赖包 
 
1 rpm --query --queryformat "%{NAME}-%{VERSION}.%{RELEASE} (%{ARCH})\n"  bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat elfutils-libelf elfutils-libelf-devel fontconfig-devel libxcb smartmontools libX11 libXau libXtst libXrender libXrender-devel 
使用 yum 安装缺少的依赖 
 
1 yum install -y $NOT_INSTALLED  
创建 Oracle 用户组 1 groupadd oinstall && groupadd dba && groupadd asmdba && groupadd backupdba && groupadd dgdba && groupadd kmdba && groupadd racdba && groupadd oper && useradd -g oinstall -G dba, asmdba, backupdba, dgdba, kmdba, racdba, oper -m oracle 
配置 hosts 文件 配置系统内核参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 vi /etc/sysctl.conf fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 16451328 kernel.shmmax = 33692319744 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 /sbin/sysctl -p 
关闭 SELINUX 跟防火墙 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 cat  /etc/selinux/configSELINUX = disabled SELINUXTYPE = targeted  systemctl status firewalld systemctl stop firewalld systemctl disable  firewalld 
配置用户环境 
配置 oracle 用户环境变量 
 
1 2 3 4 5 6 7 8 9 10 11 12 su - oracle vi .bash_profile export  ORACLE_BASE =/u01/app/oracleexport  ORACLE_HOME =/u01/app/oracle/product/19.3.0export  PATH = $PATH :$ ORACLE_HOME/bin:/usr/local/binexport  ORACLE_HOSTNAME = xxxexport  ORACLE_SID = orclexport  LD_LIBRARY_PATH = $ORACLE_HOME /lib:$ ORACLE_HOME/rdbms/lib:$ORACLE_HOME /network/lib:/lib:/usr/libexport  CLASSPATH = $ORACLE_HOME /jlib:$ ORACLE_HOME/rdbms/jlib:$ORACLE_HOME /network/jlib
修改用户的 shell 限制 
 
1 2 3 4 5 6 vi /etc/security/limits.conf  @oinstall soft nofile 2048 @oinstall hard nofile 65536 @oinstall soft nproc  16384 @oinstall soft stack 10240 
开始安装 响应文件模板存放位置:
软件:/u01/app/oracle/product/19.5.0/install/response/db_install.rsp 
监听:/u01/app/oracle/product/19.5.0/assistants/netca/netca.rsp 
建库:/u01/app/oracle/product/19.5.0/assistants/dbca/dbca.rsp 
 
解压安装包 1 2 3 4 5 6 mkdir  -p /u01/app/oracle/product/19.3.0chown  -R oracle: oinstall /u01/appsu - oracle unzip LINUX.X64_193000_db_home.zip -d $ORACLE_HOME  
命令行静默安装 配置响应文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 cd  $ORACLE_HOME /install/responsecp  db_install.rsp db_install.rsp.bakoracle.install.option = INSTALL_DB_SWONLY UNIX_GROUP_NAME = oinstall INVENTORY_LOCATION =/u01/app/oraInventory ORACLE_HOME =/u01/app/oracle/product/19.3.0 ORACLE_BASE =/u01/app/oracle oracle.install.db.InstallEdition = EE oracle.install.db.OSDBA_GROUP = dba oracle.install.db.OSOPER_GROUP = oper oracle.install.db.OSBACKUPDBA_GROUP = backupdba oracle.install.db.OSDGDBA_GROUP = dgdba oracle.install.db.OSKMDBA_GROUP = kmdba oracle.install.db.OSRACDBA_GROUP = racdba oracle.install.db.rootconfig.executeRootScript = false  
执行安装 1 ./runInstaller -silent -responseFile $ORACLE_HOME /install/response/db_install.rsp 
若出现安装错误,请根据提示查看日志,分析错误原因 
安装成功根据提示使用 root 用户执行脚本 1 2 sh /u01/ app/oraInventory/ orainstRoot.sh sh /u01/ app/oracle/ product/19.3.0/ root.sh 
查看相关执行日志,若没有错误,表示已经安装完成 
创建数据库实例 配置监听 1 2 3 4 netca /silent /responseFile $ORACLE_HOME /assistants/netca/netca.rsp lsnrctl status 
创建数据库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 cd  $ORACLE_HOME /assistants/dbcacp  dbca.rsp dbca.rsp.bakvi dbca.rsp gdbName = orcl sid = orcl databaseConfigType = SI templateName = General_Purpose.dbc sysPassword = Qwer1234 systemPassword = Qwer1234 emConfiguration = DBEXPRESS dbsnmpPassword = Qwer1234 datafileDestination =/u01/app/oracle/oradata characterSet = ZHS16GBK totalMemory = 8192 
执行安装 1 dbca -silent -createDatabase -responseFile $ORACLE_HOME /assistants/dbca/dbca.rsp 
检查 1 2 3 4 sqlplus / as sysdba select instance_name, status from v$instance ; 
完全卸载 Oracle 数据库 停止数据库服务 1 2 3 4 sqlplus / as sysdba shutdown immediate; 
停止数据库监听 使用 deinstall 工具进行卸载 1 2 3 4 5 6 /u01/app/oracle/product/19.3.0/deinstall/deinstall rm  -rf /etc/oraInst.locrm  -rf /opt/ORCLfmaprm  -r /etc/oratab