2026-09-10 01:26:24 +02:00
Ja, das ist hier der sauberste Weg.
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
Wenn auf dem neuen Server noch keine produktiven Mails gesammelt wurden, dann ist es sinnvoller:
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
- Container stoppen
- alte unklare Struktur entfernen
- Verzeichnislayout sauber neu aufbauen
- Compose korrigieren
- dann gezielt
- `postfix-accounts.cf`
- `fetchmailrc`
- Maildaten
- Zertifikate
einzuspielen
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
So hast du danach ein klares, wartbares Setup.
2026-09-08 09:58:36 +02:00
---
2026-09-10 01:26:24 +02:00
# Zielstruktur
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
Ich wuerde fuer dich diese Struktur verwenden:
2026-09-08 09:58:36 +02:00
```text
/srv/mail-fetch01/
2026-09-10 01:26:24 +02:00
├── backup/
├── compose/
│ └── mail/
│ └── compose.yaml
├── config/
│ └── mailserver/
│ ├── fetchmailrc
│ ├── postfix-accounts.cf
│ ├── dovecot.cf
│ ├── postfix-main.cf
│ └── postfix-master.cf
├── data/
│ ├── mailserver/
│ │ ├── certs/
│ │ ├── dkim/
│ │ ├── logs/
│ │ ├── maildata/
│ │ └── state/
│ ├── mariadb/
│ └── roundcube/
├── README.md
└── scripts/
2026-09-08 09:58:36 +02:00
```
2026-09-10 01:26:24 +02:00
Hinweis:
- `dovecot.cf` , `postfix-main.cf` , `postfix-master.cf` nur wenn du sie wirklich brauchst
- sonst koennen sie auch wegbleiben
2026-09-08 09:58:36 +02:00
---
2026-09-10 01:26:24 +02:00
# Neue saubere Compose
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
Ich wuerde diese Version nehmen:
2026-09-08 09:58:36 +02:00
```yaml
x-logging: & default-logging
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
services:
mailserver:
image: mailserver/docker-mailserver:latest
container_name: mailserver
hostname: mail
domainname: theboxhub.ch
restart: unless-stopped
stop_grace_period: 1m
dns:
- 10.100.20.49
- 1.1.1.1
environment:
TZ: Europe/Zurich
ENABLE_FETCHMAIL: 1
FETCHMAIL_POLL: 60
OVERTAKE_IP: 1
ENABLE_SPAMASSASSIN: 1
ENABLE_CLAMAV: 0
SSL_TYPE: manual
SSL_CERT_PATH: /etc/letsencrypt/live/mailserver/fullchain.pem
SSL_KEY_PATH: /etc/letsencrypt/live/mailserver/privkey.pem
2026-09-10 01:26:24 +02:00
PERMIT_DOCKER: none
2026-09-08 09:58:36 +02:00
ONE_DIR: 1
DMS_DEBUG: 0
ports:
- "25:25"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
volumes:
- /srv/mail-fetch01/data/mailserver/maildata:/var/mail
2026-09-10 01:26:24 +02:00
- /srv/mail-fetch01/config/mailserver:/tmp/docker-mailserver
2026-09-08 09:58:36 +02:00
- /srv/mail-fetch01/data/mailserver/state:/var/mail-state
- /srv/mail-fetch01/data/mailserver/logs:/var/log/mail
- /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/privkey.pem:/etc/letsencrypt/live/mailserver/privkey.pem:ro
2026-09-10 01:26:24 +02:00
- /srv/mail-fetch01/config/mailserver/fetchmailrc:/etc/fetchmailrc:ro
2026-09-08 09:58:36 +02:00
cap_add:
- NET_ADMIN
- SYS_PTRACE
healthcheck:
test: ["CMD-SHELL", "ss -ltn | grep -q ':25' || exit 1"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
logging: *default-logging
db-mail:
image: mariadb:10.11
container_name: db-mail
restart: unless-stopped
environment:
TZ: Europe/Zurich
2026-09-10 01:26:24 +02:00
MYSQL_ROOT_PASSWORD: "MAILROOT_9kL4mQ2xT7vP1cD8"
2026-09-08 09:58:36 +02:00
MYSQL_DATABASE: "roundcube"
MYSQL_USER: "roundcube"
2026-09-10 01:26:24 +02:00
MYSQL_PASSWORD: "RCPASS_8xT2mQ7vL4pD1cK9"
2026-09-08 09:58:36 +02:00
volumes:
- /srv/mail-fetch01/data/mariadb:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
logging: *default-logging
roundcube:
image: roundcube/roundcubemail:latest
container_name: roundcube
restart: unless-stopped
2026-09-10 01:26:24 +02:00
depends_on:
db-mail:
condition: service_healthy
2026-09-08 09:58:36 +02:00
environment:
TZ: Europe/Zurich
ROUNDCUBEMAIL_DB_TYPE: mysql
ROUNDCUBEMAIL_DB_HOST: db-mail
ROUNDCUBEMAIL_DB_NAME: roundcube
ROUNDCUBEMAIL_DB_USER: roundcube
2026-09-10 01:26:24 +02:00
ROUNDCUBEMAIL_DB_PASSWORD: "RCPASS_8xT2mQ7vL4pD1cK9"
2026-09-08 09:58:36 +02:00
ROUNDCUBEMAIL_SKIN: elastic
ROUNDCUBEMAIL_DEFAULT_HOST: "tls://mail.theboxhub.ch"
ROUNDCUBEMAIL_DEFAULT_PORT: 143
ROUNDCUBEMAIL_SMTP_SERVER: "tls://mail.theboxhub.ch"
ROUNDCUBEMAIL_SMTP_PORT: 587
2026-09-10 01:26:24 +02:00
ROUNDCUBEMAIL_IMAP_CONN_OPTIONS: '{"ssl":{"verify_peer":true,"verify_peer_name":true,"allow_self_signed":false}}'
ROUNDCUBEMAIL_SMTP_CONN_OPTIONS: '{"ssl":{"verify_peer":true,"verify_peer_name":true,"allow_self_signed":false}}'
2026-09-08 09:58:36 +02:00
ports:
- "8080:80"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 5
start_period: 20s
logging: *default-logging
```
---
2026-09-10 01:26:24 +02:00
# Vorgehen Schritt fuer Schritt
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
## 1. Bestehende Container stoppen und entfernen
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
Im Compose-Ordner:
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
```bash
cd /srv/mail-fetch01/compose/mail
docker compose down
```
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
Zur Kontrolle:
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
```bash
docker ps -a
```
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
Wenn da noch `mailserver` , `db-mail` , `roundcube` stehen und du sie wirklich wegraeumen willst:
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
```bash
docker rm -f mailserver db-mail roundcube 2>/dev/null
```
2026-09-08 09:58:36 +02:00
---
2026-09-10 01:26:24 +02:00
## 2. Vorhandene Daten auf dem neuen Server loeschen
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
Da du bewusst neu aufsetzen willst:
```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
```
Optional auch leere Altlasten spaeter pruefen.
---
## 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
2026-09-08 09:58:36 +02:00
```
2026-09-10 01:26:24 +02:00
---
## 4. Compose-Datei neu schreiben
Datei:
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
```bash
/srv/mail-fetch01/compose/mail/compose.yaml
```
mit der bereinigten Version ersetzen.
Am besten vorher Backup:
```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
```
2026-09-08 09:58:36 +02:00
---
2026-09-10 01:26:24 +02:00
## 5. Alte Mailserver-Konfig exportieren
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
Auf dem alten Server:
```bash
sudo mkdir -p /xwackaBack/mail-export/config
sudo mkdir -p /xwackaBack/mail-export/maildata/theboxhub.ch
2026-09-08 09:58:36 +02:00
```
2026-09-10 01:26:24 +02:00
Dann:
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
```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/
2026-09-08 09:58:36 +02:00
```
2026-09-10 01:26:24 +02:00
Wenn du die alte Fetchmail-Datei sichern willst:
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
```bash
sudo rsync -avh /xToolbox/mail/config/fetchmail.cf /xwackaBack/mail-export/config/
```
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
Dann Rechte fuer Kopie:
```bash
sudo chown -R mrwacka:mrwacka /xwackaBack/mail-export
```
2026-09-08 09:58:36 +02:00
---
2026-09-10 01:26:24 +02:00
## 6. Daten auf neuen Server holen
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
### Account-Datei:
```bash
sudo rsync -avh --progress mrwacka@10 .100.20.20:/xwackaBack/mail-export/config/postfix-accounts.cf /srv/mail-fetch01/config/mailserver/
```
### Mailbox:
```bash
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/
```
### Fetchmail-Konfig:
Wenn du die bereits vorhandene `fetchmailrc` behalten willst, musst du nichts tun.
Wenn du die alte Datei uebernehmen willst:
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
```bash
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
2026-09-08 09:58:36 +02:00
```
2026-09-10 01:26:24 +02:00
Wenn deine aktuelle `fetchmailrc` schon korrekt ist, dann einfach so lassen.
2026-09-08 09:58:36 +02:00
---
2026-09-10 01:26:24 +02:00
## 7. Zertifikate bereitstellen
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
Pruefen:
```bash
ls -l /srv/mail-fetch01/data/mailserver/certs
2026-09-08 09:58:36 +02:00
```
2026-09-10 01:26:24 +02:00
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
```
2026-09-08 09:58:36 +02:00
---
2026-09-10 01:26:24 +02:00
## 8. Rechte fuer Konfig setzen
2026-09-08 09:58:36 +02:00
```bash
2026-09-10 01:26:24 +02:00
sudo chown root:root /srv/mail-fetch01/config/mailserver/postfix-accounts.cf
sudo chmod 644 /srv/mail-fetch01/config/mailserver/postfix-accounts.cf
sudo chown root:root /srv/mail-fetch01/config/mailserver/fetchmailrc
sudo chmod 600 /srv/mail-fetch01/config/mailserver/fetchmailrc
2026-09-08 09:58:36 +02:00
```
2026-09-10 01:26:24 +02:00
---
## 9. Kurz pruefen
2026-09-08 09:58:36 +02:00
```bash
2026-09-10 01:26:24 +02:00
tree /srv/mail-fetch01 -L 4
2026-09-08 09:58:36 +02:00
```
2026-09-10 01:26:24 +02:00
Besonders wichtig:
- `/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
2026-09-08 09:58:36 +02:00
```bash
2026-09-10 01:26:24 +02:00
cd /srv/mail-fetch01/compose/mail
docker compose up -d
2026-09-08 09:58:36 +02:00
```
2026-09-10 01:26:24 +02:00
Dann:
2026-09-08 09:58:36 +02:00
```bash
2026-09-10 01:26:24 +02:00
docker compose ps
docker logs -f mailserver
2026-09-08 09:58:36 +02:00
```
---
2026-09-10 01:26:24 +02:00
# 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
```
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
## Maildaten da?
2026-09-08 09:58:36 +02:00
```bash
2026-09-10 01:26:24 +02:00
du -sh /srv/mail-fetch01/data/mailserver/maildata/theboxhub.ch/jonas
2026-09-08 09:58:36 +02:00
```
2026-09-10 01:26:24 +02:00
## 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.
2026-09-08 09:58:36 +02:00
---
2026-09-10 01:26:24 +02:00
# Kurzfassung
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
Ja, das ist ein guter Plan:
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
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
2026-09-08 09:58:36 +02:00
2026-09-10 01:26:24 +02:00
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.