|
|
||
|---|---|---|
| docker | ||
| docs | ||
| inventory | ||
| playbooks | ||
| roles | ||
| scripts | ||
| .gitignore | ||
| QUICKSTART.md | ||
| README.md | ||
| ansible.cfg | ||
| requirements.txt | ||
README.md
Ubuntu Server Automation Project
这个项目用于自动化配置Ubuntu 22.04服务器,包括Docker安装、基础工具配置、安全设置等。
项目结构
server-automation/
├── README.md
├── requirements.txt
├── ansible.cfg
├── inventory/
│ ├── hosts.yml
│ └── group_vars/
│ └── all.yml
├── playbooks/
│ ├── main.yml
│ ├── docker.yml
│ ├── basic-setup.yml
│ └── security.yml
├── roles/
│ ├── common/
│ │ ├── tasks/main.yml
│ │ ├── handlers/main.yml
│ │ └── templates/
│ ├── docker/
│ │ ├── tasks/main.yml
│ │ ├── handlers/main.yml
│ │ └── templates/
│ │ └── daemon.json.j2
│ └── security/
│ ├── tasks/main.yml
│ └── templates/
├── scripts/
│ ├── setup.sh
│ └── quick-deploy.sh
├── docker/
│ ├── docker-compose.yml
│ ├── nginx/
│ ├── mysql/
│ └── redis/
└── docs/
├── installation.md
└── usage.md
快速开始
1. 安装依赖
# 安装Ansible
pip install -r requirements.txt
# 或者使用系统包管理器
sudo apt update
sudo apt install ansible
2. 配置目标服务器
编辑 inventory/hosts.yml:
all:
children:
webservers:
hosts:
server1:
ansible_host: 192.168.1.10
ansible_user: root
server2:
ansible_host: 192.168.1.11
ansible_user: ubuntu
databases:
hosts:
db1:
ansible_host: 192.168.1.20
ansible_user: ubuntu
3. 配置变量
编辑 inventory/group_vars/all.yml:
# 基础配置
timezone: "Asia/Shanghai"
locale: "en_US.UTF-8"
# Docker配置
docker_proxy_enabled: false
docker_proxy_http: "http://proxy.example.com:8080"
docker_proxy_https: "http://proxy.example.com:8080"
# 镜像加速器
docker_registry_mirrors:
- "https://docker.mirrors.ustc.edu.cn"
- "https://hub-mirror.c.163.com"
# 用户配置
create_user: true
username: "deploy"
user_shell: "/bin/bash"
# 安全配置
disable_root_login: false
ssh_port: 22
ufw_enabled: true
4. 运行配置
# 测试连接
ansible all -m ping -i inventory/hosts.yml
# 运行完整配置
ansible-playbook -i inventory/hosts.yml playbooks/main.yml
# 只配置Docker
ansible-playbook -i inventory/hosts.yml playbooks/docker.yml
# 只配置安全设置
ansible-playbook -i inventory/hosts.yml playbooks/security.yml
功能特性
✅ 基础系统配置
- 系统更新和基础软件包安装
- 时区和本地化设置
- 用户创建和权限配置
- SSH密钥管理
✅ Docker环境
- Docker CE 最新版本安装
- Docker Compose 安装
- 代理配置支持
- 国内镜像源配置
- 容器日志轮转配置
✅ 安全配置
- UFW防火墙配置
- SSH安全加固
- 自动安全更新
- 系统监控工具
✅ 开发工具
- Git, Vim, Curl等常用工具
- Node.js, Python3, Go等运行环境(可选)
- 数据库客户端工具
支持的服务组件
Web服务
- Nginx
- Apache
- Caddy
数据库
- MySQL/MariaDB
- PostgreSQL
- Redis
- MongoDB
监控
- Prometheus + Grafana
- ELK Stack
- Zabbix
CI/CD
- Jenkins
- GitLab Runner
- Drone CI
使用场景
- 新服务器初始化: 一键配置新的云服务器
- 环境一致性: 确保开发、测试、生产环境配置一致
- 批量部署: 同时配置多台服务器
- 灾难恢复: 快速重建服务器环境
- 团队协作: 团队成员使用统一的配置标准
高级功能
1. 滚动更新
# 逐台更新,减少服务中断
ansible-playbook -i inventory/hosts.yml playbooks/main.yml --serial 1
2. 条件部署
# 只在特定条件下执行某些任务
ansible-playbook -i inventory/hosts.yml playbooks/main.yml --tags "docker,security"
3. 变量覆盖
# 临时覆盖变量
ansible-playbook -i inventory/hosts.yml playbooks/main.yml -e "docker_proxy_enabled=true"
4. Vault加密
# 加密敏感信息
ansible-vault encrypt inventory/group_vars/all.yml
扩展开发
添加新角色
- 在
roles/目录下创建新角色目录 - 定义tasks、handlers、templates
- 在主playbook中引用
自定义模板
- Jinja2模板语法
- 支持条件渲染和循环
- 可以引用变量和facts
集成CI/CD
- GitHub Actions示例配置
- 自动测试和部署
- 配置验证和回滚
最佳实践
- 版本控制: 所有配置文件都应纳入Git管理
- 环境隔离: 不同环境使用不同的inventory文件
- 密钥管理: 使用Ansible Vault加密敏感信息
- 幂等性: 确保playbook可以重复运行
- 文档化: 详细记录每个角色和变量的用途
- 测试: 在虚拟机中测试配置后再应用到生产环境
故障排查
常见问题
- SSH连接失败 → 检查网络和认证配置
- 权限不足 → 确认用户有sudo权限
- 软件包安装失败 → 检查网络和镜像源
- 服务启动失败 → 查看系统日志
调试技巧
# 详细输出
ansible-playbook -i inventory/hosts.yml playbooks/main.yml -vvv
# 检查模式(不实际执行)
ansible-playbook -i inventory/hosts.yml playbooks/main.yml --check
# 逐步执行
ansible-playbook -i inventory/hosts.yml playbooks/main.yml --step
贡献指南
欢迎提交Issue和Pull Request来改进这个项目!
许可证
MIT License