mail-fetch01/README.md

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.