156 lines
6.0 KiB
YAML
156 lines
6.0 KiB
YAML
---
|
|
- name: Provision Production DevOps Platform Toolkit
|
|
hosts: all
|
|
become: yes
|
|
vars_files:
|
|
- vars/vault.yml # Dynamically loads the encrypted secrets
|
|
vars:
|
|
server_timezone: "Europe/Amsterdam"
|
|
client_admin_user: "ansible"
|
|
ssh_port: "22"
|
|
client_domain: "lab.mhdio.com"
|
|
|
|
# Binding plaintext vars to encrypted vault values
|
|
client_admin_ssh_pub_key: "{{ vault_client_admin_ssh_pub_key }}"
|
|
ssl_notification_email: "{{ vault_ssl_notification_email }}"
|
|
|
|
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 |