455 lines
No EOL
11 KiB
Markdown
455 lines
No EOL
11 KiB
Markdown
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. |