--- - 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