matrix.yaml 15 KB

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