- name: Generate signing key (if missing) command: > podman run --rm -v "{{ synapse_data_dir }}:/data" ghcr.io/element-hq/synapse:latest generate-config --server-name "{{ matrix_domain }}" --report-stats no -o /data/homeserver.yaml args: creates: "{{ synapse_data_dir }}/homeserver.yaml" - name: Copy homeserver.yaml (configured) template: src: synapse/homeserver.yaml.j2 dest: "{{ synapse_data_dir }}/homeserver.yaml" owner: "{{ podman_user }}" group: "{{ podman_user }}" mode: '0644' - name: Ensure PostgreSQL database exists become_user: postgres community.postgresql.postgresql_db: name: "{{ db_name }}" state: present delegate_to: "{{ inventory_hostname }}" # assuming DB on same host - name: Ensure PostgreSQL user exists become_user: postgres community.postgresql.postgresql_user: name: "{{ db_user }}" password: "{{ db_pass }}" priv: "{{ db_name }}.*:ALL" state: present delegate_to: "{{ inventory_hostname }}" - name: Create Podman pod command: > podman pod create --name {{ podman_pod_name }} --publish 8008:8008 # synapse --publish 8448:8448 # federation when: podman_user != "root" changed_when: false - name: Run PostgreSQL container container: name: synapse-db image: docker.io/library/postgres:15-alpine state: started restart_policy: unless-stopped pod: "{{ podman_pod_name }}" env: POSTGRES_DB: "{{ db_name }}" POSTGRES_USER: "{{ db_user }}" POSTGRES_PASSWORD: "{{ db_pass }}" volumes: - "{{ synapse_data_dir }}/db:/var/lib/postgresql/data" register: pg_cont - name: Run Synapse container container: name: synapse image: ghcr.io/element-hq/synapse:latest state: started restart_policy: unless-stopped pod: "{{ podman_pod_name }}" volumes: - "{{ synapse_data_dir }}:/data" command: > -c /data/homeserver.yaml