Compare commits

...
23 Commits
Author SHA1 Message Date
Scrublord MacBad e663dcc0ec fix duplicated mapping ind kustomization file 2026-04-22 16:13:48 +02:00
Scrublord MacBad 2bc536d9d8 fix config security 2026-04-22 15:50:52 +02:00
Scrublord MacBad bf9c510d76 feat: MSC3889/MSC4880 2026-04-22 15:27:10 +02:00
Scrublord MacBad 90b41b37b1 fix mrtc 2026-04-22 15:22:48 +02:00
Scrublord MacBad 9b5c77bb8e fix secret 2026-04-22 15:15:28 +02:00
Scrublord MacBad 4a5f62d17a fix ingress 2026-04-22 15:11:58 +02:00
Scrublord MacBad 245cfcc486 fix valuemapping 2026-04-22 15:04:23 +02:00
Scrublord MacBad 37327eebe2 fix: use correct MAS SMTP config per documentation 2026-04-22 13:55:19 +02:00
Scrublord MacBad b7356b8a2b fix: use IONOS recommended port 587 instead of 465 2026-04-22 13:48:15 +02:00
Scrublord MacBad 6847c52309 fix: add mode field to MAS email configuration 2026-04-22 13:43:43 +02:00
Scrublord MacBad 47768c6761 revert: restore original Element Web config structure 2026-04-22 13:36:27 +02:00
Scrublord MacBad 361f02eddb fix: replace SOPS secret with plain secret for MAS configuration 2026-04-22 13:23:29 +02:00
Scrublord MacBad 9e23202971 fix: remove SOPS secret from valuesFrom, use only ConfigMap 2026-04-22 13:20:27 +02:00
Scrublord MacBad 584adf59d0 fix: reorder kustomization resources to ensure mas-values overrides mas-secrets 2026-04-22 12:45:31 +02:00
Scrublord MacBad dc0652ffe7 fix: add mas-values ConfigMap for email config with transport field 2026-04-22 12:42:16 +02:00
Scrublord MacBad 18d23441be fix: add transport field to MAS email config and update Element Web theme structure 2026-04-22 12:42:16 +02:00
sorb d7c996b0c9 Update docs/install.md 2026-04-22 10:00:16 +00:00
sorb 00c2c7b114 Add docs/install.md 2026-04-22 10:00:01 +00:00
Scrublord MacBad 59eb11d029 fix element values 2026-04-22 01:20:01 +02:00
Scrublord MacBad eb82a385a4 fix synapse values 2026-04-22 00:43:06 +02:00
Scrublord MacBad 189c5a8d2e fix synapse values 2026-04-22 00:35:24 +02:00
Scrublord MacBad 13bb4814b8 fix filename mas 2026-04-22 00:26:11 +02:00
Scrublord MacBad dd9fdfdca7 feat matrix_rtc 2026-04-22 00:19:48 +02:00
11 changed files with 171 additions and 18 deletions
Vendored
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+37
View File
@@ -0,0 +1,37 @@
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: axion-apex-tls
namespace: matrix
spec:
secretName: axion-apex-tls
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- axion1337.chat
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: axion-apex
namespace: matrix
spec:
entryPoints: [websecure]
tls:
secretName: axion-apex-tls
routes:
# Höchste Priorität: /.well-known/matrix/* -> wellKnownDelegation-Service
- match: Host(`axion1337.chat`) && PathPrefix(`/.well-known/matrix`)
kind: Rule
priority: 100
services:
- name: matrix-stack-well-known
port: 8010
# Niedrigere Priorität: alles andere -> Element Web
- match: Host(`axion1337.chat`)
kind: Rule
priority: 10
services:
- name: matrix-stack-element-web
port: 80
@@ -11,16 +11,21 @@ data:
{
"brand": "aXion1337.Chat",
"default_theme": "aXion1337 Dark",
"show_labs_settings": true,
"features": {
"feature_qr_code_login": true
},
"setting_defaults": {
"custom_themes": [
{
"name": "aXion1337 Dark",
"is_dark": true,
"colors": {
"accent-color": "#ffaf0f"
// Deine restlichen Theme-Farben hier...
"accent-color": "#ffaf0f",
"primary-color": "#ffaf0f",
"secondary-color": "#ffaf0f"
}
}
]
}
}
}
@@ -0,0 +1,22 @@
apiVersion: v1
kind: Secret
metadata:
name: ess-mas-values-secret
namespace: matrix
stringData:
values.yaml: ENC[AES256_GCM,data:K692tDSLoftfKmsd4nIc8BzJw9CwXkOc4qSGTw78qF7L7UolTlH456WYeuwXiajDHmsVJCLhxDjCAhGyYUgbEC1mwuX1ZpkJefJkXvkGtQqnVbpS5MLYWt2SMQo+Yuz5L3Qxkop8Y02/U8jFxu5w7LQT71aAJphI1Po6r0wWjCIP0pDLTSUXd5Tk4eLq7o1a8nCrkJxSDQc95sRPTlZ/cfVhBE4xDzDK/CD/Yajv6yUceqUr7j7aBHOlg82+y0HU8xY44B/NtAzphJJf706z0X80Q5Dboeks5Rj9Na0lld5hwcOQPocYO28Tb6RDYOkNOQUELZKoc64JcpYJNyUkxfJl0hjtC1TmtAy1ZljLytnbnc9abNnHWgKcBt9TCcLIJJbZAI2snSHON8uNYpf7+erXx0wHVGxL/WZWEiFlAhnTfNx/Dqr2l0tKTjzRgibSpeA9rBmEm1/2PnJjexRpyewbS2MASGy2C1lfqaAPfjxf,iv:tguaH5u/67ubPSzhrhk3QMkpsE3flvrEZf50U3bcXvc=,tag:KY3T9RcV9KVBKb1SKXCjmw==,type:str]
sops:
age:
- recipient: age14l0hwfqylwpemz5y2ghh2yxk0phszlnj3qlejhue0fw0kz3tmfgqdsjzdh
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJYUEvbDF0azNsM0RSS3pZ
eG1sNEZKOXAzUVRZWWVTbjlpazJqaVpBRWtBCkE4SW9qVVhxa1dKSXhXV2pSN0lK
VVZET0E2bWZSclkvSzlqdlRxcjVNOEEKLS0tIEZtdm9xRU81WXpkTGQ1UW5HZUl2
UERlYmtRc21PSnFGNjFkZFVVcm9nUTgKuxWcqg1MRWq7Yhp61lHHKPZsdiNeHXSd
72OCNMaUiz58kTKt+tpthUxXlGUlf3y0VA1/KigeA+L5Z2bk/bdMmw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-04-22T13:49:01Z"
mac: ENC[AES256_GCM,data:wHDBVBTvNycXTKTVBK1MNrGg2C0XufPpNTx9ksp1V5rtfcPvZNbiw8aUcjHt6hNtT3tPPmUt82jwzAbAm3hnPsAVfnue+bB2BZ91AI11tcqr4o+l3djeJODntF5d6TfdIWchtwMisy7bBMtLPS4Vs++JPbP90p/CtCdOxPwh1CQ=,iv:CQ24u8xSpzG3QU4JzzpZIx5cBrMH5RxVPl/S6gLylxU=,tag:f8FdKvtyxz8ks0gV6ct9iQ==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.12.2
@@ -4,19 +4,19 @@ metadata:
name: ess-mas-custom-secrets
namespace: matrix
stringData:
values.yaml: ENC[AES256_GCM,data:K+L4N3tdwZn6u2InPkOgk+hKIp8vp+cy8rE3mbBCXCXpsluxZPDJhhyZ+iNu3enhQBe4CfY+7bND6iGJnmWlkh8hwclLpT1MsG/nIOVwNiV6xaNAwBcdqMe6WMbucvlhQ/fT3JSKt9Eds/Q/O0UyhJE0RGGCVW5jc6ahnud9TqvMY/wqwgtBLbF7mKy9VTwUJIIFVtpC3NKJiwAVEkNJ8p1oDfTzo4MuXURyLdoQH+MClMAs/BCEwrszQv38YS/6kbki7OUurv26caK+PrTsrA2eBZIunMuXPTlUzrb+nI9XgBaj/Ccq4YkTHE9zUXD/fFnOYKy6EwrsBkF0vYmZtMwyRUeNE9V10xL68d1vG8K9,iv:/6eaFfPvFt1RrhBwuiDsudzn+fbAQW5wcxbRjKWH9Og=,tag:ADRRhusFIuJ2Z78wDmxMQw==,type:str]
values.yaml: ENC[AES256_GCM,data:Vk5TvaBui8gK6ftcRvZA8aEmw+QmWhn6pp9/2T5ndw8YPiggAtpqZszms5yoOxPK2Jy+GAVZ3M1whWFrdqy2WPjCAVEKlg5i7qeC1wKfgjMV2txWRlQjYAu2n4IYxi1aOaFcqzxLGYclAlQh6J0PmSYKtbWZO0nsjjcbXt9AXRgmjjZnIcNEBcQg9DoSew4MiHr5BQ0dsN0hJx96UhtTAVwssDgE1eKlTz2K/VD/xz3Odd/WuFKjThpa4E3p66Azc+4WNuQpxFejUgEg5ZzMvup8GGEzH5L3jBtxdBNmNFn6GNwFfYwq/ohWTXafVTj1mEpwTYBcKEtsmks8fl/qzb6QBobOOPqKTD4chRhv72yeYE7rv9x6530TxNXGUd++jxtQm1G+ZOjje05k3x2i9SQv5CNBM2jSyoh2uktoVyaJLpgJMv35VdyLAWY+nNXD4yj0isI=,iv:7GmbMaMDWY+agQC3Xr9SpOzGPyb82RDCSEyPHaWwMhQ=,tag:FUpe4v9BybS0M+8L7yvB4A==,type:str]
sops:
age:
- recipient: age14l0hwfqylwpemz5y2ghh2yxk0phszlnj3qlejhue0fw0kz3tmfgqdsjzdh
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUeENKREZQU0k5aTk0RTY1
REl2S3VCNEFPSjMwcURIeVNQUHgwaEs4VzBZCjZQeWFKWStUUDlhZElBV2JGb21h
Sk9tUHYyT0VIZFZjdm0xRGtXU0NORGMKLS0tIHAzbDNTNThxbCt1a0k0S0gzWTd2
bjlBU0ZkU2EreXROeSttSVVUeVpmaTQKhzIFvPZSCaX2ocBOCQQ47Xax96XYb/8B
PVNP8QAkQabMXsPPyaTbccTHe6GBu4fQ1Kw8f7JVkL0Ml+Ss6uSyaA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCUWlDYkY4NVpWNFVHb1Bo
b3FpR0w5NmttcW9IV1RXWENwTnE2NU9tR0hvCnJyNU9xWEpYZWRXVURtTis3aEp2
MmtCZXZXemlKNnZrbW1OL0NlMXlQbzQKLS0tIG81ZXIyd2pGOVlXeEVtRy92RzFp
VU9sa0tOdlBqcnZ2VTVaQWpaN3Y3L0UKUel3SRju6rFbMa9Di++EAci8+fsMjx4X
X8fM/N4jTHerXOBCT/bnD/Tk/2jAcwg9PC3e906VDUdsIZw+xU+grw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-04-21T21:31:26Z"
mac: ENC[AES256_GCM,data:2GHrA5POscfBk/uBQjP+9vxcrR6WpaGDO8dRU/y/3hBlVRJuqGKmblLLEdFglsTFa7OvNKIfsMDJmgHkki3iCwwOf6ItxqOUmcN/HjDzHH2JuuQE/w0kx0WAOYqTmBAj2nP8pskbCeca/irZvENtBXrqEp4cMZDa0nqkD2AGHlc=,iv:oOF+7MwY2lv8NKYr+OsXzr6Q1W8edIG0s2MQck24Lyk=,tag:3k4pMloKtm6UxVi8IYMHjw==,type:str]
lastmodified: "2026-04-22T10:12:35Z"
mac: ENC[AES256_GCM,data:zMIPahMwgSgF9vdEkp7DyECL3s6IuEHWs0JE1G9A+xYmm0mAFYbzMPwgg6oB57gNpX3EaPovHOOvKlTjZVWUbv892mU63GPi4W5kRxsZya5FyC3PxyZlsvMX9U/F8Hwvo9tymbGYpsGGkxv0doRZvTuKDzj1j1+VO0VVcY2i3Gc=,iv:dq6GtQ0vfQWiew6s6gWjPRZPtQ1rD3cO3aQXPDT0Sos=,tag:7UrcQ8Q420HK/vW01SsRkg==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.12.2
@@ -14,5 +14,12 @@ data:
url-previews:
config: |
url_preview_enabled: true
max_spider_size: 10M
# Deine restlichen URL-Preview und Retention Settings hier...
url_preview_ip_range_blacklist:
- '127.0.0.0/8'
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
- '::1/128'
- 'fe80::/10'
- 'fc00::/7'
max_spider_size: 10M
+5 -3
View File
@@ -23,7 +23,7 @@ spec:
name: ess-element-custom
valuesKey: values.yaml
- kind: Secret
name: ess-mas-custom-secrets
name: ess-mas-values-secret
valuesKey: values.yaml
values:
@@ -69,6 +69,8 @@ spec:
host: admin.axion1337.chat
# Well-Known auf der Apex-Domain (axion1337.chat/.well-known/matrix/*)
# Deaktiviert — verursacht ACME-Konflikt mit elementWeb auf gleicher Domain
# Aktiviert notwendig für MatrixRTC-Discovery
wellKnownDelegation:
enabled: false
enabled: true
ingress:
className: "none" # Deaktiviert den Chart-Ingress, wir erstellen einen eigenen
+4 -2
View File
@@ -6,6 +6,8 @@ resources:
# Neue Dateien:
- custom-configs/synapse-values.yaml
- custom-configs/element-values.yaml
- custom-configs/mas-secrets.yaml # (oder .sops.yaml, je nach deiner SOPS-Einrichtung)
- custom-configs/mas-secret.yaml
# HelmRelease (muss ganz unten stehen, damit die ConfigMaps vorher da sind!)
- element-server-suite.yaml
- element-server-suite.yaml
# Custom Apex Ingress für Element Web + Well-Known auf axion1337.chat
- apex-ingress.yaml # Custom Apex Ingress für Element Web + Well-Known auf axion1337.chat
+78
View File
@@ -0,0 +1,78 @@
## 🚀 Step-by-Step Installationsanleitung (From Scratch)
Diese Anleitung geht davon aus, dass du einen frischen Server (Ubuntu/Debian) mit öffentlicher IP hast und deine lokalen Tools (Flux CLI, kubectl, sops, age) installiert sind.
### Schritt 1: Kubernetes (K3s) auf dem Server installieren
Logge dich per SSH auf deinem Server ein und installiere ein frisches K3s. Wir nutzen K3s mit dem Standard-Traefik-Ingress.
```bash
# Auf dem Server ausführen:
curl -sfL https://get.k3s.io | sh -
# Kubeconfig kopieren und Berechtigungen setzen (für den lokalen Zugriff)
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER ~/.kube/config
```
*Kopiere dir den Inhalt der `~/.kube/config` auf deinen lokalen Rechner, damit dein lokales `kubectl` den Server steuern kann. Vergiss nicht, die IP `127.0.0.1` in der Datei durch die öffentliche IP deines Servers zu ersetzen.*
### Schritt 2: Den SOPS-Verschlüsselungs-Key generieren
Damit Flux deine verschlüsselten Passwörter (SMTP, Datenbank) im Cluster lesen kann, braucht es einen privaten Schlüssel. Wir nutzen `age`.
```bash
# Auf deinem lokalen Rechner ausführen:
# 1. Key generieren
age-keygen -o age.agekey
# 2. Den Public Key (steht in der Datei) in die .sops.yaml des Repos eintragen!
# 3. Den Private Key als Secret in den Cluster laden (in den flux-system Namespace)
cat age.agekey | kubectl create secret generic sops-age \
--namespace=flux-system \
--from-file=age.agekey=/dev/stdin
```
### Schritt 3: Das Git-Repository vorbereiten
Stelle sicher, dass deine GitOps-Struktur gepusht ist und du ein Personal Access Token (PAT) für dein Git-Repository hast (bei GitHub/GitLab).
* Das Token benötigt Lese- und Schreibrechte auf das Repository.
### Schritt 4: Flux Bootstrap (Der Startschuss)
Das ist der magische Befehl. Er installiert den Flux-Controller in deinem Cluster und verbindet ihn mit deinem Repository. Ab diesem Moment übernimmt Flux das Steuer.
**Für GitHub:**
```bash
export GITHUB_TOKEN="dein-personal-access-token"
export GITHUB_USER="dein-github-username"
flux bootstrap github \
--owner=$GITHUB_USER \
--repository=dein-repo-name \
--branch=main \
--path=prod/gitops/clusters/matrix \
--personal
```
**Für Gitea/GitLab/Generisches Git (wie in deinem Setup scheinbar genutzt):**
```bash
flux bootstrap git \
--url=https://rohana.axion1337.de/sorb/axion1337.chat-gitops.git \
--branch=main \
--path=prod/gitops/clusters/matrix \
--username=dein-git-user \
--password=dein-git-token
```
### Schritt 5: Zurücklehnen und beobachten
Flux klont jetzt dein Repo, liest die Kustomizations und wendet sie in der richtigen Reihenfolge an (`infra-apps` -> `production-apps`).
Du kannst den Fortschritt live verfolgen:
```bash
# Zeigt den GitOps-Sync-Status:
flux get kustomizations --watch
# Zeigt das Helm-Deployment der Element Server Suite:
flux get helmreleases -n matrix --watch
# Zeigt, wie die Pods hochfahren:
kubectl get pods -n matrix -w
```
Sobald alle Pods auf `Running` stehen und die Zertifikate über Let's Encrypt validiert wurden (`kubectl get certificate -n matrix`), ist dein Matrix-Stack unter `https://axion1337.chat` erreichbar.