angepasster Mailserver für Migration
This commit is contained in:
parent
56addbe241
commit
759ae71005
10 changed files with 288 additions and 363 deletions
649
README.md
649
README.md
|
|
@ -1,242 +1,61 @@
|
|||
Perfekt. Dann bekommst du jetzt das komplette Zielbild fuer den Mailserver auf `10.100.20.16` mit:
|
||||
Ja, das ist hier der sauberste Weg.
|
||||
|
||||
- Zielstruktur auf der VM
|
||||
- Repo-Struktur analog zu deinen Infra-Repos
|
||||
- Compose-Dateien
|
||||
- Config-Grundstruktur
|
||||
- Scripts fuer Verzeichnisse und Deployment
|
||||
- Certbot-Pfade passend zu
|
||||
- `/srv/mail-fetch01/data/mailserver/certs/fullchain.pem`
|
||||
- `/srv/mail-fetch01/data/mailserver/certs/privkey.pem`
|
||||
Wenn auf dem neuen Server noch keine produktiven Mails gesammelt wurden, dann ist es sinnvoller:
|
||||
|
||||
Ich halte es bewusst so, dass du es sauber ins Repo legen, pushen und auf der Mail-VM deployen kannst.
|
||||
- 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.
|
||||
|
||||
---
|
||||
|
||||
# 1. Zielbild
|
||||
# Zielstruktur
|
||||
|
||||
## Dienste
|
||||
- `mailserver` mit docker-mailserver
|
||||
- `db-mail` fuer Roundcube
|
||||
- `roundcube`
|
||||
|
||||
## Domains
|
||||
- Mailserver: `mail.theboxhub.ch`
|
||||
- Webmail: `webmail.theboxhub.ch`
|
||||
- Maildomain: `theboxhub.ch`
|
||||
|
||||
## DNS
|
||||
- `mail.theboxhub.ch` -> `10.100.20.16`
|
||||
- `webmail.theboxhub.ch` -> `10.100.20.10`
|
||||
- `MX theboxhub.ch` -> `mail.theboxhub.ch`
|
||||
|
||||
## Zertifikate lokal auf der Mail-VM
|
||||
- `/srv/mail-fetch01/data/mailserver/certs/fullchain.pem`
|
||||
- `/srv/mail-fetch01/data/mailserver/certs/privkey.pem`
|
||||
|
||||
---
|
||||
|
||||
# 2. Repo-Struktur
|
||||
Ich schlage fuer dein Repo vor:
|
||||
|
||||
```text
|
||||
/srv/workspace/infra/mail-fetch01/
|
||||
├── backup
|
||||
│ ├── compose
|
||||
│ ├── databases
|
||||
│ ├── mailserver
|
||||
│ └── roundcube
|
||||
├── compose
|
||||
│ ├── mailserver
|
||||
│ │ └── compose.yaml
|
||||
│ ├── mariadb
|
||||
│ │ └── compose.yaml
|
||||
│ └── roundcube
|
||||
│ └── compose.yaml
|
||||
├── config
|
||||
│ ├── mailserver
|
||||
│ │ ├── postfix-main.cf
|
||||
│ │ ├── postfix-master.cf
|
||||
│ │ ├── dovecot.cf
|
||||
│ │ ├── fetchmailrc
|
||||
│ │ └── .gitkeep
|
||||
│ ├── mariadb
|
||||
│ │ └── .gitkeep
|
||||
│ └── roundcube
|
||||
│ └── .gitkeep
|
||||
├── data
|
||||
│ ├── mailserver
|
||||
│ │ ├── certs
|
||||
│ │ ├── config
|
||||
│ │ ├── dkim
|
||||
│ │ ├── logs
|
||||
│ │ ├── maildata
|
||||
│ │ └── state
|
||||
│ ├── mariadb
|
||||
│ │ └── .gitkeep
|
||||
│ └── roundcube
|
||||
│ └── .gitkeep
|
||||
├── README.md
|
||||
└── scripts
|
||||
├── deploy.sh
|
||||
└── init-dirs.sh
|
||||
```
|
||||
|
||||
Wichtig:
|
||||
- im Repo sind `data/...` und `backup/...` nur Strukturplatzhalter
|
||||
- echte produktive Daten liegen spaeter auf der VM unter `/srv/mail-fetch01/...`
|
||||
|
||||
---
|
||||
|
||||
# 3. Repo-Struktur in code-server anlegen
|
||||
|
||||
Wenn du das Repo unter `/srv/workspace/infra/mail-fetch01` vorbereitest:
|
||||
|
||||
```bash
|
||||
cd /srv/workspace/infra
|
||||
mkdir -p mail-fetch01
|
||||
cd /srv/workspace/infra/mail-fetch01
|
||||
|
||||
mkdir -p backup/{compose,databases,mailserver,roundcube}
|
||||
mkdir -p compose/{mailserver,mariadb,roundcube}
|
||||
mkdir -p config/mailserver
|
||||
mkdir -p config/{mariadb,roundcube}
|
||||
mkdir -p data/mailserver/{certs,config,dkim,logs,maildata,state}
|
||||
mkdir -p data/mariadb
|
||||
mkdir -p data/roundcube
|
||||
mkdir -p scripts
|
||||
|
||||
touch compose/mailserver/compose.yaml
|
||||
touch compose/mariadb/compose.yaml
|
||||
touch compose/roundcube/compose.yaml
|
||||
|
||||
touch config/mailserver/postfix-main.cf
|
||||
touch config/mailserver/postfix-master.cf
|
||||
touch config/mailserver/dovecot.cf
|
||||
touch config/mailserver/fetchmailrc
|
||||
|
||||
touch config/mariadb/.gitkeep
|
||||
touch config/roundcube/.gitkeep
|
||||
|
||||
touch data/mailserver/certs/.gitkeep
|
||||
touch data/mailserver/config/.gitkeep
|
||||
touch data/mailserver/dkim/.gitkeep
|
||||
touch data/mailserver/logs/.gitkeep
|
||||
touch data/mailserver/maildata/.gitkeep
|
||||
touch data/mailserver/state/.gitkeep
|
||||
touch data/mariadb/.gitkeep
|
||||
touch data/roundcube/.gitkeep
|
||||
|
||||
touch scripts/init-dirs.sh
|
||||
touch scripts/deploy.sh
|
||||
touch README.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 4. Zielstruktur auf der Mail-VM
|
||||
Das wird spaeter durch `init-dirs.sh` erzeugt:
|
||||
Ich wuerde fuer dich diese Struktur verwenden:
|
||||
|
||||
```text
|
||||
/srv/mail-fetch01/
|
||||
├── backup
|
||||
│ ├── compose
|
||||
│ ├── databases
|
||||
│ ├── mailserver
|
||||
│ └── roundcube
|
||||
├── compose
|
||||
│ ├── mailserver
|
||||
│ ├── mariadb
|
||||
│ └── roundcube
|
||||
├── config
|
||||
│ ├── mailserver
|
||||
│ ├── mariadb
|
||||
│ └── roundcube
|
||||
└── data
|
||||
├── mailserver
|
||||
│ ├── certs
|
||||
│ ├── config
|
||||
│ ├── dkim
|
||||
│ ├── logs
|
||||
│ ├── maildata
|
||||
│ └── state
|
||||
├── mariadb
|
||||
└── roundcube
|
||||
├── 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
|
||||
|
||||
---
|
||||
|
||||
# 5. scripts/init-dirs.sh
|
||||
# Neue saubere Compose
|
||||
|
||||
Datei:
|
||||
`/srv/workspace/infra/mail-fetch01/scripts/init-dirs.sh`
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Erstelle Verzeichnisstruktur unter /srv/mail-fetch01 ..."
|
||||
|
||||
sudo mkdir -p /srv/mail-fetch01/backup/{compose,databases,mailserver,roundcube}
|
||||
sudo mkdir -p /srv/mail-fetch01/compose/{mailserver,mariadb,roundcube}
|
||||
sudo mkdir -p /srv/mail-fetch01/config/{mailserver,mariadb,roundcube}
|
||||
|
||||
sudo mkdir -p /srv/mail-fetch01/data/mailserver/{certs,config,dkim,logs,maildata,state}
|
||||
sudo mkdir -p /srv/mail-fetch01/data/mariadb
|
||||
sudo mkdir -p /srv/mail-fetch01/data/roundcube
|
||||
|
||||
echo "Setze Besitz auf aktuellen Benutzer: $USER"
|
||||
sudo chown -R "$USER:$USER" /srv/mail-fetch01
|
||||
|
||||
echo "Fertig."
|
||||
tree /srv/mail-fetch01 || true
|
||||
```
|
||||
|
||||
Ausfuehrbar machen:
|
||||
|
||||
```bash
|
||||
chmod +x /srv/workspace/infra/mail-fetch01/scripts/init-dirs.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 6. scripts/deploy.sh
|
||||
|
||||
Datei:
|
||||
`/srv/workspace/infra/mail-fetch01/scripts/deploy.sh`
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REPO_ROOT="/srv/workspace/infra/mail-fetch01"
|
||||
TARGET_ROOT="/srv/mail-fetch01"
|
||||
|
||||
echo "Deploye Compose-Dateien ..."
|
||||
sudo mkdir -p "$TARGET_ROOT/compose"
|
||||
sudo cp -r "$REPO_ROOT/compose/." "$TARGET_ROOT/compose/"
|
||||
|
||||
echo "Deploye Konfigurationen ..."
|
||||
sudo mkdir -p "$TARGET_ROOT/config"
|
||||
sudo cp -r "$REPO_ROOT/config/." "$TARGET_ROOT/config/"
|
||||
|
||||
echo "Setze Besitz auf aktuellen Benutzer: $USER"
|
||||
sudo chown -R "$USER:$USER" "$TARGET_ROOT"
|
||||
|
||||
echo "Fertig."
|
||||
```
|
||||
|
||||
Ausfuehrbar machen:
|
||||
|
||||
```bash
|
||||
chmod +x /srv/workspace/infra/mail-fetch01/scripts/deploy.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 7. Compose mailserver
|
||||
Datei:
|
||||
`/srv/workspace/infra/mail-fetch01/compose/mailserver/compose.yaml`
|
||||
Ich wuerde diese Version nehmen:
|
||||
|
||||
```yaml
|
||||
x-logging: &default-logging
|
||||
|
|
@ -266,7 +85,7 @@ services:
|
|||
SSL_TYPE: manual
|
||||
SSL_CERT_PATH: /etc/letsencrypt/live/mailserver/fullchain.pem
|
||||
SSL_KEY_PATH: /etc/letsencrypt/live/mailserver/privkey.pem
|
||||
PERMIT_DOCKER: connected-networks
|
||||
PERMIT_DOCKER: none
|
||||
ONE_DIR: 1
|
||||
DMS_DEBUG: 0
|
||||
ports:
|
||||
|
|
@ -277,12 +96,13 @@ services:
|
|||
- "993:993"
|
||||
volumes:
|
||||
- /srv/mail-fetch01/data/mailserver/maildata:/var/mail
|
||||
- /srv/mail-fetch01/data/mailserver/config:/tmp/docker-mailserver
|
||||
- /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
|
||||
|
|
@ -293,32 +113,17 @@ services:
|
|||
retries: 5
|
||||
start_period: 30s
|
||||
logging: *default-logging
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 8. Compose MariaDB fuer Roundcube
|
||||
Datei:
|
||||
`/srv/workspace/infra/mail-fetch01/compose/mariadb/compose.yaml`
|
||||
|
||||
```yaml
|
||||
x-logging: &default-logging
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
services:
|
||||
db-mail:
|
||||
image: mariadb:10.11
|
||||
container_name: db-mail
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
TZ: Europe/Zurich
|
||||
MYSQL_ROOT_PASSWORD: "MAILROOT_4mK9pL2xT7vQ1cD8"
|
||||
MYSQL_ROOT_PASSWORD: "MAILROOT_9kL4mQ2xT7vP1cD8"
|
||||
MYSQL_DATABASE: "roundcube"
|
||||
MYSQL_USER: "roundcube"
|
||||
MYSQL_PASSWORD: "RCPASS_7xL2mQ9tK4pD1cV8"
|
||||
MYSQL_PASSWORD: "RCPASS_8xT2mQ7vL4pD1cK9"
|
||||
volumes:
|
||||
- /srv/mail-fetch01/data/mariadb:/var/lib/mysql
|
||||
healthcheck:
|
||||
|
|
@ -328,40 +133,28 @@ services:
|
|||
retries: 5
|
||||
start_period: 15s
|
||||
logging: *default-logging
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 9. Compose Roundcube
|
||||
Datei:
|
||||
`/srv/workspace/infra/mail-fetch01/compose/roundcube/compose.yaml`
|
||||
|
||||
```yaml
|
||||
x-logging: &default-logging
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
services:
|
||||
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_7xL2mQ9tK4pD1cV8"
|
||||
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":false,"verify_peer_name":false,"allow_self_signed":true}}'
|
||||
ROUNDCUBEMAIL_SMTP_CONN_OPTIONS: '{"ssl":{"verify_peer":false,"verify_peer_name":false,"allow_self_signed":true}}'
|
||||
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:
|
||||
|
|
@ -373,158 +166,290 @@ services:
|
|||
logging: *default-logging
|
||||
```
|
||||
|
||||
Wichtig:
|
||||
- NPM soll spaeter `webmail.theboxhub.ch` auf `10.100.20.16:8080` weiterleiten.
|
||||
|
||||
---
|
||||
|
||||
# 10. Wichtiger Hinweis zu den getrennten Compose-Dateien
|
||||
Da du drei getrennte Compose-Dateien willst, brauchen die Dienste fuer `roundcube` und `db-mail` einen gemeinsamen Compose-Kontext oder ein gemeinsames Netz.
|
||||
# Vorgehen Schritt fuer Schritt
|
||||
|
||||
Am saubersten gibt es dafuer zwei Wege:
|
||||
## 1. Bestehende Container stoppen und entfernen
|
||||
|
||||
## Variante A - alles in eine gemeinsame Mail-Compose
|
||||
Einfacher im Betrieb.
|
||||
Im Compose-Ordner:
|
||||
|
||||
## Variante B - externes Docker-Netz
|
||||
Sauber getrennt, aber etwas mehr Aufwand.
|
||||
|
||||
Da du explizit nach Compose, Struktur und Config fragst, empfehle ich fuer Mail hier klar:
|
||||
|
||||
## Empfehlung
|
||||
**Mailserver, Roundcube und DB in eine gemeinsame Compose-Datei packen.**
|
||||
|
||||
Das ist fuer dieses Stack viel robuster.
|
||||
|
||||
Wenn du willst, kannst du die Repo-Struktur trotzdem getrennt behalten, aber technisch ist **eine einzige `compose/mail/compose.yaml`** besser.
|
||||
|
||||
---
|
||||
|
||||
# 11. Deshalb meine echte Empfehlung: eine gemeinsame Mail-Compose
|
||||
Wenn du es operativ sauber willst, nimm statt 3 Dateien besser diese Struktur:
|
||||
|
||||
```text
|
||||
compose/
|
||||
└── mail
|
||||
└── compose.yaml
|
||||
```bash
|
||||
cd /srv/mail-fetch01/compose/mail
|
||||
docker compose down
|
||||
```
|
||||
|
||||
Mit allen 3 Services zusammen.
|
||||
Zur Kontrolle:
|
||||
|
||||
Wenn du willst, schreibe ich dir diese Gesamtdatei sofort.
|
||||
Das ist fuer dein Setup deutlich praktischer als drei isolierte Stacks.
|
||||
```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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 12. Mailserver-Configstruktur
|
||||
Fuer docker-mailserver liegen die aktiven Dateien unter:
|
||||
## 2. Vorhandene Daten auf dem neuen Server loeschen
|
||||
|
||||
```text
|
||||
/srv/mail-fetch01/data/mailserver/config/
|
||||
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
|
||||
```
|
||||
|
||||
Im Repo koennen wir Vorlagen unter:
|
||||
|
||||
```text
|
||||
/srv/workspace/infra/mail-fetch01/config/mailserver/
|
||||
```
|
||||
|
||||
ablegen.
|
||||
|
||||
## Minimal noetig
|
||||
- `postfix-main.cf`
|
||||
- `postfix-master.cf`
|
||||
- `dovecot.cf`
|
||||
- `fetchmailrc`
|
||||
|
||||
Hinweis:
|
||||
docker-mailserver braucht nicht zwingend alle davon. Vieles kann ueber `setup` und Standardconfig laufen.
|
||||
Optional auch leere Altlasten spaeter pruefen.
|
||||
|
||||
---
|
||||
|
||||
# 13. fetchmailrc Vorlage
|
||||
## 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:
|
||||
`/srv/workspace/infra/mail-fetch01/config/mailserver/fetchmailrc`
|
||||
|
||||
```conf
|
||||
set daemon 60
|
||||
set syslog
|
||||
|
||||
poll imap.example.com with proto IMAP
|
||||
user "dein.externes.postfach@example.com" there with password "DEIN_EXTERNES_PASSWORT" is "jonas@theboxhub.ch" here
|
||||
ssl
|
||||
fetchall
|
||||
```bash
|
||||
/srv/mail-fetch01/compose/mail/compose.yaml
|
||||
```
|
||||
|
||||
Wichtig:
|
||||
- das ist nur eine Vorlage
|
||||
- Rechte spaeter auf der Ziel-VM unbedingt restriktiv setzen:
|
||||
```bash
|
||||
chmod 600 /srv/mail-fetch01/config/mailserver/fetchmailrc
|
||||
```
|
||||
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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 14. Zertifikate
|
||||
Du hast bestaetigt:
|
||||
## 5. Alte Mailserver-Konfig exportieren
|
||||
|
||||
```text
|
||||
/srv/mail-fetch01/data/mailserver/certs/fullchain.pem
|
||||
/srv/mail-fetch01/data/mailserver/certs/privkey.pem
|
||||
Auf dem alten Server:
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /xwackaBack/mail-export/config
|
||||
sudo mkdir -p /xwackaBack/mail-export/maildata/theboxhub.ch
|
||||
```
|
||||
|
||||
Das passt genau zu obiger Compose.
|
||||
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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 15. Setup nach Clone auf Ziel-VM
|
||||
## 6. Daten auf neuen Server holen
|
||||
|
||||
## Repo klonen
|
||||
### Account-Datei:
|
||||
```bash
|
||||
cd /srv/workspace/infra
|
||||
git clone <dein-repo> mail-fetch01
|
||||
cd mail-fetch01
|
||||
sudo rsync -avh --progress mrwacka@10.100.20.20:/xwackaBack/mail-export/config/postfix-accounts.cf /srv/mail-fetch01/config/mailserver/
|
||||
```
|
||||
|
||||
## Zielstruktur erzeugen
|
||||
### Mailbox:
|
||||
```bash
|
||||
./scripts/init-dirs.sh
|
||||
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/
|
||||
```
|
||||
|
||||
## Compose und Config deployen
|
||||
### Fetchmail-Konfig:
|
||||
Wenn du die bereits vorhandene `fetchmailrc` behalten willst, musst du nichts tun.
|
||||
Wenn du die alte Datei uebernehmen willst:
|
||||
|
||||
```bash
|
||||
./scripts/deploy.sh
|
||||
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
|
||||
```
|
||||
|
||||
## Zertifikate ablegen
|
||||
Wenn deine aktuelle `fetchmailrc` schon korrekt ist, dann einfach so lassen.
|
||||
|
||||
---
|
||||
|
||||
## 7. Zertifikate bereitstellen
|
||||
|
||||
Pruefen:
|
||||
|
||||
```bash
|
||||
sudo cp /etc/letsencrypt/live/mail.theboxhub.ch/fullchain.pem /srv/mail-infetch01t01/data/mailserver/certs/fullchain.pem
|
||||
sudo cp /etc/letsencrypt/live/mail.theboxhub.ch/privkey.pem /srv/mail-fetch01/data/mailserver/certs/privkey.pem
|
||||
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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 16. Erster Start
|
||||
Wenn du bei den 3 Compose-Dateien bleibst:
|
||||
## 8. Rechte fuer Konfig setzen
|
||||
|
||||
```bash
|
||||
cd /srv/mail-fetch01/compose/mariadb && docker compose up -d
|
||||
cd /srv/mail-fetch01/compose/mailserver && docker compose up -d
|
||||
cd /srv/mail-fetch01/compose/roundcube && docker compose up -d
|
||||
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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 17. Aber nochmals: meine klare Empfehlung
|
||||
Fuer diesen Mail-Stack solltest du wirklich lieber **eine gemeinsame Compose-Datei** verwenden.
|
||||
Sonst bekommst du unnoetig Aufwand mit Netzwerken, DNS innerhalb von Docker und Service-Namen.
|
||||
## 9. Kurz pruefen
|
||||
|
||||
## Wenn du magst
|
||||
schreibe ich dir jetzt direkt als naechsten Schritt:
|
||||
```bash
|
||||
tree /srv/mail-fetch01 -L 4
|
||||
```
|
||||
|
||||
1. **die finale empfohlene Gesamtstruktur**
|
||||
2. **eine einzige saubere `compose/mail/compose.yaml`**
|
||||
3. **die finalen Repo-Befehle zum Anlegen**
|
||||
Besonders wichtig:
|
||||
|
||||
Das waere fuer deinen Mailserver die bessere produktive Variante.
|
||||
- `/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.
|
||||
|
|
@ -36,7 +36,7 @@ services:
|
|||
- "993:993"
|
||||
volumes:
|
||||
- /srv/mail-fetch01/data/mailserver/maildata:/var/mail
|
||||
- /srv/mail-fetch01/data/mailserver/config:/tmp/docker-mailserver
|
||||
- /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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue