matrix.yaml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. ---
  2. kind: Deployment
  3. apiVersion: apps/v1
  4. metadata:
  5. name: matrix
  6. labels:
  7. app: matrix
  8. spec:
  9. replicas: 1
  10. selector:
  11. matchLabels:
  12. app: matrix
  13. template:
  14. metadata:
  15. labels:
  16. app: matrix
  17. spec:
  18. dnsPolicy: ClusterFirst
  19. dnsConfig:
  20. nameservers:
  21. - 8.8.8.8
  22. containers:
  23. - name: matrix
  24. image: ghcr.io/element-hq/synapse
  25. #command: ["/bin/bash", "-c", "--"]
  26. #args: ["while true; do sleep 3; done;"]
  27. env:
  28. - name: SYNAPSE_SERVER_NAME
  29. value: "matrix.dezendorf.net"
  30. - name: SYNAPSE_CONFIG_PATH
  31. value: "/data/homeserver.yaml"
  32. ports:
  33. - name: web
  34. containerPort: 8008
  35. volumeMounts:
  36. - name: "matrix-homeserver-yaml"
  37. mountPath: "/data/homeserver.yaml"
  38. subPath: "homeserver-yaml"
  39. readOnly: no
  40. - name: "matrix-homeserver-yaml"
  41. mountPath: "/homeserver.log"
  42. subPath: "homeserver-log"
  43. readOnly: no
  44. - name: "matrix-homeserver-yaml"
  45. mountPath: "/data/matrix.dezendorf.net.log.config"
  46. subPath: "homeserver-log-config"
  47. readOnly: no
  48. - name: "matrix-homeserver-yaml"
  49. mountPath: "/data/matrix.dezendorf.net.signing.key"
  50. readOnly: no
  51. subPath: "matrix-dezendorf-net-signing-key"
  52. - name: "matrix-data-volume"
  53. mountPath: "/data"
  54. readOnly: no
  55. - name: "matrix-media-volume"
  56. mountPath: "/data/media_store"
  57. - name: matrix-id-service
  58. image: ghcr.io/element-hq/matrix-authentication-service:latest
  59. volumeMounts:
  60. - name: "matrix-auth-volume"
  61. mountPath: "/data"
  62. readOnly: no
  63. - name: "matrix-auth-files"
  64. mountPath: "/config.yaml"
  65. subPath: "config-yaml"
  66. readOnly: no
  67. volumes:
  68. - name: "matrix-media-volume"
  69. persistentVolumeClaim:
  70. claimName: "matrix-media-pvc"
  71. - name: "matrix-data-volume"
  72. persistentVolumeClaim:
  73. claimName: "matrix-data-pvc"
  74. - name: "matrix-auth-volume"
  75. persistentVolumeClaim:
  76. claimName: "matrix-auth-pvc"
  77. - name: "matrix-auth-files"
  78. configMap:
  79. defaultMode: 0777
  80. name: "matrix-auth-files"
  81. - name: "matrix-homeserver-yaml"
  82. configMap:
  83. defaultMode: 0777
  84. name: "matrix-homeserver-yaml"
  85. ---
  86. apiVersion: v1
  87. kind: PersistentVolumeClaim
  88. metadata:
  89. name: matrix-data-pvc
  90. spec:
  91. accessModes:
  92. - ReadWriteOnce
  93. storageClassName: longhorn
  94. resources:
  95. requests:
  96. storage: 50G
  97. ---
  98. apiVersion: v1
  99. kind: PersistentVolumeClaim
  100. metadata:
  101. name: matrix-media-pvc
  102. spec:
  103. accessModes:
  104. - ReadWriteOnce
  105. storageClassName: nfs
  106. resources:
  107. requests:
  108. storage: 100G
  109. ---
  110. apiVersion: v1
  111. kind: PersistentVolumeClaim
  112. metadata:
  113. name: matrix-auth-pvc
  114. spec:
  115. accessModes:
  116. - ReadWriteOnce
  117. storageClassName: longhorn
  118. resources:
  119. requests:
  120. storage: 50G
  121. ---
  122. apiVersion: v1
  123. kind: Service
  124. metadata:
  125. name: matrix
  126. spec:
  127. type: ClusterIP
  128. ports:
  129. - name: web
  130. port: 8008
  131. selector:
  132. app: matrix
  133. ---
  134. apiVersion: v1
  135. kind: Service
  136. metadata:
  137. name: matrix-auth
  138. spec:
  139. type: ClusterIP
  140. ports:
  141. - name: web
  142. port: 8080
  143. selector:
  144. app: matrix
  145. ---
  146. apiVersion: traefik.containo.us/v1alpha1
  147. kind: IngressRoute
  148. metadata:
  149. name: matrix-ingress-route
  150. namespace: default
  151. spec:
  152. entryPoints:
  153. - web
  154. routes:
  155. - match: ((Host(`matrix`)||Host(`matrix.dezendorf.net`)))
  156. kind: Rule
  157. priority: 1
  158. services:
  159. - name: matrix
  160. port: 8008
  161. ---
  162. apiVersion: traefik.containo.us/v1alpha1
  163. kind: IngressRoute
  164. metadata:
  165. name: matrix-websecure-route
  166. namespace: default
  167. spec:
  168. entryPoints:
  169. - websecure
  170. routes:
  171. - match: (Host(`matrix.dezendorf.net`) && PathPrefix(`/_matrix/client/{id:.*}/{method:(login|logout|refresh)}`))
  172. kind: Rule
  173. services:
  174. - name: matrix-auth
  175. port: 8080
  176. - match: Host(`matrix.dezendorf.net`)
  177. kind: Rule
  178. services:
  179. - name: matrix
  180. port: 8008
  181. tls:
  182. certResolver: myresolver
  183. ---
  184. apiVersion: traefik.containo.us/v1alpha1
  185. kind: IngressRoute
  186. metadata:
  187. name: matrix-auth-ingress-route
  188. namespace: default
  189. spec:
  190. entryPoints:
  191. - web
  192. routes:
  193. - match: ((Host(`matrix-auth`)||Host(`matrix-auth.dezendorf.net`)))
  194. kind: Rule
  195. priority: 1
  196. services:
  197. - name: matrix-auth
  198. port: 8080
  199. ---
  200. apiVersion: traefik.containo.us/v1alpha1
  201. kind: IngressRoute
  202. metadata:
  203. name: matrix-auth-websecure-route
  204. namespace: default
  205. spec:
  206. entryPoints:
  207. - websecure
  208. routes:
  209. - match: Host(`matrix-auth.dezendorf.net`)
  210. kind: Rule
  211. services:
  212. - name: matrix-auth
  213. port: 8080
  214. tls:
  215. certResolver: myresolver
  216. ---
  217. apiVersion: v1
  218. kind: ConfigMap
  219. metadata:
  220. name: matrix-homeserver-yaml
  221. namespace: default
  222. data:
  223. homeserver-log: |
  224. matrix-dezendorf-net-signing-key: |
  225. ed25519 a_xHsH bCSbSZVaDAz5pgKweKO3nIgXK8PL5rOhfbWbwkh63kg
  226. homeserver-yaml: |
  227. # Configuration file for Synapse.
  228. #
  229. # This is a YAML file: see [1] for a quick introduction. Note in particular
  230. # that *indentation is important*: all the elements of a list or dictionary
  231. # should have the same indentation.
  232. #
  233. # [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
  234. #
  235. # For more information on how to configure Synapse, including a complete accounting of
  236. # each option, go to docs/usage/configuration/config_documentation.md or
  237. # https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html
  238. server_name: "matrix.dezendorf.net"
  239. pid_file: /data/homeserver.pid
  240. listeners:
  241. - port: 8008
  242. tls: false
  243. type: http
  244. x_forwarded: true
  245. #bind_addresses: ['::1', '127.0.0.1']
  246. resources:
  247. - names: [client, federation]
  248. compress: false
  249. database:
  250. name: psycopg2
  251. args:
  252. user: synapse_user
  253. password: "Bee1701Charming1!"
  254. dbname: synapse
  255. host: postgres-mas
  256. cp_min: 5
  257. cp_max: 10
  258. log_config: "/data/matrix.dezendorf.net.log.config"
  259. media_store_path: /data/media_store
  260. registration_shared_secret: "9.^i#+7YXwrC^bzKMqkenOZb;9ra6jV0zgZMvO:EBQ.CipL47k"
  261. report_stats: false
  262. macaroon_secret_key: ".ughvXa0Or.Xv7o5y550cXnTlv.J8*Mq@JAA^1QXuu2bpR@Lpd"
  263. form_secret: "iESBV0d@Tg;4~:v5KT3-UX.Kva@.cbJZ9SNU:nWKubPo:X^*Y-"
  264. signing_key_path: "/data/matrix.dezendorf.net.signing.key"
  265. enable_registration: false
  266. enable_registration_captcha: false
  267. public_baseurl: "https://matrix.dezendorf.net"
  268. recaptcha_public_key: "6LddQ7EqAAAAACWLD1ZKUBKrLHoFvGWhFiNmrgPh"
  269. recaptcha_private_key: "6LddQ7EqAAAAAOX7Qrn2PL-s2r5Zo4c_aTi4uzkh"
  270. trusted_key_servers:
  271. - server_name: "matrix.org"
  272. #oidc_providers:
  273. # - idp_id: google
  274. # idp_name: Google
  275. # idp_brand: "google" # optional: styling hint for clients
  276. # issuer: "https://accounts.google.com/"
  277. # client_id: "743600892864-394ileehj9l1vfvvip3l3meqb0it6g50.apps.googleusercontent.com"
  278. # client_secret: "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"
  279. # scopes: ["openid", "profile", "email"] # email is optional, read below
  280. # user_mapping_provider:
  281. # config:
  282. # localpart_template: "{{ user.given_name|lower }}"
  283. # display_name_template: "{{ user.name }}"
  284. # email_template: "{{ user.email }}" # needs "email" in scopes above
  285. experimental_features:
  286. msc4108_enabled: true
  287. msc3861:
  288. enabled: true
  289. # Synapse will call `{issuer}/.well-known/openid-configuration` to get the OIDC configuration
  290. issuer: https://matrix-auth.dezendorf.net
  291. # Matches the `client_id` in the auth service config
  292. client_id: 01JNKPPJSBJR4X9DCM2F631H2E
  293. # Matches the `client_auth_method` in the auth service config
  294. client_auth_method: client_secret_basic
  295. # Matches the `client_secret` in the auth service config
  296. client_secret: "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"
  297. # Matches the `matrix.secret` in the auth service config
  298. admin_token: "yvuN4UMz6ZHWWp4WVNxWbBneWSlNLwYy"
  299. introspection_endpoint: "https://matrix-auth.dezendorf.net/oauth2/introspect"
  300. homeserver-log-config: |
  301. version: 1
  302. formatters:
  303. precise:
  304. format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
  305. handlers:
  306. console:
  307. class: logging.StreamHandler
  308. formatter: precise
  309. loggers:
  310. # This is just here so we can leave `loggers` in the config regardless of whether
  311. # we configure other loggers below (avoid empty yaml dict error).
  312. _placeholder:
  313. level: "INFO"
  314. handlers: [console]
  315. synapse.storage.SQL:
  316. # beware: increasing this to DEBUG will make synapse log sensitive
  317. # information such as access tokens.
  318. level: INFO
  319. handlers: [console]
  320. root:
  321. level: INFO
  322. handlers: [console]
  323. disable_existing_loggers: false
  324. ---
  325. apiVersion: v1
  326. kind: ConfigMap
  327. metadata:
  328. name: matrix-auth-files
  329. namespace: default
  330. data:
  331. config-yaml: |
  332. http:
  333. listeners:
  334. - name: web
  335. resources:
  336. - name: discovery
  337. - name: human
  338. - name: oauth
  339. - name: compat
  340. - name: graphql
  341. - name: assets
  342. binds:
  343. - address: '0.0.0.0:8080'
  344. proxy_protocol: false
  345. - name: internal
  346. resources:
  347. - name: health
  348. binds:
  349. - host: localhost
  350. port: 8081
  351. proxy_protocol: false
  352. trusted_proxies:
  353. - 192.168.0.0/16
  354. - 172.16.0.0/12
  355. - 10.0.0.0/10
  356. - 127.0.0.1/8
  357. - fd00::/8
  358. - ::1/128
  359. public_base: https://matrix-auth.dezendorf.net
  360. issuer: https://matrix-auth.dezendorf.net
  361. database:
  362. host: postgres-mas
  363. port: 5432
  364. username: mas_user
  365. password: "Bee1701Charming1!"
  366. database: mas
  367. max_connections: 10
  368. min_connections: 0
  369. connect_timeout: 30
  370. idle_timeout: 600
  371. max_lifetime: 1800
  372. email:
  373. from: '"Authentication Service" <breandan@dezendorf.com>'
  374. reply_to: '"Authentication Service" <breandan@dezendorf.com>'
  375. transport: blackhole
  376. secrets:
  377. encryption: 3c181674eb46ae497285dae790f6db7a4c2e8844b00d8ae643fd135c85032d63
  378. keys:
  379. - kid: Lg9L19ltKs
  380. key: |
  381. -----BEGIN RSA PRIVATE KEY-----
  382. MIIEowIBAAKCAQEA0Hx3fsKShaNEz3JLmeGMoHPK46lOJMUqtAi/4c0I4+Dl/sy+
  383. M0B8+6qUD9R5+KR0Lheohfq0o1HnWtwRv3drh7hkGl1CSfV28qOen9USEzAckxwq
  384. Yak/hMzeQLXnmlKNKjtolBBdGoQC6DfC8wqrvoJ8Qfopy4oPC5096GYaQrPgfji6
  385. 2JARDMoclstK/0ms4VH8E44RkTl+aMu8SFkaPIpKYZZ+tqifYjNQfa43BB02QZVm
  386. Khz6eS/w0f/wOjybP+EBajvsYgfQDSHhNVAS5TkrfJlUnfxF1jEGxsoHc6E0pevW
  387. Fc+EAll2ZHr9MDYLIze8hQLZcGXVzQXRaa9hbQIDAQABAoIBAGsuUdBc/y6szQdI
  388. 3wzxI3apkLiRpZbJtjZv+RWAbv2X9SWU5IM8uAQ5oXyx4zKseP3pM74NMSh1Rtcz
  389. I/ymzCUt6miTYSzcgJYk/7tzsqMirM4EQNWMSRdgqzHhUnvHzMLVX+Iet36WN1hi
  390. slp4Neru8iqJDUuSYkG6SMVdGEsJeEBGnOlX0UANIGDzx+d0xqfyKlqCd3iucqc9
  391. rIl5pKogqHCbww+AY4F60A5fqZRlVOliZybFKzODXmYJbsT2nHXNUKmdpRaw/UAq
  392. X4253k/cZ+PhJ1l9TzYPuGSfLpLIedyfmEP8FuTD0nk+wZuR1bTVOmLYxAc59cPu
  393. gHa6dRECgYEA1mdWmqW3RxnevPY0UQ7M36SmmLpzyyuH//alXQ0VMKzRfOsw1Yvu
  394. tKfguqzyf9Sl/bQQPoadtrRRz2cN2mtZTyUAfnI+umQraXDgo6Garwp/p3NzQbcb
  395. CFHB/1gKwW9XJxdQsDdFsJDL5eav/augwjKwNtRrSgtlH1OZR6Eo6SMCgYEA+O86
  396. psduumOB4FNj8KUblsRtu9EeRZVGLnBS5j5ZSvE2ZbD2fF+NrBqmlGiElUQztUua
  397. XXSovHROiiQpZO7pXXTL2yWXY3/ONS7Ad7fN+klVna9rtcH6TyZn7cdBNaaA99ke
  398. WP5TpNBzGRG8kfbGFhotBJR0X6WxvotiWoNMXC8CgYAWdx+A9so8ff5zyEx1Ddrz
  399. uBnouOi3KimG7X4oQN2uiv0sXKxyQ8ZQUaLfjI2gTVTTP5HQK2TNJxnHZKHz9/mU
  400. rGjf1vKxrxtJYhV3r9A4dR4pGpTCFwCTH5X3Pm9qE1OLegrvW+tGc/WZclGQf/JJ
  401. Ruxl4l4XlRgUbzsJYV6bBwKBgQCILP4tvA1jowmqOJQEUZ3dBQluZAAmWnlw7/s5
  402. fsQEDh4O1RaRhQgQLOgRaXeV3CBZPcls9GNV7F4Gja+jSlqYyEq4UEEXqhOY3kFl
  403. fEQOdc2DHDJU1I9kewMBfS279qC4dKp4TnBdSbac8Snxw0grURhtV/StWgv4y3D7
  404. SLYd+wKBgHXJhL3lu4mFkg1ZXdDnlnGwsN26uIVLO38kgFx4VUVzXMkyNEenj4qi
  405. Ah7Lqh7I0kYcbeU03N+YPCGhRw7J5VCfH2PfpaG/OYBrD5EDqUhXEcqKHF58DKuL
  406. CZWqwhnlyPETPr01Cw+Ew7CHLtWQDsRmP7fOf0jBEGPnT0D/4mLJ
  407. -----END RSA PRIVATE KEY-----
  408. - kid: VlpwvY6SAD
  409. key: |
  410. -----BEGIN EC PRIVATE KEY-----
  411. MHcCAQEEIIZmVwBwGDR+9/tqIcbjt6rTQ/8Bw78N7vkCoh8bsvC7oAoGCCqGSM49
  412. AwEHoUQDQgAE6Cg0wMq2xaXRUQJd5JsDycuJzDsUq/2n+XLnyjEr3eUIxVzSYv+a
  413. BN7y0dHUINthfc0TaTeS5RhXe8GcM2Albw==
  414. -----END EC PRIVATE KEY-----
  415. - kid: W3O3m4ayPx
  416. key: |
  417. -----BEGIN EC PRIVATE KEY-----
  418. MIGkAgEBBDBbjf34M6QuUQ8+u7VouyRXeW4oJn+FjPx8obOYW/8FbJIZkNCgxnKN
  419. wdR+LMulXjKgBwYFK4EEACKhZANiAASKeEoUVrElar/cN2iuUg/8Qf0KgoUnRBWI
  420. Jx1doGFjAzb+HUr5KkPNaGQcbeIPqYPIOSYY27PgPBexBtb/NLjhFaK8w6qUVDOK
  421. CU2Mb8op7dH+4cfe7l0ZBGy+lhY0jOQ=
  422. -----END EC PRIVATE KEY-----
  423. - kid: 3Rhruz5OEl
  424. key: |
  425. -----BEGIN EC PRIVATE KEY-----
  426. MHQCAQEEIN8MzvjgVLEWxi32tKjgY9/bMUYpqdnQ4A6iO6o2ufTnoAcGBSuBBAAK
  427. oUQDQgAEWvxNlx7qxzIyMIyGsltEuXAnnJ4NoYyUQoZzGaAgOAqeuRMg+qvb3tHC
  428. aW9EU5Vc7RkqugaLUF2K2jcFMbxGPw==
  429. -----END EC PRIVATE KEY-----
  430. passwords:
  431. enabled: true
  432. schemes:
  433. - version: 1
  434. algorithm: argon2id
  435. minimum_complexity: 3
  436. matrix:
  437. homeserver: matrix.dezendorf.net
  438. secret: yvuN4UMz6ZHWWp4WVNxWbBneWSlNLwYy
  439. endpoint: https://matrix.dezendorf.net
  440. clients:
  441. - client_id: 01JNKPPJSBJR4X9DCM2F631H2E
  442. client_auth_method: client_secret_basic
  443. client_secret: "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"
  444. upstream_oauth2:
  445. providers:
  446. - id: 01JNKPPJSBJR4X9DCM2F631H2E
  447. human_name: Google
  448. brand_name: "google"
  449. issuer: "https://accounts.google.com"
  450. client_id: "743600892864-giudqeu3spf1h8mp7cblv13ticm1v1pq.apps.googleusercontent.com"
  451. client_secret: "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"
  452. token_endpoint_auth_method: client_secret_post
  453. scope: "openid profile email"
  454. claims_imports:
  455. localpart:
  456. action: ignore
  457. displayname:
  458. action: suggest
  459. template: "{{ user.name }}"
  460. email:
  461. action: suggest
  462. template: "{{ user.email }}"
  463. account_name:
  464. template: "{{ user.email }}"