Matrix Docker Ansible eploy
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

216 lines
7.6 KiB

  1. ---
  2. # roles/custom/matrix-element-call/tasks/install.yml
  3. # Ensure Required Directories Exist
  4. - name: Ensure matrix-element-call paths exist
  5. ansible.builtin.file:
  6. path: "{{ item.path }}"
  7. state: directory
  8. mode: 0750
  9. owner: "{{ matrix_user_username }}"
  10. group: "{{ matrix_user_groupname }}"
  11. loop:
  12. - path: "{{ matrix_element_call_base_path }}"
  13. - path: "{{ matrix_element_call_base_path }}/data"
  14. - path: "{{ matrix_element_call_base_path }}/config"
  15. - path: "{{ matrix_element_call_base_path }}/backend" # For LiveKit and Redis config
  16. - path: "{{ matrix_base_data_path }}/static-files/public/.well-known/element" # Directory for element.json
  17. # Ensure Configuration Files are in Place
  18. - name: Ensure Element Call config.json is in place
  19. ansible.builtin.template:
  20. src: "{{ role_path }}/templates/config.json.j2"
  21. dest: "{{ matrix_element_call_base_path }}/config/config.json"
  22. mode: 0640
  23. owner: "{{ matrix_user_username }}"
  24. group: "{{ matrix_user_groupname }}"
  25. - name: Ensure LiveKit livekit.yaml is in place
  26. ansible.builtin.template:
  27. src: "{{ role_path }}/templates/livekit.yaml.j2"
  28. dest: "{{ matrix_element_call_base_path }}/backend/livekit.yaml"
  29. mode: 0640
  30. owner: "{{ matrix_user_username }}"
  31. group: "{{ matrix_user_groupname }}"
  32. - name: Ensure Redis redis.conf is in place
  33. ansible.builtin.template:
  34. src: "{{ role_path }}/templates/redis.conf.j2"
  35. dest: "{{ matrix_element_call_base_path }}/backend/redis.conf"
  36. mode: 0640
  37. owner: "{{ matrix_user_username }}"
  38. group: "{{ matrix_user_groupname }}"
  39. - name: Ensure matrix-element-call environment file is in place
  40. ansible.builtin.template:
  41. src: "{{ role_path }}/templates/env.j2"
  42. dest: "{{ matrix_element_call_base_path }}/config/env"
  43. mode: 0640
  44. owner: "{{ matrix_user_username }}"
  45. group: "{{ matrix_user_groupname }}"
  46. - name: Ensure matrix-element-call Docker labels file is in place
  47. ansible.builtin.template:
  48. src: "{{ role_path }}/templates/labels.j2"
  49. dest: "{{ matrix_element_call_base_path }}/config/element-call-labels"
  50. mode: 0640
  51. owner: "{{ matrix_user_username }}"
  52. group: "{{ matrix_user_groupname }}"
  53. - name: Ensure LiveKit labels file is in place
  54. ansible.builtin.template:
  55. src: "{{ role_path }}/templates/livekit-labels.j2"
  56. dest: "{{ matrix_element_call_base_path }}/config/livekit-labels"
  57. mode: 0640
  58. owner: "{{ matrix_user_username }}"
  59. group: "{{ matrix_user_groupname }}"
  60. - name: Ensure JWT Service labels file is in place
  61. ansible.builtin.template:
  62. src: "{{ role_path }}/templates/jwt-service-labels.j2"
  63. dest: "{{ matrix_element_call_base_path }}/config/jwt-service-labels"
  64. mode: 0640
  65. owner: "{{ matrix_user_username }}"
  66. group: "{{ matrix_user_groupname }}"
  67. # Ensure Docker Images are Pulled
  68. - name: Ensure matrix-element-call Docker image is pulled
  69. community.docker.docker_image:
  70. name: "{{ matrix_element_call_container_image }}"
  71. source: pull
  72. force_source: "{{ matrix_element_call_container_image_force_pull }}"
  73. register: element_call_image_result
  74. retries: "{{ devture_playbook_help_container_retries_count }}"
  75. delay: "{{ devture_playbook_help_container_retries_delay }}"
  76. until: element_call_image_result is not failed
  77. - name: Ensure jwt-service Docker image is pulled
  78. community.docker.docker_image:
  79. name: "{{ matrix_jwt_service_image }}"
  80. source: pull
  81. register: jwt_image_result
  82. retries: 3
  83. delay: 10
  84. until: jwt_image_result is not failed
  85. - name: Ensure livekit Docker image is pulled
  86. community.docker.docker_image:
  87. name: "{{ matrix_livekit_image }}"
  88. source: pull
  89. register: livekit_image_result
  90. retries: 3
  91. delay: 10
  92. until: livekit_image_result is not failed
  93. - name: Ensure redis Docker image is pulled
  94. community.docker.docker_image:
  95. name: "{{ redis_image }}"
  96. source: pull
  97. register: redis_image_result
  98. retries: 3
  99. delay: 10
  100. until: redis_image_result is not failed
  101. # Systemd Services for Element Call, JWT Service, LiveKit, and Redis
  102. - name: Ensure matrix-element-call systemd service is installed
  103. ansible.builtin.template:
  104. src: "{{ role_path }}/templates/systemd/matrix-element-call.service.j2"
  105. dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-element-call.service"
  106. mode: 0644
  107. - name: Ensure jwt-service systemd service is installed
  108. ansible.builtin.template:
  109. src: "{{ role_path }}/templates/systemd/matrix-jwt-service.service.j2"
  110. dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-jwt-service.service"
  111. mode: 0644
  112. - name: Ensure livekit systemd service is installed
  113. ansible.builtin.template:
  114. src: "{{ role_path }}/templates/systemd/matrix-livekit.service.j2"
  115. dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-livekit.service"
  116. mode: 0644
  117. - name: Ensure redis systemd service is installed
  118. ansible.builtin.template:
  119. src: "{{ role_path }}/templates/systemd/matrix-redis.service.j2"
  120. dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-redis.service"
  121. mode: 0644
  122. # Update homeserver.yaml for Element Call
  123. - name: Add listeners section for Element Call to homeserver.yaml
  124. ansible.builtin.blockinfile:
  125. path: "{{ matrix_homeserver_config_path }}"
  126. block: |
  127. listeners:
  128. - port: 8008
  129. tls: false
  130. type: http
  131. x_forwarded: true
  132. resources:
  133. - names: [client, federation, openid]
  134. compress: false
  135. marker: "# ANSIBLE MANAGED BLOCK - Element Call listeners"
  136. mode: '0644'
  137. owner: "{{ matrix_user_username }}"
  138. group: "{{ matrix_user_groupname }}"
  139. when: matrix_element_call_enabled | bool
  140. - name: Ensure serve_server_wellknown is enabled in homeserver.yaml
  141. ansible.builtin.lineinfile:
  142. path: "{{ matrix_homeserver_config_path }}"
  143. line: "serve_server_wellknown: true"
  144. insertafter: EOF
  145. state: present
  146. mode: '0644'
  147. owner: "{{ matrix_user_username }}"
  148. group: "{{ matrix_user_groupname }}"
  149. when: matrix_element_call_enabled | bool
  150. # Update the well-known client file for Element Call (adding RTC FOCI)
  151. - name: Update the existing well-known client file for Element Call (RTC FOCI)
  152. ansible.builtin.blockinfile:
  153. path: "{{ matrix_base_data_path }}/static-files/public/.well-known/matrix/client"
  154. block: |
  155. "org.matrix.msc4143.rtc_foci": [
  156. {
  157. "type": "livekit",
  158. "livekit_service_url": "{{ matrix_element_call_jwt_service_url }}"
  159. }
  160. ]
  161. marker: "# ANSIBLE MANAGED BLOCK - Element Call RTC FOCI"
  162. mode: '0644'
  163. owner: "{{ matrix_user_username }}"
  164. group: "{{ matrix_user_groupname }}"
  165. # Create .well-known/element/element.json for Element Call
  166. - name: Create the well-known element.json file
  167. ansible.builtin.template:
  168. src: "{{ role_path }}/templates/well_known_element.json.j2"
  169. dest: "{{ matrix_base_data_path }}/static-files/public/.well-known/element/element.json"
  170. mode: '0644'
  171. owner: "{{ matrix_user_username }}"
  172. group: "{{ matrix_user_groupname }}"
  173. # Update Element Web config.json with Element Call settings
  174. - name: Update Element Web config.json
  175. ansible.builtin.blockinfile:
  176. path: "{{ element_web_config_path }}"
  177. block: |
  178. "features": {
  179. "feature_video_rooms": true,
  180. "feature_new_room_decoration_ui": true,
  181. "feature_group_calls": true,
  182. "feature_element_call_video_rooms": true
  183. },
  184. "element_call": {
  185. "url": "https://{{ matrix_element_call_domain }}",
  186. "participant_limit": 8,
  187. "brand": "Element Call",
  188. "use_exclusively": true
  189. }
  190. marker: "# ANSIBLE MANAGED BLOCK - Element Call settings"
  191. mode: '0644'
  192. owner: "{{ matrix_user_username }}"
  193. group: "{{ matrix_user_groupname }}"