--- - name: Create PostgreSQL data directory ansible.builtin.file: path: /opt/performancewest/pgdata state: directory owner: "{{ deploy_user }}" group: "{{ deploy_user }}" mode: "0700" - name: Create backup directory ansible.builtin.file: path: "{{ pg_backup_dir }}" state: directory owner: root group: root mode: "0700" - name: Start PostgreSQL container ansible.builtin.command: cmd: docker compose up -d postgres chdir: /opt/performancewest register: pg_start changed_when: "'Started' in pg_start.stderr or 'Creating' in pg_start.stderr" - name: Wait for PostgreSQL to accept connections ansible.builtin.command: cmd: >- docker compose exec -T postgres pg_isready -U {{ pg_user }} -d {{ pg_database }} chdir: /opt/performancewest register: pg_ready retries: 12 delay: 5 until: pg_ready.rc == 0 changed_when: false - name: Run database migrations ansible.builtin.command: cmd: docker compose exec -T api npm run db:migrate chdir: /opt/performancewest register: db_migrate changed_when: "'migrated' in db_migrate.stdout" - name: Deploy PostgreSQL backup script ansible.builtin.template: src: pg-backup.sh.j2 dest: /usr/local/bin/pg-backup.sh owner: root group: root mode: "0700" - name: Set up daily PostgreSQL backup cron ansible.builtin.cron: name: "Daily PostgreSQL backup" minute: "0" hour: "2" job: "/usr/local/bin/pg-backup.sh >> /var/log/pg-backup.log 2>&1" user: root