cluster

Infrastructure files for Nordgedanken and Midnightthoughts.
git clone git://archive.git.mtrnord.blog/MTRNord/cluster.git
Log | Files | Refs | README

commit 769b9328b7cd023e209df989b2e73d794118a920
parent 74feac965cc97a08ae7a35a0e2bac3d161b373bc
Author: MTRNord <MTRNord@users.noreply.github.com>
Date:   Wed,  1 Oct 2025 20:13:47 +0200

Meow

Diffstat:
Mapps/talos_cluster/mailserver/kustomization.yaml | 19+++++++++++++------
Mapps/talos_cluster/mailserver/mailman-secrets.yaml | 76++++++++++++++++++++++++++++++++++++++--------------------------------------
Aapps/talos_cluster/mailserver/mailman-uwsgi.ini | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mapps/talos_cluster/mailserver/mailman.yaml | 474+++++++++++++++++++++++++++++++++++++++++++------------------------------------
4 files changed, 374 insertions(+), 259 deletions(-)

diff --git a/apps/talos_cluster/mailserver/kustomization.yaml b/apps/talos_cluster/mailserver/kustomization.yaml @@ -14,14 +14,21 @@ configMapGenerator: - name: mta-sts-content namespace: mailserver files: - - mta-sts.txt=mta-sts.txt + - mta-sts.txt=mta-sts.txt options: - labels: - app: mta-sts-server + labels: + app: mta-sts-server - name: mailman-nginx namespace: mailserver files: - - nginx.conf=mailman-nginx.conf + - nginx.conf=mailman-nginx.conf options: - labels: - app: mailman + labels: + app: mailman + - name: mailman-uwsgi + namespace: mailserver + files: + - uwsgi.ini=mailman-uwsgi.ini + options: + labels: + app: mailman diff --git a/apps/talos_cluster/mailserver/mailman-secrets.yaml b/apps/talos_cluster/mailserver/mailman-secrets.yaml @@ -5,11 +5,11 @@ metadata: namespace: mailserver type: Opaque stringData: - apikey: ENC[AES256_GCM,data:6hcmXgaze9UPlpL4a60VNK+ROz6JYHNoq+N5OkAnhotXIW0zIy5xk5SFcKzKBwwvr9ZhLBkH5yF7+zvnvpEFHA==,iv:kERRJIKjETOTH0HbqKEFk65nIC1hHcgakVbCW+b+Cg4=,tag:gpcdwGFvtDbowG4eF2BHjA==,type:str] - restpassword: ENC[AES256_GCM,data:CQrSfuHKHWgpeYc6g1j8DSXqBfzsGBj+eXUx+T07PDU7/mA+UUP+iYnom+98VZ2/cmJGKs03RHjiQEf14E3q5w==,iv:OE7UKd3T6rqBWNTnalgjuXX9sGxqR1E82o6GKQrUljo=,tag:8HCCeAsqm/fpxwarFP7bZQ==,type:str] - websecretkey: ENC[AES256_GCM,data:13MrKIW68a7aFutqq+KhKWH4hfSea3UPGRjXAus8nfsDpuB+UIx4AGulVVQfumyT7QcaSKPvYSK8Kwbope3ySA==,iv:MSD/tyY7WeaENRHjAzMGj1McJiS/CxJx+bqyTpPbBo4=,tag:4RGHwpev0Mmjj9iSOIiELw==,type:str] - smtp_user: ENC[AES256_GCM,data:OJbPxcgMwfaJaBeRxAl0BMkHrwsoWZzuP7tJN5rC,iv:7vPcAx3lWfUS2qqHhg7CNcM6kMK7JRXWy4R5D2pT3lo=,tag:ds9MEA5Ad8ex+bHHAn/qzA==,type:str] - smtp_password: ENC[AES256_GCM,data:V7jt5nrYaGuZ8Xy5f0s4pkimVuKPMwIdDx4kOfw72xY3DkFQNwkopLl2fvo6kb5pAviiI5ilHEcAED1KSez6IQ==,iv:bDw3yRoT8UeoW9at2JOnT3WaMklj1FAbqwbyM7TP8pA=,tag:al6hGowKvjPEudpsZy0pZA==,type:str] + apikey: ENC[AES256_GCM,data:GpZbYxp9NlsDe7J5idMG+HAlVUGvEDKHgX471tvylQHpQoPAPWG0AQ10/Zh6psYQmEP9NzqUcZX8FqhGdsQTsQ==,iv:c3YQxsErV5kYQ/N1/P5NkY7bUfD5Q6AWdi8nHXHJ9EM=,tag:4TND5VnKj2Lo4AUvd345sQ==,type:str] + restpassword: ENC[AES256_GCM,data:tBoYCKcDNHWnp1+i5alru1Mi8tC/a90v2estjjAJKkiJkAFxvOaLV2cm0F5ZadrWOTjDqbmvfAse5fKb9emomA==,iv:AX/TCm07PVT0n6h6R8Tyfoi2OlaRBOAS0rnwBeyz1r0=,tag:5shq07sClJbDcM+soSgNYQ==,type:str] + websecretkey: ENC[AES256_GCM,data:tx7j0+n3z2Xixz41M/8Ijrx/P82Fx/pRwM/xHos+3K9jPf0QhIkZI1pVkVws0D2FmtwsT3+f0C63O1R7B2IsvA==,iv:9R2r0NYC5ewqcZ8Y3Yq4QBsDiaBXzuw+KE5UCdufc6Q=,tag:fMklAM4Lu5Zt5m//h5Epgg==,type:str] + smtp_user: ENC[AES256_GCM,data:5ChqR4evH+KG0kJaKtVArPGPnV9T5xHyyrSlRqE/,iv:zlvuoHU1CcriRDH3UeVZr1J8BAzs1IjQWjmpldZx0cQ=,tag:mKaomzcfmGBW/IRyIH3d/A==,type:str] + smtp_password: ENC[AES256_GCM,data:GK7mIN8zEl+ZXva+bJ68ak/ViAPeeTESldo3lMslXjs4WT2mSHdXsp3HgSk/qfMvXynAGiiiZv3/GcdycEek0g==,iv:BpAPhVSN2w1WIWKlaVPFtBIMmPIVvpVe29jFFiTeD/g=,tag:gWH1igGC5/HBXdGpZ6ps4Q==,type:str] sops: kms: [] gcp_kms: [] @@ -19,14 +19,14 @@ sops: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrblpCb1BlSm44dHYyTlE5 - U0ZVZzFiMnpFUkNER3p5RXpHaStqMnJ6QXowCisxaWhnaWs3VVJsZ25jUUdvNHBM - UFVFMGhiZjZvREpxd0JyMnozVW1YV1UKLS0tIE91QjZhdjRGYUNKUmozY3R0NFNv - bUN2dWNGM1EyNDJZZ0hHZDEyanpudmMKjXXuuQBSm90Nur725aXvhNY/b6E77Xeu - NiQszbEDsGJyAisEnTCTn/xtlmLARjIlZ8ut3nKSry27U/PCb71nDA== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuNENucnY3UnFkREYvZGZj + NklpamZJUkkyN3QzWkcrKzBLZGNHY0c0YlhFClR4NU1RblBaQTdzWnFaTzRYMGl6 + bGU4YXRtOTUxRWhYNGs5VE03akYvN2cKLS0tIG9QMGZVY1ViSDhMUmNCOFdhRS9h + QU55RGpGdHhBZ1RUQlh5bHhWUFhoRXMK6qESXuW42StjnKy9rxNUIaEoYODv4Atn + n7ibn0iQtLtryO5XbIHNBKC9kc4+1eSCefV8FQagEKJtjbCJpOxo7w== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-10-01T17:48:35Z" - mac: ENC[AES256_GCM,data:ko1/OeJMtip+6FcQqFYFi0tYyiUxozUvPYMjqziXNPwfBacEFEPjbMpFBQBkaPVC+2TjArdJDmBR7vi3ElBH68j0YnQY4R65Zjq7C2kwDaVOTHLh+LyVB7+7sJd1U4XacOhIWx77anCwVuMjI46gSns2YDmbi22QVryHiKhVIaM=,iv:b0CC7gVCk1ERpsry8l52sP/3qyM9nRpmUd6ZLOW8eNE=,tag:LlJheHarMLvIIhnPU2+yJw==,type:str] + lastmodified: "2025-10-01T18:13:45Z" + mac: ENC[AES256_GCM,data:YgKCyIXN/sAYoXAZ61JA5mMg3kJaYknt4E2ggkS4rUANkLvXKWEOUtAp+Ek2MHrwd2e9tKR5Acj9qvp5gI35gyier+0oP+4COTYWarKun0MhEK6MsbXQz8td01eVgr+kEK4BP+K6RDRlJjCEpdNZv4inudF+6Gun06+hw7L6Dww=,iv:KRaQDxRDyLI4kK457ybX6ZoZHGeQrVNA9WPCPMngeQU=,tag:MasIHjaoTCRGbuxAOcjw4g==,type:str] pgp: [] encrypted_regex: ^(harborAdminPassword|kimaiAppSecret|kimaiAdminPassword|GITHUB_CLIENT_ID|GITHUB_CLIENT_SECRET|GITHUB_PRIVATE_KEY|woosh|root_password|rspamd_password|pgdb_password|matrix_access_token|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ version: 3.9.1 @@ -38,9 +38,9 @@ metadata: namespace: mailserver type: Opaque stringData: - mailman-extra.cfg: ENC[AES256_GCM,data:Ayes7SIkNzeJtua3nmu5BQ1aGfd0kfRSi/jm/342Dzq9MQJmqPLpulrGKq67kXBPO759TA==,iv:brwd6nf8XXzs4gM9JmAY6/N1Vqpg9BPtmp+wcNDjkuM=,tag:pPtbhQGp5IRKLd4GGG8wJg==,type:str] - settings_local.py: ENC[AES256_GCM,data:taYMGztSgu9UeriXbCrcmAa9GBZhhwAMuO1O6AxbnIRZRSOsC4laxXUFjUwFukXjZl6xAvOJOpCw1pPiAzSbEwe9sy+CWVE7MzX4rEM4ICGpF7M99kXQm0z92cmSgy4n4LQZRhwHjL3PQegdsAwAHuWiZmpnEIjp9VYGgp/tMmMGwBVZ6p9qP+il49itiNN3RcBCfM9g6JY7Dj7ByAIyoy0KMqfMVY7bfGo30n3ty+WQgK5L9ls/V/x/r5ssBOnT3nSFFRENHlyuSH7xXdlRIwdT352eKEedgFItBsI/xFY1btN3JQjA6s0+rWf1DY9hBl1FdxYJSZbIIJIQdBQMk5wzIZCrt5rEi+wxj08SnMlctMZHAH4Fur88CmuS8YQWyFHBpf4HOngbcqMp7eLn7sKpWy1gm8jwuNAY8GnQeeWFJDvCrg9jjWCKQQUUAszkRfqgbdWXyjpeZN5qmm3hUfp3GBnEBoNAQdaFIOPa6X/xXRSZBORrKF6tOazxe+xEn/gEvih0v5VKG2CRxb3GpJypEnlDsWH78ZEYa4cipHokDr4XAWwUoum1gMdxe1xXhTJUtQS754F3UQnrPTtuudQPOBa8cXf3lC3uGNwttsNlLTlB2DYx3Us=,iv:Qk1/nGnXDV6xFVYPf3xmQgcyljvUJ6I9MUe/wumboF8=,tag:+qEbJyKxir+OudXbl5wmyQ==,type:str] - chown: ENC[AES256_GCM,data:ugRnwrzXWn+cbAJEfQjnBUzjw6IMNSwVFrIa0d9u9Y4ASDo=,iv:trhxB8Pl5OGpdxD4BWbTZ2XMhJPdS8kR1XIVfl+tECE=,tag:AssuIAxkGJVieRZCSOCngg==,type:str] + mailman-extra.cfg: ENC[AES256_GCM,data:KHTumnny54+u0oCljkcm9GRPzx77CYBUbVJx3cctqAwB7PcjNGz117iHudXK41UnthqR9A==,iv:CwmBzpSHmk/T17LzsK2Fd6jFu0DL2x0eOCzsG3y8e+s=,tag:CAsC8CQnWNriAq3XS61kLQ==,type:str] + settings_local.py: ENC[AES256_GCM,data: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,iv:DjPBXUMiK4hGewP7c6+fPCDE61A5WdvXOJudooueR/M=,tag:w9zTqXV7qSXQwQXvdYtgyA==,type:str] + chown: ENC[AES256_GCM,data:nm0msj7u/MNJ8A7o8+lO6ayk3nueZnu0ZJACWHfDXXv5GWo=,iv:bj0VS4cGLrXx+gxs2/kXoeVCIwLCM+OqEo0sOQsDW8E=,tag:ScjCef3aWlOW64f4PnvA/Q==,type:str] sops: kms: [] gcp_kms: [] @@ -50,14 +50,14 @@ sops: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrblpCb1BlSm44dHYyTlE5 - U0ZVZzFiMnpFUkNER3p5RXpHaStqMnJ6QXowCisxaWhnaWs3VVJsZ25jUUdvNHBM - UFVFMGhiZjZvREpxd0JyMnozVW1YV1UKLS0tIE91QjZhdjRGYUNKUmozY3R0NFNv - bUN2dWNGM1EyNDJZZ0hHZDEyanpudmMKjXXuuQBSm90Nur725aXvhNY/b6E77Xeu - NiQszbEDsGJyAisEnTCTn/xtlmLARjIlZ8ut3nKSry27U/PCb71nDA== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuNENucnY3UnFkREYvZGZj + NklpamZJUkkyN3QzWkcrKzBLZGNHY0c0YlhFClR4NU1RblBaQTdzWnFaTzRYMGl6 + bGU4YXRtOTUxRWhYNGs5VE03akYvN2cKLS0tIG9QMGZVY1ViSDhMUmNCOFdhRS9h + QU55RGpGdHhBZ1RUQlh5bHhWUFhoRXMK6qESXuW42StjnKy9rxNUIaEoYODv4Atn + n7ibn0iQtLtryO5XbIHNBKC9kc4+1eSCefV8FQagEKJtjbCJpOxo7w== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-10-01T17:48:35Z" - mac: ENC[AES256_GCM,data:ko1/OeJMtip+6FcQqFYFi0tYyiUxozUvPYMjqziXNPwfBacEFEPjbMpFBQBkaPVC+2TjArdJDmBR7vi3ElBH68j0YnQY4R65Zjq7C2kwDaVOTHLh+LyVB7+7sJd1U4XacOhIWx77anCwVuMjI46gSns2YDmbi22QVryHiKhVIaM=,iv:b0CC7gVCk1ERpsry8l52sP/3qyM9nRpmUd6ZLOW8eNE=,tag:LlJheHarMLvIIhnPU2+yJw==,type:str] + lastmodified: "2025-10-01T18:13:45Z" + mac: ENC[AES256_GCM,data:YgKCyIXN/sAYoXAZ61JA5mMg3kJaYknt4E2ggkS4rUANkLvXKWEOUtAp+Ek2MHrwd2e9tKR5Acj9qvp5gI35gyier+0oP+4COTYWarKun0MhEK6MsbXQz8td01eVgr+kEK4BP+K6RDRlJjCEpdNZv4inudF+6Gun06+hw7L6Dww=,iv:KRaQDxRDyLI4kK457ybX6ZoZHGeQrVNA9WPCPMngeQU=,tag:MasIHjaoTCRGbuxAOcjw4g==,type:str] pgp: [] encrypted_regex: ^(harborAdminPassword|kimaiAppSecret|kimaiAdminPassword|GITHUB_CLIENT_ID|GITHUB_CLIENT_SECRET|GITHUB_PRIVATE_KEY|woosh|root_password|rspamd_password|pgdb_password|matrix_access_token|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ version: 3.9.1 @@ -69,7 +69,7 @@ metadata: namespace: mailserver type: Opaque stringData: - url: ENC[AES256_GCM,data:bV2DYSmEnQs7YI1u1hWVogrLqASd+aQ5JgEdhHmMSvwDwGdcE5r6ZIazahItjNpJuuiYMisMNln6Op2xWNhubh3zrAtlulcGzVEOfMVp7aC+kC8P6uEU1TeQLLgxXNRIFQmN6/I/O7C69Nk3jVQ6EjyK3eHqwcjhfxiJ2+JlUNP3GggpBAO9zhgPR5HbKDV4FA==,iv:L4HiTQUDM3W8OMhw4OOJMF4YRrVYQTFyhOrVK7seEkw=,tag:7lQHpqsx1TL4KTBqO55+aw==,type:str] + url: ENC[AES256_GCM,data:+6xAXI/k+GZl0xjqk6gi61fzvrgifMekAv3/MleQM+7DybSEZpVGPgzfZf9XHrswGl+MhZ/ZWItO6bqLBhJYbLmUh4PW6Kv+D+lOkxNr6qSc1bP35Wa5vco1jgy7tohdzeUemiQAl2Hxyp1Bugc7yv7gBck52sHcUt7qdO1mAmVuoAZNtuEniFsM1gYTtcJKzQ==,iv:i7Ix61/7HX0eTFIWgp1NwaynxI6sUddVITuH1+qJ4nI=,tag:CrWDYa5aWQP7i5cXpDcipw==,type:str] sops: kms: [] gcp_kms: [] @@ -79,14 +79,14 @@ sops: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrblpCb1BlSm44dHYyTlE5 - U0ZVZzFiMnpFUkNER3p5RXpHaStqMnJ6QXowCisxaWhnaWs3VVJsZ25jUUdvNHBM - UFVFMGhiZjZvREpxd0JyMnozVW1YV1UKLS0tIE91QjZhdjRGYUNKUmozY3R0NFNv - bUN2dWNGM1EyNDJZZ0hHZDEyanpudmMKjXXuuQBSm90Nur725aXvhNY/b6E77Xeu - NiQszbEDsGJyAisEnTCTn/xtlmLARjIlZ8ut3nKSry27U/PCb71nDA== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuNENucnY3UnFkREYvZGZj + NklpamZJUkkyN3QzWkcrKzBLZGNHY0c0YlhFClR4NU1RblBaQTdzWnFaTzRYMGl6 + bGU4YXRtOTUxRWhYNGs5VE03akYvN2cKLS0tIG9QMGZVY1ViSDhMUmNCOFdhRS9h + QU55RGpGdHhBZ1RUQlh5bHhWUFhoRXMK6qESXuW42StjnKy9rxNUIaEoYODv4Atn + n7ibn0iQtLtryO5XbIHNBKC9kc4+1eSCefV8FQagEKJtjbCJpOxo7w== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-10-01T17:48:35Z" - mac: ENC[AES256_GCM,data:ko1/OeJMtip+6FcQqFYFi0tYyiUxozUvPYMjqziXNPwfBacEFEPjbMpFBQBkaPVC+2TjArdJDmBR7vi3ElBH68j0YnQY4R65Zjq7C2kwDaVOTHLh+LyVB7+7sJd1U4XacOhIWx77anCwVuMjI46gSns2YDmbi22QVryHiKhVIaM=,iv:b0CC7gVCk1ERpsry8l52sP/3qyM9nRpmUd6ZLOW8eNE=,tag:LlJheHarMLvIIhnPU2+yJw==,type:str] + lastmodified: "2025-10-01T18:13:45Z" + mac: ENC[AES256_GCM,data:YgKCyIXN/sAYoXAZ61JA5mMg3kJaYknt4E2ggkS4rUANkLvXKWEOUtAp+Ek2MHrwd2e9tKR5Acj9qvp5gI35gyier+0oP+4COTYWarKun0MhEK6MsbXQz8td01eVgr+kEK4BP+K6RDRlJjCEpdNZv4inudF+6Gun06+hw7L6Dww=,iv:KRaQDxRDyLI4kK457ybX6ZoZHGeQrVNA9WPCPMngeQU=,tag:MasIHjaoTCRGbuxAOcjw4g==,type:str] pgp: [] encrypted_regex: ^(harborAdminPassword|kimaiAppSecret|kimaiAdminPassword|GITHUB_CLIENT_ID|GITHUB_CLIENT_SECRET|GITHUB_PRIVATE_KEY|woosh|root_password|rspamd_password|pgdb_password|matrix_access_token|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ version: 3.9.1 @@ -98,7 +98,7 @@ metadata: namespace: mailserver type: Opaque stringData: - url: ENC[AES256_GCM,data:WigfCNe6M+vUf80BzwlUIC5x7iIHdAQdjJHo3LOlSJt+Y6ES2tuib639UA1Dqmvl9vRffI969cKAt3YnrVOIjhc5nit6TM4/4ids/VeMZqMuEMTX7QreM1KHIluIvHUic7SmzJO25B8Hb2sOM27MHl3dSwCiD797XOSsw49zKR/ZSrZK5aRwnUKvtCGj12LJ3g==,iv:dBheHaQ0uwZikaeBxEtBSZ6NQkOH0wkGTkB+E4XBuKo=,tag:1KWxA7YciH6J3AiFPX86Dg==,type:str] + url: ENC[AES256_GCM,data:ue2a3m8DzSPj0Nu+keQM7Drm7+uqylcY1yksZs2vA6shseCD6yjfU8D9CwiwEpAAJldGq2W7GKvc4P/a5TQGceo3TJAo/B0SdfV1mqcWFBJwlEbdFKGwOHwr8CgFBsc1ZPuqtwczgNzAXeeqHkc/wsujAzAsqAQP1MIWomEaFCAesxtyJ5i3VPPtLDE7xCtoXg==,iv:g9eIxwz6oQRhAopEnqDnDLjsCmn8WSyy0cwIei+5SCo=,tag:aK0QF5JeIej2AvcBhMc3Nw==,type:str] sops: kms: [] gcp_kms: [] @@ -108,14 +108,14 @@ sops: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrblpCb1BlSm44dHYyTlE5 - U0ZVZzFiMnpFUkNER3p5RXpHaStqMnJ6QXowCisxaWhnaWs3VVJsZ25jUUdvNHBM - UFVFMGhiZjZvREpxd0JyMnozVW1YV1UKLS0tIE91QjZhdjRGYUNKUmozY3R0NFNv - bUN2dWNGM1EyNDJZZ0hHZDEyanpudmMKjXXuuQBSm90Nur725aXvhNY/b6E77Xeu - NiQszbEDsGJyAisEnTCTn/xtlmLARjIlZ8ut3nKSry27U/PCb71nDA== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuNENucnY3UnFkREYvZGZj + NklpamZJUkkyN3QzWkcrKzBLZGNHY0c0YlhFClR4NU1RblBaQTdzWnFaTzRYMGl6 + bGU4YXRtOTUxRWhYNGs5VE03akYvN2cKLS0tIG9QMGZVY1ViSDhMUmNCOFdhRS9h + QU55RGpGdHhBZ1RUQlh5bHhWUFhoRXMK6qESXuW42StjnKy9rxNUIaEoYODv4Atn + n7ibn0iQtLtryO5XbIHNBKC9kc4+1eSCefV8FQagEKJtjbCJpOxo7w== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-10-01T17:48:35Z" - mac: ENC[AES256_GCM,data:ko1/OeJMtip+6FcQqFYFi0tYyiUxozUvPYMjqziXNPwfBacEFEPjbMpFBQBkaPVC+2TjArdJDmBR7vi3ElBH68j0YnQY4R65Zjq7C2kwDaVOTHLh+LyVB7+7sJd1U4XacOhIWx77anCwVuMjI46gSns2YDmbi22QVryHiKhVIaM=,iv:b0CC7gVCk1ERpsry8l52sP/3qyM9nRpmUd6ZLOW8eNE=,tag:LlJheHarMLvIIhnPU2+yJw==,type:str] + lastmodified: "2025-10-01T18:13:45Z" + mac: ENC[AES256_GCM,data:YgKCyIXN/sAYoXAZ61JA5mMg3kJaYknt4E2ggkS4rUANkLvXKWEOUtAp+Ek2MHrwd2e9tKR5Acj9qvp5gI35gyier+0oP+4COTYWarKun0MhEK6MsbXQz8td01eVgr+kEK4BP+K6RDRlJjCEpdNZv4inudF+6Gun06+hw7L6Dww=,iv:KRaQDxRDyLI4kK457ybX6ZoZHGeQrVNA9WPCPMngeQU=,tag:MasIHjaoTCRGbuxAOcjw4g==,type:str] pgp: [] encrypted_regex: ^(harborAdminPassword|kimaiAppSecret|kimaiAdminPassword|GITHUB_CLIENT_ID|GITHUB_CLIENT_SECRET|GITHUB_PRIVATE_KEY|woosh|root_password|rspamd_password|pgdb_password|matrix_access_token|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ version: 3.9.1 diff --git a/apps/talos_cluster/mailserver/mailman-uwsgi.ini b/apps/talos_cluster/mailserver/mailman-uwsgi.ini @@ -0,0 +1,64 @@ +[uwsgi] +# Port on which uwsgi will be listening. +uwsgi-socket = 0.0.0.0:8080 +http-socket = 0.0.0.0:8000 + +# Enable threading for python +enable-threads = true + +buffer-size = 32768 +listen = 1000 # Socket backlog +socket-timeout = 30 +http-timeout = 30 + +# Move to the directory where the django files are. +chdir = /opt/mailman-web + +# Use the wsgi file provided with the django project. +wsgi-file = wsgi.py + +# Setup default number of processes and threads per process. +master = true +processes = 4 +threads = 4 +lazy-apps = true +thunder-lock = true + +# Memory and connection management +max-requests = 1000 # Restart workers after 1000 requests +max-requests-delta = 100 +harakiri = 60 # Kill requests taking longer than 60s +harakiri-verbose = true +reload-on-rss = 512 # Restart if worker uses >512MB RAM + +# Drop privileges and don't run as root. +uid = mailman +gid = mailman + +# Setup the django_q related worker processes. +attach-daemon = ./manage.py qcluster + +# Setup hyperkitty's cron jobs. +# 'minutely' jobs are run hourly for perf reasons. +# See https://github.com/maxking/docker-mailman/issues/327 +unique-cron = 0 -1 -1 -1 -1 ./manage.py runjobs minutely +unique-cron = -15 -1 -1 -1 -1 ./manage.py runjobs quarter_hourly +unique-cron = 0 -1 -1 -1 -1 ./manage.py runjobs hourly +unique-cron = 0 0 -1 -1 -1 ./manage.py runjobs daily +unique-cron = 0 0 1 -1 -1 ./manage.py runjobs monthly +unique-cron = 0 0 -1 -1 0 ./manage.py runjobs weekly +unique-cron = 0 0 1 1 -1 ./manage.py runjobs yearly + +# Setup the request log. +req-logger = file:/opt/mailman-web-data/logs/uwsgi.log + +# Log cron seperately. +logger = cron file:/opt/mailman-web-data/logs/uwsgi-cron.log +log-route = cron uwsgi-cron + +# Log qcluster commands seperately. +logger = qcluster file:/opt/mailman-web-data/logs/uwsgi-qcluster.log +log-route = qcluster uwsgi-daemons + +# Last log and it logs the rest of the stuff. +logger = file:/opt/mailman-web-data/logs/uwsgi-error.log diff --git a/apps/talos_cluster/mailserver/mailman.yaml b/apps/talos_cluster/mailserver/mailman.yaml @@ -18,238 +18,278 @@ spec: hostAliases: - ip: 0.0.0.0 hostnames: - - mailman.mailserver.svc.cluster.local + - mailman.mailserver.svc.cluster.local - ip: 127.0.0.1 hostnames: - - mailman-web + - mailman-web containers: - name: core image: ghcr.io/mtrnord/mailman-core:rolling imagePullPolicy: Always ports: - - name: api - containerPort: 8001 - - name: lmtp - containerPort: 8024 + - name: api + containerPort: 8001 + - name: lmtp + containerPort: 8024 env: - - name: DATABASE_URL - valueFrom: - secretKeyRef: - name: mailmancore - key: url - - name: DATABASE_TYPE - value: postgres - - name: DATABASE_CLASS - value: mailman.database.postgresql.PostgreSQLDatabase - - name: HYPERKITTY_API_KEY - valueFrom: - secretKeyRef: - name: mailman-passwords - key: apikey - - name: MAILMAN_REST_USER - value: restadm - - name: MAILMAN_REST_PASSWORD - valueFrom: - secretKeyRef: - name: mailman-passwords - key: restpassword - - name: SMTP_HOST - value: mail.midnightthoughts.space - - name: SMTP_PORT - value: "465" - - name: SMTP_USE_SSL - value: "true" - - name: SMTP_SECURE_MODE - value: "smtps" - - name: SMTP_HOST_USER - valueFrom: - secretKeyRef: - name: mailman-passwords - key: smtp_user - - name: SMTP_HOST_PASSWORD - valueFrom: - secretKeyRef: - name: mailman-passwords - key: smtp_password - - name: MTA - value: postfix - - name: MM_HOSTNAME - value: mailman.mailserver.svc.cluster.local - - name: HYPERKITTY_URL - value: http://localhost:8000/hyperkitty + - name: DATABASE_URL + valueFrom: + secretKeyRef: + name: mailmancore + key: url + - name: DATABASE_TYPE + value: postgres + - name: DATABASE_CLASS + value: mailman.database.postgresql.PostgreSQLDatabase + - name: HYPERKITTY_API_KEY + valueFrom: + secretKeyRef: + name: mailman-passwords + key: apikey + - name: MAILMAN_REST_USER + value: restadm + - name: MAILMAN_REST_PASSWORD + valueFrom: + secretKeyRef: + name: mailman-passwords + key: restpassword + - name: SMTP_HOST + value: mail.midnightthoughts.space + - name: SMTP_PORT + value: "465" + - name: SMTP_USE_SSL + value: "true" + - name: SMTP_SECURE_MODE + value: "smtps" + - name: SMTP_HOST_USER + valueFrom: + secretKeyRef: + name: mailman-passwords + key: smtp_user + - name: SMTP_HOST_PASSWORD + valueFrom: + secretKeyRef: + name: mailman-passwords + key: smtp_password + - name: MTA + value: postfix + - name: MM_HOSTNAME + value: mailman.mailserver.svc.cluster.local + - name: HYPERKITTY_URL + value: http://localhost:8000/hyperkitty volumeMounts: - - name: mailman-opt - mountPath: /opt/mailman - - name: mailman-extra - mountPath: /opt/mailman/mailman-extra.cfg - subPath: mailman-extra.cfg - - name: mailman-extra - mountPath: /usr/bin/chown - subPath: chown + - name: mailman-opt + mountPath: /opt/mailman + - name: mailman-extra + mountPath: /opt/mailman/mailman-extra.cfg + subPath: mailman-extra.cfg + - name: mailman-extra + mountPath: /usr/bin/chown + subPath: chown + - name: mailman-uwsgi + mountPath: /opt/mailman-web/uwsgi.ini + subPath: uwsgi.ini - name: web image: ghcr.io/mtrnord/mailman-web:rolling imagePullPolicy: Always ports: - - name: http - containerPort: 8000 - - name: uwsgi - containerPort: 8080 + - name: http + containerPort: 8000 + - name: uwsgi + containerPort: 8080 #command: # - tail #args: # - -f # - /dev/null env: - - name: DATABASE_URL - valueFrom: - secretKeyRef: - name: mailmanweb - key: url - - name: DATABASE_TYPE - value: postgres - - name: DATABASE_CLASS - value: mailman.database.postgresql.PostgreSQLDatabase - - name: HYPERKITTY_API_KEY - valueFrom: - secretKeyRef: - name: mailman-passwords - key: apikey - - name: MAILMAN_REST_USER - value: restadm - - name: MAILMAN_REST_PASSWORD - valueFrom: - secretKeyRef: - name: mailman-passwords - key: restpassword - - name: SECRET_KEY - valueFrom: - secretKeyRef: - name: mailman-passwords - key: websecretkey - - name: POSTORIUS_TEMPLATE_BASE_URL - value: http://localhost:8000/ - # serving static files by uwsgi - - name: UWSGI_STATIC_MAP - value: /static=/opt/mailman-web-data/static - - name: MAILMAN_ADMIN_USER - value: admin - - name: MAILMAN_ADMIN_EMAIL - value: mtrnord@nordgedanken.dev - - name: MAILMAN_HOST_IP - value: 127.0.0.1 - - name: MAILMAN_HOSTNAME - value: localhost - - name: SERVE_FROM_DOMAIN - value: lists.midnightthoughts.space - - name: MAILMAN_REST_URL # MAILMAN_REST_API_URL is set from this variable in settings. - value: http://127.0.0.1:8001 - - name: MAILMAN_REST_API_USER - value: restadm - - name: MAILMAN_REST_API_PASS - valueFrom: - secretKeyRef: - name: mailman-passwords - key: restpassword - - name: SMTP_HOST - value: mail.midnightthoughts.space - - name: SMTP_PORT - value: "465" - - name: SMTP_USE_SSL - value: "true" - - name: SMTP_HOST_USER - valueFrom: - secretKeyRef: - name: mailman-passwords - key: smtp_user - - name: SMTP_HOST_PASSWORD - valueFrom: - secretKeyRef: - name: mailman-passwords - key: smtp_password + - name: DATABASE_URL + valueFrom: + secretKeyRef: + name: mailmanweb + key: url + - name: DATABASE_TYPE + value: postgres + - name: DATABASE_CLASS + value: mailman.database.postgresql.PostgreSQLDatabase + - name: HYPERKITTY_API_KEY + valueFrom: + secretKeyRef: + name: mailman-passwords + key: apikey + - name: MAILMAN_REST_USER + value: restadm + - name: MAILMAN_REST_PASSWORD + valueFrom: + secretKeyRef: + name: mailman-passwords + key: restpassword + - name: SECRET_KEY + valueFrom: + secretKeyRef: + name: mailman-passwords + key: websecretkey + - name: POSTORIUS_TEMPLATE_BASE_URL + value: http://localhost:8000/ + # serving static files by uwsgi + - name: UWSGI_STATIC_MAP + value: /static=/opt/mailman-web-data/static + - name: MAILMAN_ADMIN_USER + value: admin + - name: MAILMAN_ADMIN_EMAIL + value: mtrnord@nordgedanken.dev + - name: MAILMAN_HOST_IP + value: 127.0.0.1 + - name: MAILMAN_HOSTNAME + value: localhost + - name: SERVE_FROM_DOMAIN + value: lists.midnightthoughts.space + - name: MAILMAN_REST_URL # MAILMAN_REST_API_URL is set from this variable in settings. + value: http://127.0.0.1:8001 + - name: MAILMAN_REST_API_USER + value: restadm + - name: MAILMAN_REST_API_PASS + valueFrom: + secretKeyRef: + name: mailman-passwords + key: restpassword + - name: SMTP_HOST + value: mail.midnightthoughts.space + - name: SMTP_PORT + value: "465" + - name: SMTP_USE_SSL + value: "true" + - name: SMTP_HOST_USER + valueFrom: + secretKeyRef: + name: mailman-passwords + key: smtp_user + - name: SMTP_HOST_PASSWORD + valueFrom: + secretKeyRef: + name: mailman-passwords + key: smtp_password # otherwise django cannot find the mysql driver. #- name: DYLD_LIBRARY_PATH # value: /usr/local/mysql/lib/ volumeMounts: - - name: mailman-web - mountPath: /opt/mailman-web-data - - name: mailman-extra - mountPath: /opt/mailman-web-data/settings_local.py - subPath: settings_local.py - - name: mailman-extra - mountPath: /usr/bin/chown - subPath: chown + - name: mailman-web + mountPath: /opt/mailman-web-data + - name: mailman-extra + mountPath: /opt/mailman-web-data/settings_local.py + subPath: settings_local.py + - name: mailman-extra + mountPath: /usr/bin/chown + subPath: chown + - name: redis + image: redis:7-alpine + imagePullPolicy: IfNotPresent + ports: + - name: redis + containerPort: 6379 + command: + - redis-server + - --appendonly + - "yes" + - --maxmemory + - "256mb" + - --maxmemory-policy + - "allkeys-lru" + resources: + requests: + memory: "128Mi" + cpu: "50m" + limits: + memory: "512Mi" + cpu: "200m" + livenessProbe: + tcpSocket: + port: 6379 + initialDelaySeconds: 30 + periodSeconds: 10 + readinessProbe: + tcpSocket: + port: 6379 + initialDelaySeconds: 5 + periodSeconds: 5 + volumeMounts: + - name: redis-data + mountPath: /data - name: nginx image: ghcr.io/nginx/nginx-unprivileged:stable-alpine imagePullPolicy: IfNotPresent ports: - - name: http - containerPort: 9090 + - name: http + containerPort: 9090 startupProbe: - httpGet: - path: /mailman3/lists/ - port: 9090 - httpHeaders: - - name: Host - value: lists.midnightthoughts.space - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 5 - failureThreshold: 24 + httpGet: + path: /mailman3/lists/ + port: 9090 + httpHeaders: + - name: Host + value: lists.midnightthoughts.space + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 24 livenessProbe: - httpGet: - path: /mailman3/lists/ - port: 9090 - httpHeaders: - - name: Host - value: lists.midnightthoughts.space - periodSeconds: 30 - timeoutSeconds: 5 - failureThreshold: 3 + httpGet: + path: /mailman3/lists/ + port: 9090 + httpHeaders: + - name: Host + value: lists.midnightthoughts.space + periodSeconds: 30 + timeoutSeconds: 5 + failureThreshold: 3 readinessProbe: - httpGet: - path: /mailman3/lists/ - port: 9090 - httpHeaders: - - name: Host - value: lists.midnightthoughts.space - periodSeconds: 10 - timeoutSeconds: 3 - failureThreshold: 3 + httpGet: + path: /mailman3/lists/ + port: 9090 + httpHeaders: + - name: Host + value: lists.midnightthoughts.space + periodSeconds: 10 + timeoutSeconds: 3 + failureThreshold: 3 volumeMounts: - - name: mailman-web - mountPath: /opt/mailman-web-data - readOnly: true - - name: nginx-config - mountPath: /etc/nginx/nginx.conf - subPath: nginx.conf - readOnly: true - - name: tmp - mountPath: /tmp - readOnly: false - - name: tmp-client-body - mountPath: /tmp/nginx/client_body - readOnly: false - - name: tmp-cgi - mountPath: /tmp/nginx/fastcgi - readOnly: false - - name: tmp-cgi - mountPath: /tmp/nginx/uwsgi - readOnly: false - - name: tmp-cgi - mountPath: /tmp/nginx/scgi - readOnly: false - - name: tmp-proxy - mountPath: /tmp/nginx/proxy - readOnly: false + - name: mailman-web + mountPath: /opt/mailman-web-data + readOnly: true + - name: nginx-config + mountPath: /etc/nginx/nginx.conf + subPath: nginx.conf + readOnly: true + - name: tmp + mountPath: /tmp + readOnly: false + - name: tmp-client-body + mountPath: /tmp/nginx/client_body + readOnly: false + - name: tmp-cgi + mountPath: /tmp/nginx/fastcgi + readOnly: false + - name: tmp-cgi + mountPath: /tmp/nginx/uwsgi + readOnly: false + - name: tmp-cgi + mountPath: /tmp/nginx/scgi + readOnly: false + - name: tmp-proxy + mountPath: /tmp/nginx/proxy + readOnly: false volumes: - name: mailman-extra secret: - secretName: mailman-extra - defaultMode: 0555 + secretName: mailman-extra + defaultMode: 0555 - name: nginx-config configMap: - name: mailman-nginx + name: mailman-nginx + - name: mailman-uwsgi + configMap: + name: mailman-uwsgi - name: tmp emptyDir: {} - name: tmp-client-body @@ -258,31 +298,33 @@ spec: emptyDir: {} - name: tmp-proxy emptyDir: {} + - name: redis-data + emptyDir: {} volumeClaimTemplates: - apiVersion: v1 kind: PersistentVolumeClaim metadata: - name: mailman-opt - namespace: mailserver + name: mailman-opt + namespace: mailserver spec: - storageClassName: longhorn - accessModes: - - ReadWriteMany - resources: - requests: - storage: 10Gi + storageClassName: longhorn + accessModes: + - ReadWriteMany + resources: + requests: + storage: 10Gi - apiVersion: v1 kind: PersistentVolumeClaim metadata: - name: mailman-web - namespace: mailserver + name: mailman-web + namespace: mailserver spec: - storageClassName: longhorn - accessModes: - - ReadWriteMany - resources: - requests: - storage: 10Gi + storageClassName: longhorn + accessModes: + - ReadWriteMany + resources: + requests: + storage: 10Gi --- apiVersion: v1 kind: Service @@ -304,6 +346,8 @@ spec: port: 8080 - name: nginx port: 9090 + - name: redis + port: 6379 --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute @@ -318,8 +362,8 @@ spec: - lists.midnightthoughts.space rules: - backendRefs: - - name: mailman - port: 9090 + - name: mailman + port: 9090 timeouts: - request: 240s - backendRequest: 0s + request: 240s + backendRequest: 0s