Awesome Sysadmin自动化测试环境:Docker Compose配置

Awesome Sysadmin自动化测试环境:Docker Compose配置

【免费下载链接】awesome-sysadmin A curated list of amazingly awesome open-source sysadmin resources. 【免费下载链接】awesome-sysadmin 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-sysadmin

作为系统管理员,你是否还在为搭建复杂的测试环境而烦恼?手动配置多服务依赖、解决版本冲突、清理残留数据——这些重复工作不仅耗费时间,还容易出错。本文将带你使用Docker Compose快速构建Awesome Sysadmin项目的自动化测试环境,只需3步即可完成从环境初始化到服务验证的全流程,让你专注于核心功能开发而非环境维护。

为什么选择Docker Compose?

Docker Compose是Docker官方提供的多容器编排工具,通过YAML文件定义服务、网络和存储卷之间的关系,实现"一键启动"整个应用栈。对于Awesome Sysadmin这类包含多种基础设施组件的项目,它解决了三大痛点:

  • 环境一致性:确保开发、测试、生产环境配置完全一致,消除"在我电脑上能运行"的问题
  • 依赖隔离:每个服务运行在独立容器中,避免库版本冲突
  • 快速重建:测试完成后可一键清理所有资源,不留任何残留

项目官方文档README.md中列出了包括Ansible、Jenkins、Prometheus在内的20+类系统管理工具,这些工具都可以通过Docker Compose轻松编排。

核心配置文件解析

以下是针对Awesome Sysadmin项目优化的docker-compose.yml配置,包含CI/CD、监控和日志管理三大核心测试组件:

version: '3.8'

services:
  # CI/CD服务:基于Jenkins
  jenkins:
    image: jenkins/jenkins:lts-jdk11
    container_name: awesome-jenkins
    restart: unless-stopped
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkins_data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - JENKINS_OPTS="--prefix=/jenkins"
    networks:
      - awesome-network

  # 监控服务:基于Prometheus
  prometheus:
    image: prom/prometheus:v2.45.0
    container_name: awesome-prometheus
    restart: unless-stopped
    ports:
      - "9090:9090"
    volumes:
      - prometheus_data:/prometheus
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
    networks:
      - awesome-network

  # 日志管理:基于ELK Stack的简化版
  logstash:
    image: logstash:8.7.0
    container_name: awesome-logstash
    restart: unless-stopped
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline
    ports:
      - "5044:5044"
    depends_on:
      - elasticsearch
    networks:
      - awesome-network

  elasticsearch:
    image: elasticsearch:8.7.0
    container_name: awesome-elasticsearch
    restart: unless-stopped
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
    ports:
      - "9200:9200"
    volumes:
      - elasticsearch_data:/usr/share/elasticsearch/data
    networks:
      - awesome-network

networks:
  awesome-network:
    driver: bridge

volumes:
  jenkins_data:
  prometheus_data:
  elasticsearch_data:

关键配置说明

  1. 持久化存储:所有服务数据通过命名卷(如jenkins_data)持久化,避免容器重启后数据丢失
  2. 网络隔离:自定义awesome-network网络确保服务间安全通信,同时对外暴露必要端口
  3. 依赖管理:通过depends_on定义服务启动顺序,确保Elasticsearch就绪后才启动Logstash
  4. 权限控制:挂载Docker套接字使Jenkins能在容器内管理其他Docker服务(仅测试环境使用)

环境搭建步骤

1. 安装Docker和Docker Compose

在Ubuntu系统上执行以下命令:

# 更新软件包索引
sudo apt update

# 安装依赖包
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加Docker稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 将当前用户添加到docker组(避免每次使用sudo)
sudo usermod -aG docker $USER

执行完成后需注销并重新登录,使用户组变更生效

2. 获取项目代码

git clone https://gitcode.com/GitHub_Trending/aw/awesome-sysadmin.git
cd awesome-sysadmin

3. 启动测试环境

# 创建必要的配置目录
mkdir -p logstash/pipeline prometheus

# 生成Prometheus配置文件
cat > prometheus.yml << EOF
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  
  - job_name: 'jenkins'
    static_configs:
      - targets: ['jenkins:8080']
EOF

# 生成Logstash管道配置
cat > logstash/pipeline/logstash.conf << EOF
input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "awesome-sysadmin-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}
EOF

# 启动所有服务
docker compose up -d

4. 验证环境状态

执行状态检查命令:

docker compose ps

正常输出应类似:

NAME                     IMAGE                       COMMAND                  SERVICE             CREATED             STATUS              PORTS
awesome-elasticsearch    elasticsearch:8.7.0         "/bin/tini -- /usr/l…"   elasticsearch       5 minutes ago       Up 5 minutes        0.0.0.0:9200->9200/tcp
awesome-jenkins          jenkins/jenkins:lts-jdk11   "/usr/bin/tini -- /u…"   jenkins             5 minutes ago       Up 5 minutes        0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp
awesome-logstash         logstash:8.7.0              "/usr/local/bin/dock…"   logstash            5 minutes ago       Up 5 minutes        0.0.0.0:5044->5044/tcp
awesome-prometheus       prom/prometheus:v2.45.0     "/bin/prometheus --c…"   prometheus          5 minutes ago       Up 5 minutes        0.0.0.0:9090->9090/tcp

自动化测试工作流

服务访问地址

服务名称访问地址初始凭证
Jenkinshttp://localhost:8080管理员密码在容器日志中:docker logs awesome-jenkins 2>&1 | grep "password is"
Prometheushttp://localhost:9090无需认证
Elasticsearchhttp://localhost:9200无需认证

集成Git分支清理脚本

项目提供的git-branch-cleanup.sh脚本可集成到Jenkins Pipeline中,实现测试环境的自动维护:

pipeline {
    agent any
    stages {
        stage('Cleanup') {
            steps {
                sh './git-branch-cleanup.sh'
            }
        }
        stage('Test') {
            steps {
                sh 'docker compose run --rm jenkins /bin/bash -c "curl -s http://prometheus:9090/-/healthy"'
            }
        }
    }
}

该脚本会自动清理已合并到主分支的本地分支,并修剪远程跟踪分支,保持测试环境代码仓库整洁。

环境维护与优化

定期清理资源

# 清理未使用的容器、镜像和卷
docker system prune -af --volumes

# 重启所有服务以应用更新
docker compose down && docker compose up -d

性能优化建议

  1. 资源限制:为每个服务添加资源约束,避免单个服务耗尽主机资源
services:
  jenkins:
    # ...其他配置
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
        reservations:
          cpus: '1'
          memory: 2G
  1. 日志轮转:配置Docker日志驱动限制日志文件大小
services:
  # ...所有服务添加
  logging:
    driver: "json-file"
    options:
      max-size: "10m"
      max-file: "3"
  1. 监控增强:添加cAdvisor监控容器资源使用情况
services:
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.47.0
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    ports:
      - "8081:8080"
    networks:
      - awesome-network

常见问题解决

服务启动失败

检查服务日志定位问题:

# 查看特定服务日志
docker compose logs -f jenkins

# 检查服务配置是否正确
docker compose config --quiet

端口冲突

如果8080、9090等端口已被占用,修改docker-compose.yml中的端口映射:

services:
  jenkins:
    ports:
      - "8081:8080"  # 将主机端口改为8081

数据备份与迁移

# 备份所有卷数据
docker run --rm -v $(pwd):/backup -v jenkins_data:/source alpine tar -czf /backup/jenkins_backup.tar.gz -C /source .

# 恢复数据到新环境
docker run --rm -v $(pwd):/backup -v jenkins_data:/target alpine sh -c "rm -rf /target/* && tar -xzf /backup/jenkins_backup.tar.gz -C /target"

总结

通过Docker Compose配置,我们实现了Awesome Sysadmin项目测试环境的标准化和自动化。这个环境包含完整的CI/CD流水线、监控系统和日志管理功能,完全符合README.md中对系统管理工具链的要求。

使用本文提供的配置和脚本,你可以:

  • 在30分钟内完成整个测试环境的搭建
  • 确保所有服务依赖关系正确配置
  • 一键清理和重建环境,避免残留数据干扰测试结果
  • 无缝集成项目提供的git-branch-cleanup.sh等辅助工具

无论是开发新功能、测试系统集成,还是验证工具兼容性,这个自动化测试环境都能显著提高你的工作效率,让你专注于创造真正的价值而非陷入环境配置的泥潭。

【免费下载链接】awesome-sysadmin A curated list of amazingly awesome open-source sysadmin resources. 【免费下载链接】awesome-sysadmin 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-sysadmin

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值