roundcube mail01 / mail-fetch01 db-mail mail01 / mail-fetch01 mail-fetch / interner Mailstack mail01 / mail-fetch01
Find a file
2026-09-10 01:57:35 +02:00
compose/mail ro von fetchmailrc entfernt 2026-09-10 01:57:35 +02:00
config/mailserver angepasster Mailserver für Migration 2026-09-10 01:26:24 +02:00
data angepasster Mailserver für Migration 2026-09-10 01:26:24 +02:00
scripts angepasster Mailserver für Migration 2026-09-10 01:26:24 +02:00
README.md angepasster Mailserver für Migration 2026-09-10 01:26:24 +02:00

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:

/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:

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.pem
  • privkey.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.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.