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.cf` - `fetchmailrc` - Maildaten - Zertifikate einzuspielen So hast du danach ein klares, wartbares Setup. --- # Zielstruktur Ich wuerde fuer dich diese Struktur verwenden: ```text /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.cf` nur wenn du sie wirklich brauchst - sonst koennen sie auch wegbleiben --- # Neue saubere Compose Ich wuerde diese Version nehmen: ```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 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: ```bash cd /srv/mail-fetch01/compose/mail docker compose down ``` Zur Kontrolle: ```bash 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 ``` --- ## 2. Vorhandene Daten auf dem neuen Server loeschen 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 ``` --- ## 4. Compose-Datei neu schreiben Datei: ```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 ``` --- ## 5. Alte Mailserver-Konfig exportieren Auf dem alten Server: ```bash sudo mkdir -p /xwackaBack/mail-export/config sudo mkdir -p /xwackaBack/mail-export/maildata/theboxhub.ch ``` 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 ``` --- ## 6. Daten auf neuen Server holen ### 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: ```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 ``` Wenn deine aktuelle `fetchmailrc` schon korrekt ist, dann einfach so lassen. --- ## 7. Zertifikate bereitstellen Pruefen: ```bash ls -l /srv/mail-fetch01/data/mailserver/certs ``` 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 ``` --- ## 8. Rechte fuer Konfig setzen ```bash 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 ```bash 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 ```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.