安装目录示分区大小而定,不可盲目复制命令进行安装!
安装 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