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
webserver-deployment/ ├── playbook.yml ├── inventory.ini └── roles/ └── webserver/ ├── tasks/ │ └── main.yml ├── handlers/ │ └── main.yml └── vars/ └── main.yml
Steps
- Define the Inventory File (
inventory.ini
):
[webservers] server1 ansible_host=192.168.1.101 server2 ansible_host=192.168.1.102
- Create Playbook (
playbook.yml
):
- name: Deploy Web Server 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
- Tasks (
-
Handlers (
handlers/main.yml
):
- name: Restart Nginx ansible.builtin.service: name: nginx state: restarted
-
Variables (
vars/main.yml
):
nginx_port: 80
- Run the Playbook:
ansible-playbook -i inventory.ini playbook.yml
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
user-management/ ├── playbook.yml ├── inventory.ini └── roles/ └── user/ ├── tasks/ │ └── main.yml └── vars/ └── main.yml
Steps
- Define the Inventory (
inventory.ini
):
[userservers] server1 ansible_host=192.168.1.101
- Playbook (
playbook.yml
):
- name: User Management 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
- Tasks (
-
Variables (
vars/main.yml
):
user_name: john group_name: developers
- Run the Playbook:
ansible-playbook -i inventory.ini playbook.yml
3. Database Server Setup (MySQL)
Overview
This project configures a MySQL server, sets up databases, and defines users with necessary permissions.
Project Structure
mysql-setup/ ├── playbook.yml ├── inventory.ini └── roles/ └── mysql/ ├── tasks/ │ └── main.yml ├── handlers/ │ └── main.yml └── vars/ └── main.yml
Steps
- Inventory File (
inventory.ini
):
[dbservers] server1 ansible_host=192.168.1.103
- Playbook (
playbook.yml
):
- name: MySQL Server Setup 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
- Tasks (
-
Variables (
vars/main.yml
):
db_name: my_database db_user: db_user db_pass: db_pass
- Run the Playbook:
ansible-playbook -i inventory.ini playbook.yml
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
docker-deployment/ ├── playbook.yml ├── inventory.ini └── roles/ └── app/ ├── tasks/ │ └── main.yml ├── files/ │ └── Dockerfile └── vars/ └── main.yml
Steps
- Inventory (
inventory.ini
):
[appservers] server1 ansible_host=192.168.1.104
- Playbook (
playbook.yml
):
- name: Deploy App with Docker 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
- Tasks (
-
Dockerfile (
files/Dockerfile
):
FROM python:3.8 WORKDIR /app COPY . . RUN pip install -r requirements.txt CMD ["python", "app.py"]
- Run the Playbook:
ansible-playbook -i inventory.ini playbook.yml
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
system-update/ ├── playbook.yml └── inventory.ini
Steps
- Inventory (
inventory.ini
):
[all] server1 ansible_host=192.168.1.105 server2 ansible_host=192.168.1.106
- Playbook (
playbook.yml
):
- name: System Update and Patching 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:
ansible-playbook -i inventory.ini playbook.yml
These Ansible projects cover essential skills and scenarios. Let me know if you’d like further details on any project or additional configurations!
Top comments (2)
Just amazing 😻.
Thanks man!