ansible-playbook -i inventories/hosts.ini playbooks/site.yml --vault-password-file .vault_pass.txt
Automates Linux VM provisioning and configuration using Ansible, including web, app, and database services, with CI/CD integration.
This project automates multi-tier application deployment with the following components:
- VM Provisioning: KVM/libvirt VM creation
- Configuration: Docker, NGINX Reverse Proxy, PostgreSQL Hardening
- Security: Ansible Vault for secrets management
- CI/CD: GitHub Actions for linting and idempotency tests
.
├── .github/ # GitHub Actions workflows
├── inventories/ # Ansible inventory & variables
│ ├── hosts.ini # Host definitions
│ ├── group_vars/ # Group variables
│ └── host_vars/ # Host-specific variables
├── playbooks/ # Ansible playbooks
│ ├── site.yml # Main configuration playbook
│ └── provisioning/
│ └── create-vms.yml # VM creation playbook
└── roles/ # Ansible Galaxy roles
├── db_hardening/ # PostgreSQL hardening
├── docker_setup/ # Docker installation & app deployment
└── reverse_proxy/ # NGINX reverse proxy configuration
- Ansible (latest version)
- Python 3 with pip
- libvirt/KVM (for VM provisioning)
- SSH Access: Ensure
~/.ssh/configis configured for VM access
Install required Ansible collections:
ansible-galaxy collection install community.postgresql community.generalCreate the virtual machines:
ansible-playbook playbooks/provisioning/create-vms.yml- Verify that
inventories/hosts.inicontains the correct IP addresses for your VMs - Ensure
~/.ssh/confighas the correct SSH entries for:AppServVMWebServVMDataBaseServVM
Execute the main configuration playbook:
ansible-playbook -i inventories/hosts.ini playbooks/site.yml --ask-become-passSensitive data is stored in inventories/group_vars/db/secrets.yml.
Edit vault file:
ansible-vault edit inventories/group_vars/db/secrets.ymlView vault file:
ansible-vault view inventories/group_vars/db/secrets.ymlThe project includes automated workflows:
.github/workflows/lint.yml: Linting checks triggered on push.github/workflows/idempotency.yml: Idempotency tests triggered on push
db_hardening| Installs and hardens PostgreSQL database |docker_setup| Installs Docker and deploys application containers |reverse_proxy| Configures NGINX reverse proxy |
- Fork the repository
- Create a feature branch
- Make your changes
- Test with the provided CI/CD workflows
- Submit a pull request