1. Automated Web Server Deployment
Overview
This project automates the setup of an Nginx or Apache web server on multiple hosts. It’s commonly used for creating web server clusters and ensuring consistent configurations across servers.
Project Structure
├── playbook.yml
├── inventory.ini
└── roles/
└── webserver/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
└── vars/
└── main.yml
Steps
Define the Inventory File (inventory.ini):
server1 ansible_host=192.168.1.101
server2 ansible_host=192.168.1.102
Create Playbook (playbook.yml):
hosts: webservers
roles:
– webserver
Define the Role (roles/webserver):
Tasks (tasks/main.yml):
– name: Install Nginx
ansible.builtin.yum:
name: nginx
state: present
– name: Start and Enable Nginx
ansible.builtin.service:
name: nginx
state: started
enabled: yes
Handlers (handlers/main.yml):
– name: Restart Nginx
ansible.builtin.service:
name: nginx
state: restarted
Variables (vars/main.yml):
nginx_port: 80
Run the Playbook:
2. User Management System
Overview
This project manages users and groups across multiple servers, which is helpful in environments where you need centralized user management.
Project Structure
├── playbook.yml
├── inventory.ini
└── roles/
└── user/
├── tasks/
│ └── main.yml
└── vars/
└── main.yml
Steps
Define the Inventory (inventory.ini):
server1 ansible_host=192.168.1.101
Playbook (playbook.yml):
hosts: userservers
roles:
– user
Role Structure (roles/user):
Tasks (tasks/main.yml):
– name: Create a group
ansible.builtin.group:
name: “{{ group_name }}”
state: present
– name: Create user
ansible.builtin.user:
name: “{{ user_name }}”
group: “{{ group_name }}”
state: present
Variables (vars/main.yml):
user_name: john
group_name: developers
Run the Playbook:
3. Database Server Setup (MySQL)
Overview
This project configures a MySQL server, sets up databases, and defines users with necessary permissions.
Project Structure
├── playbook.yml
├── inventory.ini
└── roles/
└── mysql/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
└── vars/
└── main.yml
Steps
Inventory File (inventory.ini):
server1 ansible_host=192.168.1.103
Playbook (playbook.yml):
hosts: dbservers
roles:
– mysql
Role Structure (roles/mysql):
Tasks (tasks/main.yml):
– name: Install MySQL
ansible.builtin.yum:
name: mysql-server
state: present
– name: Start MySQL Service
ansible.builtin.service:
name: mysqld
state: started
enabled: yes
– name: Create MySQL Database
ansible.builtin.mysql_db:
name: “{{ db_name }}”
state: present
– name: Create MySQL User
ansible.builtin.mysql_user:
name: “{{ db_user }}”
password: “{{ db_pass }}”
priv: “*.*:ALL”
state: present
Variables (vars/main.yml):
db_name: my_database
db_user: db_user
db_pass: db_pass
Run the Playbook:
4. Application Deployment with Docker
Overview
This project deploys a web application using Docker, making it easier to manage dependencies and scale applications.
Project Structure
├── playbook.yml
├── inventory.ini
└── roles/
└── app/
├── tasks/
│ └── main.yml
├── files/
│ └── Dockerfile
└── vars/
└── main.yml
Steps
Inventory (inventory.ini):
server1 ansible_host=192.168.1.104
Playbook (playbook.yml):
hosts: appservers
roles:
– app
Role Structure (roles/app):
Tasks (tasks/main.yml):
– name: Copy Dockerfile
ansible.builtin.copy:
src: Dockerfile
dest: /tmp/Dockerfile
– name: Build Docker Image
ansible.builtin.command:
cmd: docker build -t myapp /tmp
– name: Run Docker Container
ansible.builtin.docker_container:
name: myapp
image: myapp
state: started
restart_policy: always
Dockerfile (files/Dockerfile):
FROM python:3.8
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD [“python”, “app.py”]
Run the Playbook:
5. System Update and Patch Management
Overview
This project automates the system update process across multiple servers, ensuring that all servers are up to date with the latest security patches.
Project Structure
├── playbook.yml
└── inventory.ini
Steps
Inventory (inventory.ini):
server1 ansible_host=192.168.1.105
server2 ansible_host=192.168.1.106
Playbook (playbook.yml):
hosts: all
become: yes
tasks:
– name: Update all packages
ansible.builtin.yum:
name: “*”
state: latest
– name: Reboot if Kernel Updated
ansible.builtin.reboot:
msg: “Reboot initiated by Ansible for kernel updates”
connect_timeout: 5
reboot_timeout: 600
pre_reboot_delay: 5
post_reboot_delay: 30
Run the Playbook:
These Ansible projects cover essential skills and scenarios. Let me know if you’d like further details on any project or additional configurations!