feat: initial bootstrap and monitoring configuration

This commit is contained in:
mahdi 2026-07-19 22:44:19 +03:30
commit 8137b9c61f
2 changed files with 155 additions and 0 deletions

2
inventories/hosts.ini Normal file
View File

@ -0,0 +1,2 @@
[all]
vps-test ansible_host=5.39.221.227 ansible_user=ansible ansible_ssh_private_key_file=~/.ssh/id_ed25519_ansible_lab

153
main.yml Normal file
View File

@ -0,0 +1,153 @@
---
- name: Provision Foundation & Operations Stage (v0.1 & v0.2)
hosts: all
become: yes
vars:
server_timezone: "Europe/Amsterdam"
client_admin_user: "ansible"
client_admin_ssh_pub_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIwGQCc/zdN16mRdviHD7VCmisZnippyVMjvH5GHFVGH ansible-lab"
ssh_port: "22"
ssl_notification_email: "mhdio.mail@gmail.com"
# Primary domain configuration
client_domain: "lab.mhdio.com"
roles:
# -----------------------------------------------------------------
# Foundation Stage (v0.1)
# -----------------------------------------------------------------
- role: ../../ansible/roles/base-server
- role: ../../ansible/roles/users
- role: ../../ansible/roles/ssh-hardening
- role: ../../ansible/roles/ufw
- role: ../../ansible/roles/docker
- role: ../../ansible/roles/nginx
# Run Certbot for primary domain (defaults to proxy_backend_port: 8080)
- role: ../../ansible/roles/certbot
- role: ../../ansible/roles/backup-client
# -----------------------------------------------------------------
# Delivery Stage: Dynamic CICD Platform (v0.3)
# -----------------------------------------------------------------
- role: ../../ansible/roles/cicd-platform
vars:
# Options: gitlab-saas, gitea-selfhosted, gitlab-ce
cicd_provider: "gitlab-saas"
tasks:
# -----------------------------------------------------------------
# 1. Deploy Hello World Application Stack
# -----------------------------------------------------------------
- name: Create destination folder for hello-world stack
ansible.builtin.file:
path: "/home/{{ client_admin_user }}/stacks/hello-world"
state: directory
owner: "{{ client_admin_user }}"
group: "{{ client_admin_user }}"
mode: '0755'
- name: Copy docker-compose.yml for hello-world
ansible.builtin.copy:
src: ../../stacks/applications/hello-world/docker-compose.yml
dest: "/home/{{ client_admin_user }}/stacks/hello-world/docker-compose.yml"
owner: "{{ client_admin_user }}"
group: "{{ client_admin_user }}"
mode: '0644'
- name: Start hello-world stack
ansible.builtin.command:
cmd: "docker compose up -d"
chdir: "/home/{{ client_admin_user }}/stacks/hello-world"
become: yes
become_user: "{{ client_admin_user }}"
changed_when: false
# -----------------------------------------------------------------
# 2. Deploy Monitoring Stack (Prometheus, Grafana, Node-Exporter)
# -----------------------------------------------------------------
- name: Create destination directory for monitoring stack
ansible.builtin.file:
path: "/home/{{ client_admin_user }}/stacks/monitoring/prometheus"
state: directory
owner: "{{ client_admin_user }}"
group: "{{ client_admin_user }}"
mode: '0755'
- name: Copy Prometheus configuration file
ansible.builtin.copy:
src: ../../stacks/monitoring/prometheus/prometheus.yml
dest: "/home/{{ client_admin_user }}/stacks/monitoring/prometheus/prometheus.yml"
owner: "{{ client_admin_user }}"
group: "{{ client_admin_user }}"
mode: '0644'
- name: Copy Monitoring docker-compose.yml file
ansible.builtin.copy:
src: ../../stacks/monitoring/docker-compose.yml
dest: "/home/{{ client_admin_user }}/stacks/monitoring/docker-compose.yml"
owner: "{{ client_admin_user }}"
group: "{{ client_admin_user }}"
mode: '0644'
- name: Launch Monitoring Stack via Docker Compose
ansible.builtin.command:
cmd: "docker compose up -d"
chdir: "/home/{{ client_admin_user }}/stacks/monitoring"
become: yes
become_user: "{{ client_admin_user }}"
changed_when: false
# -----------------------------------------------------------------
# 3. Deploy Logging Stack (Loki & Promtail)
# -----------------------------------------------------------------
- name: Create destination directories for logging stack
ansible.builtin.file:
path: "/home/{{ client_admin_user }}/stacks/logging/{{ item }}"
state: directory
owner: "{{ client_admin_user }}"
group: "{{ client_admin_user }}"
mode: '0755'
loop:
- "loki"
- "promtail"
- name: Copy Loki configuration file
ansible.builtin.copy:
src: ../../stacks/logging/loki/loki-config.yml
dest: "/home/{{ client_admin_user }}/stacks/logging/loki/loki-config.yml"
owner: "{{ client_admin_user }}"
group: "{{ client_admin_user }}"
mode: '0644'
- name: Copy Promtail configuration file
ansible.builtin.copy:
src: ../../stacks/logging/promtail/promtail-config.yml
dest: "/home/{{ client_admin_user }}/stacks/logging/promtail/promtail-config.yml"
owner: "{{ client_admin_user }}"
group: "{{ client_admin_user }}"
mode: '0644'
- name: Copy Logging docker-compose.yml file
ansible.builtin.copy:
src: ../../stacks/logging/docker-compose.yml
dest: "/home/{{ client_admin_user }}/stacks/logging/docker-compose.yml"
owner: "{{ client_admin_user }}"
group: "{{ client_admin_user }}"
mode: '0644'
- name: Launch Logging Stack via Docker Compose
ansible.builtin.command:
cmd: "docker compose up -d"
chdir: "/home/{{ client_admin_user }}/stacks/logging"
become: yes
become_user: "{{ client_admin_user }}"
changed_when: false
# -----------------------------------------------------------------
# 4. Dynamic SSL & Nginx Routing for Subdomain (Grafana)
# -----------------------------------------------------------------
- name: Trigger SSL Generation and Reverse Proxy for Monitoring Subdomain
ansible.builtin.include_role:
name: ../../ansible/roles/certbot
vars:
client_domain: "status.mhdio.com"
proxy_backend_port: "3000" # Target Grafana container port