110 lines
3.2 KiB
YAML
110 lines
3.2 KiB
YAML
---
|
|
# Playbook 05: Deploy Stack
|
|
# Deploy Docker Compose stack with all services
|
|
|
|
- name: Deploy Nextcloud Stack
|
|
hosts: all
|
|
become: yes
|
|
|
|
tasks:
|
|
- name: Create directory structure
|
|
file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
mode: '0755'
|
|
loop:
|
|
- "{{ deployment_dir }}/configs"
|
|
- "{{ deployment_dir }}/configs/caddy"
|
|
- "{{ deployment_dir }}/configs/nextcloud"
|
|
- "{{ deployment_dir }}/data"
|
|
- "{{ deployment_dir }}/data/homarr"
|
|
- "{{ deployment_dir }}/data/obsidian/config"
|
|
- "{{ deployment_dir }}/data/obsidian/vault"
|
|
- "{{ deployment_dir }}/backups"
|
|
- "{{ deployment_dir }}/backups/database"
|
|
- "{{ deployment_dir }}/backups/volumes"
|
|
|
|
- name: Template docker-compose.yml
|
|
template:
|
|
src: ../roles/nextcloud_stack/templates/docker-compose.yml.j2
|
|
dest: "{{ deployment_dir }}/docker-compose.yml"
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
mode: '0644'
|
|
|
|
- name: Template .env file
|
|
template:
|
|
src: ../roles/nextcloud_stack/templates/env.j2
|
|
dest: "{{ deployment_dir }}/.env"
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
mode: '0600'
|
|
no_log: true
|
|
|
|
- name: Template Caddyfile
|
|
template:
|
|
src: ../roles/caddy/templates/Caddyfile.j2
|
|
dest: "{{ deployment_dir }}/configs/caddy/Caddyfile"
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
mode: '0644'
|
|
|
|
- name: Pull Docker images
|
|
command: docker compose pull
|
|
args:
|
|
chdir: "{{ deployment_dir }}"
|
|
become_user: "{{ ansible_user }}"
|
|
|
|
- name: Start Docker Compose stack
|
|
command: docker compose up -d
|
|
args:
|
|
chdir: "{{ deployment_dir }}"
|
|
become_user: "{{ ansible_user }}"
|
|
|
|
- name: Wait for PostgreSQL to be healthy
|
|
command: docker exec next-db pg_isready -U {{ db_user }}
|
|
register: pg_ready
|
|
until: pg_ready.rc == 0
|
|
retries: 30
|
|
delay: 10
|
|
changed_when: false
|
|
|
|
- name: Wait for Nextcloud to be accessible
|
|
uri:
|
|
url: http://localhost:8808/status.php
|
|
status_code: 200
|
|
register: nc_status
|
|
until: nc_status.status == 200
|
|
retries: 30
|
|
delay: 10
|
|
|
|
- name: Configure Nextcloud Redis cache
|
|
command: |
|
|
docker exec -u www-data next php occ config:system:set redis host --value=next-redis
|
|
args:
|
|
chdir: "{{ deployment_dir }}"
|
|
ignore_errors: yes
|
|
|
|
- name: Configure Nextcloud Redis port
|
|
command: |
|
|
docker exec -u www-data next php occ config:system:set redis port --value=6379
|
|
args:
|
|
chdir: "{{ deployment_dir }}"
|
|
ignore_errors: yes
|
|
|
|
- name: Configure Nextcloud memcache
|
|
command: |
|
|
docker exec -u www-data next php occ config:system:set memcache.locking --value='\\OC\\Memcache\\Redis'
|
|
args:
|
|
chdir: "{{ deployment_dir }}"
|
|
ignore_errors: yes
|
|
|
|
- name: Display deployment success
|
|
debug:
|
|
msg: |
|
|
✓ Docker Compose stack deployed
|
|
✓ All containers started
|
|
✓ Nextcloud is accessible
|