11 KiB
Ja, das ist hier der sauberste Weg.
Wenn auf dem neuen Server noch keine produktiven Mails gesammelt wurden, dann ist es sinnvoller:
- Container stoppen
- alte unklare Struktur entfernen
- Verzeichnislayout sauber neu aufbauen
- Compose korrigieren
- dann gezielt
postfix-accounts.cffetchmailrc- Maildaten
- Zertifikate einzuspielen
So hast du danach ein klares, wartbares Setup.
Zielstruktur
Ich wuerde fuer dich diese Struktur verwenden:
/srv/mail-fetch01/
├── 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/
Hinweis:
dovecot.cf,postfix-main.cf,postfix-master.cfnur wenn du sie wirklich brauchst- sonst koennen sie auch wegbleiben
Neue saubere Compose
Ich wuerde diese Version nehmen:
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
PERMIT_DOCKER: none
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
- /srv/mail-fetch01/config/mailserver:/tmp/docker-mailserver
- /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
- /srv/mail-fetch01/config/mailserver/fetchmailrc:/etc/fetchmailrc:ro
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
MYSQL_ROOT_PASSWORD: "MAILROOT_9kL4mQ2xT7vP1cD8"
MYSQL_DATABASE: "roundcube"
MYSQL_USER: "roundcube"
MYSQL_PASSWORD: "RCPASS_8xT2mQ7vL4pD1cK9"
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
depends_on:
db-mail:
condition: service_healthy
environment:
TZ: Europe/Zurich
ROUNDCUBEMAIL_DB_TYPE: mysql
ROUNDCUBEMAIL_DB_HOST: db-mail
ROUNDCUBEMAIL_DB_NAME: roundcube
ROUNDCUBEMAIL_DB_USER: roundcube
ROUNDCUBEMAIL_DB_PASSWORD: "RCPASS_8xT2mQ7vL4pD1cK9"
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
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}}'
ports:
- "8080:80"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 5
start_period: 20s
logging: *default-logging
Vorgehen Schritt fuer Schritt
1. Bestehende Container stoppen und entfernen
Im Compose-Ordner:
cd /srv/mail-fetch01/compose/mail
docker compose down
Zur Kontrolle:
docker ps -a
Wenn da noch mailserver, db-mail, roundcube stehen und du sie wirklich wegraeumen willst:
docker rm -f mailserver db-mail roundcube 2>/dev/null
2. Vorhandene Daten auf dem neuen Server loeschen
Da du bewusst neu aufsetzen willst:
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
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:
/srv/mail-fetch01/compose/mail/compose.yaml
mit der bereinigten Version ersetzen.
Am besten vorher Backup:
cp /srv/mail-fetch01/compose/mail/compose.yaml /srv/mail-fetch01/backup/compose/compose.yaml.bak
Dann editieren:
nano /srv/mail-fetch01/compose/mail/compose.yaml
5. Alte Mailserver-Konfig exportieren
Auf dem alten Server:
sudo mkdir -p /xwackaBack/mail-export/config
sudo mkdir -p /xwackaBack/mail-export/maildata/theboxhub.ch
Dann:
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:
sudo rsync -avh /xToolbox/mail/config/fetchmail.cf /xwackaBack/mail-export/config/
Dann Rechte fuer Kopie:
sudo chown -R mrwacka:mrwacka /xwackaBack/mail-export
6. Daten auf neuen Server holen
Account-Datei:
sudo rsync -avh --progress mrwacka@10.100.20.20:/xwackaBack/mail-export/config/postfix-accounts.cf /srv/mail-fetch01/config/mailserver/
Mailbox:
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:
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
Wenn deine aktuelle fetchmailrc schon korrekt ist, dann einfach so lassen.
7. Zertifikate bereitstellen
Pruefen:
ls -l /srv/mail-fetch01/data/mailserver/certs
Es muessen vorhanden sein:
fullchain.pemprivkey.pem
Falls noch nicht da, musst du sie zuerst dorthin kopieren.
Dann Rechte sinnvoll setzen:
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
8. Rechte fuer Konfig setzen
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
9. Kurz pruefen
tree /srv/mail-fetch01 -L 4
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
cd /srv/mail-fetch01/compose/mail
docker compose up -d
Dann:
docker compose ps
docker logs -f mailserver
Danach testen
IMAP-Port offen?
ss -ltnp | egrep '143|993|25|465|587|8080'
Mailkonto sichtbar?
Die Datei ist da:
cat /srv/mail-fetch01/config/mailserver/postfix-accounts.cf
Maildaten da?
du -sh /srv/mail-fetch01/data/mailserver/maildata/theboxhub.ch/jonas
Fetchmail-Konfig da?
sudo cat /srv/mail-fetch01/config/mailserver/fetchmailrc
Logs beobachten:
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.cfpostfix-main.cfpostfix-master.cf
wuerde ich vorerst nicht uebernehmen, ausser du weisst genau, warum du sie brauchst.
Starte zuerst mit:
postfix-accounts.cffetchmailrc
und den Maildaten.
Wenn alles laeuft, kannst du spaeter immer noch Erweiterungen machen.
Kurzfassung
Ja, das ist ein guter Plan:
- neue Container stoppen
- unklare Struktur loeschen
- sauber neu anlegen
- Compose korrigieren
postfix-accounts.cfnachconfig/mailserver- Maildaten nach
data/mailserver/maildata fetchmailrcsauber hinterlegen- Zertifikate bereitstellen
- frisch starten
- 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.