Awesome Sysadmin自动化测试环境:Docker Compose配置
作为系统管理员,你是否还在为搭建复杂的测试环境而烦恼?手动配置多服务依赖、解决版本冲突、清理残留数据——这些重复工作不仅耗费时间,还容易出错。本文将带你使用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:
关键配置说明
- 持久化存储:所有服务数据通过命名卷(如
jenkins_data)持久化,避免容器重启后数据丢失 - 网络隔离:自定义
awesome-network网络确保服务间安全通信,同时对外暴露必要端口 - 依赖管理:通过
depends_on定义服务启动顺序,确保Elasticsearch就绪后才启动Logstash - 权限控制:挂载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
自动化测试工作流
服务访问地址
| 服务名称 | 访问地址 | 初始凭证 |
|---|---|---|
| Jenkins | http://localhost:8080 | 管理员密码在容器日志中:docker logs awesome-jenkins 2>&1 | grep "password is" |
| Prometheus | http://localhost:9090 | 无需认证 |
| Elasticsearch | http://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
性能优化建议
- 资源限制:为每个服务添加资源约束,避免单个服务耗尽主机资源
services:
jenkins:
# ...其他配置
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '1'
memory: 2G
- 日志轮转:配置Docker日志驱动限制日志文件大小
services:
# ...所有服务添加
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
- 监控增强:添加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等辅助工具
无论是开发新功能、测试系统集成,还是验证工具兼容性,这个自动化测试环境都能显著提高你的工作效率,让你专注于创造真正的价值而非陷入环境配置的泥潭。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



