Matrix Docker Ansible eploy
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

310 righe
16 KiB

  1. #jinja2: lstrip_blocks: "True"
  2. {% set room_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'room_worker') | list %}
  3. {% set sync_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'sync_worker') | list %}
  4. {% set client_reader_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'client_reader') | list %}
  5. {% set federation_reader_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'federation_reader') | list %}
  6. {% set generic_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'generic_worker') | list %}
  7. {% set stream_writer_typing_stream_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'stream_writer') | selectattr('stream_writer_stream', 'equalto', 'typing') | list %}
  8. {% set stream_writer_to_device_stream_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'stream_writer') | selectattr('stream_writer_stream', 'equalto', 'to_device') | list %}
  9. {% set stream_writer_account_data_stream_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'stream_writer') | selectattr('stream_writer_stream', 'equalto', 'account_data') | list %}
  10. {% set stream_writer_receipts_stream_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'stream_writer') | selectattr('stream_writer_stream', 'equalto', 'receipts') | list %}
  11. {% set stream_writer_presence_stream_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'stream_writer') | selectattr('stream_writer_stream', 'equalto', 'presence') | list %}
  12. {% set media_repository_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'media_repository') | list %}
  13. {% set user_dir_workers = matrix_synapse_reverse_proxy_companion_synapse_workers_list | selectattr('type', 'equalto', 'user_dir') | list %}
  14. {% macro render_worker_upstream(name, workers, load_balance) %}
  15. {% if workers | length > 0 %}
  16. upstream {{ name }} {
  17. {{ load_balance }}
  18. keepalive {{ ((workers | length) * 2) | string }};
  19. {% for worker in workers %}
  20. server "{{ worker.name }}:{{ worker.port }}";
  21. {% endfor %}
  22. }
  23. {% endif %}
  24. {% endmacro %}
  25. {% macro render_locations_to_upstream(locations, upstream_name) %}
  26. {% for location in locations %}
  27. location ~ {{ location }} {
  28. proxy_pass http://{{ upstream_name }}$request_uri;
  29. proxy_set_header Host $host;
  30. proxy_http_version 1.1;
  31. proxy_set_header Connection "";
  32. }
  33. {% endfor %}
  34. {% endmacro %}
  35. {% if matrix_synapse_reverse_proxy_companion_synapse_workers_enabled %}
  36. # Maps from https://tcpipuk.github.io/synapse/deployment/nginx.html#mapsconf
  37. # Client username from access token
  38. map $arg_access_token $accesstoken_from_urlparam {
  39. default $arg_access_token;
  40. "~syt_(?<username>.*?)_.*" $username;
  41. }
  42. # Client username from MXID
  43. map $http_authorization $mxid_localpart {
  44. default $http_authorization;
  45. "~Bearer syt_(?<username>.*?)_.*" $username;
  46. "" $accesstoken_from_urlparam;
  47. }
  48. # Whether to upgrade HTTP connection
  49. map $http_upgrade $connection_upgrade {
  50. default upgrade;
  51. '' close;
  52. }
  53. #Extract room name from URI
  54. map $request_uri $room_name {
  55. ~^/_matrix/(client|federation)/.*?(?:%21|!)(?<room>[A-Za-z0-9._=\-\/]+)(?::|%3A)[A-Za-z0-9._=\-\/]+ $room;
  56. }
  57. # End maps
  58. {% if matrix_synapse_reverse_proxy_companion_synapse_cache_enabled %}
  59. proxy_cache_path {{ matrix_synapse_reverse_proxy_companion_synapse_cache_path }} levels=1:2 keys_zone={{ matrix_synapse_reverse_proxy_companion_synapse_cache_keys_zone_name }}:{{ matrix_synapse_reverse_proxy_companion_synapse_cache_keys_zone_size }} inactive={{ matrix_synapse_reverse_proxy_companion_synapse_cache_inactive_time }} max_size={{ matrix_synapse_reverse_proxy_companion_synapse_cache_max_size_mb }}m;
  60. {% endif %}
  61. # Round Robin "upstream" pools for workers
  62. {{ render_worker_upstream('room_workers_upstream', room_workers, 'hash $room_name consistent;') }}
  63. {{ render_worker_upstream('sync_workers_upstream', sync_workers, 'hash $mxid_localpart consistent;') }}
  64. {{ render_worker_upstream('client_reader_workers_upstream', client_reader_workers, 'least_conn;') }}
  65. {{ render_worker_upstream('federation_reader_workers_upstream', federation_reader_workers, 'hash $http_x_forwarded_for;') }}
  66. {{ render_worker_upstream('generic_workers_upstream', generic_workers, 'hash $http_x_forwarded_for;') }}
  67. {{ render_worker_upstream('stream_writer_typing_stream_workers_upstream', stream_writer_typing_stream_workers, '') }}
  68. {{ render_worker_upstream('stream_writer_to_device_stream_workers_upstream', stream_writer_to_device_stream_workers, '') }}
  69. {{ render_worker_upstream('stream_writer_account_data_stream_workers_upstream', stream_writer_account_data_stream_workers, '') }}
  70. {{ render_worker_upstream('stream_writer_receipts_stream_workers_upstream', stream_writer_receipts_stream_workers, '') }}
  71. {{ render_worker_upstream('stream_writer_presence_stream_workers_upstream', stream_writer_presence_stream_workers, '') }}
  72. {{ render_worker_upstream('media_repository_workers_upstream', media_repository_workers, 'least_conn;') }}
  73. {{ render_worker_upstream('user_dir_workers_upstream', user_dir_workers, '') }}
  74. {% endif %}
  75. server {
  76. listen 8008;
  77. server_name {{ matrix_synapse_reverse_proxy_companion_hostname }};
  78. server_tokens off;
  79. root /dev/null;
  80. gzip on;
  81. gzip_types text/plain application/json;
  82. {% if matrix_synapse_reverse_proxy_companion_synapse_workers_enabled %}
  83. # Client-server overrides -- These locations must go to the main Synapse process
  84. location ~ {{ matrix_synapse_reverse_proxy_companion_client_server_main_override_locations_regex }} {
  85. {# FIXME: This block was copied from the main Synapse fallback below. It would be better to have it in one place and avoid duplication. #}
  86. {# Use the embedded DNS resolver in Docker containers to discover the service #}
  87. resolver {{ matrix_synapse_reverse_proxy_companion_http_level_resolver }} valid=5s;
  88. set $backend "{{ matrix_synapse_reverse_proxy_companion_client_api_addr }}";
  89. proxy_pass http://$backend;
  90. proxy_set_header Host $host;
  91. client_body_buffer_size 25M;
  92. client_max_body_size {{ matrix_synapse_reverse_proxy_companion_client_api_client_max_body_size_mb }}M;
  93. proxy_max_temp_file_size 0;
  94. }
  95. # Client-server SSO overrides -- These locations must go to the main Synapse process
  96. location ~ {{ matrix_synapse_reverse_proxy_companion_client_server_sso_override_locations_regex }} {
  97. {# FIXME: This block was copied from the main Synapse fallback below. It would be better to have it in one place and avoid duplication. #}
  98. {# Use the embedded DNS resolver in Docker containers to discover the service #}
  99. resolver {{ matrix_synapse_reverse_proxy_companion_http_level_resolver }} valid=5s;
  100. set $backend "{{ matrix_synapse_reverse_proxy_companion_client_api_addr }}";
  101. proxy_pass http://$backend;
  102. proxy_set_header Host $host;
  103. client_body_buffer_size 25M;
  104. client_max_body_size {{ matrix_synapse_reverse_proxy_companion_client_api_client_max_body_size_mb }}M;
  105. proxy_max_temp_file_size 0;
  106. }
  107. {# Workers redirects BEGIN #}
  108. {% if generic_workers | length > 0 %}
  109. # https://matrix-org.github.io/synapse/latest/workers.html#synapseappgeneric_worker
  110. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_generic_worker_client_server_locations, 'generic_workers_upstream') }}
  111. {% endif %}
  112. {% if stream_writer_typing_stream_workers | length > 0 %}
  113. # https://matrix-org.github.io/synapse/latest/workers.html#the-typing-stream
  114. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_stream_writer_typing_stream_worker_client_server_locations, 'stream_writer_typing_stream_workers_upstream') }}
  115. {% endif %}
  116. {% if stream_writer_to_device_stream_workers | length > 0 %}
  117. # https://matrix-org.github.io/synapse/latest/workers.html#the-to_device-stream
  118. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_stream_writer_to_device_stream_worker_client_server_locations, 'stream_writer_to_device_stream_workers_upstream') }}
  119. {% endif %}
  120. {% if stream_writer_account_data_stream_workers | length > 0 %}
  121. # https://matrix-org.github.io/synapse/latest/workers.html#the-account_data-stream
  122. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_stream_writer_account_data_stream_worker_client_server_locations, 'stream_writer_account_data_stream_workers_upstream') }}
  123. {% endif %}
  124. {% if stream_writer_receipts_stream_workers | length > 0 %}
  125. # https://matrix-org.github.io/synapse/latest/workers.html#the-receipts-stream
  126. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_stream_writer_receipts_stream_worker_client_server_locations, 'stream_writer_receipts_stream_workers_upstream') }}
  127. {% endif %}
  128. {% if stream_writer_presence_stream_workers | length > 0 %}
  129. # https://matrix-org.github.io/synapse/latest/workers.html#the-presence-stream
  130. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_stream_writer_presence_stream_worker_client_server_locations, 'stream_writer_presence_stream_workers_upstream') }}
  131. {% endif %}
  132. {% if room_workers | length > 0 %}
  133. # room workers
  134. # https://tcpipuk.github.io/synapse/deployment/workers.html
  135. # https://tcpipuk.github.io/synapse/deployment/nginx.html#locationsconf
  136. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_room_worker_client_server_locations, 'room_workers_upstream') }}
  137. {% endif %}
  138. {% if sync_workers | length > 0 %}
  139. # sync workers
  140. # https://tcpipuk.github.io/synapse/deployment/workers.html
  141. # https://tcpipuk.github.io/synapse/deployment/nginx.html#locationsconf
  142. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_sync_worker_client_server_locations, 'sync_workers_upstream') }}
  143. {% endif %}
  144. {% if client_reader_workers | length > 0 %}
  145. # client_reader workers
  146. # https://tcpipuk.github.io/synapse/deployment/workers.html
  147. # https://tcpipuk.github.io/synapse/deployment/nginx.html#locationsconf
  148. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_client_reader_client_server_locations, 'client_reader_workers_upstream') }}
  149. {% endif %}
  150. {% if media_repository_workers | length > 0 %}
  151. # https://matrix-org.github.io/synapse/latest/workers.html#synapseappmedia_repository
  152. {% for location in matrix_synapse_reverse_proxy_companion_synapse_media_repository_locations %}
  153. location ~ {{ location }} {
  154. proxy_pass http://media_repository_workers_upstream$request_uri;
  155. proxy_set_header Host $host;
  156. client_body_buffer_size 25M;
  157. client_max_body_size {{ matrix_synapse_reverse_proxy_companion_client_api_client_max_body_size_mb }}M;
  158. proxy_max_temp_file_size 0;
  159. {% if matrix_synapse_reverse_proxy_companion_synapse_cache_enabled %}
  160. proxy_buffering on;
  161. proxy_cache {{ matrix_synapse_reverse_proxy_companion_synapse_cache_keys_zone_name }};
  162. proxy_cache_valid any {{ matrix_synapse_reverse_proxy_companion_synapse_cache_proxy_cache_valid_time }};
  163. proxy_force_ranges on;
  164. add_header X-Cache-Status $upstream_cache_status;
  165. {% endif %}
  166. }
  167. {% endfor %}
  168. {% endif %}
  169. {% if user_dir_workers | length > 0 %}
  170. # https://matrix-org.github.io/synapse/latest/workers.html#updating-the-user-directory
  171. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_user_dir_locations, 'user_dir_workers_upstream') }}
  172. {% endif %}
  173. {# Workers redirects END #}
  174. {% endif %}
  175. {% for configuration_block in matrix_synapse_reverse_proxy_companion_synapse_client_api_additional_server_configuration_blocks %}
  176. {{- configuration_block }}
  177. {% endfor %}
  178. {# Everything else just goes to the API server ##}
  179. location / {
  180. {# Use the embedded DNS resolver in Docker containers to discover the service #}
  181. resolver {{ matrix_synapse_reverse_proxy_companion_http_level_resolver }} valid=5s;
  182. set $backend "{{ matrix_synapse_reverse_proxy_companion_client_api_addr }}";
  183. proxy_pass http://$backend;
  184. proxy_set_header Host $host;
  185. client_body_buffer_size 25M;
  186. client_max_body_size {{ matrix_synapse_reverse_proxy_companion_client_api_client_max_body_size_mb }}M;
  187. proxy_max_temp_file_size 0;
  188. }
  189. }
  190. {% if matrix_synapse_reverse_proxy_companion_federation_api_enabled %}
  191. server {
  192. listen 8048;
  193. server_name {{ matrix_synapse_reverse_proxy_companion_hostname }};
  194. server_tokens off;
  195. root /dev/null;
  196. gzip on;
  197. gzip_types text/plain application/json;
  198. {% if matrix_synapse_reverse_proxy_companion_synapse_workers_enabled %}
  199. # Federation overrides -- These locations must go to the main Synapse process
  200. location ~ {{ matrix_synapse_reverse_proxy_companion_federation_override_locations_regex }} {
  201. {# FIXME: This block was copied from the fallback location below. It would be better to have it in one place and avoid duplication. #}
  202. {# Use the embedded DNS resolver in Docker containers to discover the service #}
  203. resolver {{ matrix_synapse_reverse_proxy_companion_http_level_resolver }} valid=5s;
  204. set $backend "{{ matrix_synapse_reverse_proxy_companion_federation_api_addr }}";
  205. proxy_pass http://$backend;
  206. proxy_set_header Host $host;
  207. client_body_buffer_size 25M;
  208. client_max_body_size {{ matrix_synapse_reverse_proxy_companion_federation_api_client_max_body_size_mb }}M;
  209. proxy_max_temp_file_size 0;
  210. }
  211. {% if room_workers | length > 0 %}
  212. # https://tcpipuk.github.io/synapse/deployment/workers.html
  213. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_room_worker_federation_locations, 'room_workers_upstream') }}
  214. {% endif %}
  215. {% if federation_reader_workers | length > 0 %}
  216. # https://tcpipuk.github.io/synapse/deployment/workers.html
  217. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_federation_reader_federation_locations, 'federation_reader_workers_upstream') }}
  218. {% endif %}
  219. {% if generic_workers | length > 0 %}
  220. # https://matrix-org.github.io/synapse/latest/workers.html#synapseappgeneric_worker
  221. {{ render_locations_to_upstream(matrix_synapse_reverse_proxy_companion_synapse_generic_worker_federation_locations, 'generic_workers_upstream') }}
  222. {% endif %}
  223. {% if media_repository_workers | length > 0 %}
  224. # https://matrix-org.github.io/synapse/latest/workers.html#synapseappmedia_repository
  225. {% for location in matrix_synapse_reverse_proxy_companion_synapse_media_repository_locations %}
  226. location ~ {{ location }} {
  227. proxy_pass http://media_repository_workers_upstream$request_uri;
  228. proxy_set_header Host $host;
  229. client_body_buffer_size 25M;
  230. client_max_body_size {{ matrix_synapse_reverse_proxy_companion_federation_api_client_max_body_size_mb }}M;
  231. proxy_max_temp_file_size 0;
  232. {% if matrix_synapse_reverse_proxy_companion_synapse_cache_enabled %}
  233. proxy_buffering on;
  234. proxy_cache {{ matrix_synapse_reverse_proxy_companion_synapse_cache_keys_zone_name }};
  235. proxy_cache_valid any {{ matrix_synapse_reverse_proxy_companion_synapse_cache_proxy_cache_valid_time }};
  236. proxy_force_ranges on;
  237. add_header X-Cache-Status $upstream_cache_status;
  238. {% endif %}
  239. }
  240. {% endfor %}
  241. {% endif %}
  242. {% endif %}
  243. {% for configuration_block in matrix_synapse_reverse_proxy_companion_synapse_federation_api_additional_server_configuration_blocks %}
  244. {{- configuration_block }}
  245. {% endfor %}
  246. location / {
  247. {# Use the embedded DNS resolver in Docker containers to discover the service #}
  248. resolver {{ matrix_synapse_reverse_proxy_companion_http_level_resolver }} valid=5s;
  249. set $backend "{{ matrix_synapse_reverse_proxy_companion_federation_api_addr }}";
  250. proxy_pass http://$backend;
  251. proxy_set_header Host $host;
  252. client_body_buffer_size 25M;
  253. client_max_body_size {{ matrix_synapse_reverse_proxy_companion_federation_api_client_max_body_size_mb }}M;
  254. proxy_max_temp_file_size 0;
  255. }
  256. }
  257. {% endif %}