应用平台部署¶
Tip
应用平台是OpsAny的应用管理平台,管理应用的资源、CI/CD流水线、制品仓库等。需要依赖第三方的开源工具,需要自行部署Gitlab、Jenkins、Nexus、StackStorm。需要单独准备主机,或者直接集成企业已经部署的开源工具,需要注意版本问题。有一定的使用门槛,如果你对DevOps不熟悉或者完全不了解,请勿部署。【人生苦短,何必自寻烦恼!- OpsAny】
应用平台部署¶
1.使用自动化脚本部署应用平台。
部署前请确认资源是否足够,在执行安装前,请注意,你是否修改过admin的密码,默认情况下会从$INSTALL_PATH/conf/.passwd_env获取,如果你修改过密码,请修改此文件。
[root@linux-node1~]# cd /opt/opsany-paas/install/
[root@linux-node1 install]# ./saas-ce-install.sh devops
2.打开【平台导航】-【应用平台】-【工具管理】,进行工具的集成,如没有工具,请根据下面的文档进行部署。 注意:Gitlab是使用的API Token,Jenkins和Nexus使用的用户和密码验证。
应用平台依赖部署¶
请注意下方端口冲突的问题,自行解决部署问题,如部署不成功,请不要使用应用平台。
- 系统配置:4C、8G内存,100G磁盘,请注意,无法部署在一台主机,因为端口冲突,请使用多台主机部署,或者修改Gitlab的相关配置文件。
- Gitlab:版本必须大于13.12 监听端口:80 8080等。需要单独部署一台主机。
- Jenkins:流水线依赖,版本必须大于2.328。需要安装Gitlab插件 监听端口:8008
- Nexus: 制品仓库依赖,版本需要是3.x 监听端口:8009
- StackStorm: 持续部署依赖,版本需要是3.6.0 监听端口:8005
Jenkins流水线部署¶
Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成和持续交付工具,Jenkins的前身Hudson是一个可扩展的持续集成引擎。官方网站https://jenkins.io/
如果将Jenkins部署到和Gitlab相同的主机上,请修改Jenkins端口为非8080端口,OpsAny建议使用8008端口。
1.安装Jenkins
目前Jenkins版本主要分为两个大的版本LTS长期支持版和周更新版。大家可以根据实际情况进行选择,本书选择的是当前的LTS版本,可以从这里获取最新版本和安装方法:https://pkg.jenkins.io/redhat/。
yum install -y java-1.8.0 java-1.8.0-openjdk-devel
wget https://mirror.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.346.2-1.1.noarch.rpm
rpm -ivh jenkins-2.346.2-1.1.noarch.rpm
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install -y fontconfig java-11-openjdk jenkins
2.启动Jenkins
[root@linux-node2 ~]# vim /etc/sysconfig/jenkins
#修改端口为8008端口,为了防止和其它服务端口冲突
JENKINS_PORT="8008"
[root@linux-node2 ~]# vim /usr/lib/systemd/system/jenkins.service
Environment="JENKINS_PORT=8008"
[root@linux-node2 ~]# systemctl daemon-reload
[root@linux-node2 ~]# systemctl restart jenkins && systemctl enable jenkins
3.访问Jenkins
在浏览器输入http://192.168.56.12:8008
来访问jenkins,并进行初始化,全部默认参数即可。
如果是云主机,请打开安全组的8008端口。然后访问进行初始化操作。需要在Jenkins安装以下插件:Gitlab
Nexus制品仓库部署¶
OpsAny支持Nexus制品仓库,Nexus是非常流行的免费制品仓库,而且是支持多种语言制品的管理。使用端口8009
-
拉取Nexus镜像
[root@linux-node2 ~]# docker pull sonatype/nexus3:3.37.0
-
创建本地目录,用于保存nexus数据
[root@linux-node2 ~]# mkdir /opt/opsany/nexus-data [root@linux-node2 ~]# chmod -R 777 /opt/opsany/nexus-data
-
启动nexus,并设置内存大小,挂载数据卷。
可以根据实际情况调整内存大小。如果内存足够,建议不低于4G。注意修改内存中的JVM的内存大小,测试设置500M可以,生产建议大约2G。
[root@linux-node2 ~]# docker run -d -p 8009:8081 -p 5000:5000 --restart=always --name opsany-nexus \
-v /opt/opsany/nexus-data:/nexus-data \
-e INSTALL4J_ADD_VM_PARAMS="-Xms500m -Xmx500m -XX:MaxDirectMemorySize=500m" \
sonatype/nexus3:3.37.0
-
访问Nexus,设置admin用户密码。
-
点击系统管理-【Repository】-【Create Repository】-【docker(hosted)】
-
配置Docker信任仓库,请修改下面的IP地址为Nexus的地址。
[root@linux-node1 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://tdimi5q1.mirror.aliyuncs.com"],
"insecure-registries" : ["http://192.168.56.11:5000"]
}
[root@linux-node1 ~]# systemctl restart docker
- 测试Nexus的Docker镜像访问。
docker login http://192.168.56.11:5000
如果是云主机,请打开安全组的8009、5000端口。然后访问进行初始化操作。在OpsAny创建业务和应用后,点击某个应用进入到应用详情即可看到应用的流水线和制品库等功能。
StackStorm部署¶
使用OpsAny已经部署完毕的MongoDB、Redis和RabbitMQ。如果和OpsAny部署在一起,确保端口修改为非80端口。
-
设置yum仓库
curl -s https://packagecloud.io/install/repositories/StackStorm/stable/script.rpm.sh | sudo bash
-
安装st2
yum install -y st2 crudini
-
配置st2
可以使用OpsAny已经部署的RabbitMQ、Redis和MongoDB,请将下面配置案例修改为正确的IP地址和用户名与密码。
vim /etc/st2/st2.conf
# 修改以下配置,可以配置为OpsAny的RabbitMQ
[messaging]
url = amqp://opsany:OpsAny@2020@192.168.56.11:5672/
# 修改以下配置,可以配置为OpsAny的Redis,注意Redis密码不要带@
[coordination]
url = redis://:OpsAny2020@192.168.56.11:6379
#增加下面配置,默认没有。
[database]
host = 192.168.56.11
port = 27017
db_name = event
username = event
password = OpsAny@2020
- 设置数据加密
DATASTORE_ENCRYPTION_KEYS_DIRECTORY="/etc/st2/keys"
DATASTORE_ENCRYPTION_KEY_PATH="${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}/datastore_key.json"
sudo mkdir -p ${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}
sudo st2-generate-symmetric-crypto-key --key-path ${DATASTORE_ENCRYPTION_KEY_PATH}
# Make sure only st2 user can read the file
sudo chgrp st2 ${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}
sudo chmod o-r ${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}
sudo chgrp st2 ${DATASTORE_ENCRYPTION_KEY_PATH}
sudo chmod o-r ${DATASTORE_ENCRYPTION_KEY_PATH}
# set path to the key file in the config
sudo crudini --set /etc/st2/st2.conf keyvalue encryption_key_path ${DATASTORE_ENCRYPTION_KEY_PATH}
sudo st2ctl restart-component st2api
这里并不根据官方的设置,不配置SSH,通过调用管控平台和作业平台进行调用。
-
启动服务
st2ctl start
-
Register sensors, rules and actions:
st2ctl reload
-
配置验证
yum -y install httpd-tools
echo 'OpsAny@2020' | sudo htpasswd -i /etc/st2/htpasswd st2admin
# 修改配置增加验证。
vim /etc/st2/st2.conf
[auth]
# 修改为启用
enable = True
backend = flat_file
backend_kwargs = {"file_path": "/etc/st2/htpasswd"}
# ...
# 重启并测试
st2ctl restart-component st2api
st2 login st2admin --write-password
8.验证安装
st2 action list
9.配置Web
注意:如果你将st2和Gitlab安装到一起,那么请自行解决80端口冲突的问题。注意修改Nginx的端口,将80端口注释掉,将443端口修改为其它端口。
yum install -y st2web nginx
# 创建自签名证书放到/etc/ssl/st2
mkdir -p /etc/ssl/st2
openssl req -x509 -newkey rsa:2048 -keyout /etc/ssl/st2/st2.key -out /etc/ssl/st2/st2.crt \
-days 365 -nodes -subj "/C=US/ST=California/L=Palo Alto/O=StackStorm/OU=Information \
Technology/CN=$(hostname)"
# 复制配置文件到配置目录下。
cp /usr/share/doc/st2/conf/nginx/st2.conf /etc/nginx/conf.d/
# Disable default_server configuration in existing /etc/nginx/nginx.conf
sed -i 's/default_server//g' /etc/nginx/nginx.conf
# 如果非单独部署请修改Nginx的端口,注释掉80端口
vim /etc/nginx/nginx.conf
# server {
# listen 80;
# listen [::]:80;
# server_name _;
# root /usr/share/nginx/html;
# Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
# error_page 404 /404.html;
# location = /404.html {
# }
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
# 如果非单独部署请修改Nginx的端口,注释掉80端口,然后修改st2的端口为8005.
vim /etc/nginx/conf.d/st2.conf
...
server {
listen *:8005 ssl;
...
systemctl restart nginx
systemctl enable nginx
StackStorm初始化¶
OpsAny的持续部署需要使用StackStorm的编排能力,我们为StackStorm开发了Pack,需要进行初始化操作。
- 下载OpsAny核心st2的Pack。
需在安装stackstorm的服务器上面执行以下命令。切记。
mkdir -p /opt/stackstorm-packs && cd /opt/stackstorm-packs
git clone https://gitee.com/opsany/opsany_core.git
git clone https://gitee.com/opsany/opsany_workflow.git
- 执行初始化
需在安装OpsAny的服务器上执行以下命令。请修改对应的地址和密码,用户名不要修改。
# Step1: 执行初始化
cd /opt/opsany-paas/saas/
python3 init-ce-st2.py --domain https://www.opsany.com --username admin --password PASSWORD --st2_url https://www.opsany.com:8005 --st2_username st2admin --st2_password ST2_PASSWORD
[SUCCESS] init devops st2 success.
Downloading the OpsAny core package is expected to take 60 seconds...
[SUCCESS] init st2 pack success.
[SUCCESS] config core pack success.
出现以上类似输出为初始化成功,未成功无法正常使用。
- 创建API Key并在管控平台添加
st2 apikey create -k -m '{"used_by": "OpsAny"}'
打开【管控平台】-【采控管理】-(StackStorm集成)-输入URL和上面生成的API Key。
Gitlab代码仓库部署¶
Gitlab建议是一个独立的服务器,如果是已经存在Gitlab服务器,请保证版本大于13.12
GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。可以把Gitlab理解为一个开源的Github,你可以在企业中使用Gitlab部署一个企业自己的“Github”。 它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
1.部署gitlab需要的postfix
[root@linux-node1~]# yum install curl policycoreutils openssh-server openssh-clients postfix -y
[root@linux-node1~]# systemctl start postfix && systemctl enable postfix
2.安装gitlab-ce
安装gitlab-ce最快速的解决方案是使用GitLab CE Omnibus package这个包,可以一站式的解决安装、配置、管理备份等需求:https://about.gitlab.com/downloads/#centos7 注:由于网络问题,国内用户,建议使用清华大学的镜像源进行安装,详情可以在这里找到:https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/
使用国内YUM源:
[root@linux-node1~]# vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
[root@linux-node1~]# yum install gitlab-ce -y
3.配置并启动Gitlab
首先我们干的第一件事情就是给gitlab设置一个域名,也就是外部如何访问Gitlab。
[root@linux-node1~]# vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.56.11'
4.重启配置Gitlab
如果你后期再次修改Gitlab的域名,也需要执行本操作,它会调用Chef(Chef和SaltStack、Ansible类似也是一个自动化运维工具)进行相关的配置管理,而且会自动启动。
[root@linux-node1~]# gitlab-ctl reconfigure
Gitlab的服务管理
可以使用gitlab-ctl管理gitlab:
- 查看gitlab:[root@linux-node2 ~]# gitlab-ctl status
- 关闭gitlab:[root@linux-node2 ~]# gitlab-ctl stop
- 启动gitlab:[root@linux-node2 ~]# gitlab-ctl start
- 重启gitlab:[root@linux-node2 ~]# gitlab-ctl restart
Gitlab系统服务
Gitlab安装完毕之后默认是开机自启动,使用的服务名称如下:
[root@linux-node1 ~]# systemctl status gitlab-runsvdir
SonarQube代码扫码部署¶
此SonarQube部署方式为快速验证部署,生产请使用数据库进行部署,默认使用内嵌数据库。
- 修改系统配置
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
- 使用Docker启动服务
docker run -d --name opsany-sonarqube \
-v /opt/sonarqube/data -v /opt/sonarqube/logs \
-p 8082:9000 sonarqube:9.6.1-community
部署完毕后,别忘了【应用平台】-【工具集成】添加上对应的工具。