1. 首页 > Linux教程 > 正文

Linux教程FG498-Linux综合实战案例四

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

风哥提示:

文档介绍DevOps平台部署综合实战案例。

Part01-GitLab部署

1.1 GitLab安装配置

# 安装依赖
[root@fgedu-gitlab ~]# yum install -y curl policycoreutils-python openssh-server

# 添加GitLab仓库
[root@fgedu-gitlab ~]# curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash

# 安装GitLab
[root@fgedu-gitlab ~]# EXTERNAL_URL=”http://git.fgedu.net.cn” yum install -y gitlab-ce

# 配置GitLab
[root@fgedu-gitlab ~]# cat > /etc/gitlab/gitlab.rb << 'EOF' external_url 'http://git.fgedu.net.cn' gitlab_rails['gitlab_shell_ssh_port'] = 22 # 配置邮件 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.fgedu.net.cn" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "gitlab@fgedu.net.cn" gitlab_rails['smtp_p更多学习教程公众号风哥教程itpux_comassword'] = "Gitlab@123" gitlab_rails['smtp_domain'] = "fgedu.net.cn" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true # 配置备份 gitlab_rails['backup_keep_time'] = 604800 gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" # 配置LDAP gitlab_rails['ldap_enabled'] = true gitlab_rails['ldap_servers'] = { 'main' => {
‘label’ => ‘FGEDU LDAP’,
‘host’ => ‘ldap.fgedu.net.cn’,
‘port’ => 389,
‘uid’ => ‘sAMAccountName’,
‘bind_dn’ => ‘cn=gitlab,ou=service,dc=fgedu,dc=net,dc=cn’,
‘password’ => ‘Ldap@123’,
‘base’ => ‘ou=users,dc=fgedu,dc=net,dc=cn’,
}
}
EOF

# 重新配置GitLab
[root@fgedu-gitlab ~]# gitlab-ctl reconfigure
Starting Chef Infra Client, version 18.1.0
resolving cookbooks for run list: [“gitlab”]
Synchronizing Cookbooks:
– gitlab (0.0.1)
Installing Cookbook Gems:
Compiling Cookbooks…
Converging 2832 resources…

gitlab Reconfigured!

# 查看GitLab状态
[root@fgedu-gitlab ~]# gitlab-ctl status
run: alertmanager: (pid 12345) 1234s; run: log: (pid 12346) 1234s
run: gitaly: (pid 12347) 1234s; run: log: (pid 12348) 1234s
run: gitlab-exporter: (pid 12349) 1234s; run: log: (pid 12350) 1234s
run: gitlab-kas: (pid 12351) 1234s; run: log: (pid 12352) 1234s
run: gitlab-workhorse: (pid 12353) 1234s; run: log: (pid 12354) 1234s
run: logrotate: (pid 12355) 1234s; run: log: (pid 12356) 1234s
run: nginx: (pid 12357) 1234s; run: log: (pid 12358) 1234s
run: postgres: (pid 12359) 1234s; run: log: (pid 12360) 1234s
run: prometheus: (pid 12361) 1234s; run: log: (pid 12362) 1234s
run: puma: (pid 12363) 1234s; run: log: (pid 12364) 1234s
run: redis: (pid 12365) 1234s; run: log: (pid 12366) 1234s
run: registry: (pid 12367) 1234s; run: log: (pid 12368) 1234s
run: sidekiq: (pid 12369) 1234s; run: log: (pid 12370) 1234s

Part02-Harbor镜像仓库

2.1 Harbor安装配置

# 下载Harbor
[root@fgedu-harbor ~]# wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgz
[root@fgedu-harbor ~]# tar xzf harbor-offline-installer-v2.9.0.tgz -C /usr/local/

# 配置Harbor
[root@fgedu-harbor ~]# cd /usr/local/harbor
[root@fgedu-harbor harbor]# cat > harbor.yml << 'EOF' hostname: harbor.fgedu.net.cn http: port: 80 https: port: 443 certificate: /etc/harbor/ssl/harbor.crt private_key: /etc/harbor/ssl/harbor.key harbor_admin_password: Harbor@123 database: password: root123 max_idle_conns: 100 max_open_conns: 900 data_volume: /data/harbor trivy: ignore_unfixed: false skip_update: false offline_scan: false security_check: vuln insecure: false jobservice: max_job_workers: 10 notification: webhook_job_max_retry: 10 chart: absolute_url: disabled log: level: info local: rotate_count: 50 rotate_size: 200M location: /var/log/harbor _version: 2.9.0 proxy: http_proxy: https_proxy: no_proxy: components: - core - jobservice - trivy EOF # 安装Harbor [root@fgedu-harbor harbor]# ./install.sh --with-trivy --with-chartmuseum [Step 0]: checking if docker is installed ... [Step 1]: checking docker-compose is installed ... [Step 2]: loading Harbor images ... [Step 3]: preparing environment ... [Step 4]: preparing harbor configs ... [Step 5]: starting Harbor ... [Step 6]: checking Harbor is running ... ✔ ----Harbor has been installed and started successfully.---- # 配置Docker信任Harbor [root@fgedu-harbor ~]# cat > /etc/docker/daemon.json << 'EOF' { "insecurefrom PG视频:www.itpux.com-registries": ["harbor.fgedu.net.cn"], "registry-mirrors": ["https://mirror.fgedu.net.cn"] } EOF [root@fgedu-harbor ~]# systemctl restart docker # 推送镜像到Harbor [root@fgedu-harbor ~]# docker login harbor.fgedu.net.cn Username: admin Password: Harbor@123 Login Succeeded [root@fgedu-harbor ~]# docker tag nginx:latest harbor.fgedu.net.cn/library/nginx:latest [root@fgedu-harbor ~]# docker push harbor.fgedu.net.cn/library/nginx:latest The push refers to repository [harbor.fgedu.net.cn/library/nginx] 5f8f5f8f5f8f: Pushed latest: digest: sha256:abc123 size: 1234

Part03-SonarQube代码质量

3.1 SonarQube安装配置

# 安装PostgreSQL
[root@fgedu-sonar ~]# yum install -y postgresql-server postgresql-contrib
[root@fgedu-sonar ~]# postgresql-setup initdb
[root@fgedu-sonar ~]# systemctl enable postgresql –now

# 创建SonarQube数据库
[root@fgedu-sonar ~]# su – postgres
postgres@fgedu-sonar:~$ psql
postgres=# CREATE USER sonar WITH PASSWORD ‘Sonar@123’;
postgres=# CREATE DATABASE sonar OWNER sonar;
postgres=# GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar;
postgres=# \q

# 下载SonarQube
[root@fgedu-sonar ~]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-10.2.1.78527.zip
[root@fgedu-sonar ~]# unzip sonarqube-10.2.1.78527.zip -d /usr/local/
[root@fgedu-sonar ~]# ln -s /usr/local/sonarqube-10.2.1.78527 /usr/local/sonarqube

# 配置SonarQube
[root@fgedu-sonar ~]# cat > /usr/local/sonarqube/conf/sonar.properties << 'EOF' sonar.jdbc.username=sonar sonar.jdbc.password=Sonar@123 sonar.jdbc.url=jdbc:postgresql://localhost/sonar sonar.web.host=0.0.0.0 sonar.web.port=9000 sonar.web.context=/sonar sonar.search.javaOpts=-Xms512m -Xmx512m EOF # 创建sonar用户 [root@fgedu-sonar ~]# useradd -r -s /bin/false sonar [root@fgedu-sonar ~]# chown -R sonar:sonar /usr/local/sonarqube # 启动SonarQube [root@fgedu-sonar ~]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start" Starting SonarQube... Started SonarQube. # 配置代码扫描 [root@fgedu-sonar ~]# cat > sonar-project.properties << 'EOF' sonar.projectKey=fgedu-app sonar.projectName=FGEDU Application sonar.projectVersion=1.0 sonar.sources=src sonar.language=java sonar.java.binaries=target/classes sonar.sourceEncoding=UTF-8 sonar.host.url=http://localhost:9000/sonar sonar.login=admin sonar.password=admin EOF # 执行代码扫描 [root@fgedu-sonar ~]# mvn sonar:sonar [INFO] Scanning for projects... [INFO] BUILD SUCCESS [INFO] Total time: 02:30 min

Part04-CI/CD流水线

4.1 完整流水线配置

# 创建GitLab CI配置
[root@fgedu-gitlab ~]# cat > .gitlab-ci.yml << 'EOF' stages: - build - test - quality - package - deploy variables: MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" DOCKER_REGISTRY: "harbor.fgedu.net.cn" IMAGE_NAME: "fgedu/app" cache: paths: - .m2/repository/ build: stage: build image: maven:3.9-openjdk-17 script: - mvn clean compile artifacts: paths: - target/ expire_in: 1 hour test: stage: test image: maven:3.9-openjdk-17 script: - mvn test artifacts: reports: junit: target/surefire-reports/*.xml quality: stage: quality image: maven:3.9-openjdk-17 script: - mvn sonar:sonar -Dsonar.host.url=http://sonar.fgedu.net.cn:9000 package: stage: package image: docker:latest services: - docker:dind script: - docker login -u $HARBOR_USER -p $HARBOR_PASS $DOCKER_REGISTRY - docker build -t $DOCKER_REGISTRY/$IMAGE_NAME:$CI_COMMIT_SHA . - docker push $DOCKER_REGISTRY/$IMAGE_NAME:$CI_COMMIT_SHA - docker tag $DOCKER_REGISTRY/$IMAGE_NAME:$CI_COMMIT_SHA $DOCKER_REGISTRY/$IMAGE_NAME:latest - docker push $DOCKER_REGISTRY/$IMAGE_NAME:latest deploy_staging: stage: deploy image: bitnami/kubectl:latest script: - kubectl set image deployment/fgedu-app fgedu-app=$DOCKER_REGISTRY/$IMAGE_NAME:$CI_COMMIT_SHA -n staging - kubectl rollout status deployment/fgedu-app -n staging environment: name: staging url: https://staging.fgedu.net.cn only: - develop deploy_production: stage: deploy image: bitnami/kubectl:latest script: - kubectl set image deployment/fgedu-app fgedu-app=$DOCKER_REGISTRY/$IMAGE_NAME:$CI_COMMIT_SHA -n production - kubectl rollout status deployment/fgedu-app -n production environment: name: production url: https://www.fgedu.net.cn only: - main when: manual EOF
风哥针对DevOps平台建议:

  • 建立完整的CI/CD流水线
  • 配置代码质量检查
  • 使用镜像仓库管理镜像
  • 实施自动化测试
  • 配置多环境部署

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息