Docker Mailserver selbst betreiben | ein Erfahrungsbericht

 

Mithilfe eines geeigneten Docker-Images ist es relativ einfach einen Mailserver selbst zu betreiben. UrsprĂŒnglich habe ich den integrierten Mailserver des Host Europe vServers (Plesk) verwendet und bin bei der Suche nach einem Ersatz auf einen sehr einfachen Docker-Container gestoßen. Der schlanke Container liefert einen Mailserver ohne grafische VerwaltungsoberflĂ€che, kann aber mit wenigen einfachen Befehlen verwaltet werden. FĂŒr das Senden und Empfangen der Mails kann ein beliebiger E-Mail-Client verwendet werden, dazu wird POP3 oder IMAP fĂŒr das Empfangen und SMTP fĂŒr das Versenden angeboten. Ob die Mails des eigenen Servers empfangen und zugestellt werden können, hĂ€ngt neben dem Setup, von den richtigen DNS-Einstellungen ab. 

SoftwareDocker-mailserver
GitHubhttps://github.com/docker-mailserver/docker-mailserver
aktuelle Version 13.3.1
gefunden27.01.2024
 

Docker Basics

Docker ermöglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhÀngige isolierte Umgebung:
Beim ersten Start eines Containers, lÀdt Docker selbststÀndig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker

Voraussetzung

Vorab habe ich Docker installiert, siehe: topic/docker und fĂŒr die SSL-Zertifikate einen Reverse-Proxy im Einsatz: Traefik-Reverse-Proxy.

Mailserver Inbetriebnahme

Als Mailserver habe ich das folgende Docker-Image verwendet: "ghcr.io/docker-mailserver/docker-mailserver:latest".

FĂŒr den Start sind 3 Dateien erforderlich: 

  • docker-compose.yml
  • .env (Die Variablen der .env-Datei könnten auch direkt in der docker-compose.yml-Datei ersetzt werden)
  • .mailserver.env (Variablen fĂŒr die Mailserversettings)

Die docker-compose-Datei habe ich wie folgt angelegt:

services:
  mailserver:
    image: docker.io/mailserver/docker-mailserver:latest
    hostname: ${HOSTNAME}
    domainname: ${DOMAINNAME}
    container_name: ${CONTAINER_NAME}
    env_file: mailserver.env
    ports:
      - "25:25"
      - "143:143"
      - "587:587"
      - "993:993"
      - "4190:4190"
    volumes:
      - ./docker-data/dms/maildata:/var/mail
      - ./docker-data/dms/mailstate:/var/mail-state
      - ./docker-data/dms/maillogs:/var/log/mail
      - ./docker-data/dms/config/:/tmp/docker-mailserver/
      - ./docker-data/dms/cron/sa-learn:/etc/cron.d/sa-learn
      - /etc/localtime:/etc/localtime:ro
    restart: always
    cap_add: [ "NET_ADMIN", "SYS_PTRACE" ]

Zudem verwende ich fĂŒr die Variablen in der docker-compose.yml-Datei eine eigene Datei:  .env, diese enthĂ€lt die Werte fĂŒr den Host-, Domain- und Container-Namen:

HOSTNAME=mailserver.domain.tld
DOMAINNAME=domain.tld
CONTAINER_NAME=mailserver

Und zuletzt wird fĂŒr das Setup noch die Datei mailserver.env benötigt, diese kann ĂŒber das Git-Repository heruntergeladen werden:

wget -O mailserver2.env https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/mailserver.env

Damit wĂ€re der Server grundsĂ€tzlich einsatzbereit und könnte bereits gestartet werden. Könnte, denn fĂŒr zusĂ€tzliche Einstellungen sollte auch noch kurz die zuletzt heruntergeladene Datei mailserver.env durchgesehen werden und darin benötigte Features aktiviert oder deaktiviert werden. Die Datei ist relativ gut kommentiert und dadurch weitestgehend selbsterklĂ€rend. Damit das Zustellen und Empfangen der Mails klappt, mĂŒssen zudem entsprechende DNS-EintrĂ€ge erstellt werden.

Der Start des Containers erfolgt dann mit dem Befehl „docker-compose up“.

root@l2:~/mailserver# docker compose up -d
...
Status: Downloaded newer image for mailserver/docker-mailserver:latest
Creating mailserver ... done
Attaching to mailserver

mailserver.env

Folgende Einstellungen habe ich in der mailserver.env – Datei angepasst:

OVERRIDE_HOSTNAME=domain.tld
POSTMASTER_ADDRESS=postmaster@domain.tld
ENABLE_FAIL2BAN=1
ENABLE_MANAGESIEVE=1
SSL_TYPE=letsencrypt
REPORT_RECIPIENT=1
ENABLE_SPAMASSASSIN=1
SRS_SENDER_CLASSES=envelope_sender,header_sender
ONE_DIR=1
POSTFIX_MESSAGE_SIZE_LIMIT=300000000

FĂŒr SSL_TYPE=letsencrypt, siehe: ssl

FĂŒr ENABLE_MANAGESIEVE=1, siehe: SIEVE

Zu ENABLE_SPAMASSASSIN, siehe SpamAssassin

Per Standardeinstellung ist die GrĂ¶ĂŸe der Mails auf 10 MB limitiert, durch das Setzen der Variablen „POSTFIX_MESSAGE_SIZE_LIMIT“ kann das Limit erhöht werden.

Administration

Neue E-Mail-Adressen oder Weiterleitungen können mithilfe des Setup-Skripts erstellt werden. Seit Version 10.2 befindet sich das Skript im Docker-Container, entsprechend erfolgt der Aufruf ĂŒber „docker exec“. Die Hilfe kann wie folgt angezeigt werden:

docker exec mailserver setup help

„mailserver“ steht in dem Befehl fĂŒr den Namen des Docker-Containers, hier die angezeigte Hilfe fĂŒr Version 11.2

[+]
root@ubuntu:/var/mailserver#docker exec mailserver setup help
SETUP(1)

NAME
    setup - 'docker-mailserver' Administration & Configuration script

SYNOPSIS
    ./setup [ OPTIONS... ] COMMAND [ help | ARGUMENTS... ]

    COMMAND := { email | alias | quota | dovecot-master | config | relay | debug } SUBCOMMAND

DESCRIPTION
    This is the main administration script that you use for all your interactions with
    'docker-mailserver'. Setup, configuration and much more is done with this script.

    Please note that this script executes most of its commands inside the container itself.
    If it cannot find a running 'docker-mailserver' container, it will attempt to run one using
    any available tags which include 'label=org.opencontainers.image.title="docker-mailserver"'
    and then run the necessary commands. If the tag for the container is not found, this script
    will pull the ':latest' tag of 'docker.io/mailserver/docker-mailserver'.
    This tag refers to the latest release, see the tagging convention in the README under:
    https://github.com/docker-mailserver/docker-mailserver/blob/master/README.md

    You will be able to see detailed information about the script you're invoking and their
    arguments by appending 'help' after your command. Currently, this does not work with all scripts.

[SUB]COMMANDS
    COMMAND email :=
        /usr/local/bin/setup email add <EMAIL ADDRESS> [<PASSWORD>]
        /usr/local/bin/setup email update <EMAIL ADDRESS> [<PASSWORD>]
        /usr/local/bin/setup email del [ OPTIONS... ] <EMAIL ADDRESS> [ <EMAIL ADDRESS>... ]
        /usr/local/bin/setup email restrict <add|del|list> <send|receive> [<EMAIL ADDRESS>]
        /usr/local/bin/setup email list

    COMMAND alias :=
        /usr/local/bin/setup alias add <EMAIL ADDRESS> <RECIPIENT>
        /usr/local/bin/setup alias del <EMAIL ADDRESS> <RECIPIENT>
        /usr/local/bin/setup alias list

    COMMAND quota :=
        /usr/local/bin/setup quota set <EMAIL ADDRESS> [<QUOTA>]
        /usr/local/bin/setup quota del <EMAIL ADDRESS>

    COMMAND dovecot-master :=
        /usr/local/bin/setup dovecot-master add <USERNAME> [<PASSWORD>]
        /usr/local/bin/setup dovecot-master update <USERNAME> [<PASSWORD>]
        /usr/local/bin/setup dovecot-master del [ OPTIONS... ] <USERNAME> [ <USERNAME>... ]
        /usr/local/bin/setup dovecot-master list

    COMMAND config :=
        /usr/local/bin/setup config dkim [ ARGUMENTS... ]

    COMMAND relay :=
        /usr/local/bin/setup relay add-auth <DOMAIN> <USERNAME> [<PASSWORD>]
        /usr/local/bin/setup relay add-domain <DOMAIN> <HOST> [<PORT>]
        /usr/local/bin/setup relay exclude-domain <DOMAIN>

    COMMAND fail2ban :=
        /usr/local/bin/setup fail2ban
        /usr/local/bin/setup fail2ban ban <IP>
        /usr/local/bin/setup fail2ban unban <IP>

    COMMAND debug :=
        /usr/local/bin/setup debug fetchmail
        /usr/local/bin/setup debug login <COMMANDS>
        /usr/local/bin/setup debug show-mail-logs

EXAMPLES
    ./setup.sh email add test@example.com
        Add the email account test@example.com. You will be prompted
        to input a password afterwards since no password was supplied.

    ./setup.sh config dkim keysize 2048 domain 'example.com,not-example.com'
        Creates keys of length 2048 but in an LDAP setup where domains are not known to
        Postfix by default, so you need to provide them yourself in a comma-separated list.

    ./setup.sh config dkim help
        This will provide you with a detailed explanation on how to use the
        config dkim command, showing what arguments can be passed and what they do.

Mail-Adressen anlegen

docker exec mailserver setup email add email@domain password

Nach dem ersten Anlegen einer E-Mail-Adresse fĂŒr eine neue Domain, kann der DKIM-Key fĂŒr den DNS-Eintrag erstellt werden, siehe DKIM.

Alias anlegen (Weiterleitung)

docker exec mailserver setup alias add email@domain.tld weiterleitung@mail-adresse.ok

DKIM

Nachdem die ersten Mail-Adressen oder Weiterleitungen am System angelegt wurden, können mit folgendem Befehl DKIM Keys erzeugt werden:

docker exec mailserver setup config dkim

Die Keys werden fĂŒr alle DomĂ€nen fĂŒr die eine E-Mail-Adresse oder Weiterleitung angelegt wurde in folgendem Ordner abgelegt: config/opendkim/keys/domain.tld/mail.txt und sollten fĂŒr den DNS-Eintrag verwendet werden:

DNS-EintrÀge

FĂŒr den Betrieb eines Mailservers sollte neben dem A- und MX-Record der DKIM-Key, ein SPF-Eintrag und eine DMARC-Policy im DNS erstellt werden. Der DomĂ€nenname: domain.tld  steht in folgenden Beispielen reprĂ€sentativ fĂŒr die eigene DomĂ€ne. Die folgenden EintrĂ€ge mĂŒssen in die DNS-Zone fĂŒr domain.tld hinzugefĂŒgt werden:

A-Record

Type Name Value
A mail.domain.tld IP-Adresse des Webservers

Als Servername sollte, in der Reverse-Lookup-Zone zudem mail.domain.tld hinterlegt werden, damit die IP-Adresse des Webservers auch auf mail.domain.tld auflöst. Bei einem vServer oder Cloud-Server eines Providers kann der Servername in der Admin-OberflÀche des Providers festgelegt werden.

MX

Type Name Value PrioritÀt
MX mail.domain.tld IP-Adresse des Webservers  

Der MX-Record ist fĂŒr das Zustellen der Mails zustĂ€ndig. Alle Mails die @domain.tld als DomĂ€ne haben, werden an diesen Server zugestellt. Bei mehreren Mailservern wird der Server mit der niedrigsten PrioritĂ€t verwendet.

Der zuvor erstellte DKIM Key:

Type Name Value
TXT mail._domainkey.domain.tld v=DKIM1; h=sha256; k=rsa; p=Inhalt-von-config/opendkim/keys/domain.tld/mail.txt ....  bei mir ohne "

DKIM (DomainKeys Identified Mail) ist eine Signatur, die den Mails hinzugefĂŒgt wird, um das FĂ€lschen des Absenders zu erschweren. DKIM wird fĂŒr das Versenden von Mails verwendet. Sollte der Provider nur 512 Zeichen fĂŒr dessen DNS-EintrĂ€ge unterstĂŒtzen, kann mit folgendem Aufruf ein kĂŒrzerer Key erzeugt werden: "docker exec mailserver setup config dkim keysize 2048". Damit die Keys neu ausgestellt werden, mĂŒssen die alten Keys im Ordner ..config/opendkim/keys/domain.tld vorher gelöscht und der Mailserver neugestartet werden.

SPF-Eintrag

Type Name Value
TXT @ „v=spf1 ip4:IP-Adresse-des-Webservers -all"

Um die ip4-Einstellung einer anderen DomÀne zu verwenden, kann der SPF-Eintrag wie folgt umgeleitet werden. Wichtig ist dabei, dass der Parameter -all nicht verwendet wird: 

Type Name Value
TXT @ „v=spf1 redirect=server.domain.tld"

Auch der SPF-Eintrag (Sender Policy Framework) ist eine Maßnahme um das FĂ€lschen von E-Mail-Adressen zu erschweren. Der SPF-Eintrag gibt vor welche Server fĂŒr das Senden der Emails berechtigt sind, in dem Beispiel die IP-Adresse unseres Mailservers.

DMARC

Type Name Value
TXT _dmarc.domain.tld „v=DMARC1; p=reject; rua=mailto:report@domain.tld"

DMARC baut auf SPF und DKIM auf und gibt vor, wie der Server an dem eine Mail geschickt wird, das Email authentifizieren soll.

DNS ĂŒberprĂŒfen

Am einfachsten können die DNS-EintrÀge auf der Seite mxtoolbox.com getestet werden: mxtoolbox.com/MXLookup.aspx

Als Beispiel fĂŒr die Domain: domain.tld

MX Lookup

Der MX-Lookup auf der Seite mxtoolbox sollte ca. so aussehen:

Pref Hostname IP Address TTL  
10 mail.domain.tld ???.???.???.??? 24 hrs Blacklist Check      SMTP Test
  Test Result
✓ DMARC Record Published DMARC Record found
✓ DMARC Policy Not Enabled DMARC Quarantine/Reject policy enabled
✓ DNS Record Published DNS Record found

SMTP Test

Hier ein SMTP-Test auf mxtoolbox:

smtp:IP-AdresseMailserver

220 mail.domain.tld ESMTP

  Test Result
✓ SMTP Reverse DNS Mismatch OK - ???.???.???.??? resolves to domain.tld
✓ SMTP Valid Hostname OK - Reverse DNS is a valid Hostname
✓ SMTP Banner Check OK - Reverse DNS matches SMTP Banner
✓ SMTP TLS OK - Supports TLS.
✓ SMTP Connection Time 0.303 seconds - Good on Connection time
✓ SMTP Open Relay OK - Not an open relay.
✓ SMTP Transaction Time 1.006 seconds - Good on Transaction Time

E-Mail an eine Google-Adresse

Als Beispiel kann das E-Mail vom eigenen Webserver auch an ein Google-Konto gesendet werden:

Auch hier taucht unter „Original anzeigen“ dann ein Status zu SPF, DKIM und DMARC auf:

Originalnachricht

Nachrichten-ID <??????.??????.???x.???x@mx.google.com>
Erstellt am: 29. MÀrz 2021 um 17:55 (Nach 2 Sekunden zugestellt)
Von: Vorname Nachname <user@domain.tld>
An: „Vorname Nachname (gmailuser@gmail.com)“ <gmailuser@gmail.com>
Betreff: test - dns
SPF: PASS mit IP-Adresse ???.???.???.??? 
DKIM: 'PASS' mit Domain domain.tld
DMARC: 'PASS'

SSL-Zertifikate

Als Setup fĂŒr SSL-Zertifikate verwende ich Let's Encrypt und einen Reverse Proxy, siehe: Traefik-Reverse-Proxy. Damit die Zertifikatsverwaltung vom Reverse Proxy verwendet werden kann, habe ich das docker-compose.yml-File wie folgt angepasst:

[+]
services:
  mailserver:
    image: docker.io/mailserver/docker-mailserver:latest
    hostname: ${HOSTNAME}
    domainname: ${DOMAINNAME}
    container_name: ${CONTAINER_NAME}
    env_file: mailserver.env
    ports:
      - "25:25"
      - "143:143"
      - "587:587"
      - "993:993"  
      - "4190:4190"
    volumes:
      - ./docker-data/dms/maildata:/var/mail
      - ./docker-data/dms/mailstate:/var/mail-state
      - ./docker-data/dms/maillogs:/var/log/mail
      - ./docker-data/dms/config/:/tmp/docker-mailserver/
      - ./docker-data/dms/cron/sa-learn:/etc/cron.d/sa-learn
      - ../traefik/letsencrypt/acme.json:/etc/letsencrypt/acme.json:ro 
      - /etc/localtime:/etc/localtime:ro
    restart: always
    cap_add: [ "NET_ADMIN", "SYS_PTRACE" ]
  cert-companion:
    image: nginx
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.mailserver.rule=Host(`${HOSTNAME}`)"   
      - "traefik.http.routers.mailserver.entrypoints=web"
      - "traefik.http.routers.mailserver.entrypoints=websecure"
      - "traefik.http.routers.mailserver.tls.certresolver=myresolver"  
    networks:
      - proxy-tier
    restart: always

networks:
   proxy-tier:
           external: true
           name: webproxy

Der Pfad zum nginx-data-Ordner des Webproxy unter „Volumes“ muss natĂŒrlich entsprechend angepasst werden. Zudem habe ich, anders als beim originalen docker-compose-File, die anderen Volumes in das Dateisystem umgeleitet.  Siehe: Docker Daten speichern: Docker Volumes vs. Host-Ordner

SpamAssassin Spamfilter learn

Um der Flut an Spam-Mails Herr zu werden, habe ich SpamAssassin mit dem sa-learn-Befehl trainiert: SpamAssassin kann neben Blacklists und anderen SpamprĂŒfungen von bestehenden Mails aus der Inbox und dem Junk-Ordner lernen. Der Befehl sa-learn untersucht dazu beide Ordner und merkt sich bestimmte Muster von Spam und Nicht-Spam Mails (Ham). Wird also ein Mail falsch erkannt und dann ĂŒber den Mail-Client in den Spam-Ordner verschoben, kann SpamAssassin daraus lernen und ein Ă€hnliches Mail beim nĂ€chsten Mal ev. gleich in den Spam-Ordner geben.

Der sa-learn-Befehl kann wie folgt im Docker-Container gestartet werden:

root@server:~# docker exec mailserver sa-learn --ham /var/mail/*/*/cur* --dbpath /var/mail-state/lib-amavis/.spamassassin
Learned tokens from 0 message(s) (1375 message(s) examined)
root@server:~# docker exec mailserver sa-learn --spam /var/mail/*/*/.Junk --dbpath /var/mail-state/lib-amavis/.spamassassin
Learned tokens from 22 message(s) (705 message(s) examined)

/var/*/*/cur* durchsucht dabei alle PosteingÀnge und deren Unterordner, /var/mail/*/*/.Junk alle Spam-Ordner aller Mailboxen.

Damit der Lern-Befehl regelmĂ€ĂŸig gestartet wird, kann der im Container integrierte Cron-Service verwendet und dazu folgende Datei angelegt werden:

docker-data/dms/cron/sa-learn

0  2 * * * root  sa-learn --ham /var/mail/*/*/cur* --dbpath /var/mail-state/lib-amavis/.spamassassin
0  3 * * * root  sa-learn --spam /var/mail/*/*/.Junk --dbpath /var/mail-state/lib-amavis/.spamassassin

SIEVE - Filterregeln

Mit Hilfe von Sieve-Filtern ist es möglich bestimmte Regeln auf die Inbox anzuwenden, z. B. bestimmte Absender in einen Ordner zu verschieben. Hier ein Beispiel, meiner in NextCloud verwendeten Filterregeln:

[+]
require ["fileinto", "mailbox","envelope","reject"];
if anyof (address :contains "From" [
          "@spamdomain1.tld",
          "@spamdomain2.tld"
    ],
    header :contains "Subject" [
          "Viagra",
          "other SPAM-Keyword",
    ]
    )
{
     fileinto :create "Junk";
}
elsif anyof (address :matches "From" [
     "noreply@domain.tld",
     "newsletter@domain.tld"
    ]
    )
{
     fileinto :create "Newsletter";
}

Damit Sieve ĂŒber die Filterregeln ĂŒber den Mail-Client geĂ€ndert werden können, muss der Port 4190 in docker-compose hinterlegt werden.

FetchMail – Mails von anderen Konten holen

Um regelmĂ€ĂŸig E-Mails von einem anderen Konto abzuholen, kann in der Datei mailserver.env „ENABLE_FETCHMAIL“ aktiviert werden:

# –––––––––––––––––––––––––––––––––––––––––––––––
# ––– Fetchmail Section –––––––––––––––––––––––––
# –––––––––––––––––––––––––––––––––––––––––––––––

ENABLE_FETCHMAIL=1

# The interval to fetch mail in seconds
FETCHMAIL_POLL=300

Der Standardwert fĂŒr das Abholen ist alle 5 Minuten.

Die Kontodaten fĂŒr das Abholen können dann in folgender Config-Datei hinterlegt werden: docker-data/dms/config/fetchmail.cf

## Example configuration: IMAP
poll imap.domain.tld with proto IMAP
	user 'ccc@gmx.at' there with
	password 'pwd'
	is 'mailboxOnDockerMailserver@domain.tld'
	here ssl

Debug - Fail2ban

Sollte der Service Fail2ban aktiviert sein, werden fehlgeschlagene Anmeldeversuche bestraft, in dem der Absender fĂŒr einige Zeit blockiert wird. Die blockierten IP-Adressen können wie folgt angezeigt und wieder freigegeben werden:

docker exec mailserver setup fail2ban
Banned in dovecot: ???.???.???.???
Banned in postfix-sasl: 60.171.17.185, 61.182.227.245, 117.50.65.112, 116.196.112.146, 119.62.142.225, 113.31.104.89
root@ubuntu-4gb-nbg1-2:/var/web/mailserver# ./setup.sh debug fail2ban unban ???.???.???.???
Unbanned IP from dovecot: ???.???.???.???
root@ubuntu:/var/web/mailserver# 

Log-Ausgabe

Wie auch fĂŒr anderen Docker-Container kann mit „docker logs“ angezeigt werden, was der Container gerade so treibt: 

docker logs -f mailserver

Troubleshooting: DNS-EintrÀge

Policy Reasons

Mail Delivery Subsystem 

Returned mail: see transcript for details

This message was created automatically by mail delivery software.

Deny to deliver the message you sent to one or more recipients.

Reasons for deny are as follows:



REASONS: Policy Reasons



RECIPIENTS:
???@???.xx

Mögliche Ursache: fehlender SPF-Record

Domain unbekannt

Ein E-Mail an eine unbekannte Domain wird ca. so vom Mail Delivery Subsystem prÀsentiert:

Mail Delivery Subsystem 

Returned mail: see transcript for details

Undelivered Mail Returned to Sender

This is the mail system at host mail.domain.tld.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system

<gibts-nicht@ungĂŒltige.domain
Zitierter Text
>: Host or domain name not found. Name service error
    for name=ungĂŒltige.domain type=AAAA: Host not found

Delivery report

postmaster@???.???.???

Delivery report

Hello, this is the mail server on ???.???.???



I am sending you this message to inform you on the delivery status of a

message you previously sent.  Immediately below you will find a list of

the affected recipients;  also attached is a Delivery Status Notification

(DSN) report in standard format, as well as the headers of the original

message.



  <user@???.???.???

Zitierter Text

>  delivery failed; will not continue trying

Upgrade

Wie fĂŒr Docker ĂŒblich, können neue Versionen mit einem pull geladen werden:

docker-compose pull
docker-compose up -d

Fazit

Zugegeben, die Verwaltung ĂŒber Befehle im Terminal ist sicher nicht jedermanns Sache. Der Vorteil dieses Setups ist aber, dass sich die Konfiguration und die Daten des kompletten Mailservers dank Docker in einem Ordner befinden und der Server somit ganz einfach auf einen anderen Server kopiert und dort gestartet werden kann, siehe auch: topic/docker

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE fĂŒr deine Bewertung!

Aktualisiert: 27.01.2024 von Bernhard | Translation English |🔔 | Kommentare:18

➚ Bitwarden in Docker betreiben - Setup Schritt fĂŒr Schritt | ➊ Container | InfluxDB: Time series database - Docker ➚
➊ Home Server | GĂŒnstiger und sparsamer Docker Mini Server fĂŒr zu Hause ➚

Top-Artikel in diesem Bereich


NAS selber bauen: flexibel, stromsparend und gĂŒnstig [HowTo]

Wer nach einem NAS (Network Attached Storage oder Netzwerkspeicher) fĂŒr den Heimgebrauch sucht, kommt an den Herstellern Synology und QNAP nicht vorbei. Beide Hersteller liefern kleine NAS-Komplettlösungen mit der Möglichkeit, Daten lokal oder ĂŒber das Internet zu synchronisieren und beide verlangen fĂŒr die verwendete Hardware nicht gerade wenig Geld.


ioBroker installieren - Docker

Mit ioBroker können verschiedene Automatisierungslösungen oder GerÀte in einem System zusammengefasst werden. Um bestimmte Gateways oder GerÀte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.


Signal Nachrichten per API versenden: signal-cli-rest-api

Der bekannte Signal Messenger kann nicht nur ĂŒber dessen App, sondern auch ĂŒber die Befehlszeile oder von anderen Systemen verwendet werden. Eine einfache Möglichkeit dafĂŒr bietet die signal-cli-rest-api, welche in Form eines Docker-Containers zur VerfĂŒgung steht. Damit die API funktioniert, muss diese zuvor ĂŒber die Signal-App gekoppelt werden.

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍Tobi
31.07.2023 13:37
Hi!
Leider funktioniert das mit Traefik nicht richtig, mir ist aber  ehrlich gesagt nicht ganz klar wie bzw. wo ich den Pfad fĂŒr nginx in der o.g. docker-compose-yml fĂŒr Traefik Ă€ndern soll. Folgende Meldung bekomme ich:

WARN[0000] The "SELINUX_LABEL" variable is not set. Defaulting to a blank string.
network webproxy declared as external, but could not be found
↳
✍Bernhard
gepostet am 31.07.2023 19:31
Hallo Tobi, 
danke fĂŒr deinen Kommentar: 
SELINUX_LABEL war ursprĂŒnglich in der .env Datei gesetzt und leer und wird daher nicht benötigt und sollte in der Docker-Compose-Datei auch entfernt werden. Ich habe diesen Beitrag entsprechend angepasst. Sorry fĂŒr IrrefĂŒhrung.
BezĂŒglich des Netzwerks "webproxy": Ich verwende fĂŒr das Let`s Encrypt Setup ein Netzwerk mit Namen webproxy: Wie in dem entsprechenden Artikel auf dieser Seite erwĂ€hnt, kann dieses mit dem Befehl: "docker network create webproxy" angelegt werden.
Ich hoffe, die Antwort bringt dich ein StĂŒck weiter ...

Beitrag erstellt von Bernhard
↳
✍Tobi
gepostet am 04.08.2023 19:23
HI Bernhard,

vielen dank fĂŒr deine Anwort. Zumindest kann ich jetzt den Container starten, allerdings scheitert es nach wie vor an Treafik bzw. den Zertifikat, im Log bekomme ich diese Meldung:

[  ERROR  ]  Cannot find a valid DOMAIN for '/etc/letsencrypt/live/<DOMAIN>/', tried: '', 'meinedomain.de', 'meinedomain.de'
[  ERROR  ]  _find_letsencrypt_domain | LETSENCRYPT_DOMAIN appears to be misconfigured, please verify.
[  ERROR  ]  Shutting down

Ich habe Treafik nach dieser Anleitung konfiguriert (https://goneuland.de/traefik-v2-3-reverse-proxy-mit-crowdsec-im-stack-einrichten/), mit Nextloud, Bitwarden usw. klappt das alles ohne Probleme. WÀre super wenn du mir da helfen könntest, da ich mit den anderen Lösungen nicht klar komme und eine einfachen Mailserver brauche der nicht aufgeblÀht ist und Resourcen frisst.
Danke schonmal im voraus!

Lg Tobi

Beitrag erstellt von Tobi
↳
✍Bernhard
gepostet am 05.08.2023 11:03
Auf die Schnelle kann ich nur sehen, dass die beiden Anleitungen etwas voneinander abweichen: goneuland verwendet z.B. "proxy" als Netzwerkname und nicht wie in dem zugehörigen Artikel zu diesem Beitrag: "webproxy" ..., vielleicht versuchst du mal das zugehörige Traefik-Setup zu diesem Artikel: https://www.libe.net/traefik

Beitrag erstellt von Bernhard

✍anonym
22.08.2023 12:08
Hey,
leider habe ich ein Àhnlichen Problem Tobi.
Ich erhalte  Cannot find a valid DOMAIN for '/etc/letsencrypt/live/<DOMAIN>/', ...
Ich habe mich ausschließlich an deine Anleitung gehalten.
Hast du eine Idee?
↳
✍Bernhard
gepostet am 22.08.2023 12:26
Stimmt der Pfad zu Traefik und dessen Json-File?       
- ../traefik/letsencrypt/acme.json:/etc/letsencrypt/acme.json:ro 
und existiert die Datei: traefik/letsencrypt/acme.json ? enthĂ€lt diese die gewĂŒnschte Domain?

Beitrag erstellt von Bernhard
↳
✍anonym
gepostet am 22.08.2023 13:17
Die Pfade stimmen, aber die letsencrypt/acme.json is leer.
Wie muss der Inhalt denn aussehen? Das habe ich im Tutorial wohl ĂŒberlesen

Beitrag erstellt von anonym
↳
✍anonym
gepostet am 22.08.2023 14:03
Wobei, es sieht so aus, als ob es keine Datei, sondern ein Ordner ist? (Also die acme.json)?

Beitrag erstellt von anonym
↳
✍Bernhard
gepostet am 22.08.2023 15:10
Nein, ist eine Textdatei: 
Konnte diese sogar ĂŒber die Bash des Mailservers auslesen:
root@dockerhost:/var/web/mailserver#docker exec -it mailserver /bin/bash
root@server:/# cat /etc/letsencrypt/acme.json
{
  "myresolver": {
    "Account": {
      ...
      },
      "PrivateKey": ???
...
    "Certificates": [
      {
        "domain": {
          "main": "deineDomain.tld"
        },

Beitrag erstellt von Bernhard
↳
✍anonym
gepostet am 22.08.2023 16:33
Okay, und die wird automatisch angelegt, wenn ich Traefik starte?
Wenn ich den Mailserver starte gibt es eine Datei in /traefik/letsencrypt/acme.json/mail.domain.tld

Aber die ist leider leer

Beitrag erstellt von anonym
↳
✍Bernhard
gepostet am 22.08.2023 16:50
EnthĂ€lt das docker-compose.yml File fĂŒr Traefik unter "command:", neben der anderen beschriebenen Zeilen, auch folgende Zeile?
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"

Beitrag erstellt von Bernhard
↳
✍Bernhard
gepostet am 22.08.2023 16:58
Bitte den Ordner löschen und eine Datei mit Namen acme.json anlegen ...

Beitrag erstellt von Bernhard
↳
✍anonym
gepostet am 22.08.2023 20:24
Ja genau, die Zeile ist da.
Das Problem ist, dass acme.json irgendwie als Ordner angelegt wird und nicht als Datei.
Und wenn ich dann bspw. den Mailserver starte, wird eine neue Datei angelegt angelegt im besagten Ordner, sprich /letsencrypt/acme.json/mail.Domain.tld

Beitrag erstellt von anonym
↳
✍Bernhard
gepostet am 22.08.2023 20:57, geÀndert: 22.08.2023 21:04
Ich habe gerade nochmal die Konfig von Traefik kontrolliert: Ich verwende fĂŒr den Ordner letsencrypt aktuell Bind Mounts und nicht, wie ursprĂŒnglich im Beitrag, Volumes.
Die Docker-compose.yaml-Datei fĂŒr Traefik mountet den Ordner bei mir wie folgt:
...
    volumes:
      - "./letsencrypt:/letsencrypt"
...
Ich habe die Datei auch in dem Beitrag angepasst: https://www.libe.net/traefik

Beitrag erstellt von Bernhard
↳
✍anonym
gepostet am 22.08.2023 14:21
Okay, also mit der Config wird ja automatisch auf die Domain mail.domain.tld ein Zertfikat gepackt, welches ich auch mit https://crt.sh/ sehen kann -> mail.domain.tld hat also ein gĂŒltiges Zertifikat.
Das wird genauso im Treafik-Dashboard angezeigt.
Beim Starten des Mailservers erhalte ich jedoch weiterhin:

 [   INF   ]  Welcome to docker-mailserver 12.1.0
mailserver                   | [   INF   ]  Checking configuration
mailserver                   | [   INF   ]  Configuring mail server
mailserver                   | [  ERROR  ]  Cannot find a valid DOMAIN for '/etc/letsencrypt/live/<DOMAIN>/', tried: 'mail.domain', 'domain.de', 'domain.de' (Hab meine DOmain entfernt)
mailserver                   | [  ERROR  ]  _find_letsencrypt_domain | LETSENCRYPT_DOMAIN appears to be misconfigured, please verify.
mailserver                   | [  ERROR  ]  Shutting down
mailserver                   | 2023-08-22 14:13:53,125 WARN received SIGTERM indicating exit request

Beitrag erstellt von anonym
↳
✍Bernhard
gepostet am 22.08.2023 15:13
Ich glaube da passt mit dem Pfad zur acme.json was nicht und vermute, dass die Datei im Mailservercontainer nicht verfĂŒgbar ist ...

Beitrag erstellt von Bernhard

✍OldSmurf
13.06.2023 16:59
Die .env liebt nicht mehr auf (https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/compose.env) - gibt's eine alternative Quelle?
↳
✍Bernhard
gepostet am 13.06.2023 20:12
danke, ich werde den Beitrag bei Gelegenheit anpassen.

Beitrag erstellt von Bernhard

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details