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
|
Wenn auf dem neuen Server noch keine produktiven Mails gesammelt wurden, dann ist es sinnvoller:
|
||||||
- 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`
|
|
||||||
|
|
||||||
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
|
Ich wuerde fuer dich diese Struktur verwenden:
|
||||||
- `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:
|
|
||||||
|
|
||||||
```text
|
```text
|
||||||
/srv/mail-fetch01/
|
/srv/mail-fetch01/
|
||||||
├── backup
|
├── backup/
|
||||||
│ ├── compose
|
├── compose/
|
||||||
│ ├── databases
|
│ └── mail/
|
||||||
│ ├── mailserver
|
│ └── compose.yaml
|
||||||
│ └── roundcube
|
├── config/
|
||||||
├── compose
|
│ └── mailserver/
|
||||||
│ ├── mailserver
|
│ ├── fetchmailrc
|
||||||
│ ├── mariadb
|
│ ├── postfix-accounts.cf
|
||||||
│ └── roundcube
|
│ ├── dovecot.cf
|
||||||
├── config
|
│ ├── postfix-main.cf
|
||||||
│ ├── mailserver
|
│ └── postfix-master.cf
|
||||||
│ ├── mariadb
|
├── data/
|
||||||
│ └── roundcube
|
│ ├── mailserver/
|
||||||
└── data
|
│ │ ├── certs/
|
||||||
├── mailserver
|
│ │ ├── dkim/
|
||||||
│ ├── certs
|
│ │ ├── logs/
|
||||||
│ ├── config
|
│ │ ├── maildata/
|
||||||
│ ├── dkim
|
│ │ └── state/
|
||||||
│ ├── logs
|
│ ├── mariadb/
|
||||||
│ ├── maildata
|
│ └── roundcube/
|
||||||
│ └── state
|
├── README.md
|
||||||
├── mariadb
|
└── scripts/
|
||||||
└── roundcube
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
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:
|
Ich wuerde diese Version nehmen:
|
||||||
`/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`
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
x-logging: &default-logging
|
x-logging: &default-logging
|
||||||
|
|
@ -266,7 +85,7 @@ services:
|
||||||
SSL_TYPE: manual
|
SSL_TYPE: manual
|
||||||
SSL_CERT_PATH: /etc/letsencrypt/live/mailserver/fullchain.pem
|
SSL_CERT_PATH: /etc/letsencrypt/live/mailserver/fullchain.pem
|
||||||
SSL_KEY_PATH: /etc/letsencrypt/live/mailserver/privkey.pem
|
SSL_KEY_PATH: /etc/letsencrypt/live/mailserver/privkey.pem
|
||||||
PERMIT_DOCKER: connected-networks
|
PERMIT_DOCKER: none
|
||||||
ONE_DIR: 1
|
ONE_DIR: 1
|
||||||
DMS_DEBUG: 0
|
DMS_DEBUG: 0
|
||||||
ports:
|
ports:
|
||||||
|
|
@ -277,12 +96,13 @@ services:
|
||||||
- "993:993"
|
- "993:993"
|
||||||
volumes:
|
volumes:
|
||||||
- /srv/mail-fetch01/data/mailserver/maildata:/var/mail
|
- /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/state:/var/mail-state
|
||||||
- /srv/mail-fetch01/data/mailserver/logs:/var/log/mail
|
- /srv/mail-fetch01/data/mailserver/logs:/var/log/mail
|
||||||
- /srv/mail-fetch01/data/mailserver/dkim:/etc/opendkim/keys
|
- /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/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/data/mailserver/certs/privkey.pem:/etc/letsencrypt/live/mailserver/privkey.pem:ro
|
||||||
|
- /srv/mail-fetch01/config/mailserver/fetchmailrc:/etc/fetchmailrc:ro
|
||||||
cap_add:
|
cap_add:
|
||||||
- NET_ADMIN
|
- NET_ADMIN
|
||||||
- SYS_PTRACE
|
- SYS_PTRACE
|
||||||
|
|
@ -293,32 +113,17 @@ services:
|
||||||
retries: 5
|
retries: 5
|
||||||
start_period: 30s
|
start_period: 30s
|
||||||
logging: *default-logging
|
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:
|
db-mail:
|
||||||
image: mariadb:10.11
|
image: mariadb:10.11
|
||||||
container_name: db-mail
|
container_name: db-mail
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
TZ: Europe/Zurich
|
TZ: Europe/Zurich
|
||||||
MYSQL_ROOT_PASSWORD: "MAILROOT_4mK9pL2xT7vQ1cD8"
|
MYSQL_ROOT_PASSWORD: "MAILROOT_9kL4mQ2xT7vP1cD8"
|
||||||
MYSQL_DATABASE: "roundcube"
|
MYSQL_DATABASE: "roundcube"
|
||||||
MYSQL_USER: "roundcube"
|
MYSQL_USER: "roundcube"
|
||||||
MYSQL_PASSWORD: "RCPASS_7xL2mQ9tK4pD1cV8"
|
MYSQL_PASSWORD: "RCPASS_8xT2mQ7vL4pD1cK9"
|
||||||
volumes:
|
volumes:
|
||||||
- /srv/mail-fetch01/data/mariadb:/var/lib/mysql
|
- /srv/mail-fetch01/data/mariadb:/var/lib/mysql
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|
@ -328,40 +133,28 @@ services:
|
||||||
retries: 5
|
retries: 5
|
||||||
start_period: 15s
|
start_period: 15s
|
||||||
logging: *default-logging
|
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:
|
roundcube:
|
||||||
image: roundcube/roundcubemail:latest
|
image: roundcube/roundcubemail:latest
|
||||||
container_name: roundcube
|
container_name: roundcube
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
db-mail:
|
||||||
|
condition: service_healthy
|
||||||
environment:
|
environment:
|
||||||
TZ: Europe/Zurich
|
TZ: Europe/Zurich
|
||||||
ROUNDCUBEMAIL_DB_TYPE: mysql
|
ROUNDCUBEMAIL_DB_TYPE: mysql
|
||||||
ROUNDCUBEMAIL_DB_HOST: db-mail
|
ROUNDCUBEMAIL_DB_HOST: db-mail
|
||||||
ROUNDCUBEMAIL_DB_NAME: roundcube
|
ROUNDCUBEMAIL_DB_NAME: roundcube
|
||||||
ROUNDCUBEMAIL_DB_USER: roundcube
|
ROUNDCUBEMAIL_DB_USER: roundcube
|
||||||
ROUNDCUBEMAIL_DB_PASSWORD: "RCPASS_7xL2mQ9tK4pD1cV8"
|
ROUNDCUBEMAIL_DB_PASSWORD: "RCPASS_8xT2mQ7vL4pD1cK9"
|
||||||
ROUNDCUBEMAIL_SKIN: elastic
|
ROUNDCUBEMAIL_SKIN: elastic
|
||||||
ROUNDCUBEMAIL_DEFAULT_HOST: "tls://mail.theboxhub.ch"
|
ROUNDCUBEMAIL_DEFAULT_HOST: "tls://mail.theboxhub.ch"
|
||||||
ROUNDCUBEMAIL_DEFAULT_PORT: 143
|
ROUNDCUBEMAIL_DEFAULT_PORT: 143
|
||||||
ROUNDCUBEMAIL_SMTP_SERVER: "tls://mail.theboxhub.ch"
|
ROUNDCUBEMAIL_SMTP_SERVER: "tls://mail.theboxhub.ch"
|
||||||
ROUNDCUBEMAIL_SMTP_PORT: 587
|
ROUNDCUBEMAIL_SMTP_PORT: 587
|
||||||
ROUNDCUBEMAIL_IMAP_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":false,"verify_peer_name":false,"allow_self_signed":true}}'
|
ROUNDCUBEMAIL_SMTP_CONN_OPTIONS: '{"ssl":{"verify_peer":true,"verify_peer_name":true,"allow_self_signed":false}}'
|
||||||
ports:
|
ports:
|
||||||
- "8080:80"
|
- "8080:80"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|
@ -373,158 +166,290 @@ services:
|
||||||
logging: *default-logging
|
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
|
# Vorgehen Schritt fuer Schritt
|
||||||
Da du drei getrennte Compose-Dateien willst, brauchen die Dienste fuer `roundcube` und `db-mail` einen gemeinsamen Compose-Kontext oder ein gemeinsames Netz.
|
|
||||||
|
|
||||||
Am saubersten gibt es dafuer zwei Wege:
|
## 1. Bestehende Container stoppen und entfernen
|
||||||
|
|
||||||
## Variante A - alles in eine gemeinsame Mail-Compose
|
Im Compose-Ordner:
|
||||||
Einfacher im Betrieb.
|
|
||||||
|
|
||||||
## Variante B - externes Docker-Netz
|
```bash
|
||||||
Sauber getrennt, aber etwas mehr Aufwand.
|
cd /srv/mail-fetch01/compose/mail
|
||||||
|
docker compose down
|
||||||
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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Mit allen 3 Services zusammen.
|
Zur Kontrolle:
|
||||||
|
|
||||||
Wenn du willst, schreibe ich dir diese Gesamtdatei sofort.
|
```bash
|
||||||
Das ist fuer dein Setup deutlich praktischer als drei isolierte Stacks.
|
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
|
## 2. Vorhandene Daten auf dem neuen Server loeschen
|
||||||
Fuer docker-mailserver liegen die aktiven Dateien unter:
|
|
||||||
|
|
||||||
```text
|
Da du bewusst neu aufsetzen willst:
|
||||||
/srv/mail-fetch01/data/mailserver/config/
|
|
||||||
|
```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:
|
Optional auch leere Altlasten spaeter pruefen.
|
||||||
|
|
||||||
```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.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# 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:
|
Datei:
|
||||||
`/srv/workspace/infra/mail-fetch01/config/mailserver/fetchmailrc`
|
|
||||||
|
|
||||||
```conf
|
```bash
|
||||||
set daemon 60
|
/srv/mail-fetch01/compose/mail/compose.yaml
|
||||||
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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Wichtig:
|
mit der bereinigten Version ersetzen.
|
||||||
- das ist nur eine Vorlage
|
|
||||||
- Rechte spaeter auf der Ziel-VM unbedingt restriktiv setzen:
|
Am besten vorher Backup:
|
||||||
```bash
|
|
||||||
chmod 600 /srv/mail-fetch01/config/mailserver/fetchmailrc
|
```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
|
## 5. Alte Mailserver-Konfig exportieren
|
||||||
Du hast bestaetigt:
|
|
||||||
|
|
||||||
```text
|
Auf dem alten Server:
|
||||||
/srv/mail-fetch01/data/mailserver/certs/fullchain.pem
|
|
||||||
/srv/mail-fetch01/data/mailserver/certs/privkey.pem
|
```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
|
```bash
|
||||||
cd /srv/workspace/infra
|
sudo rsync -avh --progress mrwacka@10.100.20.20:/xwackaBack/mail-export/config/postfix-accounts.cf /srv/mail-fetch01/config/mailserver/
|
||||||
git clone <dein-repo> mail-fetch01
|
|
||||||
cd mail-fetch01
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Zielstruktur erzeugen
|
### Mailbox:
|
||||||
```bash
|
```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
|
```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
|
```bash
|
||||||
sudo cp /etc/letsencrypt/live/mail.theboxhub.ch/fullchain.pem /srv/mail-infetch01t01/data/mailserver/certs/fullchain.pem
|
ls -l /srv/mail-fetch01/data/mailserver/certs
|
||||||
sudo cp /etc/letsencrypt/live/mail.theboxhub.ch/privkey.pem /srv/mail-fetch01/data/mailserver/certs/privkey.pem
|
```
|
||||||
|
|
||||||
|
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
|
sudo chmod 600 /srv/mail-fetch01/data/mailserver/certs/privkey.pem
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# 16. Erster Start
|
## 8. Rechte fuer Konfig setzen
|
||||||
Wenn du bei den 3 Compose-Dateien bleibst:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /srv/mail-fetch01/compose/mariadb && docker compose up -d
|
sudo chown root:root /srv/mail-fetch01/config/mailserver/postfix-accounts.cf
|
||||||
cd /srv/mail-fetch01/compose/mailserver && docker compose up -d
|
sudo chmod 644 /srv/mail-fetch01/config/mailserver/postfix-accounts.cf
|
||||||
cd /srv/mail-fetch01/compose/roundcube && docker compose up -d
|
|
||||||
|
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
|
## 9. Kurz pruefen
|
||||||
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.
|
|
||||||
|
|
||||||
## Wenn du magst
|
```bash
|
||||||
schreibe ich dir jetzt direkt als naechsten Schritt:
|
tree /srv/mail-fetch01 -L 4
|
||||||
|
```
|
||||||
|
|
||||||
1. **die finale empfohlene Gesamtstruktur**
|
Besonders wichtig:
|
||||||
2. **eine einzige saubere `compose/mail/compose.yaml`**
|
|
||||||
3. **die finalen Repo-Befehle zum Anlegen**
|
|
||||||
|
|
||||||
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"
|
- "993:993"
|
||||||
volumes:
|
volumes:
|
||||||
- /srv/mail-fetch01/data/mailserver/maildata:/var/mail
|
- /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/state:/var/mail-state
|
||||||
- /srv/mail-fetch01/data/mailserver/logs:/var/log/mail
|
- /srv/mail-fetch01/data/mailserver/logs:/var/log/mail
|
||||||
- /srv/mail-fetch01/data/mailserver/dkim:/etc/opendkim/keys
|
- /srv/mail-fetch01/data/mailserver/dkim:/etc/opendkim/keys
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue