angepasster Mailserver für Migration

This commit is contained in:
mrwacka 2026-09-10 01:26:24 +02:00
parent 56addbe241
commit 759ae71005
10 changed files with 288 additions and 363 deletions

649
README.md
View file

@ -1,242 +1,61 @@
Perfekt. Dann bekommst du jetzt das komplette Zielbild fuer den Mailserver auf `10.100.20.16` mit: Ja, das ist hier der sauberste Weg.
- Zielstruktur auf der VM Wenn auf dem neuen Server noch keine produktiven Mails gesammelt wurden, dann ist es sinnvoller:
- Repo-Struktur analog zu deinen Infra-Repos
- Compose-Dateien
- Config-Grundstruktur
- Scripts fuer Verzeichnisse und Deployment
- Certbot-Pfade passend zu
- `/srv/mail-fetch01/data/mailserver/certs/fullchain.pem`
- `/srv/mail-fetch01/data/mailserver/certs/privkey.pem`
Ich halte es bewusst so, dass du es sauber ins Repo legen, pushen und auf der Mail-VM deployen kannst. - Container stoppen
- alte unklare Struktur entfernen
- Verzeichnislayout sauber neu aufbauen
- Compose korrigieren
- dann gezielt
- `postfix-accounts.cf`
- `fetchmailrc`
- Maildaten
- Zertifikate
einzuspielen
So hast du danach ein klares, wartbares Setup.
--- ---
# 1. Zielbild # Zielstruktur
## Dienste Ich wuerde fuer dich diese Struktur verwenden:
- `mailserver` mit docker-mailserver
- `db-mail` fuer Roundcube
- `roundcube`
## Domains
- Mailserver: `mail.theboxhub.ch`
- Webmail: `webmail.theboxhub.ch`
- Maildomain: `theboxhub.ch`
## DNS
- `mail.theboxhub.ch` -> `10.100.20.16`
- `webmail.theboxhub.ch` -> `10.100.20.10`
- `MX theboxhub.ch` -> `mail.theboxhub.ch`
## Zertifikate lokal auf der Mail-VM
- `/srv/mail-fetch01/data/mailserver/certs/fullchain.pem`
- `/srv/mail-fetch01/data/mailserver/certs/privkey.pem`
---
# 2. Repo-Struktur
Ich schlage fuer dein Repo vor:
```text
/srv/workspace/infra/mail-fetch01/
├── backup
│ ├── compose
│ ├── databases
│ ├── mailserver
│ └── roundcube
├── compose
│ ├── mailserver
│ │ └── compose.yaml
│ ├── mariadb
│ │ └── compose.yaml
│ └── roundcube
│ └── compose.yaml
├── config
│ ├── mailserver
│ │ ├── postfix-main.cf
│ │ ├── postfix-master.cf
│ │ ├── dovecot.cf
│ │ ├── fetchmailrc
│ │ └── .gitkeep
│ ├── mariadb
│ │ └── .gitkeep
│ └── roundcube
│ └── .gitkeep
├── data
│ ├── mailserver
│ │ ├── certs
│ │ ├── config
│ │ ├── dkim
│ │ ├── logs
│ │ ├── maildata
│ │ └── state
│ ├── mariadb
│ │ └── .gitkeep
│ └── roundcube
│ └── .gitkeep
├── README.md
└── scripts
├── deploy.sh
└── init-dirs.sh
```
Wichtig:
- im Repo sind `data/...` und `backup/...` nur Strukturplatzhalter
- echte produktive Daten liegen spaeter auf der VM unter `/srv/mail-fetch01/...`
---
# 3. Repo-Struktur in code-server anlegen
Wenn du das Repo unter `/srv/workspace/infra/mail-fetch01` vorbereitest:
```bash
cd /srv/workspace/infra
mkdir -p mail-fetch01
cd /srv/workspace/infra/mail-fetch01
mkdir -p backup/{compose,databases,mailserver,roundcube}
mkdir -p compose/{mailserver,mariadb,roundcube}
mkdir -p config/mailserver
mkdir -p config/{mariadb,roundcube}
mkdir -p data/mailserver/{certs,config,dkim,logs,maildata,state}
mkdir -p data/mariadb
mkdir -p data/roundcube
mkdir -p scripts
touch compose/mailserver/compose.yaml
touch compose/mariadb/compose.yaml
touch compose/roundcube/compose.yaml
touch config/mailserver/postfix-main.cf
touch config/mailserver/postfix-master.cf
touch config/mailserver/dovecot.cf
touch config/mailserver/fetchmailrc
touch config/mariadb/.gitkeep
touch config/roundcube/.gitkeep
touch data/mailserver/certs/.gitkeep
touch data/mailserver/config/.gitkeep
touch data/mailserver/dkim/.gitkeep
touch data/mailserver/logs/.gitkeep
touch data/mailserver/maildata/.gitkeep
touch data/mailserver/state/.gitkeep
touch data/mariadb/.gitkeep
touch data/roundcube/.gitkeep
touch scripts/init-dirs.sh
touch scripts/deploy.sh
touch README.md
```
---
# 4. Zielstruktur auf der Mail-VM
Das wird spaeter durch `init-dirs.sh` erzeugt:
```text ```text
/srv/mail-fetch01/ /srv/mail-fetch01/
├── backup ├── backup/
│ ├── compose ├── compose/
│ ├── databases │ └── mail/
│ ├── mailserver │ └── compose.yaml
│ └── roundcube ├── config/
├── compose │ └── mailserver/
│ ├── mailserver │ ├── fetchmailrc
│ ├── mariadb │ ├── postfix-accounts.cf
│ └── roundcube │ ├── dovecot.cf
├── config │ ├── postfix-main.cf
│ ├── mailserver │ └── postfix-master.cf
│ ├── mariadb ├── data/
│ └── roundcube │ ├── mailserver/
└── data │ │ ├── certs/
├── mailserver │ │ ├── dkim/
│ ├── certs │ │ ├── logs/
│ ├── config │ │ ├── maildata/
│ ├── dkim │ │ └── state/
│ ├── logs │ ├── mariadb/
│ ├── maildata │ └── roundcube/
│ └── state ├── README.md
├── mariadb └── scripts/
└── roundcube
``` ```
Hinweis:
- `dovecot.cf`, `postfix-main.cf`, `postfix-master.cf` nur wenn du sie wirklich brauchst
- sonst koennen sie auch wegbleiben
--- ---
# 5. scripts/init-dirs.sh # Neue saubere Compose
Datei: Ich wuerde diese Version nehmen:
`/srv/workspace/infra/mail-fetch01/scripts/init-dirs.sh`
```bash
#!/usr/bin/env bash
set -euo pipefail
echo "Erstelle Verzeichnisstruktur unter /srv/mail-fetch01 ..."
sudo mkdir -p /srv/mail-fetch01/backup/{compose,databases,mailserver,roundcube}
sudo mkdir -p /srv/mail-fetch01/compose/{mailserver,mariadb,roundcube}
sudo mkdir -p /srv/mail-fetch01/config/{mailserver,mariadb,roundcube}
sudo mkdir -p /srv/mail-fetch01/data/mailserver/{certs,config,dkim,logs,maildata,state}
sudo mkdir -p /srv/mail-fetch01/data/mariadb
sudo mkdir -p /srv/mail-fetch01/data/roundcube
echo "Setze Besitz auf aktuellen Benutzer: $USER"
sudo chown -R "$USER:$USER" /srv/mail-fetch01
echo "Fertig."
tree /srv/mail-fetch01 || true
```
Ausfuehrbar machen:
```bash
chmod +x /srv/workspace/infra/mail-fetch01/scripts/init-dirs.sh
```
---
# 6. scripts/deploy.sh
Datei:
`/srv/workspace/infra/mail-fetch01/scripts/deploy.sh`
```bash
#!/usr/bin/env bash
set -euo pipefail
REPO_ROOT="/srv/workspace/infra/mail-fetch01"
TARGET_ROOT="/srv/mail-fetch01"
echo "Deploye Compose-Dateien ..."
sudo mkdir -p "$TARGET_ROOT/compose"
sudo cp -r "$REPO_ROOT/compose/." "$TARGET_ROOT/compose/"
echo "Deploye Konfigurationen ..."
sudo mkdir -p "$TARGET_ROOT/config"
sudo cp -r "$REPO_ROOT/config/." "$TARGET_ROOT/config/"
echo "Setze Besitz auf aktuellen Benutzer: $USER"
sudo chown -R "$USER:$USER" "$TARGET_ROOT"
echo "Fertig."
```
Ausfuehrbar machen:
```bash
chmod +x /srv/workspace/infra/mail-fetch01/scripts/deploy.sh
```
---
# 7. Compose mailserver
Datei:
`/srv/workspace/infra/mail-fetch01/compose/mailserver/compose.yaml`
```yaml ```yaml
x-logging: &default-logging x-logging: &default-logging
@ -266,7 +85,7 @@ services:
SSL_TYPE: manual SSL_TYPE: manual
SSL_CERT_PATH: /etc/letsencrypt/live/mailserver/fullchain.pem SSL_CERT_PATH: /etc/letsencrypt/live/mailserver/fullchain.pem
SSL_KEY_PATH: /etc/letsencrypt/live/mailserver/privkey.pem SSL_KEY_PATH: /etc/letsencrypt/live/mailserver/privkey.pem
PERMIT_DOCKER: connected-networks PERMIT_DOCKER: none
ONE_DIR: 1 ONE_DIR: 1
DMS_DEBUG: 0 DMS_DEBUG: 0
ports: ports:
@ -277,12 +96,13 @@ services:
- "993:993" - "993:993"
volumes: volumes:
- /srv/mail-fetch01/data/mailserver/maildata:/var/mail - /srv/mail-fetch01/data/mailserver/maildata:/var/mail
- /srv/mail-fetch01/data/mailserver/config:/tmp/docker-mailserver - /srv/mail-fetch01/config/mailserver:/tmp/docker-mailserver
- /srv/mail-fetch01/data/mailserver/state:/var/mail-state - /srv/mail-fetch01/data/mailserver/state:/var/mail-state
- /srv/mail-fetch01/data/mailserver/logs:/var/log/mail - /srv/mail-fetch01/data/mailserver/logs:/var/log/mail
- /srv/mail-fetch01/data/mailserver/dkim:/etc/opendkim/keys - /srv/mail-fetch01/data/mailserver/dkim:/etc/opendkim/keys
- /srv/mail-fetch01/data/mailserver/certs/fullchain.pem:/etc/letsencrypt/live/mailserver/fullchain.pem:ro - /srv/mail-fetch01/data/mailserver/certs/fullchain.pem:/etc/letsencrypt/live/mailserver/fullchain.pem:ro
- /srv/mail-fetch01/data/mailserver/certs/privkey.pem:/etc/letsencrypt/live/mailserver/privkey.pem:ro - /srv/mail-fetch01/data/mailserver/certs/privkey.pem:/etc/letsencrypt/live/mailserver/privkey.pem:ro
- /srv/mail-fetch01/config/mailserver/fetchmailrc:/etc/fetchmailrc:ro
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
- SYS_PTRACE - SYS_PTRACE
@ -293,32 +113,17 @@ services:
retries: 5 retries: 5
start_period: 30s start_period: 30s
logging: *default-logging logging: *default-logging
```
---
# 8. Compose MariaDB fuer Roundcube
Datei:
`/srv/workspace/infra/mail-fetch01/compose/mariadb/compose.yaml`
```yaml
x-logging: &default-logging
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
services:
db-mail: db-mail:
image: mariadb:10.11 image: mariadb:10.11
container_name: db-mail container_name: db-mail
restart: unless-stopped restart: unless-stopped
environment: environment:
TZ: Europe/Zurich TZ: Europe/Zurich
MYSQL_ROOT_PASSWORD: "MAILROOT_4mK9pL2xT7vQ1cD8" MYSQL_ROOT_PASSWORD: "MAILROOT_9kL4mQ2xT7vP1cD8"
MYSQL_DATABASE: "roundcube" MYSQL_DATABASE: "roundcube"
MYSQL_USER: "roundcube" MYSQL_USER: "roundcube"
MYSQL_PASSWORD: "RCPASS_7xL2mQ9tK4pD1cV8" MYSQL_PASSWORD: "RCPASS_8xT2mQ7vL4pD1cK9"
volumes: volumes:
- /srv/mail-fetch01/data/mariadb:/var/lib/mysql - /srv/mail-fetch01/data/mariadb:/var/lib/mysql
healthcheck: healthcheck:
@ -328,40 +133,28 @@ services:
retries: 5 retries: 5
start_period: 15s start_period: 15s
logging: *default-logging logging: *default-logging
```
---
# 9. Compose Roundcube
Datei:
`/srv/workspace/infra/mail-fetch01/compose/roundcube/compose.yaml`
```yaml
x-logging: &default-logging
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
services:
roundcube: roundcube:
image: roundcube/roundcubemail:latest image: roundcube/roundcubemail:latest
container_name: roundcube container_name: roundcube
restart: unless-stopped restart: unless-stopped
depends_on:
db-mail:
condition: service_healthy
environment: environment:
TZ: Europe/Zurich TZ: Europe/Zurich
ROUNDCUBEMAIL_DB_TYPE: mysql ROUNDCUBEMAIL_DB_TYPE: mysql
ROUNDCUBEMAIL_DB_HOST: db-mail ROUNDCUBEMAIL_DB_HOST: db-mail
ROUNDCUBEMAIL_DB_NAME: roundcube ROUNDCUBEMAIL_DB_NAME: roundcube
ROUNDCUBEMAIL_DB_USER: roundcube ROUNDCUBEMAIL_DB_USER: roundcube
ROUNDCUBEMAIL_DB_PASSWORD: "RCPASS_7xL2mQ9tK4pD1cV8" ROUNDCUBEMAIL_DB_PASSWORD: "RCPASS_8xT2mQ7vL4pD1cK9"
ROUNDCUBEMAIL_SKIN: elastic ROUNDCUBEMAIL_SKIN: elastic
ROUNDCUBEMAIL_DEFAULT_HOST: "tls://mail.theboxhub.ch" ROUNDCUBEMAIL_DEFAULT_HOST: "tls://mail.theboxhub.ch"
ROUNDCUBEMAIL_DEFAULT_PORT: 143 ROUNDCUBEMAIL_DEFAULT_PORT: 143
ROUNDCUBEMAIL_SMTP_SERVER: "tls://mail.theboxhub.ch" ROUNDCUBEMAIL_SMTP_SERVER: "tls://mail.theboxhub.ch"
ROUNDCUBEMAIL_SMTP_PORT: 587 ROUNDCUBEMAIL_SMTP_PORT: 587
ROUNDCUBEMAIL_IMAP_CONN_OPTIONS: '{"ssl":{"verify_peer":false,"verify_peer_name":false,"allow_self_signed":true}}' ROUNDCUBEMAIL_IMAP_CONN_OPTIONS: '{"ssl":{"verify_peer":true,"verify_peer_name":true,"allow_self_signed":false}}'
ROUNDCUBEMAIL_SMTP_CONN_OPTIONS: '{"ssl":{"verify_peer":false,"verify_peer_name":false,"allow_self_signed":true}}' ROUNDCUBEMAIL_SMTP_CONN_OPTIONS: '{"ssl":{"verify_peer":true,"verify_peer_name":true,"allow_self_signed":false}}'
ports: ports:
- "8080:80" - "8080:80"
healthcheck: healthcheck:
@ -373,158 +166,290 @@ services:
logging: *default-logging logging: *default-logging
``` ```
Wichtig:
- NPM soll spaeter `webmail.theboxhub.ch` auf `10.100.20.16:8080` weiterleiten.
--- ---
# 10. Wichtiger Hinweis zu den getrennten Compose-Dateien # Vorgehen Schritt fuer Schritt
Da du drei getrennte Compose-Dateien willst, brauchen die Dienste fuer `roundcube` und `db-mail` einen gemeinsamen Compose-Kontext oder ein gemeinsames Netz.
Am saubersten gibt es dafuer zwei Wege: ## 1. Bestehende Container stoppen und entfernen
## Variante A - alles in eine gemeinsame Mail-Compose Im Compose-Ordner:
Einfacher im Betrieb.
## Variante B - externes Docker-Netz ```bash
Sauber getrennt, aber etwas mehr Aufwand. cd /srv/mail-fetch01/compose/mail
docker compose down
Da du explizit nach Compose, Struktur und Config fragst, empfehle ich fuer Mail hier klar:
## Empfehlung
**Mailserver, Roundcube und DB in eine gemeinsame Compose-Datei packen.**
Das ist fuer dieses Stack viel robuster.
Wenn du willst, kannst du die Repo-Struktur trotzdem getrennt behalten, aber technisch ist **eine einzige `compose/mail/compose.yaml`** besser.
---
# 11. Deshalb meine echte Empfehlung: eine gemeinsame Mail-Compose
Wenn du es operativ sauber willst, nimm statt 3 Dateien besser diese Struktur:
```text
compose/
└── mail
└── compose.yaml
``` ```
Mit allen 3 Services zusammen. Zur Kontrolle:
Wenn du willst, schreibe ich dir diese Gesamtdatei sofort. ```bash
Das ist fuer dein Setup deutlich praktischer als drei isolierte Stacks. docker ps -a
```
Wenn da noch `mailserver`, `db-mail`, `roundcube` stehen und du sie wirklich wegraeumen willst:
```bash
docker rm -f mailserver db-mail roundcube 2>/dev/null
```
--- ---
# 12. Mailserver-Configstruktur ## 2. Vorhandene Daten auf dem neuen Server loeschen
Fuer docker-mailserver liegen die aktiven Dateien unter:
```text Da du bewusst neu aufsetzen willst:
/srv/mail-fetch01/data/mailserver/config/
```bash
sudo rm -rf /srv/mail-fetch01/data/mailserver
sudo rm -rf /srv/mail-fetch01/data/mariadb
sudo rm -rf /srv/mail-fetch01/data/roundcube
sudo rm -rf /srv/mail-fetch01/config/mailserver
``` ```
Im Repo koennen wir Vorlagen unter: Optional auch leere Altlasten spaeter pruefen.
```text
/srv/workspace/infra/mail-fetch01/config/mailserver/
```
ablegen.
## Minimal noetig
- `postfix-main.cf`
- `postfix-master.cf`
- `dovecot.cf`
- `fetchmailrc`
Hinweis:
docker-mailserver braucht nicht zwingend alle davon. Vieles kann ueber `setup` und Standardconfig laufen.
--- ---
# 13. fetchmailrc Vorlage ## 3. Ordner sauber neu anlegen
```bash
sudo mkdir -p /srv/mail-fetch01/config/mailserver
sudo mkdir -p /srv/mail-fetch01/data/mailserver/{certs,dkim,logs,maildata,state}
sudo mkdir -p /srv/mail-fetch01/data/mariadb
sudo mkdir -p /srv/mail-fetch01/data/roundcube
```
---
## 4. Compose-Datei neu schreiben
Datei: Datei:
`/srv/workspace/infra/mail-fetch01/config/mailserver/fetchmailrc`
```conf ```bash
set daemon 60 /srv/mail-fetch01/compose/mail/compose.yaml
set syslog
poll imap.example.com with proto IMAP
user "dein.externes.postfach@example.com" there with password "DEIN_EXTERNES_PASSWORT" is "jonas@theboxhub.ch" here
ssl
fetchall
``` ```
Wichtig: mit der bereinigten Version ersetzen.
- das ist nur eine Vorlage
- Rechte spaeter auf der Ziel-VM unbedingt restriktiv setzen: Am besten vorher Backup:
```bash
chmod 600 /srv/mail-fetch01/config/mailserver/fetchmailrc ```bash
``` cp /srv/mail-fetch01/compose/mail/compose.yaml /srv/mail-fetch01/backup/compose/compose.yaml.bak
```
Dann editieren:
```bash
nano /srv/mail-fetch01/compose/mail/compose.yaml
```
--- ---
# 14. Zertifikate ## 5. Alte Mailserver-Konfig exportieren
Du hast bestaetigt:
```text Auf dem alten Server:
/srv/mail-fetch01/data/mailserver/certs/fullchain.pem
/srv/mail-fetch01/data/mailserver/certs/privkey.pem ```bash
sudo mkdir -p /xwackaBack/mail-export/config
sudo mkdir -p /xwackaBack/mail-export/maildata/theboxhub.ch
``` ```
Das passt genau zu obiger Compose. Dann:
```bash
sudo rsync -avh /xToolbox/mail/config/postfix-accounts.cf /xwackaBack/mail-export/config/
sudo rsync -avh /xVault/mail/maildata/theboxhub.ch/jonas /xwackaBack/mail-export/maildata/theboxhub.ch/
```
Wenn du die alte Fetchmail-Datei sichern willst:
```bash
sudo rsync -avh /xToolbox/mail/config/fetchmail.cf /xwackaBack/mail-export/config/
```
Dann Rechte fuer Kopie:
```bash
sudo chown -R mrwacka:mrwacka /xwackaBack/mail-export
```
--- ---
# 15. Setup nach Clone auf Ziel-VM ## 6. Daten auf neuen Server holen
## Repo klonen ### Account-Datei:
```bash ```bash
cd /srv/workspace/infra sudo rsync -avh --progress mrwacka@10.100.20.20:/xwackaBack/mail-export/config/postfix-accounts.cf /srv/mail-fetch01/config/mailserver/
git clone <dein-repo> mail-fetch01
cd mail-fetch01
``` ```
## Zielstruktur erzeugen ### Mailbox:
```bash ```bash
./scripts/init-dirs.sh sudo mkdir -p /srv/mail-fetch01/data/mailserver/maildata/theboxhub.ch
sudo rsync -avh --progress mrwacka@10.100.20.20:/xwackaBack/mail-export/maildata/theboxhub.ch/jonas /srv/mail-fetch01/data/mailserver/maildata/theboxhub.ch/
``` ```
## Compose und Config deployen ### Fetchmail-Konfig:
Wenn du die bereits vorhandene `fetchmailrc` behalten willst, musst du nichts tun.
Wenn du die alte Datei uebernehmen willst:
```bash ```bash
./scripts/deploy.sh rsync -avh --progress mrwacka@10.100.20.20:/xwackaBack/mail-export/config/fetchmail.cf /tmp/fetchmail.cf
sudo mv /tmp/fetchmail.cf /srv/mail-fetch01/config/mailserver/fetchmailrc
sudo chown root:root /srv/mail-fetch01/config/mailserver/fetchmailrc
sudo chmod 600 /srv/mail-fetch01/config/mailserver/fetchmailrc
``` ```
## Zertifikate ablegen Wenn deine aktuelle `fetchmailrc` schon korrekt ist, dann einfach so lassen.
---
## 7. Zertifikate bereitstellen
Pruefen:
```bash ```bash
sudo cp /etc/letsencrypt/live/mail.theboxhub.ch/fullchain.pem /srv/mail-infetch01t01/data/mailserver/certs/fullchain.pem ls -l /srv/mail-fetch01/data/mailserver/certs
sudo cp /etc/letsencrypt/live/mail.theboxhub.ch/privkey.pem /srv/mail-fetch01/data/mailserver/certs/privkey.pem ```
Es muessen vorhanden sein:
- `fullchain.pem`
- `privkey.pem`
Falls noch nicht da, musst du sie zuerst dorthin kopieren.
Dann Rechte sinnvoll setzen:
```bash
sudo chown root:root /srv/mail-fetch01/data/mailserver/certs/fullchain.pem
sudo chown root:root /srv/mail-fetch01/data/mailserver/certs/privkey.pem
sudo chmod 644 /srv/mail-fetch01/data/mailserver/certs/fullchain.pem
sudo chmod 600 /srv/mail-fetch01/data/mailserver/certs/privkey.pem sudo chmod 600 /srv/mail-fetch01/data/mailserver/certs/privkey.pem
``` ```
--- ---
# 16. Erster Start ## 8. Rechte fuer Konfig setzen
Wenn du bei den 3 Compose-Dateien bleibst:
```bash ```bash
cd /srv/mail-fetch01/compose/mariadb && docker compose up -d sudo chown root:root /srv/mail-fetch01/config/mailserver/postfix-accounts.cf
cd /srv/mail-fetch01/compose/mailserver && docker compose up -d sudo chmod 644 /srv/mail-fetch01/config/mailserver/postfix-accounts.cf
cd /srv/mail-fetch01/compose/roundcube && docker compose up -d
sudo chown root:root /srv/mail-fetch01/config/mailserver/fetchmailrc
sudo chmod 600 /srv/mail-fetch01/config/mailserver/fetchmailrc
``` ```
--- ---
# 17. Aber nochmals: meine klare Empfehlung ## 9. Kurz pruefen
Fuer diesen Mail-Stack solltest du wirklich lieber **eine gemeinsame Compose-Datei** verwenden.
Sonst bekommst du unnoetig Aufwand mit Netzwerken, DNS innerhalb von Docker und Service-Namen.
## Wenn du magst ```bash
schreibe ich dir jetzt direkt als naechsten Schritt: tree /srv/mail-fetch01 -L 4
```
1. **die finale empfohlene Gesamtstruktur** Besonders wichtig:
2. **eine einzige saubere `compose/mail/compose.yaml`**
3. **die finalen Repo-Befehle zum Anlegen**
Das waere fuer deinen Mailserver die bessere produktive Variante. - `/srv/mail-fetch01/config/mailserver/postfix-accounts.cf`
- `/srv/mail-fetch01/config/mailserver/fetchmailrc`
- `/srv/mail-fetch01/data/mailserver/maildata/theboxhub.ch/jonas`
- `/srv/mail-fetch01/data/mailserver/certs/fullchain.pem`
- `/srv/mail-fetch01/data/mailserver/certs/privkey.pem`
---
## 10. Container starten
```bash
cd /srv/mail-fetch01/compose/mail
docker compose up -d
```
Dann:
```bash
docker compose ps
docker logs -f mailserver
```
---
# Danach testen
## IMAP-Port offen?
```bash
ss -ltnp | egrep '143|993|25|465|587|8080'
```
## Mailkonto sichtbar?
Die Datei ist da:
```bash
cat /srv/mail-fetch01/config/mailserver/postfix-accounts.cf
```
## Maildaten da?
```bash
du -sh /srv/mail-fetch01/data/mailserver/maildata/theboxhub.ch/jonas
```
## Fetchmail-Konfig da?
```bash
sudo cat /srv/mail-fetch01/config/mailserver/fetchmailrc
```
## Logs beobachten:
```bash
docker logs -f mailserver
```
Achte auf:
- Fehler bei Zertifikaten
- Fehler bei Fetchmail
- Fehler bei Dovecot/Postfix
- Permission-Probleme
---
# Wichtiger Hinweis zu Roundcube
Roundcube selbst braucht keine alten Maildaten. Es ist nur Webmail.
Die alten Mails liegen im Maildir, nicht in MariaDB.
Die MariaDB fuer Roundcube kannst du also ruhig frisch leer starten.
Das ist sogar sauberer.
---
# Mein Rat zu den optionalen Config-Dateien
Diese Dateien:
- `dovecot.cf`
- `postfix-main.cf`
- `postfix-master.cf`
wuerde ich **vorerst nicht** uebernehmen, ausser du weisst genau, warum du sie brauchst.
Starte zuerst mit:
- `postfix-accounts.cf`
- `fetchmailrc`
und den Maildaten.
Wenn alles laeuft, kannst du spaeter immer noch Erweiterungen machen.
---
# Kurzfassung
Ja, das ist ein guter Plan:
1. neue Container stoppen
2. unklare Struktur loeschen
3. sauber neu anlegen
4. Compose korrigieren
5. `postfix-accounts.cf` nach `config/mailserver`
6. Maildaten nach `data/mailserver/maildata`
7. `fetchmailrc` sauber hinterlegen
8. Zertifikate bereitstellen
9. frisch starten
10. testen
Wenn du willst, kann ich dir im naechsten Schritt noch eine ganz konkrete "copy paste"-Befehlsliste fuer den neuen Server und eine fuer den alten Server machen, ohne Erklaertext, nur als saubere Ausfuehrungsreihenfolge.

View file

@ -36,7 +36,7 @@ services:
- "993:993" - "993:993"
volumes: volumes:
- /srv/mail-fetch01/data/mailserver/maildata:/var/mail - /srv/mail-fetch01/data/mailserver/maildata:/var/mail
- /srv/mail-fetch01/data/mailserver/config:/tmp/docker-mailserver - /srv/mail-fetch01/config/mailserver:/tmp/docker-mailserver
- /srv/mail-fetch01/data/mailserver/state:/var/mail-state - /srv/mail-fetch01/data/mailserver/state:/var/mail-state
- /srv/mail-fetch01/data/mailserver/logs:/var/log/mail - /srv/mail-fetch01/data/mailserver/logs:/var/log/mail
- /srv/mail-fetch01/data/mailserver/dkim:/etc/opendkim/keys - /srv/mail-fetch01/data/mailserver/dkim:/etc/opendkim/keys

View file