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.
 
 

200 regels
7.0 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/labels"
  50. mode: 0640
  51. owner: "{{ matrix_user_username }}"
  52. group: "{{ matrix_user_groupname }}"
  53. # Ensure Docker Images are Pulled
  54. - name: Ensure matrix-element-call Docker image is pulled
  55. community.docker.docker_image:
  56. name: "{{ matrix_element_call_container_image }}"
  57. source: pull
  58. force_source: "{{ matrix_element_call_container_image_force_pull }}"
  59. register: element_call_image_result
  60. retries: "{{ devture_playbook_help_container_retries_count }}"
  61. delay: "{{ devture_playbook_help_container_retries_delay }}"
  62. until: element_call_image_result is not failed
  63. - name: Ensure jwt-service Docker image is pulled
  64. community.docker.docker_image:
  65. name: "{{ matrix_jwt_service_image }}"
  66. source: pull
  67. register: jwt_image_result
  68. retries: 3
  69. delay: 10
  70. until: jwt_image_result is not failed
  71. - name: Ensure livekit Docker image is pulled
  72. community.docker.docker_image:
  73. name: "{{ matrix_livekit_image }}"
  74. source: pull
  75. register: livekit_image_result
  76. retries: 3
  77. delay: 10
  78. until: livekit_image_result is not failed
  79. - name: Ensure redis Docker image is pulled
  80. community.docker.docker_image:
  81. name: "{{ matrix_redis_image }}"
  82. source: pull
  83. register: redis_image_result
  84. retries: 3
  85. delay: 10
  86. until: redis_image_result is not failed
  87. # Systemd Services for Element Call, JWT Service, LiveKit, and Redis
  88. - name: Ensure matrix-element-call systemd service is installed
  89. ansible.builtin.template:
  90. src: "{{ role_path }}/templates/systemd/matrix-element-call.service.j2"
  91. dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-element-call.service"
  92. mode: 0644
  93. - name: Ensure jwt-service systemd service is installed
  94. ansible.builtin.template:
  95. src: "{{ role_path }}/templates/systemd/matrix-jwt-service.service.j2"
  96. dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-jwt-service.service"
  97. mode: 0644
  98. - name: Ensure livekit systemd service is installed
  99. ansible.builtin.template:
  100. src: "{{ role_path }}/templates/systemd/matrix-livekit.service.j2"
  101. dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-livekit.service"
  102. mode: 0644
  103. - name: Ensure redis systemd service is installed
  104. ansible.builtin.template:
  105. src: "{{ role_path }}/templates/systemd/matrix-redis.service.j2"
  106. dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-redis.service"
  107. mode: 0644
  108. # Update homeserver.yaml for Element Call
  109. - name: Add listeners section for Element Call to homeserver.yaml
  110. ansible.builtin.blockinfile:
  111. path: "{{ matrix_homeserver_config_path }}"
  112. block: |
  113. listeners:
  114. - port: 8008
  115. tls: false
  116. type: http
  117. x_forwarded: true
  118. resources:
  119. - names: [client, federation, openid]
  120. compress: false
  121. marker: "# ANSIBLE MANAGED BLOCK - Element Call listeners"
  122. mode: '0644'
  123. owner: "{{ matrix_user_username }}"
  124. group: "{{ matrix_user_groupname }}"
  125. when: matrix_element_call_enabled | bool
  126. - name: Ensure serve_server_wellknown is enabled in homeserver.yaml
  127. ansible.builtin.lineinfile:
  128. path: "{{ matrix_homeserver_config_path }}"
  129. line: "serve_server_wellknown: true"
  130. insertafter: EOF
  131. state: present
  132. mode: '0644'
  133. owner: "{{ matrix_user_username }}"
  134. group: "{{ matrix_user_groupname }}"
  135. when: matrix_element_call_enabled | bool
  136. # Update the well-known client file for Element Call (adding RTC FOCI)
  137. - name: Update the existing well-known client file for Element Call (RTC FOCI)
  138. ansible.builtin.blockinfile:
  139. path: "{{ matrix_base_data_path }}/static-files/public/.well-known/matrix/client"
  140. block: |
  141. "org.matrix.msc4143.rtc_foci": [
  142. {
  143. "type": "livekit",
  144. "livekit_service_url": "{{ matrix_element_call_jwt_service_url }}"
  145. }
  146. ]
  147. marker: "# ANSIBLE MANAGED BLOCK - Element Call RTC FOCI"
  148. mode: '0644'
  149. owner: "{{ matrix_user_username }}"
  150. group: "{{ matrix_user_groupname }}"
  151. # Create .well-known/element/element.json for Element Call
  152. - name: Create the well-known element.json file
  153. ansible.builtin.template:
  154. src: "{{ role_path }}/templates/well_known_element.json.j2"
  155. dest: "{{ matrix_base_data_path }}/static-files/public/.well-known/element/element.json"
  156. mode: '0644'
  157. owner: "{{ matrix_user_username }}"
  158. group: "{{ matrix_user_groupname }}"
  159. # Update Element Web config.json with Element Call settings
  160. - name: Update Element Web config.json
  161. ansible.builtin.blockinfile:
  162. path: "{{ element_web_config_path }}"
  163. block: |
  164. "features": {
  165. "feature_video_rooms": true,
  166. "feature_new_room_decoration_ui": true,
  167. "feature_group_calls": true,
  168. "feature_element_call_video_rooms": true
  169. },
  170. "element_call": {
  171. "url": "https://{{ matrix_element_call_domain }}",
  172. "participant_limit": 8,
  173. "brand": "Element Call",
  174. "use_exclusively": true
  175. }
  176. marker: "# ANSIBLE MANAGED BLOCK - Element Call settings"
  177. mode: '0644'
  178. owner: "{{ matrix_user_username }}"
  179. group: "{{ matrix_user_groupname }}"