Skip to content
Snippets Groups Projects
main.yml 10.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • - name: Create ssl cert
    
      include_role:
        name: certificate
      vars:
        domains: ["{{ matrix_domain }}"]
    
      when: 'matrix_domain is defined'
    
    - name: Install packages
    
          - libtiff
          - libwebp
          - libxslt
          - libzip
          - make
    
          - nodejs-lts-iron
    
          - npm
          - openssl
          - pkgconf
          - postgresql-libs
          - python
    
    - name: Add synapse group
    
      group: name=synapse system=yes gid=198
    
    
    - name: Add synapse user
    
      user: name=synapse system=yes uid=198 group=synapse home=/var/lib/synapse shell=/bin/false createhome=no
    
    
    - name: Create synapse home
    
      file: path={{ item }} state=directory owner=synapse group=synapse mode=0700
    
      with_items:
        - /var/lib/synapse
        - /var/lib/synapse/media_store
    
        - /var/lib/synapse/draupnir-data
    
        - /var/lib/synapse/pantalaimon-data
    
    
    - name: Make virtualenvs
    
      command: 'python -m venv {{ item }}'
      args:
        creates: '{{ item }}/bin/python'
      become: true
      become_user: synapse
    
      become_method: ansible.builtin.sudo
    
      with_items:
        - /var/lib/synapse/venv
        - /var/lib/synapse/venv-pantalaimon
    
    
    - name: Update virtualenvs
    
      pip:
        name:
          - pip
          - wheel
        state: latest
        extra_args: '--upgrade-strategy=eager'
        virtualenv: '{{ item }}'
    
      become: true
    
      become_method: ansible.builtin.sudo
    
      with_items:
        - /var/lib/synapse/venv
        - /var/lib/synapse/venv-pantalaimon
    
    
    - name: Install synapse
    
          - 'matrix-synapse[postgres,oidc,systemd,url-preview,redis,user-search]==1.121.1'
    
        state: latest
        extra_args: '--upgrade-strategy=eager'
        virtualenv: /var/lib/synapse/venv
    
      become: true
    
      become_method: ansible.builtin.sudo
    
      register: synapse_pip
    
    - name: Install pantalaimon
    
          - 'aiohappyeyeballs==2.4.4'
          - 'aiohttp==3.11.10'
    
          - 'aiohttp-socks==0.7.1'
          - 'aiosignal==1.3.1'
          - 'appdirs==1.4.4'
          - 'atomicwrites==1.4.1'
    
          - 'cryptography==44.0.0'
    
          - 'frozenlist==1.5.0'
    
          - 'future==0.18.3'
          - 'h11==0.14.0'
          - 'h2==4.1.0'
          - 'hpack==4.0.0'
          - 'hyperframe==6.0.1'
    
          - 'jaraco.context==6.0.1'
    
          - 'jaraco.functools==4.1.0'
    
          - 'jsonschema==4.23.0'
    
          - 'jsonschema-specifications==2024.10.1'
    
          - 'keyring==25.5.0'
          - 'Logbook==1.8.0'
    
          - 'more-itertools==10.5.0'
    
          - 'multidict==6.1.0'
    
          - 'prompt_toolkit==3.0.48'
    
          - 'propcache==0.2.1'
    
          - 'pycryptodome==3.21.0'
    
          - 'python-socks==2.5.3'
    
          - 'rpds-py==0.22.3'
    
          - 'SecretStorage==3.3.3'
          - 'unpaddedbase64==2.1.0'
          - 'wcwidth==0.2.13'
    
        extra_args: '--upgrade-strategy=eager --no-deps'
    
        virtualenv: /var/lib/synapse/venv-pantalaimon
    
      become: true
    
      become_method: ansible.builtin.sudo
    
    - name: Download draupnir
    
        repo: https://github.com/the-draupnir-project/Draupnir
        dest: /var/lib/synapse/draupnir
        version: v1.87.0
    
      become: true
    
      become_method: ansible.builtin.sudo
    
      register: draupnir_git
    
    - name: Install draupnir
    
        path: /var/lib/synapse/draupnir
    
      become: true
    
      become_method: ansible.builtin.sudo
    
      when: draupnir_git.changed
    
    - name: Build draupnir  # noqa no-changed-when
    
        chdir: /var/lib/synapse/draupnir
    
      become: true
      become_user: synapse
    
      become_method: ansible.builtin.sudo
    
      when: draupnir_git.changed
    
    - name: Install draupnir antispam module
    
          - /var/lib/synapse/draupnir/synapse_antispam
    
        virtualenv: /var/lib/synapse/venv
    
      become: true
    
      become_method: ansible.builtin.sudo
    
      when: synapse_pip.changed or draupnir_git.changed
    
    - name: Download matrix-appservice-irc
    
        repo: https://github.com/matrix-org/matrix-appservice-irc
    
        dest: /var/lib/synapse/matrix-appservice-irc
    
      become: true
    
      become_method: ansible.builtin.sudo
    
        - Restart matrix-appservice-irc
    
    - name: Install matrix-appservice-irc
    
      community.general.yarn:
    
        path: /var/lib/synapse/matrix-appservice-irc
    
      become: true
      become_user: synapse
    
      become_method: ansible.builtin.sudo
    
    - name: Build matrix-appservice-irc  # noqa no-changed-when
    
      command: yarn build
      args:
        chdir: /var/lib/synapse/matrix-appservice-irc
    
      become: true
    
      become_method: ansible.builtin.sudo
    
    - name: Install pg_hba.conf
    
      copy: src=pg_hba.conf dest=/var/lib/postgres/data/pg_hba.conf owner=postgres group=postgres mode=0600
      notify:
    
    - name: Add synapse postgres db
    
      postgresql_db: db=synapse lc_collate=C lc_ctype=C template=template0
    
      become: true
    
      become_method: ansible.builtin.su
    
    - name: Add synapse postgres user
    
      postgresql_user: db=synapse user=synapse password={{ vault_postgres_users.synapse }}
    
      become: true
    
      become_method: ansible.builtin.su
    
    - name: Add irc postgres db
    
      become: true
    
      become_method: ansible.builtin.su
    
    - name: Create synapse config dir
    
      file: path={{ item }} state=directory owner=root group=synapse mode=0750
      with_items:
        - /etc/synapse
    
    - name: Install homeserver config
    
      template: src=homeserver.yaml.j2 dest=/etc/synapse/homeserver.yaml owner=root group=synapse mode=0640
    
    - name: Install static config
    
      copy: src={{ item }} dest=/etc/synapse/{{ item }} owner=root group=root mode=0644
      with_items:
        - log_config.yaml
    
        - worker-federation_reader.yaml
    
        - worker-federation_sender.yaml
    
        - worker-media_repository.yaml
    
    - name: Install pantalaimon config
    
      template: src=pantalaimon.conf.j2 dest=/etc/synapse/pantalaimon.conf owner=root group=synapse mode=0644
      notify:
    
    - name: Install draupnir config
      template: src=draupnir.yaml.j2 dest=/etc/synapse/draupnir.yaml owner=root group=synapse mode=0640
    
    - name: Install irc-bridge config
    
      template: src=irc-bridge.yaml.j2 dest=/etc/synapse/irc-bridge.yaml owner=root group=synapse mode=0640
    
        - Restart matrix-appservice-irc
    
    - name: Install irc-bridge registration
    
      template: src=appservice-registration-irc.yaml.j2 dest=/etc/synapse/appservice-registration-irc.yaml owner=root group=synapse mode=0640
    
    - name: Install signing key  # noqa template-instead-of-copy
    
        content: '{{ vault_matrix_secrets.signing_key }}'
    
        dest: /etc/synapse/{{ matrix_server_name }}.signing.key
        owner: root
        group: synapse
    
    - name: Install ircpass key  # noqa template-instead-of-copy
    
        content: '{{ vault_matrix_secrets.ircpass_key }}'
    
        dest: /etc/synapse/{{ matrix_server_name }}.ircpass.key
        owner: root
        group: synapse
    
    - name: Install ircmedia key  # noqa template-instead-of-copy
      copy:
        content: '{{ vault_matrix_secrets.ircmedia_key }}'
        dest: /etc/synapse/{{ matrix_server_name }}.ircmedia.key
        owner: root
        group: synapse
        mode: '0640'
    
    
    - name: Make nginx log dir
    
      file: path=/var/log/nginx/{{ matrix_domain }} state=directory owner=root group=root mode=0755
    
    
    - name: Set up nginx
    
      template: src=nginx.d.conf.j2 dest=/etc/nginx/nginx.d/matrix.conf owner=root group=root mode=0640
    
      when: 'matrix_domain is defined'
    
      tags: ['nginx']
    
    - name: Install turnserver.conf
    
      template: src=turnserver.conf.j2 dest=/etc/turnserver/turnserver.conf owner=turnserver group=turnserver mode=0600
    
    - name: Install turnserver cert renewal hook
    
      copy: src=letsencrypt.hook.d dest=/etc/letsencrypt/hook.d/turnserver owner=root group=root mode=0755
    
    
    - name: Install synapse units
    
      copy: src={{ item }} dest=/etc/systemd/system/{{ item }} owner=root group=root mode=0644
      with_items:
        - synapse.service
    
        - synapse-worker@.service
      notify:
    
    - name: Install pantalaimon units
    
      copy: src={{ item }} dest=/etc/systemd/system/{{ item }} owner=root group=root mode=0644
      with_items:
        - pantalaimon.service
      notify:
    
    - name: Install draupnir units
    
      copy: src={{ item }} dest=/etc/systemd/system/{{ item }} owner=root group=root mode=0644
      with_items:
    
    - name: Install matrix-appservice-irc units
    
      copy: src={{ item }} dest=/etc/systemd/system/{{ item }} owner=root group=root mode=0644
      with_items:
    
        - matrix-appservice-irc.service
    
        - Restart matrix-appservice-irc
    
    - name: Install turnserver unit snippet
      copy: src=turnserver.service.d dest=/etc/systemd/system/turnserver.service.d/override.conf owner=root group=root mode=0644
      notify:
        - Restart turnserver
    
    
      service: name={{ item }} enabled=yes
      with_items:
        - synapse.service
        - synapse-worker@appservice.service
    
        - synapse-worker@federation_reader.service
    
        - synapse-worker@federation_sender.service
    
        - synapse-worker@media_repository.service
    
        - matrix-appservice-irc.service
    
    - name: Open firewall holes
    
      ansible.posix.firewalld: port={{ item }} permanent=true state=enabled immediate=yes
    
        - 2410-2411/tcp
        - 2410-2411/udp
        - 2420-2421/tcp
        - 2420-2421/udp
    
      when: configure_firewall
      tags: