Dieser Commit ist enthalten in:
milkmaker 2022-04-24 17:19:35 +00:00
Ursprung 9e13fa5c3b
Commit 64d42d3266
206 geänderte Dateien mit 8735 neuen und 5652 gelöschten Zeilen

Datei anzeigen

@ -2428,9 +2428,8 @@
<p>To restore make sure you are actually restoring to the same mailcow it was deleted from or you use the same encryption keys in <code>crypt-vol-1</code>.</p> <p>To restore make sure you are actually restoring to the same mailcow it was deleted from or you use the same encryption keys in <code>crypt-vol-1</code>.</p>
<p><strong>Make sure the user you want to restore exists in your mailcow</strong>. Re-create them if they are missing.</p> <p><strong>Make sure the user you want to restore exists in your mailcow</strong>. Re-create them if they are missing.</p>
<p>Copy the folders from <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/_garbage/[timestamp]_[domain_sanitized][user_sanitized]</code> back to <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/[domain]/[user]</code> and resync the folder and recalc the quota:</p> <p>Copy the folders from <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/_garbage/[timestamp]_[domain_sanitized][user_sanitized]</code> back to <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/[domain]/[user]</code> and resync the folder and recalc the quota:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net &#39;*&#39; <p><code>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net '*'
docker-compose exec dovecot-mailcow doveadm quota recalc -u restoreme@example.net docker-compose exec dovecot-mailcow doveadm quota recalc -u restoreme@example.net</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -961,6 +961,47 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days" class="md-nav__link">
./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)
</a>
</li>
<li class="md-nav__item">
<a href="#backup-all-delete-backups-older-than-3-days" class="md-nav__link">
Backup all, delete backups older than 3 days
</a>
</li>
<li class="md-nav__item">
<a href="#backup-vmail-crypt-and-mysql-data-delete-backups-older-than-30-days" class="md-nav__link">
Backup vmail, crypt and mysql data, delete backups older than 30 days
</a>
</li>
<li class="md-nav__item">
<a href="#backup-vmail" class="md-nav__link">
Backup vmail
</a>
<nav class="md-nav" aria-label="Backup vmail">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#cronjob" class="md-nav__link"> <a href="#cronjob" class="md-nav__link">
Cronjob Cronjob
@ -971,6 +1012,34 @@
</ul> </ul>
</nav> </nav>
</li>
<li class="md-nav__item">
<a href="#binsh" class="md-nav__link">
!/bin/sh
</a>
</li>
<li class="md-nav__item">
<a href="#backup-mailcow-data" class="md-nav__link">
Backup mailcow data
</a>
</li>
<li class="md-nav__item">
<a href="#httpsmailcowgithubiomailcow-dockerized-docsbackup_restoreb_n_r-backup" class="md-nav__link">
https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/
</a>
</li>
<li class="md-nav__item">
<a href="#run-command" class="md-nav__link">
run command
</a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
@ -978,6 +1047,13 @@
Backup strategy with rsync and mailcow backup script Backup strategy with rsync and mailcow backup script
</a> </a>
</li>
<li class="md-nav__item">
<a href="#if-you-want-to-use-the-acl-util-to-backup-permissions-of-someall-foldersfiles-getfacl-rn-path" class="md-nav__link">
If you want to, use the acl util to backup permissions of some/all folders/files: getfacl -Rn /path
</a>
</li> </li>
</ul> </ul>
@ -2411,6 +2487,47 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days" class="md-nav__link">
./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)
</a>
</li>
<li class="md-nav__item">
<a href="#backup-all-delete-backups-older-than-3-days" class="md-nav__link">
Backup all, delete backups older than 3 days
</a>
</li>
<li class="md-nav__item">
<a href="#backup-vmail-crypt-and-mysql-data-delete-backups-older-than-30-days" class="md-nav__link">
Backup vmail, crypt and mysql data, delete backups older than 30 days
</a>
</li>
<li class="md-nav__item">
<a href="#backup-vmail" class="md-nav__link">
Backup vmail
</a>
<nav class="md-nav" aria-label="Backup vmail">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#cronjob" class="md-nav__link"> <a href="#cronjob" class="md-nav__link">
Cronjob Cronjob
@ -2421,6 +2538,34 @@
</ul> </ul>
</nav> </nav>
</li>
<li class="md-nav__item">
<a href="#binsh" class="md-nav__link">
!/bin/sh
</a>
</li>
<li class="md-nav__item">
<a href="#backup-mailcow-data" class="md-nav__link">
Backup mailcow data
</a>
</li>
<li class="md-nav__item">
<a href="#httpsmailcowgithubiomailcow-dockerized-docsbackup_restoreb_n_r-backup" class="md-nav__link">
https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/
</a>
</li>
<li class="md-nav__item">
<a href="#run-command" class="md-nav__link">
run command
</a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
@ -2428,6 +2573,13 @@
Backup strategy with rsync and mailcow backup script Backup strategy with rsync and mailcow backup script
</a> </a>
</li>
<li class="md-nav__item">
<a href="#if-you-want-to-use-the-acl-util-to-backup-permissions-of-someall-foldersfiles-getfacl-rn-path" class="md-nav__link">
If you want to, use the acl util to backup permissions of some/all folders/files: getfacl -Rn /path
</a>
</li> </li>
</ul> </ul>
@ -2454,65 +2606,57 @@
<p>Please do not copy this script to another location.</p> <p>Please do not copy this script to another location.</p>
<p>To run a backup, write "backup" as first parameter and either one or more components to backup as following parameters. <p>To run a backup, write "backup" as first parameter and either one or more components to backup as following parameters.
You can also use "all" as second parameter to backup all components. Append <code>--delete-days n</code> to delete backups older than n days.</p> You can also use "all" as second parameter to backup all components. Append <code>--delete-days n</code> to delete backups older than n days.</p>
<div class="highlight"><pre><span></span><code># Syntax: <p>```</p>
# ./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days) <h1 id="syntax">Syntax:<a class="headerlink" href="#syntax" title="Permanent link">&para;</a></h1>
<h1 id="helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days">./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)<a class="headerlink" href="#helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days" title="Permanent link">&para;</a></h1>
# Backup all, delete backups older than 3 days <h1 id="backup-all-delete-backups-older-than-3-days">Backup all, delete backups older than 3 days<a class="headerlink" href="#backup-all-delete-backups-older-than-3-days" title="Permanent link">&para;</a></h1>
./helper-scripts/backup_and_restore.sh backup all --delete-days 3 <p>./helper-scripts/backup_and_restore.sh backup all --delete-days 3</p>
<h1 id="backup-vmail-crypt-and-mysql-data-delete-backups-older-than-30-days">Backup vmail, crypt and mysql data, delete backups older than 30 days<a class="headerlink" href="#backup-vmail-crypt-and-mysql-data-delete-backups-older-than-30-days" title="Permanent link">&para;</a></h1>
# Backup vmail, crypt and mysql data, delete backups older than 30 days <p>./helper-scripts/backup_and_restore.sh backup vmail crypt mysql --delete-days 30</p>
./helper-scripts/backup_and_restore.sh backup vmail crypt mysql --delete-days 30 <h1 id="backup-vmail">Backup vmail<a class="headerlink" href="#backup-vmail" title="Permanent link">&para;</a></h1>
<p>./helper-scripts/backup_and_restore.sh backup vmail</p>
# Backup vmail <p>```</p>
./helper-scripts/backup_and_restore.sh backup vmail
</code></pre></div>
<p>The script will ask you for a backup location. Inside of this location it will create folders in the format "mailcow_DATE". <p>The script will ask you for a backup location. Inside of this location it will create folders in the format "mailcow_DATE".
You should not rename those folders to not break the restore process.</p> You should not rename those folders to not break the restore process.</p>
<p>To run a backup unattended, define MAILCOW_BACKUP_LOCATION as environment variable before starting the script:</p> <p>To run a backup unattended, define MAILCOW_BACKUP_LOCATION as environment variable before starting the script:</p>
<div class="highlight"><pre><span></span><code>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all <p><code>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all</code></p>
</code></pre></div>
<h4 id="cronjob">Cronjob<a class="headerlink" href="#cronjob" title="Permanent link">&para;</a></h4> <h4 id="cronjob">Cronjob<a class="headerlink" href="#cronjob" title="Permanent link">&para;</a></h4>
<p>You can run the backup script regularly via cronjob. Make sure <code>BACKUP_LOCATION</code> exists:</p> <p>You can run the backup script regularly via cronjob. Make sure <code>BACKUP_LOCATION</code> exists:</p>
<div class="highlight"><pre><span></span><code>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3 <p><code>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3</code></p>
</code></pre></div>
<p>Per default cron sends the full result of each backup operation by email. If you want cron to only mail on error (non-zero exit code) you may want to use the following snippet. Pathes need to be modified according to your setup (this script is a user contribution).</p> <p>Per default cron sends the full result of each backup operation by email. If you want cron to only mail on error (non-zero exit code) you may want to use the following snippet. Pathes need to be modified according to your setup (this script is a user contribution).</p>
<p>This following script may be placed in <code>/etc/cron.daily/mailcow-backup</code> - do not forget to mark it as executable via <code>chmod +x</code>:</p> <p>This following script may be placed in <code>/etc/cron.daily/mailcow-backup</code> - do not forget to mark it as executable via <code>chmod +x</code>:</p>
<div class="highlight"><pre><span></span><code>#!/bin/sh <p>```</p>
<h1 id="binsh">!/bin/sh<a class="headerlink" href="#binsh" title="Permanent link">&para;</a></h1>
# Backup mailcow data <h1 id="backup-mailcow-data">Backup mailcow data<a class="headerlink" href="#backup-mailcow-data" title="Permanent link">&para;</a></h1>
# https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/ <h1 id="httpsmailcowgithubiomailcow-dockerized-docsbackup_restoreb_n_r-backup"><a href="https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/">https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/</a><a class="headerlink" href="#httpsmailcowgithubiomailcow-dockerized-docsbackup_restoreb_n_r-backup" title="Permanent link">&para;</a></h1>
<p>set -e</p>
set -e <p>OUT="$(mktemp)"
export MAILCOW_BACKUP_LOCATION="/opt/backup"
OUT=&quot;$(mktemp)&quot; SCRIPT="/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh"
export MAILCOW_BACKUP_LOCATION=&quot;/opt/backup&quot; PARAMETERS="backup all"
SCRIPT=&quot;/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh&quot; OPTIONS="--delete-days 30"</p>
PARAMETERS=&quot;backup all&quot; <h1 id="run-command">run command<a class="headerlink" href="#run-command" title="Permanent link">&para;</a></h1>
OPTIONS=&quot;--delete-days 30&quot; <p>set +e
"${SCRIPT}" ${PARAMETERS} ${OPTIONS} 2&gt;&amp;1 &gt; "$OUT"
# run command RESULT=$?</p>
set +e <p>if [ $RESULT -ne 0 ]
&quot;${SCRIPT}&quot; ${PARAMETERS} ${OPTIONS} 2&gt;&amp;1 &gt; &quot;$OUT&quot;
RESULT=$?
if [ $RESULT -ne 0 ]
then then
echo &quot;${SCRIPT} ${PARAMETERS} ${OPTIONS} encounters an error:&quot; echo "${SCRIPT} ${PARAMETERS} ${OPTIONS} encounters an error:"
echo &quot;RESULT=$RESULT&quot; echo "RESULT=$RESULT"
echo &quot;STDOUT / STDERR:&quot; echo "STDOUT / STDERR:"
cat &quot;$OUT&quot; cat "$OUT"
fi fi
</code></pre></div> ```</p>
<h1 id="backup-strategy-with-rsync-and-mailcow-backup-script">Backup strategy with rsync and mailcow backup script<a class="headerlink" href="#backup-strategy-with-rsync-and-mailcow-backup-script" title="Permanent link">&para;</a></h1> <h1 id="backup-strategy-with-rsync-and-mailcow-backup-script">Backup strategy with rsync and mailcow backup script<a class="headerlink" href="#backup-strategy-with-rsync-and-mailcow-backup-script" title="Permanent link">&para;</a></h1>
<p>Create the destination directory for mailcows helper script: <p>Create the destination directory for mailcows helper script:
<div class="highlight"><pre><span></span><code>mkdir -p /external_share/backups/backup_script <code>mkdir -p /external_share/backups/backup_script</code></p>
</code></pre></div></p>
<p>Create cronjobs: <p>Create cronjobs:
<div class="highlight"><pre><span></span><code>25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized ```
25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized
40 2 * * * rsync -aH --delete /var/lib/docker/volumes /external_share/backups/var_lib_docker_volumes 40 2 * * * rsync -aH --delete /var/lib/docker/volumes /external_share/backups/var_lib_docker_volumes
5 4 * * * cd /opt/mailcow-dockerized/; BACKUP_LOCATION=/external_share/backups/backup_script /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3 5 4 * * * cd /opt/mailcow-dockerized/; BACKUP_LOCATION=/external_share/backups/backup_script /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3</p>
# If you want to, use the acl util to backup permissions of some/all folders/files: getfacl -Rn /path <h1 id="if-you-want-to-use-the-acl-util-to-backup-permissions-of-someall-foldersfiles-getfacl-rn-path">If you want to, use the acl util to backup permissions of some/all folders/files: getfacl -Rn /path<a class="headerlink" href="#if-you-want-to-use-the-acl-util-to-backup-permissions-of-someall-foldersfiles-getfacl-rn-path" title="Permanent link">&para;</a></h1>
</code></pre></div></p> <p>```</p>
<p>On the destination (in this case <code>/external_share/backups</code>) you may want to have snapshot capabilities (ZFS, Btrfs etc.). Snapshot daily and keep for n days for a consistent backup. <p>On the destination (in this case <code>/external_share/backups</code>) you may want to have snapshot capabilities (ZFS, Btrfs etc.). Snapshot daily and keep for n days for a consistent backup.
Do <strong>not</strong> rsync to a Samba share, you need to keep the correct permissions!</p> Do <strong>not</strong> rsync to a Samba share, you need to keep the correct permissions!</p>
<p>To restore you'd simply need to run rsync the other way round and restart Docker to re-read the volumes. Run <code>docker-compose pull</code> and <code>docker-compose up -d</code>.</p> <p>To restore you'd simply need to run rsync the other way round and restart Docker to re-read the volumes. Run <code>docker-compose pull</code> and <code>docker-compose up -d</code>.</p>

Datei anzeigen

@ -2412,15 +2412,13 @@
<h3 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h3> <h3 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h3>
<p>This line backups the vmail directory to a file backup_vmail.tar.gz in the mailcow root directory: <p>This line backups the vmail directory to a file backup_vmail.tar.gz in the mailcow root directory:
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized <code>cd /path/to/mailcow-dockerized
docker run --rm -i -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar cvfz /backup/backup_vmail.tar.gz /vmail docker run --rm -i -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar cvfz /backup/backup_vmail.tar.gz /vmail</code></p>
</code></pre></div></p>
<p>You can change the path by adjusting ${PWD} (which equals to the current directory) to any path you have write-access to. <p>You can change the path by adjusting ${PWD} (which equals to the current directory) to any path you have write-access to.
Set the filename <code>backup_vmail.tar.gz</code> to any custom name, but leave the path as it is. Example: <code>[...] tar cvfz /backup/my_own_filename_.tar.gz</code></p> Set the filename <code>backup_vmail.tar.gz</code> to any custom name, but leave the path as it is. Example: <code>[...] tar cvfz /backup/my_own_filename_.tar.gz</code></p>
<h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3> <h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized <p><code>cd /path/to/mailcow-dockerized
docker run --rm -it -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar xvfz /backup/backup_vmail.tar.gz docker run --rm -it -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar xvfz /backup/backup_vmail.tar.gz</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2411,20 +2411,18 @@
<h1>MySQL (mysqldump)</h1> <h1>MySQL (mysqldump)</h1>
<h2 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h2> <h2 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized <p><code>cd /path/to/mailcow-dockerized
source mailcow.conf source mailcow.conf
DATE=$(date +&quot;%Y%m%d_%H%M%S&quot;) DATE=$(date +"%Y%m%d_%H%M%S")
docker-compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} &gt; backup_${DBNAME}_${DATE}.sql docker-compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} &gt; backup_${DBNAME}_${DATE}.sql</code></p>
</code></pre></div>
<h2 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h2> <h2 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h2>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
<p>You should redirect the SQL dump without <code>docker-compose</code> to prevent parsing errors.</p> <p>You should redirect the SQL dump without <code>docker-compose</code> to prevent parsing errors.</p>
</div> </div>
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized <p><code>cd /path/to/mailcow-dockerized
source mailcow.conf source mailcow.conf
docker exec -i $(docker-compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} &lt; backup_file.sql docker exec -i $(docker-compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} &lt; backup_file.sql</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2459,10 +2459,9 @@
<p>You will need a SSH-enabled destination and a keyfile to connect to said destination. The key should not be protected by a password for the script to work unattended.</p> <p>You will need a SSH-enabled destination and a keyfile to connect to said destination. The key should not be protected by a password for the script to work unattended.</p>
<p>In your mailcow base directory, e.g. <code>/opt/mailcow-dockerized</code> you will find a file <code>create_cold_standby.sh</code>.</p> <p>In your mailcow base directory, e.g. <code>/opt/mailcow-dockerized</code> you will find a file <code>create_cold_standby.sh</code>.</p>
<p>Edit this file and change the exported variables:</p> <p>Edit this file and change the exported variables:</p>
<div class="highlight"><pre><span></span><code>export REMOTE_SSH_KEY=/path/to/keyfile <p><code>export REMOTE_SSH_KEY=/path/to/keyfile
export REMOTE_SSH_PORT=22 export REMOTE_SSH_PORT=22
export REMOTE_SSH_HOST=mailcow-backup.host.name export REMOTE_SSH_HOST=mailcow-backup.host.name</code></p>
</code></pre></div>
<p>The key must be owned and readable by root only.</p> <p>The key must be owned and readable by root only.</p>
<p>Both the source and destination require <code>rsync</code> &gt;= v3.1.0. <p>Both the source and destination require <code>rsync</code> &gt;= v3.1.0.
The destination must have Docker and docker-compose <strong>v1</strong> available.</p> The destination must have Docker and docker-compose <strong>v1</strong> available.</p>
@ -2470,28 +2469,23 @@ The destination must have Docker and docker-compose <strong>v1</strong> availabl
<p>You may want to test the connection by running <code>ssh mailcow-backup.host.name -p22 -i /path/to/keyfile</code>.</p> <p>You may want to test the connection by running <code>ssh mailcow-backup.host.name -p22 -i /path/to/keyfile</code>.</p>
<h2 id="backup-and-refresh-the-cold-standby">Backup and refresh the cold-standby<a class="headerlink" href="#backup-and-refresh-the-cold-standby" title="Permanent link">&para;</a></h2> <h2 id="backup-and-refresh-the-cold-standby">Backup and refresh the cold-standby<a class="headerlink" href="#backup-and-refresh-the-cold-standby" title="Permanent link">&para;</a></h2>
<p>Run the first backup, this may take a while depending on the connection:</p> <p>Run the first backup, this may take a while depending on the connection:</p>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh <p><code>bash /opt/mailcow-dockerized/create_cold_standby.sh</code></p>
</code></pre></div>
<p>That was easy, wasn't it?</p> <p>That was easy, wasn't it?</p>
<p>Updating your cold-standby is just as easy:</p> <p>Updating your cold-standby is just as easy:</p>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh <p><code>bash /opt/mailcow-dockerized/create_cold_standby.sh</code></p>
</code></pre></div>
<p>It's the same command.</p> <p>It's the same command.</p>
<h2 id="automated-backups-with-cron">Automated backups with cron<a class="headerlink" href="#automated-backups-with-cron" title="Permanent link">&para;</a></h2> <h2 id="automated-backups-with-cron">Automated backups with cron<a class="headerlink" href="#automated-backups-with-cron" title="Permanent link">&para;</a></h2>
<p>First make sure that the <code>cron</code> service is enabled and running:</p> <p>First make sure that the <code>cron</code> service is enabled and running:</p>
<div class="highlight"><pre><span></span><code>systemctl enable cron.service &amp;&amp; systemctl start cron.service <p><code>systemctl enable cron.service &amp;&amp; systemctl start cron.service</code></p>
</code></pre></div>
<p>To automate the backups to the cold-standby server you can use a cron job. To edit the cron jobs for the root user run:</p> <p>To automate the backups to the cold-standby server you can use a cron job. To edit the cron jobs for the root user run:</p>
<div class="highlight"><pre><span></span><code>crontab -e <p><code>crontab -e</code></p>
</code></pre></div>
<p>Add the following lines to synchronize the cold standby server daily at 03:00. In this example errors of the last execution are logged into a file.</p> <p>Add the following lines to synchronize the cold standby server daily at 03:00. In this example errors of the last execution are logged into a file.</p>
<div class="highlight"><pre><span></span><code>PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin <p>```
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin</p>
0 3 * * * bash /opt/mailcow-dockerized/create_cold_standby.sh 2&gt; /var/log/mailcow-coldstandby-sync.log <p>0 3 * * * bash /opt/mailcow-dockerized/create_cold_standby.sh 2&gt; /var/log/mailcow-coldstandby-sync.log
</code></pre></div> ```</p>
<p>If saved correctly, the cron job should be shown by typing:</p> <p>If saved correctly, the cron job should be shown by typing:</p>
<div class="highlight"><pre><span></span><code>crontab -l <p><code>crontab -l</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -965,6 +965,20 @@
Restore Restore
</a> </a>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-restore" class="md-nav__link">
./helper-scripts/backup_and_restore.sh restore
</a>
</li> </li>
</ul> </ul>
@ -2374,6 +2388,20 @@
Restore Restore
</a> </a>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-restore" class="md-nav__link">
./helper-scripts/backup_and_restore.sh restore
</a>
</li> </li>
</ul> </ul>
@ -2394,14 +2422,13 @@
<h1>Restore</h1>
<h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3> <h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3>
<p>Please do not copy this script to another location.</p> <p>Please do not copy this script to another location.</p>
<p>To run a restore, <strong>start mailcow</strong>, use the script with "restore" as first parameter.</p> <p>To run a restore, <strong>start mailcow</strong>, use the script with "restore" as first parameter.</p>
<div class="highlight"><pre><span></span><code># Syntax: <p>```</p>
# ./helper-scripts/backup_and_restore.sh restore <h1 id="syntax">Syntax:<a class="headerlink" href="#syntax" title="Permanent link">&para;</a></h1>
</code></pre></div> <h1 id="helper-scriptsbackup_and_restoresh-restore">./helper-scripts/backup_and_restore.sh restore<a class="headerlink" href="#helper-scriptsbackup_and_restoresh-restore" title="Permanent link">&para;</a></h1>
<p>```</p>
<p>The script will ask you for a backup location containing the mailcow_DATE folders.</p> <p>The script will ask you for a backup location containing the mailcow_DATE folders.</p>
<hr> <hr>

Datei anzeigen

@ -2428,9 +2428,8 @@
<p>Um die Mailbox wiederherzustellen, stellen Sie sicher, dass Sie tatsächlich auf die gleiche Mailcow wiederherstellen, von der sie gelöscht wurde, oder Sie verwenden die gleichen Verschlüsselungsschlüssel in <code>crypt-vol-1</code>.</p> <p>Um die Mailbox wiederherzustellen, stellen Sie sicher, dass Sie tatsächlich auf die gleiche Mailcow wiederherstellen, von der sie gelöscht wurde, oder Sie verwenden die gleichen Verschlüsselungsschlüssel in <code>crypt-vol-1</code>.</p>
<p><strong>Stellen Sie sicher, dass der Benutzer, den Sie wiederherstellen wollen, in Ihrer Mailcow existiert</strong>. Legen Sie diesen neu an, wenn der Benutzer fehlt.</p> <p><strong>Stellen Sie sicher, dass der Benutzer, den Sie wiederherstellen wollen, in Ihrer Mailcow existiert</strong>. Legen Sie diesen neu an, wenn der Benutzer fehlt.</p>
<p>Kopieren Sie die Ordner von <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/_garbage/[timestamp]_[domain_sanitized][user_sanitized]</code> zurück nach <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/[domain]/[user]</code> und synchronisieren Sie die Ordner neu und berechnen Sie die Quota (Speicherplatz) neu:</p> <p>Kopieren Sie die Ordner von <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/_garbage/[timestamp]_[domain_sanitized][user_sanitized]</code> zurück nach <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/[domain]/[user]</code> und synchronisieren Sie die Ordner neu und berechnen Sie die Quota (Speicherplatz) neu:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net &#39;*&#39; <p><code>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net '*'
docker-compose exec dovecot-mailcow doveadm quota recalc -u restoreme@example.net docker-compose exec dovecot-mailcow doveadm quota recalc -u restoreme@example.net</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -961,6 +961,47 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days" class="md-nav__link">
./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)
</a>
</li>
<li class="md-nav__item">
<a href="#alles-sichern-sicherungen-alter-als-3-tage-loschen" class="md-nav__link">
Alles sichern, Sicherungen älter als 3 Tage löschen
</a>
</li>
<li class="md-nav__item">
<a href="#vmail-crypt-und-mysql-daten-sichern-sicherungen-loschen-die-alter-als-30-tage-sind" class="md-nav__link">
vmail-, crypt- und mysql-Daten sichern, Sicherungen löschen, die älter als 30 Tage sind
</a>
</li>
<li class="md-nav__item">
<a href="#vmail-sichern" class="md-nav__link">
vmail sichern
</a>
<nav class="md-nav" aria-label="vmail sichern">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#cronjob" class="md-nav__link"> <a href="#cronjob" class="md-nav__link">
Cronjob Cronjob
@ -971,6 +1012,48 @@
</ul> </ul>
</nav> </nav>
</li>
<li class="md-nav__item">
<a href="#binsh" class="md-nav__link">
!/bin/sh
</a>
</li>
<li class="md-nav__item">
<a href="#backup-mailcow-data" class="md-nav__link">
Backup mailcow data
</a>
</li>
<li class="md-nav__item">
<a href="#httpsmailcowgithubiomailcow-dockerized-docsb_n_r_backup" class="md-nav__link">
https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/
</a>
</li>
<li class="md-nav__item">
<a href="#run-command" class="md-nav__link">
run command
</a>
</li>
<li class="md-nav__item">
<a href="#httpsmailcowgithubiomailcow-dockerized-docsb_n_r_backup_1" class="md-nav__link">
https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/
</a>
</li>
<li class="md-nav__item">
<a href="#befehl-ausfuhren" class="md-nav__link">
Befehl ausführen
</a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
@ -978,6 +1061,13 @@
Backup-Strategie mit rsync und mailcow Backup-Skript Backup-Strategie mit rsync und mailcow Backup-Skript
</a> </a>
</li>
<li class="md-nav__item">
<a href="#wenn-sie-wollen-benutzen-sie-acl-util-um-die-berechtigungen-einigeraller-ordnerdateien-zu-sichern-getfacl-rn-path" class="md-nav__link">
Wenn Sie wollen, benutzen Sie acl util, um die Berechtigungen einiger/aller Ordner/Dateien zu sichern: getfacl -Rn /path
</a>
</li> </li>
</ul> </ul>
@ -2411,6 +2501,47 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days" class="md-nav__link">
./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)
</a>
</li>
<li class="md-nav__item">
<a href="#alles-sichern-sicherungen-alter-als-3-tage-loschen" class="md-nav__link">
Alles sichern, Sicherungen älter als 3 Tage löschen
</a>
</li>
<li class="md-nav__item">
<a href="#vmail-crypt-und-mysql-daten-sichern-sicherungen-loschen-die-alter-als-30-tage-sind" class="md-nav__link">
vmail-, crypt- und mysql-Daten sichern, Sicherungen löschen, die älter als 30 Tage sind
</a>
</li>
<li class="md-nav__item">
<a href="#vmail-sichern" class="md-nav__link">
vmail sichern
</a>
<nav class="md-nav" aria-label="vmail sichern">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#cronjob" class="md-nav__link"> <a href="#cronjob" class="md-nav__link">
Cronjob Cronjob
@ -2421,6 +2552,48 @@
</ul> </ul>
</nav> </nav>
</li>
<li class="md-nav__item">
<a href="#binsh" class="md-nav__link">
!/bin/sh
</a>
</li>
<li class="md-nav__item">
<a href="#backup-mailcow-data" class="md-nav__link">
Backup mailcow data
</a>
</li>
<li class="md-nav__item">
<a href="#httpsmailcowgithubiomailcow-dockerized-docsb_n_r_backup" class="md-nav__link">
https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/
</a>
</li>
<li class="md-nav__item">
<a href="#run-command" class="md-nav__link">
run command
</a>
</li>
<li class="md-nav__item">
<a href="#httpsmailcowgithubiomailcow-dockerized-docsb_n_r_backup_1" class="md-nav__link">
https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/
</a>
</li>
<li class="md-nav__item">
<a href="#befehl-ausfuhren" class="md-nav__link">
Befehl ausführen
</a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
@ -2428,6 +2601,13 @@
Backup-Strategie mit rsync und mailcow Backup-Skript Backup-Strategie mit rsync und mailcow Backup-Skript
</a> </a>
</li>
<li class="md-nav__item">
<a href="#wenn-sie-wollen-benutzen-sie-acl-util-um-die-berechtigungen-einigeraller-ordnerdateien-zu-sichern-getfacl-rn-path" class="md-nav__link">
Wenn Sie wollen, benutzen Sie acl util, um die Berechtigungen einiger/aller Ordner/Dateien zu sichern: getfacl -Rn /path
</a>
</li> </li>
</ul> </ul>
@ -2454,84 +2634,72 @@
<p>Bitte kopieren Sie dieses Skript nicht an einen anderen Ort.</p> <p>Bitte kopieren Sie dieses Skript nicht an einen anderen Ort.</p>
<p>Um ein Backup zu starten, geben Sie "backup" als ersten Parameter an und entweder eine oder mehrere zu sichernde Komponenten als folgende Parameter. <p>Um ein Backup zu starten, geben Sie "backup" als ersten Parameter an und entweder eine oder mehrere zu sichernde Komponenten als folgende Parameter.
Sie können auch "all" als zweiten Parameter verwenden, um alle Komponenten zu sichern. Fügen Sie <code>--delete-days n</code> an, um Sicherungen zu löschen, die älter als n Tage sind.</p> Sie können auch "all" als zweiten Parameter verwenden, um alle Komponenten zu sichern. Fügen Sie <code>--delete-days n</code> an, um Sicherungen zu löschen, die älter als n Tage sind.</p>
<div class="highlight"><pre><span></span><code># Syntax: <p>```</p>
# ./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days) <h1 id="syntax">Syntax:<a class="headerlink" href="#syntax" title="Permanent link">&para;</a></h1>
<h1 id="helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days">./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)<a class="headerlink" href="#helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days" title="Permanent link">&para;</a></h1>
# Alles sichern, Sicherungen älter als 3 Tage löschen <h1 id="alles-sichern-sicherungen-alter-als-3-tage-loschen">Alles sichern, Sicherungen älter als 3 Tage löschen<a class="headerlink" href="#alles-sichern-sicherungen-alter-als-3-tage-loschen" title="Permanent link">&para;</a></h1>
./helper-scripts/backup_and_restore.sh backup all --delete-days 3 <p>./helper-scripts/backup_and_restore.sh backup all --delete-days 3</p>
<h1 id="vmail-crypt-und-mysql-daten-sichern-sicherungen-loschen-die-alter-als-30-tage-sind">vmail-, crypt- und mysql-Daten sichern, Sicherungen löschen, die älter als 30 Tage sind<a class="headerlink" href="#vmail-crypt-und-mysql-daten-sichern-sicherungen-loschen-die-alter-als-30-tage-sind" title="Permanent link">&para;</a></h1>
# vmail-, crypt- und mysql-Daten sichern, Sicherungen löschen, die älter als 30 Tage sind <p>./helper-scripts/backup_and_restore.sh backup vmail crypt mysql --delete-days 30</p>
./helper-scripts/backup_and_restore.sh backup vmail crypt mysql --delete-days 30 <h1 id="vmail-sichern">vmail sichern<a class="headerlink" href="#vmail-sichern" title="Permanent link">&para;</a></h1>
<p>./helper-scripts/backup_and_restore.sh backup vmail</p>
# vmail sichern <p>```</p>
./helper-scripts/backup_and_restore.sh backup vmail
</code></pre></div>
<p>Das Skript wird Sie nach einem Speicherort für die Sicherung fragen. Innerhalb dieses Speicherortes wird es Ordner im Format "mailcow_DATE" erstellen. <p>Das Skript wird Sie nach einem Speicherort für die Sicherung fragen. Innerhalb dieses Speicherortes wird es Ordner im Format "mailcow_DATE" erstellen.
Sie sollten diese Ordner nicht umbenennen, um den Wiederherstellungsprozess nicht zu unterbrechen.</p> Sie sollten diese Ordner nicht umbenennen, um den Wiederherstellungsprozess nicht zu unterbrechen.</p>
<p>Um ein Backup unbeaufsichtigt durchzuführen, definieren Sie MAILCOW_BACKUP_LOCATION als Umgebungsvariable bevor Sie das Skript starten:</p> <p>Um ein Backup unbeaufsichtigt durchzuführen, definieren Sie MAILCOW_BACKUP_LOCATION als Umgebungsvariable bevor Sie das Skript starten:</p>
<div class="highlight"><pre><span></span><code>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all <p><code>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all</code></p>
</code></pre></div>
<h4 id="cronjob">Cronjob<a class="headerlink" href="#cronjob" title="Permanent link">&para;</a></h4> <h4 id="cronjob">Cronjob<a class="headerlink" href="#cronjob" title="Permanent link">&para;</a></h4>
<p>Sie können das Backup-Skript regelmäßig über einen Cronjob laufen lassen. Stellen Sie sicher, dass <code>BACKUP_LOCATION</code> existiert:</p> <p>Sie können das Backup-Skript regelmäßig über einen Cronjob laufen lassen. Stellen Sie sicher, dass <code>BACKUP_LOCATION</code> existiert:</p>
<div class="highlight"><pre><span></span><code>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3 <p><code>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3</code></p>
</code></pre></div>
<p>Standardmäßig sendet Cron das komplette Ergebnis jeder Backup-Operation per E-Mail. Wenn Sie möchten, dass cron nur im Fehlerfall (Exit-Code ungleich Null) eine E-Mail sendet, können Sie den folgenden Ausschnitt verwenden. Die Pfade müssen entsprechend Ihrer Einrichtung angepasst werden (dieses Skript ist ein Beitrag des Benutzers).</p> <p>Standardmäßig sendet Cron das komplette Ergebnis jeder Backup-Operation per E-Mail. Wenn Sie möchten, dass cron nur im Fehlerfall (Exit-Code ungleich Null) eine E-Mail sendet, können Sie den folgenden Ausschnitt verwenden. Die Pfade müssen entsprechend Ihrer Einrichtung angepasst werden (dieses Skript ist ein Beitrag des Benutzers).</p>
<p>Das folgende Skript kann in <code>/etc/cron.daily/mailcow-backup</code> platziert werden - vergessen Sie nicht, es mit <code>chmod +x</code> als ausführbar zu markieren:</p> <p>Das folgende Skript kann in <code>/etc/cron.daily/mailcow-backup</code> platziert werden - vergessen Sie nicht, es mit <code>chmod +x</code> als ausführbar zu markieren:</p>
<div class="highlight"><pre><span></span><code>#!/bin/sh <p>```</p>
<h1 id="binsh">!/bin/sh<a class="headerlink" href="#binsh" title="Permanent link">&para;</a></h1>
# Backup mailcow data <h1 id="backup-mailcow-data">Backup mailcow data<a class="headerlink" href="#backup-mailcow-data" title="Permanent link">&para;</a></h1>
# https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/ <h1 id="httpsmailcowgithubiomailcow-dockerized-docsb_n_r_backup"><a href="https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/">https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/</a><a class="headerlink" href="#httpsmailcowgithubiomailcow-dockerized-docsb_n_r_backup" title="Permanent link">&para;</a></h1>
<p>set -e</p>
set -e <p>OUT="$(mktemp)"
export MAILCOW_BACKUP_LOCATION="/opt/backup"
OUT=&quot;$(mktemp)&quot; SCRIPT="/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh"
export MAILCOW_BACKUP_LOCATION=&quot;/opt/backup&quot; PARAMETERS="backup all"
SCRIPT=&quot;/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh&quot; OPTIONS="--delete-days 30"</p>
PARAMETERS=&quot;backup all&quot; <h1 id="run-command">run command<a class="headerlink" href="#run-command" title="Permanent link">&para;</a></h1>
OPTIONS=&quot;--delete-days 30&quot; <p>set +e
"${SCRIPT}" ${PARAMETERS} ${OPTIONS} 2&gt;&amp;1 &gt; "$OUT"
# run command RESULT=$?</p>
set +e <p>if [ $RESULT -ne 0 ]
&quot;${SCRIPT}&quot; ${PARAMETERS} ${OPTIONS} 2&gt;&amp;1 &gt; &quot;$OUT&quot;
RESULT=$?
if [ $RESULT -ne 0 ]
then then
echo &quot;${SCRIPT} ${PARAMETERS} ${OPTIONS} encounters an error:&quot; echo "${SCRIPT} ${PARAMETERS} ${OPTIONS} encounters an error:"
echo &quot;RESULT=$RESULT&quot; echo "RESULT=$RESULT"</p>
# https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/ <h1 id="httpsmailcowgithubiomailcow-dockerized-docsb_n_r_backup_1"><a href="https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/">https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/</a><a class="headerlink" href="#httpsmailcowgithubiomailcow-dockerized-docsb_n_r_backup_1" title="Permanent link">&para;</a></h1>
<p>set -e</p>
set -e <p>OUT="$(mktemp)"
export MAILCOW_BACKUP_LOCATION="/opt/backup"
OUT=&quot;$(mktemp)&quot; SCRIPT="/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh"
export MAILCOW_BACKUP_LOCATION=&quot;/opt/backup&quot; PARAMETERS="alle sichern"
SCRIPT=&quot;/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh&quot; OPTIONS="--delete-days 30"</p>
PARAMETERS=&quot;alle sichern&quot; <h1 id="befehl-ausfuhren">Befehl ausführen<a class="headerlink" href="#befehl-ausfuhren" title="Permanent link">&para;</a></h1>
OPTIONS=&quot;--delete-days 30&quot; <p>setzen +e
"${SCRIPT}" ${PARAMETERS} ${OPTIONS} 2&gt;&amp;1 &gt; "$OUT"
# Befehl ausführen ERGEBNIS=$?</p>
setzen +e <p>if [ $RESULT -ne 0 ]
&quot;${SCRIPT}&quot; ${PARAMETERS} ${OPTIONS} 2&gt;&amp;1 &gt; &quot;$OUT&quot;
ERGEBNIS=$?
if [ $RESULT -ne 0 ]
dann dann
echo &quot;${SCRIPT} ${PARAMETER} ${OPTIONS} ist auf einen Fehler gestoßen:&quot; echo "${SCRIPT} ${PARAMETER} ${OPTIONS} ist auf einen Fehler gestoßen:"
echo &quot;ERGEBNIS=$ERGEBNIS&quot; echo "ERGEBNIS=$ERGEBNIS"
echo &quot;STDOUT / STDERR:&quot; echo "STDOUT / STDERR:"
cat &quot;$OUT&quot; cat "$OUT"
fi fi
</code></pre></div> ```</p>
<h1 id="backup-strategie-mit-rsync-und-mailcow-backup-skript">Backup-Strategie mit rsync und mailcow Backup-Skript<a class="headerlink" href="#backup-strategie-mit-rsync-und-mailcow-backup-skript" title="Permanent link">&para;</a></h1> <h1 id="backup-strategie-mit-rsync-und-mailcow-backup-skript">Backup-Strategie mit rsync und mailcow Backup-Skript<a class="headerlink" href="#backup-strategie-mit-rsync-und-mailcow-backup-skript" title="Permanent link">&para;</a></h1>
<p>Erstellen Sie das Zielverzeichnis für mailcows Hilfsskript: <p>Erstellen Sie das Zielverzeichnis für mailcows Hilfsskript:
<div class="highlight"><pre><span></span><code>mkdir -p /external_share/backups/backup_script <code>mkdir -p /external_share/backups/backup_script</code></p>
</code></pre></div></p>
<p>Cronjobs erstellen: <p>Cronjobs erstellen:
<div class="highlight"><pre><span></span><code>25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized ```
25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized
40 2 * * * rsync -aH --delete /var/lib/docker/volumes /external_share/backups/var_lib_docker_volumes 40 2 * * * rsync -aH --delete /var/lib/docker/volumes /external_share/backups/var_lib_docker_volumes
5 4 * * * cd /opt/mailcow-dockerized/; BACKUP_LOCATION=/external_share/backups/backup_script /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3 5 4 * * * cd /opt/mailcow-dockerized/; BACKUP_LOCATION=/external_share/backups/backup_script /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3</p>
# Wenn Sie wollen, benutzen Sie acl util, um die Berechtigungen einiger/aller Ordner/Dateien zu sichern: getfacl -Rn /path <h1 id="wenn-sie-wollen-benutzen-sie-acl-util-um-die-berechtigungen-einigeraller-ordnerdateien-zu-sichern-getfacl-rn-path">Wenn Sie wollen, benutzen Sie acl util, um die Berechtigungen einiger/aller Ordner/Dateien zu sichern: getfacl -Rn /path<a class="headerlink" href="#wenn-sie-wollen-benutzen-sie-acl-util-um-die-berechtigungen-einigeraller-ordnerdateien-zu-sichern-getfacl-rn-path" title="Permanent link">&para;</a></h1>
</code></pre></div></p> <p>```</p>
<p>Am Zielort (in diesem Fall <code>/external_share/backups</code>) möchten Sie vielleicht Snapshot-Fähigkeiten haben (ZFS, Btrfs usw.). Machen Sie täglich einen Snapshot und bewahren Sie ihn für n Tage auf, um ein konsistentes Backup zu erhalten. <p>Am Zielort (in diesem Fall <code>/external_share/backups</code>) möchten Sie vielleicht Snapshot-Fähigkeiten haben (ZFS, Btrfs usw.). Machen Sie täglich einen Snapshot und bewahren Sie ihn für n Tage auf, um ein konsistentes Backup zu erhalten.
Führen Sie <strong>kein</strong> rsync auf eine Samba-Freigabe durch, Sie müssen die richtigen Berechtigungen einhalten!</p> Führen Sie <strong>kein</strong> rsync auf eine Samba-Freigabe durch, Sie müssen die richtigen Berechtigungen einhalten!</p>
<p>Zum Wiederherstellen müssen Sie rsync einfach in umgekehrter Richtung ausführen und Docker neu starten, um die Volumes erneut zu lesen. Führen Sie <code>docker-compose pull</code> und <code>docker-compose up -d</code> aus.</p> <p>Zum Wiederherstellen müssen Sie rsync einfach in umgekehrter Richtung ausführen und Docker neu starten, um die Volumes erneut zu lesen. Führen Sie <code>docker-compose pull</code> und <code>docker-compose up -d</code> aus.</p>

Datei anzeigen

@ -2412,15 +2412,13 @@
<h3 id="sicherung">Sicherung<a class="headerlink" href="#sicherung" title="Permanent link">&para;</a></h3> <h3 id="sicherung">Sicherung<a class="headerlink" href="#sicherung" title="Permanent link">&para;</a></h3>
<p>Diese Zeile sichert das vmail-Verzeichnis in eine Datei backup_vmail.tar.gz im mailcow-Root-Verzeichnis: <p>Diese Zeile sichert das vmail-Verzeichnis in eine Datei backup_vmail.tar.gz im mailcow-Root-Verzeichnis:
<div class="highlight"><pre><span></span><code>cd /pfad/zu/mailcow-dockerized <code>cd /pfad/zu/mailcow-dockerized
docker run --rm -i -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar cvfz /backup/backup_vmail.tar.gz /vmail docker run --rm -i -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{{ end }}' $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar cvfz /backup/backup_vmail.tar.gz /vmail</code></p>
</code></pre></div></p>
<p>Sie können den Pfad ändern, indem Sie ${PWD} (das dem aktuellen Verzeichnis entspricht) an einen beliebigen Pfad anpassen, auf den Sie Schreibzugriff haben. <p>Sie können den Pfad ändern, indem Sie ${PWD} (das dem aktuellen Verzeichnis entspricht) an einen beliebigen Pfad anpassen, auf den Sie Schreibzugriff haben.
Setzen Sie den Dateinamen <code>backup_vmail.tar.gz</code> auf einen beliebigen Namen, aber lassen Sie den Pfad so wie er ist. Beispiel: <code>[...] tar cvfz /backup/mein_eigener_filename_.tar.gz</code></p> Setzen Sie den Dateinamen <code>backup_vmail.tar.gz</code> auf einen beliebigen Namen, aber lassen Sie den Pfad so wie er ist. Beispiel: <code>[...] tar cvfz /backup/mein_eigener_filename_.tar.gz</code></p>
<h3 id="wiederherstellen">Wiederherstellen<a class="headerlink" href="#wiederherstellen" title="Permanent link">&para;</a></h3> <h3 id="wiederherstellen">Wiederherstellen<a class="headerlink" href="#wiederherstellen" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code>cd /pfad/zu/mailcow-dockerized <p><code>cd /pfad/zu/mailcow-dockerized
docker run --rm -it -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar xvfz /backup/backup_vmail.tar.gz docker run --rm -it -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar xvfz /backup/backup_vmail.tar.gz</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2411,20 +2411,18 @@
<h1>MySQL (mysqldump)</h1> <h1>MySQL (mysqldump)</h1>
<h2 id="sicherung">Sicherung<a class="headerlink" href="#sicherung" title="Permanent link">&para;</a></h2> <h2 id="sicherung">Sicherung<a class="headerlink" href="#sicherung" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code>cd /pfad/zu/mailcow-dockerized <p><code>cd /pfad/zu/mailcow-dockerized
source mailcow.conf source mailcow.conf
DATE=$(Datum +&quot;%Y%m%d_%H%M%S&quot;) DATE=$(Datum +"%Y%m%d_%H%M%S")
docker-compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} &gt; backup_${DBNAME}_${DATE}.sql docker-compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} &gt; backup_${DBNAME}_${DATE}.sql</code></p>
</code></pre></div>
<h2 id="wiederherstellen">Wiederherstellen<a class="headerlink" href="#wiederherstellen" title="Permanent link">&para;</a></h2> <h2 id="wiederherstellen">Wiederherstellen<a class="headerlink" href="#wiederherstellen" title="Permanent link">&para;</a></h2>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
<p>Sie sollten den SQL-Dump ohne <code>docker-compose</code> umleiten, um Parsing-Fehler zu vermeiden.</p> <p>Sie sollten den SQL-Dump ohne <code>docker-compose</code> umleiten, um Parsing-Fehler zu vermeiden.</p>
</div> </div>
<div class="highlight"><pre><span></span><code>cd /pfad/zu/mailcow-dockerized <p><code>cd /pfad/zu/mailcow-dockerized
source mailcow.conf source mailcow.conf
docker exec -i $(docker-compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} &lt; backup_file.sql docker exec -i $(docker-compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} &lt; backup_file.sql</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2459,10 +2459,9 @@
<p>Sie benötigen ein SSH-fähiges Ziel und eine Schlüsseldatei, um sich mit diesem Ziel zu verbinden. Der Schlüssel sollte nicht durch ein Passwort geschützt sein, damit das Skript unbeaufsichtigt arbeiten kann.</p> <p>Sie benötigen ein SSH-fähiges Ziel und eine Schlüsseldatei, um sich mit diesem Ziel zu verbinden. Der Schlüssel sollte nicht durch ein Passwort geschützt sein, damit das Skript unbeaufsichtigt arbeiten kann.</p>
<p>In Ihrem mailcow-Basisverzeichnis, z.B. <code>/opt/mailcow-dockerized</code>, finden Sie eine Datei <code>create_cold_standby.sh</code>.</p> <p>In Ihrem mailcow-Basisverzeichnis, z.B. <code>/opt/mailcow-dockerized</code>, finden Sie eine Datei <code>create_cold_standby.sh</code>.</p>
<p>Bearbeiten Sie diese Datei und ändern Sie die exportierten Variablen:</p> <p>Bearbeiten Sie diese Datei und ändern Sie die exportierten Variablen:</p>
<div class="highlight"><pre><span></span><code>export REMOTE_SSH_KEY=/pfad/zur/keyfile <p><code>export REMOTE_SSH_KEY=/pfad/zur/keyfile
export REMOTE_SSH_PORT=22 export REMOTE_SSH_PORT=22
export REMOTE_SSH_HOST=mailcow-backup.host.name export REMOTE_SSH_HOST=mailcow-backup.host.name</code></p>
</code></pre></div>
<p>Der Schlüssel muss im Besitz von root sein und darf nur von diesem gelesen werden können.</p> <p>Der Schlüssel muss im Besitz von root sein und darf nur von diesem gelesen werden können.</p>
<p>Sowohl die Quelle als auch das Ziel benötigen <code>rsync</code> &gt;= v3.1.0. <p>Sowohl die Quelle als auch das Ziel benötigen <code>rsync</code> &gt;= v3.1.0.
Das Ziel muss über Docker und docker-compose <strong>v1</strong> verfügen.</p> Das Ziel muss über Docker und docker-compose <strong>v1</strong> verfügen.</p>
@ -2470,28 +2469,23 @@ Das Ziel muss über Docker und docker-compose <strong>v1</strong> verfügen.</p>
<p>Sie können die Verbindung testen, indem Sie <code>ssh mailcow-backup.host.name -p22 -i /path/to/keyfile</code> ausführen.</p> <p>Sie können die Verbindung testen, indem Sie <code>ssh mailcow-backup.host.name -p22 -i /path/to/keyfile</code> ausführen.</p>
<h2 id="backup-und-aktualisierung-des-cold-standby">Backup und Aktualisierung des Cold-Standby<a class="headerlink" href="#backup-und-aktualisierung-des-cold-standby" title="Permanent link">&para;</a></h2> <h2 id="backup-und-aktualisierung-des-cold-standby">Backup und Aktualisierung des Cold-Standby<a class="headerlink" href="#backup-und-aktualisierung-des-cold-standby" title="Permanent link">&para;</a></h2>
<p>Starten Sie das erste Backup, dies kann je nach Verbindung eine Weile dauern:</p> <p>Starten Sie das erste Backup, dies kann je nach Verbindung eine Weile dauern:</p>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh <p><code>bash /opt/mailcow-dockerized/create_cold_standby.sh</code></p>
</code></pre></div>
<p>Das war einfach, nicht wahr?</p> <p>Das war einfach, nicht wahr?</p>
<p>Das Aktualisieren des Cold-Standby ist genauso einfach:</p> <p>Das Aktualisieren des Cold-Standby ist genauso einfach:</p>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh <p><code>bash /opt/mailcow-dockerized/create_cold_standby.sh</code></p>
</code></pre></div>
<p>Es ist derselbe Befehl.</p> <p>Es ist derselbe Befehl.</p>
<h2 id="automatisierte-backups-mit-cron">Automatisierte Backups mit cron<a class="headerlink" href="#automatisierte-backups-mit-cron" title="Permanent link">&para;</a></h2> <h2 id="automatisierte-backups-mit-cron">Automatisierte Backups mit cron<a class="headerlink" href="#automatisierte-backups-mit-cron" title="Permanent link">&para;</a></h2>
<p>Stellen Sie zunächst sicher, dass der <code>cron</code> Dienst aktiviert ist und läuft:</p> <p>Stellen Sie zunächst sicher, dass der <code>cron</code> Dienst aktiviert ist und läuft:</p>
<div class="highlight"><pre><span></span><code>systemctl enable cron.service &amp;&amp; systemctl start cron.service <p><code>systemctl enable cron.service &amp;&amp; systemctl start cron.service</code></p>
</code></pre></div>
<p>Um die Backups auf dem Cold-Standby-Server zu automatisieren, können Sie einen Cron-Job verwenden. Um die Cron-Jobs für den Root-Benutzer zu bearbeiten, führen Sie aus:</p> <p>Um die Backups auf dem Cold-Standby-Server zu automatisieren, können Sie einen Cron-Job verwenden. Um die Cron-Jobs für den Root-Benutzer zu bearbeiten, führen Sie aus:</p>
<div class="highlight"><pre><span></span><code>crontab -e <p><code>crontab -e</code></p>
</code></pre></div>
<p>Fügen Sie die folgenden Zeilen hinzu, um den Cold-Standby-Server täglich um 03:00 Uhr zu synchronisieren. In diesem Beispiel werden Fehler der letzten Ausführung in einer Datei protokolliert.</p> <p>Fügen Sie die folgenden Zeilen hinzu, um den Cold-Standby-Server täglich um 03:00 Uhr zu synchronisieren. In diesem Beispiel werden Fehler der letzten Ausführung in einer Datei protokolliert.</p>
<div class="highlight"><pre><span></span><code>PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin <p>```
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin</p>
0 3 * * * bash /opt/mailcow-dockerized/create_cold_standby.sh 2&gt; /var/log/mailcow-coldstandby-sync.log <p>0 3 * * * bash /opt/mailcow-dockerized/create_cold_standby.sh 2&gt; /var/log/mailcow-coldstandby-sync.log
</code></pre></div> ```</p>
<p>Wenn korrekt gespeichert, sollte der Cron-Job durch Eingabe angezeigt werden:</p> <p>Wenn korrekt gespeichert, sollte der Cron-Job durch Eingabe angezeigt werden:</p>
<div class="highlight"><pre><span></span><code>crontab -l <p><code>crontab -l</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -965,6 +965,20 @@
Wiederherstellung Wiederherstellung
</a> </a>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-restore" class="md-nav__link">
./helper-scripts/backup_and_restore.sh restore
</a>
</li> </li>
</ul> </ul>
@ -2374,6 +2388,20 @@
Wiederherstellung Wiederherstellung
</a> </a>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-restore" class="md-nav__link">
./helper-scripts/backup_and_restore.sh restore
</a>
</li> </li>
</ul> </ul>
@ -2394,14 +2422,13 @@
<h1>Wiederherstellung</h1>
<h3 id="wiederherstellung">Wiederherstellung<a class="headerlink" href="#wiederherstellung" title="Permanent link">&para;</a></h3> <h3 id="wiederherstellung">Wiederherstellung<a class="headerlink" href="#wiederherstellung" title="Permanent link">&para;</a></h3>
<p>Bitte kopieren Sie dieses Skript nicht an einen anderen Ort.</p> <p>Bitte kopieren Sie dieses Skript nicht an einen anderen Ort.</p>
<p>Um eine Wiederherstellung durchzuführen, <strong>starten Sie mailcow</strong>, verwenden Sie das Skript mit "restore" als ersten Parameter.</p> <p>Um eine Wiederherstellung durchzuführen, <strong>starten Sie mailcow</strong>, verwenden Sie das Skript mit "restore" als ersten Parameter.</p>
<div class="highlight"><pre><span></span><code># Syntax: <p>```</p>
# ./helper-scripts/backup_and_restore.sh restore <h1 id="syntax">Syntax:<a class="headerlink" href="#syntax" title="Permanent link">&para;</a></h1>
</code></pre></div> <h1 id="helper-scriptsbackup_and_restoresh-restore">./helper-scripts/backup_and_restore.sh restore<a class="headerlink" href="#helper-scriptsbackup_and_restoresh-restore" title="Permanent link">&para;</a></h1>
<p>```</p>
<p>Das Skript wird Sie nach einem Speicherort für die Sicherung der mailcow_DATE-Ordner fragen.</p> <p>Das Skript wird Sie nach einem Speicherort für die Sicherung der mailcow_DATE-Ordner fragen.</p>
<hr> <hr>

Datei anzeigen

@ -2346,8 +2346,7 @@
<h1>Deinstallation</h1> <h1>Deinstallation</h1>
<p>Um mailcow: dockerized mit all seinen Volumes, Images und Containern zu entfernen, tun Sie dies:</p> <p>Um mailcow: dockerized mit all seinen Volumes, Images und Containern zu entfernen, tun Sie dies:</p>
<div class="highlight"><pre><span></span><code>docker-compose down -v --rmi all --remove-orphans <p><code>docker-compose down -v --rmi all --remove-orphans</code></p>
</code></pre></div>
<div class="admonition info"> <div class="admonition info">
<p class="admonition-title">Info</p> <p class="admonition-title">Info</p>
<ul> <ul>

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#nachdem-der-installationsprozess-abgeschlossen-ist-mussen-sie-eventuell-den-dienst-aktivieren-und-sicherstellen-dass-er-gestartet-ist-z-b-centos-7" class="md-skip">
Zum Inhalt
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -362,6 +367,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
Installation Installation
@ -2326,6 +2333,8 @@
</nav> </nav>
</div> </div>
@ -2343,66 +2352,58 @@
<h1>Installation</h1>
<p>Sie benötigen Docker (eine Version &gt;= <code>20.10.2</code> ist erforderlich) und Docker Compose (eine Version <code>&lt;= 2.0</code> ist erforderlich).</p> <p>Sie benötigen Docker (eine Version &gt;= <code>20.10.2</code> ist erforderlich) und Docker Compose (eine Version <code>&lt;= 2.0</code> ist erforderlich).</p>
<p><strong>1.</strong> Erfahren Sie, wie Sie <a href="https://docs.docker.com/install/">Docker</a> und <a href="https://docs.docker.com/compose/install/">Docker Compose</a> installieren.</p> <p><strong>1.</strong> Erfahren Sie, wie Sie <a href="https://docs.docker.com/install/">Docker</a> und <a href="https://docs.docker.com/compose/install/">Docker Compose</a> installieren.</p>
<p>Schnelle Installation für die meisten Betriebssysteme:</p> <p>Schnelle Installation für die meisten Betriebssysteme:</p>
<ul> <ul>
<li> <li>Docker
<p>Docker ```
<div class="highlight"><pre><span></span><code>curl -sSL https://get.docker.com/ | CHANNEL=stable sh curl -sSL <a href="https://get.docker.com/">https://get.docker.com/</a> | CHANNEL=stable sh</li>
# Nachdem der Installationsprozess abgeschlossen ist, müssen Sie eventuell den Dienst aktivieren und sicherstellen, dass er gestartet ist (z. B. CentOS 7) </ul>
systemctl enable --now docker <h1 id="nachdem-der-installationsprozess-abgeschlossen-ist-mussen-sie-eventuell-den-dienst-aktivieren-und-sicherstellen-dass-er-gestartet-ist-z-b-centos-7">Nachdem der Installationsprozess abgeschlossen ist, müssen Sie eventuell den Dienst aktivieren und sicherstellen, dass er gestartet ist (z. B. CentOS 7)<a class="headerlink" href="#nachdem-der-installationsprozess-abgeschlossen-ist-mussen-sie-eventuell-den-dienst-aktivieren-und-sicherstellen-dass-er-gestartet-ist-z-b-centos-7" title="Permanent link">&para;</a></h1>
</code></pre></div></p> <p>systemctl enable --now docker
</li> ```</p>
<li> <ul>
<p>Docker-Compose</p> <li>Docker-Compose</li>
</li>
</ul> </ul>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
<p><strong>mailcow benötigt die neueste Version von docker-compose v1.</strong> Es wird dringend empfohlen, die untenstehenden Befehle zu verwenden, um <code>docker-compose</code> zu installieren. Paket-Manager (z.B. <code>apt</code>, <code>yum</code>) werden <strong>wahrscheinlich</strong> nicht die richtige Version liefern. <p><strong>mailcow benötigt die neueste Version von docker-compose v1.</strong> Es wird dringend empfohlen, die untenstehenden Befehle zu verwenden, um <code>docker-compose</code> zu installieren. Paket-Manager (z.B. <code>apt</code>, <code>yum</code>) werden <strong>wahrscheinlich</strong> nicht die richtige Version liefern.
Hinweis: Dieser Befehl lädt docker-compose aus dem offiziellen Docker-Github-Repository herunter und ist eine sichere Methode. Das Snippet ermittelt die neueste unterstützte Version von mailcow. In fast allen Fällen ist dies die letzte verfügbare Version (Ausnahmen sind kaputte Versionen oder größere Änderungen, die noch nicht von mailcow unterstützt werden).</p> Hinweis: Dieser Befehl lädt docker-compose aus dem offiziellen Docker-Github-Repository herunter und ist eine sichere Methode. Das Snippet ermittelt die neueste unterstützte Version von mailcow. In fast allen Fällen ist dies die letzte verfügbare Version (Ausnahmen sind kaputte Versionen oder größere Änderungen, die noch nicht von mailcow unterstützt werden).</p>
</div> </div>
<div class="highlight"><pre><span></span><code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose <p><code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose</code></p>
</code></pre></div>
<p>Bitte verwenden Sie die neueste verfügbare Docker-Engine und nicht die Engine, die mit Ihrem Distros-Repository ausgeliefert wird.</p> <p>Bitte verwenden Sie die neueste verfügbare Docker-Engine und nicht die Engine, die mit Ihrem Distros-Repository ausgeliefert wird.</p>
<p><strong>1.1.1.</strong> Auf SELinux-aktivierten Systemen, z.B. CentOS 7:</p> <p><strong>1.1.1.</strong> Auf SELinux-aktivierten Systemen, z.B. CentOS 7:</p>
<ul> <ul>
<li>Prüfen Sie, ob das Paket "container-selinux" auf Ihrem System vorhanden ist:</li> <li>Prüfen Sie, ob das Paket "container-selinux" auf Ihrem System vorhanden ist:</li>
</ul> </ul>
<div class="highlight"><pre><span></span><code>rpm -qa | grep container-selinux <p><code>rpm -qa | grep container-selinux</code></p>
</code></pre></div>
<p>Wenn der obige Befehl eine leere oder keine Ausgabe liefert, sollten Sie es über Ihren Paketmanager installieren.</p> <p>Wenn der obige Befehl eine leere oder keine Ausgabe liefert, sollten Sie es über Ihren Paketmanager installieren.</p>
<ul> <ul>
<li>Prüfen Sie, ob Docker SELinux-Unterstützung aktiviert hat:</li> <li>Prüfen Sie, ob Docker SELinux-Unterstützung aktiviert hat:</li>
</ul> </ul>
<div class="highlight"><pre><span></span><code>docker info | grep selinux <p><code>docker info | grep selinux</code></p>
</code></pre></div>
<p>Wenn der obige Befehl eine leere oder keine Ausgabe liefert, erstellen oder bearbeiten Sie <code>/etc/docker/daemon.json</code> und fügen Sie <code>"selinux-enabled": true</code> hinzu. Beispielhafter Inhalt der Datei:</p> <p>Wenn der obige Befehl eine leere oder keine Ausgabe liefert, erstellen oder bearbeiten Sie <code>/etc/docker/daemon.json</code> und fügen Sie <code>"selinux-enabled": true</code> hinzu. Beispielhafter Inhalt der Datei:</p>
<div class="highlight"><pre><span></span><code>{ <p><code>{
&quot;selinux-enabled&quot;: true "selinux-enabled": true
} }</code></p>
</code></pre></div>
<p>Starten Sie den Docker-Daemon neu und überprüfen Sie, ob SELinux nun aktiviert ist.</p> <p>Starten Sie den Docker-Daemon neu und überprüfen Sie, ob SELinux nun aktiviert ist.</p>
<p>Dieser Schritt ist erforderlich, um sicherzustellen, dass die mailcows-Volumes richtig gekennzeichnet sind, wie in der Compose-Datei angegeben. <p>Dieser Schritt ist erforderlich, um sicherzustellen, dass die mailcows-Volumes richtig gekennzeichnet sind, wie in der Compose-Datei angegeben.
Wenn Sie daran interessiert sind, wie das funktioniert, können Sie sich die Readme-Datei von <a href="https://github.com/containers/container-selinux">https://github.com/containers/container-selinux</a> ansehen, die auf viele nützliche Informationen zu diesem Thema verweist.</p> Wenn Sie daran interessiert sind, wie das funktioniert, können Sie sich die Readme-Datei von <a href="https://github.com/containers/container-selinux">https://github.com/containers/container-selinux</a> ansehen, die auf viele nützliche Informationen zu diesem Thema verweist.</p>
<p><strong>2.</strong> Klonen Sie den Master-Zweig des Repositorys und stellen Sie sicher, dass Ihre umask gleich 0022 ist. Bitte klonen Sie das Repository als root-Benutzer und kontrollieren Sie auch den Stack als root. Wir werden die Attribute - wenn nötig - ändern, während wir die Container automatisch bereitstellen und sicherstellen, dass alles gesichert ist. Das update.sh-Skript muss daher ebenfalls als root ausgeführt werden. Es kann notwendig sein, den Besitzer und andere Attribute von Dateien zu ändern, auf die Sie sonst keinen Zugriff haben. <strong>Wir geben die Berechtigungen für jede exponierte Anwendung</strong> auf und führen einen exponierten Dienst nicht als root aus! Wenn Sie den Docker-Daemon als Nicht-Root-Benutzer steuern, erhalten Sie keine zusätzliche Sicherheit. Der unprivilegierte Benutzer wird die Container ebenfalls als root spawnen. Das Verhalten des Stacks ist identisch.</p> <p><strong>2.</strong> Klonen Sie den Master-Zweig des Repositorys und stellen Sie sicher, dass Ihre umask gleich 0022 ist. Bitte klonen Sie das Repository als root-Benutzer und kontrollieren Sie auch den Stack als root. Wir werden die Attribute - wenn nötig - ändern, während wir die Container automatisch bereitstellen und sicherstellen, dass alles gesichert ist. Das update.sh-Skript muss daher ebenfalls als root ausgeführt werden. Es kann notwendig sein, den Besitzer und andere Attribute von Dateien zu ändern, auf die Sie sonst keinen Zugriff haben. <strong>Wir geben die Berechtigungen für jede exponierte Anwendung</strong> auf und führen einen exponierten Dienst nicht als root aus! Wenn Sie den Docker-Daemon als Nicht-Root-Benutzer steuern, erhalten Sie keine zusätzliche Sicherheit. Der unprivilegierte Benutzer wird die Container ebenfalls als root spawnen. Das Verhalten des Stacks ist identisch.</p>
<div class="highlight"><pre><span></span><code>$ su <p>```
# umask $ su</p>
0022 # &lt;- Überprüfen, dass es 0022 ist <h1 id="umask">umask<a class="headerlink" href="#umask" title="Permanent link">&para;</a></h1>
# cd /opt <p>0022 # &lt;- Überprüfen, dass es 0022 ist</p>
# git clone https://github.com/mailcow/mailcow-dockerized <h1 id="cd-opt">cd /opt<a class="headerlink" href="#cd-opt" title="Permanent link">&para;</a></h1>
# cd mailcow-dockerized <h1 id="git-clone-httpsgithubcommailcowmailcow-dockerized">git clone <a href="https://github.com/mailcow/mailcow-dockerized">https://github.com/mailcow/mailcow-dockerized</a><a class="headerlink" href="#git-clone-httpsgithubcommailcowmailcow-dockerized" title="Permanent link">&para;</a></h1>
</code></pre></div> <h1 id="cd-mailcow-dockerized">cd mailcow-dockerized<a class="headerlink" href="#cd-mailcow-dockerized" title="Permanent link">&para;</a></h1>
<p>```</p>
<p><strong>3.</strong> Erzeugen Sie eine Konfigurationsdatei. Verwenden Sie einen FQDN (<code>host.domain.tld</code>) als Hostname, wenn Sie gefragt werden. <p><strong>3.</strong> Erzeugen Sie eine Konfigurationsdatei. Verwenden Sie einen FQDN (<code>host.domain.tld</code>) als Hostname, wenn Sie gefragt werden.
<div class="highlight"><pre><span></span><code>./generate_config.sh <code>./generate_config.sh</code></p>
</code></pre></div></p>
<p><strong>4.</strong> Ändern Sie die Konfiguration, wenn Sie das wollen oder müssen. <p><strong>4.</strong> Ändern Sie die Konfiguration, wenn Sie das wollen oder müssen.
<div class="highlight"><pre><span></span><code>nano mailcow.conf <code>nano mailcow.conf</code>
</code></pre></div>
Wenn Sie planen, einen Reverse Proxy zu verwenden, können Sie zum Beispiel HTTPS an 127.0.0.1 auf Port 8443 und HTTP an 127.0.0.1 auf Port 8080 binden.</p> Wenn Sie planen, einen Reverse Proxy zu verwenden, können Sie zum Beispiel HTTPS an 127.0.0.1 auf Port 8443 und HTTP an 127.0.0.1 auf Port 8080 binden.</p>
<p>Möglicherweise müssen Sie einen vorinstallierten MTA stoppen, der Port 25/tcp blockiert. Siehe <a href="../../post_installation/firststeps-local_mta/">dieses Kapitel</a>, um zu erfahren, wie man Postfix rekonfiguriert, um nach einer erfolgreichen Installation neben mailcow laufen zu lassen.</p> <p>Möglicherweise müssen Sie einen vorinstallierten MTA stoppen, der Port 25/tcp blockiert. Siehe <a href="../../post_installation/firststeps-local_mta/">dieses Kapitel</a>, um zu erfahren, wie man Postfix rekonfiguriert, um nach einer erfolgreichen Installation neben mailcow laufen zu lassen.</p>
<p>Einige Updates modifizieren mailcow.conf und fügen neue Parameter hinzu. Es ist schwer, in der Dokumentation den Überblick zu behalten. Bitte überprüfen Sie deren Beschreibung und fragen Sie, wenn Sie unsicher sind, in den bekannten Kanälen nach Rat.</p> <p>Einige Updates modifizieren mailcow.conf und fügen neue Parameter hinzu. Es ist schwer, in der Dokumentation den Überblick zu behalten. Bitte überprüfen Sie deren Beschreibung und fragen Sie, wenn Sie unsicher sind, in den bekannten Kanälen nach Rat.</p>
@ -2410,20 +2411,18 @@ Wenn Sie planen, einen Reverse Proxy zu verwenden, können Sie zum Beispiel HTTP
<p><strong>Wenn Sie auf Probleme und seltsame Phänomene stoßen, überprüfen Sie bitte Ihre MTU.</strong></p> <p><strong>Wenn Sie auf Probleme und seltsame Phänomene stoßen, überprüfen Sie bitte Ihre MTU.</strong></p>
<p>Bearbeiten Sie <code>docker-compose.yml</code> und ändern Sie die Netzwerkeinstellungen entsprechend Ihrer MTU. <p>Bearbeiten Sie <code>docker-compose.yml</code> und ändern Sie die Netzwerkeinstellungen entsprechend Ihrer MTU.
Fügen Sie den neuen Parameter driver_opts wie folgt hinzu: Fügen Sie den neuen Parameter driver_opts wie folgt hinzu:
<div class="highlight"><pre><span></span><code>networks: <code>networks:
mailcow-network: mailcow-network:
... ...
driver_opts: driver_opts:
com.docker.network.driver.mtu: 1450 com.docker.network.driver.mtu: 1450
... ...</code></p>
</code></pre></div></p>
<p><strong>4.2.</strong> Benutzer ohne ein IPv6-aktiviertes Netzwerk auf ihrem Hostsystem:</p> <p><strong>4.2.</strong> Benutzer ohne ein IPv6-aktiviertes Netzwerk auf ihrem Hostsystem:</p>
<p><strong>Einschalten von IPv6. Endlich.</strong></p> <p><strong>Einschalten von IPv6. Endlich.</strong></p>
<p>Wenn Sie kein IPv6-fähiges Netzwerk auf Ihrem Host haben und Sie sich nicht um ein besseres Internet kümmern (hehe), ist es empfehlenswert, IPv6 für das mailcow-Netzwerk zu <a href="../../post_installation/firststeps-disable_ipv6/">deaktivieren</a>, um unvorhergesehene Probleme zu vermeiden.</p> <p>Wenn Sie kein IPv6-fähiges Netzwerk auf Ihrem Host haben und Sie sich nicht um ein besseres Internet kümmern (hehe), ist es empfehlenswert, IPv6 für das mailcow-Netzwerk zu <a href="../../post_installation/firststeps-disable_ipv6/">deaktivieren</a>, um unvorhergesehene Probleme zu vermeiden.</p>
<p><strong>5.</strong> LAden Sie die Images herunter und führen Sie die Compose-Datei aus. Der Parameter <code>-d</code> wird mailcow: dockerized starten: <p><strong>5.</strong> LAden Sie die Images herunter und führen Sie die Compose-Datei aus. Der Parameter <code>-d</code> wird mailcow: dockerized starten:
<div class="highlight"><pre><span></span><code>docker-compose pull <code>docker-compose pull
docker-compose up -d docker-compose up -d</code></p>
</code></pre></div></p>
<p>Geschafft!</p> <p>Geschafft!</p>
<p>Sie können nun auf <strong>https://${MAILCOW_HOSTNAME}</strong> mit den Standard-Zugangsdaten <code>admin</code> + Passwort <code>moohoo</code> zugreifen.</p> <p>Sie können nun auf <strong>https://${MAILCOW_HOSTNAME}</strong> mit den Standard-Zugangsdaten <code>admin</code> + Passwort <code>moohoo</code> zugreifen.</p>
<div class="admonition info"> <div class="admonition info">

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#nachdem-der-installationsprozess-abgeschlossen-ist-mussen-sie-den-dienst-aktivieren-und-sicherstellen-dass-er-gestartet-ist-z-b-centos-7" class="md-skip">
Zum Inhalt
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -390,6 +395,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
Migration Migration
@ -2326,6 +2333,8 @@
</nav> </nav>
</div> </div>
@ -2343,8 +2352,6 @@
<h1>Migration</h1>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
<p>Diese Anleitung geht davon aus, dass Sie beabsichtigen, einen bestehenden Mailcow-Server (Quelle) auf einen brandneuen, leeren Server (Ziel) zu migrieren. Sie kümmert sich nicht um die Erhaltung bestehender Daten auf dem Zielserver und löscht alles innerhalb von <code>/var/lib/docker/volumes</code> und somit alle Docker-Volumes, die Sie bereits eingerichtet haben.</p> <p>Diese Anleitung geht davon aus, dass Sie beabsichtigen, einen bestehenden Mailcow-Server (Quelle) auf einen brandneuen, leeren Server (Ziel) zu migrieren. Sie kümmert sich nicht um die Erhaltung bestehender Daten auf dem Zielserver und löscht alles innerhalb von <code>/var/lib/docker/volumes</code> und somit alle Docker-Volumes, die Sie bereits eingerichtet haben.</p>
@ -2357,45 +2364,37 @@
Installieren Sie <a href="https://docs.docker.com/engine/installation/linux/">Docker</a> und <a href="https://docs.docker.com/compose/install/">Docker Compose</a> auf Ihrem neuen Server.</p> Installieren Sie <a href="https://docs.docker.com/engine/installation/linux/">Docker</a> und <a href="https://docs.docker.com/compose/install/">Docker Compose</a> auf Ihrem neuen Server.</p>
<p>Schnelle Installation für die meisten Betriebssysteme:</p> <p>Schnelle Installation für die meisten Betriebssysteme:</p>
<ul> <ul>
<li> <li>Docker
<p>Docker ```
<div class="highlight"><pre><span></span><code>curl -sSL https://get.docker.com/ | CHANNEL=stable sh curl -sSL <a href="https://get.docker.com/">https://get.docker.com/</a> | CHANNEL=stable sh</li>
# Nachdem der Installationsprozess abgeschlossen ist, müssen Sie den Dienst aktivieren und sicherstellen, dass er gestartet ist (z. B. CentOS 7) </ul>
systemctl enable docker.service <h1 id="nachdem-der-installationsprozess-abgeschlossen-ist-mussen-sie-den-dienst-aktivieren-und-sicherstellen-dass-er-gestartet-ist-z-b-centos-7">Nachdem der Installationsprozess abgeschlossen ist, müssen Sie den Dienst aktivieren und sicherstellen, dass er gestartet ist (z. B. CentOS 7)<a class="headerlink" href="#nachdem-der-installationsprozess-abgeschlossen-ist-mussen-sie-den-dienst-aktivieren-und-sicherstellen-dass-er-gestartet-ist-z-b-centos-7" title="Permanent link">&para;</a></h1>
</code></pre></div></p> <p>systemctl enable docker.service
</li> ```</p>
<li> <ul>
<p>docker-compose <li>docker-compose
<div class="highlight"><pre><span></span><code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose <code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose</code></li>
</code></pre></div></p>
</li>
</ul> </ul>
<p>Bitte verwenden Sie die neueste verfügbare Docker-Engine und nicht die Engine, die mit Ihrem Distros-Repository ausgeliefert wird.</p> <p>Bitte verwenden Sie die neueste verfügbare Docker-Engine und nicht die Engine, die mit Ihrem Distros-Repository ausgeliefert wird.</p>
<p><strong>2.</strong> Stoppen Sie Docker und stellen Sie sicher, dass Docker gestoppt wurde: <p><strong>2.</strong> Stoppen Sie Docker und stellen Sie sicher, dass Docker gestoppt wurde:
<div class="highlight"><pre><span></span><code>systemctl stop docker.service <code>systemctl stop docker.service
systemctl status docker.service systemctl status docker.service</code></p>
</code></pre></div></p>
<p><strong>3.</strong> Führen Sie die folgenden Befehle auf dem Quellcomputer aus (achten Sie darauf, die abschließenden Schrägstriche im ersten Pfadparameter wie unten gezeigt hinzuzufügen!) - <strong>WARNUNG: Dieser Befehl löscht alles, was bereits unter <code>/var/lib/docker/volumes</code> auf dem Zielrechner existiert</strong>: <p><strong>3.</strong> Führen Sie die folgenden Befehle auf dem Quellcomputer aus (achten Sie darauf, die abschließenden Schrägstriche im ersten Pfadparameter wie unten gezeigt hinzuzufügen!) - <strong>WARNUNG: Dieser Befehl löscht alles, was bereits unter <code>/var/lib/docker/volumes</code> auf dem Zielrechner existiert</strong>:
<div class="highlight"><pre><span></span><code>rsync -aHhP --numeric-ids --delete /opt/mailcow-dockerized/ root@target-machine.example.com:/opt/mailcow-dockerized <code>rsync -aHhP --numeric-ids --delete /opt/mailcow-dockerized/ root@target-machine.example.com:/opt/mailcow-dockerized
rsync -aHhP --numeric-ids --delete /var/lib/docker/volumes/ root@target-machine.example.com:/var/lib/docker/volumes rsync -aHhP --numeric-ids --delete /var/lib/docker/volumes/ root@target-machine.example.com:/var/lib/docker/volumes</code></p>
</code></pre></div></p>
<p><strong>4.</strong> Schalten Sie mailcow ab und stoppen Sie Docker auf dem Quellrechner. <p><strong>4.</strong> Schalten Sie mailcow ab und stoppen Sie Docker auf dem Quellrechner.
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized <code>cd /opt/mailcow-dockerized
docker-compose herunterfahren docker-compose herunterfahren
systemctl stop docker.service systemctl stop docker.service</code></p>
</code></pre></div></p>
<p>**Wiederholen Sie Schritt 3 mit denselben Befehlen. Dies wird viel schneller gehen als beim ersten Mal.</p> <p>**Wiederholen Sie Schritt 3 mit denselben Befehlen. Dies wird viel schneller gehen als beim ersten Mal.</p>
<p><strong>6.</strong> Wechseln Sie auf den Zielrechner und starten Sie Docker. <p><strong>6.</strong> Wechseln Sie auf den Zielrechner und starten Sie Docker.
<div class="highlight"><pre><span></span><code>systemctl start docker.service <code>systemctl start docker.service</code></p>
</code></pre></div></p>
<p><strong>7.</strong> Ziehen Sie nun die mailcow Docker-Images auf den Zielrechner. <p><strong>7.</strong> Ziehen Sie nun die mailcow Docker-Images auf den Zielrechner.
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized <code>cd /opt/mailcow-dockerized
docker-compose pull docker-compose pull</code></p>
</code></pre></div></p>
<p><strong>8.</strong> Starten Sie den gesamten mailcow-Stack und alles sollte fertig sein! <p><strong>8.</strong> Starten Sie den gesamten mailcow-Stack und alles sollte fertig sein!
<div class="highlight"><pre><span></span><code>docker-compose up -d <code>docker-compose up -d</code></p>
</code></pre></div></p>
<p><strong>9.</strong> Zum Schluss ändern Sie Ihre DNS-Einstellungen so, dass sie auf den Zielserver zeigen.</p> <p><strong>9.</strong> Zum Schluss ändern Sie Ihre DNS-Einstellungen so, dass sie auf den Zielserver zeigen.</p>
<hr> <hr>

Datei anzeigen

@ -419,6 +419,75 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#optionen-konnen-kombiniert-werden" class="md-nav__link">
Optionen können kombiniert werden
</a>
</li>
<li class="md-nav__item">
<a href="#-pruft-auf-updates-und-zeigt-anderungen-an" class="md-nav__link">
- Prüft auf Updates und zeigt Änderungen an
</a>
</li>
<li class="md-nav__item">
<a href="#versuchen-sie-nicht-docker-compose-zu-aktualisieren-stellen-sie-sicher-dass-sie-die-neueste-verfugbare-version-von-docker-compose-verwenden" class="md-nav__link">
Versuchen Sie nicht, docker-compose zu aktualisieren, stellen Sie sicher, dass Sie die neueste verfügbare Version von docker-compose verwenden
</a>
</li>
<li class="md-nav__item">
<a href="#-starten-sie-mailcow-nicht-nachdem-sie-ein-update-durchgefuhrt-haben" class="md-nav__link">
- Starten Sie mailcow nicht, nachdem Sie ein Update durchgeführt haben
</a>
</li>
<li class="md-nav__item">
<a href="#-erzwinge-update-unbeaufsichtigt-aber-nicht-unterstutzt-benutzung-auf-eigenes-risiko" class="md-nav__link">
- Erzwinge Update (unbeaufsichtigt, aber nicht unterstützt, Benutzung auf eigenes Risiko)
</a>
</li>
<li class="md-nav__item">
<a href="#-garbage-collector-ausfuhren-um-alte-image-tags-zu-bereinigen-und-beenden" class="md-nav__link">
- Garbage Collector ausführen, um alte Image-Tags zu bereinigen und beenden
</a>
</li>
<li class="md-nav__item">
<a href="#-update-mit-der-merge-strategie-option-ours-statt-theirs" class="md-nav__link">
- Update mit der Merge-Strategie-Option "ours" statt "theirs"
</a>
</li>
<li class="md-nav__item">
<a href="#dies-wird-konflikte-beim-zusammenfuhren-zugunsten-ihrer-lokalen-anderungen-losen-und-sollte-vermieden-werden-lokale-anderungen-werden-immer-beibehalten-es-sei-denn-wir-haben-auch-die-datei-xy-geandert" class="md-nav__link">
Dies wird Konflikte beim Zusammenführen zugunsten Ihrer lokalen Änderungen lösen und sollte vermieden werden. Lokale Änderungen werden immer beibehalten, es sei denn, wir haben auch die Datei XY geändert.
</a>
</li>
<li class="md-nav__item">
<a href="#-nicht-aktualisieren-nur-holen-von-docker-images" class="md-nav__link">
- Nicht aktualisieren, nur holen von Docker Images
</a>
<nav class="md-nav" aria-label="- Nicht aktualisieren, nur holen von Docker Images">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#ich-habe-vergessen-was-ich-vor-dem-ausfuhren-von-updatesh-geandert-habe" class="md-nav__link"> <a href="#ich-habe-vergessen-was-ich-vor-dem-ausfuhren-von-updatesh-geandert-habe" class="md-nav__link">
Ich habe vergessen, was ich vor dem Ausführen von update.sh geändert habe. Ich habe vergessen, was ich vor dem Ausführen von update.sh geändert habe.
@ -433,6 +502,19 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ersetzen-sie-die-commit-id-22cd00b5e28893ef9ddef3c2b5436453cc5223ab-durch-ihre-id" class="md-nav__link">
Ersetzen Sie die Commit-ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab durch Ihre ID
</a>
<nav class="md-nav" aria-label="Ersetzen Sie die Commit-ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab durch Ihre ID">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#hooks" class="md-nav__link"> <a href="#hooks" class="md-nav__link">
Hooks Hooks
@ -440,16 +522,16 @@
</li> </li>
</ul> <li class="md-nav__item">
</nav>
</li>
<li class="md-nav__item">
<a href="#funoten" class="md-nav__link"> <a href="#funoten" class="md-nav__link">
Fußnoten Fußnoten
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2423,6 +2505,75 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#optionen-konnen-kombiniert-werden" class="md-nav__link">
Optionen können kombiniert werden
</a>
</li>
<li class="md-nav__item">
<a href="#-pruft-auf-updates-und-zeigt-anderungen-an" class="md-nav__link">
- Prüft auf Updates und zeigt Änderungen an
</a>
</li>
<li class="md-nav__item">
<a href="#versuchen-sie-nicht-docker-compose-zu-aktualisieren-stellen-sie-sicher-dass-sie-die-neueste-verfugbare-version-von-docker-compose-verwenden" class="md-nav__link">
Versuchen Sie nicht, docker-compose zu aktualisieren, stellen Sie sicher, dass Sie die neueste verfügbare Version von docker-compose verwenden
</a>
</li>
<li class="md-nav__item">
<a href="#-starten-sie-mailcow-nicht-nachdem-sie-ein-update-durchgefuhrt-haben" class="md-nav__link">
- Starten Sie mailcow nicht, nachdem Sie ein Update durchgeführt haben
</a>
</li>
<li class="md-nav__item">
<a href="#-erzwinge-update-unbeaufsichtigt-aber-nicht-unterstutzt-benutzung-auf-eigenes-risiko" class="md-nav__link">
- Erzwinge Update (unbeaufsichtigt, aber nicht unterstützt, Benutzung auf eigenes Risiko)
</a>
</li>
<li class="md-nav__item">
<a href="#-garbage-collector-ausfuhren-um-alte-image-tags-zu-bereinigen-und-beenden" class="md-nav__link">
- Garbage Collector ausführen, um alte Image-Tags zu bereinigen und beenden
</a>
</li>
<li class="md-nav__item">
<a href="#-update-mit-der-merge-strategie-option-ours-statt-theirs" class="md-nav__link">
- Update mit der Merge-Strategie-Option "ours" statt "theirs"
</a>
</li>
<li class="md-nav__item">
<a href="#dies-wird-konflikte-beim-zusammenfuhren-zugunsten-ihrer-lokalen-anderungen-losen-und-sollte-vermieden-werden-lokale-anderungen-werden-immer-beibehalten-es-sei-denn-wir-haben-auch-die-datei-xy-geandert" class="md-nav__link">
Dies wird Konflikte beim Zusammenführen zugunsten Ihrer lokalen Änderungen lösen und sollte vermieden werden. Lokale Änderungen werden immer beibehalten, es sei denn, wir haben auch die Datei XY geändert.
</a>
</li>
<li class="md-nav__item">
<a href="#-nicht-aktualisieren-nur-holen-von-docker-images" class="md-nav__link">
- Nicht aktualisieren, nur holen von Docker Images
</a>
<nav class="md-nav" aria-label="- Nicht aktualisieren, nur holen von Docker Images">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#ich-habe-vergessen-was-ich-vor-dem-ausfuhren-von-updatesh-geandert-habe" class="md-nav__link"> <a href="#ich-habe-vergessen-was-ich-vor-dem-ausfuhren-von-updatesh-geandert-habe" class="md-nav__link">
Ich habe vergessen, was ich vor dem Ausführen von update.sh geändert habe. Ich habe vergessen, was ich vor dem Ausführen von update.sh geändert habe.
@ -2437,6 +2588,19 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ersetzen-sie-die-commit-id-22cd00b5e28893ef9ddef3c2b5436453cc5223ab-durch-ihre-id" class="md-nav__link">
Ersetzen Sie die Commit-ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab durch Ihre ID
</a>
<nav class="md-nav" aria-label="Ersetzen Sie die Commit-ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab durch Ihre ID">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#hooks" class="md-nav__link"> <a href="#hooks" class="md-nav__link">
Hooks Hooks
@ -2444,16 +2608,16 @@
</li> </li>
</ul> <li class="md-nav__item">
</nav>
</li>
<li class="md-nav__item">
<a href="#funoten" class="md-nav__link"> <a href="#funoten" class="md-nav__link">
Fußnoten Fußnoten
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2474,57 +2638,48 @@
<h1>Update</h1>
<h2 id="automatische-aktualisierung">Automatische Aktualisierung<a class="headerlink" href="#automatische-aktualisierung" title="Permanent link">&para;</a></h2> <h2 id="automatische-aktualisierung">Automatische Aktualisierung<a class="headerlink" href="#automatische-aktualisierung" title="Permanent link">&para;</a></h2>
<p>Ein Update-Skript in Ihrem mailcow-dockerized Verzeichnis kümmert sich um Updates.</p> <p>Ein Update-Skript in Ihrem mailcow-dockerized Verzeichnis kümmert sich um Updates.</p>
<p>Aber benutzen Sie es mit Bedacht! Wenn Sie denken, dass Sie viele Änderungen am mailcow-Code vorgenommen haben, sollten Sie die manuelle Update-Anleitung unten verwenden.</p> <p>Aber benutzen Sie es mit Bedacht! Wenn Sie denken, dass Sie viele Änderungen am mailcow-Code vorgenommen haben, sollten Sie die manuelle Update-Anleitung unten verwenden.</p>
<p>Führen sie das Update-Skript aus: <p>Führen sie das Update-Skript aus:
<div class="highlight"><pre><span></span><code>./update.sh <code>./update.sh</code></p>
</code></pre></div></p>
<p>Wenn es nötig ist, wird es Sie fragen, wie Sie fortfahren möchten. <p>Wenn es nötig ist, wird es Sie fragen, wie Sie fortfahren möchten.
Merge-Fehler werden gemeldet. Merge-Fehler werden gemeldet.
Einige kleinere Konflikte werden automatisch korrigiert (zugunsten des mailcow: dockerized repository code).</p> Einige kleinere Konflikte werden automatisch korrigiert (zugunsten des mailcow: dockerized repository code).</p>
<h3 id="optionen">Optionen<a class="headerlink" href="#optionen" title="Permanent link">&para;</a></h3> <h3 id="optionen">Optionen<a class="headerlink" href="#optionen" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code># Optionen können kombiniert werden <p>```</p>
<h1 id="optionen-konnen-kombiniert-werden">Optionen können kombiniert werden<a class="headerlink" href="#optionen-konnen-kombiniert-werden" title="Permanent link">&para;</a></h1>
# - Prüft auf Updates und zeigt Änderungen an <h1 id="-pruft-auf-updates-und-zeigt-anderungen-an">- Prüft auf Updates und zeigt Änderungen an<a class="headerlink" href="#-pruft-auf-updates-und-zeigt-anderungen-an" title="Permanent link">&para;</a></h1>
./update.sh --check <p>./update.sh --check</p>
<h1 id="versuchen-sie-nicht-docker-compose-zu-aktualisieren-stellen-sie-sicher-dass-sie-die-neueste-verfugbare-version-von-docker-compose-verwenden">Versuchen Sie nicht, docker-compose zu aktualisieren, <strong>stellen Sie sicher, dass Sie die neueste verfügbare Version von docker-compose verwenden</strong><a class="headerlink" href="#versuchen-sie-nicht-docker-compose-zu-aktualisieren-stellen-sie-sicher-dass-sie-die-neueste-verfugbare-version-von-docker-compose-verwenden" title="Permanent link">&para;</a></h1>
# Versuchen Sie nicht, docker-compose zu aktualisieren, **stellen Sie sicher, dass Sie die neueste verfügbare Version von docker-compose verwenden** <p>./update.sh --no-update-compose</p>
./update.sh --no-update-compose <h1 id="-starten-sie-mailcow-nicht-nachdem-sie-ein-update-durchgefuhrt-haben">- Starten Sie mailcow nicht, nachdem Sie ein Update durchgeführt haben<a class="headerlink" href="#-starten-sie-mailcow-nicht-nachdem-sie-ein-update-durchgefuhrt-haben" title="Permanent link">&para;</a></h1>
<p>./update.sh --skip-start</p>
# - Starten Sie mailcow nicht, nachdem Sie ein Update durchgeführt haben <h1 id="-erzwinge-update-unbeaufsichtigt-aber-nicht-unterstutzt-benutzung-auf-eigenes-risiko">- Erzwinge Update (unbeaufsichtigt, aber nicht unterstützt, Benutzung auf eigenes Risiko)<a class="headerlink" href="#-erzwinge-update-unbeaufsichtigt-aber-nicht-unterstutzt-benutzung-auf-eigenes-risiko" title="Permanent link">&para;</a></h1>
./update.sh --skip-start <p>./update.sh --force</p>
<h1 id="-garbage-collector-ausfuhren-um-alte-image-tags-zu-bereinigen-und-beenden">- Garbage Collector ausführen, um alte Image-Tags zu bereinigen und beenden<a class="headerlink" href="#-garbage-collector-ausfuhren-um-alte-image-tags-zu-bereinigen-und-beenden" title="Permanent link">&para;</a></h1>
# - Erzwinge Update (unbeaufsichtigt, aber nicht unterstützt, Benutzung auf eigenes Risiko) <p>./update.sh --gc</p>
./update.sh --force <h1 id="-update-mit-der-merge-strategie-option-ours-statt-theirs">- Update mit der Merge-Strategie-Option "ours" statt "theirs"<a class="headerlink" href="#-update-mit-der-merge-strategie-option-ours-statt-theirs" title="Permanent link">&para;</a></h1>
<h1 id="dies-wird-konflikte-beim-zusammenfuhren-zugunsten-ihrer-lokalen-anderungen-losen-und-sollte-vermieden-werden-lokale-anderungen-werden-immer-beibehalten-es-sei-denn-wir-haben-auch-die-datei-xy-geandert">Dies wird <strong>Konflikte</strong> beim Zusammenführen zugunsten Ihrer lokalen Änderungen lösen und sollte vermieden werden. Lokale Änderungen werden immer beibehalten, es sei denn, wir haben auch die Datei XY geändert.<a class="headerlink" href="#dies-wird-konflikte-beim-zusammenfuhren-zugunsten-ihrer-lokalen-anderungen-losen-und-sollte-vermieden-werden-lokale-anderungen-werden-immer-beibehalten-es-sei-denn-wir-haben-auch-die-datei-xy-geandert" title="Permanent link">&para;</a></h1>
# - Garbage Collector ausführen, um alte Image-Tags zu bereinigen und beenden <p>./update.sh --ours</p>
./update.sh --gc <h1 id="-nicht-aktualisieren-nur-holen-von-docker-images">- Nicht aktualisieren, nur holen von Docker Images<a class="headerlink" href="#-nicht-aktualisieren-nur-holen-von-docker-images" title="Permanent link">&para;</a></h1>
<p>./update.sh --prefetch
# - Update mit der Merge-Strategie-Option &quot;ours&quot; statt &quot;theirs&quot; ```</p>
# Dies wird **Konflikte** beim Zusammenführen zugunsten Ihrer lokalen Änderungen lösen und sollte vermieden werden. Lokale Änderungen werden immer beibehalten, es sei denn, wir haben auch die Datei XY geändert.
./update.sh --ours
# - Nicht aktualisieren, nur holen von Docker Images
./update.sh --prefetch
</code></pre></div>
<h3 id="ich-habe-vergessen-was-ich-vor-dem-ausfuhren-von-updatesh-geandert-habe">Ich habe vergessen, was ich vor dem Ausführen von update.sh geändert habe.<a class="headerlink" href="#ich-habe-vergessen-was-ich-vor-dem-ausfuhren-von-updatesh-geandert-habe" title="Permanent link">&para;</a></h3> <h3 id="ich-habe-vergessen-was-ich-vor-dem-ausfuhren-von-updatesh-geandert-habe">Ich habe vergessen, was ich vor dem Ausführen von update.sh geändert habe.<a class="headerlink" href="#ich-habe-vergessen-was-ich-vor-dem-ausfuhren-von-updatesh-geandert-habe" title="Permanent link">&para;</a></h3>
<p>Siehe <code>git log --pretty=oneline | grep -i "before update"</code>, Sie werden eine Ausgabe ähnlich dieser haben:</p> <p>Siehe <code>git log --pretty=oneline | grep -i "before update"</code>, Sie werden eine Ausgabe ähnlich dieser haben:</p>
<div class="highlight"><pre><span></span><code>22cd00b5e28893ef9ddef3c2b5436453cc5223ab Before update on 2020-09-28_19_25_45 <p><code>22cd00b5e28893ef9ddef3c2b5436453cc5223ab Before update on 2020-09-28_19_25_45
dacd4fb9b51e9e1c8a37d84485b92ffaf6c59353 Before update on 2020-08-07_13_31_31 dacd4fb9b51e9e1c8a37d84485b92ffaf6c59353 Before update on 2020-08-07_13_31_31</code></p>
</code></pre></div>
<p>Führen Sie <code>git diff 22cd00b5e28893ef9ddef3c2b5436453cc5223ab</code> aus, um zu sehen, was sich geändert hat.</p> <p>Führen Sie <code>git diff 22cd00b5e28893ef9ddef3c2b5436453cc5223ab</code> aus, um zu sehen, was sich geändert hat.</p>
<h3 id="kann-ich-ein-rollback-durchfuhren">Kann ich ein Rollback durchführen?<a class="headerlink" href="#kann-ich-ein-rollback-durchfuhren" title="Permanent link">&para;</a></h3> <h3 id="kann-ich-ein-rollback-durchfuhren">Kann ich ein Rollback durchführen?<a class="headerlink" href="#kann-ich-ein-rollback-durchfuhren" title="Permanent link">&para;</a></h3>
<p>Ja.</p> <p>Ja.</p>
<p>Siehe das obige Thema, anstelle eines Diffs führen Sie checkout aus:</p> <p>Siehe das obige Thema, anstelle eines Diffs führen Sie checkout aus:</p>
<div class="highlight"><pre><span></span><code>docker-compose down <p>```
# Ersetzen Sie die Commit-ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab durch Ihre ID docker-compose down</p>
git checkout 22cd00b5e28893ef9ddef3c2b5436453cc5223ab <h1 id="ersetzen-sie-die-commit-id-22cd00b5e28893ef9ddef3c2b5436453cc5223ab-durch-ihre-id">Ersetzen Sie die Commit-ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab durch Ihre ID<a class="headerlink" href="#ersetzen-sie-die-commit-id-22cd00b5e28893ef9ddef3c2b5436453cc5223ab-durch-ihre-id" title="Permanent link">&para;</a></h1>
<p>git checkout 22cd00b5e28893ef9ddef3c2b5436453cc5223ab
docker-compose pull docker-compose pull
docker-compose up -d docker-compose up -d
</code></pre></div> ```</p>
<h3 id="hooks">Hooks<a class="headerlink" href="#hooks" title="Permanent link">&para;</a></h3> <h3 id="hooks">Hooks<a class="headerlink" href="#hooks" title="Permanent link">&para;</a></h3>
<p>Sie können sich in den Update-Mechanismus einklinken, indem Sie Skripte namens <code>pre_commit_hook.sh</code> und <code>post_commit_hook.sh</code> zu Ihrem mailcows-Root-Verzeichnis hinzufügen. Siehe <a href="../../manual-guides/u_e-update-hooks/">hier</a> für weitere Details.</p> <p>Sie können sich in den Update-Mechanismus einklinken, indem Sie Skripte namens <code>pre_commit_hook.sh</code> und <code>post_commit_hook.sh</code> zu Ihrem mailcows-Root-Verzeichnis hinzufügen. Siehe <a href="../../manual-guides/u_e-update-hooks/">hier</a> für weitere Details.</p>
<h2 id="funoten">Fußnoten<a class="headerlink" href="#funoten" title="Permanent link">&para;</a></h2> <h2 id="funoten">Fußnoten<a class="headerlink" href="#funoten" title="Permanent link">&para;</a></h2>

Datei anzeigen

@ -2466,21 +2466,20 @@
<li>Sie brauchen <code>your_id</code> von den Downloadlinks. <strong>Diese sind pro User individuell</strong>.</li> <li>Sie brauchen <code>your_id</code> von den Downloadlinks. <strong>Diese sind pro User individuell</strong>.</li>
<li> <li>
<p>Fügen Sie diese wie folgt in die <code>data/conf/clamav/freshclam.conf</code> ein und ersetzen Sie den <code>your_id</code> Teil mit Ihrer ID: <p>Fügen Sie diese wie folgt in die <code>data/conf/clamav/freshclam.conf</code> ein und ersetzen Sie den <code>your_id</code> Teil mit Ihrer ID:
<div class="highlight"><pre><span></span><code>DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.hdb <code>DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.ign2 DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.ign2
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/javascript.ndb DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/javascript.ndb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/spam_marketing.ndb DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/spam_marketing.ndb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfohtml.hdb DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfohtml.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfoascii.hdb DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfoascii.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfopdf.hdb DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfopdf.hdb</code></p>
</code></pre></div></p>
</li> </li>
<li> <li>
<p>Bei den kostenlosen SecuriteInfo Datenbanken ist die Download-Geschwindigkeit auf 300 kB/s begrenzt. Ändern Sie in <code>data/conf/clamav/freshclam.conf</code> den Standardwert <code>ReceiveTimeout 20</code> auf <code>ReceiveTimeout 90</code> (Zeitangabe in Sekunden), da ansonsten einige der Datenbank-Downloads aufgrund ihrer Größe abbrechen können.</p> <p>Bei den kostenlosen SecuriteInfo Datenbanken ist die Download-Geschwindigkeit auf 300 kB/s begrenzt. Ändern Sie in <code>data/conf/clamav/freshclam.conf</code> den Standardwert <code>ReceiveTimeout 20</code> auf <code>ReceiveTimeout 90</code> (Zeitangabe in Sekunden), da ansonsten einige der Datenbank-Downloads aufgrund ihrer Größe abbrechen können.</p>
</li> </li>
<li> <li>
<p>Passen Sie <code>data/conf/clamav/clamd.conf</code> mit den folgenden Einstellungen an: <p>Passen Sie <code>data/conf/clamav/clamd.conf</code> mit den folgenden Einstellungen an:
<div class="highlight"><pre><span></span><code>DetectPUA yes <code>DetectPUA yes
ExcludePUA PUA.Win.Packer ExcludePUA PUA.Win.Packer
ExcludePUA PUA.Win.Trojan.Packed ExcludePUA PUA.Win.Trojan.Packed
ExcludePUA PUA.Win.Trojan.Molebox ExcludePUA PUA.Win.Trojan.Molebox
@ -2492,12 +2491,11 @@ MaxRecursion 40
MaxEmbeddedPE 100M MaxEmbeddedPE 100M
MaxHTMLNormalize 50M MaxHTMLNormalize 50M
MaxScriptNormalize 50M MaxScriptNormalize 50M
MaxZipTypeRcg 50M MaxZipTypeRcg 50M</code></p>
</code></pre></div></p>
</li> </li>
<li>Starten Sie den ClamAV Container neu: <li>Starten Sie den ClamAV Container neu:
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow <code>bash
</code></pre></div></li> docker-compose restart clamd-mailcow</code></li>
</ol> </ol>
<p><strong>Bitte beachten Sie</strong>:</p> <p><strong>Bitte beachten Sie</strong>:</p>
<ul> <ul>
@ -2509,14 +2507,13 @@ MaxZipTypeRcg 50M
<h3 id="interserver-datenbanken-aktivieren">InterServer Datenbanken aktivieren<a class="headerlink" href="#interserver-datenbanken-aktivieren" title="Permanent link">&para;</a></h3> <h3 id="interserver-datenbanken-aktivieren">InterServer Datenbanken aktivieren<a class="headerlink" href="#interserver-datenbanken-aktivieren" title="Permanent link">&para;</a></h3>
<ol> <ol>
<li>Fügen Sie folgendes in <code>data/conf/clamav/freshclam.conf</code> ein: <li>Fügen Sie folgendes in <code>data/conf/clamav/freshclam.conf</code> ein:
<div class="highlight"><pre><span></span><code>DatabaseCustomURL http://sigs.interserver.net/interserver256.hdb <code>DatabaseCustomURL http://sigs.interserver.net/interserver256.hdb
DatabaseCustomURL http://sigs.interserver.net/interservertopline.db DatabaseCustomURL http://sigs.interserver.net/interservertopline.db
DatabaseCustomURL http://sigs.interserver.net/shell.ldb DatabaseCustomURL http://sigs.interserver.net/shell.ldb
DatabaseCustomURL http://sigs.interserver.net/whitelist.fp DatabaseCustomURL http://sigs.interserver.net/whitelist.fp</code></li>
</code></pre></div></li>
<li>Starten Sie den ClamAV Container neu: <li>Starten Sie den ClamAV Container neu:
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow <code>bash
</code></pre></div></li> docker-compose restart clamd-mailcow</code></li>
</ol> </ol>
<hr> <hr>

Datei anzeigen

@ -1842,6 +1842,13 @@
Whitelist für bestimmte ClamAV-Signaturen Whitelist für bestimmte ClamAV-Signaturen
</a> </a>
</li>
<li class="md-nav__item">
<a href="#docker-compose-exec-redis-mailcow-binsh" class="md-nav__link">
docker-compose exec redis-mailcow /bin/sh
</a>
</li> </li>
</ul> </ul>
@ -2374,6 +2381,13 @@
Whitelist für bestimmte ClamAV-Signaturen Whitelist für bestimmte ClamAV-Signaturen
</a> </a>
</li>
<li class="md-nav__item">
<a href="#docker-compose-exec-redis-mailcow-binsh" class="md-nav__link">
docker-compose exec redis-mailcow /bin/sh
</a>
</li> </li>
</ul> </ul>
@ -2394,26 +2408,25 @@
<h1>Whitelist</h1>
<h2 id="whitelist-fur-bestimmte-clamav-signaturen">Whitelist für bestimmte ClamAV-Signaturen<a class="headerlink" href="#whitelist-fur-bestimmte-clamav-signaturen" title="Permanent link">&para;</a></h2> <h2 id="whitelist-fur-bestimmte-clamav-signaturen">Whitelist für bestimmte ClamAV-Signaturen<a class="headerlink" href="#whitelist-fur-bestimmte-clamav-signaturen" title="Permanent link">&para;</a></h2>
<p>Es kann vorkommen, dass legitime (saubere) Mails von ClamAV blockiert werden (Rspamd markiert die Mail mit <code>VIRUS_FOUND</code>). So werden beispielsweise interaktive PDF-Formularanhänge standardmäßig blockiert, da der eingebettete Javascript-Code für schädliche Zwecke verwendet werden könnte. Überprüfen Sie dies anhand der clamd-Protokolle, z.B.:</p> <p>Es kann vorkommen, dass legitime (saubere) Mails von ClamAV blockiert werden (Rspamd markiert die Mail mit <code>VIRUS_FOUND</code>). So werden beispielsweise interaktive PDF-Formularanhänge standardmäßig blockiert, da der eingebettete Javascript-Code für schädliche Zwecke verwendet werden könnte. Überprüfen Sie dies anhand der clamd-Protokolle, z.B.:</p>
<div class="highlight"><pre><span></span><code>docker-compose logs clamd-mailcow <span class="p">|</span> grep <span class="s2">&quot;FOUND&quot;</span> <p><code>bash
</code></pre></div> docker-compose logs clamd-mailcow | grep "FOUND"</code></p>
<p>Diese Zeile bestätigt, dass ein solcher identifiziert wurde:</p> <p>Diese Zeile bestätigt, dass ein solcher identifiziert wurde:</p>
<div class="highlight"><pre><span></span><code>clamd-mailcow_1 | Sat Sep 28 07:43:24 2019 -&gt; instream(local): PUA.Pdf.Trojan.EmbeddedJavaScript-1(e887d2ac324ce90750768b86b63d0749:363325) FOUND <p><code>text
</code></pre></div> clamd-mailcow_1 | Sat Sep 28 07:43:24 2019 -&gt; instream(local): PUA.Pdf.Trojan.EmbeddedJavaScript-1(e887d2ac324ce90750768b86b63d0749:363325) FOUND</code></p>
<p>Um diese spezielle Signatur auf die Whitelist zu setzen (und den Versand dieses Dateityps im Anhang zu ermöglichen), fügen Sie sie der ClamAV-Signatur-Whitelist-Datei hinzu:</p> <p>Um diese spezielle Signatur auf die Whitelist zu setzen (und den Versand dieses Dateityps im Anhang zu ermöglichen), fügen Sie sie der ClamAV-Signatur-Whitelist-Datei hinzu:</p>
<div class="highlight"><pre><span></span><code><span class="nb">echo</span> <span class="s1">&#39;PUA.Pdf.Trojan.EmbeddedJavaScript-1&#39;</span> &gt;&gt; data/conf/clamav/whitelist.ign2 <p><code>bash
</code></pre></div> echo 'PUA.Pdf.Trojan.EmbeddedJavaScript-1' &gt;&gt; data/conf/clamav/whitelist.ign2</code></p>
<p>Dann starten Sie den clamd-mailcow Service Container in der mailcow UI oder mit docker-compose neu:</p> <p>Dann starten Sie den clamd-mailcow Service Container in der mailcow UI oder mit docker-compose neu:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow <p><code>bash
</code></pre></div> docker-compose restart clamd-mailcow</code></p>
<p>Bereinigen Sie zwischengespeicherte ClamAV-Ergebnisse in Redis:</p> <p>Bereinigen Sie zwischengespeicherte ClamAV-Ergebnisse in Redis:</p>
<div class="highlight"><pre><span></span><code># docker-compose exec redis-mailcow /bin/sh <p>```</p>
/data # redis-cli KEYS rs_cl* | xargs redis-cli DEL <h1 id="docker-compose-exec-redis-mailcow-binsh">docker-compose exec redis-mailcow /bin/sh<a class="headerlink" href="#docker-compose-exec-redis-mailcow-binsh" title="Permanent link">&para;</a></h1>
<p>/data # redis-cli KEYS rs_cl* | xargs redis-cli DEL
/data # exit /data # exit
</code></pre></div> ```</p>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2348,14 +2348,11 @@
<h1>Dockerfiles anpassen</h1> <h1>Dockerfiles anpassen</h1>
<p>Sie müssen die Override-Datei mit den entsprechenden Build-Tags in den mailcow: dockerized Root-Ordner (d.h. <code>/opt/mailcow-dockerized</code>) kopieren:</p> <p>Sie müssen die Override-Datei mit den entsprechenden Build-Tags in den mailcow: dockerized Root-Ordner (d.h. <code>/opt/mailcow-dockerized</code>) kopieren:</p>
<div class="highlight"><pre><span></span><code>cp helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml docker-compose.override.yml <p><code>cp helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml docker-compose.override.yml</code></p>
</code></pre></div>
<p>Nehmen Sie Ihre Änderungen in <code>data/Dockerfiles/$service</code> vor und erstellen Sie das Image lokal:</p> <p>Nehmen Sie Ihre Änderungen in <code>data/Dockerfiles/$service</code> vor und erstellen Sie das Image lokal:</p>
<div class="highlight"><pre><span></span><code>docker build data/Dockerfiles/service -t mailcow/$service <p><code>docker build data/Dockerfiles/service -t mailcow/$service</code></p>
</code></pre></div>
<p>Nun werden die geänderten Container automatisch neu erstellt:</p> <p>Nun werden die geänderten Container automatisch neu erstellt:</p>
<div class="highlight"><pre><span></span><code>docker-compose up -d <p><code>docker-compose up -d</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2348,8 +2348,7 @@
<h1>Docker Compose Bash Completion</h1> <h1>Docker Compose Bash Completion</h1>
<p>Um eine schöne Bash-Vervollständigung in Ihren Containern zu erhalten, führen Sie einfach das Folgende aus:</p> <p>Um eine schöne Bash-Vervollständigung in Ihren Containern zu erhalten, führen Sie einfach das Folgende aus:</p>
<div class="highlight"><pre><span></span><code>curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose <p><code>curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2349,8 +2349,7 @@
<p>Am 17. August haben wir die Möglichkeit, mit "jedem" oder "allen authentifizierten Benutzern" zu teilen, standardmäßig deaktiviert.</p> <p>Am 17. August haben wir die Möglichkeit, mit "jedem" oder "allen authentifizierten Benutzern" zu teilen, standardmäßig deaktiviert.</p>
<p>Diese Funktion kann wieder aktiviert werden, indem <code>ACL_ANYONE</code> auf <code>allow</code> in mailcow.conf gesetzt wird:</p> <p>Diese Funktion kann wieder aktiviert werden, indem <code>ACL_ANYONE</code> auf <code>allow</code> in mailcow.conf gesetzt wird:</p>
<div class="highlight"><pre><span></span><code>ACL_ANYONE=allow <p><code>ACL_ANYONE=allow</code></p>
</code></pre></div>
<p>Wenden Sie die Änderungen an, indem Sie <code>docker-compose up -d</code> ausführen.</p> <p>Wenden Sie die Änderungen an, indem Sie <code>docker-compose up -d</code> ausführen.</p>
<hr> <hr>

Datei anzeigen

@ -1564,6 +1564,33 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#binbash" class="md-nav__link">
!/bin/bash
</a>
</li>
<li class="md-nav__item">
<a href="#pfad-zu-mailcow-dockerized-zb-optmailcow-dockerized" class="md-nav__link">
Pfad zu mailcow-dockerized, z.B. /opt/mailcow-dockerized
</a>
</li>
<li class="md-nav__item">
<a href="#jeden-tag-um-0400-uhr-morgens-ausfuhren" class="md-nav__link">
Jeden Tag um 04:00 Uhr morgens ausführen.
</a>
<nav class="md-nav" aria-label="Jeden Tag um 04:00 Uhr morgens ausführen.">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#uber-docker-job-scheduler" class="md-nav__link"> <a href="#uber-docker-job-scheduler" class="md-nav__link">
über Docker Job Scheduler über Docker Job Scheduler
@ -2418,6 +2445,33 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#binbash" class="md-nav__link">
!/bin/bash
</a>
</li>
<li class="md-nav__item">
<a href="#pfad-zu-mailcow-dockerized-zb-optmailcow-dockerized" class="md-nav__link">
Pfad zu mailcow-dockerized, z.B. /opt/mailcow-dockerized
</a>
</li>
<li class="md-nav__item">
<a href="#jeden-tag-um-0400-uhr-morgens-ausfuhren" class="md-nav__link">
Jeden Tag um 04:00 Uhr morgens ausführen.
</a>
<nav class="md-nav" aria-label="Jeden Tag um 04:00 Uhr morgens ausführen.">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#uber-docker-job-scheduler" class="md-nav__link"> <a href="#uber-docker-job-scheduler" class="md-nav__link">
über Docker Job Scheduler über Docker Job Scheduler
@ -2448,23 +2502,17 @@
<h1>Löschen der Mails eines Benutzers</h1>
<p>Wenn Sie alte Mails aus den Ordnern <code>.Junk</code> oder <code>.Trash</code> löschen wollen oder vielleicht alle gelesenen Mails, die älter als eine bestimmte Zeitspanne sind, können Sie das dovecot-Tool doveadm <a href="https://wiki.dovecot.org/Tools/Doveadm/Expunge">man doveadm-expunge</a> verwenden.</p> <p>Wenn Sie alte Mails aus den Ordnern <code>.Junk</code> oder <code>.Trash</code> löschen wollen oder vielleicht alle gelesenen Mails, die älter als eine bestimmte Zeitspanne sind, können Sie das dovecot-Tool doveadm <a href="https://wiki.dovecot.org/Tools/Doveadm/Expunge">man doveadm-expunge</a> verwenden.</p>
<h2 id="der-manuelle-weg">Der manuelle Weg<a class="headerlink" href="#der-manuelle-weg" title="Permanent link">&para;</a></h2> <h2 id="der-manuelle-weg">Der manuelle Weg<a class="headerlink" href="#der-manuelle-weg" title="Permanent link">&para;</a></h2>
<p>Dann wollen wir mal loslegen:</p> <p>Dann wollen wir mal loslegen:</p>
<p>Löschen Sie die Mails eines Benutzers im Junk-Ordner, die <strong>gelesen</strong> und <strong>älter</strong> als 4 Stunden sind</p> <p>Löschen Sie die Mails eines Benutzers im Junk-Ordner, die <strong>gelesen</strong> und <strong>älter</strong> als 4 Stunden sind</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;Junk&#39; SEEN not SINCE 4h <p><code>docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'Junk' SEEN not SINCE 4h</code></p>
</code></pre></div>
<p>Lösche <strong>alle</strong> Mails des Benutzers im Junk-Ordner, die <strong>älter</strong> als 7 Tage sind</p> <p>Lösche <strong>alle</strong> Mails des Benutzers im Junk-Ordner, die <strong>älter</strong> als 7 Tage sind</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 7d <p><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 7d</code></p>
</code></pre></div>
<p>Löscht <strong>alle</strong> Mails (aller Benutzer) in <strong>allen</strong> Ordnern, die <strong>älter</strong> als 52 Wochen sind (internes Datum der Mail, nicht das Datum, an dem sie auf dem System gespeichert wurde =&gt; <code>before</code> statt <code>savedbefore</code>). Nützlich zum Löschen sehr alter Mails in allen Benutzern und Ordnern (daher besonders nützlich für GDPR-Compliance).</p> <p>Löscht <strong>alle</strong> Mails (aller Benutzer) in <strong>allen</strong> Ordnern, die <strong>älter</strong> als 52 Wochen sind (internes Datum der Mail, nicht das Datum, an dem sie auf dem System gespeichert wurde =&gt; <code>before</code> statt <code>savedbefore</code>). Nützlich zum Löschen sehr alter Mails in allen Benutzern und Ordnern (daher besonders nützlich für GDPR-Compliance).</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox % before 52w <p><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox % before 52w</code></p>
</code></pre></div>
<p>Löschen von Mails in einem benutzerdefinierten Ordner <strong>innerhalb</strong> des Posteingangs eines Benutzers, die <strong>nicht</strong> gekennzeichnet und <strong>älter</strong> als 2 Wochen sind</p> <p>Löschen von Mails in einem benutzerdefinierten Ordner <strong>innerhalb</strong> des Posteingangs eines Benutzers, die <strong>nicht</strong> gekennzeichnet und <strong>älter</strong> als 2 Wochen sind</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;INBOX/custom-folder&#39; not FLAGGED not SINCE 2w <p><code>docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'INBOX/custom-folder' not FLAGGED not SINCE 2w</code></p>
</code></pre></div>
<div class="admonition info"> <div class="admonition info">
<p class="admonition-title">Info</p> <p class="admonition-title">Info</p>
<p>Für mögliche <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_date_specification">Zeitspannen</a> oder <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_search_keys">SearchQuery</a> schauen Sie bitte in <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery">man doveadm-search-query</a></p> <p>Für mögliche <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_date_specification">Zeitspannen</a> oder <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_search_keys">SearchQuery</a> schauen Sie bitte in <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery">man doveadm-search-query</a></p>
@ -2472,44 +2520,42 @@
<h2 id="job-scheduler">Job-Scheduler<a class="headerlink" href="#job-scheduler" title="Permanent link">&para;</a></h2> <h2 id="job-scheduler">Job-Scheduler<a class="headerlink" href="#job-scheduler" title="Permanent link">&para;</a></h2>
<h3 id="uber-das-host-system-cron">über das Host-System cron<a class="headerlink" href="#uber-das-host-system-cron" title="Permanent link">&para;</a></h3> <h3 id="uber-das-host-system-cron">über das Host-System cron<a class="headerlink" href="#uber-das-host-system-cron" title="Permanent link">&para;</a></h3>
<p>Wenn Sie eine solche Aufgabe automatisieren wollen, können Sie einen Cron-Job auf Ihrem Rechner erstellen, der ein Skript wie das folgende aufruft:</p> <p>Wenn Sie eine solche Aufgabe automatisieren wollen, können Sie einen Cron-Job auf Ihrem Rechner erstellen, der ein Skript wie das folgende aufruft:</p>
<div class="highlight"><pre><span></span><code>#!/bin/bash <p>```</p>
# Pfad zu mailcow-dockerized, z.B. /opt/mailcow-dockerized <h1 id="binbash">!/bin/bash<a class="headerlink" href="#binbash" title="Permanent link">&para;</a></h1>
cd /pfad/zu/ihrem/mailcow-dockerized <h1 id="pfad-zu-mailcow-dockerized-zb-optmailcow-dockerized">Pfad zu mailcow-dockerized, z.B. /opt/mailcow-dockerized<a class="headerlink" href="#pfad-zu-mailcow-dockerized-zb-optmailcow-dockerized" title="Permanent link">&para;</a></h1>
<p>cd /pfad/zu/ihrem/mailcow-dockerized</p>
/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w <p>/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 2w
/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; SEEN not SINCE 12h /usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox 'Junk' SEEN not SINCE 12h
[...] [...]
</code></pre></div> ```</p>
<p>Um einen Cronjob zu erstellen, können Sie <code>crontab -e</code> ausführen und etwas wie das Folgende einfügen, um ein Skript auszuführen:</p> <p>Um einen Cronjob zu erstellen, können Sie <code>crontab -e</code> ausführen und etwas wie das Folgende einfügen, um ein Skript auszuführen:</p>
<div class="highlight"><pre><span></span><code># Jeden Tag um 04:00 Uhr morgens ausführen. <p>```</p>
0 4 * * * /pfad/zu/ihr/expunge_mailboxes.sh <h1 id="jeden-tag-um-0400-uhr-morgens-ausfuhren">Jeden Tag um 04:00 Uhr morgens ausführen.<a class="headerlink" href="#jeden-tag-um-0400-uhr-morgens-ausfuhren" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>0 4 * * * /pfad/zu/ihr/expunge_mailboxes.sh
```</p>
<h3 id="uber-docker-job-scheduler">über Docker Job Scheduler<a class="headerlink" href="#uber-docker-job-scheduler" title="Permanent link">&para;</a></h3> <h3 id="uber-docker-job-scheduler">über Docker Job Scheduler<a class="headerlink" href="#uber-docker-job-scheduler" title="Permanent link">&para;</a></h3>
<p>Um dies mit einem Docker-Job-Scheduler zu archivieren, verwenden Sie diese docker-compose.override.yml mit Ihrer Mailcow: </p> <p>Um dies mit einem Docker-Job-Scheduler zu archivieren, verwenden Sie diese docker-compose.override.yml mit Ihrer Mailcow: </p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p>```
version: '2.1'</p>
services: <p>services:</p>
<p>ofelia:
ofelia:
image: mcuadros/ofelia:latest image: mcuadros/ofelia:latest
restart: always restart: always
command: daemon --docker command: daemon --docker
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro <br />
network_mode: none network_mode: none</p>
<p>dovecot-mailcow:
dovecot-mailcow:
labels: labels:
- &quot;ofelia.enabled=true&quot; - "ofelia.enabled=true"
- &quot;ofelia.job-exec.dovecot-expunge-trash.schedule=0 4 * * *&quot; - "ofelia.job-exec.dovecot-expunge-trash.schedule=0 4 * * *"
- &quot;ofelia.job-exec.dovecot-expunge-trash.command=doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w&quot; - "ofelia.job-exec.dovecot-expunge-trash.command=doveadm expunge -A mailbox 'Junk' savedbefore 2w"
- &quot;ofelia.job-exec.dovecot-expunge-trash.tty=false&quot; - "ofelia.job-exec.dovecot-expunge-trash.tty=false"</p>
</code></pre></div> <p>```</p>
<p>Der Job-Controller braucht nur Zugriff auf den Docker Control Socket, um das Verhalten von "exec" zu emulieren. Dann fügen wir unserem Dovecot-Container ein paar Labels hinzu, um den Job-Scheduler zu aktivieren und ihm in einem Cron-kompatiblen Scheduling-Format mitzuteilen, wann er laufen soll. Wenn Sie Probleme mit dem Scheduling-String haben, können Sie <a href="https://crontab.guru/">crontab guru</a> verwenden. <p>Der Job-Controller braucht nur Zugriff auf den Docker Control Socket, um das Verhalten von "exec" zu emulieren. Dann fügen wir unserem Dovecot-Container ein paar Labels hinzu, um den Job-Scheduler zu aktivieren und ihm in einem Cron-kompatiblen Scheduling-Format mitzuteilen, wann er laufen soll. Wenn Sie Probleme mit dem Scheduling-String haben, können Sie <a href="https://crontab.guru/">crontab guru</a> verwenden.
Diese docker-compose.override.yml löscht jeden Tag um 4 Uhr morgens alle Mails, die älter als 2 Wochen sind, aus dem Ordner "Junk". Um zu sehen, ob alles richtig gelaufen ist, können Sie nicht nur in Ihrer Mailbox nachsehen, sondern auch im Docker-Log von Ofelia, ob es etwa so aussieht:</p> Diese docker-compose.override.yml löscht jeden Tag um 4 Uhr morgens alle Mails, die älter als 2 Wochen sind, aus dem Ordner "Junk". Um zu sehen, ob alles richtig gelaufen ist, können Sie nicht nur in Ihrer Mailbox nachsehen, sondern auch im Docker-Log von Ofelia, ob es etwa so aussieht:</p>
<div class="highlight"><pre><span></span><code>common.go:124 ▶ NOTICE [Job &quot;dovecot-expunge-trash&quot; (8759567efa66)] Started - doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w, <p><code>common.go:124 ▶ NOTICE [Job "dovecot-expunge-trash" (8759567efa66)] Started - doveadm expunge -A mailbox 'Junk' savedbefore 2w,
common.go:124 ▶ NOTICE [Job &quot;dovecot-expunge-trash&quot; (8759567efa66)] Finished in &quot;285.032291ms&quot;, failed: false, skipped: false, error: none, common.go:124 ▶ NOTICE [Job "dovecot-expunge-trash" (8759567efa66)] Finished in "285.032291ms", failed: false, skipped: false, error: none,</code></p>
</code></pre></div>
<p>Wenn der Vorgang fehlgeschlagen ist, wird dies angegeben und die Ausgabe von doveadm im Protokoll aufgeführt, um Ihnen die Fehlersuche zu erleichtern.</p> <p>Wenn der Vorgang fehlgeschlagen ist, wird dies angegeben und die Ausgabe von doveadm im Protokoll aufgeführt, um Ihnen die Fehlersuche zu erleichtern.</p>
<p>Falls Sie weitere Jobs hinzufügen wollen, stellen Sie sicher, dass Sie den "dovecot-expunge-trash"-Teil nach "ofelia.job-exec." in etwas anderes ändern, er definiert den Namen des Jobs. Die Syntax der Labels finden Sie unter <a href="https://github.com/mcuadros/ofelia">mcuadros/ofelia</a>.</p> <p>Falls Sie weitere Jobs hinzufügen wollen, stellen Sie sicher, dass Sie den "dovecot-expunge-trash"-Teil nach "ofelia.job-exec." in etwas anderes ändern, er definiert den Namen des Jobs. Die Syntax der Labels finden Sie unter <a href="https://github.com/mcuadros/ofelia">mcuadros/ofelia</a>.</p>

Datei anzeigen

@ -2349,8 +2349,7 @@
<p>Erstellen Sie eine Datei <code>data/conf/dovecot/extra.conf</code> - falls nicht vorhanden - und fügen Sie Ihren zusätzlichen Inhalt hier ein.</p> <p>Erstellen Sie eine Datei <code>data/conf/dovecot/extra.conf</code> - falls nicht vorhanden - und fügen Sie Ihren zusätzlichen Inhalt hier ein.</p>
<p>Starten Sie <code>dovecot-mailcow</code> neu, um Ihre Änderungen zu übernehmen:</p> <p>Starten Sie <code>dovecot-mailcow</code> neu, um Ihre Änderungen zu übernehmen:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart dovecot-mailcow <p><code>docker-compose restart dovecot-mailcow</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -1571,6 +1571,40 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#einzelbenutzer" class="md-nav__link">
Einzelbenutzer
</a>
</li>
<li class="md-nav__item">
<a href="#alle-benutzer" class="md-nav__link">
alle Benutzer
</a>
</li>
<li class="md-nav__item">
<a href="#einzelner-benutzer" class="md-nav__link">
einzelner Benutzer
</a>
</li>
<li class="md-nav__item">
<a href="#alle-benutzer-aber-offensichtlich-langsamer-und-gefahrlicher" class="md-nav__link">
alle Benutzer, aber offensichtlich langsamer und gefährlicher
</a>
<nav class="md-nav" aria-label="alle Benutzer, aber offensichtlich langsamer und gefährlicher">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#loschen-der-mailbox-daten" class="md-nav__link"> <a href="#loschen-der-mailbox-daten" class="md-nav__link">
Löschen der Mailbox-Daten Löschen der Mailbox-Daten
@ -2404,6 +2438,40 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#einzelbenutzer" class="md-nav__link">
Einzelbenutzer
</a>
</li>
<li class="md-nav__item">
<a href="#alle-benutzer" class="md-nav__link">
alle Benutzer
</a>
</li>
<li class="md-nav__item">
<a href="#einzelner-benutzer" class="md-nav__link">
einzelner Benutzer
</a>
</li>
<li class="md-nav__item">
<a href="#alle-benutzer-aber-offensichtlich-langsamer-und-gefahrlicher" class="md-nav__link">
alle Benutzer, aber offensichtlich langsamer und gefährlicher
</a>
<nav class="md-nav" aria-label="alle Benutzer, aber offensichtlich langsamer und gefährlicher">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#loschen-der-mailbox-daten" class="md-nav__link"> <a href="#loschen-der-mailbox-daten" class="md-nav__link">
Löschen der Mailbox-Daten Löschen der Mailbox-Daten
@ -2434,8 +2502,6 @@
<h1>FTS (Solr)</h1>
<h2 id="fts-solr">FTS Solr<a class="headerlink" href="#fts-solr" title="Permanent link">&para;</a></h2> <h2 id="fts-solr">FTS Solr<a class="headerlink" href="#fts-solr" title="Permanent link">&para;</a></h2>
<p>Solr wird für Setups mit Speicher &gt;= 3,5 GiB verwendet, um eine Volltextsuche in Dovecot zu ermöglichen.</p> <p>Solr wird für Setups mit Speicher &gt;= 3,5 GiB verwendet, um eine Volltextsuche in Dovecot zu ermöglichen.</p>
<p>Bitte beachten Sie, dass Anwendungen wie Solr <em>vielleicht</em> von Zeit zu Zeit gewartet werden müssen.</p> <p>Bitte beachten Sie, dass Anwendungen wie Solr <em>vielleicht</em> von Zeit zu Zeit gewartet werden müssen.</p>
@ -2443,19 +2509,21 @@
<p>Die Standard-Heap-Größe (1024 M) ist in mailcow.conf definiert.</p> <p>Die Standard-Heap-Größe (1024 M) ist in mailcow.conf definiert.</p>
<p>Da wir in Docker laufen und unsere Container mit dem "restart: always" Flag erstellen, wird eine oom Situation zumindest nur einen Neustart des Containers auslösen.</p> <p>Da wir in Docker laufen und unsere Container mit dem "restart: always" Flag erstellen, wird eine oom Situation zumindest nur einen Neustart des Containers auslösen.</p>
<h3 id="fts-bezogene-dovecot-befehle">FTS-bezogene Dovecot-Befehle<a class="headerlink" href="#fts-bezogene-dovecot-befehle" title="Permanent link">&para;</a></h3> <h3 id="fts-bezogene-dovecot-befehle">FTS-bezogene Dovecot-Befehle<a class="headerlink" href="#fts-bezogene-dovecot-befehle" title="Permanent link">&para;</a></h3>
<p><div class="highlight"><pre><span></span><code># Einzelbenutzer <p>```</p>
docker-compose exec dovecot-mailcow doveadm fts rescan -u user@domain <h1 id="einzelbenutzer">Einzelbenutzer<a class="headerlink" href="#einzelbenutzer" title="Permanent link">&para;</a></h1>
# alle Benutzer <p>docker-compose exec dovecot-mailcow doveadm fts rescan -u user@domain</p>
docker-compose exec dovecot-mailcow doveadm fts rescan -A <h1 id="alle-benutzer">alle Benutzer<a class="headerlink" href="#alle-benutzer" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>docker-compose exec dovecot-mailcow doveadm fts rescan -A</p>
<p>```
Dovecot Wiki: "Scannt, welche Mails im Volltextsuchindex vorhanden sind und vergleicht diese mit den tatsächlich in den Postfächern vorhandenen Mails. Dies entfernt Mails aus dem Index, die bereits gelöscht wurden und stellt sicher, dass der nächste doveadm-Index alle fehlenden Mails (falls vorhanden) indiziert."</p> Dovecot Wiki: "Scannt, welche Mails im Volltextsuchindex vorhanden sind und vergleicht diese mit den tatsächlich in den Postfächern vorhandenen Mails. Dies entfernt Mails aus dem Index, die bereits gelöscht wurden und stellt sicher, dass der nächste doveadm-Index alle fehlenden Mails (falls vorhanden) indiziert."</p>
<p>Dies indiziert <strong>nicht</strong> eine Mailbox neu. Es repariert im Grunde einen gegebenen Index.</p> <p>Dies indiziert <strong>nicht</strong> eine Mailbox neu. Es repariert im Grunde einen gegebenen Index.</p>
<p>Wenn Sie die Daten sofort neu indizieren wollen, können Sie den folgenden Befehl ausführen, wobei '*' auch eine Postfachmaske wie 'Sent' sein kann. Sie müssen diese Befehle nicht ausführen, aber es wird die Dinge ein wenig beschleunigen:</p> <p>Wenn Sie die Daten sofort neu indizieren wollen, können Sie den folgenden Befehl ausführen, wobei '*' auch eine Postfachmaske wie 'Sent' sein kann. Sie müssen diese Befehle nicht ausführen, aber es wird die Dinge ein wenig beschleunigen:</p>
<div class="highlight"><pre><span></span><code># einzelner Benutzer <p>```</p>
docker-compose exec dovecot-mailcow doveadm index -u user@domain &#39;*&#39; <h1 id="einzelner-benutzer">einzelner Benutzer<a class="headerlink" href="#einzelner-benutzer" title="Permanent link">&para;</a></h1>
# alle Benutzer, aber offensichtlich langsamer und gefährlicher <p>docker-compose exec dovecot-mailcow doveadm index -u user@domain '*'</p>
docker-compose exec dovecot-mailcow doveadm index -A &#39;*&#39; <h1 id="alle-benutzer-aber-offensichtlich-langsamer-und-gefahrlicher">alle Benutzer, aber offensichtlich langsamer und gefährlicher<a class="headerlink" href="#alle-benutzer-aber-offensichtlich-langsamer-und-gefahrlicher" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>docker-compose exec dovecot-mailcow doveadm index -A '*'
```</p>
<p>Dies <strong>wird</strong> einige Zeit in Anspruch nehmen, abhängig von Ihrer Maschine und Solr kann oom ausführen, überwachen Sie es!</p> <p>Dies <strong>wird</strong> einige Zeit in Anspruch nehmen, abhängig von Ihrer Maschine und Solr kann oom ausführen, überwachen Sie es!</p>
<p>Da die Neuindizierung sehr sinnvoll ist, haben wir sie nicht in die mailcow UI integriert. Sie müssen sich um eventuelle Fehler beim Re-Indizieren einer Mailbox kümmern.</p> <p>Da die Neuindizierung sehr sinnvoll ist, haben wir sie nicht in die mailcow UI integriert. Sie müssen sich um eventuelle Fehler beim Re-Indizieren einer Mailbox kümmern.</p>
<h3 id="loschen-der-mailbox-daten">Löschen der Mailbox-Daten<a class="headerlink" href="#loschen-der-mailbox-daten" title="Permanent link">&para;</a></h3> <h3 id="loschen-der-mailbox-daten">Löschen der Mailbox-Daten<a class="headerlink" href="#loschen-der-mailbox-daten" title="Permanent link">&para;</a></h3>

Datei anzeigen

@ -2462,8 +2462,7 @@
<h3 id="konfiguration-andern">Konfiguration ändern<a class="headerlink" href="#konfiguration-andern" title="Permanent link">&para;</a></h3> <h3 id="konfiguration-andern">Konfiguration ändern<a class="headerlink" href="#konfiguration-andern" title="Permanent link">&para;</a></h3>
<p>Erstellen Sie eine neue Datei <code>data/conf/dovecot/extra.conf</code> (oder bearbeiten Sie sie, falls sie bereits existiert). <p>Erstellen Sie eine neue Datei <code>data/conf/dovecot/extra.conf</code> (oder bearbeiten Sie sie, falls sie bereits existiert).
Fügen Sie die Einstellung ein, gefolgt von dem neuen Wert. Um zum Beispiel das Intervall auf 5 Minuten zu setzen, können Sie Folgendes eingeben:</p> Fügen Sie die Einstellung ein, gefolgt von dem neuen Wert. Um zum Beispiel das Intervall auf 5 Minuten zu setzen, können Sie Folgendes eingeben:</p>
<div class="highlight"><pre><span></span><code>imap_idle_notify_interval = 5 mins <p><code>imap_idle_notify_interval = 5 mins</code></p>
</code></pre></div>
<p>29 Minuten ist der maximale Wert, den der <a href="https://tools.ietf.org/html/rfc2177">entsprechende RFC</a> erlaubt.</p> <p>29 Minuten ist der maximale Wert, den der <a href="https://tools.ietf.org/html/rfc2177">entsprechende RFC</a> erlaubt.</p>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
@ -2471,13 +2470,11 @@ Fügen Sie die Einstellung ein, gefolgt von dem neuen Wert. Um zum Beispiel das
</div> </div>
<h3 id="dovecot-neu-laden">Dovecot neu laden<a class="headerlink" href="#dovecot-neu-laden" title="Permanent link">&para;</a></h3> <h3 id="dovecot-neu-laden">Dovecot neu laden<a class="headerlink" href="#dovecot-neu-laden" title="Permanent link">&para;</a></h3>
<p>Nun laden Sie Dovecot neu:</p> <p>Nun laden Sie Dovecot neu:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow dovecot reload <p><code>docker-compose exec dovecot-mailcow dovecot reload</code></p>
</code></pre></div>
<div class="admonition info"> <div class="admonition info">
<p class="admonition-title">Info</p> <p class="admonition-title">Info</p>
<p>Sie können den Wert dieser Einstellung überprüfen mit <p>Sie können den Wert dieser Einstellung überprüfen mit
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow dovecot -a | grep &quot;imap_idle_notify_interval&quot; <code>docker-compose exec dovecot-mailcow dovecot -a | grep "imap_idle_notify_interval"</code>
</code></pre></div>
Wenn Sie den Wert nicht geändert haben, sollte er auf 2m stehen. Wenn Sie ihn geändert haben, sollten Sie den neuen Wert sehen.</p> Wenn Sie den Wert nicht geändert haben, sollte er auf 2m stehen. Wenn Sie ihn geändert haben, sollten Sie den neuen Wert sehen.</p>
</div> </div>

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#entschlusseln-sie-varvmail" class="md-skip">
Zum Inhalt
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -1556,6 +1561,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
Mail crypt Mail crypt
@ -2328,6 +2335,8 @@
</nav> </nav>
</div> </div>
@ -2345,37 +2354,34 @@
<h1>Mail crypt</h1>
<p>Die Mails werden komprimiert (lz4) und verschlüsselt gespeichert. Das Schlüsselpaar ist in crypt-vol-1 zu finden.</p> <p>Die Mails werden komprimiert (lz4) und verschlüsselt gespeichert. Das Schlüsselpaar ist in crypt-vol-1 zu finden.</p>
<p>Wenn Sie vorhandene maildir-Dateien entschlüsseln/verschlüsseln wollen, können Sie das folgende Skript auf eigene Gefahr verwenden:</p> <p>Wenn Sie vorhandene maildir-Dateien entschlüsseln/verschlüsseln wollen, können Sie das folgende Skript auf eigene Gefahr verwenden:</p>
<p>Rufen Sie Dovecot auf, indem Sie <code>docker-compose exec dovecot-mailcow /bin/bash</code> im mailcow-dockerisierten Verzeichnis ausführen.</p> <p>Rufen Sie Dovecot auf, indem Sie <code>docker-compose exec dovecot-mailcow /bin/bash</code> im mailcow-dockerisierten Verzeichnis ausführen.</p>
<div class="highlight"><pre><span></span><code># Entschlüsseln Sie /var/vmail <p>```</p>
find /var/vmail/ -type f -regextype egrep -regex &#39;.*S=.*W=.*&#39; | while read -r file; do <h1 id="entschlusseln-sie-varvmail">Entschlüsseln Sie /var/vmail<a class="headerlink" href="#entschlusseln-sie-varvmail" title="Permanent link">&para;</a></h1>
if [[ $(head -c7 &quot;$file&quot;) == &quot;CRYPTED&quot; ]]; then <p>find /var/vmail/ -type f -regextype egrep -regex '.<em>S=.</em>W=.*' | while read -r file; do
if [[ $(head -c7 "$file") == "CRYPTED" ]]; then
doveadm fs get compress lz4:0:crypt:private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \ doveadm fs get compress lz4:0:crypt:private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \
&quot;$file&quot; &gt; &quot;/tmp/$(basename &quot;$file&quot;)&quot; "$file" &gt; "/tmp/$(basename "$file")"
if [[ -s &quot;/tmp/$(basename &quot;$file&quot;)&quot; ]]; then if [[ -s "/tmp/$(basename "$file")" ]]; then
chmod 600 &quot;/tmp/$(basename &quot;$file&quot;)&quot; chmod 600 "/tmp/$(basename "$file")"
chown 5000:5000 &quot;/tmp/$(basename &quot;$file&quot;)&quot; chown 5000:5000 "/tmp/$(basename "$file")"
mv &quot;/tmp/$(basename &quot;$file&quot;)&quot; &quot;$file&quot; mv "/tmp/$(basename "$file")" "$file"
else else
rm &quot;/tmp/$(basename &quot;$file&quot;)&quot; rm "/tmp/$(basename "$file")"
fi fi
fi fi
done done</p>
<h1 id="verschlusseln-von-varvmail">Verschlüsseln von /var/vmail<a class="headerlink" href="#verschlusseln-von-varvmail" title="Permanent link">&para;</a></h1>
<p>find /var/vmail/ -type f -regextype egrep -regex '.<em>S=.</em>W=.*' | while read -r file; do
# Verschlüsseln von /var/vmail if [[ $(head -c7 "$file") != "CRYPTED" ]]; then
find /var/vmail/ -type f -regextype egrep -regex &#39;.*S=.*W=.*&#39; | while read -r file; do
if [[ $(head -c7 &quot;$file&quot;) != &quot;CRYPTED&quot; ]]; then
doveadm fs put crypt private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \ doveadm fs put crypt private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \
&quot;$file&quot; &quot;$file&quot; "$file" "$file"
chmod 600 &quot;$file&quot; chmod 600 "$file"
chown 5000:5000 &quot;$file&quot; chown 5000:5000 "$file"
fi fi
done done
</code></pre></div> ```</p>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2414,25 +2414,19 @@
<h2 id="doveadm-quota">doveadm quota<a class="headerlink" href="#doveadm-quota" title="Permanent link">&para;</a></h2> <h2 id="doveadm-quota">doveadm quota<a class="headerlink" href="#doveadm-quota" title="Permanent link">&para;</a></h2>
<p>Die Befehle <code>quota get</code> und <code>quota recalc</code><sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> werden verwendet, um die Quota-Nutzung des aktuellen Benutzers anzuzeigen oder neu zu berechnen. Die angezeigten Werte sind in <em>Kilobytes</em>.</p> <p>Die Befehle <code>quota get</code> und <code>quota recalc</code><sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> werden verwendet, um die Quota-Nutzung des aktuellen Benutzers anzuzeigen oder neu zu berechnen. Die angezeigten Werte sind in <em>Kilobytes</em>.</p>
<p>Um den aktuellen Quota-Status für einen Benutzer / eine Mailbox aufzulisten, tun Sie folgendes:</p> <p>Um den aktuellen Quota-Status für einen Benutzer / eine Mailbox aufzulisten, tun Sie folgendes:</p>
<div class="highlight"><pre><span></span><code>doveadm quota get -u &#39;mailbox@example.org&#39; <p><code>doveadm quota get -u 'mailbox@example.org'</code></p>
</code></pre></div>
<p>Um den Quota-Speicherwert für <strong>alle</strong> Benutzer aufzulisten, tun Sie folgendes:</p> <p>Um den Quota-Speicherwert für <strong>alle</strong> Benutzer aufzulisten, tun Sie folgendes:</p>
<div class="highlight"><pre><span></span><code>doveadm quota get -A |grep &quot;STORAGE&quot; <p><code>doveadm quota get -A |grep "STORAGE"</code></p>
</code></pre></div>
<p>Berechnen Sie die Quota-Nutzung eines einzelnen Benutzers neu:</p> <p>Berechnen Sie die Quota-Nutzung eines einzelnen Benutzers neu:</p>
<div class="highlight"><pre><span></span><code>doveadm quota recalc -u &#39;mailbox@example.org&#39; <p><code>doveadm quota recalc -u 'mailbox@example.org'</code></p>
</code></pre></div>
<h2 id="doveadm-search">doveadm search<a class="headerlink" href="#doveadm-search" title="Permanent link">&para;</a></h2> <h2 id="doveadm-search">doveadm search<a class="headerlink" href="#doveadm-search" title="Permanent link">&para;</a></h2>
<p>Der Befehl <code>doveadm search</code><sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> wird verwendet, um Nachrichten zu finden, die Ihrer Anfrage entsprechen. Er kann den Benutzernamen, die Mailbox-GUID / -UID und die Nachrichten-GUIDs / -UIDs zurückgeben.</p> <p>Der Befehl <code>doveadm search</code><sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> wird verwendet, um Nachrichten zu finden, die Ihrer Anfrage entsprechen. Er kann den Benutzernamen, die Mailbox-GUID / -UID und die Nachrichten-GUIDs / -UIDs zurückgeben.</p>
<p>Um die Anzahl der Nachrichten im <strong>.Trash</strong> Ordner eines Benutzers zu sehen:</p> <p>Um die Anzahl der Nachrichten im <strong>.Trash</strong> Ordner eines Benutzers zu sehen:</p>
<div class="highlight"><pre><span></span><code>doveadm search -A mailbox &#39;Trash&#39; | awk &#39;{print $1}&#39; | sort | uniq -c <p><code>doveadm search -A mailbox 'Trash' | awk '{print $1}' | sort | uniq -c</code></p>
</code></pre></div>
<p>Alle Nachrichten im <strong>Postfach</strong> eines Benutzers anzeigen, die älter als 90 Tage sind:</p> <p>Alle Nachrichten im <strong>Postfach</strong> eines Benutzers anzeigen, die älter als 90 Tage sind:</p>
<div class="highlight"><pre><span></span><code>doveadm search -u &#39;mailbox@example.org&#39; mailbox &#39;INBOX&#39; savedbefore 90d <p><code>doveadm search -u 'mailbox@example.org' mailbox 'INBOX' savedbefore 90d</code></p>
</code></pre></div>
<p>Zeige <strong>alle Nachrichten</strong> in <strong>beliebigen Ordnern</strong>, die <strong>älter</strong> sind als 30 Tage für <code>mailbox@example.org</code>:</p> <p>Zeige <strong>alle Nachrichten</strong> in <strong>beliebigen Ordnern</strong>, die <strong>älter</strong> sind als 30 Tage für <code>mailbox@example.org</code>:</p>
<div class="highlight"><pre><span></span><code>doveadm search -u &#39;mailbox@example.org&#39; mailbox &quot;*&quot; savedbefore 30d <p><code>doveadm search -u 'mailbox@example.org' mailbox "*" savedbefore 30d</code></p>
</code></pre></div>
<div class="footnote"> <div class="footnote">
<hr /> <hr />
<ol> <ol>

Datei anzeigen

@ -2398,28 +2398,25 @@
<p>Erstellen Sie einen neuen öffentlichen Namespace "Public" und eine Mailbox "Develcow" innerhalb dieses Namespaces:</p> <p>Erstellen Sie einen neuen öffentlichen Namespace "Public" und eine Mailbox "Develcow" innerhalb dieses Namespaces:</p>
<p>Bearbeiten oder erstellen Sie <code>data/conf/dovecot/extra.conf</code>, fügen Sie hinzu:</p> <p>Bearbeiten oder erstellen Sie <code>data/conf/dovecot/extra.conf</code>, fügen Sie hinzu:</p>
<div class="highlight"><pre><span></span><code>namespace { <p><code>namespace {
type = public type = public
separator = / separator = /
prefix = Public/ prefix = Public/
location = maildir:/var/vmail/public:INDEXPVT=~/public location = maildir:/var/vmail/public:INDEXPVT=~/public
subscriptions = yes subscriptions = yes
mailbox &quot;Develcow&quot; { mailbox "Develcow" {
auto = subscribe auto = subscribe
} }
} }</code></p>
</code></pre></div>
<p><code>:INDEXPVT=~/public</code> kann weggelassen werden, wenn die Flags, die pro Benutzer gesehen werden, nicht gewünscht sind.</p> <p><code>:INDEXPVT=~/public</code> kann weggelassen werden, wenn die Flags, die pro Benutzer gesehen werden, nicht gewünscht sind.</p>
<p>Die neue Mailbox im öffentlichen Namensraum wird von den Benutzern automatisch abonniert.</p> <p>Die neue Mailbox im öffentlichen Namensraum wird von den Benutzern automatisch abonniert.</p>
<p>Um allen authentifizierten Benutzern vollen Zugriff auf das neue Postfach (nicht auf den gesamten Namespace) zu gewähren, führen Sie aus:</p> <p>Um allen authentifizierten Benutzern vollen Zugriff auf das neue Postfach (nicht auf den gesamten Namespace) zu gewähren, führen Sie aus:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm acl set -A &quot;Public/Develcow&quot; &quot;authenticated&quot; lookup read write write-seen write-deleted insert post delete expunge create <p><code>docker-compose exec dovecot-mailcow doveadm acl set -A "Public/Develcow" "authenticated" lookup read write write-seen write-deleted insert post delete expunge create</code></p>
</code></pre></div>
<p>Passen Sie den Befehl an Ihre Bedürfnisse an, wenn Sie detailliertere Rechte pro Benutzer vergeben möchten (verwenden Sie z.B. <code>-u user@domain</code> anstelle von <code>-A</code>).</p> <p>Passen Sie den Befehl an Ihre Bedürfnisse an, wenn Sie detailliertere Rechte pro Benutzer vergeben möchten (verwenden Sie z.B. <code>-u user@domain</code> anstelle von <code>-A</code>).</p>
<h2 id="erlaube-authentifizierten-benutzern-den-zugriff-auf-den-gesamten-offentlichen-namespace">Erlaube authentifizierten Benutzern den Zugriff auf den gesamten öffentlichen Namespace<a class="headerlink" href="#erlaube-authentifizierten-benutzern-den-zugriff-auf-den-gesamten-offentlichen-namespace" title="Permanent link">&para;</a></h2> <h2 id="erlaube-authentifizierten-benutzern-den-zugriff-auf-den-gesamten-offentlichen-namespace">Erlaube authentifizierten Benutzern den Zugriff auf den gesamten öffentlichen Namespace<a class="headerlink" href="#erlaube-authentifizierten-benutzern-den-zugriff-auf-den-gesamten-offentlichen-namespace" title="Permanent link">&para;</a></h2>
<p>Um allen authentifizierten Benutzern vollen Zugriff auf den gesamten öffentlichen Namespace und seine Unterordner zu gewähren, erstellen Sie eine neue Datei <code>dovecot-acl</code> im Namespace-Stammverzeichnis:</p> <p>Um allen authentifizierten Benutzern vollen Zugriff auf den gesamten öffentlichen Namespace und seine Unterordner zu gewähren, erstellen Sie eine neue Datei <code>dovecot-acl</code> im Namespace-Stammverzeichnis:</p>
<p>Öffnen/bearbeiten/erstellen Sie <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/public/dovecot-acl</code> (passen Sie den Pfad entsprechend an), um die globale ACL-Datei mit dem folgenden Inhalt zu erstellen:</p> <p>Öffnen/bearbeiten/erstellen Sie <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/public/dovecot-acl</code> (passen Sie den Pfad entsprechend an), um die globale ACL-Datei mit dem folgenden Inhalt zu erstellen:</p>
<div class="highlight"><pre><span></span><code>authenticated kxeilprwts <p><code>authenticated kxeilprwts</code></p>
</code></pre></div>
<p>kxeilprwts" ist gleichbedeutend mit "lookup read write write-seen write-deleted insert post delete expunge create".</p> <p>kxeilprwts" ist gleichbedeutend mit "lookup read write write-seen write-deleted insert post delete expunge create".</p>
<p>Sie können <code>doveadm acl set -u user@domain "Public/Develcow" user=user@domain lookup read</code> verwenden, um den Zugriff für einen einzelnen Benutzer zu beschränken. Sie können es auch umdrehen und den Zugriff für alle Benutzer auf "lr" beschränken und nur einigen Benutzern vollen Zugriff gewähren.</p> <p>Sie können <code>doveadm acl set -u user@domain "Public/Develcow" user=user@domain lookup read</code> verwenden, um den Zugriff für einen einzelnen Benutzer zu beschränken. Sie können es auch umdrehen und den Zugriff für alle Benutzer auf "lr" beschränken und nur einigen Benutzern vollen Zugriff gewähren.</p>
<p>Siehe <a href="https://doc.dovecot.org/settings/plugin/acl/">Dovecot ACL</a> für weitere Informationen über ACL.</p> <p>Siehe <a href="https://doc.dovecot.org/settings/plugin/acl/">Dovecot ACL</a> für weitere Informationen über ACL.</p>

Datei anzeigen

@ -2351,9 +2351,8 @@
<p><strong>Das wird empfohlen und sollte nicht geändert werden.</strong></p> <p><strong>Das wird empfohlen und sollte nicht geändert werden.</strong></p>
<p>Wenn der Benutzer trotzdem statisch sein soll, geben Sie bitte zwei Variablen in <code>mailcow.conf</code> an.</p> <p>Wenn der Benutzer trotzdem statisch sein soll, geben Sie bitte zwei Variablen in <code>mailcow.conf</code> an.</p>
<p><strong>Beide</strong> Parameter dürfen nicht leer sein!</p> <p><strong>Beide</strong> Parameter dürfen nicht leer sein!</p>
<div class="highlight"><pre><span></span><code>DOVECOT_MASTER_USER=mymasteruser <p><code>DOVECOT_MASTER_USER=mymasteruser
DOVECOT_MASTER_PASS=mysecretpass DOVECOT_MASTER_PASS=mysecretpass</code></p>
</code></pre></div>
<p>Führen Sie <code>docker-compose up -d</code> aus, um Ihre Änderungen zu übernehmen.</p> <p>Führen Sie <code>docker-compose up -d</code> aus, um Ihre Änderungen zu übernehmen.</p>
<p>Der statische Master-Benutzername wird zu <code>DOVECOT_MASTER_USER@mailcow.local</code> erweitert.</p> <p>Der statische Master-Benutzername wird zu <code>DOVECOT_MASTER_USER@mailcow.local</code> erweitert.</p>
<p>Um sich als <code>test@example.org</code> anzumelden, würde dies <code>test@example.org*mymasteruser@mailcow.local</code> mit dem oben angegebenen Passwort entsprechen.</p> <p>Um sich als <code>test@example.org</code> anzumelden, würde dies <code>test@example.org*mymasteruser@mailcow.local</code> mit dem oben angegebenen Passwort entsprechen.</p>

Datei anzeigen

@ -2442,41 +2442,39 @@
<p>Neuere Docker-Versionen scheinen sich über bestehende Volumes zu beschweren. Man kann dies vorübergehend beheben, indem man das bestehende Volume entfernt und mailcow mit der Override-Datei startet. Aber es scheint nach einem Neustart problematisch zu sein (muss bestätigt werden).</p> <p>Neuere Docker-Versionen scheinen sich über bestehende Volumes zu beschweren. Man kann dies vorübergehend beheben, indem man das bestehende Volume entfernt und mailcow mit der Override-Datei startet. Aber es scheint nach einem Neustart problematisch zu sein (muss bestätigt werden).</p>
</div> </div>
<p>Ein einfacher, schmutziger, aber stabiler Workaround ist es, mailcow zu stoppen (<code>docker-compose down</code>), <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data</code> zu entfernen und einen neuen Link zu Ihrem entfernten Dateisystem zu erstellen, zum Beispiel:</p> <p>Ein einfacher, schmutziger, aber stabiler Workaround ist es, mailcow zu stoppen (<code>docker-compose down</code>), <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data</code> zu entfernen und einen neuen Link zu Ihrem entfernten Dateisystem zu erstellen, zum Beispiel:</p>
<div class="highlight"><pre><span></span><code>mv /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data_backup <p><code>mv /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data_backup
ln -s /mnt/volume-xy/vmail_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data ln -s /mnt/volume-xy/vmail_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data</code></p>
</code></pre></div>
<p>Starten Sie anschließend mailcow.</p> <p>Starten Sie anschließend mailcow.</p>
<hr /> <hr />
<h2 id="der-alte-weg">Der "alte" Weg<a class="headerlink" href="#der-alte-weg" title="Permanent link">&para;</a></h2> <h2 id="der-alte-weg">Der "alte" Weg<a class="headerlink" href="#der-alte-weg" title="Permanent link">&para;</a></h2>
<p>Wenn man einen anderen Ordner für das vmail-Volume verwenden möchte, kann man eine <code>docker-compose.override.yml</code> Datei erstellen und den folgenden Inhalt hinzufügen:</p> <p>Wenn man einen anderen Ordner für das vmail-Volume verwenden möchte, kann man eine <code>docker-compose.override.yml</code> Datei erstellen und den folgenden Inhalt hinzufügen:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p><code>version: '2.1'
volumes: volumes:
vmail-vol-1: vmail-vol-1:
driver_opts: driver_opts:
type: none type: none
device: /data/mailcow/vmail device: /data/mailcow/vmail
o: bind o: bind</code></p>
</code></pre></div>
<h3 id="verschieben-eines-bestehenden-vmail-ordners">Verschieben eines bestehenden vmail-Ordners:<a class="headerlink" href="#verschieben-eines-bestehenden-vmail-ordners" title="Permanent link">&para;</a></h3> <h3 id="verschieben-eines-bestehenden-vmail-ordners">Verschieben eines bestehenden vmail-Ordners:<a class="headerlink" href="#verschieben-eines-bestehenden-vmail-ordners" title="Permanent link">&para;</a></h3>
<ul> <ul>
<li>Finden Sie den aktuellen vmail-Ordner anhand seines "Mountpoint"-Attributs: <code>docker volume inspect mailcowdockerized_vmail-vol-1</code></li> <li>Finden Sie den aktuellen vmail-Ordner anhand seines "Mountpoint"-Attributs: <code>docker volume inspect mailcowdockerized_vmail-vol-1</code></li>
</ul> </ul>
<div class="highlight"><pre><span></span><code>[ <p><code>hl_lines="10"
[
{ {
&quot;CreatedAt&quot;: &quot;2019-06-16T22:08:34+02:00&quot;, "CreatedAt": "2019-06-16T22:08:34+02:00",
&quot;Driver&quot;: &quot;local&quot;, "Driver": "local",
&quot;Labels&quot;: { "Labels": {
&quot;com.docker.compose.project&quot;: &quot;mailcowdockerized&quot;, "com.docker.compose.project": "mailcowdockerized",
&quot;com.docker.compose.version&quot;: &quot;1.23.2&quot;, "com.docker.compose.version": "1.23.2",
&quot;com.docker.compose.volume&quot;: &quot;vmail-vol-1&quot; "com.docker.compose.volume": "vmail-vol-1"
}, },
<span class="hll"> &quot;Mountpoint&quot;: &quot;/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data&quot;, "Mountpoint": "/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data",
</span> &quot;Name&quot;: &quot;mailcowdockerized_vmail-vol-1&quot;, "Name": "mailcowdockerized_vmail-vol-1",
&quot;Options&quot;: null, "Options": null,
&quot;Scope&quot;: &quot;local&quot; "Scope": "local"
} }
] ]</code></p>
</code></pre></div>
<ul> <ul>
<li>Kopieren Sie den Inhalt des <code>Mountpoint</code>-Ordners an den neuen Speicherort (z.B. <code>/data/mailcow/vmail</code>) mit <code>cp -a</code>, <code>rsync -a</code> oder einem ähnlichen, nicht strikten Kopierbefehl</li> <li>Kopieren Sie den Inhalt des <code>Mountpoint</code>-Ordners an den neuen Speicherort (z.B. <code>/data/mailcow/vmail</code>) mit <code>cp -a</code>, <code>rsync -a</code> oder einem ähnlichen, nicht strikten Kopierbefehl</li>
<li>Stoppen Sie mailcow durch Ausführen von <code>docker-compose down</code> aus Ihrem mailcow-Stammverzeichnis (z.B. <code>/opt/mailcow-dockerized</code>)</li> <li>Stoppen Sie mailcow durch Ausführen von <code>docker-compose down</code> aus Ihrem mailcow-Stammverzeichnis (z.B. <code>/opt/mailcow-dockerized</code>)</li>

Datei anzeigen

@ -2444,9 +2444,9 @@
<h2 id="neue-website">Neue Website<a class="headerlink" href="#neue-website" title="Permanent link">&para;</a></h2> <h2 id="neue-website">Neue Website<a class="headerlink" href="#neue-website" title="Permanent link">&para;</a></h2>
<p>Um persistente (über Updates) Sites zu erstellen, die von mailcow: dockerized gehostet werden, muss eine neue Site-Konfiguration in <code>data/conf/nginx/</code> platziert werden:</p> <p>Um persistente (über Updates) Sites zu erstellen, die von mailcow: dockerized gehostet werden, muss eine neue Site-Konfiguration in <code>data/conf/nginx/</code> platziert werden:</p>
<p>Eine gute Vorlage, um damit zu beginnen:</p> <p>Eine gute Vorlage, um damit zu beginnen:</p>
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/my_custom_site.conf <p><code>nano data/conf/nginx/my_custom_site.conf</code></p>
</code></pre></div> <p>``` hl_lines="16"
<div class="highlight"><pre><span></span><code>server { server {
ssl_certificate /etc/ssl/mail/cert.pem; ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem; ssl_certificate_key /etc/ssl/mail/key.pem;
ssl_protocols TLSv1.2 TLSv1.3; ssl_protocols TLSv1.2 TLSv1.3;
@ -2461,29 +2461,27 @@
# Location: data/web # Location: data/web
root /web; root /web;
# Location: data/web/mysite.com # Location: data/web/mysite.com
<span class="hll"> #root /web/mysite.com #root /web/mysite.com
</span> include /etc/nginx/conf.d/listen_plain.active; include /etc/nginx/conf.d/listen_plain.active;
include /etc/nginx/conf.d/listen_ssl.active; include /etc/nginx/conf.d/listen_ssl.active;
server_name mysite.example.org; server_name mysite.example.org;
server_tokens off; server_tokens off;</p>
<p># This allows acme to be validated even with a different web root
# This allows acme to be validated even with a different web root
location ^~ /.well-known/acme-challenge/ { location ^~ /.well-known/acme-challenge/ {
default_type &quot;text/plain&quot;; default_type "text/plain";
rewrite /.well-known/acme-challenge/(.*) /$1 break; rewrite /.well-known/acme-challenge/(.*) /$1 break;
root /web/.well-known/acme-challenge/; root /web/.well-known/acme-challenge/;
} }</p>
<p>if ($scheme = http) {
if ($scheme = http) {
return 301 https://$server_name$request_uri; return 301 https://$server_name$request_uri;
} }
} }
</code></pre></div> ```</p>
<h2 id="neue-website-mit-proxy-zu-einem-entfernten-location">Neue Website mit Proxy zu einem entfernten Location<a class="headerlink" href="#neue-website-mit-proxy-zu-einem-entfernten-location" title="Permanent link">&para;</a></h2> <h2 id="neue-website-mit-proxy-zu-einem-entfernten-location">Neue Website mit Proxy zu einem entfernten Location<a class="headerlink" href="#neue-website-mit-proxy-zu-einem-entfernten-location" title="Permanent link">&para;</a></h2>
<p>Ein weiteres Beispiel mit einer Reverse-Proxy-Konfiguration:</p> <p>Ein weiteres Beispiel mit einer Reverse-Proxy-Konfiguration:</p>
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/my_custom_site.conf <p><code>nano data/conf/nginx/my_custom_site.conf</code></p>
</code></pre></div> <p>``` hl_lines="16 28"
<div class="highlight"><pre><span></span><code>server { server {
ssl_certificate /etc/ssl/mail/cert.pem; ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem; ssl_certificate_key /etc/ssl/mail/key.pem;
ssl_protocols TLSv1.2 TLSv1.3; ssl_protocols TLSv1.2 TLSv1.3;
@ -2498,20 +2496,17 @@
root /web; root /web;
include /etc/nginx/conf.d/listen_plain.active; include /etc/nginx/conf.d/listen_plain.active;
include /etc/nginx/conf.d/listen_ssl.active; include /etc/nginx/conf.d/listen_ssl.active;
<span class="hll"> server_name example.domain.tld; server_name example.domain.tld;
</span> server_tokens off; server_tokens off;</p>
<p>location ^~ /.well-known/acme-challenge/ {
location ^~ /.well-known/acme-challenge/ {
allow all; allow all;
default_type &quot;text/plain&quot;; default_type "text/plain";
} }</p>
<p>if ($scheme = http) {
if ($scheme = http) {
return 301 https://$host$request_uri; return 301 https://$host$request_uri;
} }</p>
<p>location / {
<span class="hll"> location / { proxy_pass <a href="http://service:3000/">http://service:3000/</a>;
</span> proxy_pass http://service:3000/;
proxy_set_header Host $http_host; proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@ -2519,18 +2514,16 @@
client_max_body_size 0; client_max_body_size 0;
} }
} }
</code></pre></div> ```</p>
<h2 id="konfig-erweiterung-in-mailcows-nginx">Konfig-Erweiterung in mailcows Nginx<a class="headerlink" href="#konfig-erweiterung-in-mailcows-nginx" title="Permanent link">&para;</a></h2> <h2 id="konfig-erweiterung-in-mailcows-nginx">Konfig-Erweiterung in mailcows Nginx<a class="headerlink" href="#konfig-erweiterung-in-mailcows-nginx" title="Permanent link">&para;</a></h2>
<p>Der Dateiname, der für eine neue Site verwendet wird, ist nicht wichtig, solange der Dateiname eine .conf-Erweiterung trägt.</p> <p>Der Dateiname, der für eine neue Site verwendet wird, ist nicht wichtig, solange der Dateiname eine .conf-Erweiterung trägt.</p>
<p>Es ist auch möglich, die Konfiguration der Standarddatei <code>site.conf</code> Datei zu erweitern:</p> <p>Es ist auch möglich, die Konfiguration der Standarddatei <code>site.conf</code> Datei zu erweitern:</p>
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/site.my_content.custom <p><code>nano data/conf/nginx/site.my_content.custom</code></p>
</code></pre></div>
<p>Dieser Dateiname muss keine ".conf"-Erweiterung haben, sondern folgt dem Muster <code>site.*.custom</code>, wobei <code>*</code> ein eigener Name ist.</p> <p>Dieser Dateiname muss keine ".conf"-Erweiterung haben, sondern folgt dem Muster <code>site.*.custom</code>, wobei <code>*</code> ein eigener Name ist.</p>
<p>Wenn PHP in eine benutzerdefinierte Site eingebunden werden soll, verwenden Sie bitte den PHP-FPM-Listener auf phpfpm:9002 oder erstellen Sie einen neuen Listener in <code>data/conf/phpfpm/php-fpm.d/pools.conf</code>.</p> <p>Wenn PHP in eine benutzerdefinierte Site eingebunden werden soll, verwenden Sie bitte den PHP-FPM-Listener auf phpfpm:9002 oder erstellen Sie einen neuen Listener in <code>data/conf/phpfpm/php-fpm.d/pools.conf</code>.</p>
<p>Starten Sie Nginx neu (und PHP-FPM, falls ein neuer Listener erstellt wurde):</p> <p>Starten Sie Nginx neu (und PHP-FPM, falls ein neuer Listener erstellt wurde):</p>
<div class="highlight"><pre><span></span><code>docker-compose restart nginx-mailcow <p><code>docker-compose restart nginx-mailcow
docker-compose restart php-fpm-mailcow docker-compose restart php-fpm-mailcow</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2350,7 +2350,8 @@
<p><strong>WICHTIG</strong>: Diese Anleitung gilt nur für Konfigurationen, bei denen SNI nicht aktiviert ist. Wenn SNI aktiviert ist, muss der Zertifikatspfad angepasst werden. Etwas wie <code>ssl_certificate,key /etc/ssl/mail/webmail.example.org/cert.pem,key.pem;</code> wird genügen. <strong>Aber</strong>: Das Zertifikat sollte <strong>zuerst</strong> bezogen werden und erst wenn das Zertifikat existiert, sollte eine Site Config erstellt werden. Nginx wird nicht starten, wenn es das Zertifikat und den Schlüssel nicht finden kann.</p> <p><strong>WICHTIG</strong>: Diese Anleitung gilt nur für Konfigurationen, bei denen SNI nicht aktiviert ist. Wenn SNI aktiviert ist, muss der Zertifikatspfad angepasst werden. Etwas wie <code>ssl_certificate,key /etc/ssl/mail/webmail.example.org/cert.pem,key.pem;</code> wird genügen. <strong>Aber</strong>: Das Zertifikat sollte <strong>zuerst</strong> bezogen werden und erst wenn das Zertifikat existiert, sollte eine Site Config erstellt werden. Nginx wird nicht starten, wenn es das Zertifikat und den Schlüssel nicht finden kann.</p>
<p>Um eine Subdomain <code>webmail.example.org</code> zu erstellen und sie auf SOGo umzuleiten, müssen Sie eine <strong>neue</strong> Nginx-Site erstellen. Achten Sie dabei auf "CHANGE_TO_MAILCOW_HOSTNAME"!</p> <p>Um eine Subdomain <code>webmail.example.org</code> zu erstellen und sie auf SOGo umzuleiten, müssen Sie eine <strong>neue</strong> Nginx-Site erstellen. Achten Sie dabei auf "CHANGE_TO_MAILCOW_HOSTNAME"!</p>
<p><strong>nano data/conf/nginx/webmail.conf</strong></p> <p><strong>nano data/conf/nginx/webmail.conf</strong></p>
<div class="highlight"><pre><span></span><code>server { <p>``` hl_lines="9 17"
server {
ssl_certificate /etc/ssl/mail/cert.pem; ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem; ssl_certificate_key /etc/ssl/mail/key.pem;
index index.php index.html; index index.php index.html;
@ -2358,23 +2359,21 @@
root /web; root /web;
include /etc/nginx/conf.d/listen_plain.active; include /etc/nginx/conf.d/listen_plain.active;
include /etc/nginx/conf.d/listen_ssl.active; include /etc/nginx/conf.d/listen_ssl.active;
<span class="hll"> server_name webmail.example.org; server_name webmail.example.org;
</span> server_tokens off; server_tokens off;
location ^~ /.well-known/acme-challenge/ { location ^~ /.well-known/acme-challenge/ {
allow all; allow all;
default_type &quot;text/plain&quot;; default_type "text/plain";
}</p>
<p>location / {
return 301 <a href="https://CHANGE_TO_MAILCOW_HOSTNAME/SOGo">https://CHANGE_TO_MAILCOW_HOSTNAME/SOGo</a>;
} }
location / {
<span class="hll"> return 301 https://CHANGE_TO_MAILCOW_HOSTNAME/SOGo;
</span> }
} }
</code></pre></div> ```</p>
<p>Speichern Sie und starten Sie Nginx neu: <code>docker-compose restart nginx-mailcow</code>.</p> <p>Speichern Sie und starten Sie Nginx neu: <code>docker-compose restart nginx-mailcow</code>.</p>
<p>Öffnen Sie nun <code>mailcow.conf</code> und suchen Sie <code>ADDITIONAL_SAN</code>. <p>Öffnen Sie nun <code>mailcow.conf</code> und suchen Sie <code>ADDITIONAL_SAN</code>.
Fügen Sie <code>webmail.example.org</code> zu diesem Array hinzu, verwenden Sie keine Anführungszeichen!</p> Fügen Sie <code>webmail.example.org</code> zu diesem Array hinzu, verwenden Sie keine Anführungszeichen!</p>
<div class="highlight"><pre><span></span><code>ADDITIONAL_SAN=webmail.example.org <p><code>ADDITIONAL_SAN=webmail.example.org</code></p>
</code></pre></div>
<p>Führen Sie <code>docker-compose up -d</code> aus. Siehe "acme-mailcow" und "nginx-mailcow" Logs, wenn etwas fehlschlägt.</p> <p>Führen Sie <code>docker-compose up -d</code> aus. Siehe "acme-mailcow" und "nginx-mailcow" Logs, wenn etwas fehlschlägt.</p>
<hr> <hr>

Datei anzeigen

@ -2349,8 +2349,7 @@
<p>Öffnen Sie <code>data/conf/postfix/extra.cf</code> und setzen Sie das <code>message_size_limit</code> entsprechend in Bytes. Siehe <code>main.cf</code> für den Standardwert.</p> <p>Öffnen Sie <code>data/conf/postfix/extra.cf</code> und setzen Sie das <code>message_size_limit</code> entsprechend in Bytes. Siehe <code>main.cf</code> für den Standardwert.</p>
<p>Starten Sie Postfix neu:</p> <p>Starten Sie Postfix neu:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart postfix-mailcow <p><code>docker-compose restart postfix-mailcow</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2416,14 +2416,11 @@
<h2 id="veraltete-anleitung-nicht-fur-neuere-mailcows-verwenden">Veraltete Anleitung (NICHT FÜR NEUERE MAILCOWS VERWENDEN!)<a class="headerlink" href="#veraltete-anleitung-nicht-fur-neuere-mailcows-verwenden" title="Permanent link">&para;</a></h2> <h2 id="veraltete-anleitung-nicht-fur-neuere-mailcows-verwenden">Veraltete Anleitung (NICHT FÜR NEUERE MAILCOWS VERWENDEN!)<a class="headerlink" href="#veraltete-anleitung-nicht-fur-neuere-mailcows-verwenden" title="Permanent link">&para;</a></h2>
<p>Diese Option ist keine Best-Practice und sollte nur verwendet werden, wenn es keine andere Möglichkeit gibt, das zu erreichen, was Sie erreichen wollen.</p> <p>Diese Option ist keine Best-Practice und sollte nur verwendet werden, wenn es keine andere Möglichkeit gibt, das zu erreichen, was Sie erreichen wollen.</p>
<p>Erstellen Sie einfach eine Datei <code>data/conf/postfix/check_sasl_access</code> und tragen Sie den folgenden Inhalt ein. Dieser Benutzer muss in Ihrer Installation existieren und muss sich vor dem Versenden von Mails authentifizieren. <p>Erstellen Sie einfach eine Datei <code>data/conf/postfix/check_sasl_access</code> und tragen Sie den folgenden Inhalt ein. Dieser Benutzer muss in Ihrer Installation existieren und muss sich vor dem Versenden von Mails authentifizieren.
<div class="highlight"><pre><span></span><code>user-to-allow-everything@example.com OK <code>user-to-allow-everything@example.com OK</code></p>
</code></pre></div></p>
<p>Öffnen Sie <code>data/conf/postfix/main.cf</code> und suchen Sie <code>smtpd_sender_restrictions</code>. Fügen Sie <code>check_sasl_access hash:/opt/postfix/conf/check_sasl_access</code> wie folgt ein: <p>Öffnen Sie <code>data/conf/postfix/main.cf</code> und suchen Sie <code>smtpd_sender_restrictions</code>. Fügen Sie <code>check_sasl_access hash:/opt/postfix/conf/check_sasl_access</code> wie folgt ein:
<div class="highlight"><pre><span></span><code>smtpd_sender_restrictions = check_sasl_access hash:/opt/postfix/conf/check_sasl_access reject_authenticated_sender_login_mismatch [...] <code>smtpd_sender_restrictions = check_sasl_access hash:/opt/postfix/conf/check_sasl_access reject_authenticated_sender_login_mismatch [...]</code></p>
</code></pre></div></p>
<p>Postmap auf check_sasl_access ausführen:</p> <p>Postmap auf check_sasl_access ausführen:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec postfix-mailcow postmap /opt/postfix/conf/check_sasl_access <p><code>docker-compose exec postfix-mailcow postmap /opt/postfix/conf/check_sasl_access</code></p>
</code></pre></div>
<p>Starten Sie den Postfix-Container neu.</p> <p>Starten Sie den Postfix-Container neu.</p>
<hr> <hr>

Datei anzeigen

@ -2351,8 +2351,7 @@
<p>Postfix wird sich einmal nach dem Start von postfix-mailcow über doppelte Werte beschweren, dies ist beabsichtigt.</p> <p>Postfix wird sich einmal nach dem Start von postfix-mailcow über doppelte Werte beschweren, dies ist beabsichtigt.</p>
<p>Syslog-ng wurde so konfiguriert, dass es diese Warnungen ausblendet, während Postfix läuft, um die Log-Dateien nicht jedes Mal mit unnötigen Informationen zu spammen, wenn ein Dienst benutzt wird.</p> <p>Syslog-ng wurde so konfiguriert, dass es diese Warnungen ausblendet, während Postfix läuft, um die Log-Dateien nicht jedes Mal mit unnötigen Informationen zu spammen, wenn ein Dienst benutzt wird.</p>
<p>Starten Sie <code>postfix-mailcow</code> neu, um Ihre Änderungen zu übernehmen:</p> <p>Starten Sie <code>postfix-mailcow</code> neu, um Ihre Änderungen zu übernehmen:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart postfix-mailcow <p><code>docker-compose restart postfix-mailcow</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2348,13 +2348,11 @@
<h1>Statistik mit pflogsumm</h1> <h1>Statistik mit pflogsumm</h1>
<p>Um pflogsumm mit dem Standard-Logging-Treiber zu verwenden, müssen wir postfix-mailcow über docker logs abfragen und die Ausgabe zu pflogsumm leiten:</p> <p>Um pflogsumm mit dem Standard-Logging-Treiber zu verwenden, müssen wir postfix-mailcow über docker logs abfragen und die Ausgabe zu pflogsumm leiten:</p>
<div class="highlight"><pre><span></span><code>docker logs --since 24h $(docker ps -qf name=postfix-mailcow) | pflogsumm <p><code>docker logs --since 24h $(docker ps -qf name=postfix-mailcow) | pflogsumm</code></p>
</code></pre></div>
<p>Die obige Log-Ausgabe ist auf die letzten 24 Stunden beschränkt.</p> <p>Die obige Log-Ausgabe ist auf die letzten 24 Stunden beschränkt.</p>
<p>Es ist auch möglich, einen täglichen pflogsumm-Bericht über cron zu erstellen. Erstellen Sie die Datei /etc/cron.d/pflogsumm mit dem folgenden Inhalt:</p> <p>Es ist auch möglich, einen täglichen pflogsumm-Bericht über cron zu erstellen. Erstellen Sie die Datei /etc/cron.d/pflogsumm mit dem folgenden Inhalt:</p>
<div class="highlight"><pre><span></span><code>SHELL=/bin/bash <p><code>SHELL=/bin/bash
59 23 * * * root docker logs --since 24h $(docker ps -qf name=postfix-mailcow) | /usr/sbin/pflogsumm -d today | mail -s &quot;Postfix Report of $(date)&quot; postmaster@example.net 59 23 * * * root docker logs --since 24h $(docker ps -qf name=postfix-mailcow) | /usr/sbin/pflogsumm -d today | mail -s "Postfix Report of $(date)" postmaster@example.net</code></p>
</code></pre></div>
<p>Um zu funktionieren muss ein lokaler Postfix auf dem Server installiert werden, welcher an den Postfix der mailcow relayed.</p> <p>Um zu funktionieren muss ein lokaler Postfix auf dem Server installiert werden, welcher an den Postfix der mailcow relayed.</p>
<p>Genauere Informationen lassen sich unter Sektion <a href="https://mailcow.github.io/mailcow-dockerized-docs/de/post_installation/firststeps-local_mta/">Post-Installationsaufgaben -&gt; Lokaler MTA auf Dockerhost</a> finden.</p> <p>Genauere Informationen lassen sich unter Sektion <a href="https://mailcow.github.io/mailcow-dockerized-docs/de/post_installation/firststeps-local_mta/">Post-Installationsaufgaben -&gt; Lokaler MTA auf Dockerhost</a> finden.</p>
<p>Basierend auf den Postfix-Logs der letzten 24 Stunden sendet dieses Beispiel dann jeden Tag um 23:59:00 Uhr einen pflogsumm-Bericht an <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#112;&#111;&#115;&#116;&#109;&#97;&#115;&#116;&#101;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#110;&#101;&#116;">&#112;&#111;&#115;&#116;&#109;&#97;&#115;&#116;&#101;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#110;&#101;&#116;</a>.</p> <p>Basierend auf den Postfix-Logs der letzten 24 Stunden sendet dieses Beispiel dann jeden Tag um 23:59:00 Uhr einen pflogsumm-Bericht an <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#112;&#111;&#115;&#116;&#109;&#97;&#115;&#116;&#101;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#110;&#101;&#116;">&#112;&#111;&#115;&#116;&#109;&#97;&#115;&#116;&#101;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#110;&#101;&#116;</a>.</p>

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#regeln-werden-in-der-angegebenen-reihenfolge-ausgewertet" class="md-skip">
Zum Inhalt
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -1392,6 +1397,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
IP in Postscreen auf die Whitelist setzen IP in Postscreen auf die Whitelist setzen
@ -2328,6 +2335,8 @@
</nav> </nav>
</div> </div>
@ -2345,19 +2354,18 @@
<h1>IP in Postscreen auf die Whitelist setzen</h1>
<p>IPs können in der Datei <code>data/conf/postfix/custom_postscreen_whitelist.cidr</code> aus dem Postscreen und damit <em>auch</em> aus den RBL-Prüfungen entfernt werden.</p> <p>IPs können in der Datei <code>data/conf/postfix/custom_postscreen_whitelist.cidr</code> aus dem Postscreen und damit <em>auch</em> aus den RBL-Prüfungen entfernt werden.</p>
<p>Postscreen führt mehrere Prüfungen durch, um bösartige Absender zu identifizieren. In den meisten Fällen möchten Sie eine IP-Adresse auf die Whitelist setzen, um sie von der Suche nach einer schwarzen Liste auszuschließen.</p> <p>Postscreen führt mehrere Prüfungen durch, um bösartige Absender zu identifizieren. In den meisten Fällen möchten Sie eine IP-Adresse auf die Whitelist setzen, um sie von der Suche nach einer schwarzen Liste auszuschließen.</p>
<p>Das Format der Datei ist wie folgt</p> <p>Das Format der Datei ist wie folgt</p>
<p><code>CIDR ACTION</code></p> <p><code>CIDR ACTION</code></p>
<p>Dabei steht CIDR für eine einzelne IP-Adresse oder einen IP-Bereich in CIDR-Notation und action entweder für "permit" oder "reject".</p> <p>Dabei steht CIDR für eine einzelne IP-Adresse oder einen IP-Bereich in CIDR-Notation und action entweder für "permit" oder "reject".</p>
<p>Beispiel:</p> <p>Beispiel:</p>
<div class="highlight"><pre><span></span><code># Regeln werden in der angegebenen Reihenfolge ausgewertet. <p>```</p>
# Schwarze Liste 192.168.* außer 192.168.0.1. <h1 id="regeln-werden-in-der-angegebenen-reihenfolge-ausgewertet">Regeln werden in der angegebenen Reihenfolge ausgewertet.<a class="headerlink" href="#regeln-werden-in-der-angegebenen-reihenfolge-ausgewertet" title="Permanent link">&para;</a></h1>
192.168.0.1 permit <h1 id="schwarze-liste-192168-auer-19216801">Schwarze Liste 192.168.* außer 192.168.0.1.<a class="headerlink" href="#schwarze-liste-192168-auer-19216801" title="Permanent link">&para;</a></h1>
<p>192.168.0.1 permit
192.168.0.0/16 reject 192.168.0.0/16 reject
</code></pre></div> ```</p>
<p>Die Datei wird spontan neu geladen, ein Neustart von Postfix ist nicht erforderlich.</p> <p>Die Datei wird spontan neu geladen, ein Neustart von Postfix ist nicht erforderlich.</p>
<hr> <hr>

Datei anzeigen

@ -2447,15 +2447,13 @@
<h3 id="ipv4-hostssubnetze">IPv4-Hosts/Subnetze<a class="headerlink" href="#ipv4-hostssubnetze" title="Permanent link">&para;</a></h3> <h3 id="ipv4-hostssubnetze">IPv4-Hosts/Subnetze<a class="headerlink" href="#ipv4-hostssubnetze" title="Permanent link">&para;</a></h3>
<p>Um das Subnetz <code>192.168.2.0/24</code> zu den vertrauenswürdigen Netzwerken hinzuzufügen, können Sie die folgende Konfiguration verwenden, abhängig von Ihren IPV4_NETWORK und IPV6_NETWORK Bereichen:</p> <p>Um das Subnetz <code>192.168.2.0/24</code> zu den vertrauenswürdigen Netzwerken hinzuzufügen, können Sie die folgende Konfiguration verwenden, abhängig von Ihren IPV4_NETWORK und IPV6_NETWORK Bereichen:</p>
<p>Bearbeiten Sie <code>data/conf/postfix/extra.cf</code>:</p> <p>Bearbeiten Sie <code>data/conf/postfix/extra.cf</code>:</p>
<div class="highlight"><pre><span></span><code>mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 [fe80::]/10 172.22.1.0/24 [fd4d:6169:6c63:6f77::]/64 192.168.2.0/24 <p><code>mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 [fe80::]/10 172.22.1.0/24 [fd4d:6169:6c63:6f77::]/64 192.168.2.0/24</code></p>
</code></pre></div>
<p>Führen Sie <code>docker-compose restart postfix-mailcow</code> aus, um Ihre neuen Einstellungen zu übernehmen.</p> <p>Führen Sie <code>docker-compose restart postfix-mailcow</code> aus, um Ihre neuen Einstellungen zu übernehmen.</p>
<h3 id="ipv6-hostssubnets">IPv6-Hosts/Subnets<a class="headerlink" href="#ipv6-hostssubnets" title="Permanent link">&para;</a></h3> <h3 id="ipv6-hostssubnets">IPv6-Hosts/Subnets<a class="headerlink" href="#ipv6-hostssubnets" title="Permanent link">&para;</a></h3>
<p>Das Hinzufügen von IPv6-Hosts erfolgt auf die gleiche Weise wie bei IPv4, allerdings muss das Subnetz in eckige Klammern <code>[]</code> gesetzt und die Netzmaske angehängt werden.</p> <p>Das Hinzufügen von IPv6-Hosts erfolgt auf die gleiche Weise wie bei IPv4, allerdings muss das Subnetz in eckige Klammern <code>[]</code> gesetzt und die Netzmaske angehängt werden.</p>
<p>Um das Subnetz 2001:db8::/32 zu den vertrauenswürdigen Netzwerken hinzuzufügen, können Sie die folgende Konfiguration verwenden, abhängig von Ihren IPV4_NETWORK- und IPV6_NETWORK-Bereichen:</p> <p>Um das Subnetz 2001:db8::/32 zu den vertrauenswürdigen Netzwerken hinzuzufügen, können Sie die folgende Konfiguration verwenden, abhängig von Ihren IPV4_NETWORK- und IPV6_NETWORK-Bereichen:</p>
<p>Bearbeiten Sie <code>data/conf/postfix/extra.cf</code>:</p> <p>Bearbeiten Sie <code>data/conf/postfix/extra.cf</code>:</p>
<div class="highlight"><pre><span></span><code>mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 [fe80::]/10 172.22.1.0/24 [fd4d:6169:6c63:6f77::]/64 [2001:db8::]/32 <p><code>mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 [fe80::]/10 172.22.1.0/24 [fd4d:6169:6c63:6f77::]/64 [2001:db8::]/32</code></p>
</code></pre></div>
<p>Führen Sie <code>docker-compose restart postfix-mailcow</code> aus, um Ihre neuen Einstellungen zu übernehmen.</p> <p>Führen Sie <code>docker-compose restart postfix-mailcow</code> aus, um Ihre neuen Einstellungen zu übernehmen.</p>
<div class="admonition info"> <div class="admonition info">
<p class="admonition-title">Info</p> <p class="admonition-title">Info</p>

Datei anzeigen

@ -1804,6 +1804,24 @@
</li> </li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#docker-compose-exec-redis-mailcow-redis-cli" class="md-nav__link">
docker-compose exec redis-mailcow redis-cli
</a>
<nav class="md-nav" aria-label="docker-compose exec redis-mailcow redis-cli">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#schlussel-keys" class="md-nav__link"> <a href="#schlussel-keys" class="md-nav__link">
SCHLÜSSEL (Keys) SCHLÜSSEL (Keys)
@ -1821,11 +1839,6 @@
</ul> </ul>
</nav> </nav>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2430,6 +2443,24 @@
</li> </li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#docker-compose-exec-redis-mailcow-redis-cli" class="md-nav__link">
docker-compose exec redis-mailcow redis-cli
</a>
<nav class="md-nav" aria-label="docker-compose exec redis-mailcow redis-cli">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#schlussel-keys" class="md-nav__link"> <a href="#schlussel-keys" class="md-nav__link">
SCHLÜSSEL (Keys) SCHLÜSSEL (Keys)
@ -2447,11 +2478,6 @@
</ul> </ul>
</nav> </nav>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2472,33 +2498,29 @@
<h1>Redis</h1>
<p>Redis wird als Key-Value-Speicher für die Einstellungen und Daten von rspamd und (einige von) mailcow verwendet. Wenn Sie mit Redis nicht vertraut sind, lesen Sie bitte die <a href="https://redis.io/topics/introduction">Einführung in Redis</a> und besuchen Sie gegebenenfalls diese <a href="http://try.redis.io/">wunderbare Anleitung</a>, um zu erfahren, wie man Redis benutzt.</p> <p>Redis wird als Key-Value-Speicher für die Einstellungen und Daten von rspamd und (einige von) mailcow verwendet. Wenn Sie mit Redis nicht vertraut sind, lesen Sie bitte die <a href="https://redis.io/topics/introduction">Einführung in Redis</a> und besuchen Sie gegebenenfalls diese <a href="http://try.redis.io/">wunderbare Anleitung</a>, um zu erfahren, wie man Redis benutzt.</p>
<h2 id="client">Client<a class="headerlink" href="#client" title="Permanent link">&para;</a></h2> <h2 id="client">Client<a class="headerlink" href="#client" title="Permanent link">&para;</a></h2>
<p>Um sich mit dem redis cli zu verbinden, führen Sie aus:</p> <p>Um sich mit dem redis cli zu verbinden, führen Sie aus:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec redis-mailcow redis-cli <p><code>docker-compose exec redis-mailcow redis-cli</code></p>
</code></pre></div>
<h3 id="fehlersuche">Fehlersuche<a class="headerlink" href="#fehlersuche" title="Permanent link">&para;</a></h3> <h3 id="fehlersuche">Fehlersuche<a class="headerlink" href="#fehlersuche" title="Permanent link">&para;</a></h3>
<p>Hier sind einige nützliche Befehle für den redis-cli zur Fehlersuche:</p> <p>Hier sind einige nützliche Befehle für den redis-cli zur Fehlersuche:</p>
<h5 id="monitor">MONITOR<a class="headerlink" href="#monitor" title="Permanent link">&para;</a></h5> <h5 id="monitor">MONITOR<a class="headerlink" href="#monitor" title="Permanent link">&para;</a></h5>
<p>Überwacht alle vom Server empfangenen Anfragen in Echtzeit:</p> <p>Überwacht alle vom Server empfangenen Anfragen in Echtzeit:</p>
<div class="highlight"><pre><span></span><code># docker-compose exec redis-mailcow redis-cli <p>```</p>
127.0.0.1:6379&gt; überwachen <h1 id="docker-compose-exec-redis-mailcow-redis-cli">docker-compose exec redis-mailcow redis-cli<a class="headerlink" href="#docker-compose-exec-redis-mailcow-redis-cli" title="Permanent link">&para;</a></h1>
<p>127.0.0.1:6379&gt; überwachen
OK OK
1494077286.401963 [0 172.22.1.253:41228] &quot;SMEMBERS&quot; &quot;BAYES_SPAM_keys&quot; 1494077286.401963 [0 172.22.1.253:41228] "SMEMBERS" "BAYES_SPAM_keys"
1494077288.292970 [0 172.22.1.253:41229] &quot;SMEMBERS&quot; &quot;BAYES_SPAM_keys&quot; 1494077288.292970 [0 172.22.1.253:41229] "SMEMBERS" "BAYES_SPAM_keys"
[...] [...]
</code></pre></div> ```</p>
<h5 id="schlussel-keys">SCHLÜSSEL (Keys)<a class="headerlink" href="#schlussel-keys" title="Permanent link">&para;</a></h5> <h5 id="schlussel-keys">SCHLÜSSEL (Keys)<a class="headerlink" href="#schlussel-keys" title="Permanent link">&para;</a></h5>
<p>Ermittelt alle Schlüssel, die dem Muster entsprechen:</p> <p>Ermittelt alle Schlüssel, die dem Muster entsprechen:</p>
<div class="highlight"><pre><span></span><code>KEYS * <p><code>KEYS *</code></p>
</code></pre></div>
<h5 id="ping">PING<a class="headerlink" href="#ping" title="Permanent link">&para;</a></h5> <h5 id="ping">PING<a class="headerlink" href="#ping" title="Permanent link">&para;</a></h5>
<p>Testen Sie eine Verbindung:</p> <p>Testen Sie eine Verbindung:</p>
<div class="highlight"><pre><span></span><code>127.0.0.1:6379&gt; PING <p><code>127.0.0.1:6379&gt; PING
PONG PONG</code></p>
</code></pre></div>
<p>Wenn Sie mehr wissen wollen, hier ist ein <a href="https://www.cheatography.com/tasjaevan/cheat-sheets/redis/">Cheat-Sheet</a>.</p> <p>Wenn Sie mehr wissen wollen, hier ist ein <a href="https://www.cheatography.com/tasjaevan/cheat-sheets/redis/">Cheat-Sheet</a>.</p>
<hr> <hr>

Datei anzeigen

@ -1816,52 +1816,146 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#ham" class="md-nav__link">
Ham
</a>
</li>
<li class="md-nav__item">
<a href="#spam" class="md-nav__link">
Spam
</a>
<nav class="md-nav" aria-label="Spam">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#gelernte-daten-zurucksetzen-bayes-neural" class="md-nav__link">
Gelernte Daten zurücksetzen (Bayes, Neural)
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#es-ist-besser-redis-zu-stoppen-bevor-sie-die-datei-kopieren" class="md-nav__link">
Es ist besser, Redis zu stoppen, bevor Sie die Datei kopieren.
</a>
</li>
<li class="md-nav__item">
<a href="#wir-mussen-zuerst-das-redis-cli-eingeben" class="md-nav__link">
Wir müssen zuerst das redis-cli eingeben:
</a>
</li>
<li class="md-nav__item">
<a href="#in-redis-cli" class="md-nav__link">
In redis-cli:
</a>
<nav class="md-nav" aria-label="In redis-cli:">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#cli-werkzeuge" class="md-nav__link"> <a href="#cli-werkzeuge" class="md-nav__link">
CLI-Werkzeuge CLI-Werkzeuge
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#greylisting-deaktivieren" class="md-nav__link">
Greylisting deaktivieren
</a>
</li>
<li class="md-nav__item">
<a href="#spamfilter-schwellenwerte-global" class="md-nav__link"> <a href="#spamfilter-schwellenwerte-global" class="md-nav__link">
Spamfilter-Schwellenwerte (global) Spamfilter-Schwellenwerte (global)
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#oder" class="md-nav__link">
oder:
</a>
</li>
<li class="md-nav__item">
<a href="#docker-compose-exec-mysql-mailcow-mysql-umailcow-pdbpass-mailcow-e-delete-from-filterconf-where-option-highspamlevel-or-option-lowspamlevel-and-object-amp111amp110amp108amp121amp45amp116amp104amp105amp115amp45amp109amp97amp105amp108amp98amp111amp120amp64amp101amp120amp97amp109amp112amp108amp101amp46amp111amp114amp103" class="md-nav__link">
docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e "delete from filterconf where option = 'highspamlevel' or option = 'lowspamlevel' and object = 'amp#111;amp#110;amp#108;amp#121;amp#45;amp#116;amp#104;amp#105;amp#115;amp#45;amp#109;amp#97;amp#105;amp#108;amp#98;amp#111;amp#120;amp#64;amp#101;amp#120;amp#97;amp#109;amp#112;amp#108;amp#101;amp#46;amp#111;amp#114;amp#103;';"
</a>
<nav class="md-nav" aria-label="docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e "delete from filterconf where option = 'highspamlevel' or option = 'lowspamlevel' and object = 'amp#111;amp#110;amp#108;amp#121;amp#45;amp#116;amp#104;amp#105;amp#115;amp#45;amp#109;amp#97;amp#105;amp#108;amp#98;amp#111;amp#120;amp#64;amp#101;amp#120;amp#97;amp#109;amp#112;amp#108;amp#101;amp#46;amp#111;amp#114;amp#103;';"">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#benutzerdefinierte-ablehnungsnachrichten" class="md-nav__link"> <a href="#benutzerdefinierte-ablehnungsnachrichten" class="md-nav__link">
Benutzerdefinierte Ablehnungsnachrichten Benutzerdefinierte Ablehnungsnachrichten
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#verwerfen-statt-zuruckweisen" class="md-nav__link"> <a href="#verwerfen-statt-zuruckweisen" class="md-nav__link">
Verwerfen statt zurückweisen Verwerfen statt zurückweisen
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#losche-alle-ratelimit-schlussel" class="md-nav__link"> <a href="#losche-alle-ratelimit-schlussel" class="md-nav__link">
Lösche alle Ratelimit-Schlüssel Lösche alle Ratelimit-Schlüssel
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#unlink-verfugbar-in-redis-4-loscht-im-hintergrund" class="md-nav__link">
Unlink (verfügbar in Redis &gt;=4.) löscht im Hintergrund
</a>
<nav class="md-nav" aria-label="Unlink (verfügbar in Redis &gt;=4.) löscht im Hintergrund">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#erneutes-senden-von-quarantane-benachrichtigungen-auslosen" class="md-nav__link"> <a href="#erneutes-senden-von-quarantane-benachrichtigungen-auslosen" class="md-nav__link">
Erneutes Senden von Quarantäne-Benachrichtigungen auslösen Erneutes Senden von Quarantäne-Benachrichtigungen auslösen
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#speicherung-der-historie-erhohen" class="md-nav__link"> <a href="#speicherung-der-historie-erhohen" class="md-nav__link">
Speicherung der Historie erhöhen Speicherung der Historie erhöhen
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2450,52 +2544,146 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#ham" class="md-nav__link">
Ham
</a>
</li>
<li class="md-nav__item">
<a href="#spam" class="md-nav__link">
Spam
</a>
<nav class="md-nav" aria-label="Spam">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#gelernte-daten-zurucksetzen-bayes-neural" class="md-nav__link">
Gelernte Daten zurücksetzen (Bayes, Neural)
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#es-ist-besser-redis-zu-stoppen-bevor-sie-die-datei-kopieren" class="md-nav__link">
Es ist besser, Redis zu stoppen, bevor Sie die Datei kopieren.
</a>
</li>
<li class="md-nav__item">
<a href="#wir-mussen-zuerst-das-redis-cli-eingeben" class="md-nav__link">
Wir müssen zuerst das redis-cli eingeben:
</a>
</li>
<li class="md-nav__item">
<a href="#in-redis-cli" class="md-nav__link">
In redis-cli:
</a>
<nav class="md-nav" aria-label="In redis-cli:">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#cli-werkzeuge" class="md-nav__link"> <a href="#cli-werkzeuge" class="md-nav__link">
CLI-Werkzeuge CLI-Werkzeuge
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#greylisting-deaktivieren" class="md-nav__link">
Greylisting deaktivieren
</a>
</li>
<li class="md-nav__item">
<a href="#spamfilter-schwellenwerte-global" class="md-nav__link"> <a href="#spamfilter-schwellenwerte-global" class="md-nav__link">
Spamfilter-Schwellenwerte (global) Spamfilter-Schwellenwerte (global)
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#oder" class="md-nav__link">
oder:
</a>
</li>
<li class="md-nav__item">
<a href="#docker-compose-exec-mysql-mailcow-mysql-umailcow-pdbpass-mailcow-e-delete-from-filterconf-where-option-highspamlevel-or-option-lowspamlevel-and-object-amp111amp110amp108amp121amp45amp116amp104amp105amp115amp45amp109amp97amp105amp108amp98amp111amp120amp64amp101amp120amp97amp109amp112amp108amp101amp46amp111amp114amp103" class="md-nav__link">
docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e "delete from filterconf where option = 'highspamlevel' or option = 'lowspamlevel' and object = 'amp#111;amp#110;amp#108;amp#121;amp#45;amp#116;amp#104;amp#105;amp#115;amp#45;amp#109;amp#97;amp#105;amp#108;amp#98;amp#111;amp#120;amp#64;amp#101;amp#120;amp#97;amp#109;amp#112;amp#108;amp#101;amp#46;amp#111;amp#114;amp#103;';"
</a>
<nav class="md-nav" aria-label="docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e "delete from filterconf where option = 'highspamlevel' or option = 'lowspamlevel' and object = 'amp#111;amp#110;amp#108;amp#121;amp#45;amp#116;amp#104;amp#105;amp#115;amp#45;amp#109;amp#97;amp#105;amp#108;amp#98;amp#111;amp#120;amp#64;amp#101;amp#120;amp#97;amp#109;amp#112;amp#108;amp#101;amp#46;amp#111;amp#114;amp#103;';"">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#benutzerdefinierte-ablehnungsnachrichten" class="md-nav__link"> <a href="#benutzerdefinierte-ablehnungsnachrichten" class="md-nav__link">
Benutzerdefinierte Ablehnungsnachrichten Benutzerdefinierte Ablehnungsnachrichten
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#verwerfen-statt-zuruckweisen" class="md-nav__link"> <a href="#verwerfen-statt-zuruckweisen" class="md-nav__link">
Verwerfen statt zurückweisen Verwerfen statt zurückweisen
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#losche-alle-ratelimit-schlussel" class="md-nav__link"> <a href="#losche-alle-ratelimit-schlussel" class="md-nav__link">
Lösche alle Ratelimit-Schlüssel Lösche alle Ratelimit-Schlüssel
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#unlink-verfugbar-in-redis-4-loscht-im-hintergrund" class="md-nav__link">
Unlink (verfügbar in Redis &gt;=4.) löscht im Hintergrund
</a>
<nav class="md-nav" aria-label="Unlink (verfügbar in Redis &gt;=4.) löscht im Hintergrund">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#erneutes-senden-von-quarantane-benachrichtigungen-auslosen" class="md-nav__link"> <a href="#erneutes-senden-von-quarantane-benachrichtigungen-auslosen" class="md-nav__link">
Erneutes Senden von Quarantäne-Benachrichtigungen auslösen Erneutes Senden von Quarantäne-Benachrichtigungen auslösen
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#speicherung-der-historie-erhohen" class="md-nav__link"> <a href="#speicherung-der-historie-erhohen" class="md-nav__link">
Speicherung der Historie erhöhen Speicherung der Historie erhöhen
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2516,8 +2704,6 @@
<h1>Rspamd</h1>
<p>Rspamd wird für die AV-Verarbeitung, DKIM-Signierung und SPAM-Verarbeitung verwendet. Es ist ein leistungsfähiges und schnelles Filtersystem. Für eine ausführlichere Dokumentation über Rspamd besuchen Sie bitte die [Rspamd Dokumentation] (<a href="https://rspamd.com/doc/index.html">https://rspamd.com/doc/index.html</a>).</p> <p>Rspamd wird für die AV-Verarbeitung, DKIM-Signierung und SPAM-Verarbeitung verwendet. Es ist ein leistungsfähiges und schnelles Filtersystem. Für eine ausführlichere Dokumentation über Rspamd besuchen Sie bitte die [Rspamd Dokumentation] (<a href="https://rspamd.com/doc/index.html">https://rspamd.com/doc/index.html</a>).</p>
<h2 id="spam-ham-lernen">Spam &amp; Ham lernen<a class="headerlink" href="#spam-ham-lernen" title="Permanent link">&para;</a></h2> <h2 id="spam-ham-lernen">Spam &amp; Ham lernen<a class="headerlink" href="#spam-ham-lernen" title="Permanent link">&para;</a></h2>
<p>Rspamd lernt, ob es sich um Spam oder Ham handelt, wenn Sie eine Nachricht in oder aus dem Junk-Ordner in ein anderes Postfach als den Papierkorb verschieben. <p>Rspamd lernt, ob es sich um Spam oder Ham handelt, wenn Sie eine Nachricht in oder aus dem Junk-Ordner in ein anderes Postfach als den Papierkorb verschieben.
@ -2528,78 +2714,73 @@ Dies wird durch die Verwendung des Sieve-Plugins "sieve_imapsieve" und Parser-Sk
<p>Sie können auch die Web-UI von Rspamd verwenden, um Ham und/oder Spam zu lernen oder bestimmte Einstellungen von Rspamd anzupassen.</p> <p>Sie können auch die Web-UI von Rspamd verwenden, um Ham und/oder Spam zu lernen oder bestimmte Einstellungen von Rspamd anzupassen.</p>
<h3 id="spam-oder-ham-aus-bestehendem-verzeichnis-lernen">Spam oder Ham aus bestehendem Verzeichnis lernen<a class="headerlink" href="#spam-oder-ham-aus-bestehendem-verzeichnis-lernen" title="Permanent link">&para;</a></h3> <h3 id="spam-oder-ham-aus-bestehendem-verzeichnis-lernen">Spam oder Ham aus bestehendem Verzeichnis lernen<a class="headerlink" href="#spam-oder-ham-aus-bestehendem-verzeichnis-lernen" title="Permanent link">&para;</a></h3>
<p>Sie können einen Einzeiler verwenden, um Mails im Klartextformat (unkomprimiert) zu lernen:</p> <p>Sie können einen Einzeiler verwenden, um Mails im Klartextformat (unkomprimiert) zu lernen:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Ham</span> <p>```bash</p>
<span class="k">for</span> file <span class="k">in</span> /my/folder/cur/*<span class="p">;</span> <span class="k">do</span> docker <span class="nb">exec</span> -i <span class="k">$(</span>docker-compose ps -q rspamd-mailcow<span class="k">)</span> rspamc learn_ham &lt; <span class="nv">$file</span><span class="p">;</span> <span class="k">done</span> <h1 id="ham">Ham<a class="headerlink" href="#ham" title="Permanent link">&para;</a></h1>
<span class="c1"># Spam</span> <p>for file in /my/folder/cur/*; do docker exec -i $(docker-compose ps -q rspamd-mailcow) rspamc learn_ham &lt; $file; done</p>
<span class="k">for</span> file <span class="k">in</span> /my/folder/.Junk/cur/*<span class="p">;</span> <span class="k">do</span> docker <span class="nb">exec</span> -i <span class="k">$(</span>docker-compose ps -q rspamd-mailcow<span class="k">)</span> rspamc learn_spam &lt; <span class="nv">$file</span><span class="p">;</span> <span class="k">done</span> <h1 id="spam">Spam<a class="headerlink" href="#spam" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>for file in /my/folder/.Junk/cur/*; do docker exec -i $(docker-compose ps -q rspamd-mailcow) rspamc learn_spam &lt; $file; done
```</p>
<p>Erwägen Sie, einen lokalen Ordner als neues Volume an <code>rspamd-mailcow</code> in <code>docker-compose.yml</code> anzuhängen und die gegebenen Dateien innerhalb des Containers zu lernen. Dies kann als Workaround verwendet werden, um komprimierte Daten mit zcat zu parsen. Beispiel:</p> <p>Erwägen Sie, einen lokalen Ordner als neues Volume an <code>rspamd-mailcow</code> in <code>docker-compose.yml</code> anzuhängen und die gegebenen Dateien innerhalb des Containers zu lernen. Dies kann als Workaround verwendet werden, um komprimierte Daten mit zcat zu parsen. Beispiel:</p>
<p>``bash <p>``bash
for file in /data/old_mail/.Junk/cur/*; do rspamc learn_spam &lt; zcat $file; done for file in /data/old_mail/.Junk/cur/*; do rspamc learn_spam &lt; zcat $file; done
<div class="highlight"><pre><span></span><code>### Gelernte Daten zurücksetzen (Bayes, Neural) ```</p>
<h3 id="gelernte-daten-zurucksetzen-bayes-neural">Gelernte Daten zurücksetzen (Bayes, Neural)<a class="headerlink" href="#gelernte-daten-zurucksetzen-bayes-neural" title="Permanent link">&para;</a></h3>
Sie müssen die Schlüssel in Redis löschen, um die gelernten Daten zurückzusetzen, also erstellen Sie jetzt eine Kopie Ihrer Redis-Datenbank: <p>Sie müssen die Schlüssel in Redis löschen, um die gelernten Daten zurückzusetzen, also erstellen Sie jetzt eine Kopie Ihrer Redis-Datenbank:</p>
<p><strong>Backup Datenbank</strong></p>
**Backup Datenbank** <p>```bash</p>
<h1 id="es-ist-besser-redis-zu-stoppen-bevor-sie-die-datei-kopieren">Es ist besser, Redis zu stoppen, bevor Sie die Datei kopieren.<a class="headerlink" href="#es-ist-besser-redis-zu-stoppen-bevor-sie-die-datei-kopieren" title="Permanent link">&para;</a></h1>
```bash <p>cp /var/lib/docker/volumes/mailcowdockerized_redis-vol-1/_data/dump.rdb /root/
# Es ist besser, Redis zu stoppen, bevor Sie die Datei kopieren. ```</p>
cp /var/lib/docker/volumes/mailcowdockerized_redis-vol-1/_data/dump.rdb /root/
</code></pre></div></p>
<p><strong>Bayes-Daten zurücksetzen</strong></p> <p><strong>Bayes-Daten zurücksetzen</strong></p>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> redis-mailcow sh -c <span class="s1">&#39;redis-cli --scan --pattern BAYES_* | xargs redis-cli del&#39;</span> <p><code>bash
docker-compose <span class="nb">exec</span> redis-mailcow sh -c <span class="s1">&#39;redis-cli --scan --pattern RS* | xargs redis-cli del&#39;</span> docker-compose exec redis-mailcow sh -c 'redis-cli --scan --pattern BAYES_* | xargs redis-cli del'
</code></pre></div> docker-compose exec redis-mailcow sh -c 'redis-cli --scan --pattern RS* | xargs redis-cli del'</code></p>
<p><strong>Neurale Daten zurücksetzen</strong></p> <p><strong>Neurale Daten zurücksetzen</strong></p>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> redis-mailcow sh -c <span class="s1">&#39;redis-cli --scan --pattern rn_* | xargs redis-cli del&#39;</span> <p><code>bash
</code></pre></div> docker-compose exec redis-mailcow sh -c 'redis-cli --scan --pattern rn_* | xargs redis-cli del'</code></p>
<p><strong>Fuzzy-Daten zurücksetzen</strong></p> <p><strong>Fuzzy-Daten zurücksetzen</strong></p>
<div class="highlight"><pre><span></span><code><span class="c1"># Wir müssen zuerst das redis-cli eingeben:</span> <p>```bash</p>
docker-compose <span class="nb">exec</span> redis-mailcow redis-cli <h1 id="wir-mussen-zuerst-das-redis-cli-eingeben">Wir müssen zuerst das redis-cli eingeben:<a class="headerlink" href="#wir-mussen-zuerst-das-redis-cli-eingeben" title="Permanent link">&para;</a></h1>
<span class="c1"># In redis-cli:</span> <p>docker-compose exec redis-mailcow redis-cli</p>
<span class="m">127</span>.0.0.1:6379&gt; EVAL <span class="s2">&quot;for i, name in ipairs(redis.call(&#39;KEYS&#39;, ARGV[1])) do redis.call(&#39;DEL&#39;, name); end&quot;</span> <span class="m">0</span> fuzzy* <h1 id="in-redis-cli">In redis-cli:<a class="headerlink" href="#in-redis-cli" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>127.0.0.1:6379&gt; EVAL "for i, name in ipairs(redis.call('KEYS', ARGV[1])) do redis.call('DEL', name); end" 0 fuzzy*
```</p>
<p><strong>Info</strong></p> <p><strong>Info</strong></p>
<p>Wenn redis-cli sich beschwert über...</p> <p>Wenn redis-cli sich beschwert über...</p>
<div class="highlight"><pre><span></span><code>(error) ERR wrong number of arguments for &#39;del&#39; command <p><code>Text
</code></pre></div> (error) ERR wrong number of arguments for 'del' command</code></p>
<p>...das Schlüsselmuster nicht gefunden wurde und somit keine Daten zum Löschen vorhanden sind - ist es in Ordnung.</p> <p>...das Schlüsselmuster nicht gefunden wurde und somit keine Daten zum Löschen vorhanden sind - ist es in Ordnung.</p>
<h2 id="cli-werkzeuge">CLI-Werkzeuge<a class="headerlink" href="#cli-werkzeuge" title="Permanent link">&para;</a></h2> <h2 id="cli-werkzeuge">CLI-Werkzeuge<a class="headerlink" href="#cli-werkzeuge" title="Permanent link">&para;</a></h2>
<p>``bash <p>``bash
docker-compose exec rspamd-mailcow rspamc --help docker-compose exec rspamd-mailcow rspamc --help
docker-compose exec rspamd-mailcow rspamadm --help docker-compose exec rspamd-mailcow rspamadm --help
<div class="highlight"><pre><span></span><code>## Greylisting deaktivieren ```</p>
<h2 id="greylisting-deaktivieren">Greylisting deaktivieren<a class="headerlink" href="#greylisting-deaktivieren" title="Permanent link">&para;</a></h2>
Nur Nachrichten mit einer höheren Punktzahl werden als Greylisting betrachtet (soft rejected). Es ist schlechte Praxis, Greylisting zu deaktivieren. <p>Nur Nachrichten mit einer höheren Punktzahl werden als Greylisting betrachtet (soft rejected). Es ist schlechte Praxis, Greylisting zu deaktivieren.</p>
<p>Sie können Greylisting serverweit durch Editieren deaktivieren:</p>
Sie können Greylisting serverweit durch Editieren deaktivieren: <p><code>{mailcow-dir}/data/conf/rspamd/local.d/greylist.conf</code></p>
<p>Fügen Sie die Zeile hinzu:</p>
`{mailcow-dir}/data/conf/rspamd/local.d/greylist.conf` <p><code>cpp
enabled = false;</code></p>
Fügen Sie die Zeile hinzu:
```cpp
enabled = false;
</code></pre></div></p>
<p>Speichern Sie die Datei und starten Sie "rspamd-mailcow" neu: <code>docker-compose restart rspamd-mailcow</code></p> <p>Speichern Sie die Datei und starten Sie "rspamd-mailcow" neu: <code>docker-compose restart rspamd-mailcow</code></p>
<h2 id="spamfilter-schwellenwerte-global">Spamfilter-Schwellenwerte (global)<a class="headerlink" href="#spamfilter-schwellenwerte-global" title="Permanent link">&para;</a></h2> <h2 id="spamfilter-schwellenwerte-global">Spamfilter-Schwellenwerte (global)<a class="headerlink" href="#spamfilter-schwellenwerte-global" title="Permanent link">&para;</a></h2>
<p>Jeder Benutzer kann <a href="../../mailcow-UI/u_e-mailcow_ui-spamfilter/">seine Spam-Bewertung</a> individuell ändern. Um eine neue <strong>serverweite</strong> Grenze zu definieren, editieren Sie <code>data/conf/rspamd/local.d/actions.conf</code>:</p> <p>Jeder Benutzer kann <a href="../../mailcow-UI/u_e-mailcow_ui-spamfilter/">seine Spam-Bewertung</a> individuell ändern. Um eine neue <strong>serverweite</strong> Grenze zu definieren, editieren Sie <code>data/conf/rspamd/local.d/actions.conf</code>:</p>
<div class="highlight"><pre><span></span><code><span class="n">reject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">15</span><span class="p">;</span><span class="w"></span> <p><code>cpp
<span class="n">add_header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span><span class="w"></span> reject = 15;
<span class="n">greylist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span><span class="w"></span> add_header = 8;
</code></pre></div> greylist = 7;</code></p>
<p>Speichern Sie die Datei und starten Sie "rspamd-mailcow" neu: <code>docker-compose restart rspamd-mailcow</code></p> <p>Speichern Sie die Datei und starten Sie "rspamd-mailcow" neu: <code>docker-compose restart rspamd-mailcow</code></p>
<p>Bestehende Einstellungen der Benutzer werden nicht überschrieben!</p> <p>Bestehende Einstellungen der Benutzer werden nicht überschrieben!</p>
<p>Um benutzerdefinierte Schwellenwerte zurückzusetzen, führen Sie aus:</p> <p>Um benutzerdefinierte Schwellenwerte zurückzusetzen, führen Sie aus:</p>
<div class="highlight"><pre><span></span><code>source mailcow.conf <p>```
docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e &quot;delete from filterconf where option = &#39;highspamlevel&#39; or option = &#39;lowspamlevel&#39;;&quot; source mailcow.conf
# oder: docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e "delete from filterconf where option = 'highspamlevel' or option = 'lowspamlevel';"</p>
# docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e &quot;delete from filterconf where option = &#39;highspamlevel&#39; or option = &#39;lowspamlevel&#39; and object = &#39;only-this-mailbox@example.org&#39;;&quot; <h1 id="oder">oder:<a class="headerlink" href="#oder" title="Permanent link">&para;</a></h1>
</code></pre></div> <h1 id="docker-compose-exec-mysql-mailcow-mysql-umailcow-pdbpass-mailcow-e-delete-from-filterconf-where-option-highspamlevel-or-option-lowspamlevel-and-object-amp111amp110amp108amp121amp45amp116amp104amp105amp115amp45amp109amp97amp105amp108amp98amp111amp120amp64amp101amp120amp97amp109amp112amp108amp101amp46amp111amp114amp103">docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e "delete from filterconf where option = 'highspamlevel' or option = 'lowspamlevel' and object = '<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#111;&#110;&#108;&#121;&#45;&#116;&#104;&#105;&#115;&#45;&#109;&#97;&#105;&#108;&#98;&#111;&#120;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#111;&#114;&#103;">&#111;&#110;&#108;&#121;&#45;&#116;&#104;&#105;&#115;&#45;&#109;&#97;&#105;&#108;&#98;&#111;&#120;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#111;&#114;&#103;</a>';"<a class="headerlink" href="#docker-compose-exec-mysql-mailcow-mysql-umailcow-pdbpass-mailcow-e-delete-from-filterconf-where-option-highspamlevel-or-option-lowspamlevel-and-object-amp111amp110amp108amp121amp45amp116amp104amp105amp115amp45amp109amp97amp105amp108amp98amp111amp120amp64amp101amp120amp97amp109amp112amp108amp101amp46amp111amp114amp103" title="Permanent link">&para;</a></h1>
<p>```</p>
<h2 id="benutzerdefinierte-ablehnungsnachrichten">Benutzerdefinierte Ablehnungsnachrichten<a class="headerlink" href="#benutzerdefinierte-ablehnungsnachrichten" title="Permanent link">&para;</a></h2> <h2 id="benutzerdefinierte-ablehnungsnachrichten">Benutzerdefinierte Ablehnungsnachrichten<a class="headerlink" href="#benutzerdefinierte-ablehnungsnachrichten" title="Permanent link">&para;</a></h2>
<p>Die Standard-Spam-Reject-Meldung kann durch Hinzufügen einer neuen Datei <code>data/conf/rspamd/override.d/worker-proxy.custom.inc</code> mit dem folgenden Inhalt geändert werden:</p> <p>Die Standard-Spam-Reject-Meldung kann durch Hinzufügen einer neuen Datei <code>data/conf/rspamd/override.d/worker-proxy.custom.inc</code> mit dem folgenden Inhalt geändert werden:</p>
<div class="highlight"><pre><span></span><code>reject_message = &quot;Meine eigene Ablehnungsnachricht&quot;; <p><code>reject_message = "Meine eigene Ablehnungsnachricht";</code></p>
</code></pre></div>
<p>Speichern Sie die Datei und starten Sie Rspamd neu: <code>docker-compose restart rspamd-mailcow</code>.</p> <p>Speichern Sie die Datei und starten Sie Rspamd neu: <code>docker-compose restart rspamd-mailcow</code>.</p>
<p>Waehrend das oben genannte fuer abgelehnte Mails mit einem hohen Spam-Score funktioniert, ignorieren Prefilter-Aktionen diese Einstellung. Für diese Karten muss das Multimap-Modul in Rspamd angepasst werden:</p> <p>Waehrend das oben genannte fuer abgelehnte Mails mit einem hohen Spam-Score funktioniert, ignorieren Prefilter-Aktionen diese Einstellung. Für diese Karten muss das Multimap-Modul in Rspamd angepasst werden:</p>
<ol> <ol>
@ -2610,48 +2791,45 @@ docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e &quot;del
<p>Fügen Sie Ihre eigene Nachricht als neue Zeile hinzu:</p> <p>Fügen Sie Ihre eigene Nachricht als neue Zeile hinzu:</p>
</li> </li>
</ol> </ol>
<div class="highlight"><pre><span></span><code>GLOBAL_RCPT_BL { <p><code>GLOBAL_RCPT_BL {
Typ = &quot;rcpt&quot;; Typ = "rcpt";
map = &quot;${LOCAL_CONFDIR}/custom/global_rcpt_blacklist.map&quot;; map = "${LOCAL_CONFDIR}/custom/global_rcpt_blacklist.map";
regexp = true; regexp = true;
prefilter = true; prefilter = true;
action = &quot;reject&quot;; action = "reject";
message = &quot;Der Versand von E-Mails an diesen Empfänger ist durch postmaster@your.domain verboten&quot;; message = "Der Versand von E-Mails an diesen Empfänger ist durch postmaster@your.domain verboten";
} }</code></p>
</code></pre></div>
<ol> <ol>
<li>Speichern Sie die Datei und starten Sie Rspamd neu: <code>docker-compose restart rspamd-mailcow</code>.</li> <li>Speichern Sie die Datei und starten Sie Rspamd neu: <code>docker-compose restart rspamd-mailcow</code>.</li>
</ol> </ol>
<h2 id="verwerfen-statt-zuruckweisen">Verwerfen statt zurückweisen<a class="headerlink" href="#verwerfen-statt-zuruckweisen" title="Permanent link">&para;</a></h2> <h2 id="verwerfen-statt-zuruckweisen">Verwerfen statt zurückweisen<a class="headerlink" href="#verwerfen-statt-zuruckweisen" title="Permanent link">&para;</a></h2>
<p>Wenn Sie eine Nachricht stillschweigend verwerfen wollen, erstellen oder bearbeiten Sie die Datei <code>data/conf/rspamd/override.d/worker-proxy.custom.inc</code> und fügen Sie den folgenden Inhalt hinzu:</p> <p>Wenn Sie eine Nachricht stillschweigend verwerfen wollen, erstellen oder bearbeiten Sie die Datei <code>data/conf/rspamd/override.d/worker-proxy.custom.inc</code> und fügen Sie den folgenden Inhalt hinzu:</p>
<div class="highlight"><pre><span></span><code>discard_on_reject = true; <p><code>discard_on_reject = true;</code></p>
</code></pre></div>
<p>Starten Sie Rspamd neu:</p> <p>Starten Sie Rspamd neu:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart rspamd-mailcow <p><code>bash
</code></pre></div> docker-compose restart rspamd-mailcow</code></p>
<h2 id="losche-alle-ratelimit-schlussel">Lösche alle Ratelimit-Schlüssel<a class="headerlink" href="#losche-alle-ratelimit-schlussel" title="Permanent link">&para;</a></h2> <h2 id="losche-alle-ratelimit-schlussel">Lösche alle Ratelimit-Schlüssel<a class="headerlink" href="#losche-alle-ratelimit-schlussel" title="Permanent link">&para;</a></h2>
<p>Wenn Sie das UI nicht verwenden wollen und stattdessen alle Schlüssel in der Redis-Datenbank löschen wollen, können Sie redis-cli für diese Aufgabe verwenden:</p> <p>Wenn Sie das UI nicht verwenden wollen und stattdessen alle Schlüssel in der Redis-Datenbank löschen wollen, können Sie redis-cli für diese Aufgabe verwenden:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec redis-mailcow sh <p>```
# Unlink (verfügbar in Redis &gt;=4.) löscht im Hintergrund docker-compose exec redis-mailcow sh</p>
redis-cli --scan --pattern RL* | xargs redis-cli unlink <h1 id="unlink-verfugbar-in-redis-4-loscht-im-hintergrund">Unlink (verfügbar in Redis &gt;=4.) löscht im Hintergrund<a class="headerlink" href="#unlink-verfugbar-in-redis-4-loscht-im-hintergrund" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>redis-cli --scan --pattern RL* | xargs redis-cli unlink
```</p>
<p>Starten Sie Rspamd neu:</p> <p>Starten Sie Rspamd neu:</p>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> redis-mailcow sh <p><code>bash
</code></pre></div> docker-compose exec redis-mailcow sh</code></p>
<h2 id="erneutes-senden-von-quarantane-benachrichtigungen-auslosen">Erneutes Senden von Quarantäne-Benachrichtigungen auslösen<a class="headerlink" href="#erneutes-senden-von-quarantane-benachrichtigungen-auslosen" title="Permanent link">&para;</a></h2> <h2 id="erneutes-senden-von-quarantane-benachrichtigungen-auslosen">Erneutes Senden von Quarantäne-Benachrichtigungen auslösen<a class="headerlink" href="#erneutes-senden-von-quarantane-benachrichtigungen-auslosen" title="Permanent link">&para;</a></h2>
<p>Sollte nur zur Fehlersuche verwendet werden!</p> <p>Sollte nur zur Fehlersuche verwendet werden!</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow bash <p><code>docker-compose exec dovecot-mailcow bash
mysql -umailcow -p$DBPASS mailcow -e &quot;update quarantine set notified = 0;&quot; mysql -umailcow -p$DBPASS mailcow -e "update quarantine set notified = 0;"
redis-cli -h redis DEL Q_LAST_NOTIFIED redis-cli -h redis DEL Q_LAST_NOTIFIED
quarantine_notify.py quarantine_notify.py</code></p>
</code></pre></div>
<h2 id="speicherung-der-historie-erhohen">Speicherung der Historie erhöhen<a class="headerlink" href="#speicherung-der-historie-erhohen" title="Permanent link">&para;</a></h2> <h2 id="speicherung-der-historie-erhohen">Speicherung der Historie erhöhen<a class="headerlink" href="#speicherung-der-historie-erhohen" title="Permanent link">&para;</a></h2>
<p>Standardmäßig speichert Rspamd 1000 Elemente in der Historie.</p> <p>Standardmäßig speichert Rspamd 1000 Elemente in der Historie.</p>
<p>Die Historie wird komprimiert gespeichert.</p> <p>Die Historie wird komprimiert gespeichert.</p>
<p>Es wird empfohlen, hier keinen unverhältnismäßig hohen Wert zu verwenden, probieren Sie etwas in der Größenordnung von 5000 oder 10000 und sehen Sie, wie Ihr Server damit umgeht:</p> <p>Es wird empfohlen, hier keinen unverhältnismäßig hohen Wert zu verwenden, probieren Sie etwas in der Größenordnung von 5000 oder 10000 und sehen Sie, wie Ihr Server damit umgeht:</p>
<p>Bearbeiten Sie <code>data/conf/rspamd/local.d/history_redis.conf</code>:</p> <p>Bearbeiten Sie <code>data/conf/rspamd/local.d/history_redis.conf</code>:</p>
<div class="highlight"><pre><span></span><code>nrows = 1000; # Ändern Sie diesen Wert <p><code>nrows = 1000; # Ändern Sie diesen Wert</code></p>
</code></pre></div>
<p>Starten Sie anschließend Rspamd neu: <code>docker-compose restart rspamd-mailcow</code></p> <p>Starten Sie anschließend Rspamd neu: <code>docker-compose restart rspamd-mailcow</code></p>
<hr> <hr>

Datei anzeigen

@ -2491,53 +2491,51 @@ Nachdem Sie <code>data/conf/sogo/custom-theme.js</code> modifiziert und Änderun
<li>öffnen Sie die Entwicklerkonsole des Browsers, normalerweise ist die Tastenkombination F12</li> <li>öffnen Sie die Entwicklerkonsole des Browsers, normalerweise ist die Tastenkombination F12</li>
<li>nur wenn Sie Firefox benutzen: schreiben Sie mit der Hand in die Entwicklerkonsole <code>allow pasting</code> und drücken Sie Enter</li> <li>nur wenn Sie Firefox benutzen: schreiben Sie mit der Hand in die Entwicklerkonsole <code>allow pasting</code> und drücken Sie Enter</li>
<li>fügen Sie den Java-Script-Schnipsel in die Entwicklungskonsole ein: <li>fügen Sie den Java-Script-Schnipsel in die Entwicklungskonsole ein:
<div class="highlight"><pre><span></span><code>copy([].slice.call(document.styleSheets) <code>copy([].slice.call(document.styleSheets)
.map(e =&gt; e.ownerNode) .map(e =&gt; e.ownerNode)
.filter(e =&gt; e.hasAttribute(&#39;md-theme-style&#39;)) .filter(e =&gt; e.hasAttribute('md-theme-style'))
.map(e =&gt; e.textInhalt) .map(e =&gt; e.textInhalt)
.join(&#39;\n&#39;) .join('\n')
) )</code></li>
</code></pre></div></li>
<li>Öffnen Sie den Texteditor und fügen Sie die Daten aus der Zwischenablage ein (Strg+V), Sie sollten ein minimiertes CSS erhalten, speichern Sie es</li> <li>Öffnen Sie den Texteditor und fügen Sie die Daten aus der Zwischenablage ein (Strg+V), Sie sollten ein minimiertes CSS erhalten, speichern Sie es</li>
<li>kopieren Sie die CSS-Datei auf den Mailcow-Server <code>data/conf/sogo/custom-theme.css</code></li> <li>kopieren Sie die CSS-Datei auf den Mailcow-Server <code>data/conf/sogo/custom-theme.css</code></li>
<li>editiere <code>data/conf/sogo/sogo.conf</code> und setze <code>SOGoUIxDebugEnabled = NO;</code></li> <li>editiere <code>data/conf/sogo/sogo.conf</code> und setze <code>SOGoUIxDebugEnabled = NO;</code></li>
<li>Anhängen/Erstellen von <code>docker-compose.override.yml</code> mit: <li>Anhängen/Erstellen von <code>docker-compose.override.yml</code> mit:
<div class="highlight"><pre><span></span><code>Version: &#39;2.1&#39; ```
Version: '2.1'</li>
Dienste: </ol>
<p>Dienste:
sogo-mailcow: sogo-mailcow:
volumes: volumes:
- ./data/conf/sogo/custom-theme.css:/usr/lib/GNUstep/SOGo/WebServerResources/css/theme-default.css:z - ./data/conf/sogo/custom-theme.css:/usr/lib/GNUstep/SOGo/WebServerResources/css/theme-default.css:z
</code></pre></div></li> <code>``
<li>führen Sie <code>docker-compose up -d</code> aus</li> 11. führen Sie</code>docker-compose up -d<code>aus
<li>Ausführen von <code>docker-compose restart memcached-mailcow</code></li> 12. Ausführen von</code>docker-compose restart memcached-mailcow`</p>
</ol>
<h2 id="zurucksetzen-auf-das-sogo-standardthema">Zurücksetzen auf das SOGo Standardthema<a class="headerlink" href="#zurucksetzen-auf-das-sogo-standardthema" title="Permanent link">&para;</a></h2> <h2 id="zurucksetzen-auf-das-sogo-standardthema">Zurücksetzen auf das SOGo Standardthema<a class="headerlink" href="#zurucksetzen-auf-das-sogo-standardthema" title="Permanent link">&para;</a></h2>
<ol> <ol>
<li>checken Sie <code>data/conf/sogo/custom-theme.js</code> aus, indem Sie <code>git fetch ; git checkout origin/master data/conf/sogo/custom-theme.js data/conf/sogo/custom-theme.js</code> ausführen</li> <li>checken Sie <code>data/conf/sogo/custom-theme.js</code> aus, indem Sie <code>git fetch ; git checkout origin/master data/conf/sogo/custom-theme.js data/conf/sogo/custom-theme.js</code> ausführen</li>
<li>Suchen Sie in <code>data/conf/sogo/custom-theme.js</code>: <li>Suchen Sie in <code>data/conf/sogo/custom-theme.js</code>:
<div class="highlight"><pre><span></span><code>// Neue Paletten auf das Standardthema anwenden, einige Farbtöne neu zuordnen <code>// Neue Paletten auf das Standardthema anwenden, einige Farbtöne neu zuordnen
$mdThemingProvider.theme(&#39;default&#39;) $mdThemingProvider.theme('default')
.primaryPalette(&#39;green-cow&#39;, { .primaryPalette('green-cow', {
&#39;default&#39;: &#39;400&#39;, // Hintergrundfarbe der oberen Symbolleisten 'default': '400', // Hintergrundfarbe der oberen Symbolleisten
hue-1&#39;: &#39;400&#39;, hue-1': '400',
&#39;hue-2&#39;: &#39;600&#39;, // Hintergrundfarbe der Seitenleiste 'hue-2': '600', // Hintergrundfarbe der Seitenleiste
&#39;hue-3&#39;: &#39;A700&#39; 'hue-3': 'A700'
}) })
.accentPalette(&#39;green&#39;, { .accentPalette('green', {
&#39;default&#39;: &#39;600&#39;, // Hintergrundfarbe der Fab-Schaltflächen und des Anmeldebildschirms 'default': '600', // Hintergrundfarbe der Fab-Schaltflächen und des Anmeldebildschirms
hue-1&#39;: &#39;300&#39;, // Hintergrundfarbe der Symbolleiste der mittleren Liste hue-1': '300', // Hintergrundfarbe der Symbolleiste der mittleren Liste
hue-2&#39;: &#39;300&#39;, // Hervorhebungsfarbe für ausgewählte Nachrichten und den aktuellen Tageskalender hue-2': '300', // Hervorhebungsfarbe für ausgewählte Nachrichten und den aktuellen Tageskalender
hue-3&#39;: &#39;A700&#39; hue-3': 'A700'
}) })
.backgroundPalette(&#39;frost-grey&#39;); .backgroundPalette('frost-grey');</code>
</code></pre></div>
und ersetzen Sie es durch: und ersetzen Sie es durch:
<div class="highlight"><pre><span></span><code> $mdThemingProvider.theme(&#39;default&#39;); <code>$mdThemingProvider.theme('default');</code></li>
</code></pre></div></li>
<li>Entfernen Sie aus <code>docker-compose.override.yml</code> Volume Mount in <code>sogo-mailcow</code>: <li>Entfernen Sie aus <code>docker-compose.override.yml</code> Volume Mount in <code>sogo-mailcow</code>:
<div class="highlight"><pre><span></span><code>- ./data/conf/sogo/custom-theme.css:/usr/lib/GNUstep/SOGo/WebServerResources/css/theme-default.css:z ```</li>
</code></pre></div></li> <li>./data/conf/sogo/custom-theme.css:/usr/lib/GNUstep/SOGo/WebServerResources/css/theme-default.css:z
```</li>
<li>führen Sie <code>docker-compose up -d</code> aus</li> <li>führen Sie <code>docker-compose up -d</code> aus</li>
<li>Starten Sie <code>docker-compose restart memcached-mailcow</code>.</li> <li>Starten Sie <code>docker-compose restart memcached-mailcow</code>.</li>
</ol> </ol>
@ -2553,16 +2551,14 @@ Nachdem Sie diese Datei ersetzt haben, müssen Sie SOGo und Memcached Container
<p>Domains sind normalerweise voneinander isoliert.</p> <p>Domains sind normalerweise voneinander isoliert.</p>
<p>Sie können das ändern, indem Sie <code>data/conf/sogo/sogo.conf</code> modifizieren:</p> <p>Sie können das ändern, indem Sie <code>data/conf/sogo/sogo.conf</code> modifizieren:</p>
<p>Suche... <p>Suche...
<div class="highlight"><pre><span></span><code> // SOGoDomainsVisibility = ( <code>// SOGoDomainsVisibility = (
// (domain1.tld, domain5.tld), // (domain1.tld, domain5.tld),
// (domain3.tld, domain2.tld) // (domain3.tld, domain2.tld)
// ); // );</code>
</code></pre></div>
...und ersetzen Sie diese durch - zum Beispiel:</p> ...und ersetzen Sie diese durch - zum Beispiel:</p>
<div class="highlight"><pre><span></span><code> SOGoDomainsVisibility = ( <p><code>SOGoDomainsVisibility = (
(beispiel.org, beispiel.com, beispiel.net) (beispiel.org, beispiel.com, beispiel.net)
); );</code></p>
</code></pre></div>
<p>SOGo neu starten: <code>docker-compose restart sogo-mailcow</code></p> <p>SOGo neu starten: <code>docker-compose restart sogo-mailcow</code></p>
<h2 id="deaktivieren-sie-die-passwortanderung">Deaktivieren Sie die Passwortänderung<a class="headerlink" href="#deaktivieren-sie-die-passwortanderung" title="Permanent link">&para;</a></h2> <h2 id="deaktivieren-sie-die-passwortanderung">Deaktivieren Sie die Passwortänderung<a class="headerlink" href="#deaktivieren-sie-die-passwortanderung" title="Permanent link">&para;</a></h2>
<p>Bearbeiten Sie <code>data/conf/sogo/sogo.conf</code> und <strong>ändern</strong> Sie <code>SOGoPasswordChangeEnabled</code> auf <code>NO</code>. Bitte fügen Sie keinen neuen Parameter hinzu.</p> <p>Bearbeiten Sie <code>data/conf/sogo/sogo.conf</code> und <strong>ändern</strong> Sie <code>SOGoPasswordChangeEnabled</code> auf <code>NO</code>. Bitte fügen Sie keinen neuen Parameter hinzu.</p>

Datei anzeigen

@ -2416,18 +2416,15 @@
<strong>Wichtig</strong>: Nur DNSSEC-validierende DNS-Dienste werden funktionieren.</p> <strong>Wichtig</strong>: Nur DNSSEC-validierende DNS-Dienste werden funktionieren.</p>
<h2 id="methode-a-unbound">Methode A, Unbound<a class="headerlink" href="#methode-a-unbound" title="Permanent link">&para;</a></h2> <h2 id="methode-a-unbound">Methode A, Unbound<a class="headerlink" href="#methode-a-unbound" title="Permanent link">&para;</a></h2>
<p>Bearbeiten Sie <code>data/conf/unbound/unbound.conf</code> und fügen Sie die folgenden Parameter hinzu:</p> <p>Bearbeiten Sie <code>data/conf/unbound/unbound.conf</code> und fügen Sie die folgenden Parameter hinzu:</p>
<div class="highlight"><pre><span></span><code>forward-zone: <p><code>forward-zone:
name: &quot;.&quot; name: "."
forward-addr: 8.8.8.8 # VERWENDEN SIE KEINE ÖFFENTLICHEN DNS-SERVER - NUR EIN BEISPIEL forward-addr: 8.8.8.8 # VERWENDEN SIE KEINE ÖFFENTLICHEN DNS-SERVER - NUR EIN BEISPIEL
forward-addr: 8.8.4.4 # VERWENDET KEINE ÖFFENTLICHEN DNS-SERVER - NUR EIN BEISPIEL forward-addr: 8.8.4.4 # VERWENDET KEINE ÖFFENTLICHEN DNS-SERVER - NUR EIN BEISPIEL</code></p>
</code></pre></div>
<p>Unbound neu starten:</p> <p>Unbound neu starten:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart unbound-mailcow <p><code>docker-compose restart unbound-mailcow</code></p>
</code></pre></div>
<h2 id="methode-b-uberschreiben-der-datei">Methode B, Überschreiben der Datei<a class="headerlink" href="#methode-b-uberschreiben-der-datei" title="Permanent link">&para;</a></h2> <h2 id="methode-b-uberschreiben-der-datei">Methode B, Überschreiben der Datei<a class="headerlink" href="#methode-b-uberschreiben-der-datei" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized <p><code>cd /opt/mailcow-dockerized
cp helper-scripts/docker-compose.override.yml.d/EXTERNAL_DNS/docker-compose.override.yml . cp helper-scripts/docker-compose.override.yml.d/EXTERNAL_DNS/docker-compose.override.yml .</code></p>
</code></pre></div>
<p>Bearbeiten Sie <code>docker-compose.override.yml</code> und passen Sie die IP an.</p> <p>Bearbeiten Sie <code>docker-compose.override.yml</code> und passen Sie die IP an.</p>
<p>Führen Sie <code>docker-compose down ; docker-compose up -d</code> aus.</p> <p>Führen Sie <code>docker-compose down ; docker-compose up -d</code> aus.</p>

Datei anzeigen

@ -2649,7 +2649,7 @@
<p>Watchdog verwendet Standardwerte für alle in <code>docker-compose.yml</code> definierten Thresholde.</p> <p>Watchdog verwendet Standardwerte für alle in <code>docker-compose.yml</code> definierten Thresholde.</p>
<p>Die Standardwerte sind für die meisten Konfigurationen geeignet. <p>Die Standardwerte sind für die meisten Konfigurationen geeignet.
Beispiel: Beispiel:
<div class="highlight"><pre><span></span><code>- NGINX_THRESHOLD=${NGINX_THRESHOLD:-5} <code>- NGINX_THRESHOLD=${NGINX_THRESHOLD:-5}
- UNBOUND_THRESHOLD=${UNBOUND_THRESHOLD:-5} - UNBOUND_THRESHOLD=${UNBOUND_THRESHOLD:-5}
- REDIS_THRESHOLD=${REDIS_THRESHOLD:-5} - REDIS_THRESHOLD=${REDIS_THRESHOLD:-5}
- MYSQL_THRESHOLD=${MYSQL_THRESHOLD:-5} - MYSQL_THRESHOLD=${MYSQL_THRESHOLD:-5}
@ -2666,8 +2666,7 @@ Beispiel:
- RSPAMD_THRESHOLD=${RSPAMD_THRESHOLD:-5} - RSPAMD_THRESHOLD=${RSPAMD_THRESHOLD:-5}
- OLEFY_THRESHOLD=${OLEFY_THRESHOLD:-5} - OLEFY_THRESHOLD=${OLEFY_THRESHOLD:-5}
- MAILQ_THRESHOLD=${MAILQ_THRESHOLD:-20} - MAILQ_THRESHOLD=${MAILQ_THRESHOLD:-20}
- MAILQ_CRIT=${MAILQ_CRIT:-30} - MAILQ_CRIT=${MAILQ_CRIT:-30}</code></p>
</code></pre></div></p>
<p>Um sie anzupassen, fügen Sie einfach die notwendigen Threshold Variablen (z.B. <code>MAILQ_THRESHOLD=10</code>) zu <code>mailcow.conf</code> hinzu und führen <code>docker-compose up -d</code> aus.</p> <p>Um sie anzupassen, fügen Sie einfach die notwendigen Threshold Variablen (z.B. <code>MAILQ_THRESHOLD=10</code>) zu <code>mailcow.conf</code> hinzu und führen <code>docker-compose up -d</code> aus.</p>
<h3 id="threshold-beschreibungen">Threshold Beschreibungen<a class="headerlink" href="#threshold-beschreibungen" title="Permanent link">&para;</a></h3> <h3 id="threshold-beschreibungen">Threshold Beschreibungen<a class="headerlink" href="#threshold-beschreibungen" title="Permanent link">&para;</a></h3>
<h4 id="nginx_threshold">NGINX_THRESHOLD<a class="headerlink" href="#nginx_threshold" title="Permanent link">&para;</a></h4> <h4 id="nginx_threshold">NGINX_THRESHOLD<a class="headerlink" href="#nginx_threshold" title="Permanent link">&para;</a></h4>

Datei anzeigen

@ -2403,20 +2403,19 @@
<p>1. Diese Nachricht in einen Unterordner "facebook" verschieben (wird in Kleinbuchstaben erstellt, falls nicht vorhanden)</p> <p>1. Diese Nachricht in einen Unterordner "facebook" verschieben (wird in Kleinbuchstaben erstellt, falls nicht vorhanden)</p>
<p>2. Den Tag dem Betreff voranstellen: "[facebook] Betreff"</p> <p>2. Den Tag dem Betreff voranstellen: "[facebook] Betreff"</p>
<p>Bitte beachten Sie: Großgeschriebene Tags werden in Kleinbuchstaben umgewandelt, mit Ausnahme des ersten Buchstabens. Wenn Sie den Tag so lassen wollen, wie er ist, wenden Sie bitte den folgenden Diff an und starten Sie mailcow neu: <p>Bitte beachten Sie: Großgeschriebene Tags werden in Kleinbuchstaben umgewandelt, mit Ausnahme des ersten Buchstabens. Wenn Sie den Tag so lassen wollen, wie er ist, wenden Sie bitte den folgenden Diff an und starten Sie mailcow neu:
<div class="highlight"><pre><span></span><code>diff --git a/data/conf/dovecot/global_sieve_after b/data/conf/dovecot/global_sieve_after <code>diff --git a/data/conf/dovecot/global_sieve_after b/data/conf/dovecot/global_sieve_after
index e047136e..933c4137 100644 index e047136e..933c4137 100644
--- a/data/conf/dovecot/global_sieve_after --- a/data/conf/dovecot/global_sieve_after
+++ b/data/conf/dovecot/global_sieve_after +++ b/data/conf/dovecot/global_sieve_after
@@ -15,7 +15,7 @@ if allof ( @@ -15,7 +15,7 @@ if allof (
envelope :detail :matches &quot;to&quot; &quot;*&quot;, envelope :detail :matches "to" "*",
header :contains &quot;X-Moo-Tag&quot; &quot;YES&quot; header :contains "X-Moo-Tag" "YES"
) { ) {
- set :lower :upperfirst &quot;tag&quot; &quot;${1}&quot;; - set :lower :upperfirst "tag" "${1}";
+ set &quot;tag&quot; &quot;${1}&quot;; + set "tag" "${1}";
if mailboxexists &quot;INBOX/${1}&quot; { if mailboxexists "INBOX/${1}" {
fileinto &quot;INBOX/${1}&quot;; fileinto "INBOX/${1}";
} else { } else {</code></p>
</code></pre></div></p>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2349,27 +2349,24 @@
<p><strong>Verwenden Sie die untenstehende Konfiguration nicht für Reverse-Proxy-Setups</strong>, bitte lesen Sie dazu unsere <a href="../../post_installation/firststeps-rp/">Reverse-Proxy-Anleitung</a>, die einen Redirect von HTTP zu HTTPS beinhaltet.</p> <p><strong>Verwenden Sie die untenstehende Konfiguration nicht für Reverse-Proxy-Setups</strong>, bitte lesen Sie dazu unsere <a href="../../post_installation/firststeps-rp/">Reverse-Proxy-Anleitung</a>, die einen Redirect von HTTP zu HTTPS beinhaltet.</p>
<p>Öffne <code>mailcow.conf</code> und setze <code>HTTP_BIND=</code> - falls nicht bereits gesetzt.</p> <p>Öffne <code>mailcow.conf</code> und setze <code>HTTP_BIND=</code> - falls nicht bereits gesetzt.</p>
<p>Erstellen Sie eine neue Datei <code>data/conf/nginx/redirect.conf</code> und fügen Sie die folgende Serverkonfiguration in die Datei ein:</p> <p>Erstellen Sie eine neue Datei <code>data/conf/nginx/redirect.conf</code> und fügen Sie die folgende Serverkonfiguration in die Datei ein:</p>
<div class="highlight"><pre><span></span><code>server { <p><code>server {
root /web; root /web;
listen 80 default_server; listen 80 default_server;
listen [::]:80 default_server; listen [::]:80 default_server;
include /etc/nginx/conf.d/server_name.active; include /etc/nginx/conf.d/server_name.active;
if ( $request_uri ~* &quot;%0A|%0D&quot; ) { return 403; } if ( $request_uri ~* "%0A|%0D" ) { return 403; }
location ^~ /.well-known/acme-challenge/ { location ^~ /.well-known/acme-challenge/ {
allow all; allow all;
default_type &quot;text/plain&quot;; default_type "text/plain";
} }
location / { location / {
return 301 https://$host$uri$is_args$args; return 301 https://$host$uri$is_args$args;
} }
} }</code></p>
</code></pre></div>
<p>Falls Sie den Parameter HTTP_BIND geändert haben, erstellen Sie den Container neu:</p> <p>Falls Sie den Parameter HTTP_BIND geändert haben, erstellen Sie den Container neu:</p>
<div class="highlight"><pre><span></span><code>docker-compose up -d <p><code>docker-compose up -d</code></p>
</code></pre></div>
<p>Andernfalls starten Sie Nginx neu:</p> <p>Andernfalls starten Sie Nginx neu:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart nginx-mailcow <p><code>docker-compose restart nginx-mailcow</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2350,45 +2350,44 @@
Denken Sie daran, dass <strong>ActiveSync NICHT mit einem Desktop-Client</strong> verwendet werden sollte.</p> Denken Sie daran, dass <strong>ActiveSync NICHT mit einem Desktop-Client</strong> verwendet werden sollte.</p>
<p>Öffnen/erstellen Sie <code>data/web/inc/vars.local.inc.php</code> und fügen Sie Ihre Änderungen in das Konfigurationsfeld ein.</p> <p>Öffnen/erstellen Sie <code>data/web/inc/vars.local.inc.php</code> und fügen Sie Ihre Änderungen in das Konfigurationsfeld ein.</p>
<p>Die Änderungen werden mit "$autodiscover_config" in <code>data/web/inc/vars.inc.php</code> zusammengeführt):</p> <p>Die Änderungen werden mit "$autodiscover_config" in <code>data/web/inc/vars.inc.php</code> zusammengeführt):</p>
<div class="highlight"><pre><span></span><code>&lt;?php <p><code>&lt;?php
$autodiscover_config = array( $autodiscover_config = array(
// General autodiscover service type: &quot;activesync&quot; or &quot;imap&quot; // General autodiscover service type: "activesync" or "imap"
// emClient uses autodiscover, but does not support ActiveSync. mailcow excludes emClient from ActiveSync. // emClient uses autodiscover, but does not support ActiveSync. mailcow excludes emClient from ActiveSync.
&#39;autodiscoverType&#39; =&gt; &#39;activesync&#39;, 'autodiscoverType' =&gt; 'activesync',
// If autodiscoverType =&gt; activesync, also use ActiveSync (EAS) for Outlook desktop clients (&gt;= Outlook 2013 on Windows) // If autodiscoverType =&gt; activesync, also use ActiveSync (EAS) for Outlook desktop clients (&gt;= Outlook 2013 on Windows)
// Outlook for Mac does not support ActiveSync // Outlook for Mac does not support ActiveSync
&#39;useEASforOutlook&#39; =&gt; &#39;yes&#39;, 'useEASforOutlook' =&gt; 'yes',
// Please don&#39;t use STARTTLS-enabled service ports in the &quot;port&quot; variable. // Please don't use STARTTLS-enabled service ports in the "port" variable.
// The autodiscover service will always point to SMTPS and IMAPS (TLS-wrapped services). // The autodiscover service will always point to SMTPS and IMAPS (TLS-wrapped services).
// The autoconfig service will additionally announce the STARTTLS-enabled ports, specified in the &quot;tlsport&quot; variable. // The autoconfig service will additionally announce the STARTTLS-enabled ports, specified in the "tlsport" variable.
&#39;imap&#39; =&gt; array( 'imap' =&gt; array(
&#39;server&#39; =&gt; $mailcow_hostname, 'server' =&gt; $mailcow_hostname,
&#39;port&#39; =&gt; array_pop(explode(&#39;:&#39;, getenv(&#39;IMAPS_PORT&#39;))), 'port' =&gt; array_pop(explode(':', getenv('IMAPS_PORT'))),
&#39;tlsport&#39; =&gt; array_pop(explode(&#39;:&#39;, getenv(&#39;IMAP_PORT&#39;))), 'tlsport' =&gt; array_pop(explode(':', getenv('IMAP_PORT'))),
), ),
&#39;pop3&#39; =&gt; array( 'pop3' =&gt; array(
&#39;server&#39; =&gt; $mailcow_hostname, 'server' =&gt; $mailcow_hostname,
&#39;port&#39; =&gt; array_pop(explode(&#39;:&#39;, getenv(&#39;POPS_PORT&#39;))), 'port' =&gt; array_pop(explode(':', getenv('POPS_PORT'))),
&#39;tlsport&#39; =&gt; array_pop(explode(&#39;:&#39;, getenv(&#39;POP_PORT&#39;))), 'tlsport' =&gt; array_pop(explode(':', getenv('POP_PORT'))),
), ),
&#39;smtp&#39; =&gt; array( 'smtp' =&gt; array(
&#39;server&#39; =&gt; $mailcow_hostname, 'server' =&gt; $mailcow_hostname,
&#39;port&#39; =&gt; array_pop(explode(&#39;:&#39;, getenv(&#39;SMTPS_PORT&#39;))), 'port' =&gt; array_pop(explode(':', getenv('SMTPS_PORT'))),
&#39;tlsport&#39; =&gt; array_pop(explode(&#39;:&#39;, getenv(&#39;SUBMISSION_PORT&#39;))), 'tlsport' =&gt; array_pop(explode(':', getenv('SUBMISSION_PORT'))),
), ),
&#39;activesync&#39; =&gt; array( 'activesync' =&gt; array(
&#39;url&#39; =&gt; &#39;https://&#39;.$mailcow_hostname.($https_port == 443 ? &#39;&#39; : &#39;:&#39;.$https_port).&#39;/Microsoft-Server-ActiveSync&#39;, 'url' =&gt; 'https://'.$mailcow_hostname.($https_port == 443 ? '' : ':'.$https_port).'/Microsoft-Server-ActiveSync',
), ),
&#39;caldav&#39; =&gt; array( 'caldav' =&gt; array(
&#39;server&#39; =&gt; $mailcow_hostname, 'server' =&gt; $mailcow_hostname,
&#39;port&#39; =&gt; $https_port, 'port' =&gt; $https_port,
), ),
&#39;carddav&#39; =&gt; array( 'carddav' =&gt; array(
&#39;server&#39; =&gt; $mailcow_hostname, 'server' =&gt; $mailcow_hostname,
&#39;port&#39; =&gt; $https_port, 'port' =&gt; $https_port,
), ),
); );</code></p>
</code></pre></div>
<p>Um immer IMAP und SMTP anstelle von EAS zu verwenden, setzen Sie <code>'autodiscoverType' =&gt; 'imap'</code>.</p> <p>Um immer IMAP und SMTP anstelle von EAS zu verwenden, setzen Sie <code>'autodiscoverType' =&gt; 'imap'</code>.</p>
<p>Deaktivieren Sie ActiveSync für Outlook-Desktop-Clients, indem Sie "useEASforOutlook" auf "no" setzen.</p> <p>Deaktivieren Sie ActiveSync für Outlook-Desktop-Clients, indem Sie "useEASforOutlook" auf "no" setzen.</p>

Datei anzeigen

@ -2349,15 +2349,12 @@
<p>Unauthentifizierte Mails über SMTP an Port 25/tcp akzeptieren weiterhin &gt;= TLS 1.0 . Es ist besser, eine schwache Verschlüsselung zu akzeptieren als gar keine.</p> <p>Unauthentifizierte Mails über SMTP an Port 25/tcp akzeptieren weiterhin &gt;= TLS 1.0 . Es ist besser, eine schwache Verschlüsselung zu akzeptieren als gar keine.</p>
<p><strong>Wie kann man schwache Protokolle wieder aktivieren?</strong></p> <p><strong>Wie kann man schwache Protokolle wieder aktivieren?</strong></p>
<p>Bearbeiten Sie <code>data/conf/postfix/extra.cf</code>:</p> <p>Bearbeiten Sie <code>data/conf/postfix/extra.cf</code>:</p>
<div class="highlight"><pre><span></span><code>submission_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 <p><code>submission_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtps_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 smtps_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3</code></p>
</code></pre></div>
<p>Bearbeiten Sie <code>data/conf/dovecot/extra.conf</code>:</p> <p>Bearbeiten Sie <code>data/conf/dovecot/extra.conf</code>:</p>
<div class="highlight"><pre><span></span><code>ssl_min_protocol = TLSv1 <p><code>ssl_min_protocol = TLSv1</code></p>
</code></pre></div>
<p>Starten Sie die betroffenen Dienste neu:</p> <p>Starten Sie die betroffenen Dienste neu:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart postfix-mailcow dovecot-mailcow <p><code>docker-compose restart postfix-mailcow dovecot-mailcow</code></p>
</code></pre></div>
<p>Tipp: Sie können TLS 1.2 in Windows 7 aktivieren.</p> <p>Tipp: Sie können TLS 1.2 in Windows 7 aktivieren.</p>
<hr> <hr>

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#cd-optmailcow-dockerized" class="md-skip">
Zum Inhalt
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -466,6 +471,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
IPv6 deaktivieren IPv6 deaktivieren
@ -2326,6 +2333,8 @@
</nav> </nav>
</div> </div>
@ -2343,8 +2352,6 @@
<h1>IPv6 deaktivieren</h1>
<p>Dies wird <strong>NUR</strong> empfohlen, wenn Sie kein IPv6-fähiges Netzwerk auf Ihrem Host haben!</p> <p>Dies wird <strong>NUR</strong> empfohlen, wenn Sie kein IPv6-fähiges Netzwerk auf Ihrem Host haben!</p>
<p>Wenn Sie es wirklich brauchen, können Sie die Verwendung von IPv6 in der Compose-Datei deaktivieren. <p>Wenn Sie es wirklich brauchen, können Sie die Verwendung von IPv6 in der Compose-Datei deaktivieren.
Zusätzlich können Sie auch den Start des Containers "ipv6nat-mailcow" deaktivieren, da er nicht benötigt wird, wenn Sie IPv6 nicht verwenden.</p> Zusätzlich können Sie auch den Start des Containers "ipv6nat-mailcow" deaktivieren, da er nicht benötigt wird, wenn Sie IPv6 nicht verwenden.</p>
@ -2353,49 +2360,45 @@ zu erstellen und Ihre Änderungen am Dienst dort zu implementieren. Leider schei
<p>Um IPv6 im mailcow-Netzwerk zu deaktivieren, öffnen Sie docker-compose.yml mit Ihrem bevorzugten Texteditor und suchen Sie nach dem Netzwerk-Abschnitt (er befindet sich am Ende der Datei). </p> <p>Um IPv6 im mailcow-Netzwerk zu deaktivieren, öffnen Sie docker-compose.yml mit Ihrem bevorzugten Texteditor und suchen Sie nach dem Netzwerk-Abschnitt (er befindet sich am Ende der Datei). </p>
<p><strong>1.</strong> Ändern Sie docker-compose.yml</p> <p><strong>1.</strong> Ändern Sie docker-compose.yml</p>
<p>Ändern Sie <code>enable_ipv6: true</code> in <code>enable_ipv6: false</code>:</p> <p>Ändern Sie <code>enable_ipv6: true</code> in <code>enable_ipv6: false</code>:</p>
<div class="highlight"><pre><span></span><code>networks: <p><code>networks:
mailcow-network: mailcow-network:
[...] [...]
enable_ipv6: true # &lt;&lt;&lt; auf false setzen enable_ipv6: true # &lt;&lt;&lt; auf false setzen
[...] [...]</code></p>
</code></pre></div>
<p><strong>2.</strong> ipv6nat-mailcow deaktivieren</p> <p><strong>2.</strong> ipv6nat-mailcow deaktivieren</p>
<p>Um den ipv6nat-mailcow Container ebenfalls zu deaktivieren, gehen Sie in Ihr mailcow Verzeichnis und erstellen Sie eine neue Datei namens "docker-compose.override.yml": </p> <p>Um den ipv6nat-mailcow Container ebenfalls zu deaktivieren, gehen Sie in Ihr mailcow Verzeichnis und erstellen Sie eine neue Datei namens "docker-compose.override.yml": </p>
<p><strong>HINWEIS:</strong> Wenn Sie bereits eine Override-Datei haben, erstellen Sie diese natürlich nicht neu, sondern fügen Sie die untenstehenden Zeilen entsprechend in Ihre bestehende Datei ein!</p> <p><strong>HINWEIS:</strong> Wenn Sie bereits eine Override-Datei haben, erstellen Sie diese natürlich nicht neu, sondern fügen Sie die untenstehenden Zeilen entsprechend in Ihre bestehende Datei ein!</p>
<div class="highlight"><pre><span></span><code># cd /opt/mailcow-dockerized <p>```</p>
# touch docker-compose.override.yml <h1 id="cd-optmailcow-dockerized">cd /opt/mailcow-dockerized<a class="headerlink" href="#cd-optmailcow-dockerized" title="Permanent link">&para;</a></h1>
</code></pre></div> <h1 id="touch-docker-composeoverrideyml">touch docker-compose.override.yml<a class="headerlink" href="#touch-docker-composeoverrideyml" title="Permanent link">&para;</a></h1>
<p>```</p>
<p>Öffnen Sie die Datei in Ihrem bevorzugten Texteditor und tragen Sie folgendes ein:</p> <p>Öffnen Sie die Datei in Ihrem bevorzugten Texteditor und tragen Sie folgendes ein:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p>```
services: version: '2.1'
services:</p>
ipv6nat-mailcow: <pre><code>ipv6nat-mailcow:
image: bash:latest image: bash:latest
restart: &quot;no&quot; restart: "no"
entrypoint: [&quot;echo&quot;, &quot;ipv6nat disabled in compose.override.yml&quot;] entrypoint: ["echo", "ipv6nat disabled in compose.override.yml"]
</code></pre></div> </code></pre>
<p>```</p>
<p>Damit diese Änderungen wirksam werden, müssen Sie den Stack vollständig stoppen und dann neu starten, damit Container und Netzwerke neu erstellt werden:</p> <p>Damit diese Änderungen wirksam werden, müssen Sie den Stack vollständig stoppen und dann neu starten, damit Container und Netzwerke neu erstellt werden:</p>
<div class="highlight"><pre><span></span><code>docker-compose down <p><code>docker-compose down
docker-compose up -d docker-compose up -d</code></p>
</code></pre></div>
<p><strong>3.</strong> Deaktivieren Sie IPv6 in unbound-mailcow</p> <p><strong>3.</strong> Deaktivieren Sie IPv6 in unbound-mailcow</p>
<p>Bearbeiten Sie <code>data/conf/unbound/unbound.conf</code> und setzen Sie <code>do-ip6</code> auf "no":</p> <p>Bearbeiten Sie <code>data/conf/unbound/unbound.conf</code> und setzen Sie <code>do-ip6</code> auf "no":</p>
<div class="highlight"><pre><span></span><code>Server: <p><code>Server:
[...] [...]
do-ip6: no do-ip6: no
[...] [...]</code></p>
</code></pre></div>
<p>unbound neu starten:</p> <p>unbound neu starten:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart unbound-mailcow <p><code>docker-compose restart unbound-mailcow</code></p>
</code></pre></div>
<p><strong>4.</strong> Deaktivieren Sie IPv6 in postfix-mailcow</p> <p><strong>4.</strong> Deaktivieren Sie IPv6 in postfix-mailcow</p>
<p>Erstellen Sie <code>data/conf/postfix/extra.cf</code> und setzen Sie <code>smtp_address_preference</code> auf <code>ipv4</code>:</p> <p>Erstellen Sie <code>data/conf/postfix/extra.cf</code> und setzen Sie <code>smtp_address_preference</code> auf <code>ipv4</code>:</p>
<div class="highlight"><pre><span></span><code>smtp_address_preference = ipv4 <p><code>smtp_address_preference = ipv4
inet_protocols = ipv4 inet_protocols = ipv4</code></p>
</code></pre></div>
<p>Starten Sie Postfix neu:</p> <p>Starten Sie Postfix neu:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart postfix-mailcow <p><code>docker-compose restart postfix-mailcow</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2473,44 +2473,42 @@
</ol> </ol>
<h2 id="aktivieren-sie-dmarc-berichterstattung">Aktivieren Sie DMARC-Berichterstattung<a class="headerlink" href="#aktivieren-sie-dmarc-berichterstattung" title="Permanent link">&para;</a></h2> <h2 id="aktivieren-sie-dmarc-berichterstattung">Aktivieren Sie DMARC-Berichterstattung<a class="headerlink" href="#aktivieren-sie-dmarc-berichterstattung" title="Permanent link">&para;</a></h2>
<p>Erstellen Sie die Datei <code>data/conf/rspamd/local.d/dmarc.conf</code> und setzen Sie den folgenden Inhalt:</p> <p>Erstellen Sie die Datei <code>data/conf/rspamd/local.d/dmarc.conf</code> und setzen Sie den folgenden Inhalt:</p>
<div class="highlight"><pre><span></span><code>reporting { <p><code>reporting {
enabled = true; enabled = true;
email = &#39;noreply-dmarc@example.com&#39;; email = 'noreply-dmarc@example.com';
domain = &#39;example.com&#39;; domain = 'example.com';
org_name = &#39;Example&#39;; org_name = 'Example';
helo = &#39;rspamd&#39;; helo = 'rspamd';
smtp = &#39;postfix&#39;; smtp = 'postfix';
smtp_port = 25; smtp_port = 25;
from_name = &#39;Example DMARC Report&#39;; from_name = 'Example DMARC Report';
msgid_from = &#39;rspamd.mail.example.com&#39;; msgid_from = 'rspamd.mail.example.com';
max_entries = 2k; max_entries = 2k;
keys_expire = 2d; keys_expire = 2d;
} }</code></p>
</code></pre></div>
<p>Erstellen oder ändern Sie <code>docker-compose.override.yml</code> im mailcow-dockerized Basisverzeichnis:</p> <p>Erstellen oder ändern Sie <code>docker-compose.override.yml</code> im mailcow-dockerized Basisverzeichnis:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p>```
version: '2.1'</p>
services: <p>services:
rspamd-mailcow: rspamd-mailcow:
environment: environment:
- MASTER=${MASTER:-y} - MASTER=${MASTER:-y}
labels: labels:
ofelia.enabled: &quot;true&quot; ofelia.enabled: "true"
ofelia.job-exec.rspamd_dmarc_reporting.schedule: &quot;@every 24h&quot; ofelia.job-exec.rspamd_dmarc_reporting.schedule: "@every 24h"
ofelia.job-exec.rspamd_dmarc_reporting.command: &quot;/bin/bash -c \&quot;[[ $${MASTER} == y ]] &amp;&amp; /usr/bin/rspamadm dmarc_report &gt; /var/lib/rspamd/dmarc_reports_last_log 2&gt;&amp;1 || exit 0\&quot;&quot; ofelia.job-exec.rspamd_dmarc_reporting.command: "/bin/bash -c \"[[ $${MASTER} == y ]] &amp;&amp; /usr/bin/rspamadm dmarc_report &gt; /var/lib/rspamd/dmarc_reports_last_log 2&gt;&amp;1 || exit 0\""
ofelia-mailcow: ofelia-mailcow:
depends_on: depends_on:
- rspamd-mailcow - rspamd-mailcow
</code></pre></div> ```</p>
<p>Starte <code>docker-compose up -d</code></p> <p>Starte <code>docker-compose up -d</code></p>
<h2 id="senden-sie-eine-kopie-der-berichte-an-sich-selbst">Senden Sie eine Kopie der Berichte an sich selbst<a class="headerlink" href="#senden-sie-eine-kopie-der-berichte-an-sich-selbst" title="Permanent link">&para;</a></h2> <h2 id="senden-sie-eine-kopie-der-berichte-an-sich-selbst">Senden Sie eine Kopie der Berichte an sich selbst<a class="headerlink" href="#senden-sie-eine-kopie-der-berichte-an-sich-selbst" title="Permanent link">&para;</a></h2>
<p>Um eine versteckte Kopie der von Rspamd erzeugten Berichte zu erhalten, können Sie eine <code>bcc_addrs</code> Liste im <code>reporting</code> Konfigurationsabschnitt von <code>data/conf/rspamd/local.d/dmarc.conf</code> setzen:</p> <p>Um eine versteckte Kopie der von Rspamd erzeugten Berichte zu erhalten, können Sie eine <code>bcc_addrs</code> Liste im <code>reporting</code> Konfigurationsabschnitt von <code>data/conf/rspamd/local.d/dmarc.conf</code> setzen:</p>
<div class="highlight"><pre><span></span><code>reporting { <p><code>reporting {
enabled = true; enabled = true;
email = &#39;noreply-dmarc@example.com&#39;; email = 'noreply-dmarc@example.com';
bcc_addrs = [&quot;noreply-dmarc@example.com&quot;, &quot;parsedmarc@example.com&quot;]; bcc_addrs = ["noreply-dmarc@example.com", "parsedmarc@example.com"];
[...] [...]</code></p>
</code></pre></div>
<p>Rspamd lädt Änderungen in Echtzeit, so dass Sie den Container zu diesem Zeitpunkt nicht neu starten müssen.</p> <p>Rspamd lädt Änderungen in Echtzeit, so dass Sie den Container zu diesem Zeitpunkt nicht neu starten müssen.</p>
<p>Dies kann nützlich sein, wenn Sie...</p> <p>Dies kann nützlich sein, wenn Sie...</p>
<ul> <ul>
@ -2519,18 +2517,14 @@ services:
</ul> </ul>
<h2 id="fehlersuche">Fehlersuche<a class="headerlink" href="#fehlersuche" title="Permanent link">&para;</a></h2> <h2 id="fehlersuche">Fehlersuche<a class="headerlink" href="#fehlersuche" title="Permanent link">&para;</a></h2>
<p>Prüfen Sie, wann der Berichtsplan zuletzt ausgeführt wurde:</p> <p>Prüfen Sie, wann der Berichtsplan zuletzt ausgeführt wurde:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec rspamd-mailcow date -r /var/lib/rspamd/dmarc_reports_last_log <p><code>docker-compose exec rspamd-mailcow date -r /var/lib/rspamd/dmarc_reports_last_log</code></p>
</code></pre></div>
<p>Sehen Sie sich die letzte Berichtsausgabe an:</p> <p>Sehen Sie sich die letzte Berichtsausgabe an:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec rspamd-mailcow cat /var/lib/rspamd/dmarc_reports_last_log <p><code>docker-compose exec rspamd-mailcow cat /var/lib/rspamd/dmarc_reports_last_log</code></p>
</code></pre></div>
<p>Manuelles Auslösen eines DMARC-Berichts:</p> <p>Manuelles Auslösen eines DMARC-Berichts:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec rspamd-mailcow rspamadm dmarc_report <p><code>docker-compose exec rspamd-mailcow rspamadm dmarc_report</code></p>
</code></pre></div>
<p>Bestätigen Sie, dass Rspamd Daten in Redis aufgezeichnet hat:</p> <p>Bestätigen Sie, dass Rspamd Daten in Redis aufgezeichnet hat:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec redis-mailcow redis-cli KEYS &#39;dmarc;*&#39; <p><code>docker-compose exec redis-mailcow redis-cli KEYS 'dmarc;*'
docker-compose exec redis-mailcow redis-cli HGETALL &quot;dmarc;example.com;20211231&quot; docker-compose exec redis-mailcow redis-cli HGETALL "dmarc;example.com;20211231"</code></p>
</code></pre></div>
<h2 id="andern-sie-die-haufigkeit-der-dmarc-berichte">Ändern Sie die Häufigkeit der DMARC-Berichte<a class="headerlink" href="#andern-sie-die-haufigkeit-der-dmarc-berichte" title="Permanent link">&para;</a></h2> <h2 id="andern-sie-die-haufigkeit-der-dmarc-berichte">Ändern Sie die Häufigkeit der DMARC-Berichte<a class="headerlink" href="#andern-sie-die-haufigkeit-der-dmarc-berichte" title="Permanent link">&para;</a></h2>
<p>Im obigen Beispiel werden die Berichte einmal alle 24 Stunden gesendet.</p> <p>Im obigen Beispiel werden die Berichte einmal alle 24 Stunden gesendet.</p>
<p>Der Olefia-Zeitplan hat die gleiche Implementierung wie <code>cron</code> in Go, die unterstützte Syntax ist beschrieben in <a href="https://pkg.go.dev/github.com/robfig/cron">cron Documentation</a></p> <p>Der Olefia-Zeitplan hat die gleiche Implementierung wie <code>cron</code> in Go, die unterstützte Syntax ist beschrieben in <a href="https://pkg.go.dev/github.com/robfig/cron">cron Documentation</a></p>

Datei anzeigen

@ -530,10 +530,65 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#aus-technischen-grunden-unterscheiden-sich-die-http-bindungen-ein-wenig-von-anderen-service-bindungen" class="md-nav__link">
Aus technischen Gründen unterscheiden sich die http-Bindungen ein wenig von anderen Service-Bindungen.
</a>
</li>
<li class="md-nav__item">
<a href="#sie-werden-die-folgenden-variablen-finden-getrennt-durch-eine-bindungsadresse-und-deren-port" class="md-nav__link">
Sie werden die folgenden Variablen finden, getrennt durch eine Bindungsadresse und deren Port:
</a>
</li>
<li class="md-nav__item">
<a href="#beispiel-http_bind1234" class="md-nav__link">
Beispiel: HTTP_BIND=1.2.3.4
</a>
</li>
<li class="md-nav__item">
<a href="#andere-dienste-werden-nach-folgendem-format-gebunden" class="md-nav__link">
Andere Dienste werden nach folgendem Format gebunden:
</a>
</li>
<li class="md-nav__item">
<a href="#smtp_port123425-bindet-smtp-an-die-ip-1234-auf-port-25" class="md-nav__link">
SMTP_PORT=1.2.3.4:25 bindet SMTP an die IP 1.2.3.4 auf Port 25
</a>
</li>
<li class="md-nav__item">
<a href="#wichtig-durch-die-angabe-einer-ipv4-adresse-werden-alle-ipv6-bindungen-seit-docker-20x-ubersprungen" class="md-nav__link">
Wichtig! Durch die Angabe einer IPv4-Adresse werden alle IPv6-Bindungen seit Docker 20.x übersprungen.
</a>
</li>
<li class="md-nav__item">
<a href="#doveadm-sql-sowie-solr-sind-nur-an-lokale-ports-gebunden-bitte-andern-sie-das-nicht-es-sei-denn-sie-wissen-was-sie-tun" class="md-nav__link">
doveadm, SQL sowie Solr sind nur an lokale Ports gebunden, bitte ändern Sie das nicht, es sei denn, Sie wissen, was Sie tun.
</a>
<nav class="md-nav" aria-label="doveadm, SQL sowie Solr sind nur an lokale Ports gebunden, bitte ändern Sie das nicht, es sei denn, Sie wissen, was Sie tun.">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ipv6-binding" class="md-nav__link"> <a href="#ipv6-binding" class="md-nav__link">
IPv6-Binding IPv6-Binding
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2382,10 +2437,65 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#aus-technischen-grunden-unterscheiden-sich-die-http-bindungen-ein-wenig-von-anderen-service-bindungen" class="md-nav__link">
Aus technischen Gründen unterscheiden sich die http-Bindungen ein wenig von anderen Service-Bindungen.
</a>
</li>
<li class="md-nav__item">
<a href="#sie-werden-die-folgenden-variablen-finden-getrennt-durch-eine-bindungsadresse-und-deren-port" class="md-nav__link">
Sie werden die folgenden Variablen finden, getrennt durch eine Bindungsadresse und deren Port:
</a>
</li>
<li class="md-nav__item">
<a href="#beispiel-http_bind1234" class="md-nav__link">
Beispiel: HTTP_BIND=1.2.3.4
</a>
</li>
<li class="md-nav__item">
<a href="#andere-dienste-werden-nach-folgendem-format-gebunden" class="md-nav__link">
Andere Dienste werden nach folgendem Format gebunden:
</a>
</li>
<li class="md-nav__item">
<a href="#smtp_port123425-bindet-smtp-an-die-ip-1234-auf-port-25" class="md-nav__link">
SMTP_PORT=1.2.3.4:25 bindet SMTP an die IP 1.2.3.4 auf Port 25
</a>
</li>
<li class="md-nav__item">
<a href="#wichtig-durch-die-angabe-einer-ipv4-adresse-werden-alle-ipv6-bindungen-seit-docker-20x-ubersprungen" class="md-nav__link">
Wichtig! Durch die Angabe einer IPv4-Adresse werden alle IPv6-Bindungen seit Docker 20.x übersprungen.
</a>
</li>
<li class="md-nav__item">
<a href="#doveadm-sql-sowie-solr-sind-nur-an-lokale-ports-gebunden-bitte-andern-sie-das-nicht-es-sei-denn-sie-wissen-was-sie-tun" class="md-nav__link">
doveadm, SQL sowie Solr sind nur an lokale Ports gebunden, bitte ändern Sie das nicht, es sei denn, Sie wissen, was Sie tun.
</a>
<nav class="md-nav" aria-label="doveadm, SQL sowie Solr sind nur an lokale Ports gebunden, bitte ändern Sie das nicht, es sei denn, Sie wissen, was Sie tun.">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ipv6-binding" class="md-nav__link"> <a href="#ipv6-binding" class="md-nav__link">
IPv6-Binding IPv6-Binding
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2406,29 +2516,25 @@
<h1>IP-Verbindungen</h1>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
<p>Das Ändern der Bindung hat keinen Einfluss auf Source-NAT. Siehe <a href="../firststeps-snat/">SNAT</a> für die erforderlichen Schritte.</p> <p>Das Ändern der Bindung hat keinen Einfluss auf Source-NAT. Siehe <a href="../firststeps-snat/">SNAT</a> für die erforderlichen Schritte.</p>
</div> </div>
<h2 id="ipv4-binding">IPv4-Binding<a class="headerlink" href="#ipv4-binding" title="Permanent link">&para;</a></h2> <h2 id="ipv4-binding">IPv4-Binding<a class="headerlink" href="#ipv4-binding" title="Permanent link">&para;</a></h2>
<p>Um eine oder mehrere IPv4-Bind(ings) anzupassen, öffne <code>mailcow.conf</code> und editiere eine, mehrere oder alle Variablen nach deinen Bedürfnissen:</p> <p>Um eine oder mehrere IPv4-Bind(ings) anzupassen, öffne <code>mailcow.conf</code> und editiere eine, mehrere oder alle Variablen nach deinen Bedürfnissen:</p>
<div class="highlight"><pre><span></span><code># Aus technischen Gründen unterscheiden sich die http-Bindungen ein wenig von anderen Service-Bindungen. <p>```</p>
# Sie werden die folgenden Variablen finden, getrennt durch eine Bindungsadresse und deren Port: <h1 id="aus-technischen-grunden-unterscheiden-sich-die-http-bindungen-ein-wenig-von-anderen-service-bindungen">Aus technischen Gründen unterscheiden sich die http-Bindungen ein wenig von anderen Service-Bindungen.<a class="headerlink" href="#aus-technischen-grunden-unterscheiden-sich-die-http-bindungen-ein-wenig-von-anderen-service-bindungen" title="Permanent link">&para;</a></h1>
# Beispiel: HTTP_BIND=1.2.3.4 <h1 id="sie-werden-die-folgenden-variablen-finden-getrennt-durch-eine-bindungsadresse-und-deren-port">Sie werden die folgenden Variablen finden, getrennt durch eine Bindungsadresse und deren Port:<a class="headerlink" href="#sie-werden-die-folgenden-variablen-finden-getrennt-durch-eine-bindungsadresse-und-deren-port" title="Permanent link">&para;</a></h1>
<h1 id="beispiel-http_bind1234">Beispiel: HTTP_BIND=1.2.3.4<a class="headerlink" href="#beispiel-http_bind1234" title="Permanent link">&para;</a></h1>
HTTP_PORT=80 <p>HTTP_PORT=80
HTTP_BIND= HTTP_BIND=
HTTPS_PORT=443 HTTPS_PORT=443
HTTPS_BIND= HTTPS_BIND=</p>
<h1 id="andere-dienste-werden-nach-folgendem-format-gebunden">Andere Dienste werden nach folgendem Format gebunden:<a class="headerlink" href="#andere-dienste-werden-nach-folgendem-format-gebunden" title="Permanent link">&para;</a></h1>
# Andere Dienste werden nach folgendem Format gebunden: <h1 id="smtp_port123425-bindet-smtp-an-die-ip-1234-auf-port-25">SMTP_PORT=1.2.3.4:25 bindet SMTP an die IP 1.2.3.4 auf Port 25<a class="headerlink" href="#smtp_port123425-bindet-smtp-an-die-ip-1234-auf-port-25" title="Permanent link">&para;</a></h1>
# SMTP_PORT=1.2.3.4:25 bindet SMTP an die IP 1.2.3.4 auf Port 25 <h1 id="wichtig-durch-die-angabe-einer-ipv4-adresse-werden-alle-ipv6-bindungen-seit-docker-20x-ubersprungen">Wichtig! Durch die Angabe einer IPv4-Adresse werden alle IPv6-Bindungen seit Docker 20.x übersprungen.<a class="headerlink" href="#wichtig-durch-die-angabe-einer-ipv4-adresse-werden-alle-ipv6-bindungen-seit-docker-20x-ubersprungen" title="Permanent link">&para;</a></h1>
# Wichtig! Durch die Angabe einer IPv4-Adresse werden alle IPv6-Bindungen seit Docker 20.x übersprungen. <h1 id="doveadm-sql-sowie-solr-sind-nur-an-lokale-ports-gebunden-bitte-andern-sie-das-nicht-es-sei-denn-sie-wissen-was-sie-tun">doveadm, SQL sowie Solr sind nur an lokale Ports gebunden, bitte ändern Sie das nicht, es sei denn, Sie wissen, was Sie tun.<a class="headerlink" href="#doveadm-sql-sowie-solr-sind-nur-an-lokale-ports-gebunden-bitte-andern-sie-das-nicht-es-sei-denn-sie-wissen-was-sie-tun" title="Permanent link">&para;</a></h1>
# doveadm, SQL sowie Solr sind nur an lokale Ports gebunden, bitte ändern Sie das nicht, es sei denn, Sie wissen, was Sie tun. <p>SMTP_PORT=25
SMTP_PORT=25
SMTPS_PORT=465 SMTPS_PORT=465
SUBMISSION_PORT=587 SUBMISSION_PORT=587
IMAP_PORT=143 IMAP_PORT=143
@ -2439,35 +2545,36 @@ SIEVE_PORT=4190
DOVEADM_PORT=127.0.0.1:19991 DOVEADM_PORT=127.0.0.1:19991
SQL_PORT=127.0.0.1:13306 SQL_PORT=127.0.0.1:13306
SOLR_PORT=127.0.0.1:18983 SOLR_PORT=127.0.0.1:18983
</code></pre></div> ```</p>
<p>Um Ihre Änderungen zu übernehmen, führen Sie <code>docker-compose down</code> gefolgt von <code>docker-compose up -d</code> aus.</p> <p>Um Ihre Änderungen zu übernehmen, führen Sie <code>docker-compose down</code> gefolgt von <code>docker-compose up -d</code> aus.</p>
<h2 id="ipv6-binding">IPv6-Binding<a class="headerlink" href="#ipv6-binding" title="Permanent link">&para;</a></h2> <h2 id="ipv6-binding">IPv6-Binding<a class="headerlink" href="#ipv6-binding" title="Permanent link">&para;</a></h2>
<p>Das Ändern von IPv6-Bindings ist anders als bei IPv4. Auch dies hat einen technischen Hintergrund.</p> <p>Das Ändern von IPv6-Bindings ist anders als bei IPv4. Auch dies hat einen technischen Hintergrund.</p>
<p>Eine <code>docker-compose.override.yml</code> Datei wird verwendet, anstatt die <code>docker-compose.yml</code> Datei direkt zu bearbeiten. Dies geschieht, um die Aktualisierbarkeit zu erhalten, da die Datei <code>docker-compose.yml</code> regelmäßig aktualisiert wird und Ihre Änderungen höchstwahrscheinlich überschrieben werden.</p> <p>Eine <code>docker-compose.override.yml</code> Datei wird verwendet, anstatt die <code>docker-compose.yml</code> Datei direkt zu bearbeiten. Dies geschieht, um die Aktualisierbarkeit zu erhalten, da die Datei <code>docker-compose.yml</code> regelmäßig aktualisiert wird und Ihre Änderungen höchstwahrscheinlich überschrieben werden.</p>
<p>Bearbeiten Sie die Datei "docker-compose.override.yml" und erstellen Sie sie mit dem folgenden Inhalt. Ihr Inhalt wird mit der produktiven Datei "docker-compose.yml" zusammengeführt.</p> <p>Bearbeiten Sie die Datei "docker-compose.override.yml" und erstellen Sie sie mit dem folgenden Inhalt. Ihr Inhalt wird mit der produktiven Datei "docker-compose.yml" zusammengeführt.</p>
<p>Es wird eine imaginäre IPv6 <strong>2a00:dead:beef::abc</strong> angegeben. Das erste Suffix <code>:PORT1</code> definiert den externen Port, während das zweite Suffix <code>:PORT2</code> zu dem entsprechenden Port innerhalb des Containers führt und nicht verändert werden darf.</p> <p>Es wird eine imaginäre IPv6 <strong>2a00:dead:beef::abc</strong> angegeben. Das erste Suffix <code>:PORT1</code> definiert den externen Port, während das zweite Suffix <code>:PORT2</code> zu dem entsprechenden Port innerhalb des Containers führt und nicht verändert werden darf.</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p>```
services: version: '2.1'
services:</p>
<pre><code>dovecot-mailcow:
ports:
- '2a00:dead:beef::abc:143:143'
- '2a00:dead:beef::abc:993:993'
- '2a00:dead:beef::abc:110:110'
- '2a00:dead:beef::abc:995:995'
- '2a00:dead:beef::abc:4190:4190'
dovecot-mailcow: postfix-mailcow:
ports: ports:
- &#39;2a00:dead:beef::abc:143:143&#39; - '2a00:dead:beef::abc:25:25'
- &#39;2a00:dead:beef::abc:993:993&#39; - '2a00:dead:beef::abc:465:465'
- &#39;2a00:dead:beef::abc:110:110&#39; - '2a00:dead:beef::abc:587:587'
- &#39;2a00:dead:beef::abc:995:995&#39;
- &#39;2a00:dead:beef::abc:4190:4190&#39;
postfix-mailcow: nginx-mailcow:
ports: ports:
- &#39;2a00:dead:beef::abc:25:25&#39; - '2a00:dead:beef::abc:80:80'
- &#39;2a00:dead:beef::abc:465:465&#39; - '2a00:dead:beef::abc:443:443'
- &#39;2a00:dead:beef::abc:587:587&#39; </code></pre>
<p>```</p>
nginx-mailcow:
ports:
- &#39;2a00:dead:beef::abc:80:80&#39;
- &#39;2a00:dead:beef::abc:443:443&#39;
</code></pre></div>
<p>Um Ihre Änderungen zu übernehmen, führen Sie <code>docker-compose down</code> gefolgt von <code>docker-compose up -d</code> aus.</p> <p>Um Ihre Änderungen zu übernehmen, führen Sie <code>docker-compose down</code> gefolgt von <code>docker-compose up -d</code> aus.</p>
<hr> <hr>

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#smtp-inet-n-smtpd" class="md-skip">
Zum Inhalt
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -508,6 +513,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
Lokaler MTA auf Docker-Host Lokaler MTA auf Docker-Host
@ -2326,6 +2333,8 @@
</nav> </nav>
</div> </div>
@ -2343,19 +2352,17 @@
<h1>Lokaler MTA auf Docker-Host</h1>
<p>Die einfachste Möglichkeit wäre, den Listener an Port 25/tcp zu deaktivieren.</p> <p>Die einfachste Möglichkeit wäre, den Listener an Port 25/tcp zu deaktivieren.</p>
<p><strong>Postfix</strong>-Benutzer deaktivieren den Listener, indem sie die folgende Zeile (beginnend mit <code>smtp</code> oder <code>25</code>) in <code>/etc/postfix/master.cf</code> auskommentieren: <p><strong>Postfix</strong>-Benutzer deaktivieren den Listener, indem sie die folgende Zeile (beginnend mit <code>smtp</code> oder <code>25</code>) in <code>/etc/postfix/master.cf</code> auskommentieren:
<div class="highlight"><pre><span></span><code>#smtp inet n - - - - smtpd ```</p>
</code></pre></div></p> <h1 id="smtp-inet-n-smtpd">smtp inet n - - - - smtpd<a class="headerlink" href="#smtp-inet-n-smtpd" title="Permanent link">&para;</a></h1>
<p>```</p>
<p>Außerdem, um über eine Dockerized mailcow weiterzuleiten, sollten Sie <code>172.22.1.1</code> als Relayhost hinzufügen und das Docker-Interface aus "inet_interfaces" entfernen:</p> <p>Außerdem, um über eine Dockerized mailcow weiterzuleiten, sollten Sie <code>172.22.1.1</code> als Relayhost hinzufügen und das Docker-Interface aus "inet_interfaces" entfernen:</p>
<div class="highlight"><pre><span></span><code>postconf -e &#39;relayhost = 172.22.1.1&#39; <p><code>postconf -e 'relayhost = 172.22.1.1'
postconf -e &quot;mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128&quot; postconf -e "mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128"
postconf -e &quot;inet_interfaces = loopback-only&quot; postconf -e "inet_interfaces = loopback-only"
postconf -e &quot;relay_transport = relay&quot; postconf -e "relay_transport = relay"
postconf -e &quot;default_transport = smtp&quot; postconf -e "default_transport = smtp"</code></p>
</code></pre></div>
<p><strong>Jetzt ist es wichtig</strong>, dass Sie nicht denselben FQDN in <code>myhostname</code> haben, den Sie für Ihre mailcow verwenden. Prüfen Sie Ihre lokale (nicht-Docker) Postfix' main.cf auf <code>myhostname</code> und setzen Sie ihn auf etwas anderes, zum Beispiel <code>local.my.fqdn.tld</code>.</p> <p><strong>Jetzt ist es wichtig</strong>, dass Sie nicht denselben FQDN in <code>myhostname</code> haben, den Sie für Ihre mailcow verwenden. Prüfen Sie Ihre lokale (nicht-Docker) Postfix' main.cf auf <code>myhostname</code> und setzen Sie ihn auf etwas anderes, zum Beispiel <code>local.my.fqdn.tld</code>.</p>
<p>"172.22.1.1" ist das von mailcow erstellte Netzwerk-Gateway in Docker. <p>"172.22.1.1" ist das von mailcow erstellte Netzwerk-Gateway in Docker.
Das Relaying über diese Schnittstelle ist notwendig (anstatt - zum Beispiel - direkt über ${MAILCOW_HOSTNAME}), um über ein bekanntes internes Netzwerk weiterzuleiten.</p> Das Relaying über diese Schnittstelle ist notwendig (anstatt - zum Beispiel - direkt über ${MAILCOW_HOSTNAME}), um über ein bekanntes internes Netzwerk weiterzuleiten.</p>

Datei anzeigen

@ -572,6 +572,33 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#nur-fur-rsyslog" class="md-nav__link">
Nur für Rsyslog:
</a>
</li>
<li class="md-nav__item">
<a href="#um-die-local3-eingabe-nach-varlogmailcowlog-zu-verschieben-und-die-verarbeitung-zu-beenden-erstellen-sie-eine-datei-etcrsyslogddockerconf" class="md-nav__link">
Um die local3-Eingabe nach /var/log/mailcow.log zu verschieben und die Verarbeitung zu beenden, erstellen Sie eine Datei "/etc/rsyslog.d/docker.conf":
</a>
</li>
<li class="md-nav__item">
<a href="#danach-rsyslog-neu-starten" class="md-nav__link">
Danach rsyslog neu starten.
</a>
<nav class="md-nav" aria-label="Danach rsyslog neu starten.">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#uber-daemonjson-global" class="md-nav__link"> <a href="#uber-daemonjson-global" class="md-nav__link">
Über daemon.json (global) Über daemon.json (global)
@ -2416,6 +2443,33 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#nur-fur-rsyslog" class="md-nav__link">
Nur für Rsyslog:
</a>
</li>
<li class="md-nav__item">
<a href="#um-die-local3-eingabe-nach-varlogmailcowlog-zu-verschieben-und-die-verarbeitung-zu-beenden-erstellen-sie-eine-datei-etcrsyslogddockerconf" class="md-nav__link">
Um die local3-Eingabe nach /var/log/mailcow.log zu verschieben und die Verarbeitung zu beenden, erstellen Sie eine Datei "/etc/rsyslog.d/docker.conf":
</a>
</li>
<li class="md-nav__item">
<a href="#danach-rsyslog-neu-starten" class="md-nav__link">
Danach rsyslog neu starten.
</a>
<nav class="md-nav" aria-label="Danach rsyslog neu starten.">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#uber-daemonjson-global" class="md-nav__link"> <a href="#uber-daemonjson-global" class="md-nav__link">
Über daemon.json (global) Über daemon.json (global)
@ -2446,8 +2500,6 @@
<h1>Logging</h1>
<p>Das Logging in mailcow: dockerized besteht aus mehreren Stufen, ist aber immerhin wesentlich flexibler und einfacher in einen Logging-Daemon zu integrieren als bisher.</p> <p>Das Logging in mailcow: dockerized besteht aus mehreren Stufen, ist aber immerhin wesentlich flexibler und einfacher in einen Logging-Daemon zu integrieren als bisher.</p>
<p>In Docker schreibt die containerisierte Anwendung (PID 1) ihre Ausgabe auf stdout. Für echte Ein-Anwendungs-Container funktioniert das sehr gut. <p>In Docker schreibt die containerisierte Anwendung (PID 1) ihre Ausgabe auf stdout. Für echte Ein-Anwendungs-Container funktioniert das sehr gut.
Führen Sie <code>docker-compose logs --help</code> aus, um mehr zu erfahren. </p> Führen Sie <code>docker-compose logs --help</code> aus, um mehr zu erfahren. </p>
@ -2466,68 +2518,60 @@ ohne die Fähigkeit zu verlieren, Logs von der UI zu lesen oder verdächtige Cli
<h4 id="uber-docker-composeoverrideyml">Über docker-compose.override.yml<a class="headerlink" href="#uber-docker-composeoverrideyml" title="Permanent link">&para;</a></h4> <h4 id="uber-docker-composeoverrideyml">Über docker-compose.override.yml<a class="headerlink" href="#uber-docker-composeoverrideyml" title="Permanent link">&para;</a></h4>
<p>Hier ist die gute Nachricht: Da Docker einige großartige Logging-Treiber hat, können Sie mailcow: dockerized mit Leichtigkeit in Ihre bestehende Logging-Umgebung integrieren.</p> <p>Hier ist die gute Nachricht: Da Docker einige großartige Logging-Treiber hat, können Sie mailcow: dockerized mit Leichtigkeit in Ihre bestehende Logging-Umgebung integrieren.</p>
<p>Erstellen Sie eine <code>docker-compose.override.yml</code> und fügen Sie zum Beispiel diesen Block hinzu, um das "gelf" Logging-Plugin für <code>postfix-mailcow</code> zu verwenden:</p> <p>Erstellen Sie eine <code>docker-compose.override.yml</code> und fügen Sie zum Beispiel diesen Block hinzu, um das "gelf" Logging-Plugin für <code>postfix-mailcow</code> zu verwenden:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p><code>version: '2.1'
services: services:
postfix-mailcow: # oder ein anderer postfix-mailcow: # oder ein anderer
logging: logging:
driver: &quot;gelf&quot; driver: "gelf"
options: options:
gelf-address: &quot;udp://graylog:12201&quot; gelf-address: "udp://graylog:12201"</code></p>
</code></pre></div>
<p>Ein weiteres Beispiel für <strong>Syslog</strong>:</p> <p>Ein weiteres Beispiel für <strong>Syslog</strong>:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p>```
services: version: '2.1'
services:</p>
postfix-mailcow: # oder ein anderer <p>postfix-mailcow: # oder ein anderer
logging: logging:
driver: &quot;syslog&quot; driver: "syslog"
options: options:
syslog-address: &quot;udp://127.0.0.1:514&quot; syslog-address: "udp://127.0.0.1:514"
syslog-facility: &quot;local3&quot; syslog-facility: "local3"</p>
<p>dovecot-mailcow: # oder ein anderer
dovecot-mailcow: # oder ein anderer
logging: logging:
driver: &quot;syslog&quot; driver: "syslog"
options: options:
syslog-address: &quot;udp://127.0.0.1:514&quot; syslog-address: "udp://127.0.0.1:514"
syslog-facility: &quot;local3&quot; syslog-facility: "local3"</p>
<p>rspamd-mailcow: # oder ein anderer
rspamd-mailcow: # oder ein anderer
logging: logging:
driver: &quot;syslog&quot; driver: "syslog"
options: options:
syslog-address: &quot;udp://127.0.0.1:514&quot; syslog-address: "udp://127.0.0.1:514"
syslog-facility: &quot;local3&quot; syslog-facility: "local3"</p>
<h1 id="nur-fur-rsyslog">Nur für Rsyslog:<a class="headerlink" href="#nur-fur-rsyslog" title="Permanent link">&para;</a></h1>
# Nur für Rsyslog: <h1 id="um-die-local3-eingabe-nach-varlogmailcowlog-zu-verschieben-und-die-verarbeitung-zu-beenden-erstellen-sie-eine-datei-etcrsyslogddockerconf">Um die local3-Eingabe nach /var/log/mailcow.log zu verschieben und die Verarbeitung zu beenden, erstellen Sie eine Datei "/etc/rsyslog.d/docker.conf":<a class="headerlink" href="#um-die-local3-eingabe-nach-varlogmailcowlog-zu-verschieben-und-die-verarbeitung-zu-beenden-erstellen-sie-eine-datei-etcrsyslogddockerconf" title="Permanent link">&para;</a></h1>
# Um die local3-Eingabe nach /var/log/mailcow.log zu verschieben und die Verarbeitung zu beenden, erstellen Sie eine Datei &quot;/etc/rsyslog.d/docker.conf&quot;: <p>local3.* /var/log/mailcow.logs
&amp; ~</p>
local3.* /var/log/mailcow.logs <h1 id="danach-rsyslog-neu-starten">Danach rsyslog neu starten.<a class="headerlink" href="#danach-rsyslog-neu-starten" title="Permanent link">&para;</a></h1>
&amp; ~ <p>```</p>
# Danach rsyslog neu starten.
</code></pre></div>
<h4 id="uber-daemonjson-global">Über daemon.json (global)<a class="headerlink" href="#uber-daemonjson-global" title="Permanent link">&para;</a></h4> <h4 id="uber-daemonjson-global">Über daemon.json (global)<a class="headerlink" href="#uber-daemonjson-global" title="Permanent link">&para;</a></h4>
<p>Wenn Sie den Logging-Treiber <strong>global</strong> ändern wollen, editieren Sie die Konfigurationsdatei des Docker-Daemons <code>/etc/docker/daemon.json</code> und starten Sie den Docker-Dienst neu:</p> <p>Wenn Sie den Logging-Treiber <strong>global</strong> ändern wollen, editieren Sie die Konfigurationsdatei des Docker-Daemons <code>/etc/docker/daemon.json</code> und starten Sie den Docker-Dienst neu:</p>
<div class="highlight"><pre><span></span><code>{ <p><code>{
... ...
&quot;log-driver&quot;: &quot;gelf&quot;, "log-driver": "gelf",
&quot;log-opts&quot;: { "log-opts": {
&quot;gelf-address&quot;: &quot;udp://graylog:12201&quot; "gelf-address": "udp://graylog:12201"
} }
... ...
} }</code></p>
</code></pre></div>
<p>Für Syslog:</p> <p>Für Syslog:</p>
<div class="highlight"><pre><span></span><code>{ <p><code>{
... ...
&quot;log-driver&quot;: &quot;syslog&quot;, "log-driver": "syslog",
&quot;log-opts&quot;: { "log-opts": {
&quot;syslog-address&quot;: &quot;udp://1.2.3.4:514&quot; "syslog-address": "udp://1.2.3.4:514"
} }
... ...
} }</code></p>
</code></pre></div>
<p>Starten Sie den Docker-Daemon neu und führen Sie <code>docker-compose down &amp;&amp; docker-compose up -d</code> aus, um die Container mit dem neuen Protokollierungstreiber neu zu erstellen.</p> <p>Starten Sie den Docker-Daemon neu und führen Sie <code>docker-compose down &amp;&amp; docker-compose up -d</code> aus, um die Container mit dem neuen Protokollierungstreiber neu zu erstellen.</p>
<hr> <hr>

Datei anzeigen

@ -600,10 +600,23 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#binbash" class="md-nav__link">
!/bin/bash
</a>
<nav class="md-nav" aria-label="!/bin/bash">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#hinzufugen-weiterer-servernamen-fur-mailcow-ui" class="md-nav__link"> <a href="#hinzufugen-weiterer-servernamen-fur-mailcow-ui" class="md-nav__link">
Hinzufügen weiterer Servernamen für mailcow UI Hinzufügen weiterer Servernamen für mailcow UI
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2438,10 +2451,23 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#binbash" class="md-nav__link">
!/bin/bash
</a>
<nav class="md-nav" aria-label="!/bin/bash">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#hinzufugen-weiterer-servernamen-fur-mailcow-ui" class="md-nav__link"> <a href="#hinzufugen-weiterer-servernamen-fur-mailcow-ui" class="md-nav__link">
Hinzufügen weiterer Servernamen für mailcow UI Hinzufügen weiterer Servernamen für mailcow UI
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2462,16 +2488,14 @@
<h1>Reverse Proxy</h1>
<p>Sie müssen die Nginx-Seite, die mit mailcow: dockerized geliefert wird, nicht ändern. <p>Sie müssen die Nginx-Seite, die mit mailcow: dockerized geliefert wird, nicht ändern.
mailcow: dockerized vertraut auf das Standard-Gateway IP 172.22.1.1 als Proxy.</p> mailcow: dockerized vertraut auf das Standard-Gateway IP 172.22.1.1 als Proxy.</p>
<p>1. Stellen Sie sicher, dass Sie HTTP_BIND und HTTPS_BIND in <code>mailcow.conf</code> auf eine lokale Adresse ändern und die Ports entsprechend einstellen, zum Beispiel: <p>1. Stellen Sie sicher, dass Sie HTTP_BIND und HTTPS_BIND in <code>mailcow.conf</code> auf eine lokale Adresse ändern und die Ports entsprechend einstellen, zum Beispiel:
<div class="highlight"><pre><span></span><code><span class="nv">HTTP_BIND</span><span class="o">=</span><span class="m">127</span>.0.0.1 <code>bash
<span class="nv">HTTP_PORT</span><span class="o">=</span><span class="m">8080</span> HTTP_BIND=127.0.0.1
<span class="nv">HTTPS_BIND</span><span class="o">=</span><span class="m">127</span>.0.0.1 HTTP_PORT=8080
<span class="nv">HTTPS_PORT</span><span class="o">=</span><span class="m">8443</span> HTTPS_BIND=127.0.0.1
</code></pre></div></p> HTTPS_PORT=8443</code></p>
<p>Dadurch werden auch die Bindungen innerhalb des Nginx-Containers geändert! Dies ist wichtig, wenn Sie sich entscheiden, einen Proxy innerhalb von Docker zu verwenden.</p> <p>Dadurch werden auch die Bindungen innerhalb des Nginx-Containers geändert! Dies ist wichtig, wenn Sie sich entscheiden, einen Proxy innerhalb von Docker zu verwenden.</p>
<p><strong>WICHTIG:</strong> Verwenden Sie nicht Port 8081, 9081 oder 65510!</p> <p><strong>WICHTIG:</strong> Verwenden Sie nicht Port 8081, 9081 oder 65510!</p>
<p>Erzeugen Sie die betroffenen Container neu, indem Sie <code>docker-compose up -d</code> ausführen.</p> <p>Erzeugen Sie die betroffenen Container neu, indem Sie <code>docker-compose up -d</code> ausführen.</p>
@ -2500,81 +2524,73 @@ Auf vielen Servern wird logrotate den Webserver sowieso täglich neu laden.</p>
<p>2. Konfigurieren Sie Ihren lokalen Webserver als Reverse Proxy:</p> <p>2. Konfigurieren Sie Ihren lokalen Webserver als Reverse Proxy:</p>
<h3 id="apache-24">Apache 2.4<a class="headerlink" href="#apache-24" title="Permanent link">&para;</a></h3> <h3 id="apache-24">Apache 2.4<a class="headerlink" href="#apache-24" title="Permanent link">&para;</a></h3>
<p>Erforderliche Module: <p>Erforderliche Module:
<div class="highlight"><pre><span></span><code>a2enmod rewrite proxy proxy_http headers ssl <code>a2enmod rewrite proxy proxy_http headers ssl</code></p>
</code></pre></div></p>
<p>Let's Encrypt wird unserem Rewrite folgen, Zertifikatsanfragen in mailcow werden problemlos funktionieren.</p> <p>Let's Encrypt wird unserem Rewrite folgen, Zertifikatsanfragen in mailcow werden problemlos funktionieren.</p>
<p><strong>Die hervorgehobenen Zeilen müssen beachtet werden</strong>.</p> <p><strong>Die hervorgehobenen Zeilen müssen beachtet werden</strong>.</p>
<div class="highlight"><pre><span></span><code><span class="nt">&lt;VirtualHost</span><span class="w"> </span><span class="s">*:80</span><span class="nt">&gt;</span><span class="w"></span> <p>``` apache hl_lines="2 10 11 17 22 23 24 25 30 31"
<span class="hll"><span class="w"> </span><span class="nb">ServerName</span><span class="w"> </span>ZU<span class="w"> </span>MAILCOW<span class="w"> </span>HOSTNAMEN<span class="w"> </span>ÄNDERN<span class="w"></span> <VirtualHost *:80>
</span><span class="w"> </span><span class="nb">ServerAlias</span><span class="w"> </span>autodiscover.*<span class="w"></span> ServerName ZU MAILCOW HOSTNAMEN ÄNDERN
<span class="w"> </span><span class="nb">ServerAlias</span><span class="w"> </span>autoconfig.*<span class="w"></span> ServerAlias autodiscover.*
<span class="w"> </span><span class="nb">RewriteEngine</span><span class="w"> </span><span class="k">on</span><span class="w"></span> ServerAlias autoconfig.*
RewriteEngine on</p>
<span class="w"> </span><span class="nb">RewriteCond</span><span class="w"> </span>%{HTTPS}<span class="w"> </span><span class="k">off</span><span class="w"></span> <p>RewriteCond %{HTTPS} off
<span class="w"> </span><span class="nb">RewriteRule</span><span class="w"> </span>^/?(.*)<span class="w"> </span>https://%{HTTP_HOST}/$1<span class="w"> </span>[R=301,L]<span class="w"></span> RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R=301,L]</p>
<p>ProxyPass / <a href="http://127.0.0.1:8080/">http://127.0.0.1:8080/</a>
<span class="hll"><span class="w"> </span><span class="nb">ProxyPass</span><span class="w"> </span>/<span class="w"> </span>http://127.0.0.1:8080/<span class="w"></span> ProxyPassReverse / <a href="http://127.0.0.1:8080/">http://127.0.0.1:8080/</a>
</span><span class="hll"><span class="w"> </span><span class="nb">ProxyPassReverse</span><span class="w"> </span>/<span class="w"> </span>http://127.0.0.1:8080/<span class="w"></span> ProxyPreserveHost On
</span><span class="w"> </span><span class="nb">ProxyPreserveHost</span><span class="w"> </span><span class="k">On</span><span class="w"></span> ProxyAddHeaders On
<span class="w"> </span><span class="nb">ProxyAddHeaders</span><span class="w"> </span><span class="k">On</span><span class="w"></span> RequestHeader set X-Forwarded-Proto "http"
<span class="w"> </span><span class="nb">RequestHeader</span><span class="w"> </span>set<span class="w"> </span>X-Forwarded-Proto<span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="w"></span> </VirtualHost>
<span class="nt">&lt;/VirtualHost&gt;</span><span class="w"></span> <VirtualHost *:443>
<span class="nt">&lt;VirtualHost</span><span class="w"> </span><span class="s">*:443</span><span class="nt">&gt;</span><span class="w"></span> ServerName ZU MAILCOW HOSTNAMEN ÄNDERN
<span class="hll"><span class="w"> </span><span class="nb">ServerName</span><span class="w"> </span>ZU<span class="w"> </span>MAILCOW<span class="w"> </span>HOSTNAMEN<span class="w"> </span>ÄNDERN<span class="w"></span> ServerAlias autodiscover.*
</span><span class="w"> </span><span class="nb">ServerAlias</span><span class="w"> </span>autodiscover.*<span class="w"></span> ServerAlias autoconfig.*</p>
<span class="w"> </span><span class="nb">ServerAlias</span><span class="w"> </span>autoconfig.*<span class="w"></span> <p># You should proxy to a plain HTTP session to offload SSL processing
ProxyPass /Microsoft-Server-ActiveSync <a href="http://127.0.0.1:8080/Microsoft-Server-ActiveSync">http://127.0.0.1:8080/Microsoft-Server-ActiveSync</a> connectiontimeout=4000
<span class="w"> </span><span class="c"># You should proxy to a plain HTTP session to offload SSL processing</span><span class="w"></span> ProxyPassReverse /Microsoft-Server-ActiveSync <a href="http://127.0.0.1:8080/Microsoft-Server-ActiveSync">http://127.0.0.1:8080/Microsoft-Server-ActiveSync</a>
<span class="hll"><span class="w"> </span><span class="nb">ProxyPass</span><span class="w"> </span><span class="sx">/Microsoft-Server-ActiveSync</span><span class="w"> </span>http://127.0.0.1:8080/Microsoft-Server-ActiveSync<span class="w"> </span>connectiontimeout=4000<span class="w"></span> ProxyPass / <a href="http://127.0.0.1:8080/">http://127.0.0.1:8080/</a>
</span><span class="hll"><span class="w"> </span><span class="nb">ProxyPassReverse</span><span class="w"> </span><span class="sx">/Microsoft-Server-ActiveSync</span><span class="w"> </span>http://127.0.0.1:8080/Microsoft-Server-ActiveSync<span class="w"></span> ProxyPassReverse / <a href="http://127.0.0.1:8080/">http://127.0.0.1:8080/</a>
</span><span class="hll"><span class="w"> </span><span class="nb">ProxyPass</span><span class="w"> </span>/<span class="w"> </span>http://127.0.0.1:8080/<span class="w"></span> ProxyPreserveHost On
</span><span class="hll"><span class="w"> </span><span class="nb">ProxyPassReverse</span><span class="w"> </span>/<span class="w"> </span>http://127.0.0.1:8080/<span class="w"></span> ProxyAddHeaders On
</span><span class="w"> </span><span class="nb">ProxyPreserveHost</span><span class="w"> </span><span class="k">On</span><span class="w"></span> RequestHeader set X-Forwarded-Proto "https"</p>
<span class="w"> </span><span class="nb">ProxyAddHeaders</span><span class="w"> </span><span class="k">On</span><span class="w"></span> <p>SSLCertificateFile MAILCOW_ORDNER/data/assets/ssl/cert.pem
<span class="w"> </span><span class="nb">RequestHeader</span><span class="w"> </span>set<span class="w"> </span>X-Forwarded-Proto<span class="w"> </span><span class="s2">&quot;https&quot;</span><span class="w"></span> SSLCertificateKeyFile MAILCOW_ORDNER/data/assets/ssl/key.pem</p>
<p># Wenn Sie einen HTTPS-Host als Proxy verwenden möchten:
<span class="hll"><span class="w"> </span><span class="nb">SSLCertificateFile</span><span class="w"> </span>MAILCOW_ORDNER/data/assets/ssl/cert.pem<span class="w"></span> #SSLProxyEngine On</p>
</span><span class="hll"><span class="w"> </span><span class="nb">SSLCertificateKeyFile</span><span class="w"> </span>MAILCOW_ORDNER/data/assets/ssl/key.pem<span class="w"></span> <p># Wenn Sie einen Proxy für einen nicht vertrauenswürdigen HTTPS-Host einrichten wollen:
</span> #SSLProxyVerify none
<span class="w"> </span><span class="c"># Wenn Sie einen HTTPS-Host als Proxy verwenden möchten:</span><span class="w"></span> #SSLProxyCheckPeerCN off
<span class="w"> </span><span class="c">#SSLProxyEngine On</span><span class="w"></span> #SSLProxyCheckPeerName off
#SSLProxyCheckPeerExpire off
<span class="w"> </span><span class="c"># Wenn Sie einen Proxy für einen nicht vertrauenswürdigen HTTPS-Host einrichten wollen:</span><span class="w"></span> </VirtualHost>
<span class="w"> </span><span class="c">#SSLProxyVerify none</span><span class="w"></span> ```</p>
<span class="w"> </span><span class="c">#SSLProxyCheckPeerCN off</span><span class="w"></span>
<span class="w"> </span><span class="c">#SSLProxyCheckPeerName off</span><span class="w"></span>
<span class="w"> </span><span class="c">#SSLProxyCheckPeerExpire off</span><span class="w"></span>
<span class="nt">&lt;/VirtualHost&gt;</span><span class="w"></span>
</code></pre></div>
<h3 id="nginx">Nginx<a class="headerlink" href="#nginx" title="Permanent link">&para;</a></h3> <h3 id="nginx">Nginx<a class="headerlink" href="#nginx" title="Permanent link">&para;</a></h3>
<p>Let's Encrypt folgt unserem Rewrite, Zertifikatsanfragen funktionieren problemlos.</p> <p>Let's Encrypt folgt unserem Rewrite, Zertifikatsanfragen funktionieren problemlos.</p>
<p><strong>Achten Sie auf die hervorgehobenen Zeilen</strong>.</p> <p><strong>Achten Sie auf die hervorgehobenen Zeilen</strong>.</p>
<div class="highlight"><pre><span></span><code>server { <p>``` hl_lines="4 10 12 13 25 39"
server {
listen 80 default_server; listen 80 default_server;
listen [::]:80 default_server; listen [::]:80 default_server;
<span class="hll"> server_name ZU MAILCOW HOSTNAMEN ÄNDERN autodiscover.* autoconfig.*; server_name ZU MAILCOW HOSTNAMEN ÄNDERN autodiscover.* autoconfig.<em>;
</span> return 301 https://$host$request_uri; return 301 https://$host$request_uri;
} }
server { server {
listen 443 ssl http2; listen 443 ssl http2;
listen [::]:443 ssl http2; listen [::]:443 ssl http2;
<span class="hll"> server_name ZU MAILCOW HOSTNAMEN ÄNDERN autodiscover.* autoconfig.*; server_name ZU MAILCOW HOSTNAMEN ÄNDERN autodiscover.</em> autoconfig.*;</p>
</span> <p>ssl_certificate MAILCOW_PATH/data/assets/ssl/cert.pem;
<span class="hll"> ssl_certificate MAILCOW_PATH/data/assets/ssl/cert.pem; ssl_certificate_key MAILCOW_PATH/data/assets/ssl/key.pem;
</span><span class="hll"> ssl_certificate_key MAILCOW_PATH/data/assets/ssl/key.pem; ssl_session_timeout 1d;
</span> ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m; ssl_session_cache shared:SSL:50m;
ssl_session_tickets off; ssl_session_tickets off;</p>
<p># Siehe <a href="https://ssl-config.mozilla.org/#server=nginx">https://ssl-config.mozilla.org/#server=nginx</a> für die neuesten Empfehlungen zu ssl-Einstellungen
# Siehe https://ssl-config.mozilla.org/#server=nginx für die neuesten Empfehlungen zu ssl-Einstellungen
# Ein Beispiel für eine Konfiguration ist unten angegeben # Ein Beispiel für eine Konfiguration ist unten angegeben
ssl_protocols TLSv1.2; ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5:!SHA1:!kRSA; ssl_ciphers HIGH:!aNULL:!MD5:!SHA1:!kRSA;
ssl_prefer_server_ciphers off; ssl_prefer_server_ciphers off;</p>
<p>location /Microsoft-Server-ActiveSync {
location /Microsoft-Server-ActiveSync { proxy_pass <a href="http://127.0.0.1:8080/Microsoft-Server-ActiveSync">http://127.0.0.1:8080/Microsoft-Server-ActiveSync</a>;
<span class="hll"> proxy_pass http://127.0.0.1:8080/Microsoft-Server-ActiveSync; proxy_set_header Host $http_host;
</span> proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;
@ -2584,39 +2600,38 @@ server {
proxy_buffers 64 512k; # Seit dem 2022-04 Update nötig für SOGo proxy_buffers 64 512k; # Seit dem 2022-04 Update nötig für SOGo
client_body_buffer_size 512k; client_body_buffer_size 512k;
client_max_body_size 0; client_max_body_size 0;
} }</p>
<p>location / {
location / { proxy_pass <a href="http://127.0.0.1:8080/">http://127.0.0.1:8080/</a>;
<span class="hll"> proxy_pass http://127.0.0.1:8080/; proxy_set_header Host $http_host;
</span> proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 0; client_max_body_size 0;
# Die folgenden Proxy-Buffer müssen gesetzt werden, wenn Sie SOGo nach dem Update 2022-04 (April 2022) verwenden wollen # Die folgenden Proxy-Buffer müssen gesetzt werden, wenn Sie SOGo nach dem Update 2022-04 (April 2022) verwenden wollen
# Andernfalls wird ein Login wie folgt fehlschlagen: https://github.com/mailcow/mailcow-dockerized/issues/4537 # Andernfalls wird ein Login wie folgt fehlschlagen: <a href="https://github.com/mailcow/mailcow-dockerized/issues/4537">https://github.com/mailcow/mailcow-dockerized/issues/4537</a>
proxy_buffer_size 128k; proxy_buffer_size 128k;
proxy_buffers 64 512k; proxy_buffers 64 512k;
proxy_busy_buffers_size 512k; proxy_busy_buffers_size 512k;
} }
} }
</code></pre></div> ```</p>
<h3 id="haproxy-von-der-community-unterstutzt">HAProxy (von der Community unterstützt)<a class="headerlink" href="#haproxy-von-der-community-unterstutzt" title="Permanent link">&para;</a></h3> <h3 id="haproxy-von-der-community-unterstutzt">HAProxy (von der Community unterstützt)<a class="headerlink" href="#haproxy-von-der-community-unterstutzt" title="Permanent link">&para;</a></h3>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
<p>Dies ist ein nicht unterstützter Community Beitrag. Sie können gerne Korrekturen bereitstellen.</p> <p>Dies ist ein nicht unterstützter Community Beitrag. Sie können gerne Korrekturen bereitstellen.</p>
</div> </div>
<p><strong>Wichtig/Fix erwünscht</strong>: Dieses Beispiel leitet nur HTTPS-Verkehr weiter und benutzt nicht den in mailcow eingebauten ACME-Client.</p> <p><strong>Wichtig/Fix erwünscht</strong>: Dieses Beispiel leitet nur HTTPS-Verkehr weiter und benutzt nicht den in mailcow eingebauten ACME-Client.</p>
<div class="highlight"><pre><span></span><code>frontend https-in <p>```
frontend https-in
bind :::443 v4v6 ssl crt mailcow.pem bind :::443 v4v6 ssl crt mailcow.pem
default_backend mailcow default_backend mailcow</p>
<p>backend mailcow
backend mailcow
option forwardfor option forwardfor
http-request set-header X-Forwarded-Proto https if { ssl_fc } http-request set-header X-Forwarded-Proto https if { ssl_fc }
http-request set-header X-Forwarded-Proto http if !{ ssl_fc } http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
server mailcow 127.0.0.1:8080 check server mailcow 127.0.0.1:8080 check
</code></pre></div> ```</p>
<h3 id="traefik-v2-von-der-community-unterstutzt">Traefik v2 (von der Community unterstützt)<a class="headerlink" href="#traefik-v2-von-der-community-unterstutzt" title="Permanent link">&para;</a></h3> <h3 id="traefik-v2-von-der-community-unterstutzt">Traefik v2 (von der Community unterstützt)<a class="headerlink" href="#traefik-v2-von-der-community-unterstutzt" title="Permanent link">&para;</a></h3>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
@ -2627,50 +2642,49 @@ backend mailcow
<p>Zuallererst werden wir den acme-mailcow-Container deaktivieren, da wir die von traefik bereitgestellten Zertifikate verwenden werden. <p>Zuallererst werden wir den acme-mailcow-Container deaktivieren, da wir die von traefik bereitgestellten Zertifikate verwenden werden.
Dazu müssen wir <code>SKIP_LETS_ENCRYPT=y</code> in unserer <code>mailcow.conf</code> setzen und <code>docker-compose up -d</code> ausführen, um die Änderungen zu übernehmen.</p> Dazu müssen wir <code>SKIP_LETS_ENCRYPT=y</code> in unserer <code>mailcow.conf</code> setzen und <code>docker-compose up -d</code> ausführen, um die Änderungen zu übernehmen.</p>
<p>Dann erstellen wir eine <code>docker-compose.override.yml</code> Datei, um die Hauptdatei <code>docker-compose.yml</code> zu überschreiben, die sich im Mailcow-Stammverzeichnis befindet. </p> <p>Dann erstellen wir eine <code>docker-compose.override.yml</code> Datei, um die Hauptdatei <code>docker-compose.yml</code> zu überschreiben, die sich im Mailcow-Stammverzeichnis befindet. </p>
<div class="highlight"><pre><span></span><code><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;2.1&#39;</span><span class="w"></span> <p>```yaml
version: '2.1'</p>
<span class="nt">services</span><span class="p">:</span><span class="w"></span> <p>services:
<span class="w"> </span><span class="nt">nginx-mailcow</span><span class="p">:</span><span class="w"></span> nginx-mailcow:
<span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"></span> networks:
<span class="w"> </span><span class="c1"># Traefiks Netzwerk hinzufügen</span><span class="w"></span> # Traefiks Netzwerk hinzufügen
<span class="w"> </span><span class="nt">web</span><span class="p">:</span><span class="w"></span> web:
<span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"></span> labels:
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.enable=true</span><span class="w"></span> - traefik.enable=true
<span class="w"> </span><span class="c1"># Erstellt einen Router namens &quot;moo&quot; für den Container und richtet eine Regel ein, um den Container mit einer bestimmten Regel zu verknüpfen,</span><span class="w"></span> # Erstellt einen Router namens "moo" für den Container und richtet eine Regel ein, um den Container mit einer bestimmten Regel zu verknüpfen,
<span class="w"> </span><span class="c1"># in diesem Fall eine Host-Regel mit unserer MAILCOW_HOSTNAME-Variable.</span><span class="w"></span> # in diesem Fall eine Host-Regel mit unserer MAILCOW_HOSTNAME-Variable.
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.rule=Host(`${MAILCOW_HOSTNAME}`)</span><span class="w"></span> - traefik.http.routers.moo.rule=Host(<code>${MAILCOW_HOSTNAME}</code>)
<span class="w"> </span><span class="c1"># Aktiviert tls über den zuvor erstellten Router.</span><span class="w"></span> # Aktiviert tls über den zuvor erstellten Router.
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.tls=true</span><span class="w"></span> - traefik.http.routers.moo.tls=true
<span class="w"> </span><span class="c1"># Gibt an, welche Art von Cert-Resolver wir verwenden werden, in diesem Fall le (Lets Encrypt).</span><span class="w"></span> # Gibt an, welche Art von Cert-Resolver wir verwenden werden, in diesem Fall le (Lets Encrypt).
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.tls.certresolver=le</span><span class="w"></span> - traefik.http.routers.moo.tls.certresolver=le
<span class="w"> </span><span class="c1"># Erzeugt einen Dienst namens &quot;moo&quot; für den Container und gibt an, welchen internen Port des Containers</span><span class="w"></span> # Erzeugt einen Dienst namens "moo" für den Container und gibt an, welchen internen Port des Containers
<span class="w"> </span><span class="c1"># Traefik die eingehenden Daten weiterleiten soll.</span><span class="w"></span> # Traefik die eingehenden Daten weiterleiten soll.
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.http.services.moo.loadbalancer.server.port=${HTTP_PORT}</span><span class="w"></span> - traefik.http.services.moo.loadbalancer.server.port=${HTTP_PORT}
<span class="w"> </span><span class="c1"># Gibt an, welchen Eingangspunkt (externer Port) traefik für diesen Container abhören soll.</span><span class="w"></span> # Gibt an, welchen Eingangspunkt (externer Port) traefik für diesen Container abhören soll.
<span class="w"> </span><span class="c1"># Websecure ist Port 443, siehe die Datei traefik.toml wie oben.</span><span class="w"></span> # Websecure ist Port 443, siehe die Datei traefik.toml wie oben.
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.entrypoints=websecure</span><span class="w"></span> - traefik.http.routers.moo.entrypoints=websecure
<span class="w"> </span><span class="c1"># Stellen Sie sicher, dass traefik das Web-Netzwerk verwendet, nicht das mailcowdockerized_mailcow-network</span><span class="w"></span> # Stellen Sie sicher, dass traefik das Web-Netzwerk verwendet, nicht das mailcowdockerized_mailcow-network
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.docker.network=web</span><span class="w"></span> - traefik.docker.network=web</p>
<pre><code>certdumper:
<span class="w"> </span><span class="nt">certdumper</span><span class="p">:</span><span class="w"></span> image: humenius/traefik-certs-dumper
<span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">humenius/traefik-certs-dumper</span><span class="w"></span> container_name: traefik_certdumper
<span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik_certdumper</span><span class="w"></span> network_mode: none
<span class="w"> </span><span class="nt">network_mode</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">none</span><span class="w"></span> volumes:
<span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"></span> # mounten Sie den Ordner, der Traefiks `acme.json' Datei enthält
<span class="w"> </span><span class="c1"># mounten Sie den Ordner, der Traefiks `acme.json&#39; Datei enthält</span><span class="w"></span> # in diesem Fall wird Traefik von seinem eigenen docker-compose in ../traefik gestartet
<span class="w"> </span><span class="c1"># in diesem Fall wird Traefik von seinem eigenen docker-compose in ../traefik gestartet</span><span class="w"></span> - ../traefik/data:/traefik:ro
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">../traefik/data:/traefik:ro</span><span class="w"></span> # SSL-Ordner von mailcow einhängen
<span class="w"> </span><span class="c1"># SSL-Ordner von mailcow einhängen</span><span class="w"></span> - ./data/assets/ssl/:/output:rw
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./data/assets/ssl/:/output:rw</span><span class="w"></span> restart: always
<span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">always</span><span class="w"></span> environment:
<span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"></span> # Ändern Sie dies nur, wenn Sie eine andere Domain für Mailcows Web-Frontend verwenden als in der Standard-Konfiguration
<span class="w"> </span><span class="c1"># Ändern Sie dies nur, wenn Sie eine andere Domain für Mailcows Web-Frontend verwenden als in der Standard-Konfiguration</span><span class="w"></span> - DOMAIN=${MAILCOW_HOSTNAME}
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">DOMAIN=${MAILCOW_HOSTNAME}</span><span class="w"></span> </code></pre>
<p>networks:
<span class="nt">networks</span><span class="p">:</span><span class="w"></span> web:
<span class="w"> </span><span class="nt">web</span><span class="p">:</span><span class="w"></span> external: true
<span class="w"> </span><span class="nt">external</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span><span class="w"></span> ```</p>
</code></pre></div>
<p>Starten Sie die neuen Container mit <code>docker-compose up -d</code>.</p> <p>Starten Sie die neuen Container mit <code>docker-compose up -d</code>.</p>
<p>Da Traefik 2 ein acme v2 Format verwendet, um ALLE Lizenzen von allen Domains zu speichern, müssen wir einen Weg finden, die Zertifikate auszulagern. Zum Glück haben wir [diesen kleinen Container] (<a href="https://hub.docker.com/r/humenius/traefik-certs-dumper">https://hub.docker.com/r/humenius/traefik-certs-dumper</a>), der die Datei <code>acme.json</code> über ein Volume und eine Variable <code>DOMAIN=example. org</code>, und damit wird der Container die <code>cert.pem</code> und <code>key.pem</code> Dateien ausgeben, dafür lassen wir einfach den <code>traefik-certs-dumper</code> Container laufen, binden das <code>/traefik</code> Volume an den Ordner, in dem unsere <code>acme.json</code> gespeichert ist, binden das <code>/output</code> Volume an unseren mailcow <code>data/assets/ssl/</code> Ordner, und setzen die <code>DOMAIN=example.org</code> Variable auf die Domain, von der wir die Zertifikate ausgeben wollen. </p> <p>Da Traefik 2 ein acme v2 Format verwendet, um ALLE Lizenzen von allen Domains zu speichern, müssen wir einen Weg finden, die Zertifikate auszulagern. Zum Glück haben wir [diesen kleinen Container] (<a href="https://hub.docker.com/r/humenius/traefik-certs-dumper">https://hub.docker.com/r/humenius/traefik-certs-dumper</a>), der die Datei <code>acme.json</code> über ein Volume und eine Variable <code>DOMAIN=example. org</code>, und damit wird der Container die <code>cert.pem</code> und <code>key.pem</code> Dateien ausgeben, dafür lassen wir einfach den <code>traefik-certs-dumper</code> Container laufen, binden das <code>/traefik</code> Volume an den Ordner, in dem unsere <code>acme.json</code> gespeichert ist, binden das <code>/output</code> Volume an unseren mailcow <code>data/assets/ssl/</code> Ordner, und setzen die <code>DOMAIN=example.org</code> Variable auf die Domain, von der wir die Zertifikate ausgeben wollen. </p>
<p>Dieser Container überwacht die Datei <code>acme.json</code> auf Änderungen und generiert die Dateien <code>cert.pem</code> und <code>key.pem</code> direkt in <code>data/assets/ssl/</code>, wobei der Pfad mit dem <code>/output</code>-Pfad des Containers verbunden ist.</p> <p>Dieser Container überwacht die Datei <code>acme.json</code> auf Änderungen und generiert die Dateien <code>cert.pem</code> und <code>key.pem</code> direkt in <code>data/assets/ssl/</code>, wobei der Pfad mit dem <code>/output</code>-Pfad des Containers verbunden ist.</p>
@ -2680,18 +2694,18 @@ Dazu müssen wir <code>SKIP_LETS_ENCRYPT=y</code> in unserer <code>mailcow.conf<
<h3 id="optional-post-hook-skript-fur-nicht-mailcow-acme-clients">Optional: Post-Hook-Skript für nicht-mailcow ACME-Clients<a class="headerlink" href="#optional-post-hook-skript-fur-nicht-mailcow-acme-clients" title="Permanent link">&para;</a></h3> <h3 id="optional-post-hook-skript-fur-nicht-mailcow-acme-clients">Optional: Post-Hook-Skript für nicht-mailcow ACME-Clients<a class="headerlink" href="#optional-post-hook-skript-fur-nicht-mailcow-acme-clients" title="Permanent link">&para;</a></h3>
<p>Die Verwendung eines lokalen Certbots (oder eines anderen ACME-Clients) erfordert den Neustart einiger Container, was Sie mit einem Post-Hook-Skript erledigen können. <p>Die Verwendung eines lokalen Certbots (oder eines anderen ACME-Clients) erfordert den Neustart einiger Container, was Sie mit einem Post-Hook-Skript erledigen können.
Stellen Sie sicher, dass Sie die Pfade entsprechend ändern: Stellen Sie sicher, dass Sie die Pfade entsprechend ändern:
<div class="highlight"><pre><span></span><code>#!/bin/bash ```</p>
cp /etc/letsencrypt/live/my.domain.tld/fullchain.pem /opt/mailcow-dockerized/data/assets/ssl/cert.pem <h1 id="binbash">!/bin/bash<a class="headerlink" href="#binbash" title="Permanent link">&para;</a></h1>
<p>cp /etc/letsencrypt/live/my.domain.tld/fullchain.pem /opt/mailcow-dockerized/data/assets/ssl/cert.pem
cp /etc/letsencrypt/live/my.domain.tld/privkey.pem /opt/mailcow-dockerized/data/assets/ssl/key.pem cp /etc/letsencrypt/live/my.domain.tld/privkey.pem /opt/mailcow-dockerized/data/assets/ssl/key.pem
postfix_c=$(docker ps -qaf name=postfix-mailcow) postfix_c=$(docker ps -qaf name=postfix-mailcow)
dovecot_c=$(docker ps -qaf name=dovecot-mailcow) dovecot_c=$(docker ps -qaf name=dovecot-mailcow)
nginx_c=$(docker ps -qaf name=nginx-mailcow) nginx_c=$(docker ps -qaf name=nginx-mailcow)
docker restart ${postfix_c} ${dovecot_c} ${nginx_c} docker restart ${postfix_c} ${dovecot_c} ${nginx_c}
</code></pre></div></p> ```</p>
<h3 id="hinzufugen-weiterer-servernamen-fur-mailcow-ui">Hinzufügen weiterer Servernamen für mailcow UI<a class="headerlink" href="#hinzufugen-weiterer-servernamen-fur-mailcow-ui" title="Permanent link">&para;</a></h3> <h3 id="hinzufugen-weiterer-servernamen-fur-mailcow-ui">Hinzufügen weiterer Servernamen für mailcow UI<a class="headerlink" href="#hinzufugen-weiterer-servernamen-fur-mailcow-ui" title="Permanent link">&para;</a></h3>
<p>Wenn Sie vorhaben, einen Servernamen zu verwenden, der nicht <code>MAILCOW_HOSTNAME</code> in Ihrem Reverse-Proxy ist, stellen Sie sicher, dass Sie diesen Namen zuerst in mailcow.conf über <code>ADDITIONAL_SERVER_NAMES</code> einpflegen. Die Namen müssen durch Kommas getrennt werden und <strong>dürfen</strong> keine Leerzeichen enthalten. Wenn Sie diesen Schritt überspringen, kann es sein, dass mailcow auf Ihren Reverse-Proxy mit einer falschen Seite antwortet.</p> <p>Wenn Sie vorhaben, einen Servernamen zu verwenden, der nicht <code>MAILCOW_HOSTNAME</code> in Ihrem Reverse-Proxy ist, stellen Sie sicher, dass Sie diesen Namen zuerst in mailcow.conf über <code>ADDITIONAL_SERVER_NAMES</code> einpflegen. Die Namen müssen durch Kommas getrennt werden und <strong>dürfen</strong> keine Leerzeichen enthalten. Wenn Sie diesen Schritt überspringen, kann es sein, dass mailcow auf Ihren Reverse-Proxy mit einer falschen Seite antwortet.</p>
<div class="highlight"><pre><span></span><code>ADDITIONAL_SERVER_NAMES=webmail.domain.tld,other.example.tld <p><code>ADDITIONAL_SERVER_NAMES=webmail.domain.tld,other.example.tld</code></p>
</code></pre></div>
<p>Führen Sie <code>docker-compose up -d</code> zum Anwenden aus.</p> <p>Führen Sie <code>docker-compose up -d</code> zum Anwenden aus.</p>
<hr> <hr>

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#benutze-diese-ipv4-fur-ausgehende-verbindungen-snat" class="md-skip">
Zum Inhalt
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -564,6 +569,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
SNAT SNAT
@ -2326,6 +2333,8 @@
</nav> </nav>
</div> </div>
@ -2343,17 +2352,15 @@
<h1>SNAT</h1>
<p>SNAT wird verwendet, um die Quelladresse der von mailcow gesendeten Pakete zu ändern. <p>SNAT wird verwendet, um die Quelladresse der von mailcow gesendeten Pakete zu ändern.
Es kann verwendet werden, um die ausgehende IP-Adresse auf Systemen mit mehreren IP-Adressen zu ändern.</p> Es kann verwendet werden, um die ausgehende IP-Adresse auf Systemen mit mehreren IP-Adressen zu ändern.</p>
<p>Öffnen Sie <code>mailcow.conf</code>, setzen Sie einen oder beide der folgenden Parameter:</p> <p>Öffnen Sie <code>mailcow.conf</code>, setzen Sie einen oder beide der folgenden Parameter:</p>
<div class="highlight"><pre><span></span><code># Benutze diese IPv4 für ausgehende Verbindungen (SNAT) <p>```</p>
SNAT_TO_SOURCE=1.2.3.4 <h1 id="benutze-diese-ipv4-fur-ausgehende-verbindungen-snat">Benutze diese IPv4 für ausgehende Verbindungen (SNAT)<a class="headerlink" href="#benutze-diese-ipv4-fur-ausgehende-verbindungen-snat" title="Permanent link">&para;</a></h1>
<p>SNAT_TO_SOURCE=1.2.3.4</p>
# Benutze dieses IPv6 für ausgehende Verbindungen (SNAT) <h1 id="benutze-dieses-ipv6-fur-ausgehende-verbindungen-snat">Benutze dieses IPv6 für ausgehende Verbindungen (SNAT)<a class="headerlink" href="#benutze-dieses-ipv6-fur-ausgehende-verbindungen-snat" title="Permanent link">&para;</a></h1>
SNAT6_TO_SOURCE=dead:beef <p>SNAT6_TO_SOURCE=dead:beef
</code></pre></div> ```</p>
<p>Führen Sie <code>docker-compose up -d</code> aus.</p> <p>Führen Sie <code>docker-compose up -d</code> aus.</p>
<p>Die Werte werden von netfilter-mailcow gelesen. netfilter-mailcow stellt sicher, dass die Post-Routing-Regeln auf Position 1 in der Netfilter-Tabelle stehen. Es löscht sie automatisch und legt sie neu an, wenn sie an einer anderen Position als 1 gefunden werden.</p> <p>Die Werte werden von netfilter-mailcow gelesen. netfilter-mailcow stellt sicher, dass die Post-Routing-Regeln auf Position 1 in der Netfilter-Tabelle stehen. Es löscht sie automatisch und legt sie neu an, wenn sie an einer anderen Position als 1 gefunden werden.</p>
<p>Überprüfen Sie die Ausgabe von <code>docker-compose logs --tail=200 netfilter-mailcow</code>, um sicherzustellen, dass die SNAT-Einstellungen angewendet wurden.</p> <p>Überprüfen Sie die Ausgabe von <code>docker-compose logs --tail=200 netfilter-mailcow</code>, um sicherzustellen, dass die SNAT-Einstellungen angewendet wurden.</p>

Datei anzeigen

@ -502,6 +502,19 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#prufen-sie-nun-die-logs-auf-eine-erneuerung" class="md-nav__link">
Prüfen Sie nun die Logs auf eine Erneuerung
</a>
<nav class="md-nav" aria-label="Prüfen Sie nun die Logs auf eine Erneuerung">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#validierungsfehler-und-wie-man-die-validierung-uberspringt" class="md-nav__link"> <a href="#validierungsfehler-und-wie-man-die-validierung-uberspringt" class="md-nav__link">
Validierungsfehler und wie man die Validierung überspringt Validierungsfehler und wie man die Validierung überspringt
@ -574,6 +587,27 @@
</ul> </ul>
</nav> </nav>
</li>
<li class="md-nav__item">
<a href="#verbindung-uber-smtp-587" class="md-nav__link">
Verbindung über SMTP (587)
</a>
</li>
<li class="md-nav__item">
<a href="#verbindung-uber-imap-143" class="md-nav__link">
Verbindung über IMAP (143)
</a>
</li>
<li class="md-nav__item">
<a href="#verbindung-uber-https-443" class="md-nav__link">
Verbindung über HTTPS (443)
</a>
</li> </li>
</ul> </ul>
@ -2478,6 +2512,19 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#prufen-sie-nun-die-logs-auf-eine-erneuerung" class="md-nav__link">
Prüfen Sie nun die Logs auf eine Erneuerung
</a>
<nav class="md-nav" aria-label="Prüfen Sie nun die Logs auf eine Erneuerung">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#validierungsfehler-und-wie-man-die-validierung-uberspringt" class="md-nav__link"> <a href="#validierungsfehler-und-wie-man-die-validierung-uberspringt" class="md-nav__link">
Validierungsfehler und wie man die Validierung überspringt Validierungsfehler und wie man die Validierung überspringt
@ -2550,6 +2597,27 @@
</ul> </ul>
</nav> </nav>
</li>
<li class="md-nav__item">
<a href="#verbindung-uber-smtp-587" class="md-nav__link">
Verbindung über SMTP (587)
</a>
</li>
<li class="md-nav__item">
<a href="#verbindung-uber-imap-143" class="md-nav__link">
Verbindung über IMAP (143)
</a>
</li>
<li class="md-nav__item">
<a href="#verbindung-uber-https-443" class="md-nav__link">
Verbindung über HTTPS (443)
</a>
</li> </li>
</ul> </ul>
@ -2570,8 +2638,6 @@
<h1>Erweitertes SSL</h1>
<h2 id="lets-encrypt-wird-mitgeliefert">Let's Encrypt (wird mitgeliefert)<a class="headerlink" href="#lets-encrypt-wird-mitgeliefert" title="Permanent link">&para;</a></h2> <h2 id="lets-encrypt-wird-mitgeliefert">Let's Encrypt (wird mitgeliefert)<a class="headerlink" href="#lets-encrypt-wird-mitgeliefert" title="Permanent link">&para;</a></h2>
<p>Der "acme-mailcow" Container wird versuchen, ein LE-Zertifikat für <code>${MAILCOW_HOSTNAME}</code>, <code>autodiscover.ADDED_MAIL_DOMAIN</code> und <code>autoconfig.ADDED_MAIL_DOMAIN</code> zu erhalten.</p> <p>Der "acme-mailcow" Container wird versuchen, ein LE-Zertifikat für <code>${MAILCOW_HOSTNAME}</code>, <code>autodiscover.ADDED_MAIL_DOMAIN</code> und <code>autoconfig.ADDED_MAIL_DOMAIN</code> zu erhalten.</p>
<div class="admonition warning"> <div class="admonition warning">
@ -2586,8 +2652,7 @@
<h3 id="zusatzliche-domain-namen">Zusätzliche Domain-Namen<a class="headerlink" href="#zusatzliche-domain-namen" title="Permanent link">&para;</a></h3> <h3 id="zusatzliche-domain-namen">Zusätzliche Domain-Namen<a class="headerlink" href="#zusatzliche-domain-namen" title="Permanent link">&para;</a></h3>
<p>Bearbeiten Sie "mailcow.conf" und fügen Sie einen Parameter <code>ADDITIONAL_SAN</code> wie folgt hinzu:</p> <p>Bearbeiten Sie "mailcow.conf" und fügen Sie einen Parameter <code>ADDITIONAL_SAN</code> wie folgt hinzu:</p>
<p>Verwenden Sie keine Anführungszeichen (<code>"</code>) und keine Leerzeichen zwischen den Namen!</p> <p>Verwenden Sie keine Anführungszeichen (<code>"</code>) und keine Leerzeichen zwischen den Namen!</p>
<div class="highlight"><pre><span></span><code>ADDITIONAL_SAN=smtp.*,cert1.example.com,cert2.example.org,whatever.* <p><code>ADDITIONAL_SAN=smtp.*,cert1.example.com,cert2.example.org,whatever.*</code></p>
</code></pre></div>
<p>Jeder Name wird anhand seiner IPv6-Adresse oder - wenn IPv6 in Ihrer Domäne nicht konfiguriert ist - anhand seiner IPv4-Adresse überprüft.</p> <p>Jeder Name wird anhand seiner IPv6-Adresse oder - wenn IPv6 in Ihrer Domäne nicht konfiguriert ist - anhand seiner IPv4-Adresse überprüft.</p>
<p>Ein Wildcard-Name wie <code>smtp.*</code> wird versuchen, ein smtp.DOMAIN_NAME SAN für jede zu mailcow hinzugefügte Domain zu erhalten.</p> <p>Ein Wildcard-Name wie <code>smtp.*</code> wird versuchen, ein smtp.DOMAIN_NAME SAN für jede zu mailcow hinzugefügte Domain zu erhalten.</p>
<p>Führen Sie <code>docker-compose up -d</code> aus, um betroffene Container automatisch neu zu erstellen.</p> <p>Führen Sie <code>docker-compose up -d</code> aus, um betroffene Container automatisch neu zu erstellen.</p>
@ -2596,17 +2661,17 @@
<p>Die Verwendung anderer Namen als <code>MAILCOW_HOSTNAME</code> für den Zugriff auf das mailcow UI kann weitere Konfiguration erfordern.</p> <p>Die Verwendung anderer Namen als <code>MAILCOW_HOSTNAME</code> für den Zugriff auf das mailcow UI kann weitere Konfiguration erfordern.</p>
</div> </div>
<p>Wenn Sie planen, einen anderen Servernamen als <code>MAILCOW_HOSTNAME</code> für den Zugriff auf die mailcow UI zu verwenden (z.B. durch Hinzufügen von <code>mail.*</code> zu <code>ADDITIONAL_SAN</code>), stellen Sie sicher, dass Sie diesen Namen in mailcow.conf über <code>ADDITIONAL_SERVER_NAMES</code> eintragen. Die Namen müssen durch Kommas getrennt sein und <strong>dürfen</strong> keine Leerzeichen enthalten. Wenn Sie diesen Schritt auslassen, kann mailcow mit einer falschen Seite antworten.</p> <p>Wenn Sie planen, einen anderen Servernamen als <code>MAILCOW_HOSTNAME</code> für den Zugriff auf die mailcow UI zu verwenden (z.B. durch Hinzufügen von <code>mail.*</code> zu <code>ADDITIONAL_SAN</code>), stellen Sie sicher, dass Sie diesen Namen in mailcow.conf über <code>ADDITIONAL_SERVER_NAMES</code> eintragen. Die Namen müssen durch Kommas getrennt sein und <strong>dürfen</strong> keine Leerzeichen enthalten. Wenn Sie diesen Schritt auslassen, kann mailcow mit einer falschen Seite antworten.</p>
<div class="highlight"><pre><span></span><code>ADDITIONAL_SERVER_NAMES=webmail.domain.tld,other.example.tld <p><code>ADDITIONAL_SERVER_NAMES=webmail.domain.tld,other.example.tld</code></p>
</code></pre></div>
<p>Führen Sie <code>docker-compose up -d</code> aus, um es anzuwenden.</p> <p>Führen Sie <code>docker-compose up -d</code> aus, um es anzuwenden.</p>
<h3 id="erneuerung-erzwingen">Erneuerung erzwingen<a class="headerlink" href="#erneuerung-erzwingen" title="Permanent link">&para;</a></h3> <h3 id="erneuerung-erzwingen">Erneuerung erzwingen<a class="headerlink" href="#erneuerung-erzwingen" title="Permanent link">&para;</a></h3>
<p>Um eine Erneuerung zu erzwingen, müssen Sie eine Datei namens <code>force_renew</code> erstellen und den <code>acme-mailcow</code> Container neu starten:</p> <p>Um eine Erneuerung zu erzwingen, müssen Sie eine Datei namens <code>force_renew</code> erstellen und den <code>acme-mailcow</code> Container neu starten:</p>
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized <p>```
cd /opt/mailcow-dockerized
touch data/assets/ssl/force_renew touch data/assets/ssl/force_renew
docker-compose restart acme-mailcow docker-compose restart acme-mailcow</p>
# Prüfen Sie nun die Logs auf eine Erneuerung <h1 id="prufen-sie-nun-die-logs-auf-eine-erneuerung">Prüfen Sie nun die Logs auf eine Erneuerung<a class="headerlink" href="#prufen-sie-nun-die-logs-auf-eine-erneuerung" title="Permanent link">&para;</a></h1>
docker-compose logs --tail=200 -f acme-mailcow <p>docker-compose logs --tail=200 -f acme-mailcow
</code></pre></div> ```</p>
<p>Die Datei wird automatisch gelöscht.</p> <p>Die Datei wird automatisch gelöscht.</p>
<h3 id="validierungsfehler-und-wie-man-die-validierung-uberspringt">Validierungsfehler und wie man die Validierung überspringt<a class="headerlink" href="#validierungsfehler-und-wie-man-die-validierung-uberspringt" title="Permanent link">&para;</a></h3> <h3 id="validierungsfehler-und-wie-man-die-validierung-uberspringt">Validierungsfehler und wie man die Validierung überspringt<a class="headerlink" href="#validierungsfehler-und-wie-man-die-validierung-uberspringt" title="Permanent link">&para;</a></h3>
<p>Sie können die <strong>IP-Überprüfung</strong> überspringen, indem Sie <code>SKIP_IP_CHECK=y</code> in mailcow.conf setzen (keine Anführungszeichen). Seien Sie gewarnt, dass eine Fehlkonfiguration dazu führt, dass Sie von Let's Encrypt eingeschränkt werden! Dies ist vor allem für Multi-IP-Setups nützlich, bei denen der IP-Check die falsche Quell-IP-Adresse zurückgeben würde. Aufgrund der Verwendung von dynamischen IPs für acme-mailcow ist Source-NAT bei Neustarts nicht konsistent.</p> <p>Sie können die <strong>IP-Überprüfung</strong> überspringen, indem Sie <code>SKIP_IP_CHECK=y</code> in mailcow.conf setzen (keine Anführungszeichen). Seien Sie gewarnt, dass eine Fehlkonfiguration dazu führt, dass Sie von Let's Encrypt eingeschränkt werden! Dies ist vor allem für Multi-IP-Setups nützlich, bei denen der IP-Check die falsche Quell-IP-Adresse zurückgeben würde. Aufgrund der Verwendung von dynamischen IPs für acme-mailcow ist Source-NAT bei Neustarts nicht konsistent.</p>
@ -2653,35 +2718,33 @@ Sie sollten sicherstellen, dass diese Clients den <code>MAILCOW_HOSTNAME</code>
<p>Um Ihre eigenen Zertifikate zu verwenden, speichern Sie einfach das kombinierte Zertifikat (mit dem Zertifikat und der zwischengeschalteten CA/CA, falls vorhanden) unter <code>data/assets/ssl/cert.pem</code> und den entsprechenden Schlüssel unter <code>data/assets/ssl/key.pem</code>.</p> <p>Um Ihre eigenen Zertifikate zu verwenden, speichern Sie einfach das kombinierte Zertifikat (mit dem Zertifikat und der zwischengeschalteten CA/CA, falls vorhanden) unter <code>data/assets/ssl/cert.pem</code> und den entsprechenden Schlüssel unter <code>data/assets/ssl/key.pem</code>.</p>
<p><strong>WICHTIG:</strong> Verwenden Sie keine symbolischen Links! Stellen Sie sicher, dass Sie die Zertifikate kopieren und sie nicht mit <code>data/assets/ssl</code> verknüpfen.</p> <p><strong>WICHTIG:</strong> Verwenden Sie keine symbolischen Links! Stellen Sie sicher, dass Sie die Zertifikate kopieren und sie nicht mit <code>data/assets/ssl</code> verknüpfen.</p>
<p>Starten Sie die betroffenen Dienste anschließend neu:</p> <p>Starten Sie die betroffenen Dienste anschließend neu:</p>
<div class="highlight"><pre><span></span><code>docker restart $(docker ps -qaf name=postfix-mailcow) <p><code>docker restart $(docker ps -qaf name=postfix-mailcow)
docker neu starten $(docker ps -qaf name=nginx-mailcow) docker neu starten $(docker ps -qaf name=nginx-mailcow)
docker restart $(docker ps -qaf name=dovecot-mailcow) docker restart $(docker ps -qaf name=dovecot-mailcow)</code></p>
</code></pre></div>
<p>Siehe <a href="../firststeps-rp#optional-post-hook-skript-fur-nicht-mailcow-acme-clients">Post-Hook-Skript für Nicht-Mailcow-ACME-Clients</a> für ein vollständiges Beispielskript.</p> <p>Siehe <a href="../firststeps-rp#optional-post-hook-skript-fur-nicht-mailcow-acme-clients">Post-Hook-Skript für Nicht-Mailcow-ACME-Clients</a> für ein vollständiges Beispielskript.</p>
<h3 id="test-gegen-das-acme-verzeichnis">Test gegen das ACME-Verzeichnis<a class="headerlink" href="#test-gegen-das-acme-verzeichnis" title="Permanent link">&para;</a></h3> <h3 id="test-gegen-das-acme-verzeichnis">Test gegen das ACME-Verzeichnis<a class="headerlink" href="#test-gegen-das-acme-verzeichnis" title="Permanent link">&para;</a></h3>
<p>Bearbeiten Sie <code>mailcow.conf</code> und fügen Sie <code>LE_STAGING=y</code> hinzu.</p> <p>Bearbeiten Sie <code>mailcow.conf</code> und fügen Sie <code>LE_STAGING=y</code> hinzu.</p>
<p>Führen Sie <code>docker-compose up -d</code> aus, um Ihre Änderungen zu aktivieren.</p> <p>Führen Sie <code>docker-compose up -d</code> aus, um Ihre Änderungen zu aktivieren.</p>
<h3 id="benutzerdefinierte-verzeichnis-url">Benutzerdefinierte Verzeichnis-URL<a class="headerlink" href="#benutzerdefinierte-verzeichnis-url" title="Permanent link">&para;</a></h3> <h3 id="benutzerdefinierte-verzeichnis-url">Benutzerdefinierte Verzeichnis-URL<a class="headerlink" href="#benutzerdefinierte-verzeichnis-url" title="Permanent link">&para;</a></h3>
<p>Editieren Sie <code>mailcow.conf</code> und fügen Sie die entsprechende Verzeichnis-URL in die neue Variable <code>DIRECTORY_URL</code> ein:</p> <p>Editieren Sie <code>mailcow.conf</code> und fügen Sie die entsprechende Verzeichnis-URL in die neue Variable <code>DIRECTORY_URL</code> ein:</p>
<div class="highlight"><pre><span></span><code>DIRECTORY_URL=https://acme-custom-v9000.api.letsencrypt.org/directory <p><code>DIRECTORY_URL=https://acme-custom-v9000.api.letsencrypt.org/directory</code></p>
</code></pre></div>
<p>Sie können <code>LE_STAGING</code> nicht mit <code>DIRECTORY_URL</code> verwenden. Wenn beide gesetzt sind, wird nur <code>LE_STAGING</code> verwendet.</p> <p>Sie können <code>LE_STAGING</code> nicht mit <code>DIRECTORY_URL</code> verwenden. Wenn beide gesetzt sind, wird nur <code>LE_STAGING</code> verwendet.</p>
<p>Führen Sie <code>docker-compose up -d</code> aus, um Ihre Änderungen zu aktivieren.</p> <p>Führen Sie <code>docker-compose up -d</code> aus, um Ihre Änderungen zu aktivieren.</p>
<h3 id="uberprufen-sie-ihre-konfiguration">Überprüfen Sie Ihre Konfiguration<a class="headerlink" href="#uberprufen-sie-ihre-konfiguration" title="Permanent link">&para;</a></h3> <h3 id="uberprufen-sie-ihre-konfiguration">Überprüfen Sie Ihre Konfiguration<a class="headerlink" href="#uberprufen-sie-ihre-konfiguration" title="Permanent link">&para;</a></h3>
<p>Führen Sie <code>docker-compose logs acme-mailcow</code> aus, um herauszufinden, warum eine Validierung fehlschlägt.</p> <p>Führen Sie <code>docker-compose logs acme-mailcow</code> aus, um herauszufinden, warum eine Validierung fehlschlägt.</p>
<p>Um zu überprüfen, ob nginx das richtige Zertifikat verwendet, benutzen Sie einfach einen Browser Ihrer Wahl und überprüfen Sie das angezeigte Zertifikat.</p> <p>Um zu überprüfen, ob nginx das richtige Zertifikat verwendet, benutzen Sie einfach einen Browser Ihrer Wahl und überprüfen Sie das angezeigte Zertifikat.</p>
<p>Um das von Postfix, Dovecot und Nginx verwendete Zertifikat zu überprüfen, verwenden wir <code>openssl</code>:</p> <p>Um das von Postfix, Dovecot und Nginx verwendete Zertifikat zu überprüfen, verwenden wir <code>openssl</code>:</p>
<div class="highlight"><pre><span></span><code># Verbindung über SMTP (587) <p>```</p>
echo &quot;Q&quot; | openssl s_client -starttls smtp -crlf -connect mx.mailcow.email:587 <h1 id="verbindung-uber-smtp-587">Verbindung über SMTP (587)<a class="headerlink" href="#verbindung-uber-smtp-587" title="Permanent link">&para;</a></h1>
# Verbindung über IMAP (143) <p>echo "Q" | openssl s_client -starttls smtp -crlf -connect mx.mailcow.email:587</p>
echo &quot;Q&quot; | openssl s_client -starttls imap -showcerts -connect mx.mailcow.email:143 <h1 id="verbindung-uber-imap-143">Verbindung über IMAP (143)<a class="headerlink" href="#verbindung-uber-imap-143" title="Permanent link">&para;</a></h1>
# Verbindung über HTTPS (443) <p>echo "Q" | openssl s_client -starttls imap -showcerts -connect mx.mailcow.email:143</p>
echo &quot;Q&quot; | openssl s_client -connect mx.mailcow.email:443 <h1 id="verbindung-uber-https-443">Verbindung über HTTPS (443)<a class="headerlink" href="#verbindung-uber-https-443" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>echo "Q" | openssl s_client -connect mx.mailcow.email:443
```</p>
<p>Um die von openssl zurückgegebenen Verfallsdaten gegen MAILCOW_HOSTNAME zu validieren, können Sie unser Hilfsskript verwenden:</p> <p>Um die von openssl zurückgegebenen Verfallsdaten gegen MAILCOW_HOSTNAME zu validieren, können Sie unser Hilfsskript verwenden:</p>
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized <p><code>cd /opt/mailcow-dockerized
bash helper-scripts/expiry-dates.sh bash helper-scripts/expiry-dates.sh</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -364,27 +364,75 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#name-typ-wert" class="md-nav__link">
Name Typ Wert
</a>
<nav class="md-nav" aria-label="Name Typ Wert">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dkim-spf-und-dmarc" class="md-nav__link"> <a href="#dkim-spf-und-dmarc" class="md-nav__link">
DKIM, SPF und DMARC DKIM, SPF und DMARC
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#name-typ-wert_1" class="md-nav__link">
Name Typ Wert
</a>
</li>
<li class="md-nav__item">
<a href="#name-typ-wert_2" class="md-nav__link">
Name Typ Wert
</a>
</li>
<li class="md-nav__item">
<a href="#name-typ-wert_3" class="md-nav__link">
Name Typ Wert
</a>
<nav class="md-nav" aria-label="Name Typ Wert">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#die-erweiterte-dns-konfiguration" class="md-nav__link"> <a href="#die-erweiterte-dns-konfiguration" class="md-nav__link">
Die erweiterte DNS-Konfiguration Die erweiterte DNS-Konfiguration
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#name-typ-prioritat-gewicht-port-wert" class="md-nav__link">
Name Typ Priorität Gewicht Port Wert
</a>
<nav class="md-nav" aria-label="Name Typ Priorität Gewicht Port Wert">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#testen" class="md-nav__link"> <a href="#testen" class="md-nav__link">
Testen Testen
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#verschiedenes" class="md-nav__link"> <a href="#verschiedenes" class="md-nav__link">
Verschiedenes Verschiedenes
</a> </a>
@ -406,6 +454,31 @@
</li> </li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
```
</a>
</li>
<li class="md-nav__item">
<a href="#zusammenfassung-der-ergebnisse" class="md-nav__link">
Zusammenfassung der Ergebnisse
</a>
<nav class="md-nav" aria-label="Zusammenfassung der Ergebnisse">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#fully-qualified-domain-name-fqdn" class="md-nav__link"> <a href="#fully-qualified-domain-name-fqdn" class="md-nav__link">
Fully Qualified Domain Name (FQDN) Fully Qualified Domain Name (FQDN)
@ -2458,27 +2531,75 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#name-typ-wert" class="md-nav__link">
Name Typ Wert
</a>
<nav class="md-nav" aria-label="Name Typ Wert">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dkim-spf-und-dmarc" class="md-nav__link"> <a href="#dkim-spf-und-dmarc" class="md-nav__link">
DKIM, SPF und DMARC DKIM, SPF und DMARC
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#name-typ-wert_1" class="md-nav__link">
Name Typ Wert
</a>
</li>
<li class="md-nav__item">
<a href="#name-typ-wert_2" class="md-nav__link">
Name Typ Wert
</a>
</li>
<li class="md-nav__item">
<a href="#name-typ-wert_3" class="md-nav__link">
Name Typ Wert
</a>
<nav class="md-nav" aria-label="Name Typ Wert">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#die-erweiterte-dns-konfiguration" class="md-nav__link"> <a href="#die-erweiterte-dns-konfiguration" class="md-nav__link">
Die erweiterte DNS-Konfiguration Die erweiterte DNS-Konfiguration
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#name-typ-prioritat-gewicht-port-wert" class="md-nav__link">
Name Typ Priorität Gewicht Port Wert
</a>
<nav class="md-nav" aria-label="Name Typ Priorität Gewicht Port Wert">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#testen" class="md-nav__link"> <a href="#testen" class="md-nav__link">
Testen Testen
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#verschiedenes" class="md-nav__link"> <a href="#verschiedenes" class="md-nav__link">
Verschiedenes Verschiedenes
</a> </a>
@ -2500,6 +2621,31 @@
</li> </li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
```
</a>
</li>
<li class="md-nav__item">
<a href="#zusammenfassung-der-ergebnisse" class="md-nav__link">
Zusammenfassung der Ergebnisse
</a>
<nav class="md-nav" aria-label="Zusammenfassung der Ergebnisse">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#fully-qualified-domain-name-fqdn" class="md-nav__link"> <a href="#fully-qualified-domain-name-fqdn" class="md-nav__link">
Fully Qualified Domain Name (FQDN) Fully Qualified Domain Name (FQDN)
@ -2530,8 +2676,6 @@
<h1>DNS Einstellungen</h1>
<p>Nachstehend finden Sie eine Liste von <strong>empfohlenen DNS-Einträgen</strong>. Einige sind für einen Mailserver obligatorisch (A, MX), andere werden empfohlen, um eine gute Reputation aufzubauen (TXT/SPF) oder für die automatische Konfiguration von Mailclients verwendet (SRV).</p> <p>Nachstehend finden Sie eine Liste von <strong>empfohlenen DNS-Einträgen</strong>. Einige sind für einen Mailserver obligatorisch (A, MX), andere werden empfohlen, um eine gute Reputation aufzubauen (TXT/SPF) oder für die automatische Konfiguration von Mailclients verwendet (SRV).</p>
<h2 id="referenzen">Referenzen<a class="headerlink" href="#referenzen" title="Permanent link">&para;</a></h2> <h2 id="referenzen">Referenzen<a class="headerlink" href="#referenzen" title="Permanent link">&para;</a></h2>
<ul> <ul>
@ -2548,33 +2692,38 @@
<p>Stellen Sie sicher, dass der PTR-Eintrag Ihrer IP-Adresse mit dem FQDN Ihres mailcow-Hosts übereinstimmt: <code>${MAILCOW_HOSTNAME}</code> <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>. Dieser Eintrag wird normalerweise bei dem Provider gesetzt, von dem Sie die IP-Adresse (Server) gemietet haben.</p> <p>Stellen Sie sicher, dass der PTR-Eintrag Ihrer IP-Adresse mit dem FQDN Ihres mailcow-Hosts übereinstimmt: <code>${MAILCOW_HOSTNAME}</code> <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>. Dieser Eintrag wird normalerweise bei dem Provider gesetzt, von dem Sie die IP-Adresse (Server) gemietet haben.</p>
<h2 id="die-minimale-dns-konfiguration">Die minimale DNS-Konfiguration<a class="headerlink" href="#die-minimale-dns-konfiguration" title="Permanent link">&para;</a></h2> <h2 id="die-minimale-dns-konfiguration">Die minimale DNS-Konfiguration<a class="headerlink" href="#die-minimale-dns-konfiguration" title="Permanent link">&para;</a></h2>
<p>Dieses Beispiel zeigt Ihnen eine Reihe von Einträgen für eine von mailcow verwaltete Domain. Jede Domain, die zu mailcow hinzugefügt wird, benötigt mindestens diesen Satz an Einträgen, um korrekt zu funktionieren.</p> <p>Dieses Beispiel zeigt Ihnen eine Reihe von Einträgen für eine von mailcow verwaltete Domain. Jede Domain, die zu mailcow hinzugefügt wird, benötigt mindestens diesen Satz an Einträgen, um korrekt zu funktionieren.</p>
<div class="highlight"><pre><span></span><code># Name Typ Wert <p>```</p>
mail IN A 1.2.3.4 <h1 id="name-typ-wert">Name Typ Wert<a class="headerlink" href="#name-typ-wert" title="Permanent link">&para;</a></h1>
<p>mail IN A 1.2.3.4
autodiscover IN CNAME mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) autodiscover IN CNAME mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
autoconfig IN CNAME mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) autoconfig IN CNAME mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
@ IN MX 10 mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) @ IN MX 10 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
</code></pre></div> ```</p>
<h2 id="dkim-spf-und-dmarc">DKIM, SPF und DMARC<a class="headerlink" href="#dkim-spf-und-dmarc" title="Permanent link">&para;</a></h2> <h2 id="dkim-spf-und-dmarc">DKIM, SPF und DMARC<a class="headerlink" href="#dkim-spf-und-dmarc" title="Permanent link">&para;</a></h2>
<p>Im folgenden Beispiel für eine DNS-Zonendatei wird ein einfacher <strong>SPF</strong> TXT-Eintrag verwendet, um nur DIESEM Server (dem MX) zu erlauben, E-Mails für Ihre Domäne zu senden. Jeder andere Server ist nicht zugelassen, kann es aber tun ("<code>~all</code>"). Weitere Informationen finden Sie im <a href="http://www.open-spf.org/">SPF-Projekt</a>.</p> <p>Im folgenden Beispiel für eine DNS-Zonendatei wird ein einfacher <strong>SPF</strong> TXT-Eintrag verwendet, um nur DIESEM Server (dem MX) zu erlauben, E-Mails für Ihre Domäne zu senden. Jeder andere Server ist nicht zugelassen, kann es aber tun ("<code>~all</code>"). Weitere Informationen finden Sie im <a href="http://www.open-spf.org/">SPF-Projekt</a>.</p>
<div class="highlight"><pre><span></span><code># Name Typ Wert <p>```</p>
@ IN TXT &quot;v=spf1 mx a -all&quot; <h1 id="name-typ-wert_1">Name Typ Wert<a class="headerlink" href="#name-typ-wert_1" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>@ IN TXT "v=spf1 mx a -all"
```</p>
<p>Es wird dringend empfohlen, einen <strong>DKIM</strong> TXT-Eintrag in Ihrer mailcow UI zu erstellen und den entsprechenden TXT-Eintrag in Ihren DNS-Einträgen zu setzen. Bitte lesen Sie <a href="http://www.opendkim.org">OpenDKIM</a> für weitere Informationen.</p> <p>Es wird dringend empfohlen, einen <strong>DKIM</strong> TXT-Eintrag in Ihrer mailcow UI zu erstellen und den entsprechenden TXT-Eintrag in Ihren DNS-Einträgen zu setzen. Bitte lesen Sie <a href="http://www.opendkim.org">OpenDKIM</a> für weitere Informationen.</p>
<div class="highlight"><pre><span></span><code># Name Typ Wert <p>```</p>
dkim._domainkey IN TXT &quot;v=DKIM1; k=rsa; t=s; s=email; p=...&quot; <h1 id="name-typ-wert_2">Name Typ Wert<a class="headerlink" href="#name-typ-wert_2" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>dkim._domainkey IN TXT "v=DKIM1; k=rsa; t=s; s=email; p=..."
```</p>
<p>Der letzte Schritt, um sich selbst und andere zu schützen, ist die Implementierung eines <strong>DMARC</strong> TXT-Datensatzes, zum Beispiel mit Hilfe des <a href="http://www.kitterman.com/dmarc/assistant.html">DMARC-Assistenten</a> (<a href="https://dmarcian.com/dmarc-inspector/google.com">check</a>).</p> <p>Der letzte Schritt, um sich selbst und andere zu schützen, ist die Implementierung eines <strong>DMARC</strong> TXT-Datensatzes, zum Beispiel mit Hilfe des <a href="http://www.kitterman.com/dmarc/assistant.html">DMARC-Assistenten</a> (<a href="https://dmarcian.com/dmarc-inspector/google.com">check</a>).</p>
<div class="highlight"><pre><span></span><code># Name Typ Wert <p>```</p>
_dmarc IN TXT &quot;v=DMARC1; p=reject; rua=mailto:mailauth-reports@example.org&quot; <h1 id="name-typ-wert_3">Name Typ Wert<a class="headerlink" href="#name-typ-wert_3" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#97;&#105;&#108;&#97;&#117;&#116;&#104;&#45;&#114;&#101;&#112;&#111;&#114;&#116;&#115;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#111;&#114;&#103;">&#109;&#97;&#105;&#108;&#97;&#117;&#116;&#104;&#45;&#114;&#101;&#112;&#111;&#114;&#116;&#115;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#111;&#114;&#103;</a>"
```</p>
<h2 id="die-erweiterte-dns-konfiguration">Die erweiterte DNS-Konfiguration<a class="headerlink" href="#die-erweiterte-dns-konfiguration" title="Permanent link">&para;</a></h2> <h2 id="die-erweiterte-dns-konfiguration">Die erweiterte DNS-Konfiguration<a class="headerlink" href="#die-erweiterte-dns-konfiguration" title="Permanent link">&para;</a></h2>
<p><strong>SRV</strong>-Einträge geben den/die Server für ein bestimmtes Protokoll in Ihrer Domäne an. Wenn Sie einen Dienst explizit als nicht bereitgestellt ankündigen wollen, geben Sie "." als Zieladresse an (statt "mail.example.org."). Bitte beachten Sie <a href="https://tools.ietf.org/html/rfc2782">RFC 2782</a>.</p> <p><strong>SRV</strong>-Einträge geben den/die Server für ein bestimmtes Protokoll in Ihrer Domäne an. Wenn Sie einen Dienst explizit als nicht bereitgestellt ankündigen wollen, geben Sie "." als Zieladresse an (statt "mail.example.org."). Bitte beachten Sie <a href="https://tools.ietf.org/html/rfc2782">RFC 2782</a>.</p>
<div class="highlight"><pre><span></span><code># Name Typ Priorität Gewicht Port Wert <p>```</p>
_autodiscover._tcp IN SRV 0 1 443 mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) <h1 id="name-typ-prioritat-gewicht-port-wert">Name Typ Priorität Gewicht Port Wert<a class="headerlink" href="#name-typ-prioritat-gewicht-port-wert" title="Permanent link">&para;</a></h1>
<p>_autodiscover._tcp IN SRV 0 1 443 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_caldavs._tcp IN SRV 0 1 443 mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) _caldavs._tcp IN SRV 0 1 443 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_caldavs._tcp IN TXT &quot;path=/SOGo/dav/&quot; _caldavs._tcp IN TXT "path=/SOGo/dav/"
_carddavs._tcp IN SRV 0 1 443 mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) _carddavs._tcp IN SRV 0 1 443 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_carddavs._tcp IN TXT &quot;path=/SOGo/dav/&quot; _carddavs._tcp IN TXT "path=/SOGo/dav/"
_imap._tcp IN SRV 0 1 143 mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) _imap._tcp IN SRV 0 1 143 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_imaps._tcp IN SRV 0 1 993 mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) _imaps._tcp IN SRV 0 1 993 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_pop3._tcp IN SRV 0 1 110 mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) _pop3._tcp IN SRV 0 1 110 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
@ -2582,7 +2731,7 @@ _pop3s._tcp IN SRV 0 1 995 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_sieve._tcp IN SRV 0 1 4190 mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) _sieve._tcp IN SRV 0 1 4190 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_smtps._tcp IN SRV 0 1 465 mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) _smtps._tcp IN SRV 0 1 465 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_submission._tcp IN SRV 0 1 587 mail.example.org. (Ihr ${MAILCOW_HOSTNAME}) _submission._tcp IN SRV 0 1 587 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
</code></pre></div> ```</p>
<h2 id="testen">Testen<a class="headerlink" href="#testen" title="Permanent link">&para;</a></h2> <h2 id="testen">Testen<a class="headerlink" href="#testen" title="Permanent link">&para;</a></h2>
<p>Hier finden Sie einige Tools, mit denen Sie Ihre DNS-Konfiguration überprüfen können:</p> <p>Hier finden Sie einige Tools, mit denen Sie Ihre DNS-Konfiguration überprüfen können:</p>
<ul> <ul>
@ -2613,20 +2762,18 @@ _submission._tcp IN SRV 0 1 587 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
<p>Diese Dienste stellen Ihnen möglicherweise einen TXT-Eintrag zur Verfügung, den Sie in Ihre DNS-Einträge einfügen müssen, so wie es der Anbieter vorschreibt. Bitte stellen Sie sicher, dass Sie die Dokumentation des Anbieters des von Ihnen gewählten Dienstes lesen, da dieser Prozess variieren kann.</p> <p>Diese Dienste stellen Ihnen möglicherweise einen TXT-Eintrag zur Verfügung, den Sie in Ihre DNS-Einträge einfügen müssen, so wie es der Anbieter vorschreibt. Bitte stellen Sie sicher, dass Sie die Dokumentation des Anbieters des von Ihnen gewählten Dienstes lesen, da dieser Prozess variieren kann.</p>
<h3 id="e-mail-test-fur-spf-dkim-und-dmarc">E-Mail-Test für SPF, DKIM und DMARC:<a class="headerlink" href="#e-mail-test-fur-spf-dkim-und-dmarc" title="Permanent link">&para;</a></h3> <h3 id="e-mail-test-fur-spf-dkim-und-dmarc">E-Mail-Test für SPF, DKIM und DMARC:<a class="headerlink" href="#e-mail-test-fur-spf-dkim-und-dmarc" title="Permanent link">&para;</a></h3>
<p>Um eine rudimentäre E-Mail-Authentifizierungsprüfung durchzuführen, senden Sie eine E-Mail an <code>check-auth at verifier.port25.com</code> und warten Sie auf eine Antwort. Sie werden einen Bericht ähnlich dem folgenden finden:</p> <p>Um eine rudimentäre E-Mail-Authentifizierungsprüfung durchzuführen, senden Sie eine E-Mail an <code>check-auth at verifier.port25.com</code> und warten Sie auf eine Antwort. Sie werden einen Bericht ähnlich dem folgenden finden:</p>
<div class="highlight"><pre><span></span><code>========================================================== <h1 id="_1">```<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h1>
Zusammenfassung der Ergebnisse <h1 id="zusammenfassung-der-ergebnisse">Zusammenfassung der Ergebnisse<a class="headerlink" href="#zusammenfassung-der-ergebnisse" title="Permanent link">&para;</a></h1>
========================================================== <p>SPF-Prüfung: bestanden
SPF-Prüfung: bestanden "iprev"-Prüfung: bestanden
&quot;iprev&quot;-Prüfung: bestanden
DKIM-Prüfung: bestanden DKIM-Prüfung: bestanden
DKIM-Prüfung: bestanden DKIM-Prüfung: bestanden
SpamAssassin-Prüfung: ham SpamAssassin-Prüfung: ham</p>
<p>==========================================================
==========================================================
Einzelheiten: Einzelheiten:
========================================================== ==========================================================
.... ....
</code></pre></div> ```</p>
<p>Der vollständige Bericht enthält weitere technische Details.</p> <p>Der vollständige Bericht enthält weitere technische Details.</p>
<h3 id="fully-qualified-domain-name-fqdn">Fully Qualified Domain Name (FQDN)<a class="headerlink" href="#fully-qualified-domain-name-fqdn" title="Permanent link">&para;</a></h3> <h3 id="fully-qualified-domain-name-fqdn">Fully Qualified Domain Name (FQDN)<a class="headerlink" href="#fully-qualified-domain-name-fqdn" title="Permanent link">&para;</a></h3>
<div class="footnote"> <div class="footnote">

Datei anzeigen

@ -353,7 +353,14 @@
Firewall &amp; Ports Firewall &amp; Ports
</a> </a>
<nav class="md-nav" aria-label="Firewall &amp; Ports"> </li>
<li class="md-nav__item">
<a href="#oder" class="md-nav__link">
oder:
</a>
<nav class="md-nav" aria-label="oder:">
<ul class="md-nav__list"> <ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
@ -368,6 +375,13 @@
Wichtig für Hetzner Firewalls Wichtig für Hetzner Firewalls
</a> </a>
</li>
<li class="md-nav__item">
<a href="#datum-und-uhrzeit" class="md-nav__link">
Datum und Uhrzeit
</a>
</li> </li>
</ul> </ul>
@ -376,24 +390,50 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#datum-und-uhrzeit" class="md-nav__link"> <a href="#vim-etcsystemdtimesyncdconf" class="md-nav__link">
Datum und Uhrzeit vim /etc/systemd/timesyncd.conf
</a> </a>
</li> <nav class="md-nav" aria-label="vim /etc/systemd/timesyncd.conf">
<ul class="md-nav__list">
<li class="md-nav__item">
<li class="md-nav__item">
<a href="#hetzner-cloud-und-wahrscheinlich-andere" class="md-nav__link"> <a href="#hetzner-cloud-und-wahrscheinlich-andere" class="md-nav__link">
Hetzner Cloud (und wahrscheinlich andere) Hetzner Cloud (und wahrscheinlich andere)
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#falsch" class="md-nav__link">
Falsch:
</a>
</li>
<li class="md-nav__item">
<a href="#richtig" class="md-nav__link">
Richtig:
</a>
<nav class="md-nav" aria-label="Richtig:">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mtu" class="md-nav__link"> <a href="#mtu" class="md-nav__link">
MTU MTU
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2453,7 +2493,14 @@
Firewall &amp; Ports Firewall &amp; Ports
</a> </a>
<nav class="md-nav" aria-label="Firewall &amp; Ports"> </li>
<li class="md-nav__item">
<a href="#oder" class="md-nav__link">
oder:
</a>
<nav class="md-nav" aria-label="oder:">
<ul class="md-nav__list"> <ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
@ -2468,6 +2515,13 @@
Wichtig für Hetzner Firewalls Wichtig für Hetzner Firewalls
</a> </a>
</li>
<li class="md-nav__item">
<a href="#datum-und-uhrzeit" class="md-nav__link">
Datum und Uhrzeit
</a>
</li> </li>
</ul> </ul>
@ -2476,24 +2530,50 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#datum-und-uhrzeit" class="md-nav__link"> <a href="#vim-etcsystemdtimesyncdconf" class="md-nav__link">
Datum und Uhrzeit vim /etc/systemd/timesyncd.conf
</a> </a>
</li> <nav class="md-nav" aria-label="vim /etc/systemd/timesyncd.conf">
<ul class="md-nav__list">
<li class="md-nav__item">
<li class="md-nav__item">
<a href="#hetzner-cloud-und-wahrscheinlich-andere" class="md-nav__link"> <a href="#hetzner-cloud-und-wahrscheinlich-andere" class="md-nav__link">
Hetzner Cloud (und wahrscheinlich andere) Hetzner Cloud (und wahrscheinlich andere)
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#falsch" class="md-nav__link">
Falsch:
</a>
</li>
<li class="md-nav__item">
<a href="#richtig" class="md-nav__link">
Richtig:
</a>
<nav class="md-nav" aria-label="Richtig:">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mtu" class="md-nav__link"> <a href="#mtu" class="md-nav__link">
MTU MTU
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2514,8 +2594,6 @@
<h1>Systemvoraussetzungen</h1>
<p>Bevor Sie <strong>mailcow: dockerized</strong> ausführen, sollten Sie einige Voraussetzungen überprüfen:</p> <p>Bevor Sie <strong>mailcow: dockerized</strong> ausführen, sollten Sie einige Voraussetzungen überprüfen:</p>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
@ -2569,10 +2647,11 @@
<p>Im Rahmen unseres Supports können wir Ihnen bei der korrekten Planung Ihres Setups helfen.</p> <p>Im Rahmen unseres Supports können wir Ihnen bei der korrekten Planung Ihres Setups helfen.</p>
<h2 id="firewall-ports">Firewall &amp; Ports<a class="headerlink" href="#firewall-ports" title="Permanent link">&para;</a></h2> <h2 id="firewall-ports">Firewall &amp; Ports<a class="headerlink" href="#firewall-ports" title="Permanent link">&para;</a></h2>
<p>Bitte überprüfen Sie, ob alle Standard-Ports von mailcow offen sind und nicht von anderen Anwendungen genutzt werden:</p> <p>Bitte überprüfen Sie, ob alle Standard-Ports von mailcow offen sind und nicht von anderen Anwendungen genutzt werden:</p>
<div class="highlight"><pre><span></span><code>ss -tlpn | grep -E -w &#39;25|80|110|143|443|465|587|993|995|4190&#39; <p>```
# oder: ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'</p>
netstat -tulpn | grep -E -w &#39;25|80|110|143|443|465|587|993|995|4190&#39; <h1 id="oder">oder:<a class="headerlink" href="#oder" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>netstat -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
```</p>
<div class="admonition warnung"> <div class="admonition warnung">
<p class="admonition-title">Warnung</p> <p class="admonition-title">Warnung</p>
<p>Es gibt einige Probleme mit dem Betrieb von mailcow auf einem Firewalld/ufw aktivierten System. Sie sollten es deaktivieren (wenn möglich) und stattdessen Ihren Regelsatz in die DOCKER-USER-Kette verschieben, die nicht durch einen Neustart des Docker-Dienstes gelöscht wird. Siehe <a href="https://blog.donnex.net/docker-and-iptables-filtering/">diese (blog.donnex.net)</a> oder <a href="https://unrouted.io/2017/08/15/docker-firewall/">diese (unrouted.io)</a> Anleitung für Informationen darüber, wie man iptables-persistent mit der DOCKER-USER Kette benutzt. <p>Es gibt einige Probleme mit dem Betrieb von mailcow auf einem Firewalld/ufw aktivierten System. Sie sollten es deaktivieren (wenn möglich) und stattdessen Ihren Regelsatz in die DOCKER-USER-Kette verschieben, die nicht durch einen Neustart des Docker-Dienstes gelöscht wird. Siehe <a href="https://blog.donnex.net/docker-and-iptables-filtering/">diese (blog.donnex.net)</a> oder <a href="https://unrouted.io/2017/08/15/docker-firewall/">diese (unrouted.io)</a> Anleitung für Informationen darüber, wie man iptables-persistent mit der DOCKER-USER Kette benutzt.
@ -2665,34 +2744,30 @@ Da mailcow im Docker-Modus läuft, haben INPUT-Regeln keinen Effekt auf die Besc
<p>Port 53 ist in diesem Fall für die Firewall-Konfiguration unwichtig. Laut Dokumentation verwendet unbound den Portbereich 1024-65535 für ausgehende Anfragen. <p>Port 53 ist in diesem Fall für die Firewall-Konfiguration unwichtig. Laut Dokumentation verwendet unbound den Portbereich 1024-65535 für ausgehende Anfragen.
Da es sich bei der Hetzner Robot Firewall um eine statische Firewall handelt (jedes eingehende Paket wird isoliert geprüft) - müssen die folgenden Regeln angewendet werden:</p> Da es sich bei der Hetzner Robot Firewall um eine statische Firewall handelt (jedes eingehende Paket wird isoliert geprüft) - müssen die folgenden Regeln angewendet werden:</p>
<p><strong>Für TCP</strong> <p><strong>Für TCP</strong>
<div class="highlight"><pre><span></span><code>SRC-IP: --- <code>SRC-IP: ---
DST-IP: --- DST-IP: ---
SRC-Port: --- SRC-Port: ---
DST-Port: 1024-65535 DST-Port: 1024-65535
Protokoll: tcp Protokoll: tcp
TCP-Flags: ack TCP-Flags: ack
Aktion: Akzeptieren Aktion: Akzeptieren</code></p>
</code></pre></div></p>
<p><strong>Für UDP</strong> <p><strong>Für UDP</strong>
<div class="highlight"><pre><span></span><code>SRC-IP: --- <code>SRC-IP: ---
DST-IP: --- DST-IP: ---
SRC-Port: --- SRC-Port: ---
DST-Port: 1024-65535 DST-Port: 1024-65535
Protokoll: udp Protokoll: udp
Aktion: Akzeptieren Aktion: Akzeptieren</code></p>
</code></pre></div></p>
<p>Wenn man einen restriktiveren Portbereich anwenden will, muss man zuerst die Konfiguration von unbound ändern (nach der Installation):</p> <p>Wenn man einen restriktiveren Portbereich anwenden will, muss man zuerst die Konfiguration von unbound ändern (nach der Installation):</p>
<p>{mailcow-dockerized}/data/conf/unbound/unbound.conf: <p>{mailcow-dockerized}/data/conf/unbound/unbound.conf:
<div class="highlight"><pre><span></span><code>ausgehender-Port-vermeiden: 0-32767 <code>ausgehender-Port-vermeiden: 0-32767</code></p>
</code></pre></div></p>
<p>Nun können die Firewall-Regeln wie folgt angepasst werden:</p> <p>Nun können die Firewall-Regeln wie folgt angepasst werden:</p>
<div class="highlight"><pre><span></span><code>[...] <p><code>[...]
DST Port: 32768-65535 DST Port: 32768-65535
[...] [...]</code></p>
</code></pre></div>
<h2 id="datum-und-uhrzeit">Datum und Uhrzeit<a class="headerlink" href="#datum-und-uhrzeit" title="Permanent link">&para;</a></h2> <h2 id="datum-und-uhrzeit">Datum und Uhrzeit<a class="headerlink" href="#datum-und-uhrzeit" title="Permanent link">&para;</a></h2>
<p>Um sicherzustellen, dass Sie das richtige Datum und die richtige Zeit auf Ihrem System eingestellt haben, überprüfen Sie bitte die Ausgabe von <code>timedatectl status</code>:</p> <p>Um sicherzustellen, dass Sie das richtige Datum und die richtige Zeit auf Ihrem System eingestellt haben, überprüfen Sie bitte die Ausgabe von <code>timedatectl status</code>:</p>
<div class="highlight"><pre><span></span><code>$ timedatectl status <p><code>$ timedatectl status
Lokale Zeit: Sat 2017-05-06 02:12:33 CEST Lokale Zeit: Sat 2017-05-06 02:12:33 CEST
Weltzeit: Sa 2017-05-06 00:12:33 UTC Weltzeit: Sa 2017-05-06 00:12:33 UTC
RTC-Zeit: Sa 2017-05-06 00:12:32 RTC-Zeit: Sa 2017-05-06 00:12:32
@ -2706,23 +2781,24 @@ NTP synchronisiert: ja
So 2017-03-26 03:00:00 MESZ So 2017-03-26 03:00:00 MESZ
Nächste Sommerzeitänderung: Die Sommerzeit endet (die Uhr springt eine Stunde rückwärts) am Nächste Sommerzeitänderung: Die Sommerzeit endet (die Uhr springt eine Stunde rückwärts) am
Sun 2017-10-29 02:59:59 MESZ Sun 2017-10-29 02:59:59 MESZ
Sun 2017-10-29 02:00:00 MEZ Sun 2017-10-29 02:00:00 MEZ</code></p>
</code></pre></div>
<p>Die Zeilen <code>NTP aktiviert: ja</code> und <code>NTP synchronisiert: ja</code> zeigen an, ob Sie NTP aktiviert haben und ob es synchronisiert ist.</p> <p>Die Zeilen <code>NTP aktiviert: ja</code> und <code>NTP synchronisiert: ja</code> zeigen an, ob Sie NTP aktiviert haben und ob es synchronisiert ist.</p>
<p>Um NTP zu aktivieren, müssen Sie den Befehl <code>timedatectl set-ntp true</code> ausführen. Sie müssen auch Ihre <code>/etc/systemd/timesyncd.conf</code> bearbeiten:</p> <p>Um NTP zu aktivieren, müssen Sie den Befehl <code>timedatectl set-ntp true</code> ausführen. Sie müssen auch Ihre <code>/etc/systemd/timesyncd.conf</code> bearbeiten:</p>
<div class="highlight"><pre><span></span><code># vim /etc/systemd/timesyncd.conf <p>```</p>
[Zeit] <h1 id="vim-etcsystemdtimesyncdconf">vim /etc/systemd/timesyncd.conf<a class="headerlink" href="#vim-etcsystemdtimesyncdconf" title="Permanent link">&para;</a></h1>
<p>[Zeit]
NTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org NTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org
</code></pre></div> ```</p>
<h2 id="hetzner-cloud-und-wahrscheinlich-andere">Hetzner Cloud (und wahrscheinlich andere)<a class="headerlink" href="#hetzner-cloud-und-wahrscheinlich-andere" title="Permanent link">&para;</a></h2> <h2 id="hetzner-cloud-und-wahrscheinlich-andere">Hetzner Cloud (und wahrscheinlich andere)<a class="headerlink" href="#hetzner-cloud-und-wahrscheinlich-andere" title="Permanent link">&para;</a></h2>
<p>Prüfen Sie <code>/etc/network/interfaces.d/50-cloud-init.cfg</code> und ändern Sie die IPv6-Schnittstelle von eth0:0 auf eth0:</p> <p>Prüfen Sie <code>/etc/network/interfaces.d/50-cloud-init.cfg</code> und ändern Sie die IPv6-Schnittstelle von eth0:0 auf eth0:</p>
<div class="highlight"><pre><span></span><code># Falsch: <p>```</p>
auto eth0:0 <h1 id="falsch">Falsch:<a class="headerlink" href="#falsch" title="Permanent link">&para;</a></h1>
iface eth0:0 inet6 static <p>auto eth0:0
# Richtig: iface eth0:0 inet6 static</p>
auto eth0 <h1 id="richtig">Richtig:<a class="headerlink" href="#richtig" title="Permanent link">&para;</a></h1>
<p>auto eth0
iface eth0 inet6 static iface eth0 inet6 static
</code></pre></div> ```</p>
<p>Starten Sie die Schnittstelle neu, um die Einstellungen zu übernehmen. <p>Starten Sie die Schnittstelle neu, um die Einstellungen zu übernehmen.
Sie können außerdem die <a href="https://wiki.hetzner.de/index.php/Cloud_IP_static/en#disable_cloud-init_network_changes">cloud-init Netzwerkänderungen deaktivieren.</a></p> Sie können außerdem die <a href="https://wiki.hetzner.de/index.php/Cloud_IP_static/en#disable_cloud-init_network_changes">cloud-init Netzwerkänderungen deaktivieren.</a></p>
<h2 id="mtu">MTU<a class="headerlink" href="#mtu" title="Permanent link">&para;</a></h2> <h2 id="mtu">MTU<a class="headerlink" href="#mtu" title="Permanent link">&para;</a></h2>

Datei anzeigen

@ -2659,69 +2659,67 @@ Diese Anleitung behandelt nur die Grundlagen.</p>
<h3 id="erstellen-oder-andern-sie-docker-composeoverrideyml">Erstellen oder ändern Sie <code>docker-compose.override.yml</code><a class="headerlink" href="#erstellen-oder-andern-sie-docker-composeoverrideyml" title="Permanent link">&para;</a></h3> <h3 id="erstellen-oder-andern-sie-docker-composeoverrideyml">Erstellen oder ändern Sie <code>docker-compose.override.yml</code><a class="headerlink" href="#erstellen-oder-andern-sie-docker-composeoverrideyml" title="Permanent link">&para;</a></h3>
<p>Im mailcow-dockerized Stammverzeichnis erstellen oder bearbeiten Sie <code>docker-compose.override.yml</code> und fügen Sie die folgende <p>Im mailcow-dockerized Stammverzeichnis erstellen oder bearbeiten Sie <code>docker-compose.override.yml</code> und fügen Sie die folgende
Konfiguration ein: Konfiguration ein:
<div class="highlight"><pre><span></span><code><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;2.1&#39;</span><span class="w"></span> ```yaml
version: '2.1'</p>
<span class="nt">services</span><span class="p">:</span><span class="w"></span> <p>services:
<span class="w"> </span><span class="nt">borgmatic-mailcow</span><span class="p">:</span><span class="w"></span> borgmatic-mailcow:
<span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">b3vis/borgmatic</span><span class="w"></span> image: b3vis/borgmatic
<span class="w"> </span><span class="nt">hostname</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mailcow</span><span class="w"></span> hostname: mailcow
<span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">always</span><span class="w"></span> restart: always
<span class="w"> </span><span class="nt">dns</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${IPV4_NETWORK:-172.22.1}.254</span><span class="w"></span> dns: ${IPV4_NETWORK:-172.22.1}.254
<span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"></span> volumes:
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">vmail-vol-1:/mnt/source/vmail:ro</span><span class="w"></span> - vmail-vol-1:/mnt/source/vmail:ro
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">crypt-vol-1:/mnt/source/crypt:ro</span><span class="w"></span> - crypt-vol-1:/mnt/source/crypt:ro
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">redis-vol-1:/mnt/source/redis:ro,z</span><span class="w"></span> - redis-vol-1:/mnt/source/redis:ro,z
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rspamd-vol-1:/mnt/source/rspamd:ro,z</span><span class="w"></span> - rspamd-vol-1:/mnt/source/rspamd:ro,z
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">postfix-vol-1:/mnt/source/postfix:ro,z</span><span class="w"></span> - postfix-vol-1:/mnt/source/postfix:ro,z
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mysql-socket-vol-1:/var/run/mysqld/:z</span><span class="w"></span> - mysql-socket-vol-1:/var/run/mysqld/:z
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">borg-config-vol-1:/root/.config/borg:Z</span><span class="w"></span> - borg-config-vol-1:/root/.config/borg:Z
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">borg-cache-vol-1:/root/.cache/borg:Z</span><span class="w"></span> - borg-cache-vol-1:/root/.cache/borg:Z
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./data/conf/borgmatic/etc:/etc/borgmatic.d:Z</span><span class="w"></span> - ./data/conf/borgmatic/etc:/etc/borgmatic.d:Z
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./data/conf/borgmatic/ssh:/root/.ssh:Z</span><span class="w"></span> - ./data/conf/borgmatic/ssh:/root/.ssh:Z
<span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"></span> environment:
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">TZ=${TZ}</span><span class="w"></span> - TZ=${TZ}
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">BORG_PASSPHRASE=YouBetterPutSomethingRealGoodHere</span><span class="w"></span> - BORG_PASSPHRASE=YouBetterPutSomethingRealGoodHere
<span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"></span> networks:
<span class="w"> </span><span class="nt">mailcow-network</span><span class="p">:</span><span class="w"></span> mailcow-network:
<span class="w"> </span><span class="nt">aliases</span><span class="p">:</span><span class="w"></span> aliases:
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">borgmatic</span><span class="w"></span> - borgmatic</p>
<p>volumes:
<span class="nt">volumes</span><span class="p">:</span><span class="w"></span> borg-cache-vol-1:
<span class="w"> </span><span class="nt">borg-cache-vol-1</span><span class="p">:</span><span class="w"></span> borg-config-vol-1:
<span class="w"> </span><span class="nt">borg-config-vol-1</span><span class="p">:</span><span class="w"></span> ```</p>
</code></pre></div></p>
<p>Stellen Sie sicher, dass Sie die <code>BORG_PASSPHRASE</code> in eine sichere Passphrase Ihrer Wahl ändern.</p> <p>Stellen Sie sicher, dass Sie die <code>BORG_PASSPHRASE</code> in eine sichere Passphrase Ihrer Wahl ändern.</p>
<p>Aus Sicherheitsgründen mounten wir das maildir als schreibgeschützt. Wenn Sie später Daten wiederherstellen wollen, müssen Sie das <p>Aus Sicherheitsgründen mounten wir das maildir als schreibgeschützt. Wenn Sie später Daten wiederherstellen wollen, müssen Sie das
müssen Sie das <code>ro</code>-Flag entfernen, bevor Sie die Daten wiederherstellen. Dies wird im Abschnitt über die Wiederherstellung von Backups beschrieben.</p> müssen Sie das <code>ro</code>-Flag entfernen, bevor Sie die Daten wiederherstellen. Dies wird im Abschnitt über die Wiederherstellung von Backups beschrieben.</p>
<h3 id="erstellen-sie-dataconfborgmaticetcconfigyaml">Erstellen Sie <code>data/conf/borgmatic/etc/config.yaml</code><a class="headerlink" href="#erstellen-sie-dataconfborgmaticetcconfigyaml" title="Permanent link">&para;</a></h3> <h3 id="erstellen-sie-dataconfborgmaticetcconfigyaml">Erstellen Sie <code>data/conf/borgmatic/etc/config.yaml</code><a class="headerlink" href="#erstellen-sie-dataconfborgmaticetcconfigyaml" title="Permanent link">&para;</a></h3>
<p>Als nächstes müssen wir die borgmatic-Konfiguration erstellen.</p> <p>Als nächstes müssen wir die borgmatic-Konfiguration erstellen.</p>
<div class="highlight"><pre><span></span><code><span class="nb">source</span> mailcow.conf <p>```shell
cat <span class="s">&lt;&lt;EOF &gt; data/conf/borgmatic/etc/config.yaml</span> source mailcow.conf
<span class="s">location:</span> cat &lt;<EOF > data/conf/borgmatic/etc/config.yaml
<span class="s"> source_directories:</span> location:
<span class="s"> - /mnt/source</span> source_directories:
<span class="s"> repositories:</span> - /mnt/source
<span class="s"> - user@rsync.net:mailcow</span> repositories:
<span class="s"> exclude_patterns:</span> - <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#64;&#114;&#115;&#121;&#110;&#99;&#46;&#110;&#101;&#116;">&#117;&#115;&#101;&#114;&#64;&#114;&#115;&#121;&#110;&#99;&#46;&#110;&#101;&#116;</a>:mailcow
<span class="s"> - &#39;/mnt/source/postfix/public/&#39;</span> exclude_patterns:
<span class="s"> - &#39;/mnt/source/postfix/private/&#39;</span> - '/mnt/source/postfix/public/'
<span class="s"> - &#39;/mnt/source/rspamd/rspamd.sock&#39;</span> - '/mnt/source/postfix/private/'
- '/mnt/source/rspamd/rspamd.sock'</p>
<span class="s">retention:</span> <p>retention:
<span class="s"> keep_hourly: 24</span> keep_hourly: 24
<span class="s"> keep_daily: 7</span> keep_daily: 7
<span class="s"> keep_weekly: 4</span> keep_weekly: 4
<span class="s"> keep_monthly: 6</span> keep_monthly: 6
<span class="s"> prefix: &quot;&quot;</span> prefix: ""</p>
<p>hooks:
<span class="s">hooks:</span> mysql_databases:
<span class="s"> mysql_databases:</span> - name: ${DBNAME}
<span class="s"> - name: ${DBNAME}</span> username: ${DBUSER}
<span class="s"> username: ${DBUSER}</span> password: ${DBPASS}
<span class="s"> password: ${DBPASS}</span> options: --default-character-set=utf8mb4
<span class="s"> options: --default-character-set=utf8mb4</span> EOF
<span class="s">EOF</span> ```</p>
</code></pre></div>
<p>Das Erstellen der Datei auf diese Weise stellt sicher, dass die korrekten MySQL-Zugangsdaten aus <code>mailcow.conf</code> übernommen werden.</p> <p>Das Erstellen der Datei auf diese Weise stellt sicher, dass die korrekten MySQL-Zugangsdaten aus <code>mailcow.conf</code> übernommen werden.</p>
<p>Diese Datei ist ein minimales Beispiel für die Verwendung von borgmatic mit einem Konto <code>user</code> beim Cloud-Speicheranbieter <code>rsync.net</code> für <p>Diese Datei ist ein minimales Beispiel für die Verwendung von borgmatic mit einem Konto <code>user</code> beim Cloud-Speicheranbieter <code>rsync.net</code> für
ein Repository namens <code>mailcow</code> (siehe <code>repositories</code> Einstellung). Es wird sowohl das maildir als auch die MySQL-Datenbank sichern, was alles ist ein Repository namens <code>mailcow</code> (siehe <code>repositories</code> Einstellung). Es wird sowohl das maildir als auch die MySQL-Datenbank sichern, was alles ist
@ -2737,8 +2735,7 @@ Container einbinden. Der Container definiert zu diesem Zweck ein Volume namens <
</div> </div>
<h3 id="erstellen-sie-einen-crontab">Erstellen Sie einen crontab<a class="headerlink" href="#erstellen-sie-einen-crontab" title="Permanent link">&para;</a></h3> <h3 id="erstellen-sie-einen-crontab">Erstellen Sie einen crontab<a class="headerlink" href="#erstellen-sie-einen-crontab" title="Permanent link">&para;</a></h3>
<p>Erstellen Sie eine neue Textdatei in <code>data/conf/borgmatic/etc/crontab.txt</code> mit folgendem Inhalt:</p> <p>Erstellen Sie eine neue Textdatei in <code>data/conf/borgmatic/etc/crontab.txt</code> mit folgendem Inhalt:</p>
<div class="highlight"><pre><span></span><code>14 * * * * PATH=$PATH:/usr/bin /usr/bin/borgmatic --stats -v 0 2&gt;&amp;1 <p><code>14 * * * * PATH=$PATH:/usr/bin /usr/bin/borgmatic --stats -v 0 2&gt;&amp;1</code></p>
</code></pre></div>
<p>Diese Datei erwartet eine crontab-Syntax. Das hier gezeigte Beispiel veranlasst das Backup, jede Stunde um 14 Minuten nach <p>Diese Datei erwartet eine crontab-Syntax. Das hier gezeigte Beispiel veranlasst das Backup, jede Stunde um 14 Minuten nach
nach der vollen Stunde auszuführen und am Ende einige nette Statistiken zu protokollieren.</p> nach der vollen Stunde auszuführen und am Ende einige nette Statistiken zu protokollieren.</p>
<h3 id="ssh-schlussel-in-ordner-ablegen">SSH-Schlüssel in Ordner ablegen<a class="headerlink" href="#ssh-schlussel-in-ordner-ablegen" title="Permanent link">&para;</a></h3> <h3 id="ssh-schlussel-in-ordner-ablegen">SSH-Schlüssel in Ordner ablegen<a class="headerlink" href="#ssh-schlussel-in-ordner-ablegen" title="Permanent link">&para;</a></h3>
@ -2747,8 +2744,8 @@ nach der vollen Stunde auszuführen und am Ende einige nette Statistiken zu prot
oder OpenSSH wird sich weigern, den SSH-Schlüssel zu benutzen.</p> oder OpenSSH wird sich weigern, den SSH-Schlüssel zu benutzen.</p>
<h3 id="den-container-hochfahren">Den Container hochfahren<a class="headerlink" href="#den-container-hochfahren" title="Permanent link">&para;</a></h3> <h3 id="den-container-hochfahren">Den Container hochfahren<a class="headerlink" href="#den-container-hochfahren" title="Permanent link">&para;</a></h3>
<p>Für den nächsten Schritt müssen wir den Container in einem konfigurierten Zustand hochfahren und laufen lassen. Um das zu tun, führen Sie aus:</p> <p>Für den nächsten Schritt müssen wir den Container in einem konfigurierten Zustand hochfahren und laufen lassen. Um das zu tun, führen Sie aus:</p>
<div class="highlight"><pre><span></span><code>docker-compose up -d <p><code>shell
</code></pre></div> docker-compose up -d</code></p>
<h2 id="wiederherstellung-von-einem-backup">Wiederherstellung von einem Backup<a class="headerlink" href="#wiederherstellung-von-einem-backup" title="Permanent link">&para;</a></h2> <h2 id="wiederherstellung-von-einem-backup">Wiederherstellung von einem Backup<a class="headerlink" href="#wiederherstellung-von-einem-backup" title="Permanent link">&para;</a></h2>
<p>Das Wiederherstellen eines Backups setzt voraus, dass Sie mit einer neuen Installation von mailcow beginnen, und dass Sie derzeit keine <p>Das Wiederherstellen eines Backups setzt voraus, dass Sie mit einer neuen Installation von mailcow beginnen, und dass Sie derzeit keine
keine benutzerdefinierten Daten in ihrem maildir oder ihrer mailcow Datenbank.</p> keine benutzerdefinierten Daten in ihrem maildir oder ihrer mailcow Datenbank.</p>
@ -2768,8 +2765,8 @@ dieses Volume zu schreiben.</p>
<p>Bevor Sie eine Wiederherstellung durchführen, müssen Sie das vmail-Volume in <code>docker-compose.override.yml</code> beschreibbar machen, indem Sie das <p>Bevor Sie eine Wiederherstellung durchführen, müssen Sie das vmail-Volume in <code>docker-compose.override.yml</code> beschreibbar machen, indem Sie das
das <code>ro</code>-Flag aus dem Volume entfernen. das <code>ro</code>-Flag aus dem Volume entfernen.
Dann können Sie den folgenden Befehl verwenden, um das Maildir aus einem Backup wiederherzustellen:</p> Dann können Sie den folgenden Befehl verwenden, um das Maildir aus einem Backup wiederherzustellen:</p>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic extract --path mnt/source --archive latest <p><code>shell
</code></pre></div> docker-compose exec borgmatic-mailcow borgmatic extract --path mnt/source --archive latest</code></p>
<p>Alternativ können Sie auch einen beliebigen Archivnamen aus der Liste der Archive angeben (siehe <p>Alternativ können Sie auch einen beliebigen Archivnamen aus der Liste der Archive angeben (siehe
<a href="#auflistung-aller-verfugbaren-archive">Auflistung aller verfügbaren Archive</a>)</p> <a href="#auflistung-aller-verfugbaren-archive">Auflistung aller verfügbaren Archive</a>)</p>
<h3 id="mysql-wiederherstellen">MySQL wiederherstellen<a class="headerlink" href="#mysql-wiederherstellen" title="Permanent link">&para;</a></h3> <h3 id="mysql-wiederherstellen">MySQL wiederherstellen<a class="headerlink" href="#mysql-wiederherstellen" title="Permanent link">&para;</a></h3>
@ -2778,30 +2775,30 @@ Dann können Sie den folgenden Befehl verwenden, um das Maildir aus einem Backup
<p>Die Ausführung dieses Befehls löscht und erstellt die mailcow-Datenbank neu! Führen sie diesen Befehl nicht aus, es sei denn sie beabsichtigen, die mailcow-Datenbank von einem Backup wiederherzustellen.</p> <p>Die Ausführung dieses Befehls löscht und erstellt die mailcow-Datenbank neu! Führen sie diesen Befehl nicht aus, es sei denn sie beabsichtigen, die mailcow-Datenbank von einem Backup wiederherzustellen.</p>
</div> </div>
<p>Um die MySQL-Datenbank aus dem letzten Archiv wiederherzustellen, verwenden Sie diesen Befehl:</p> <p>Um die MySQL-Datenbank aus dem letzten Archiv wiederherzustellen, verwenden Sie diesen Befehl:</p>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic restore --archive latest <p><code>shell
</code></pre></div> docker-compose exec borgmatic-mailcow borgmatic restore --archive latest</code></p>
<p>Alternativ können Sie auch einen beliebigen Archivnamen aus der Liste der Archive angeben (siehe <p>Alternativ können Sie auch einen beliebigen Archivnamen aus der Liste der Archive angeben (siehe
<a href="#auflistung-aller-verfugbaren-archive">Auflistung aller verfügbaren Archive</a>)</p> <a href="#auflistung-aller-verfugbaren-archive">Auflistung aller verfügbaren Archive</a>)</p>
<h3 id="nach-der-wiederherstellung">Nach der Wiederherstellung<a class="headerlink" href="#nach-der-wiederherstellung" title="Permanent link">&para;</a></h3> <h3 id="nach-der-wiederherstellung">Nach der Wiederherstellung<a class="headerlink" href="#nach-der-wiederherstellung" title="Permanent link">&para;</a></h3>
<p>Nach der Wiederherstellung müssen Sie mailcow neu starten. Wenn Sie den SELinux-Erzwingungsmodus deaktiviert haben, wäre jetzt ein guter Zeitpunkt, um <p>Nach der Wiederherstellung müssen Sie mailcow neu starten. Wenn Sie den SELinux-Erzwingungsmodus deaktiviert haben, wäre jetzt ein guter Zeitpunkt, um
ihn wieder zu aktivieren.</p> ihn wieder zu aktivieren.</p>
<p>Um mailcow neu zu starten, verwenden Sie den folgenden Befehl:</p> <p>Um mailcow neu zu starten, verwenden Sie den folgenden Befehl:</p>
<div class="highlight"><pre><span></span><code>docker-compose down <span class="o">&amp;&amp;</span> docker-compose up -d <p><code>shell
</code></pre></div> docker-compose down &amp;&amp; docker-compose up -d</code></p>
<p>Wenn Sie SELinux verwenden, werden dadurch auch alle Dateien in Ihrem vmail-Volume neu benannt. Seien Sie geduldig, denn dies kann <p>Wenn Sie SELinux verwenden, werden dadurch auch alle Dateien in Ihrem vmail-Volume neu benannt. Seien Sie geduldig, denn dies kann
eine Weile dauern kann, wenn Sie viele Dateien haben.</p> eine Weile dauern kann, wenn Sie viele Dateien haben.</p>
<h2 id="nutzliche-befehle">Nützliche Befehle<a class="headerlink" href="#nutzliche-befehle" title="Permanent link">&para;</a></h2> <h2 id="nutzliche-befehle">Nützliche Befehle<a class="headerlink" href="#nutzliche-befehle" title="Permanent link">&para;</a></h2>
<h3 id="manueller-archivierungslauf-mit-debugging-ausgabe">Manueller Archivierungslauf (mit Debugging-Ausgabe)<a class="headerlink" href="#manueller-archivierungslauf-mit-debugging-ausgabe" title="Permanent link">&para;</a></h3> <h3 id="manueller-archivierungslauf-mit-debugging-ausgabe">Manueller Archivierungslauf (mit Debugging-Ausgabe)<a class="headerlink" href="#manueller-archivierungslauf-mit-debugging-ausgabe" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic -v <span class="m">2</span> <p><code>shell
</code></pre></div> docker-compose exec borgmatic-mailcow borgmatic -v 2</code></p>
<h3 id="auflistung-aller-verfugbaren-archive">Auflistung aller verfügbaren Archive<a class="headerlink" href="#auflistung-aller-verfugbaren-archive" title="Permanent link">&para;</a></h3> <h3 id="auflistung-aller-verfugbaren-archive">Auflistung aller verfügbaren Archive<a class="headerlink" href="#auflistung-aller-verfugbaren-archive" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic list <p><code>shell
</code></pre></div> docker-compose exec borgmatic-mailcow borgmatic list</code></p>
<h3 id="sperre-aufheben">Sperre aufheben<a class="headerlink" href="#sperre-aufheben" title="Permanent link">&para;</a></h3> <h3 id="sperre-aufheben">Sperre aufheben<a class="headerlink" href="#sperre-aufheben" title="Permanent link">&para;</a></h3>
<p>Wenn borg während eines Archivierungslaufs unterbrochen wird, hinterlässt es eine veraltete Sperre, die gelöscht werden muss, bevor <p>Wenn borg während eines Archivierungslaufs unterbrochen wird, hinterlässt es eine veraltete Sperre, die gelöscht werden muss, bevor
neue Operationen durchgeführt werden können:</p> neue Operationen durchgeführt werden können:</p>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borg break-lock user@rsync.net:mailcow <p><code>shell
</code></pre></div> docker-compose exec borgmatic-mailcow borg break-lock user@rsync.net:mailcow</code></p>
<p>Wobei <code>user@rsync.net:mailcow</code> die URI zu Ihrem Repository ist.</p> <p>Wobei <code>user@rsync.net:mailcow</code> die URI zu Ihrem Repository ist.</p>
<p>Jetzt wäre ein guter Zeitpunkt, einen manuellen Archivierungslauf durchzuführen, um sicherzustellen, dass er erfolgreich durchgeführt werden kann.</p> <p>Jetzt wäre ein guter Zeitpunkt, einen manuellen Archivierungslauf durchzuführen, um sicherzustellen, dass er erfolgreich durchgeführt werden kann.</p>
<h3 id="exportieren-von-schlusseln">Exportieren von Schlüsseln<a class="headerlink" href="#exportieren-von-schlusseln" title="Permanent link">&para;</a></h3> <h3 id="exportieren-von-schlusseln">Exportieren von Schlüsseln<a class="headerlink" href="#exportieren-von-schlusseln" title="Permanent link">&para;</a></h3>
@ -2810,8 +2807,8 @@ Schlüsseldateien werden erzeugt, wenn Sie das Repository initialisieren. Die <c
Repository, so dass eine manuelle Sicherung nicht so wichtig ist.</p> Repository, so dass eine manuelle Sicherung nicht so wichtig ist.</p>
<p>Beachten Sie, dass Sie in beiden Fällen auch die Passphrase haben müssen, um die Archive zu entschlüsseln.</p> <p>Beachten Sie, dass Sie in beiden Fällen auch die Passphrase haben müssen, um die Archive zu entschlüsseln.</p>
<p>Um die <code>keyfile</code> zu holen, führen Sie aus:</p> <p>Um die <code>keyfile</code> zu holen, führen Sie aus:</p>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borg key <span class="nb">export</span> --paper user@rsync.net:mailcow <p><code>shell
</code></pre></div> docker-compose exec borgmatic-mailcow borg key export --paper user@rsync.net:mailcow</code></p>
<p>Wobei <code>user@rsync.net:mailcow</code> die URI zu Ihrem Repository ist.</p> <p>Wobei <code>user@rsync.net:mailcow</code> die URI zu Ihrem Repository ist.</p>
<hr> <hr>

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#fur-gitea_ssh_port1270014000-in-mailcowconf-setzen" class="md-skip">
Zum Inhalt
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -2209,6 +2214,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
Gitea Gitea
@ -2326,6 +2333,8 @@
</nav> </nav>
</div> </div>
@ -2343,45 +2352,43 @@
<h1>Gitea</h1>
<p>Mit der Fähigkeit von Gitea, sich über SMTP zu authentifizieren, ist es trivial, es mit mailcow zu integrieren. Es sind nur wenige Änderungen erforderlich:</p> <p>Mit der Fähigkeit von Gitea, sich über SMTP zu authentifizieren, ist es trivial, es mit mailcow zu integrieren. Es sind nur wenige Änderungen erforderlich:</p>
<p>1. Öffnen Sie <code>docker-compose.override.yml</code> und fügen Sie Gitea hinzu:</p> <p>1. Öffnen Sie <code>docker-compose.override.yml</code> und fügen Sie Gitea hinzu:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p>```
services: version: '2.1'
services:</p>
gitea-mailcow: <pre><code> gitea-mailcow:
image: gitea/gitea:1 image: gitea/gitea:1
volumes: volumes:
- ./data/gitea:/data - ./data/gitea:/data
networks: networks:
mailcow-network: mailcow-network:
aliases: aliases:
- gitea - gitea
ports: ports:
- &quot;${GITEA_SSH_PORT:-127.0.0.1:4000}:22&quot; - "${GITEA_SSH_PORT:-127.0.0.1:4000}:22"
</code></pre></div> </code></pre>
<p>```</p>
<p>2. Erstellen Sie <code>data/conf/nginx/site.gitea.custom</code>, fügen Sie folgendes hinzu: <p>2. Erstellen Sie <code>data/conf/nginx/site.gitea.custom</code>, fügen Sie folgendes hinzu:
<div class="highlight"><pre><span></span><code>location /gitea/ { <code>location /gitea/ {
proxy_pass http://gitea:3000/; proxy_pass http://gitea:3000/;
} }</code></p>
</code></pre></div></p>
<p>3. Öffne <code>mailcow.conf</code> und definiere den Port Bind, den Gitea für SSH verwenden soll. Beispiel:</p> <p>3. Öffne <code>mailcow.conf</code> und definiere den Port Bind, den Gitea für SSH verwenden soll. Beispiel:</p>
<div class="highlight"><pre><span></span><code>GITEA_SSH_PORT=127.0.0.1:4000 <p><code>GITEA_SSH_PORT=127.0.0.1:4000</code></p>
</code></pre></div>
<p>5. Führen Sie <code>docker-compose up -d</code> aus, um den Gitea-Container hochzufahren und führen Sie anschließend <code>docker-compose restart nginx-mailcow</code> aus.</p> <p>5. Führen Sie <code>docker-compose up -d</code> aus, um den Gitea-Container hochzufahren und führen Sie anschließend <code>docker-compose restart nginx-mailcow</code> aus.</p>
<p>6. Wenn Sie mailcow zu https gezwungen haben, führen Sie Schritt 9 aus und starten Sie gitea mit <code>docker-compose restart gitea-mailcow</code> neu. Fahren Sie mit Schritt 7 fort (Denken Sie daran, https anstelle von http zu verwenden, <code>https://mx.example.org/gitea/</code> </p> <p>6. Wenn Sie mailcow zu https gezwungen haben, führen Sie Schritt 9 aus und starten Sie gitea mit <code>docker-compose restart gitea-mailcow</code> neu. Fahren Sie mit Schritt 7 fort (Denken Sie daran, https anstelle von http zu verwenden, <code>https://mx.example.org/gitea/</code> </p>
<p>7. Öffnen Sie <code>http://${MAILCOW_HOSTNAME}/gitea/</code>, zum Beispiel <code>http://mx.example.org/gitea/</code>. Für die Datenbankdetails stellen Sie <code>mysql</code> als Datenbankhost ein. Verwenden Sie den in mailcow.conf gefundenen Wert von DBNAME als Datenbankname, DBUSER als Datenbankbenutzer und DBPASS als Datenbankpasswort.</p> <p>7. Öffnen Sie <code>http://${MAILCOW_HOSTNAME}/gitea/</code>, zum Beispiel <code>http://mx.example.org/gitea/</code>. Für die Datenbankdetails stellen Sie <code>mysql</code> als Datenbankhost ein. Verwenden Sie den in mailcow.conf gefundenen Wert von DBNAME als Datenbankname, DBUSER als Datenbankbenutzer und DBPASS als Datenbankpasswort.</p>
<p>8. Sobald die Installation abgeschlossen ist, loggen Sie sich als Administrator ein und setzen Sie "Einstellungen" -&gt; "Autorisierung" -&gt; "SMTP aktivieren". SMTP-Host sollte <code>postfix</code> mit Port <code>587</code> sein, setzen Sie <code>Skip TLS Verify</code>, da wir ein nicht gelistetes SAN verwenden ("postfix" ist höchstwahrscheinlich nicht Teil Ihres Zertifikats).</p> <p>8. Sobald die Installation abgeschlossen ist, loggen Sie sich als Administrator ein und setzen Sie "Einstellungen" -&gt; "Autorisierung" -&gt; "SMTP aktivieren". SMTP-Host sollte <code>postfix</code> mit Port <code>587</code> sein, setzen Sie <code>Skip TLS Verify</code>, da wir ein nicht gelistetes SAN verwenden ("postfix" ist höchstwahrscheinlich nicht Teil Ihres Zertifikats).</p>
<p>9. Erstellen Sie <code>data/gitea/gitea/conf/app.ini</code> und setzen Sie die folgenden Werte. Sie können <a href="https://docs.gitea.io/en-us/config-cheat-sheet/">gitea cheat sheet, leider bisher nur in Englisch verfügbar</a> für deren Bedeutung und andere mögliche Werte konsultieren.</p> <p>9. Erstellen Sie <code>data/gitea/gitea/conf/app.ini</code> und setzen Sie die folgenden Werte. Sie können <a href="https://docs.gitea.io/en-us/config-cheat-sheet/">gitea cheat sheet, leider bisher nur in Englisch verfügbar</a> für deren Bedeutung und andere mögliche Werte konsultieren.</p>
<div class="highlight"><pre><span></span><code>[server] <p>```
SSH_LISTEN_PORT = 22 [server]
# Für GITEA_SSH_PORT=127.0.0.1:4000 in mailcow.conf, setzen: SSH_LISTEN_PORT = 22</p>
SSH_DOMAIN = 127.0.0.1 <h1 id="fur-gitea_ssh_port1270014000-in-mailcowconf-setzen">Für GITEA_SSH_PORT=127.0.0.1:4000 in mailcow.conf, setzen:<a class="headerlink" href="#fur-gitea_ssh_port1270014000-in-mailcowconf-setzen" title="Permanent link">&para;</a></h1>
SSH_PORT = 4000 <p>SSH_DOMAIN = 127.0.0.1
# Für MAILCOW_HOSTNAME=mx.example.org in mailcow.conf (und Standard-Ports für HTTPS), setzen: SSH_PORT = 4000</p>
ROOT_URL = https://mx.example.org/gitea/ <h1 id="fur-mailcow_hostnamemxexampleorg-in-mailcowconf-und-standard-ports-fur-https-setzen">Für MAILCOW_HOSTNAME=mx.example.org in mailcow.conf (und Standard-Ports für HTTPS), setzen:<a class="headerlink" href="#fur-mailcow_hostnamemxexampleorg-in-mailcowconf-und-standard-ports-fur-https-setzen" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>ROOT_URL = <a href="https://mx.example.org/gitea/">https://mx.example.org/gitea/</a>
```</p>
<p>10. Starten Sie gitea neu mit <code>docker-compose restart gitea-mailcow</code>. Ihre Nutzer sollten in der Lage sein, sich mit von mailcow verwalteten Konten anzumelden.</p> <p>10. Starten Sie gitea neu mit <code>docker-compose restart gitea-mailcow</code>. Ihre Nutzer sollten in der Lage sein, sich mit von mailcow verwalteten Konten anzumelden.</p>
<hr> <hr>

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#fur-gogs_ssh_port1270014000-in-mailcowconf-setzen" class="md-skip">
Zum Inhalt
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -2223,6 +2228,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
Gogs Gogs
@ -2326,6 +2333,8 @@
</nav> </nav>
</div> </div>
@ -2343,44 +2352,42 @@
<h1>Gogs</h1>
<p>Mit Gogs' Fähigkeit, sich über SMTP zu authentifizieren, ist es einfach, es mit mailcow zu verbinden. Es sind nur wenige Änderungen erforderlich:</p> <p>Mit Gogs' Fähigkeit, sich über SMTP zu authentifizieren, ist es einfach, es mit mailcow zu verbinden. Es sind nur wenige Änderungen erforderlich:</p>
<p>1. Öffne <code>docker-compose.override.yml</code> und füge Gogs hinzu:</p> <p>1. Öffne <code>docker-compose.override.yml</code> und füge Gogs hinzu:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p>```
services: version: '2.1'
services:</p>
gogs-mailcow: <pre><code>gogs-mailcow:
image: gogs/gogs image: gogs/gogs
volumes: volumes:
- ./data/gogs:/data - ./data/gogs:/data
networks: networks:
mailcow-network: mailcow-network:
aliases: aliases:
- gogs - gogs
ports: ports:
- &quot;${GOGS_SSH_PORT:-127.0.0.1:4000}:22&quot; - "${GOGS_SSH_PORT:-127.0.0.1:4000}:22"
</code></pre></div> </code></pre>
<p>```</p>
<p>2. Erstelle <code>data/conf/nginx/site.gogs.custom</code>, füge hinzu: <p>2. Erstelle <code>data/conf/nginx/site.gogs.custom</code>, füge hinzu:
<div class="highlight"><pre><span></span><code>location /gogs/ { <code>location /gogs/ {
proxy_pass http://gogs:3000/; proxy_pass http://gogs:3000/;
} }</code></p>
</code></pre></div></p>
<p>3. Öffne <code>mailcow.conf</code> und definiere die Bindung, die Gogs für SSH verwenden soll. Beispiel:</p> <p>3. Öffne <code>mailcow.conf</code> und definiere die Bindung, die Gogs für SSH verwenden soll. Beispiel:</p>
<div class="highlight"><pre><span></span><code>GOGS_SSH_PORT=127.0.0.1:4000 <p><code>GOGS_SSH_PORT=127.0.0.1:4000</code></p>
</code></pre></div>
<p>5. Führen Sie <code>docker-compose up -d</code> aus, um den Gogs-Container hochzufahren und führen Sie anschließend <code>docker-compose restart nginx-mailcow</code> aus.</p> <p>5. Führen Sie <code>docker-compose up -d</code> aus, um den Gogs-Container hochzufahren und führen Sie anschließend <code>docker-compose restart nginx-mailcow</code> aus.</p>
<p>6. Öffnen Sie <code>http://${MAILCOW_HOSTNAME}/gogs/</code>, zum Beispiel <code>http://mx.example.org/gogs/</code>. Für Datenbank-Details setzen Sie <code>mysql</code> als Datenbank-Host. Verwenden Sie den in mailcow.conf gefundenen Wert von DBNAME als Datenbankname, DBUSER als Datenbankbenutzer und DBPASS als Datenbankpasswort.</p> <p>6. Öffnen Sie <code>http://${MAILCOW_HOSTNAME}/gogs/</code>, zum Beispiel <code>http://mx.example.org/gogs/</code>. Für Datenbank-Details setzen Sie <code>mysql</code> als Datenbank-Host. Verwenden Sie den in mailcow.conf gefundenen Wert von DBNAME als Datenbankname, DBUSER als Datenbankbenutzer und DBPASS als Datenbankpasswort.</p>
<p>7. Sobald die Installation abgeschlossen ist, loggen Sie sich als Administrator ein und setzen Sie "Einstellungen" -&gt; "Autorisierung" -&gt; "SMTP aktivieren". SMTP-Host sollte <code>postfix</code> mit Port <code>587</code> sein, setzen Sie <code>Skip TLS Verify</code>, da wir ein nicht gelistetes SAN verwenden ("postfix" ist höchstwahrscheinlich nicht Teil Ihres Zertifikats).</p> <p>7. Sobald die Installation abgeschlossen ist, loggen Sie sich als Administrator ein und setzen Sie "Einstellungen" -&gt; "Autorisierung" -&gt; "SMTP aktivieren". SMTP-Host sollte <code>postfix</code> mit Port <code>587</code> sein, setzen Sie <code>Skip TLS Verify</code>, da wir ein nicht gelistetes SAN verwenden ("postfix" ist höchstwahrscheinlich nicht Teil Ihres Zertifikats).</p>
<p>8. Erstellen Sie <code>data/gogs/gogs/conf/app.ini</code> und setzen Sie die folgenden Werte. Sie können <a href="https://gogs.io/docs/advanced/configuration_cheat_sheet">Gogs cheat sheet</a> für ihre Bedeutung und andere mögliche Werte konsultieren.</p> <p>8. Erstellen Sie <code>data/gogs/gogs/conf/app.ini</code> und setzen Sie die folgenden Werte. Sie können <a href="https://gogs.io/docs/advanced/configuration_cheat_sheet">Gogs cheat sheet</a> für ihre Bedeutung und andere mögliche Werte konsultieren.</p>
<div class="highlight"><pre><span></span><code>[server] <p>```
SSH_LISTEN_PORT = 22 [server]
# Für GOGS_SSH_PORT=127.0.0.1:4000 in mailcow.conf, setzen: SSH_LISTEN_PORT = 22</p>
SSH_DOMAIN = 127.0.0.1 <h1 id="fur-gogs_ssh_port1270014000-in-mailcowconf-setzen">Für GOGS_SSH_PORT=127.0.0.1:4000 in mailcow.conf, setzen:<a class="headerlink" href="#fur-gogs_ssh_port1270014000-in-mailcowconf-setzen" title="Permanent link">&para;</a></h1>
SSH_PORT = 4000 <p>SSH_DOMAIN = 127.0.0.1
# Für MAILCOW_HOSTNAME=mx.example.org in mailcow.conf (und Standard-Ports für HTTPS), setzen: SSH_PORT = 4000</p>
ROOT_URL = https://mx.example.org/gogs/ <h1 id="fur-mailcow_hostnamemxexampleorg-in-mailcowconf-und-standard-ports-fur-https-setzen">Für MAILCOW_HOSTNAME=mx.example.org in mailcow.conf (und Standard-Ports für HTTPS), setzen:<a class="headerlink" href="#fur-mailcow_hostnamemxexampleorg-in-mailcowconf-und-standard-ports-fur-https-setzen" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>ROOT_URL = <a href="https://mx.example.org/gogs/">https://mx.example.org/gogs/</a>
```</p>
<p>9. Starten Sie Gogs neu mit <code>docker-compose restart gogs-mailcow</code>. Ihre Benutzer sollten in der Lage sein, sich mit von mailcow verwalteten Konten einzuloggen.</p> <p>9. Starten Sie Gogs neu mit <code>docker-compose restart gogs-mailcow</code>. Ihre Benutzer sollten in der Lage sein, sich mit von mailcow verwalteten Konten einzuloggen.</p>
<hr> <hr>

Datei anzeigen

@ -2289,162 +2289,6 @@
DNS-Einrichtung DNS-Einrichtung
</a> </a>
</li>
<li class="md-nav__item">
<a href="#installieren-sie-apache-als-reverse-proxy" class="md-nav__link">
Installieren Sie Apache als Reverse Proxy
</a>
<nav class="md-nav" aria-label="Installieren Sie Apache als Reverse Proxy">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#vhost-konfiguration" class="md-nav__link">
vHost-Konfiguration
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#beziehen-sie-ssl-zertifikate-mit-lets-encrypt" class="md-nav__link">
Beziehen Sie SSL-Zertifikate mit Let's Encrypt.
</a>
</li>
<li class="md-nav__item">
<a href="#installieren-sie-mailcow-mit-mailman-integration" class="md-nav__link">
Installieren Sie mailcow mit Mailman Integration
</a>
<nav class="md-nav" aria-label="Installieren Sie mailcow mit Mailman Integration">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#installieren-sie-mailcow" class="md-nav__link">
Installieren Sie mailcow
</a>
</li>
<li class="md-nav__item">
<a href="#mailcow-konfigurieren" class="md-nav__link">
Mailcow konfigurieren
</a>
</li>
<li class="md-nav__item">
<a href="#mailman-integration-hinzufugen" class="md-nav__link">
Mailman-Integration hinzufügen
</a>
</li>
<li class="md-nav__item">
<a href="#ssl-zertifikate" class="md-nav__link">
SSL-Zertifikate
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#installieren-sie-mailman" class="md-nav__link">
Installieren Sie Mailman.
</a>
<nav class="md-nav" aria-label="Installieren Sie Mailman.">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mailman-konfigurieren" class="md-nav__link">
Mailman konfigurieren
</a>
</li>
<li class="md-nav__item">
<a href="#konfigurieren-sie-mailman-core-und-mailman-web" class="md-nav__link">
Konfigurieren Sie Mailman core und Mailman web
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ausfuhren" class="md-nav__link">
🏃 Ausführen
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#bemerkungen" class="md-nav__link">
Bemerkungen
</a>
<nav class="md-nav" aria-label="Bemerkungen">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#neue-listen-werden-von-postfix-nicht-sofort-erkannt" class="md-nav__link">
Neue Listen werden von Postfix nicht sofort erkannt
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#update" class="md-nav__link">
Update
</a>
</li>
<li class="md-nav__item">
<a href="#sicherung" class="md-nav__link">
Sicherung
</a>
</li>
<li class="md-nav__item">
<a href="#todo" class="md-nav__link">
ToDo
</a>
<nav class="md-nav" aria-label="ToDo">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#skript-installieren" class="md-nav__link">
Skript installieren
</a>
</li> </li>
</ul> </ul>
@ -2569,162 +2413,6 @@
DNS-Einrichtung DNS-Einrichtung
</a> </a>
</li>
<li class="md-nav__item">
<a href="#installieren-sie-apache-als-reverse-proxy" class="md-nav__link">
Installieren Sie Apache als Reverse Proxy
</a>
<nav class="md-nav" aria-label="Installieren Sie Apache als Reverse Proxy">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#vhost-konfiguration" class="md-nav__link">
vHost-Konfiguration
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#beziehen-sie-ssl-zertifikate-mit-lets-encrypt" class="md-nav__link">
Beziehen Sie SSL-Zertifikate mit Let's Encrypt.
</a>
</li>
<li class="md-nav__item">
<a href="#installieren-sie-mailcow-mit-mailman-integration" class="md-nav__link">
Installieren Sie mailcow mit Mailman Integration
</a>
<nav class="md-nav" aria-label="Installieren Sie mailcow mit Mailman Integration">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#installieren-sie-mailcow" class="md-nav__link">
Installieren Sie mailcow
</a>
</li>
<li class="md-nav__item">
<a href="#mailcow-konfigurieren" class="md-nav__link">
Mailcow konfigurieren
</a>
</li>
<li class="md-nav__item">
<a href="#mailman-integration-hinzufugen" class="md-nav__link">
Mailman-Integration hinzufügen
</a>
</li>
<li class="md-nav__item">
<a href="#ssl-zertifikate" class="md-nav__link">
SSL-Zertifikate
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#installieren-sie-mailman" class="md-nav__link">
Installieren Sie Mailman.
</a>
<nav class="md-nav" aria-label="Installieren Sie Mailman.">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mailman-konfigurieren" class="md-nav__link">
Mailman konfigurieren
</a>
</li>
<li class="md-nav__item">
<a href="#konfigurieren-sie-mailman-core-und-mailman-web" class="md-nav__link">
Konfigurieren Sie Mailman core und Mailman web
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ausfuhren" class="md-nav__link">
🏃 Ausführen
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#bemerkungen" class="md-nav__link">
Bemerkungen
</a>
<nav class="md-nav" aria-label="Bemerkungen">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#neue-listen-werden-von-postfix-nicht-sofort-erkannt" class="md-nav__link">
Neue Listen werden von Postfix nicht sofort erkannt
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#update" class="md-nav__link">
Update
</a>
</li>
<li class="md-nav__item">
<a href="#sicherung" class="md-nav__link">
Sicherung
</a>
</li>
<li class="md-nav__item">
<a href="#todo" class="md-nav__link">
ToDo
</a>
<nav class="md-nav" aria-label="ToDo">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#skript-installieren" class="md-nav__link">
Skript installieren
</a>
</li> </li>
</ul> </ul>
@ -2780,15 +2468,15 @@
</ol> </ol>
<h3 id="dns-einrichtung">DNS-Einrichtung<a class="headerlink" href="#dns-einrichtung" title="Permanent link">&para;</a></h3> <h3 id="dns-einrichtung">DNS-Einrichtung<a class="headerlink" href="#dns-einrichtung" title="Permanent link">&para;</a></h3>
<p>Der größte Teil der Konfiguration ist in <em>mailcow</em>s <a href="../../prerequisite/prerequisite-dns/">DNS Konfiguration</a> enthalten. Nachdem diese Einrichtung abgeschlossen ist, fügen Sie eine weitere Subdomain für <em>Mailman</em> hinzu, z.B. <code>lists.example.org</code>, die auf denselben Server zeigt:</p> <p>Der größte Teil der Konfiguration ist in <em>mailcow</em>s <a href="../../prerequisite/prerequisite-dns/">DNS Konfiguration</a> enthalten. Nachdem diese Einrichtung abgeschlossen ist, fügen Sie eine weitere Subdomain für <em>Mailman</em> hinzu, z.B. <code>lists.example.org</code>, die auf denselben Server zeigt:</p>
<div class="highlight"><pre><span></span><code># Name Typ Wert <p>```</p>
lists IN A 1.2.3.4 <h1 id="name-typ-wert">Name Typ Wert<a class="headerlink" href="#name-typ-wert" title="Permanent link">&para;</a></h1>
<p>lists IN A 1.2.3.4
lists IN AAAA dead:beef lists IN AAAA dead:beef
</code></pre></div> ```</p>
<h3 id="installieren-sie-apache-als-reverse-proxy">Installieren Sie <em>Apache</em> als Reverse Proxy<a class="headerlink" href="#installieren-sie-apache-als-reverse-proxy" title="Permanent link">&para;</a></h3> <h3 id="installieren-sie-apache-als-reverse-proxy">Installieren Sie <em>Apache</em> als Reverse Proxy<a class="headerlink" href="#installieren-sie-apache-als-reverse-proxy" title="Permanent link">&para;</a></h3>
<p>Installieren Sie <em>Apache</em>, z.B. mit dieser Anleitung von <em>Digital Ocean</em>: <a href="https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04">How To Install the Apache Web Server on Ubuntu 20.04 (Englisch)</a>.</p> <p>Installieren Sie <em>Apache</em>, z.B. mit dieser Anleitung von <em>Digital Ocean</em>: <a href="https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04">How To Install the Apache Web Server on Ubuntu 20.04 (Englisch)</a>.</p>
<p>Aktivieren Sie bestimmte <em>Apache</em> Module (als <em>root</em> oder <em>sudo</em>):</p> <p>Aktivieren Sie bestimmte <em>Apache</em> Module (als <em>root</em> oder <em>sudo</em>):</p>
<div class="highlight"><pre><span></span><code>a2enmod rewrite proxy proxy_http headers ssl wsgi proxy_uwsgi http2 <p><code>a2enmod rewrite proxy proxy_http headers ssl wsgi proxy_uwsgi http2</code></p>
</code></pre></div>
<p>Möglicherweise müssen Sie weitere Pakete installieren, um diese Module zu erhalten. Dieses <a href="https://launchpad.net/~ondrej/+archive/ubuntu/apache2">PPA</a> von <em>Ondřej Surý</em> könnte Ihnen helfen.</p> <p>Möglicherweise müssen Sie weitere Pakete installieren, um diese Module zu erhalten. Dieses <a href="https://launchpad.net/~ondrej/+archive/ubuntu/apache2">PPA</a> von <em>Ondřej Surý</em> könnte Ihnen helfen.</p>
<h4 id="vhost-konfiguration">vHost-Konfiguration<a class="headerlink" href="#vhost-konfiguration" title="Permanent link">&para;</a></h4> <h4 id="vhost-konfiguration">vHost-Konfiguration<a class="headerlink" href="#vhost-konfiguration" title="Permanent link">&para;</a></h4>
<p>Kopieren Sie die <a href="https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/apache/mailcow.conf">mailcow.conf</a> und die <a href="https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/apache/mailman.conf">mailman.conf</a> in den <em>Apache</em> conf Ordner <code>sites-available</code> (z.B. unter <code>/etc/apache2/sites-available</code>).</p> <p>Kopieren Sie die <a href="https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/apache/mailcow.conf">mailcow.conf</a> und die <a href="https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/apache/mailman.conf">mailman.conf</a> in den <em>Apache</em> conf Ordner <code>sites-available</code> (z.B. unter <code>/etc/apache2/sites-available</code>).</p>
@ -2806,51 +2494,46 @@ lists IN AAAA dead:beef
<li><a href="https://mxtoolbox.com/SuperTool.aspx?action=aaaa%3aMAILMAN_DOMAIN">https://mxtoolbox.com/SuperTool.aspx?action=aaaa%3aMAILMAN_DOMAIN</a></li> <li><a href="https://mxtoolbox.com/SuperTool.aspx?action=aaaa%3aMAILMAN_DOMAIN">https://mxtoolbox.com/SuperTool.aspx?action=aaaa%3aMAILMAN_DOMAIN</a></li>
</ul> </ul>
<p>Installieren Sie <a href="https://certbot.eff.org/">certbot</a> (als <em>root</em> oder <em>sudo</em>):</p> <p>Installieren Sie <a href="https://certbot.eff.org/">certbot</a> (als <em>root</em> oder <em>sudo</em>):</p>
<div class="highlight"><pre><span></span><code>apt install certbot <p><code>apt install certbot</code></p>
</code></pre></div>
<p>Holen Sie sich die gewünschten Zertifikate (als <em>root</em> oder <em>sudo</em>):</p> <p>Holen Sie sich die gewünschten Zertifikate (als <em>root</em> oder <em>sudo</em>):</p>
<div class="highlight"><pre><span></span><code>certbot certonly -d mailcow_HOSTNAME <p><code>certbot certonly -d mailcow_HOSTNAME
certbot certonly -d MAILMAN_DOMAIN certbot certonly -d MAILMAN_DOMAIN</code></p>
</code></pre></div>
<h3 id="installieren-sie-mailcow-mit-mailman-integration">Installieren Sie <em>mailcow</em> mit <em>Mailman</em> Integration<a class="headerlink" href="#installieren-sie-mailcow-mit-mailman-integration" title="Permanent link">&para;</a></h3> <h3 id="installieren-sie-mailcow-mit-mailman-integration">Installieren Sie <em>mailcow</em> mit <em>Mailman</em> Integration<a class="headerlink" href="#installieren-sie-mailcow-mit-mailman-integration" title="Permanent link">&para;</a></h3>
<h4 id="installieren-sie-mailcow">Installieren Sie mailcow<a class="headerlink" href="#installieren-sie-mailcow" title="Permanent link">&para;</a></h4> <h4 id="installieren-sie-mailcow">Installieren Sie mailcow<a class="headerlink" href="#installieren-sie-mailcow" title="Permanent link">&para;</a></h4>
<p>Folgen Sie der <a href="../../i_u_m/i_u_m_install/">mailcow installation</a>. <strong>Schritt 5 auslassen und nicht mit <code>docker-compose</code> starten!</strong></p> <p>Folgen Sie der <a href="../../i_u_m/i_u_m_install/">mailcow installation</a>. <strong>Schritt 5 auslassen und nicht mit <code>docker-compose</code> starten!</strong></p>
<h4 id="mailcow-konfigurieren">Mailcow konfigurieren<a class="headerlink" href="#mailcow-konfigurieren" title="Permanent link">&para;</a></h4> <h4 id="mailcow-konfigurieren">Mailcow konfigurieren<a class="headerlink" href="#mailcow-konfigurieren" title="Permanent link">&para;</a></h4>
<p>Dies ist auch <strong>Schritt 4</strong> in der offiziellen <em>mailcow-Installation</em> (<code>nano mailcow.conf</code>). Passen Sie also Ihre Bedürfnisse an und ändern Sie die folgenden Variablen:</p> <p>Dies ist auch <strong>Schritt 4</strong> in der offiziellen <em>mailcow-Installation</em> (<code>nano mailcow.conf</code>). Passen Sie also Ihre Bedürfnisse an und ändern Sie die folgenden Variablen:</p>
<div class="highlight"><pre><span></span><code>HTTP_PORT=18080 # verwenden Sie nicht 8080, da mailman es braucht <p>```
HTTP_PORT=18080 # verwenden Sie nicht 8080, da mailman es braucht
HTTP_BIND=127.0.0.1 # HTTP_BIND=127.0.0.1 #
HTTPS_PORT=18443 # Sie können 8443 verwenden HTTPS_PORT=18443 # Sie können 8443 verwenden
HTTPS_BIND=127.0.0.1 # # HTTPS_BIND=127.0.0.1 HTTPS_BIND=127.0.0.1 # # HTTPS_BIND=127.0.0.1</p>
<p>SKIP_LETS_ENCRYPT=y # Der Reverse Proxy wird die SSL-Verifizierung durchführen</p>
SKIP_LETS_ENCRYPT=y # Der Reverse Proxy wird die SSL-Verifizierung durchführen <p>SNAT_TO_SOURCE=1.2.3.4 # ändern Sie dies in Ihre IPv4
SNAT_TO_SOURCE=1.2.3.4 # ändern Sie dies in Ihre IPv4
SNAT6_TO_SOURCE=dead:beef # Ändern Sie dies in Ihre globale IPv6 SNAT6_TO_SOURCE=dead:beef # Ändern Sie dies in Ihre globale IPv6
</code></pre></div> ```</p>
<h4 id="mailman-integration-hinzufugen">Mailman-Integration hinzufügen<a class="headerlink" href="#mailman-integration-hinzufugen" title="Permanent link">&para;</a></h4> <h4 id="mailman-integration-hinzufugen">Mailman-Integration hinzufügen<a class="headerlink" href="#mailman-integration-hinzufugen" title="Permanent link">&para;</a></h4>
<p>Erstelle die Datei <code>/opt/mailcow-dockerized/docker-compose.override.yml</code> (z.B. mit <code>nano</code>) und füge die folgenden Zeilen hinzu:</p> <p>Erstelle die Datei <code>/opt/mailcow-dockerized/docker-compose.override.yml</code> (z.B. mit <code>nano</code>) und füge die folgenden Zeilen hinzu:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p>```
version: '2.1'</p>
services: <p>services:
postfix-mailcow: postfix-mailcow:
volumes: volumes:
- /opt/mailman:/opt/mailman - /opt/mailman:/opt/mailman
networks: networks:
- docker-mailman_mailman - docker-mailman_mailman</p>
<p>networks:
networks:
docker-mailman_mailman: docker-mailman_mailman:
external: true external: true
</code></pre></div> ```</p>
<p>Das zusätzliche Volume wird von <em>Mailman</em> verwendet, um zusätzliche Konfigurationsdateien für <em>mailcow postfix</em> zu generieren. Das externe Netzwerk wird von <em>Mailman</em> erstellt und verwendet. <em>mailcow</em> benötigt es, um eingehende Listenmails an <em>Mailman</em> zu liefern.</p> <p>Das zusätzliche Volume wird von <em>Mailman</em> verwendet, um zusätzliche Konfigurationsdateien für <em>mailcow postfix</em> zu generieren. Das externe Netzwerk wird von <em>Mailman</em> erstellt und verwendet. <em>mailcow</em> benötigt es, um eingehende Listenmails an <em>Mailman</em> zu liefern.</p>
<p>Erstellen Sie die Datei <code>/opt/mailcow-dockerized/data/conf/postfix/extra.cf</code> (z.B. mit <code>nano</code>) und fügen Sie die folgenden Zeilen hinzu:</p> <p>Erstellen Sie die Datei <code>/opt/mailcow-dockerized/data/conf/postfix/extra.cf</code> (z.B. mit <code>nano</code>) und fügen Sie die folgenden Zeilen hinzu:</p>
<div class="highlight"><pre><span></span><code># mailman <p>```</p>
<h1 id="mailman">mailman<a class="headerlink" href="#mailman" title="Permanent link">&para;</a></h1>
recipient_delimiter = + <p>recipient_delimiter = +
unknown_local_recipient_reject_code = 550 unknown_local_recipient_reject_code = 550
owner_request_special = no owner_request_special = no</p>
<p>local_recipient_maps =
local_recipient_maps =
regexp:/opt/mailman/core/var/data/postfix_lmtp, regexp:/opt/mailman/core/var/data/postfix_lmtp,
proxy:unix:passwd.byname, proxy:unix:passwd.byname,
$alias_maps $alias_maps
@ -2869,7 +2552,7 @@ relay_domains =
relay_recipient_maps = relay_recipient_maps =
proxy:mysql:/opt/postfix/conf/sql/mysql_relay_recipient_maps.cf, proxy:mysql:/opt/postfix/conf/sql/mysql_relay_recipient_maps.cf,
regexp:/opt/mailman/core/var/data/postfix_lmtp regexp:/opt/mailman/core/var/data/postfix_lmtp
</code></pre></div> ```</p>
<p>Da wir hier die <em>mailcow postfix</em> Konfiguration überschreiben, kann dieser Schritt Ihre normalen Mailtransporte unterbrechen. Überprüfen Sie die <a href="https://github.com/mailcow/mailcow-dockerized/tree/master/data/conf/postfix">originalen Konfigurationsdateien</a>, wenn sich etwas geändert hat.</p> <p>Da wir hier die <em>mailcow postfix</em> Konfiguration überschreiben, kann dieser Schritt Ihre normalen Mailtransporte unterbrechen. Überprüfen Sie die <a href="https://github.com/mailcow/mailcow-dockerized/tree/master/data/conf/postfix">originalen Konfigurationsdateien</a>, wenn sich etwas geändert hat.</p>
<h4 id="ssl-zertifikate">SSL-Zertifikate<a class="headerlink" href="#ssl-zertifikate" title="Permanent link">&para;</a></h4> <h4 id="ssl-zertifikate">SSL-Zertifikate<a class="headerlink" href="#ssl-zertifikate" title="Permanent link">&para;</a></h4>
<p>Da wir <em>mailcow</em> als Proxy verwenden, müssen wir die SSL-Zertifikate in die <em>mailcow</em>-Dateistruktur kopieren. Diese Aufgabe wird das Skript <a href="https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/scripts/renew-ssl.sh">renew-ssl.sh</a> für uns erledigen:</p> <p>Da wir <em>mailcow</em> als Proxy verwenden, müssen wir die SSL-Zertifikate in die <em>mailcow</em>-Dateistruktur kopieren. Diese Aufgabe wird das Skript <a href="https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/scripts/renew-ssl.sh">renew-ssl.sh</a> für uns erledigen:</p>
@ -2880,28 +2563,25 @@ relay_recipient_maps =
<li><strong>Noch nicht ausführen, da wir zuerst Mailman benötigen</strong></li> <li><strong>Noch nicht ausführen, da wir zuerst Mailman benötigen</strong></li>
</ul> </ul>
<p>Sie müssen einen <em>cronjob</em> erstellen, so dass neue Zertifikate kopiert werden. Führen Sie ihn als <em>root</em> oder <em>sudo</em> aus:</p> <p>Sie müssen einen <em>cronjob</em> erstellen, so dass neue Zertifikate kopiert werden. Führen Sie ihn als <em>root</em> oder <em>sudo</em> aus:</p>
<div class="highlight"><pre><span></span><code>crontab -e <p><code>crontab -e</code></p>
</code></pre></div>
<p>Um das Skript jeden Tag um 5 Uhr morgens laufen zu lassen, fügen Sie hinzu:</p> <p>Um das Skript jeden Tag um 5 Uhr morgens laufen zu lassen, fügen Sie hinzu:</p>
<div class="highlight"><pre><span></span><code>0 5 * * * /opt/mailcow-dockerized/renew-ssl.sh <p><code>0 5 * * * /opt/mailcow-dockerized/renew-ssl.sh</code></p>
</code></pre></div>
<h3 id="installieren-sie-mailman">Installieren Sie <em>Mailman</em>.<a class="headerlink" href="#installieren-sie-mailman" title="Permanent link">&para;</a></h3> <h3 id="installieren-sie-mailman">Installieren Sie <em>Mailman</em>.<a class="headerlink" href="#installieren-sie-mailman" title="Permanent link">&para;</a></h3>
<p>Befolgen Sie im Wesentlichen die Anweisungen unter <a href="https://github.com/maxking/docker-mailman">docker-mailman</a>. Da sie sehr umfangreich sind, ist hier in aller Kürze beschrieben, was zu tun ist:</p> <p>Befolgen Sie im Wesentlichen die Anweisungen unter <a href="https://github.com/maxking/docker-mailman">docker-mailman</a>. Da sie sehr umfangreich sind, ist hier in aller Kürze beschrieben, was zu tun ist:</p>
<p>Als <em>root</em> oder <em>sudo</em>:</p> <p>Als <em>root</em> oder <em>sudo</em>:</p>
<div class="highlight"><pre><span></span><code>cd /opt <p><code>cd /opt
mkdir -p mailman/core mkdir -p mailman/core
mkdir -p mailman/web mkdir -p mailman/web
git clone https://github.com/maxking/docker-mailman git clone https://github.com/maxking/docker-mailman
cd docker-mailman cd docker-mailman</code></p>
</code></pre></div>
<h4 id="mailman-konfigurieren">Mailman konfigurieren<a class="headerlink" href="#mailman-konfigurieren" title="Permanent link">&para;</a></h4> <h4 id="mailman-konfigurieren">Mailman konfigurieren<a class="headerlink" href="#mailman-konfigurieren" title="Permanent link">&para;</a></h4>
<p>Erstellen Sie einen langen Schlüssel für <em>Hyperkitty</em>, z.B. mit dem Linux-Befehl <code>cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo</code>. Speichern Sie diesen Schlüssel vorerst als HYPERKITTY_KEY.</p> <p>Erstellen Sie einen langen Schlüssel für <em>Hyperkitty</em>, z.B. mit dem Linux-Befehl <code>cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo</code>. Speichern Sie diesen Schlüssel vorerst als HYPERKITTY_KEY.</p>
<p>Erstellen Sie ein langes Passwort für die Datenbank, z. B. mit dem Linux-Befehl <code>cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo</code>. Speichern Sie dieses Passwort zunächst als DBPASS.</p> <p>Erstellen Sie ein langes Passwort für die Datenbank, z. B. mit dem Linux-Befehl <code>cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo</code>. Speichern Sie dieses Passwort zunächst als DBPASS.</p>
<p>Erstellen Sie einen langen Schlüssel für <em>Django</em>, z. B. mit dem Linux-Befehl <code>cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo</code>. Speichern Sie diesen Schlüssel für einen Moment als DJANGO_KEY.</p> <p>Erstellen Sie einen langen Schlüssel für <em>Django</em>, z. B. mit dem Linux-Befehl <code>cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo</code>. Speichern Sie diesen Schlüssel für einen Moment als DJANGO_KEY.</p>
<p>Erstellen Sie die Datei <code>/opt/docker-mailman/docker-compose.override.yaml</code> und ersetzen Sie <code>HYPERKITTY_KEY</code>, <code>DBPASS</code> und <code>DJANGO_KEY</code> durch die generierten Werte:</p> <p>Erstellen Sie die Datei <code>/opt/docker-mailman/docker-compose.override.yaml</code> und ersetzen Sie <code>HYPERKITTY_KEY</code>, <code>DBPASS</code> und <code>DJANGO_KEY</code> durch die generierten Werte:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2&#39; <p>```
version: '2'</p>
services: <p>services:
mailman-core: mailman-core:
environment: environment:
- DATABASE_URL=postgres://mailman:DBPASS@database/mailmandb - DATABASE_URL=postgres://mailman:DBPASS@database/mailmandb
@ -2910,9 +2590,8 @@ services:
- MTA=postfix - MTA=postfix
restart: always restart: always
networks: networks:
- mailman - mailman</p>
<p>mailman-web:
mailman-web:
environment: environment:
- DATABASE_URL=postgres://mailman:DBPASS@database/mailmandb - DATABASE_URL=postgres://mailman:DBPASS@database/mailmandb
- HYPERKITTY_API_KEY=HYPERKITTY_KEY - HYPERKITTY_API_KEY=HYPERKITTY_KEY
@ -2920,57 +2599,51 @@ services:
- SECRET_KEY=DJANGO_KEY - SECRET_KEY=DJANGO_KEY
- SERVE_FROM_DOMAIN=MAILMAN_DOMAIN # e.g. lists.example.org - SERVE_FROM_DOMAIN=MAILMAN_DOMAIN # e.g. lists.example.org
- MAILMAN_ADMIN_USER=admin # the admin user - MAILMAN_ADMIN_USER=admin # the admin user
- MAILMAN_ADMIN_EMAIL=admin@example.org # the admin mail address - MAILMAN_ADMIN_EMAIL=<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#97;&#100;&#109;&#105;&#110;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#111;&#114;&#103;">&#97;&#100;&#109;&#105;&#110;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#111;&#114;&#103;</a> # the admin mail address
- UWSGI_STATIC_MAP=/static=/opt/mailman-web-data/static - UWSGI_STATIC_MAP=/static=/opt/mailman-web-data/static
restart: always restart: always</p>
<p>database:
database:
environment: environment:
- POSTGRES_PASSWORD=DBPASS - POSTGRES_PASSWORD=DBPASS
restart: always restart: always
</code></pre></div> ```</p>
<p>Bei <code>mailman-web</code> geben Sie die korrekten Werte für <code>SERVE_FROM_DOMAIN</code> (z.B. <code>lists.example.org</code>), <code>MAILMAN_ADMIN_USER</code> und <code>MAILMAN_ADMIN_EMAIL</code> ein. Sie benötigen die Admin-Zugangsdaten, um sich in der Web-Oberfläche (<em>Pistorius</em>) anzumelden. Um <strong>das Passwort zum ersten Mal</strong> zu setzen, verwenden Sie die Funktion <em>Passwort vergessen</em> im Webinterface.</p> <p>Bei <code>mailman-web</code> geben Sie die korrekten Werte für <code>SERVE_FROM_DOMAIN</code> (z.B. <code>lists.example.org</code>), <code>MAILMAN_ADMIN_USER</code> und <code>MAILMAN_ADMIN_EMAIL</code> ein. Sie benötigen die Admin-Zugangsdaten, um sich in der Web-Oberfläche (<em>Pistorius</em>) anzumelden. Um <strong>das Passwort zum ersten Mal</strong> zu setzen, verwenden Sie die Funktion <em>Passwort vergessen</em> im Webinterface.</p>
<p>Über andere Konfigurationsoptionen lesen Sie die Dokumentationen <a href="https://github.com/maxking/docker-mailman#mailman-web-1">Mailman-web</a> und <a href="https://github.com/maxking/docker-mailman#mailman-core-1">Mailman-core</a>.</p> <p>Über andere Konfigurationsoptionen lesen Sie die Dokumentationen <a href="https://github.com/maxking/docker-mailman#mailman-web-1">Mailman-web</a> und <a href="https://github.com/maxking/docker-mailman#mailman-core-1">Mailman-core</a>.</p>
<h4 id="konfigurieren-sie-mailman-core-und-mailman-web">Konfigurieren Sie Mailman core und Mailman web<a class="headerlink" href="#konfigurieren-sie-mailman-core-und-mailman-web" title="Permanent link">&para;</a></h4> <h4 id="konfigurieren-sie-mailman-core-und-mailman-web">Konfigurieren Sie Mailman core und Mailman web<a class="headerlink" href="#konfigurieren-sie-mailman-core-und-mailman-web" title="Permanent link">&para;</a></h4>
<p>Erstellen Sie die Datei <code>/opt/mailman/core/mailman-extra.cfg</code> mit dem folgenden Inhalt. <code>mailman@example.org</code> sollte auf ein gültiges Postfach oder eine Umleitung verweisen.</p> <p>Erstellen Sie die Datei <code>/opt/mailman/core/mailman-extra.cfg</code> mit dem folgenden Inhalt. <code>mailman@example.org</code> sollte auf ein gültiges Postfach oder eine Umleitung verweisen.</p>
<div class="highlight"><pre><span></span><code>[mailman] <p><code>[mailman]
default_language: de default_language: de
site_owner: mailman@example.org site_owner: mailman@example.org</code></p>
</code></pre></div>
<p>Erstellen Sie die Datei <code>/opt/mailman/web/settings_local.py</code> mit dem folgenden Inhalt. <code>mailman@example.org</code> sollte auf ein gültiges Postfach oder eine Umleitung verweisen.</p> <p>Erstellen Sie die Datei <code>/opt/mailman/web/settings_local.py</code> mit dem folgenden Inhalt. <code>mailman@example.org</code> sollte auf ein gültiges Postfach oder eine Umleitung verweisen.</p>
<p><div class="highlight"><pre><span></span><code># Gebietsschema <p>```</p>
LANGUAGE_CODE = &#39;de-de&#39; <h1 id="gebietsschema">Gebietsschema<a class="headerlink" href="#gebietsschema" title="Permanent link">&para;</a></h1>
<p>LANGUAGE_CODE = 'de-de'</p>
# soziale Authentifizierung deaktivieren <h1 id="soziale-authentifizierung-deaktivieren">soziale Authentifizierung deaktivieren<a class="headerlink" href="#soziale-authentifizierung-deaktivieren" title="Permanent link">&para;</a></h1>
SOCIALACCOUNT_PROVIDERS = {} <p>SOCIALACCOUNT_PROVIDERS = {}</p>
<h1 id="andern">ändern<a class="headerlink" href="#andern" title="Permanent link">&para;</a></h1>
# ändern <p>DEFAULT_FROM_EMAIL = '<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#97;&#105;&#108;&#109;&#97;&#110;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#111;&#114;&#103;">&#109;&#97;&#105;&#108;&#109;&#97;&#110;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#111;&#114;&#103;</a>'</p>
DEFAULT_FROM_EMAIL = &#39;mailman@example.org&#39; <p>DEBUG = False
<code>``
DEBUG = False Sie können</code>LANGUAGE_CODE<code>und</code>SOCIALACCOUNT_PROVIDERS<code>an Ihre Bedürfnisse anpassen. Im Moment hat</code>SOCIALACCOUNT_PROVIDERS` keinen Effekt, siehe <a href="https://github.com/g4rf/dockerized-mailcow-mailman/issues/2">issue #2</a>.</p>
</code></pre></div>
Sie können <code>LANGUAGE_CODE</code> und <code>SOCIALACCOUNT_PROVIDERS</code> an Ihre Bedürfnisse anpassen. Im Moment hat <code>SOCIALACCOUNT_PROVIDERS</code> keinen Effekt, siehe <a href="https://github.com/g4rf/dockerized-mailcow-mailman/issues/2">issue #2</a>.</p>
<h3 id="ausfuhren">🏃 Ausführen<a class="headerlink" href="#ausfuhren" title="Permanent link">&para;</a></h3> <h3 id="ausfuhren">🏃 Ausführen<a class="headerlink" href="#ausfuhren" title="Permanent link">&para;</a></h3>
<p>Ausführen (als <em>root</em> oder <em>sudo</em>)</p> <p>Ausführen (als <em>root</em> oder <em>sudo</em>)</p>
<div class="highlight"><pre><span></span><code>a2ensite mailcow.conf <p>```
a2ensite mailcow.conf
a2ensite mailman.conf a2ensite mailman.conf
systemctl restart apache2 systemctl restart apache2</p>
<p>cd /opt/docker-mailman
cd /opt/docker-mailman
docker-compose pull docker-compose pull
docker-compose up -d docker-compose up -d</p>
<p>cd /opt/mailcow-dockerized/
cd /opt/mailcow-dockerized/
docker-compose pull docker-compose pull
./renew-ssl.sh ./renew-ssl.sh
</code></pre></div> ```</p>
<p><strong>Warten Sie ein paar Minuten!</strong> Die Container müssen ihre Datenbanken und Konfigurationsdateien erstellen. Dies kann bis zu 1 Minute und mehr dauern.</p> <p><strong>Warten Sie ein paar Minuten!</strong> Die Container müssen ihre Datenbanken und Konfigurationsdateien erstellen. Dies kann bis zu 1 Minute und mehr dauern.</p>
<h2 id="bemerkungen">Bemerkungen<a class="headerlink" href="#bemerkungen" title="Permanent link">&para;</a></h2> <h2 id="bemerkungen">Bemerkungen<a class="headerlink" href="#bemerkungen" title="Permanent link">&para;</a></h2>
<h3 id="neue-listen-werden-von-postfix-nicht-sofort-erkannt">Neue Listen werden von Postfix nicht sofort erkannt<a class="headerlink" href="#neue-listen-werden-von-postfix-nicht-sofort-erkannt" title="Permanent link">&para;</a></h3> <h3 id="neue-listen-werden-von-postfix-nicht-sofort-erkannt">Neue Listen werden von Postfix nicht sofort erkannt<a class="headerlink" href="#neue-listen-werden-von-postfix-nicht-sofort-erkannt" title="Permanent link">&para;</a></h3>
<p>Wenn man eine neue Liste anlegt und versucht, sofort eine E-Mail zu versenden, antwortet <em>postfix</em> mit <code>Benutzer existiert nicht</code>, weil <em>postfix</em> die Liste noch nicht an <em>Mailman</em> übergeben hat. Die Konfiguration unter <code>/opt/mailman/core/var/data/postfix_lmtp</code> wird nicht sofort aktualisiert. Wenn Sie die Liste sofort benötigen, starten Sie <em>postifx</em> manuell neu:</p> <p>Wenn man eine neue Liste anlegt und versucht, sofort eine E-Mail zu versenden, antwortet <em>postfix</em> mit <code>Benutzer existiert nicht</code>, weil <em>postfix</em> die Liste noch nicht an <em>Mailman</em> übergeben hat. Die Konfiguration unter <code>/opt/mailman/core/var/data/postfix_lmtp</code> wird nicht sofort aktualisiert. Wenn Sie die Liste sofort benötigen, starten Sie <em>postifx</em> manuell neu:</p>
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized <p><code>cd /opt/mailcow-dockerized
docker-compose restart postfix-mailcow docker-compose restart postfix-mailcow</code></p>
</code></pre></div>
<h2 id="update">Update<a class="headerlink" href="#update" title="Permanent link">&para;</a></h2> <h2 id="update">Update<a class="headerlink" href="#update" title="Permanent link">&para;</a></h2>
<p><strong>mailcow</strong> hat sein eigenes Update-Skript in <code>/opt/mailcow-dockerized/update.sh</code>, <a href="../../i_u_m/i_u_m_update/">siehe die Dokumentation</a>.</p> <p><strong>mailcow</strong> hat sein eigenes Update-Skript in <code>/opt/mailcow-dockerized/update.sh</code>, <a href="../../i_u_m/i_u_m_update/">siehe die Dokumentation</a>.</p>
<p>Für <strong>Mailman</strong> holen Sie sich einfach die neueste Version aus dem <a href="https://github.com/maxking/docker-mailman">github repository</a>.</p> <p>Für <strong>Mailman</strong> holen Sie sich einfach die neueste Version aus dem <a href="https://github.com/maxking/docker-mailman">github repository</a>.</p>

Datei anzeigen

@ -2456,11 +2456,11 @@
</div> </div>
<h2 id="das-zu-losende-problem">Das zu lösende Problem<a class="headerlink" href="#das-zu-losende-problem" title="Permanent link">&para;</a></h2> <h2 id="das-zu-losende-problem">Das zu lösende Problem<a class="headerlink" href="#das-zu-losende-problem" title="Permanent link">&para;</a></h2>
<p>mailpiler bietet die Authentifizierung auf Basis von IMAP an, zum Beispiel:</p> <p>mailpiler bietet die Authentifizierung auf Basis von IMAP an, zum Beispiel:</p>
<div class="highlight"><pre><span></span><code><span class="x">$config[&#39;ENABLE_IMAP_AUTH&#39;] = 1;</span> <p><code>php
<span class="x">$config[&#39;IMAP_HOST&#39;] = &#39;mail.example.com&#39;;</span> $config['ENABLE_IMAP_AUTH'] = 1;
<span class="x">$config[&#39;IMAP_PORT&#39;] = 993;</span> $config['IMAP_HOST'] = 'mail.example.com';
<span class="x">$config[&#39;IMAP_SSL&#39;] = true;</span> $config['IMAP_PORT'] = 993;
</code></pre></div> $config['IMAP_SSL'] = true;</code></p>
<ul> <ul>
<li>Wenn Sie sich also mit <code>patrik@example.com</code> anmelden, sehen Sie nur zugestellte E-Mails, die von oder an diese spezielle E-Mail-Adresse gesendet wurden.</li> <li>Wenn Sie sich also mit <code>patrik@example.com</code> anmelden, sehen Sie nur zugestellte E-Mails, die von oder an diese spezielle E-Mail-Adresse gesendet wurden.</li>
<li>Wenn zusätzliche Aliase in mailcow definiert werden, wie z.B. <code>team@example.com</code>, werden Sie keine Emails sehen, die an oder von dieser Email-Adresse gesendet wurden, auch wenn Sie ein Empfänger von Emails sind, die an diese Alias-Adresse gesendet wurden.</li> <li>Wenn zusätzliche Aliase in mailcow definiert werden, wie z.B. <code>team@example.com</code>, werden Sie keine Emails sehen, die an oder von dieser Email-Adresse gesendet wurden, auch wenn Sie ein Empfänger von Emails sind, die an diese Alias-Adresse gesendet wurden.</li>
@ -2487,19 +2487,19 @@
<ol> <ol>
<li> <li>
<p>Setzen Sie die benutzerdefinierte Abfragefunktion von mailpiler und fügen Sie diese an <code>/usr/local/etc/piler/config-site.php</code> an:</p> <p>Setzen Sie die benutzerdefinierte Abfragefunktion von mailpiler und fügen Sie diese an <code>/usr/local/etc/piler/config-site.php</code> an:</p>
<div class="highlight"><pre><span></span><code><span class="x">$config[&#39;MAILCOW_API_KEY&#39;] = &#39;YOUR_READONLY_API_KEY&#39;;</span> <p><code>php
<span class="x">$config[&#39;MAILCOW_SET_REALNAME&#39;] = true; // wenn nicht angegeben, dann ist der Standardwert false</span> $config['MAILCOW_API_KEY'] = 'YOUR_READONLY_API_KEY';
<span class="x">$config[&#39;CUSTOM_EMAIL_QUERY_FUNCTION&#39;] = &#39;query_mailcow_for_email_access&#39;;</span> $config['MAILCOW_SET_REALNAME'] = true; // wenn nicht angegeben, dann ist der Standardwert false
<span class="x">include(&#39;auth-mailcow.php&#39;);</span> $config['CUSTOM_EMAIL_QUERY_FUNCTION'] = 'query_mailcow_for_email_access';
</code></pre></div> include('auth-mailcow.php');</code></p>
<p>Sie können auch den mailcow-Hostnamen ändern, falls erforderlich: <p>Sie können auch den mailcow-Hostnamen ändern, falls erforderlich:
<div class="highlight"><pre><span></span><code><span class="x">$config[&#39;MAILCOW_HOST&#39;] = &#39;mail.domain.tld&#39;; // standardmäßig $config[&#39;IMAP_HOST&#39;]</span> <code>php
</code></pre></div></p> $config['MAILCOW_HOST'] = 'mail.domain.tld'; // standardmäßig $config['IMAP_HOST']</code></p>
</li> </li>
<li> <li>
<p>Laden Sie die PHP-Datei mit den Funktionen aus dem <a href="https://github.com/patschi/mailpiler-mailcow-integration">GitHub Repo</a> herunter:</p> <p>Laden Sie die PHP-Datei mit den Funktionen aus dem <a href="https://github.com/patschi/mailpiler-mailcow-integration">GitHub Repo</a> herunter:</p>
<div class="highlight"><pre><span></span><code>curl -o /usr/local/etc/piler/auth-mailcow.php https://raw.githubusercontent.com/patschi/mailpiler-mailcow-integration/master/auth-mailcow.php <p><code>sh
</code></pre></div> curl -o /usr/local/etc/piler/auth-mailcow.php https://raw.githubusercontent.com/patschi/mailpiler-mailcow-integration/master/auth-mailcow.php</code></p>
</li> </li>
<li> <li>
<p>Erledigt!</p> <p>Erledigt!</p>

Datei anzeigen

@ -2458,14 +2458,13 @@
<h2 id="hintergrund-aufgaben">Hintergrund-Aufgaben<a class="headerlink" href="#hintergrund-aufgaben" title="Permanent link">&para;</a></h2> <h2 id="hintergrund-aufgaben">Hintergrund-Aufgaben<a class="headerlink" href="#hintergrund-aufgaben" title="Permanent link">&para;</a></h2>
<p>Zur Verwendung der empfohlenen Einstellung (Cron) zur Verarbeitung der Hintergrund-Aufgaben müssen in der <code>docker-compose.override.yml</code> folgende Zeilen <p>Zur Verwendung der empfohlenen Einstellung (Cron) zur Verarbeitung der Hintergrund-Aufgaben müssen in der <code>docker-compose.override.yml</code> folgende Zeilen
hinzugefügt werden:</p> hinzugefügt werden:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p><code>version: '2.1'
services: services:
php-fpm-mailcow: php-fpm-mailcow:
labels: labels:
ofelia.enabled: &quot;true&quot; ofelia.enabled: "true"
ofelia.job-exec.nextcloud-cron.schedule: &quot;@every 5m&quot; ofelia.job-exec.nextcloud-cron.schedule: "@every 5m"
ofelia.job-exec.nextcloud-cron.command: &quot;su www-data -s /bin/bash -c \&quot;/usr/local/bin/php -f /web/nextcloud/cron.php\&quot;&quot; ofelia.job-exec.nextcloud-cron.command: "su www-data -s /bin/bash -c \"/usr/local/bin/php -f /web/nextcloud/cron.php\""</code></p>
</code></pre></div>
<p>Nachdem diese Zeilen hinzugefügt wurden muss <code>docker-compose up -d</code> ausgeführt werden, um das Docker Image mit den entsprechenden Labels zu versehen. Danach muss <p>Nachdem diese Zeilen hinzugefügt wurden muss <code>docker-compose up -d</code> ausgeführt werden, um das Docker Image mit den entsprechenden Labels zu versehen. Danach muss
zudem der docker scheduler neu gestartet werden, um den neuen Job zu registrieren. Dazu wird <code>docker-compose restart ofelia-mailcow</code> ausgeführt. Zur zudem der docker scheduler neu gestartet werden, um den neuen Job zu registrieren. Dazu wird <code>docker-compose restart ofelia-mailcow</code> ausgeführt. Zur
Überprüfung, ob die <code>ofelia</code> Konfiguration korrekt ist geladen wurde, kann mittels <code>docker-compose logs ofelia-mailcow</code> nach einer Zeile mit dem Inhalt Überprüfung, ob die <code>ofelia</code> Konfiguration korrekt ist geladen wurde, kann mittels <code>docker-compose logs ofelia-mailcow</code> nach einer Zeile mit dem Inhalt
@ -2518,14 +2517,12 @@ services:
<p>Wenn Sie bisher Nextcloud mit mailcow-Authentifizierung über user_external/IMAP verwendet haben, müssen Sie einige zusätzliche Schritte durchführen, um Ihre bestehenden Benutzerkonten mit OAuth2 zu verknüpfen.</p> <p>Wenn Sie bisher Nextcloud mit mailcow-Authentifizierung über user_external/IMAP verwendet haben, müssen Sie einige zusätzliche Schritte durchführen, um Ihre bestehenden Benutzerkonten mit OAuth2 zu verknüpfen.</p>
<p>1. Klicken Sie auf die Schaltfläche in der oberen rechten Ecke und wählen Sie <em>Apps</em>. Scrollen Sie nach unten zur App <em>Externe Benutzerauthentifizierung</em> und klicken Sie daneben auf <em>Entfernen</em>. <p>1. Klicken Sie auf die Schaltfläche in der oberen rechten Ecke und wählen Sie <em>Apps</em>. Scrollen Sie nach unten zur App <em>Externe Benutzerauthentifizierung</em> und klicken Sie daneben auf <em>Entfernen</em>.
2. Führen Sie die folgenden Abfragen in Ihrer Nextcloud-Datenbank aus (wenn Sie Nextcloud mit dem Skript von mailcow einrichten, können Sie <code>source mailcow.conf &amp;&amp; docker-compose exec mysql-mailcow mysql -u$DBUSER -p$DBPASS $DBNAME</code> ausführen): 2. Führen Sie die folgenden Abfragen in Ihrer Nextcloud-Datenbank aus (wenn Sie Nextcloud mit dem Skript von mailcow einrichten, können Sie <code>source mailcow.conf &amp;&amp; docker-compose exec mysql-mailcow mysql -u$DBUSER -p$DBPASS $DBNAME</code> ausführen):
<div class="highlight"><pre><span></span><code>INSERT INTO nc_users (uid, uid_lower) SELECT DISTINCT uid, LOWER(uid) FROM nc_users_external; <code>INSERT INTO nc_users (uid, uid_lower) SELECT DISTINCT uid, LOWER(uid) FROM nc_users_external;
INSERT INTO nc_sociallogin_connect (uid, identifier) SELECT DISTINCT uid, CONCAT(&quot;Mailcow-&quot;, uid) FROM nc_users_external; INSERT INTO nc_sociallogin_connect (uid, identifier) SELECT DISTINCT uid, CONCAT("Mailcow-", uid) FROM nc_users_external;</code></p>
</code></pre></div></p>
<hr /> <hr />
<p>Wenn Sie Nextcloud bisher ohne mailcow-Authentifizierung, aber mit den gleichen Benutzernamen wie mailcow genutzt haben, können Sie Ihre bestehenden Benutzerkonten auch mit OAuth2 verknüpfen.</p> <p>Wenn Sie Nextcloud bisher ohne mailcow-Authentifizierung, aber mit den gleichen Benutzernamen wie mailcow genutzt haben, können Sie Ihre bestehenden Benutzerkonten auch mit OAuth2 verknüpfen.</p>
<p>1. Führen Sie die folgenden Abfragen in Ihrer Nextcloud-Datenbank aus (wenn Sie Nextcloud mit dem Skript von mailcow einrichten, können Sie <code>source mailcow.conf &amp;&amp; docker-compose exec mysql-mailcow mysql -u$DBUSER -p$DBPASS $DBNAME</code> ausführen): <p>1. Führen Sie die folgenden Abfragen in Ihrer Nextcloud-Datenbank aus (wenn Sie Nextcloud mit dem Skript von mailcow einrichten, können Sie <code>source mailcow.conf &amp;&amp; docker-compose exec mysql-mailcow mysql -u$DBUSER -p$DBPASS $DBNAME</code> ausführen):
<div class="highlight"><pre><span></span><code>INSERT INTO nc_sociallogin_connect (uid, identifier) SELECT DISTINCT uid, CONCAT(&quot;Mailcow-&quot;, uid) FROM nc_users; <code>INSERT INTO nc_sociallogin_connect (uid, identifier) SELECT DISTINCT uid, CONCAT("Mailcow-", uid) FROM nc_users;</code></p>
</code></pre></div></p>
<hr /> <hr />
<h2 id="aktualisieren">Aktualisieren<a class="headerlink" href="#aktualisieren" title="Permanent link">&para;</a></h2> <h2 id="aktualisieren">Aktualisieren<a class="headerlink" href="#aktualisieren" title="Permanent link">&para;</a></h2>
<p>Die Nextcloud-Instanz kann einfach mit dem Web-Update-Mechanismus aktualisiert werden. Bei größeren Updates können nach dem Update weitere Änderungen vorgenommen werden. Nachdem die Nextcloud-Instanz geprüft wurde, werden Probleme angezeigt. Dies können z.B. fehlende Indizes in der DB oder ähnliches sein. <p>Die Nextcloud-Instanz kann einfach mit dem Web-Update-Mechanismus aktualisiert werden. Bei größeren Updates können nach dem Update weitere Änderungen vorgenommen werden. Nachdem die Nextcloud-Instanz geprüft wurde, werden Probleme angezeigt. Dies können z.B. fehlende Indizes in der DB oder ähnliches sein.
@ -2535,13 +2532,12 @@ Es wird angezeigt, welche Befehle ausgeführt werden müssen, diese müssen im p
<hr /> <hr />
<h2 id="fehlersuche-und-fehlerbehebung">Fehlersuche und Fehlerbehebung<a class="headerlink" href="#fehlersuche-und-fehlerbehebung" title="Permanent link">&para;</a></h2> <h2 id="fehlersuche-und-fehlerbehebung">Fehlersuche und Fehlerbehebung<a class="headerlink" href="#fehlersuche-und-fehlerbehebung" title="Permanent link">&para;</a></h2>
<p>Es kann vorkommen, dass Sie die Nextcloud-Instanz von Ihrem Netzwerk aus nicht erreichen können. Dies kann daran liegen, dass der Eintrag Ihres Subnetzes im Array 'trusted_proxies' fehlt. Sie können Änderungen in der Nextcloud config.php in <code>data/web/nextcloud/config/*</code> vornehmen.</p> <p>Es kann vorkommen, dass Sie die Nextcloud-Instanz von Ihrem Netzwerk aus nicht erreichen können. Dies kann daran liegen, dass der Eintrag Ihres Subnetzes im Array 'trusted_proxies' fehlt. Sie können Änderungen in der Nextcloud config.php in <code>data/web/nextcloud/config/*</code> vornehmen.</p>
<div class="highlight"><pre><span></span><code>&#39;trusted_proxies&#39; =&gt; <p><code>'trusted_proxies' =&gt;
array ( array (
0 =&gt; &#39;fd4d:6169:6c63:6f77::/64&#39;, 0 =&gt; 'fd4d:6169:6c63:6f77::/64',
1 =&gt; &#39;172.22.1.0/24&#39;, 1 =&gt; '172.22.1.0/24',
2 =&gt; &#39;NewSubnet/24&#39;, 2 =&gt; 'NewSubnet/24',
), ),</code></p>
</code></pre></div>
<p>Nachdem die Änderungen vorgenommen wurden, muss der nginx-Container neu gestartet werden. <p>Nachdem die Änderungen vorgenommen wurden, muss der nginx-Container neu gestartet werden.
<code>docker-compose restart nginx-mailcow</code></p> <code>docker-compose restart nginx-mailcow</code></p>

Datei anzeigen

@ -2347,7 +2347,7 @@
<p>Um Portainer zu aktivieren, müssen die docker-compose.yml und site.conf für Nginx geändert werden.</p> <p>Um Portainer zu aktivieren, müssen die docker-compose.yml und site.conf für Nginx geändert werden.</p>
<p>1. Erstellen Sie eine neue Datei <code>docker-compose.override.yml</code> im mailcow-dockerized Stammverzeichnis und fügen Sie die folgende Konfiguration ein <p>1. Erstellen Sie eine neue Datei <code>docker-compose.override.yml</code> im mailcow-dockerized Stammverzeichnis und fügen Sie die folgende Konfiguration ein
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <code>version: '2.1'
services: services:
portainer-mailcow: portainer-mailcow:
image: portainer/portainer-ce image: portainer/portainer-ce
@ -2361,42 +2361,40 @@ services:
networks: networks:
mailcow-network: mailcow-network:
aliases: aliases:
- portainer - portainer</code>
</code></pre></div>
2a. Erstelle <code>data/conf/nginx/portainer.conf</code>: 2a. Erstelle <code>data/conf/nginx/portainer.conf</code>:
<div class="highlight"><pre><span></span><code>upstream portainer { ```
upstream portainer {
server portainer-mailcow:9000; server portainer-mailcow:9000;
} }</p>
<p>map $http_upgrade $connection_upgrade {
map $http_upgrade $connection_upgrade {
default upgrade; default upgrade;
&#39;&#39; close; '' close;
} }
</code></pre></div></p> ```</p>
<p>2b. Fügen Sie einen neuen Standort für die Standard-Mailcow-Site ein, indem Sie die Datei <code>data/conf/nginx/site.portainer.custom</code> erstellen: <p>2b. Fügen Sie einen neuen Standort für die Standard-Mailcow-Site ein, indem Sie die Datei <code>data/conf/nginx/site.portainer.custom</code> erstellen:
<div class="highlight"><pre><span></span><code> location /portainer/ { ```
location /portainer/ {
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Host $http_host; # required for docker client&#39;s sake proxy_set_header Host $http_host; # required for docker client's sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client&#39;s IP proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900; proxy_read_timeout 900;</p>
<pre><code>proxy_set_header Connection "";
proxy_set_header Connection &quot;&quot;; proxy_buffers 32 4k;
proxy_buffers 32 4k; proxy_pass http://portainer/;
proxy_pass http://portainer/; </code></pre>
} <p>}</p>
<p>location /portainer/api/websocket/ {
location /portainer/api/websocket/ {
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade; proxy_set_header Connection $connection_upgrade;
proxy_pass http://portainer/api/websocket/; proxy_pass <a href="http://portainer/api/websocket/">http://portainer/api/websocket/</a>;
} }
</code></pre></div></p> ```</p>
<p>3. Übernehmen Sie Ihre Änderungen: <p>3. Übernehmen Sie Ihre Änderungen:
<div class="highlight"><pre><span></span><code>docker-compose up -d &amp;&amp; docker-compose restart nginx-mailcow <code>docker-compose up -d &amp;&amp; docker-compose restart nginx-mailcow</code></p>
</code></pre></div></p>
<p>Nun können Sie einfach zu https://${MAILCOW_HOSTNAME}/portainer/ navigieren, um Ihre Portainer-Container-Überwachungsseite anzuzeigen. Sie werden dann aufgefordert, ein neues Passwort für den <strong>admin</strong> Account anzugeben. Nachdem Sie Ihr Passwort eingegeben haben, können Sie sich mit der Portainer UI verbinden.</p> <p>Nun können Sie einfach zu https://${MAILCOW_HOSTNAME}/portainer/ navigieren, um Ihre Portainer-Container-Überwachungsseite anzuzeigen. Sie werden dann aufgefordert, ein neues Passwort für den <strong>admin</strong> Account anzugeben. Nachdem Sie Ihr Passwort eingegeben haben, können Sie sich mit der Portainer UI verbinden.</p>
<hr> <hr>

Datei anzeigen

@ -2329,38 +2329,134 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#prufen-sie-ob-eine-neuere-version-vorliegt" class="md-nav__link">
Prüfen Sie, ob eine neuere Version vorliegt!
</a>
</li>
<li class="md-nav__item">
<a href="#andern-sie-den-ordnernamen" class="md-nav__link">
Ändern Sie den Ordnernamen
</a>
</li>
<li class="md-nav__item">
<a href="#berechtigungen-andern" class="md-nav__link">
Berechtigungen ändern
</a>
</li>
<li class="md-nav__item">
<a href="#fix-allow-remote-resources-httpsgithubcomroundcuberoundcubemailissues8170-sollte-in-16-nicht-erforderlich-sein" class="md-nav__link">
Fix Allow remote resources (https://github.com/roundcube/roundcubemail/issues/8170) sollte in 1.6 nicht erforderlich sein
</a>
</li>
<li class="md-nav__item">
<a href="#binbash" class="md-nav__link">
!/bin/bash
</a>
<nav class="md-nav" aria-label="!/bin/bash">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#konfigurieren-sie-die-managesieve-filterung" class="md-nav__link"> <a href="#konfigurieren-sie-die-managesieve-filterung" class="md-nav__link">
Konfigurieren Sie die ManageSieve-Filterung Konfigurieren Sie die ManageSieve-Filterung
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#aktivieren-sie-die-funktion-passwort-andern-in-roundcube" class="md-nav__link"> <a href="#aktivieren-sie-die-funktion-passwort-andern-in-roundcube" class="md-nav__link">
Aktivieren Sie die Funktion "Passwort ändern" in Roundcube Aktivieren Sie die Funktion "Passwort ändern" in Roundcube
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#carddav-adressbucher-in-roundcube-einbinden" class="md-nav__link"> <a href="#carddav-adressbucher-in-roundcube-einbinden" class="md-nav__link">
CardDAV Adressbücher in Roundcube einbinden CardDAV Adressbücher in Roundcube einbinden
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#aktualisierung-von-roundcube" class="md-nav__link"> <a href="#aktualisierung-von-roundcube" class="md-nav__link">
Aktualisierung von Roundcube Aktualisierung von Roundcube
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#starten-sie-eine-bash-sitzung-des-mailcow-php-containers" class="md-nav__link">
Starten Sie eine Bash-Sitzung des mailcow PHP-Containers
</a>
</li>
<li class="md-nav__item">
<a href="#installieren-sie-die-erforderliche-upgrade-abhangigkeit-dann-aktualisieren-sie-roundcube-auf-die-gewunschte-version" class="md-nav__link">
Installieren Sie die erforderliche Upgrade-Abhängigkeit, dann aktualisieren Sie Roundcube auf die gewünschte Version
</a>
</li>
<li class="md-nav__item">
<a href="#geben-sie-y-ein-und-drucken-sie-die-eingabetaste-um-ihre-installation-von-roundcube-zu-aktualisieren" class="md-nav__link">
Geben Sie 'Y' ein und drücken Sie die Eingabetaste, um Ihre Installation von Roundcube zu aktualisieren.
</a>
</li>
<li class="md-nav__item">
<a href="#entfernen-sie-ubrig-gebliebene-dateien" class="md-nav__link">
Entfernen Sie übrig gebliebene Dateien
</a>
</li>
<li class="md-nav__item">
<a href="#fix-allow-remote-resources-httpsgithubcomroundcuberoundcubemailissues8170-sollte-in-16-nicht-benotigt-werden" class="md-nav__link">
Fix Allow remote resources (https://github.com/roundcube/roundcubemail/issues/8170) sollte in 1.6 nicht benötigt werden
</a>
<nav class="md-nav" aria-label="Fix Allow remote resources (https://github.com/roundcube/roundcubemail/issues/8170) sollte in 1.6 nicht benötigt werden">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#administratoren-ohne-passwort-in-roundcube-einloggen-lassen" class="md-nav__link"> <a href="#administratoren-ohne-passwort-in-roundcube-einloggen-lassen" class="md-nav__link">
Administratoren ohne Passwort in Roundcube einloggen lassen Administratoren ohne Passwort in Roundcube einloggen lassen
</a> </a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#erlaube-admins-sich-in-roundcube-als-email-benutzer-einzuloggen-ohne-passwort" class="md-nav__link">
Erlaube Admins, sich in Roundcube als Email-Benutzer einzuloggen (ohne Passwort)
</a>
</li>
<li class="md-nav__item">
<a href="#roundcube-mit-plugin-dovecot_impersonate-muss-zuerst-installiert-werden" class="md-nav__link">
Roundcube mit Plugin dovecot_impersonate muss zuerst installiert werden
</a>
</li> </li>
</ul> </ul>
@ -2410,38 +2506,134 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#prufen-sie-ob-eine-neuere-version-vorliegt" class="md-nav__link">
Prüfen Sie, ob eine neuere Version vorliegt!
</a>
</li>
<li class="md-nav__item">
<a href="#andern-sie-den-ordnernamen" class="md-nav__link">
Ändern Sie den Ordnernamen
</a>
</li>
<li class="md-nav__item">
<a href="#berechtigungen-andern" class="md-nav__link">
Berechtigungen ändern
</a>
</li>
<li class="md-nav__item">
<a href="#fix-allow-remote-resources-httpsgithubcomroundcuberoundcubemailissues8170-sollte-in-16-nicht-erforderlich-sein" class="md-nav__link">
Fix Allow remote resources (https://github.com/roundcube/roundcubemail/issues/8170) sollte in 1.6 nicht erforderlich sein
</a>
</li>
<li class="md-nav__item">
<a href="#binbash" class="md-nav__link">
!/bin/bash
</a>
<nav class="md-nav" aria-label="!/bin/bash">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#konfigurieren-sie-die-managesieve-filterung" class="md-nav__link"> <a href="#konfigurieren-sie-die-managesieve-filterung" class="md-nav__link">
Konfigurieren Sie die ManageSieve-Filterung Konfigurieren Sie die ManageSieve-Filterung
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#aktivieren-sie-die-funktion-passwort-andern-in-roundcube" class="md-nav__link"> <a href="#aktivieren-sie-die-funktion-passwort-andern-in-roundcube" class="md-nav__link">
Aktivieren Sie die Funktion "Passwort ändern" in Roundcube Aktivieren Sie die Funktion "Passwort ändern" in Roundcube
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#carddav-adressbucher-in-roundcube-einbinden" class="md-nav__link"> <a href="#carddav-adressbucher-in-roundcube-einbinden" class="md-nav__link">
CardDAV Adressbücher in Roundcube einbinden CardDAV Adressbücher in Roundcube einbinden
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#aktualisierung-von-roundcube" class="md-nav__link"> <a href="#aktualisierung-von-roundcube" class="md-nav__link">
Aktualisierung von Roundcube Aktualisierung von Roundcube
</a> </a>
</li>
</ul>
</nav>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#starten-sie-eine-bash-sitzung-des-mailcow-php-containers" class="md-nav__link">
Starten Sie eine Bash-Sitzung des mailcow PHP-Containers
</a>
</li>
<li class="md-nav__item">
<a href="#installieren-sie-die-erforderliche-upgrade-abhangigkeit-dann-aktualisieren-sie-roundcube-auf-die-gewunschte-version" class="md-nav__link">
Installieren Sie die erforderliche Upgrade-Abhängigkeit, dann aktualisieren Sie Roundcube auf die gewünschte Version
</a>
</li>
<li class="md-nav__item">
<a href="#geben-sie-y-ein-und-drucken-sie-die-eingabetaste-um-ihre-installation-von-roundcube-zu-aktualisieren" class="md-nav__link">
Geben Sie 'Y' ein und drücken Sie die Eingabetaste, um Ihre Installation von Roundcube zu aktualisieren.
</a>
</li>
<li class="md-nav__item">
<a href="#entfernen-sie-ubrig-gebliebene-dateien" class="md-nav__link">
Entfernen Sie übrig gebliebene Dateien
</a>
</li>
<li class="md-nav__item">
<a href="#fix-allow-remote-resources-httpsgithubcomroundcuberoundcubemailissues8170-sollte-in-16-nicht-benotigt-werden" class="md-nav__link">
Fix Allow remote resources (https://github.com/roundcube/roundcubemail/issues/8170) sollte in 1.6 nicht benötigt werden
</a>
<nav class="md-nav" aria-label="Fix Allow remote resources (https://github.com/roundcube/roundcubemail/issues/8170) sollte in 1.6 nicht benötigt werden">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#administratoren-ohne-passwort-in-roundcube-einloggen-lassen" class="md-nav__link"> <a href="#administratoren-ohne-passwort-in-roundcube-einloggen-lassen" class="md-nav__link">
Administratoren ohne Passwort in Roundcube einloggen lassen Administratoren ohne Passwort in Roundcube einloggen lassen
</a> </a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#erlaube-admins-sich-in-roundcube-als-email-benutzer-einzuloggen-ohne-passwort" class="md-nav__link">
Erlaube Admins, sich in Roundcube als Email-Benutzer einzuloggen (ohne Passwort)
</a>
</li>
<li class="md-nav__item">
<a href="#roundcube-mit-plugin-dovecot_impersonate-muss-zuerst-installiert-werden" class="md-nav__link">
Roundcube mit Plugin dovecot_impersonate muss zuerst installiert werden
</a>
</li> </li>
</ul> </ul>
@ -2462,124 +2654,114 @@
<h1>Roundcube</h1>
<h2 id="installation-von-roundcube">Installation von Roundcube<a class="headerlink" href="#installation-von-roundcube" title="Permanent link">&para;</a></h2> <h2 id="installation-von-roundcube">Installation von Roundcube<a class="headerlink" href="#installation-von-roundcube" title="Permanent link">&para;</a></h2>
<p>Laden Sie Roundcube 1.5.x in das Web htdocs Verzeichnis herunter und entpacken Sie es (hier <code>rc/</code>): <p>Laden Sie Roundcube 1.5.x in das Web htdocs Verzeichnis herunter und entpacken Sie es (hier <code>rc/</code>):
<div class="highlight"><pre><span></span><code># Prüfen Sie, ob eine neuere Version vorliegt! ```</p>
cd daten/web <h1 id="prufen-sie-ob-eine-neuere-version-vorliegt">Prüfen Sie, ob eine neuere Version vorliegt!<a class="headerlink" href="#prufen-sie-ob-eine-neuere-version-vorliegt" title="Permanent link">&para;</a></h1>
wget -O - https://github.com/roundcube/roundcubemail/releases/download/1.5.2/roundcubemail-1.5.2-complete.tar.gz | tar xfvz - <p>cd daten/web
wget -O - <a href="https://github.com/roundcube/roundcubemail/releases/download/1.5.2/roundcubemail-1.5.2-complete.tar.gz">https://github.com/roundcube/roundcubemail/releases/download/1.5.2/roundcubemail-1.5.2-complete.tar.gz</a> | tar xfvz -</p>
# Ändern Sie den Ordnernamen <h1 id="andern-sie-den-ordnernamen">Ändern Sie den Ordnernamen<a class="headerlink" href="#andern-sie-den-ordnernamen" title="Permanent link">&para;</a></h1>
mv roundcubemail-1.5.2 rc <p>mv roundcubemail-1.5.2 rc</p>
<h1 id="berechtigungen-andern">Berechtigungen ändern<a class="headerlink" href="#berechtigungen-andern" title="Permanent link">&para;</a></h1>
# Berechtigungen ändern <p>chown -R root: rc/</p>
chown -R root: rc/ <h1 id="fix-allow-remote-resources-httpsgithubcomroundcuberoundcubemailissues8170-sollte-in-16-nicht-erforderlich-sein">Fix Allow remote resources (<a href="https://github.com/roundcube/roundcubemail/issues/8170">https://github.com/roundcube/roundcubemail/issues/8170</a>) sollte in 1.6 nicht erforderlich sein<a class="headerlink" href="#fix-allow-remote-resources-httpsgithubcomroundcuberoundcubemailissues8170-sollte-in-16-nicht-erforderlich-sein" title="Permanent link">&para;</a></h1>
<p>sed -i "s/\$prefix = '.\/';/\$prefix = preg_replace('\/[\?\&amp;].*\$\/', '', \$_SERVER['REQUEST_URI'] \?\? '') \?: '.\/';/g" rc/program/include/rcmail.php
# Fix Allow remote resources (https://github.com/roundcube/roundcubemail/issues/8170) sollte in 1.6 nicht erforderlich sein ```</p>
sed -i &quot;s/\$prefix = &#39;\.\/&#39;;/\$prefix = preg_replace\(&#39;\/\[\?\&amp;]\.\*\$\/&#39;, &#39;&#39;, \$_SERVER\[&#39;REQUEST_URI&#39;] \?\? &#39;&#39;\) \?: &#39;\.\/&#39;;/g&quot; rc/program/include/rcmail.php
</code></pre></div></p>
<p>Wenn Sie eine Rechtschreibprüfung benötigen, erstellen Sie eine Datei <code>data/hooks/phpfpm/aspell.sh</code> mit folgendem Inhalt und geben Sie dann <code>chmod +x data/hooks/phpfpm/aspell.sh</code> ein. Dadurch wird eine lokale Rechtschreibprüfung installiert. Beachten Sie, dass die meisten modernen Webbrowser eine eingebaute Rechtschreibprüfung haben, so dass Sie diese vielleicht nicht benötigen. <p>Wenn Sie eine Rechtschreibprüfung benötigen, erstellen Sie eine Datei <code>data/hooks/phpfpm/aspell.sh</code> mit folgendem Inhalt und geben Sie dann <code>chmod +x data/hooks/phpfpm/aspell.sh</code> ein. Dadurch wird eine lokale Rechtschreibprüfung installiert. Beachten Sie, dass die meisten modernen Webbrowser eine eingebaute Rechtschreibprüfung haben, so dass Sie diese vielleicht nicht benötigen.
<div class="highlight"><pre><span></span><code>#!/bin/bash ```</p>
apk update <h1 id="binbash">!/bin/bash<a class="headerlink" href="#binbash" title="Permanent link">&para;</a></h1>
<p>apk update
apk add aspell-de # oder jede andere Sprache apk add aspell-de # oder jede andere Sprache
</code></pre></div></p> ```</p>
<p>Erstellen Sie eine Datei <code>data/web/rc/config/config.inc.php</code> mit dem folgenden Inhalt. <p>Erstellen Sie eine Datei <code>data/web/rc/config/config.inc.php</code> mit dem folgenden Inhalt.
- <strong>Ändern Sie den Parameter <code>des_key</code> auf einen Zufallswert.</strong> Er wird verwendet, um Ihr IMAP-Passwort vorübergehend zu speichern. - <strong>Ändern Sie den Parameter <code>des_key</code> auf einen Zufallswert.</strong> Er wird verwendet, um Ihr IMAP-Passwort vorübergehend zu speichern.
- Der <code>db_prefix</code> ist optional, wird aber empfohlen. - Der <code>db_prefix</code> ist optional, wird aber empfohlen.
- Wenn Sie die Rechtschreibprüfung im obigen Schritt nicht installiert haben, entfernen Sie den Parameter <code>spellcheck_engine</code> und ersetzen ihn durch <code>$config['enable_spellcheck'] = false;</code>. - Wenn Sie die Rechtschreibprüfung im obigen Schritt nicht installiert haben, entfernen Sie den Parameter <code>spellcheck_engine</code> und ersetzen ihn durch <code>$config['enable_spellcheck'] = false;</code>.
<div class="highlight"><pre><span></span><code>&lt;?php <code>&lt;?php
error_reporting(0); error_reporting(0);
if (!file_exists(&#39;/tmp/mime.types&#39;)) { if (!file_exists('/tmp/mime.types')) {
file_put_contents(&quot;/tmp/mime.types&quot;, fopen(&quot;http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types&quot;, &#39;r&#39;)); file_put_contents("/tmp/mime.types", fopen("http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types", 'r'));
} }
$config = array(); $config = array();
$config[&#39;db_dsnw&#39;] = &#39;mysql://&#39; . getenv(&#39;DBUSER&#39;) . &#39;:&#39; . getenv(&#39;DBPASS&#39;) . &#39;@mysql/&#39; . getenv(&#39;DBNAME&#39;); $config['db_dsnw'] = 'mysql://' . getenv('DBUSER') . ':' . getenv('DBPASS') . '@mysql/' . getenv('DBNAME');
$config[&#39;default_host&#39;] = &#39;tls://dovecot&#39;; $config['default_host'] = 'tls://dovecot';
$config[&#39;default_port&#39;] = &#39;143&#39;; $config['default_port'] = '143';
$config[&#39;smtp_server&#39;] = &#39;tls://postfix&#39;; $config['smtp_server'] = 'tls://postfix';
$config[&#39;smtp_port&#39;] = 587; $config['smtp_port'] = 587;
$config[&#39;smtp_user&#39;] = &#39;%u&#39;; $config['smtp_user'] = '%u';
$config[&#39;smtp_pass&#39;] = &#39;%p&#39;; $config['smtp_pass'] = '%p';
$config[&#39;support_url&#39;] = &#39;&#39;; $config['support_url'] = '';
$config[&#39;product_name&#39;] = &#39;Roundcube Webmail&#39;; $config['product_name'] = 'Roundcube Webmail';
$config[&#39;des_key&#39;] = &#39;yourrandomstring_changeme&#39;; $config['des_key'] = 'yourrandomstring_changeme';
$config[&#39;log_dir&#39;] = &#39;/dev/null&#39;; $config['log_dir'] = '/dev/null';
$config[&#39;temp_dir&#39;] = &#39;/tmp&#39;; $config['temp_dir'] = '/tmp';
$config[&#39;plugins&#39;] = array( $config['plugins'] = array(
&#39;archive&#39;, 'archive',
&#39;managesieve&#39; 'managesieve'
); );
$config[&#39;spellcheck_engine&#39;] = &#39;aspell&#39;; $config['spellcheck_engine'] = 'aspell';
$config[&#39;mime_types&#39;] = &#39;/tmp/mime.types&#39;; $config['mime_types'] = '/tmp/mime.types';
$config[&#39;imap_conn_options&#39;] = array( $config['imap_conn_options'] = array(
&#39;ssl&#39; =&gt; array(&#39;verify_peer&#39; =&gt; false, &#39;verify_peer_name&#39; =&gt; false, &#39;allow_self_signed&#39; =&gt; true) 'ssl' =&gt; array('verify_peer' =&gt; false, 'verify_peer_name' =&gt; false, 'allow_self_signed' =&gt; true)
); );
$config[&#39;enable_installer&#39;] = true; $config['enable_installer'] = true;
$config[&#39;smtp_conn_options&#39;] = array( $config['smtp_conn_options'] = array(
&#39;ssl&#39; =&gt; array(&#39;verify_peer&#39; =&gt; false, &#39;verify_peer_name&#39; =&gt; false, &#39;allow_self_signed&#39; =&gt; true) 'ssl' =&gt; array('verify_peer' =&gt; false, 'verify_peer_name' =&gt; false, 'allow_self_signed' =&gt; true)
); );
$config[&#39;db_prefix&#39;] = &#39;mailcow_rc1&#39;; $config['db_prefix'] = 'mailcow_rc1';</code></p>
</code></pre></div></p>
<p>Richten Sie Ihren Browser auf <code>https://myserver/rc/installer</code> und folgen Sie den Anweisungen. <p>Richten Sie Ihren Browser auf <code>https://myserver/rc/installer</code> und folgen Sie den Anweisungen.
Initialisiere die Datenbank und verlasse das Installationsprogramm.</p> Initialisiere die Datenbank und verlasse das Installationsprogramm.</p>
<p>**Löschen Sie das Verzeichnis <code>data/web/rc/installer</code> nach einer erfolgreichen Installation!</p> <p>**Löschen Sie das Verzeichnis <code>data/web/rc/installer</code> nach einer erfolgreichen Installation!</p>
<h2 id="konfigurieren-sie-die-managesieve-filterung">Konfigurieren Sie die ManageSieve-Filterung<a class="headerlink" href="#konfigurieren-sie-die-managesieve-filterung" title="Permanent link">&para;</a></h2> <h2 id="konfigurieren-sie-die-managesieve-filterung">Konfigurieren Sie die ManageSieve-Filterung<a class="headerlink" href="#konfigurieren-sie-die-managesieve-filterung" title="Permanent link">&para;</a></h2>
<p>Öffnen Sie <code>data/web/rc/plugins/managesieve/config.inc.php</code> und ändern Sie die folgenden Parameter (oder fügen Sie sie am Ende der Datei hinzu): <p>Öffnen Sie <code>data/web/rc/plugins/managesieve/config.inc.php</code> und ändern Sie die folgenden Parameter (oder fügen Sie sie am Ende der Datei hinzu):
<div class="highlight"><pre><span></span><code>$config[&#39;managesieve_port&#39;] = 4190; <code>$config['managesieve_port'] = 4190;
$config[&#39;managesieve_host&#39;] = &#39;tls://dovecot&#39;; $config['managesieve_host'] = 'tls://dovecot';
$config[&#39;managesieve_conn_options&#39;] = array( $config['managesieve_conn_options'] = array(
ssl&#39; =&gt; array(&#39;verify_peer&#39; =&gt; false, &#39;verify_peer_name&#39; =&gt; false, &#39;allow_self_signed&#39; =&gt; true) ssl' =&gt; array('verify_peer' =&gt; false, 'verify_peer_name' =&gt; false, 'allow_self_signed' =&gt; true)
); );
// Aktiviert separate Verwaltungsschnittstelle für Urlaubsantworten (außer Haus) // Aktiviert separate Verwaltungsschnittstelle für Urlaubsantworten (außer Haus)
// 0 - kein separater Abschnitt (Standard), // 0 - kein separater Abschnitt (Standard),
// 1 - Abschnitt &quot;Urlaub&quot; hinzufügen, // 1 - Abschnitt "Urlaub" hinzufügen,
// 2 - Abschnitt &quot;Urlaub&quot; hinzufügen, aber Abschnitt &quot;Filter&quot; ausblenden // 2 - Abschnitt "Urlaub" hinzufügen, aber Abschnitt "Filter" ausblenden
$config[&#39;managesieve_vacation&#39;] = 1; $config['managesieve_vacation'] = 1;</code></p>
</code></pre></div></p>
<h2 id="aktivieren-sie-die-funktion-passwort-andern-in-roundcube">Aktivieren Sie die Funktion "Passwort ändern" in Roundcube<a class="headerlink" href="#aktivieren-sie-die-funktion-passwort-andern-in-roundcube" title="Permanent link">&para;</a></h2> <h2 id="aktivieren-sie-die-funktion-passwort-andern-in-roundcube">Aktivieren Sie die Funktion "Passwort ändern" in Roundcube<a class="headerlink" href="#aktivieren-sie-die-funktion-passwort-andern-in-roundcube" title="Permanent link">&para;</a></h2>
<p>Öffnen Sie <code>data/web/rc/config/config.inc.php</code> und aktivieren Sie das Passwort-Plugin:</p> <p>Öffnen Sie <code>data/web/rc/config/config.inc.php</code> und aktivieren Sie das Passwort-Plugin:</p>
<div class="highlight"><pre><span></span><code>[...] <p><code>[...]
$config[&#39;plugins&#39;] = array( $config['plugins'] = array(
&#39;archive&#39;, 'archive',
&#39;password&#39;, 'password',
); );
[...] [...]</code></p>
</code></pre></div>
<p>Öffnen Sie <code>data/web/rc/plugins/password/password.php</code>, suchen Sie nach <code>case 'ssha':</code> und fügen Sie oben hinzu:</p> <p>Öffnen Sie <code>data/web/rc/plugins/password/password.php</code>, suchen Sie nach <code>case 'ssha':</code> und fügen Sie oben hinzu:</p>
<div class="highlight"><pre><span></span><code> case &#39;ssha256&#39;: <p><code>case 'ssha256':
$salt = rcube_utils::random_bytes(8); $salt = rcube_utils::random_bytes(8);
$crypted = base64_encode( hash(&#39;sha256&#39;, $password . $salt, TRUE ) . $salt ); $crypted = base64_encode( hash('sha256', $password . $salt, TRUE ) . $salt );
$prefix = &#39;{SSHA256}&#39;; $prefix = '{SSHA256}';
break; break;</code></p>
</code></pre></div>
<p>Öffnen Sie <code>data/web/rc/plugins/password/config.inc.php</code> und ändern Sie die folgenden Parameter (oder fügen Sie sie am Ende der Datei hinzu):</p> <p>Öffnen Sie <code>data/web/rc/plugins/password/config.inc.php</code> und ändern Sie die folgenden Parameter (oder fügen Sie sie am Ende der Datei hinzu):</p>
<div class="highlight"><pre><span></span><code>$config[&#39;password_driver&#39;] = &#39;sql&#39;; <p><code>$config['password_driver'] = 'sql';
$config[&#39;password_algorithm&#39;] = &#39;ssha256&#39;; $config['password_algorithm'] = 'ssha256';
$config[&#39;password_algorithm_prefix&#39;] = &#39;{SSHA256}&#39;; $config['password_algorithm_prefix'] = '{SSHA256}';
$config[&#39;password_query&#39;] = &quot;UPDATE mailbox SET password = %P WHERE username = %u&quot;; $config['password_query'] = "UPDATE mailbox SET password = %P WHERE username = %u";</code></p>
</code></pre></div>
<h2 id="carddav-adressbucher-in-roundcube-einbinden">CardDAV Adressbücher in Roundcube einbinden<a class="headerlink" href="#carddav-adressbucher-in-roundcube-einbinden" title="Permanent link">&para;</a></h2> <h2 id="carddav-adressbucher-in-roundcube-einbinden">CardDAV Adressbücher in Roundcube einbinden<a class="headerlink" href="#carddav-adressbucher-in-roundcube-einbinden" title="Permanent link">&para;</a></h2>
<p>Laden Sie die neueste Version von <a href="https://github.com/mstilkerich/rcmcarddav">RCMCardDAV</a> in das Roundcube Plugin Verzeichnis und entpacken Sie es (hier <code>rc/plugins</code>): <p>Laden Sie die neueste Version von <a href="https://github.com/mstilkerich/rcmcarddav">RCMCardDAV</a> in das Roundcube Plugin Verzeichnis und entpacken Sie es (hier <code>rc/plugins</code>):
<div class="highlight"><pre><span></span><code>cd data/web/rc/plugins <code>cd data/web/rc/plugins
wget -O - https://github.com/mstilkerich/rcmcarddav/releases/download/v4.3.0/carddav-v4.3.0.tar.gz | tar xfvz - wget -O - https://github.com/mstilkerich/rcmcarddav/releases/download/v4.3.0/carddav-v4.3.0.tar.gz | tar xfvz -
chown -R root: carddav/ chown -R root: carddav/</code></p>
</code></pre></div></p>
<p>Kopieren Sie die Datei <code>config.inc.php.dist</code> nach <code>config.inc.php</code> (hier in <code>rc/plugins/carddav</code>) und fügen Sie die folgende Voreinstellung an das Ende der Datei an - vergessen Sie nicht, <code>mx.example.org</code> durch Ihren eigenen Hostnamen zu ersetzen: <p>Kopieren Sie die Datei <code>config.inc.php.dist</code> nach <code>config.inc.php</code> (hier in <code>rc/plugins/carddav</code>) und fügen Sie die folgende Voreinstellung an das Ende der Datei an - vergessen Sie nicht, <code>mx.example.org</code> durch Ihren eigenen Hostnamen zu ersetzen:
<div class="highlight"><pre><span></span><code>$prefs[&#39;SOGo&#39;] = array( <code>$prefs['SOGo'] = array(
&#39;name&#39; =&gt; &#39;SOGo&#39;, 'name' =&gt; 'SOGo',
&#39;username&#39; =&gt; &#39;%u&#39;, 'username' =&gt; '%u',
&#39;password&#39; =&gt; &#39;%p&#39;, 'password' =&gt; '%p',
&#39;url&#39; =&gt; &#39;https://mx.example.org/SOGo/dav/%u/&#39;, 'url' =&gt; 'https://mx.example.org/SOGo/dav/%u/',
&#39;carddav_name_only&#39; =&gt; true, 'carddav_name_only' =&gt; true,
&#39;use_categories&#39; =&gt; true, 'use_categories' =&gt; true,
&#39;active&#39; =&gt; true, 'active' =&gt; true,
&#39;readonly&#39; =&gt; false, 'readonly' =&gt; false,
&#39;refresh_time&#39; =&gt; &#39;02:00:00&#39;, 'refresh_time' =&gt; '02:00:00',
&#39;fixed&#39; =&gt; array( &#39;active&#39;, &#39;name&#39;, &#39;username&#39;, &#39;password&#39;, &#39;refresh_time&#39; ), 'fixed' =&gt; array( 'active', 'name', 'username', 'password', 'refresh_time' ),
&#39;hide&#39; =&gt; false, 'hide' =&gt; false,
); );</code>
</code></pre></div>
Bitte beachten Sie, dass dieses Preset nur das Standard-Adressbuch integriert (dasjenige, das den Namen "Persönliches Adressbuch" trägt und nicht gelöscht werden kann). Weitere Adressbücher werden derzeit nicht automatisch erkannt, können aber manuell in den Roundcube-Einstellungen hinzugefügt werden.</p> Bitte beachten Sie, dass dieses Preset nur das Standard-Adressbuch integriert (dasjenige, das den Namen "Persönliches Adressbuch" trägt und nicht gelöscht werden kann). Weitere Adressbücher werden derzeit nicht automatisch erkannt, können aber manuell in den Roundcube-Einstellungen hinzugefügt werden.</p>
<p>Aktivieren Sie das Plugin, indem Sie <code>carddav</code> zu <code>$config['plugins']</code> in <code>rc/config/config.inc.php</code> hinzufügen.</p> <p>Aktivieren Sie das Plugin, indem Sie <code>carddav</code> zu <code>$config['plugins']</code> in <code>rc/config/config.inc.php</code> hinzufügen.</p>
<p>Wenn Sie die Standard-Adressbücher (die in der Roundcube-Datenbank gespeichert sind) entfernen möchten, so dass nur die CardDAV-Adressbücher zugänglich sind, fügen Sie <code>$config['address_book_type'] = '';</code> in die Konfigurationsdatei <code>data/web/rc/config/config.inc.php</code> ein.</p> <p>Wenn Sie die Standard-Adressbücher (die in der Roundcube-Datenbank gespeichert sind) entfernen möchten, so dass nur die CardDAV-Adressbücher zugänglich sind, fügen Sie <code>$config['address_book_type'] = '';</code> in die Konfigurationsdatei <code>data/web/rc/config/config.inc.php</code> ein.</p>
@ -2587,75 +2769,70 @@ Bitte beachten Sie, dass dieses Preset nur das Standard-Adressbuch integriert (d
<p>Optional können Sie Roundcube's Link zu der mailcow Apps Liste hinzufügen. <p>Optional können Sie Roundcube's Link zu der mailcow Apps Liste hinzufügen.
Um dies zu tun, öffnen oder erstellen Sie <code>data/web/inc/vars.local.inc.php</code> und fügen Sie den folgenden Code-Block hinzu:</p> Um dies zu tun, öffnen oder erstellen Sie <code>data/web/inc/vars.local.inc.php</code> und fügen Sie den folgenden Code-Block hinzu:</p>
<p><em>HINWEIS: Vergessen Sie nicht, das <code>&lt;?php</code> Trennzeichen in der ersten Zeile einzufügen</em></p> <p><em>HINWEIS: Vergessen Sie nicht, das <code>&lt;?php</code> Trennzeichen in der ersten Zeile einzufügen</em></p>
<div class="highlight"><pre><span></span><code>... <p><code>...
$MAILCOW_APPS = array( $MAILCOW_APPS = array(
array( array(
&#39;name&#39; =&gt; &#39;SOGo&#39;, 'name' =&gt; 'SOGo',
&#39;link&#39; =&gt; &#39;/SOGo/&#39; 'link' =&gt; '/SOGo/'
), ),
array( array(
&#39;name&#39; =&gt; &#39;Roundcube&#39;, 'name' =&gt; 'Roundcube',
&#39;link&#39; =&gt; &#39;/rc/&#39; 'link' =&gt; '/rc/'
) )
); );
... ...</code></p>
</code></pre></div>
<h2 id="aktualisierung-von-roundcube">Aktualisierung von Roundcube<a class="headerlink" href="#aktualisierung-von-roundcube" title="Permanent link">&para;</a></h2> <h2 id="aktualisierung-von-roundcube">Aktualisierung von Roundcube<a class="headerlink" href="#aktualisierung-von-roundcube" title="Permanent link">&para;</a></h2>
<p>Ein Upgrade von Roundcube ist recht einfach: Gehen Sie auf die <a href="https://github.com/roundcube/roundcubemail/releases">Github releases</a> Seite für Roundcube und holen Sie sich den Link für die "complete.tar.gz" Datei für die gewünschte Version. Dann folgen Sie den untenstehenden Befehlen und ändern Sie die URL und den Namen des Roundcube-Ordners, falls nötig. </p> <p>Ein Upgrade von Roundcube ist recht einfach: Gehen Sie auf die <a href="https://github.com/roundcube/roundcubemail/releases">Github releases</a> Seite für Roundcube und holen Sie sich den Link für die "complete.tar.gz" Datei für die gewünschte Version. Dann folgen Sie den untenstehenden Befehlen und ändern Sie die URL und den Namen des Roundcube-Ordners, falls nötig. </p>
<div class="highlight"><pre><span></span><code># Starten Sie eine Bash-Sitzung des mailcow PHP-Containers <p>```</p>
docker exec -it mailcowdockerized_php-fpm-mailcow_1 bash <h1 id="starten-sie-eine-bash-sitzung-des-mailcow-php-containers">Starten Sie eine Bash-Sitzung des mailcow PHP-Containers<a class="headerlink" href="#starten-sie-eine-bash-sitzung-des-mailcow-php-containers" title="Permanent link">&para;</a></h1>
<p>docker exec -it mailcowdockerized_php-fpm-mailcow_1 bash</p>
# Installieren Sie die erforderliche Upgrade-Abhängigkeit, dann aktualisieren Sie Roundcube auf die gewünschte Version <h1 id="installieren-sie-die-erforderliche-upgrade-abhangigkeit-dann-aktualisieren-sie-roundcube-auf-die-gewunschte-version">Installieren Sie die erforderliche Upgrade-Abhängigkeit, dann aktualisieren Sie Roundcube auf die gewünschte Version<a class="headerlink" href="#installieren-sie-die-erforderliche-upgrade-abhangigkeit-dann-aktualisieren-sie-roundcube-auf-die-gewunschte-version" title="Permanent link">&para;</a></h1>
apk add rsync <p>apk add rsync
cd /tmp cd /tmp
wget -O - https://github.com/roundcube/roundcubemail/releases/download/1.5.2/roundcubemail-1.5.2-complete.tar.gz | tar xfvz - wget -O - <a href="https://github.com/roundcube/roundcubemail/releases/download/1.5.2/roundcubemail-1.5.2-complete.tar.gz">https://github.com/roundcube/roundcubemail/releases/download/1.5.2/roundcubemail-1.5.2-complete.tar.gz</a> | tar xfvz -
cd roundcubemail-1.5.2 cd roundcubemail-1.5.2
bin/installto.sh /web/rc bin/installto.sh /web/rc</p>
<h1 id="geben-sie-y-ein-und-drucken-sie-die-eingabetaste-um-ihre-installation-von-roundcube-zu-aktualisieren">Geben Sie 'Y' ein und drücken Sie die Eingabetaste, um Ihre Installation von Roundcube zu aktualisieren.<a class="headerlink" href="#geben-sie-y-ein-und-drucken-sie-die-eingabetaste-um-ihre-installation-von-roundcube-zu-aktualisieren" title="Permanent link">&para;</a></h1>
# Geben Sie &#39;Y&#39; ein und drücken Sie die Eingabetaste, um Ihre Installation von Roundcube zu aktualisieren. <h1 id="entfernen-sie-ubrig-gebliebene-dateien">Entfernen Sie übrig gebliebene Dateien<a class="headerlink" href="#entfernen-sie-ubrig-gebliebene-dateien" title="Permanent link">&para;</a></h1>
<p>cd /tmp
# Entfernen Sie übrig gebliebene Dateien rm -rf roundcube*</p>
cd /tmp <h1 id="fix-allow-remote-resources-httpsgithubcomroundcuberoundcubemailissues8170-sollte-in-16-nicht-benotigt-werden">Fix Allow remote resources (<a href="https://github.com/roundcube/roundcubemail/issues/8170">https://github.com/roundcube/roundcubemail/issues/8170</a>) sollte in 1.6 nicht benötigt werden<a class="headerlink" href="#fix-allow-remote-resources-httpsgithubcomroundcuberoundcubemailissues8170-sollte-in-16-nicht-benotigt-werden" title="Permanent link">&para;</a></h1>
rm -rf roundcube* <p>sed -i "s/\$prefix = '.\/';/\$prefix = preg_replace('\/[\?\&amp;].*\$\/', '', \$_SERVER['REQUEST_URI'] \?\? '') \?: '.\/';/g" /web/rc/program/include/rcmail.php
```</p>
# Fix Allow remote resources (https://github.com/roundcube/roundcubemail/issues/8170) sollte in 1.6 nicht benötigt werden
sed -i &quot;s/\$prefix = &#39;\.\/&#39;;/\$prefix = preg_replace\(&#39;\/\[\?\&amp;]\.\*\$\/&#39;, &#39;&#39;, \$_SERVER\[&#39;REQUEST_URI&#39;] \?\? &#39;&#39;\) \?: &#39;\.\/&#39;;/g&quot; /web/rc/program/include/rcmail.php
</code></pre></div>
<h2 id="administratoren-ohne-passwort-in-roundcube-einloggen-lassen">Administratoren ohne Passwort in Roundcube einloggen lassen<a class="headerlink" href="#administratoren-ohne-passwort-in-roundcube-einloggen-lassen" title="Permanent link">&para;</a></h2> <h2 id="administratoren-ohne-passwort-in-roundcube-einloggen-lassen">Administratoren ohne Passwort in Roundcube einloggen lassen<a class="headerlink" href="#administratoren-ohne-passwort-in-roundcube-einloggen-lassen" title="Permanent link">&para;</a></h2>
<p>Installieren Sie zunächst das Plugin [dovecot_impersonate] (<a href="https://github.com/corbosman/dovecot_impersonate/">https://github.com/corbosman/dovecot_impersonate/</a>) und fügen Sie Roundcube als App hinzu (siehe oben).</p> <p>Installieren Sie zunächst das Plugin [dovecot_impersonate] (<a href="https://github.com/corbosman/dovecot_impersonate/">https://github.com/corbosman/dovecot_impersonate/</a>) und fügen Sie Roundcube als App hinzu (siehe oben).</p>
<p>Editieren Sie <code>mailcow.conf</code> und fügen Sie folgendes hinzu:</p> <p>Editieren Sie <code>mailcow.conf</code> und fügen Sie folgendes hinzu:</p>
<div class="highlight"><pre><span></span><code># Erlaube Admins, sich in Roundcube als Email-Benutzer einzuloggen (ohne Passwort) <p>```</p>
# Roundcube mit Plugin dovecot_impersonate muss zuerst installiert werden <h1 id="erlaube-admins-sich-in-roundcube-als-email-benutzer-einzuloggen-ohne-passwort">Erlaube Admins, sich in Roundcube als Email-Benutzer einzuloggen (ohne Passwort)<a class="headerlink" href="#erlaube-admins-sich-in-roundcube-als-email-benutzer-einzuloggen-ohne-passwort" title="Permanent link">&para;</a></h1>
<h1 id="roundcube-mit-plugin-dovecot_impersonate-muss-zuerst-installiert-werden">Roundcube mit Plugin dovecot_impersonate muss zuerst installiert werden<a class="headerlink" href="#roundcube-mit-plugin-dovecot_impersonate-muss-zuerst-installiert-werden" title="Permanent link">&para;</a></h1>
ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE=y <p>ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE=y
</code></pre></div> ```</p>
<p>Editieren Sie <code>docker-compose.override.yml</code> und verfassen/erweitern Sie den Abschnitt für <code>php-fpm-mailcow</code>:</p> <p>Editieren Sie <code>docker-compose.override.yml</code> und verfassen/erweitern Sie den Abschnitt für <code>php-fpm-mailcow</code>:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p><code>yml
version: '2.1'
services: services:
php-fpm-mailcow: php-fpm-mailcow:
environment: environment:
- ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE=${ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE:-n} - ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE=${ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE:-n}</code></p>
</code></pre></div>
<p>Bearbeiten Sie <code>data/web/js/site/mailbox.js</code> und den folgenden Code nach <a href="https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/js/site/mailbox.js#L485-L487"><code>if (ALLOW_ADMIN_EMAIL_LOGIN) { ... }</code></a></p> <p>Bearbeiten Sie <code>data/web/js/site/mailbox.js</code> und den folgenden Code nach <a href="https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/js/site/mailbox.js#L485-L487"><code>if (ALLOW_ADMIN_EMAIL_LOGIN) { ... }</code></a></p>
<div class="highlight"><pre><span></span><code><span class="k">if</span> <span class="p">(</span><span class="nx">ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE</span><span class="p">)</span> <span class="p">{</span> <p><code>js
<span class="nx">item</span><span class="p">.</span><span class="nx">action</span> <span class="o">+=</span> <span class="s1">&#39;&lt;a href=&quot;/rc-auth.php?login=&#39;</span> <span class="o">+</span> <span class="nb">encodeURIComponent</span><span class="p">(</span><span class="nx">item</span><span class="p">.</span><span class="nx">username</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&quot; class=&quot;login_as btn btn-xs &#39;</span> <span class="o">+</span> <span class="nx">btnSize</span> <span class="o">+</span> <span class="s1">&#39; btn-primary&quot; target=&quot;_blank&quot;&gt;&lt;i class=&quot;bi bi-envelope-fill&quot;&gt;&lt;/i&gt; Roundcube&lt;/a&gt;&#39;</span><span class="p">;</span> if (ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE) {
<span class="p">}</span> item.action += '&lt;a href="/rc-auth.php?login=' + encodeURIComponent(item.username) + '" class="login_as btn btn-xs ' + btnSize + ' btn-primary" target="_blank"&gt;&lt;i class="bi bi-envelope-fill"&gt;&lt;/i&gt; Roundcube&lt;/a&gt;';
</code></pre></div> }</code></p>
<p>Bearbeiten Sie <code>data/web/mailbox.php</code> und fügen Sie diese Zeile zum Array <a href="https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/mailbox.php#L33-L43"><code>$template_data</code></a> hinzu:</p> <p>Bearbeiten Sie <code>data/web/mailbox.php</code> und fügen Sie diese Zeile zum Array <a href="https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/mailbox.php#L33-L43"><code>$template_data</code></a> hinzu:</p>
<div class="highlight"><pre><span></span><code><span class="x"> &#39;allow_admin_email_login_roundcube&#39; =&gt; (preg_match(&quot;/^(yes|y)+$/i&quot;, $_ENV[&quot;ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE&quot;])) ? &#39;true&#39; : &#39;false&#39;,</span> <p><code>php
</code></pre></div> 'allow_admin_email_login_roundcube' =&gt; (preg_match("/^(yes|y)+$/i", $_ENV["ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE"])) ? 'true' : 'false',</code></p>
<p>Bearbeiten Sie <code>data/web/templates/mailbox.twig</code> und fügen Sie diesen Code am Ende des [javascript-Abschnitts] ein (<a href="https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/templates/mailbox.twig#L49-L57">https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/templates/mailbox.twig#L49-L57</a>):</p> <p>Bearbeiten Sie <code>data/web/templates/mailbox.twig</code> und fügen Sie diesen Code am Ende des [javascript-Abschnitts] ein (<a href="https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/templates/mailbox.twig#L49-L57">https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/templates/mailbox.twig#L49-L57</a>):</p>
<div class="highlight"><pre><span></span><code> <span class="kd">var</span> <span class="nx">ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE</span> <span class="o">=</span> <span class="p">{{</span> <span class="nx">allow_admin_email_login_roundcube</span> <span class="p">}};</span> <p><code>js
</code></pre></div> var ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE = {{ allow_admin_email_login_roundcube }};</code></p>
<p>Kopieren Sie den Inhalt der folgenden Dateien aus diesem <a href="https://gitlab.com/-/snippets/2038244">Snippet</a>:</p> <p>Kopieren Sie den Inhalt der folgenden Dateien aus diesem <a href="https://gitlab.com/-/snippets/2038244">Snippet</a>:</p>
<ul> <ul>
<li><code>data/web/inc/lib/RoundcubeAutoLogin.php</code></li> <li><code>data/web/inc/lib/RoundcubeAutoLogin.php</code></li>
<li><code>data/web/rc-auth.php</code></li> <li><code>data/web/rc-auth.php</code></li>
</ul> </ul>
<p>Starten Sie schließlich mailcow neu</p> <p>Starten Sie schließlich mailcow neu</p>
<div class="highlight"><pre><span></span><code>docker-compose down <p><code>docker-compose down
docker-compose up -d docker-compose up -d</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2427,11 +2427,9 @@ Dazu wird ein zusätzlicher Link zu SOGo in der Mailbox-Liste (mailcow UI) angez
<p>Auch mehrere gleichzeitige Admin-Logins auf verschiedene Postfächer sind mit dieser Funktion möglich.</p> <p>Auch mehrere gleichzeitige Admin-Logins auf verschiedene Postfächer sind mit dieser Funktion möglich.</p>
<h2 id="aktivieren-der-funktion">Aktivieren der Funktion<a class="headerlink" href="#aktivieren-der-funktion" title="Permanent link">&para;</a></h2> <h2 id="aktivieren-der-funktion">Aktivieren der Funktion<a class="headerlink" href="#aktivieren-der-funktion" title="Permanent link">&para;</a></h2>
<p>Die Funktion ist standardmäßig deaktiviert. Es kann in der <code>mailcow.conf</code> durch Setzen aktiviert werden: <p>Die Funktion ist standardmäßig deaktiviert. Es kann in der <code>mailcow.conf</code> durch Setzen aktiviert werden:
<div class="highlight"><pre><span></span><code>ALLOW_ADMIN_EMAIL_LOGIN=y <code>ALLOW_ADMIN_EMAIL_LOGIN=y</code>
</code></pre></div>
und die betroffenen Container neu erstellen mit und die betroffenen Container neu erstellen mit
<div class="highlight"><pre><span></span><code>docker-compose up -d <code>docker-compose up -d</code></p>
</code></pre></div></p>
<h2 id="nachteile-bei-aktivierung">Nachteile bei Aktivierung<a class="headerlink" href="#nachteile-bei-aktivierung" title="Permanent link">&para;</a></h2> <h2 id="nachteile-bei-aktivierung">Nachteile bei Aktivierung<a class="headerlink" href="#nachteile-bei-aktivierung" title="Permanent link">&para;</a></h2>
<ul> <ul>
<li>Jeder SOGo-Seiten-Load und jede Active-Sync-Anfrage verursacht eine zusätzliche Ausführung eines internen PHP-Skripts. <li>Jeder SOGo-Seiten-Load und jede Active-Sync-Anfrage verursacht eine zusätzliche Ausführung eines internen PHP-Skripts.

Datei anzeigen

@ -2476,17 +2476,14 @@
<h2 id="anhangen-eines-containers-an-ihre-shell">Anhängen eines Containers an Ihre Shell<a class="headerlink" href="#anhangen-eines-containers-an-ihre-shell" title="Permanent link">&para;</a></h2> <h2 id="anhangen-eines-containers-an-ihre-shell">Anhängen eines Containers an Ihre Shell<a class="headerlink" href="#anhangen-eines-containers-an-ihre-shell" title="Permanent link">&para;</a></h2>
<p>Um einen Container an Ihre Shell anzuhängen, können Sie einfach folgendes ausführen</p> <p>Um einen Container an Ihre Shell anzuhängen, können Sie einfach folgendes ausführen</p>
<div class="highlight"><pre><span></span><code>docker-compose exec $Dienst_Name /bin/bash <p><code>docker-compose exec $Dienst_Name /bin/bash</code></p>
</code></pre></div>
<h3 id="verbindung-zu-diensten-herstellen">Verbindung zu Diensten herstellen<a class="headerlink" href="#verbindung-zu-diensten-herstellen" title="Permanent link">&para;</a></h3> <h3 id="verbindung-zu-diensten-herstellen">Verbindung zu Diensten herstellen<a class="headerlink" href="#verbindung-zu-diensten-herstellen" title="Permanent link">&para;</a></h3>
<p>Wenn Sie sich direkt mit einem Dienst / einer Anwendung verbinden wollen, ist es immer eine gute Idee, <code>source mailcow.conf</code> zu benutzen, um alle relevanten Variablen in Ihre Umgebung zu bekommen.</p> <p>Wenn Sie sich direkt mit einem Dienst / einer Anwendung verbinden wollen, ist es immer eine gute Idee, <code>source mailcow.conf</code> zu benutzen, um alle relevanten Variablen in Ihre Umgebung zu bekommen.</p>
<h4 id="mysql">MySQL<a class="headerlink" href="#mysql" title="Permanent link">&para;</a></h4> <h4 id="mysql">MySQL<a class="headerlink" href="#mysql" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span><code>Quelle mailcow.conf <p><code>Quelle mailcow.conf
docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME}</code></p>
</code></pre></div>
<h4 id="redis">Redis<a class="headerlink" href="#redis" title="Permanent link">&para;</a></h4> <h4 id="redis">Redis<a class="headerlink" href="#redis" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span><code>docker-compose exec redis-mailcow redis-cli <p><code>docker-compose exec redis-mailcow redis-cli</code></p>
</code></pre></div>
<h2 id="dienstbeschreibungen">Dienstbeschreibungen<a class="headerlink" href="#dienstbeschreibungen" title="Permanent link">&para;</a></h2> <h2 id="dienstbeschreibungen">Dienstbeschreibungen<a class="headerlink" href="#dienstbeschreibungen" title="Permanent link">&para;</a></h2>
<p>Hier ist eine kurze Übersicht, welcher Container / Dienst was macht:</p> <p>Hier ist eine kurze Übersicht, welcher Container / Dienst was macht:</p>
<table> <table>

Datei anzeigen

@ -801,52 +801,65 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#telnet-7412513327-465" class="md-nav__link">
telnet 74.125.133.27 465
</a>
<nav class="md-nav" aria-label="telnet 74.125.133.27 465">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#meine-mails-werden-als-spam-identifiziert" class="md-nav__link"> <a href="#meine-mails-werden-als-spam-identifiziert" class="md-nav__link">
Meine Mails werden als Spam identifiziert Meine Mails werden als Spam identifiziert
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#docker-compose-wirft-seltsame-fehler-aus" class="md-nav__link"> <a href="#docker-compose-wirft-seltsame-fehler-aus" class="md-nav__link">
docker-compose wirft seltsame Fehler aus. docker-compose wirft seltsame Fehler aus.
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#container-xy-ist-ungesund" class="md-nav__link"> <a href="#container-xy-ist-ungesund" class="md-nav__link">
Container XY ist ungesund Container XY ist ungesund
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#adresse-bereits-in-gebrauch" class="md-nav__link"> <a href="#adresse-bereits-in-gebrauch" class="md-nav__link">
Adresse bereits in Gebrauch Adresse bereits in Gebrauch
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#xyz-kann-keine-verbindung-zu" class="md-nav__link"> <a href="#xyz-kann-keine-verbindung-zu" class="md-nav__link">
XYZ kann keine Verbindung zu ... XYZ kann keine Verbindung zu ...
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#inotify-instanz-limit-uberschritten-fur-benutzer-5000-uid-vmail-siehe-453" class="md-nav__link"> <a href="#inotify-instanz-limit-uberschritten-fur-benutzer-5000-uid-vmail-siehe-453" class="md-nav__link">
Inotify-Instanz-Limit überschritten für Benutzer 5000 (UID vmail) (siehe #453). Inotify-Instanz-Limit überschritten für Benutzer 5000 (UID vmail) (siehe #453).
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#dovecot-startet-standig-neu-siehe-2672" class="md-nav__link"> <a href="#dovecot-startet-standig-neu-siehe-2672" class="md-nav__link">
Dovecot startet ständig neu (siehe #2672). Dovecot startet ständig neu (siehe #2672).
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2438,52 +2451,65 @@
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#telnet-7412513327-465" class="md-nav__link">
telnet 74.125.133.27 465
</a>
<nav class="md-nav" aria-label="telnet 74.125.133.27 465">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#meine-mails-werden-als-spam-identifiziert" class="md-nav__link"> <a href="#meine-mails-werden-als-spam-identifiziert" class="md-nav__link">
Meine Mails werden als Spam identifiziert Meine Mails werden als Spam identifiziert
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#docker-compose-wirft-seltsame-fehler-aus" class="md-nav__link"> <a href="#docker-compose-wirft-seltsame-fehler-aus" class="md-nav__link">
docker-compose wirft seltsame Fehler aus. docker-compose wirft seltsame Fehler aus.
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#container-xy-ist-ungesund" class="md-nav__link"> <a href="#container-xy-ist-ungesund" class="md-nav__link">
Container XY ist ungesund Container XY ist ungesund
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#adresse-bereits-in-gebrauch" class="md-nav__link"> <a href="#adresse-bereits-in-gebrauch" class="md-nav__link">
Adresse bereits in Gebrauch Adresse bereits in Gebrauch
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#xyz-kann-keine-verbindung-zu" class="md-nav__link"> <a href="#xyz-kann-keine-verbindung-zu" class="md-nav__link">
XYZ kann keine Verbindung zu ... XYZ kann keine Verbindung zu ...
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#inotify-instanz-limit-uberschritten-fur-benutzer-5000-uid-vmail-siehe-453" class="md-nav__link"> <a href="#inotify-instanz-limit-uberschritten-fur-benutzer-5000-uid-vmail-siehe-453" class="md-nav__link">
Inotify-Instanz-Limit überschritten für Benutzer 5000 (UID vmail) (siehe #453). Inotify-Instanz-Limit überschritten für Benutzer 5000 (UID vmail) (siehe #453).
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#dovecot-startet-standig-neu-siehe-2672" class="md-nav__link"> <a href="#dovecot-startet-standig-neu-siehe-2672" class="md-nav__link">
Dovecot startet ständig neu (siehe #2672). Dovecot startet ständig neu (siehe #2672).
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2504,8 +2530,6 @@
<h1>Häufig auftretende Probleme</h1>
<p>Hier sind häufige Probleme und mögliche Lösungen:</p> <p>Hier sind häufige Probleme und mögliche Lösungen:</p>
<h2 id="mail-kommt-in-einer-schleife-zu-sich-selbst-zuruck">Mail kommt in einer Schleife zu sich selbst zurück.<a class="headerlink" href="#mail-kommt-in-einer-schleife-zu-sich-selbst-zuruck" title="Permanent link">&para;</a></h2> <h2 id="mail-kommt-in-einer-schleife-zu-sich-selbst-zuruck">Mail kommt in einer Schleife zu sich selbst zurück.<a class="headerlink" href="#mail-kommt-in-einer-schleife-zu-sich-selbst-zuruck" title="Permanent link">&para;</a></h2>
<p>Bitte überprüfen Sie in Ihrer mailcow UI, ob Sie die Domain als <strong>Backup MX</strong> eingestellt haben: <p>Bitte überprüfen Sie in Ihrer mailcow UI, ob Sie die Domain als <strong>Backup MX</strong> eingestellt haben:
@ -2516,11 +2540,12 @@
<li>Prüfen Sie, ob Ihre IP-Adresse auf einer schwarzen Liste steht. Sie können <a href="http://www.dnsbl.info/">dnsbl.info</a> oder einen ähnlichen Dienst verwenden, um Ihre IP-Adresse zu überprüfen.</li> <li>Prüfen Sie, ob Ihre IP-Adresse auf einer schwarzen Liste steht. Sie können <a href="http://www.dnsbl.info/">dnsbl.info</a> oder einen ähnlichen Dienst verwenden, um Ihre IP-Adresse zu überprüfen.</li>
<li>Es gibt einige ISP-Router, die Mail-Ports für nicht auf der Blacklist stehende Domains blockieren. Bitte überprüfen Sie, ob Sie Ihren Server über die Ports <code>465</code> oder <code>587</code> erreichen können:</li> <li>Es gibt einige ISP-Router, die Mail-Ports für nicht auf der Blacklist stehende Domains blockieren. Bitte überprüfen Sie, ob Sie Ihren Server über die Ports <code>465</code> oder <code>587</code> erreichen können:</li>
</ul> </ul>
<div class="highlight"><pre><span></span><code># telnet 74.125.133.27 465 <p>```</p>
Versucht 74.125.133.27... <h1 id="telnet-7412513327-465">telnet 74.125.133.27 465<a class="headerlink" href="#telnet-7412513327-465" title="Permanent link">&para;</a></h1>
<p>Versucht 74.125.133.27...
Verbunden mit 74.125.133.27. Verbunden mit 74.125.133.27.
Escape-Zeichen ist &#39;^]&#39;. Escape-Zeichen ist '^]'.
</code></pre></div> ```</p>
<h2 id="meine-mails-werden-als-spam-identifiziert">Meine Mails werden als Spam identifiziert<a class="headerlink" href="#meine-mails-werden-als-spam-identifiziert" title="Permanent link">&para;</a></h2> <h2 id="meine-mails-werden-als-spam-identifiziert">Meine Mails werden als Spam identifiziert<a class="headerlink" href="#meine-mails-werden-als-spam-identifiziert" title="Permanent link">&para;</a></h2>
<p>Bitte lesen Sie unsere <a href="../../prerequisite/prerequisite-dns/">DNS-Konfiguration</a> Anleitung.</p> <p>Bitte lesen Sie unsere <a href="../../prerequisite/prerequisite-dns/">DNS-Konfiguration</a> Anleitung.</p>
<h2 id="docker-compose-wirft-seltsame-fehler-aus">docker-compose wirft seltsame Fehler aus.<a class="headerlink" href="#docker-compose-wirft-seltsame-fehler-aus" title="Permanent link">&para;</a></h2> <h2 id="docker-compose-wirft-seltsame-fehler-aus">docker-compose wirft seltsame Fehler aus.<a class="headerlink" href="#docker-compose-wirft-seltsame-fehler-aus" title="Permanent link">&para;</a></h2>
@ -2537,8 +2562,7 @@ Escape-Zeichen ist &#39;^]&#39;.
<p>Es könnte auch eine falsch verknüpfte Datei sein (z. B. ein SSL-Zertifikat), die den Start eines wichtigen Containers (nginx) verhindert. Prüfen Sie daher immer Ihre Protokolle, um herauszufinden, woher das Problem kommt.</p> <p>Es könnte auch eine falsch verknüpfte Datei sein (z. B. ein SSL-Zertifikat), die den Start eines wichtigen Containers (nginx) verhindert. Prüfen Sie daher immer Ihre Protokolle, um herauszufinden, woher das Problem kommt.</p>
<h2 id="adresse-bereits-in-gebrauch">Adresse bereits in Gebrauch<a class="headerlink" href="#adresse-bereits-in-gebrauch" title="Permanent link">&para;</a></h2> <h2 id="adresse-bereits-in-gebrauch">Adresse bereits in Gebrauch<a class="headerlink" href="#adresse-bereits-in-gebrauch" title="Permanent link">&para;</a></h2>
<p>Wenn Sie eine Fehlermeldung erhalten wie:</p> <p>Wenn Sie eine Fehlermeldung erhalten wie:</p>
<div class="highlight"><pre><span></span><code>ERROR: for postfix-mailcow Cannot start service postfix-mailcow: driver failed programming external connectivity on endpoint mailcowdockerized_postfix-mailcow_1: Error starting userland proxy: listen tcp 0.0.0:25: bind: address already in use <p><code>ERROR: for postfix-mailcow Cannot start service postfix-mailcow: driver failed programming external connectivity on endpoint mailcowdockerized_postfix-mailcow_1: Error starting userland proxy: listen tcp 0.0.0:25: bind: address already in use</code></p>
</code></pre></div>
<p>während Sie versuchen, mailcow: dockerized zu starten / zu installieren, stellen Sie sicher, dass Sie unseren Abschnitt über <a href="../prerequisite/prerequisite-system.de.md/#firewall-ports">prerequisites</a> befolgt haben.</p> <p>während Sie versuchen, mailcow: dockerized zu starten / zu installieren, stellen Sie sicher, dass Sie unseren Abschnitt über <a href="../prerequisite/prerequisite-system.de.md/#firewall-ports">prerequisites</a> befolgt haben.</p>
<h2 id="xyz-kann-keine-verbindung-zu">XYZ kann keine Verbindung zu ...<a class="headerlink" href="#xyz-kann-keine-verbindung-zu" title="Permanent link">&para;</a></h2> <h2 id="xyz-kann-keine-verbindung-zu">XYZ kann keine Verbindung zu ...<a class="headerlink" href="#xyz-kann-keine-verbindung-zu" title="Permanent link">&para;</a></h2>
<p>Bitte überprüfen Sie Ihre lokale Firewall! <p>Bitte überprüfen Sie Ihre lokale Firewall!
@ -2546,19 +2570,17 @@ Docker und iptables-basierte Firewalls erstellen manchmal widersprüchliche Rege
<p>Wenn Sie Verbindungsprobleme von zu Hause aus haben, überprüfen Sie bitte auch die Firewall Ihres ISP-Routers, da einige von ihnen den E-Mail-Verkehr über die Ports <em>SMTP</em> (587) oder <em>SMTPS</em> (465) blockieren. Es könnte auch sein, dass Ihr ISP die Ports für <em>SUBMISSION</em> (25) blockiert.</p> <p>Wenn Sie Verbindungsprobleme von zu Hause aus haben, überprüfen Sie bitte auch die Firewall Ihres ISP-Routers, da einige von ihnen den E-Mail-Verkehr über die Ports <em>SMTP</em> (587) oder <em>SMTPS</em> (465) blockieren. Es könnte auch sein, dass Ihr ISP die Ports für <em>SUBMISSION</em> (25) blockiert.</p>
<p>Während Linux-Benutzer aus einer Vielzahl von Tools<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> wählen können, um zu überprüfen, ob ein Port offen ist, steht Windows-Benutzern standardmäßig nur der PowerShell-Befehl <code>Test-NetConnection -ComputerName host -Port port</code> zur Verfügung.</p> <p>Während Linux-Benutzer aus einer Vielzahl von Tools<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> wählen können, um zu überprüfen, ob ein Port offen ist, steht Windows-Benutzern standardmäßig nur der PowerShell-Befehl <code>Test-NetConnection -ComputerName host -Port port</code> zur Verfügung.</p>
<p>Um Telnet auf einem Windows nach Vista zu aktivieren, lesen Sie bitte diese <a href="https://social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-client.aspx">Anleitung</a> oder geben Sie den folgenden Befehl in einem Terminal <strong>mit Administratorrechten</strong> ein:</p> <p>Um Telnet auf einem Windows nach Vista zu aktivieren, lesen Sie bitte diese <a href="https://social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-client.aspx">Anleitung</a> oder geben Sie den folgenden Befehl in einem Terminal <strong>mit Administratorrechten</strong> ein:</p>
<div class="highlight"><pre><span></span><code>dism /online /Enable-Feature /FeatureName:TelnetClient <p><code>dism /online /Enable-Feature /FeatureName:TelnetClient</code></p>
</code></pre></div>
<h2 id="inotify-instanz-limit-uberschritten-fur-benutzer-5000-uid-vmail-siehe-453">Inotify-Instanz-Limit überschritten für Benutzer 5000 (UID vmail) (<a href="https://github.com/mailcow/mailcow-dockerized/issues/453#issuecomment-314711232">siehe #453</a>).<a class="headerlink" href="#inotify-instanz-limit-uberschritten-fur-benutzer-5000-uid-vmail-siehe-453" title="Permanent link">&para;</a></h2> <h2 id="inotify-instanz-limit-uberschritten-fur-benutzer-5000-uid-vmail-siehe-453">Inotify-Instanz-Limit überschritten für Benutzer 5000 (UID vmail) (<a href="https://github.com/mailcow/mailcow-dockerized/issues/453#issuecomment-314711232">siehe #453</a>).<a class="headerlink" href="#inotify-instanz-limit-uberschritten-fur-benutzer-5000-uid-vmail-siehe-453" title="Permanent link">&para;</a></h2>
<p>Docker-Container verwenden die inotify-Limits von Docker-Hosts. Wenn Sie sie auf Ihrem Docker-Host setzen, werden sie an den Container weitergegeben.</p> <p>Docker-Container verwenden die inotify-Limits von Docker-Hosts. Wenn Sie sie auf Ihrem Docker-Host setzen, werden sie an den Container weitergegeben.</p>
<h2 id="dovecot-startet-standig-neu-siehe-2672">Dovecot startet ständig neu (siehe <a href="https://github.com/mailcow/mailcow-dockerized/issues/2672">#2672</a>).<a class="headerlink" href="#dovecot-startet-standig-neu-siehe-2672" title="Permanent link">&para;</a></h2> <h2 id="dovecot-startet-standig-neu-siehe-2672">Dovecot startet ständig neu (siehe <a href="https://github.com/mailcow/mailcow-dockerized/issues/2672">#2672</a>).<a class="headerlink" href="#dovecot-startet-standig-neu-siehe-2672" title="Permanent link">&para;</a></h2>
<p>Stellen Sie sicher, dass Sie mindestens die folgenden Dateien in <code>data/assets/ssl</code> haben:</p> <p>Stellen Sie sicher, dass Sie mindestens die folgenden Dateien in <code>data/assets/ssl</code> haben:</p>
<div class="highlight"><pre><span></span><code>cert.pem <p><code>cert.pem
dhparams.pem dhparams.pem
key.pem key.pem</code></p>
</code></pre></div>
<p>Wenn <code>dhparams.pem</code> fehlt, können Sie es mit Bash</p> <p>Wenn <code>dhparams.pem</code> fehlt, können Sie es mit Bash</p>
<div class="highlight"><pre><span></span><code>openssl dhparam -out data/assets/ssl/dhparams.pem <span class="m">4096</span> <p><code>bash
</code></pre></div> openssl dhparam -out data/assets/ssl/dhparams.pem 4096</code></p>
<div class="footnote"> <div class="footnote">
<hr /> <hr />
<ol> <ol>

Datei anzeigen

@ -833,6 +833,41 @@
MariaDB: Aria-Wiederherstellung nach Absturz MariaDB: Aria-Wiederherstellung nach Absturz
</a> </a>
</li>
<li class="md-nav__item">
<a href="#stoppe-den-stack-fuhre-nicht-down-aus" class="md-nav__link">
Stoppe den Stack, führe nicht "down" aus
</a>
</li>
<li class="md-nav__item">
<a href="#fuhren-sie-eine-bash-in-dem-gestoppten-container-als-benutzer-mysql-aus" class="md-nav__link">
Führen Sie eine Bash in dem gestoppten Container als Benutzer mysql aus
</a>
</li>
<li class="md-nav__item">
<a href="#cd-in-das-sql-datenverzeichnis" class="md-nav__link">
cd in das SQL-Datenverzeichnis
</a>
</li>
<li class="md-nav__item">
<a href="#aria_chk-ausfuhren" class="md-nav__link">
aria_chk ausführen
</a>
</li>
<li class="md-nav__item">
<a href="#loschen-der-aria-logdateien" class="md-nav__link">
Löschen der aria-Logdateien
</a>
</li> </li>
</ul> </ul>
@ -2372,6 +2407,41 @@
MariaDB: Aria-Wiederherstellung nach Absturz MariaDB: Aria-Wiederherstellung nach Absturz
</a> </a>
</li>
<li class="md-nav__item">
<a href="#stoppe-den-stack-fuhre-nicht-down-aus" class="md-nav__link">
Stoppe den Stack, führe nicht "down" aus
</a>
</li>
<li class="md-nav__item">
<a href="#fuhren-sie-eine-bash-in-dem-gestoppten-container-als-benutzer-mysql-aus" class="md-nav__link">
Führen Sie eine Bash in dem gestoppten Container als Benutzer mysql aus
</a>
</li>
<li class="md-nav__item">
<a href="#cd-in-das-sql-datenverzeichnis" class="md-nav__link">
cd in das SQL-Datenverzeichnis
</a>
</li>
<li class="md-nav__item">
<a href="#aria_chk-ausfuhren" class="md-nav__link">
aria_chk ausführen
</a>
</li>
<li class="md-nav__item">
<a href="#loschen-der-aria-logdateien" class="md-nav__link">
Löschen der aria-Logdateien
</a>
</li> </li>
</ul> </ul>
@ -2392,23 +2462,22 @@
<h1>Abgestürzte Aria-Speicher-Engine wiederherstellen</h1>
<h2 id="mariadb-aria-wiederherstellung-nach-absturz">MariaDB: Aria-Wiederherstellung nach Absturz<a class="headerlink" href="#mariadb-aria-wiederherstellung-nach-absturz" title="Permanent link">&para;</a></h2> <h2 id="mariadb-aria-wiederherstellung-nach-absturz">MariaDB: Aria-Wiederherstellung nach Absturz<a class="headerlink" href="#mariadb-aria-wiederherstellung-nach-absturz" title="Permanent link">&para;</a></h2>
<p>Wenn Ihr Server abgestürzt ist und MariaDB eine Fehlermeldung ähnlich <code>[ERROR] mysqld: Aria recovery failed. Please run aria_chk -r on all Aria tables (*.MAI) and delete all aria_log.######## files</code>, können Sie Folgendes versuchen, um die Datenbank in einen gesunden Zustand zu bringen:</p> <p>Wenn Ihr Server abgestürzt ist und MariaDB eine Fehlermeldung ähnlich <code>[ERROR] mysqld: Aria recovery failed. Please run aria_chk -r on all Aria tables (*.MAI) and delete all aria_log.######## files</code>, können Sie Folgendes versuchen, um die Datenbank in einen gesunden Zustand zu bringen:</p>
<p>Starten Sie den Stack und warten Sie, bis mysql-mailcow beginnt, einen Neustart zu melden. Überprüfen Sie dies, indem Sie <code>docker-compose ps</code> ausführen.</p> <p>Starten Sie den Stack und warten Sie, bis mysql-mailcow beginnt, einen Neustart zu melden. Überprüfen Sie dies, indem Sie <code>docker-compose ps</code> ausführen.</p>
<p>Führen Sie nun die folgenden Befehle aus:</p> <p>Führen Sie nun die folgenden Befehle aus:</p>
<div class="highlight"><pre><span></span><code># Stoppe den Stack, führe nicht &quot;down&quot; aus <p>```</p>
docker-compose stop <h1 id="stoppe-den-stack-fuhre-nicht-down-aus">Stoppe den Stack, führe nicht "down" aus<a class="headerlink" href="#stoppe-den-stack-fuhre-nicht-down-aus" title="Permanent link">&para;</a></h1>
# Führen Sie eine Bash in dem gestoppten Container als Benutzer mysql aus <p>docker-compose stop</p>
docker-compose run --rm --entrypoint &#39;/bin/sh -c &quot;gosu mysql bash&quot;&#39; mysql-mailcow <h1 id="fuhren-sie-eine-bash-in-dem-gestoppten-container-als-benutzer-mysql-aus">Führen Sie eine Bash in dem gestoppten Container als Benutzer mysql aus<a class="headerlink" href="#fuhren-sie-eine-bash-in-dem-gestoppten-container-als-benutzer-mysql-aus" title="Permanent link">&para;</a></h1>
# cd in das SQL-Datenverzeichnis <p>docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql bash"' mysql-mailcow</p>
cd /var/lib/mysql <h1 id="cd-in-das-sql-datenverzeichnis">cd in das SQL-Datenverzeichnis<a class="headerlink" href="#cd-in-das-sql-datenverzeichnis" title="Permanent link">&para;</a></h1>
# aria_chk ausführen <p>cd /var/lib/mysql</p>
aria_chk --check --force */*.MAI <h1 id="aria_chk-ausfuhren">aria_chk ausführen<a class="headerlink" href="#aria_chk-ausfuhren" title="Permanent link">&para;</a></h1>
# Löschen der aria-Logdateien <p>aria_chk --check --force <em>/</em>.MAI</p>
rm aria_log.* <h1 id="loschen-der-aria-logdateien">Löschen der aria-Logdateien<a class="headerlink" href="#loschen-der-aria-logdateien" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>rm aria_log.*
```</p>
<p>Führen Sie nun <code>docker-compose down</code> gefolgt von <code>docker-compose up -d</code> aus.</p> <p>Führen Sie nun <code>docker-compose down</code> gefolgt von <code>docker-compose up -d</code> aus.</p>
<hr> <hr>

Datei anzeigen

@ -2396,13 +2396,11 @@
<h2 id="fuhren-sie-ein-manuelles-mysql_upgrade-durch">Führen Sie ein manuelles mysql_upgrade durch.<a class="headerlink" href="#fuhren-sie-ein-manuelles-mysql_upgrade-durch" title="Permanent link">&para;</a></h2> <h2 id="fuhren-sie-ein-manuelles-mysql_upgrade-durch">Führen Sie ein manuelles mysql_upgrade durch.<a class="headerlink" href="#fuhren-sie-ein-manuelles-mysql_upgrade-durch" title="Permanent link">&para;</a></h2>
<p>Dieser Schritt ist normalerweise nicht notwendig. </p> <p>Dieser Schritt ist normalerweise nicht notwendig. </p>
<div class="highlight"><pre><span></span><code>docker-compose stop mysql-mailcow watchdog-mailcow <p><code>docker-compose stop mysql-mailcow watchdog-mailcow
docker-compose run --rm --entrypoint &#39;/bin/sh -c &quot;gosu mysql mysqld --skip-grant-tables &amp; sleep 10 &amp;&amp; bash &amp;&amp; exit 0&quot;&#39; mysql-mailcow docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql mysqld --skip-grant-tables &amp; sleep 10 &amp;&amp; bash &amp;&amp; exit 0"' mysql-mailcow</code></p>
</code></pre></div>
<p>Sobald die SQL-Shell gestartet wurde, führen Sie <code>mysql_upgrade</code> aus und verlassen den Container:</p> <p>Sobald die SQL-Shell gestartet wurde, führen Sie <code>mysql_upgrade</code> aus und verlassen den Container:</p>
<div class="highlight"><pre><span></span><code>mysql_upgrade <p><code>mysql_upgrade
exit exit</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -878,6 +878,26 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#source-mailcowconf" class="md-nav__link">
source mailcow.conf
</a>
</li>
<li class="md-nav__item">
<a href="#docker-compose-exec-mysql-mailcow-mysql-udbuser-pdbpass-dbname" class="md-nav__link">
docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME}
</a>
<nav class="md-nav" aria-label="docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME}">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#2-einen-oder-mehrere-benutzer-zurucksetzen" class="md-nav__link"> <a href="#2-einen-oder-mehrere-benutzer-zurucksetzen" class="md-nav__link">
2. Einen oder mehrere Benutzer zurücksetzen 2. Einen oder mehrere Benutzer zurücksetzen
@ -905,12 +925,7 @@
</li> </li>
</ul> <li class="md-nav__item">
</nav>
</li>
<li class="md-nav__item">
<a href="#zwei-faktor-authentifizierung-entfernen" class="md-nav__link"> <a href="#zwei-faktor-authentifizierung-entfernen" class="md-nav__link">
Zwei-Faktor-Authentifizierung entfernen Zwei-Faktor-Authentifizierung entfernen
</a> </a>
@ -935,6 +950,11 @@
</ul> </ul>
</nav> </nav>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2463,6 +2483,26 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#source-mailcowconf" class="md-nav__link">
source mailcow.conf
</a>
</li>
<li class="md-nav__item">
<a href="#docker-compose-exec-mysql-mailcow-mysql-udbuser-pdbpass-dbname" class="md-nav__link">
docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME}
</a>
<nav class="md-nav" aria-label="docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME}">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#2-einen-oder-mehrere-benutzer-zurucksetzen" class="md-nav__link"> <a href="#2-einen-oder-mehrere-benutzer-zurucksetzen" class="md-nav__link">
2. Einen oder mehrere Benutzer zurücksetzen 2. Einen oder mehrere Benutzer zurücksetzen
@ -2490,12 +2530,7 @@
</li> </li>
</ul> <li class="md-nav__item">
</nav>
</li>
<li class="md-nav__item">
<a href="#zwei-faktor-authentifizierung-entfernen" class="md-nav__link"> <a href="#zwei-faktor-authentifizierung-entfernen" class="md-nav__link">
Zwei-Faktor-Authentifizierung entfernen Zwei-Faktor-Authentifizierung entfernen
</a> </a>
@ -2520,6 +2555,11 @@
</ul> </ul>
</nav> </nav>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2540,22 +2580,19 @@
<h1>Passwörter zurücksetzen (inkl. SQL)</h1>
<h2 id="mailcow-admin-konto">mailcow Admin-Konto<a class="headerlink" href="#mailcow-admin-konto" title="Permanent link">&para;</a></h2> <h2 id="mailcow-admin-konto">mailcow Admin-Konto<a class="headerlink" href="#mailcow-admin-konto" title="Permanent link">&para;</a></h2>
<p>Setzt den mailcow Admin Account auf ein zufälliges Passwort zurück. Ältere mailcow: dockerisierte Installationen können das <code>mailcow-reset-admin.sh</code> Skript in ihrem mailcow Stammverzeichnis (mailcow_path) finden.</p> <p>Setzt den mailcow Admin Account auf ein zufälliges Passwort zurück. Ältere mailcow: dockerisierte Installationen können das <code>mailcow-reset-admin.sh</code> Skript in ihrem mailcow Stammverzeichnis (mailcow_path) finden.</p>
<div class="highlight"><pre><span></span><code>cd mailcow_pfad <p><code>cd mailcow_pfad
./helper-scripts/mailcow-reset-admin.sh ./helper-scripts/mailcow-reset-admin.sh</code></p>
</code></pre></div>
<h2 id="mysql-passworter-zurucksetzen">MySQL-Passwörter zurücksetzen<a class="headerlink" href="#mysql-passworter-zurucksetzen" title="Permanent link">&para;</a></h2> <h2 id="mysql-passworter-zurucksetzen">MySQL-Passwörter zurücksetzen<a class="headerlink" href="#mysql-passworter-zurucksetzen" title="Permanent link">&para;</a></h2>
<p>Stoppen Sie den Stack, indem Sie <code>docker-compose stop</code> ausführen.</p> <p>Stoppen Sie den Stack, indem Sie <code>docker-compose stop</code> ausführen.</p>
<p>Wenn die Container heruntergefahren sind, führen Sie diesen Befehl aus:</p> <p>Wenn die Container heruntergefahren sind, führen Sie diesen Befehl aus:</p>
<div class="highlight"><pre><span></span><code>docker-compose run --rm --entrypoint &#39;/bin/sh -c &quot;gosu mysql mysqld --skip-grant-tables &amp; sleep 10 &amp;&amp; mysql -hlocalhost -uroot &amp;&amp; exit 0&quot;&#39; mysql-mailcow <p><code>docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql mysqld --skip-grant-tables &amp; sleep 10 &amp;&amp; mysql -hlocalhost -uroot &amp;&amp; exit 0"' mysql-mailcow</code></p>
</code></pre></div>
<h3 id="1-datenbank-name-finden">1. Datenbank-Name finden<a class="headerlink" href="#1-datenbank-name-finden" title="Permanent link">&para;</a></h3> <h3 id="1-datenbank-name-finden">1. Datenbank-Name finden<a class="headerlink" href="#1-datenbank-name-finden" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code># source mailcow.conf <p>```</p>
# docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} <h1 id="source-mailcowconf">source mailcow.conf<a class="headerlink" href="#source-mailcowconf" title="Permanent link">&para;</a></h1>
MariaDB [(none)]&gt; show databases; <h1 id="docker-compose-exec-mysql-mailcow-mysql-udbuser-pdbpass-dbname">docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME}<a class="headerlink" href="#docker-compose-exec-mysql-mailcow-mysql-udbuser-pdbpass-dbname" title="Permanent link">&para;</a></h1>
<p>MariaDB [(none)]&gt; show databases;
+--------------------+ +--------------------+
| Database | | Database |
+--------------------+ +--------------------+
@ -2565,49 +2602,47 @@ MariaDB [(none)]&gt; show databases;
| performance_schema | | performance_schema |
+--------------------+ +--------------------+
4 rows in set (0.00 sec) 4 rows in set (0.00 sec)
</code></pre></div> ```</p>
<h3 id="2-einen-oder-mehrere-benutzer-zurucksetzen">2. Einen oder mehrere Benutzer zurücksetzen<a class="headerlink" href="#2-einen-oder-mehrere-benutzer-zurucksetzen" title="Permanent link">&para;</a></h3> <h3 id="2-einen-oder-mehrere-benutzer-zurucksetzen">2. Einen oder mehrere Benutzer zurücksetzen<a class="headerlink" href="#2-einen-oder-mehrere-benutzer-zurucksetzen" title="Permanent link">&para;</a></h3>
<h4 id="21-maria-db-104-altere-mailcow-installationen">2.1 Maria DB &lt; 10.4 (ältere mailcow-Installationen)<a class="headerlink" href="#21-maria-db-104-altere-mailcow-installationen" title="Permanent link">&para;</a></h4> <h4 id="21-maria-db-104-altere-mailcow-installationen">2.1 Maria DB &lt; 10.4 (ältere mailcow-Installationen)<a class="headerlink" href="#21-maria-db-104-altere-mailcow-installationen" title="Permanent link">&para;</a></h4>
<p>Sowohl "password" als auch "authentication_string" existieren. Derzeit wird "password" verwendet, aber besser ist es, beide zu setzen.</p> <p>Sowohl "password" als auch "authentication_string" existieren. Derzeit wird "password" verwendet, aber besser ist es, beide zu setzen.</p>
<div class="highlight"><pre><span></span><code>MariaDB [(none)]&gt; SELECT user FROM mysql.user; <p>```
MariaDB [(none)]&gt; SELECT user FROM mysql.user;
+--------------+ +--------------+
| user | | user |
+--------------+ +--------------+
| mailcow | &lt;===== | mailcow | &lt;=====
| root | | root |
+--------------+ +--------------+
2 rows in set (0.00 sec) 2 rows in set (0.00 sec)</p>
<p>MariaDB [(none)]&gt; FLUSH PRIVILEGES;
MariaDB [(none)]&gt; UPDATE mysql.user SET authentication_string = PASSWORD('gotr00t'), password = PASSWORD('gotr00t') WHERE User = 'root';
MariaDB [(none)]&gt; UPDATE mysql.user SET authentication_string = PASSWORD('mookuh'), password = PASSWORD('mookuh') WHERE User = 'mailcow' AND Host = '%';
MariaDB [(none)]&gt; FLUSH PRIVILEGES; MariaDB [(none)]&gt; FLUSH PRIVILEGES;
MariaDB [(none)]&gt; UPDATE mysql.user SET authentication_string = PASSWORD(&#39;gotr00t&#39;), password = PASSWORD(&#39;gotr00t&#39;) WHERE User = &#39;root&#39;; ```</p>
MariaDB [(none)]&gt; UPDATE mysql.user SET authentication_string = PASSWORD(&#39;mookuh&#39;), password = PASSWORD(&#39;mookuh&#39;) WHERE User = &#39;mailcow&#39; AND Host = &#39;%&#39;;
MariaDB [(none)]&gt; FLUSH PRIVILEGES;
</code></pre></div>
<h4 id="22-maria-db-104-aktuelle-mailcows">2.2 Maria DB &gt;= 10.4 (aktuelle mailcows)<a class="headerlink" href="#22-maria-db-104-aktuelle-mailcows" title="Permanent link">&para;</a></h4> <h4 id="22-maria-db-104-aktuelle-mailcows">2.2 Maria DB &gt;= 10.4 (aktuelle mailcows)<a class="headerlink" href="#22-maria-db-104-aktuelle-mailcows" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span><code>MariaDB [(none)]&gt; SELECT user FROM mysql.user; <p>```
MariaDB [(none)]&gt; SELECT user FROM mysql.user;
+--------------+ +--------------+
| user | | user |
+--------------+ +--------------+
| mailcow | &lt;===== | mailcow | &lt;=====
| root | | root |
+--------------+ +--------------+
2 rows in set (0.00 sec) 2 rows in set (0.00 sec)</p>
<p>MariaDB [(none)]&gt; FLUSH PRIVILEGES;
MariaDB [(none)]&gt; ALTER USER 'mailcow'@'%' IDENTIFIED BY 'mookuh';
MariaDB [(none)]&gt; ALTER USER 'root'@'%' IDENTIFIED BY 'gotr00t'; MariaDB [(none)]&gt; ALTER USER 'root'@'%' IDENTIFIED BY 'gotr00t';
MariaDB [(none)]&gt; ALTER USER 'root'@'localhost' IDENTIFIED BY 'gotr00t'; MariaDB [(none)]&gt; ALTER USER 'root'@'localhost' IDENTIFIED BY 'gotr00t';
MariaDB [(none)]&gt; FLUSH PRIVILEGES; MariaDB [(none)]&gt; FLUSH PRIVILEGES;
MariaDB [(none)]&gt; ALTER USER &#39;mailcow&#39;@&#39;%&#39; IDENTIFIED BY &#39;mookuh&#39;; ```</p>
MariaDB [(none)]&gt; ALTER USER &#39;root&#39;@&#39;%&#39; IDENTIFIED BY &#39;gotr00t&#39;; MariaDB [(none)]&gt; ALTER USER &#39;root&#39;@&#39;%&#39; IDENTIFIED BY &#39;gotr00t&#39;;
MariaDB [(none)]&gt; ALTER USER &#39;root&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;gotr00t&#39;; MariaDB [(none)]&gt; ALTER USER &#39;root&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;gotr00t&#39;;
MariaDB [(none)]&gt; FLUSH PRIVILEGES;
</code></pre></div>
<h2 id="zwei-faktor-authentifizierung-entfernen">Zwei-Faktor-Authentifizierung entfernen<a class="headerlink" href="#zwei-faktor-authentifizierung-entfernen" title="Permanent link">&para;</a></h2> <h2 id="zwei-faktor-authentifizierung-entfernen">Zwei-Faktor-Authentifizierung entfernen<a class="headerlink" href="#zwei-faktor-authentifizierung-entfernen" title="Permanent link">&para;</a></h2>
<h3 id="fur-mailcow-webui">Für mailcow WebUI:<a class="headerlink" href="#fur-mailcow-webui" title="Permanent link">&para;</a></h3> <h3 id="fur-mailcow-webui">Für mailcow WebUI:<a class="headerlink" href="#fur-mailcow-webui" title="Permanent link">&para;</a></h3>
<p>Dies funktioniert ähnlich wie das Zurücksetzen eines MySQL-Passworts, jetzt machen wir es vom Host aus, ohne uns mit dem MySQL CLI zu verbinden:</p> <p>Dies funktioniert ähnlich wie das Zurücksetzen eines MySQL-Passworts, jetzt machen wir es vom Host aus, ohne uns mit dem MySQL CLI zu verbinden:</p>
<div class="highlight"><pre><span></span><code>Quelle mailcow.conf <p><code>Quelle mailcow.conf
docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e &quot;DELETE FROM tfa WHERE username=&#39;YOUR_USERNAME&#39;;&quot; docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e "DELETE FROM tfa WHERE username='YOUR_USERNAME';"</code></p>
</code></pre></div>
<h3 id="fur-sogo">Für SOGo:<a class="headerlink" href="#fur-sogo" title="Permanent link">&para;</a></h3> <h3 id="fur-sogo">Für SOGo:<a class="headerlink" href="#fur-sogo" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code>docker-compose exec -u sogo sogo-mailcow sogo-tool user-preferences set defaults user@example.com SOGoGoogleAuthenticatorEnabled &#39;{&quot;SOGoGoogleAuthenticatorEnabled&quot;:0}&#39; <p><code>docker-compose exec -u sogo sogo-mailcow sogo-tool user-preferences set defaults user@example.com SOGoGoogleAuthenticatorEnabled '{"SOGoGoogleAuthenticatorEnabled":0}'</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2346,14 +2346,13 @@
<h1>TLS-Zertifikate zurücksetzen</h1> <h1>TLS-Zertifikate zurücksetzen</h1>
<p>Sollten Sie Probleme mit Ihrem Zertifikat, Schlüssel oder Let's Encrypt-Konto haben, versuchen Sie bitte, die TLS-Assets zurückzusetzen:</p> <p>Sollten Sie Probleme mit Ihrem Zertifikat, Schlüssel oder Let's Encrypt-Konto haben, versuchen Sie bitte, die TLS-Assets zurückzusetzen:</p>
<div class="highlight"><pre><span></span><code>source mailcow.conf <p><code>source mailcow.conf
docker-compose down docker-compose down
rm -rf data/assets/ssl rm -rf data/assets/ssl
mkdir data/assets/ssl mkdir data/assets/ssl
openssl req -x509 -newkey rsa:4096 -keyout data/assets/ssl-example/key.pem -out data/assets/ssl-example/cert.pem -days 365 -subj &quot;/C=DE/ST=NRW/L=Willich/O=mailcow/OU=mailcow/CN=${MAILCOW_HOSTNAME}&quot; -sha256 -nodes openssl req -x509 -newkey rsa:4096 -keyout data/assets/ssl-example/key.pem -out data/assets/ssl-example/cert.pem -days 365 -subj "/C=DE/ST=NRW/L=Willich/O=mailcow/OU=mailcow/CN=${MAILCOW_HOSTNAME}" -sha256 -nodes
cp -n -d data/assets/ssl-example/*.pem data/assets/ssl/ cp -n -d data/assets/ssl-example/*.pem data/assets/ssl/
docker-compose up -d docker-compose up -d</code></p>
</code></pre></div>
<p>Dies wird mailcow stoppen, die benötigten Variablen beschaffen, ein selbstsigniertes Zertifikat erstellen und mailcow starten.</p> <p>Dies wird mailcow stoppen, die benötigten Variablen beschaffen, ein selbstsigniertes Zertifikat erstellen und mailcow starten.</p>
<p>Wenn Sie Let's Encrypt verwenden, sollten Sie vorsichtig sein, da Sie ein neues Konto und einen neuen Satz von Zertifikaten erstellen werden. Sie werden früher oder später auf ein Ratelimit stoßen.</p> <p>Wenn Sie Let's Encrypt verwenden, sollten Sie vorsichtig sein, da Sie ein neues Konto und einen neuen Satz von Zertifikaten erstellen werden. Sie werden früher oder später auf ein Ratelimit stoßen.</p>
<p>Bitte beachten Sie auch, dass frühere TLSA-Datensätze ungültig werden.</p> <p>Bitte beachten Sie auch, dass frühere TLSA-Datensätze ungültig werden.</p>

Datei anzeigen

@ -2348,8 +2348,7 @@
<p>Es kann sein, dass Sie einen Satz persistenter Daten entfernen wollen, um einen Konflikt zu lösen oder um neu zu beginnen.</p> <p>Es kann sein, dass Sie einen Satz persistenter Daten entfernen wollen, um einen Konflikt zu lösen oder um neu zu beginnen.</p>
<p><code>mailcowdockerized</code> kann variieren und hängt von Ihrem Compose-Projektnamen ab (wenn er unverändert ist, ist <code>mailcowdockerized</code> der richtige Wert). Wenn Sie sich unsicher sind, führen Sie <code>docker volume ls</code> aus, um eine vollständige Liste zu erhalten.</p> <p><code>mailcowdockerized</code> kann variieren und hängt von Ihrem Compose-Projektnamen ab (wenn er unverändert ist, ist <code>mailcowdockerized</code> der richtige Wert). Wenn Sie sich unsicher sind, führen Sie <code>docker volume ls</code> aus, um eine vollständige Liste zu erhalten.</p>
<p>Löschen Sie ein einzelnes Volume:</p> <p>Löschen Sie ein einzelnes Volume:</p>
<div class="highlight"><pre><span></span><code>docker volume rm mailcowdockerized_${VOLUME_NAME} <p><code>docker volume rm mailcowdockerized_${VOLUME_NAME}</code></p>
</code></pre></div>
<ul> <ul>
<li>Entfernen Sie Volume <code>mysql-vol-1</code>, um alle MySQL-Daten zu entfernen.</li> <li>Entfernen Sie Volume <code>mysql-vol-1</code>, um alle MySQL-Daten zu entfernen.</li>
<li>Entfernen Sie Volume <code>redis-vol-1</code> um alle Redis Daten zu entfernen.</li> <li>Entfernen Sie Volume <code>redis-vol-1</code> um alle Redis Daten zu entfernen.</li>

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#fugen-sie-vor-exec-die-folgenden-zeilen-ein" class="md-skip">
Zum Inhalt
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -730,6 +735,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
Fortgeschritten: Memory-Leaks in Rspamd finden Fortgeschritten: Memory-Leaks in Rspamd finden
@ -2326,6 +2333,8 @@
</nav> </nav>
</div> </div>
@ -2343,24 +2352,18 @@
<h1>Fortgeschritten: Memory-Leaks in Rspamd finden</h1>
<p>Eine kurze Anleitung, um einen schlecht funktionierenden Rspamd tiefgehend zu analysieren.</p> <p>Eine kurze Anleitung, um einen schlecht funktionierenden Rspamd tiefgehend zu analysieren.</p>
<div class="highlight"><pre><span></span><code>docker-compose exec rspamd-mailcow bash <p>```
docker-compose exec rspamd-mailcow bash</p>
if ! grep -qi &#39;apt-stable-asan&#39; /etc/apt/sources.list.d/rspamd.list; then <p>if ! grep -qi 'apt-stable-asan' /etc/apt/sources.list.d/rspamd.list; then
sed -i &#39;s/apt-stabil/apt-stabil-asan/i&#39; /etc/apt/sources.list.d/rspamd.list sed -i 's/apt-stabil/apt-stabil-asan/i' /etc/apt/sources.list.d/rspamd.list
fi fi</p>
<p>apt-get update ; apt-get upgrade rspamd</p>
apt-get update ; apt-get upgrade rspamd <p>nano /docker-entrypoint.sh</p>
<h1 id="fugen-sie-vor-exec-die-folgenden-zeilen-ein">Fügen Sie vor "exec "$@"" die folgenden Zeilen ein:<a class="headerlink" href="#fugen-sie-vor-exec-die-folgenden-zeilen-ein" title="Permanent link">&para;</a></h1>
nano /docker-entrypoint.sh <p>export G_SLICE=always-malloc
export ASAN_OPTIONS=new_delete_type_mismatch=0:detect_leaks=1:detect_odr_violation=0:log_path=/tmp/rspamd-asan:quarantine_size_mb=2048:malloc_context_size=8:fast_unwind_on_malloc=0</p>
# Fügen Sie vor &quot;exec &quot;$@&quot;&quot; die folgenden Zeilen ein: <p>```</p>
export G_SLICE=always-malloc
export ASAN_OPTIONS=new_delete_type_mismatch=0:detect_leaks=1:detect_odr_violation=0:log_path=/tmp/rspamd-asan:quarantine_size_mb=2048:malloc_context_size=8:fast_unwind_on_malloc=0
</code></pre></div>
<p>Starten Sie Rspamd neu: <code>docker-compose restart rspamd-mailcow</code></p> <p>Starten Sie Rspamd neu: <code>docker-compose restart rspamd-mailcow</code></p>
<p>Ihr Speicherverbrauch wird stark ansteigen, er wird auch stetig wachsen, was nicht mit einem möglichen Memory Leak zusammenhängt, nach dem Sie suchen.</p> <p>Ihr Speicherverbrauch wird stark ansteigen, er wird auch stetig wachsen, was nicht mit einem möglichen Memory Leak zusammenhängt, nach dem Sie suchen.</p>
<p>Lassen Sie den Container für ein paar Minuten, Stunden oder Tage laufen (es sollte die Zeit sein, die Sie normalerweise warten, bis der Memory Leak "passiert") und starten Sie ihn neu: <code>docker-compose restart rspamd-mailcow</code>.</p> <p>Lassen Sie den Container für ein paar Minuten, Stunden oder Tage laufen (es sollte die Zeit sein, die Sie normalerweise warten, bis der Memory Leak "passiert") und starten Sie ihn neu: <code>docker-compose restart rspamd-mailcow</code>.</p>

Datei anzeigen

@ -2428,9 +2428,8 @@
<p>To restore make sure you are actually restoring to the same mailcow it was deleted from or you use the same encryption keys in <code>crypt-vol-1</code>.</p> <p>To restore make sure you are actually restoring to the same mailcow it was deleted from or you use the same encryption keys in <code>crypt-vol-1</code>.</p>
<p><strong>Make sure the user you want to restore exists in your mailcow</strong>. Re-create them if they are missing.</p> <p><strong>Make sure the user you want to restore exists in your mailcow</strong>. Re-create them if they are missing.</p>
<p>Copy the folders from <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/_garbage/[timestamp]_[domain_sanitized][user_sanitized]</code> back to <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/[domain]/[user]</code> and resync the folder and recalc the quota:</p> <p>Copy the folders from <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/_garbage/[timestamp]_[domain_sanitized][user_sanitized]</code> back to <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/[domain]/[user]</code> and resync the folder and recalc the quota:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net &#39;*&#39; <p><code>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net '*'
docker-compose exec dovecot-mailcow doveadm quota recalc -u restoreme@example.net docker-compose exec dovecot-mailcow doveadm quota recalc -u restoreme@example.net</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -961,6 +961,47 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days" class="md-nav__link">
./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)
</a>
</li>
<li class="md-nav__item">
<a href="#backup-all-delete-backups-older-than-3-days" class="md-nav__link">
Backup all, delete backups older than 3 days
</a>
</li>
<li class="md-nav__item">
<a href="#backup-vmail-crypt-and-mysql-data-delete-backups-older-than-30-days" class="md-nav__link">
Backup vmail, crypt and mysql data, delete backups older than 30 days
</a>
</li>
<li class="md-nav__item">
<a href="#backup-vmail" class="md-nav__link">
Backup vmail
</a>
<nav class="md-nav" aria-label="Backup vmail">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#cronjob" class="md-nav__link"> <a href="#cronjob" class="md-nav__link">
Cronjob Cronjob
@ -971,6 +1012,34 @@
</ul> </ul>
</nav> </nav>
</li>
<li class="md-nav__item">
<a href="#binsh" class="md-nav__link">
!/bin/sh
</a>
</li>
<li class="md-nav__item">
<a href="#backup-mailcow-data" class="md-nav__link">
Backup mailcow data
</a>
</li>
<li class="md-nav__item">
<a href="#httpsmailcowgithubiomailcow-dockerized-docsbackup_restoreb_n_r-backup" class="md-nav__link">
https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/
</a>
</li>
<li class="md-nav__item">
<a href="#run-command" class="md-nav__link">
run command
</a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
@ -978,6 +1047,13 @@
Backup strategy with rsync and mailcow backup script Backup strategy with rsync and mailcow backup script
</a> </a>
</li>
<li class="md-nav__item">
<a href="#if-you-want-to-use-the-acl-util-to-backup-permissions-of-someall-foldersfiles-getfacl-rn-path" class="md-nav__link">
If you want to, use the acl util to backup permissions of some/all folders/files: getfacl -Rn /path
</a>
</li> </li>
</ul> </ul>
@ -2411,6 +2487,47 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days" class="md-nav__link">
./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)
</a>
</li>
<li class="md-nav__item">
<a href="#backup-all-delete-backups-older-than-3-days" class="md-nav__link">
Backup all, delete backups older than 3 days
</a>
</li>
<li class="md-nav__item">
<a href="#backup-vmail-crypt-and-mysql-data-delete-backups-older-than-30-days" class="md-nav__link">
Backup vmail, crypt and mysql data, delete backups older than 30 days
</a>
</li>
<li class="md-nav__item">
<a href="#backup-vmail" class="md-nav__link">
Backup vmail
</a>
<nav class="md-nav" aria-label="Backup vmail">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#cronjob" class="md-nav__link"> <a href="#cronjob" class="md-nav__link">
Cronjob Cronjob
@ -2421,6 +2538,34 @@
</ul> </ul>
</nav> </nav>
</li>
<li class="md-nav__item">
<a href="#binsh" class="md-nav__link">
!/bin/sh
</a>
</li>
<li class="md-nav__item">
<a href="#backup-mailcow-data" class="md-nav__link">
Backup mailcow data
</a>
</li>
<li class="md-nav__item">
<a href="#httpsmailcowgithubiomailcow-dockerized-docsbackup_restoreb_n_r-backup" class="md-nav__link">
https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/
</a>
</li>
<li class="md-nav__item">
<a href="#run-command" class="md-nav__link">
run command
</a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
@ -2428,6 +2573,13 @@
Backup strategy with rsync and mailcow backup script Backup strategy with rsync and mailcow backup script
</a> </a>
</li>
<li class="md-nav__item">
<a href="#if-you-want-to-use-the-acl-util-to-backup-permissions-of-someall-foldersfiles-getfacl-rn-path" class="md-nav__link">
If you want to, use the acl util to backup permissions of some/all folders/files: getfacl -Rn /path
</a>
</li> </li>
</ul> </ul>
@ -2454,65 +2606,57 @@
<p>Please do not copy this script to another location.</p> <p>Please do not copy this script to another location.</p>
<p>To run a backup, write "backup" as first parameter and either one or more components to backup as following parameters. <p>To run a backup, write "backup" as first parameter and either one or more components to backup as following parameters.
You can also use "all" as second parameter to backup all components. Append <code>--delete-days n</code> to delete backups older than n days.</p> You can also use "all" as second parameter to backup all components. Append <code>--delete-days n</code> to delete backups older than n days.</p>
<div class="highlight"><pre><span></span><code># Syntax: <p>```</p>
# ./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days) <h1 id="syntax">Syntax:<a class="headerlink" href="#syntax" title="Permanent link">&para;</a></h1>
<h1 id="helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days">./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)<a class="headerlink" href="#helper-scriptsbackup_and_restoresh-backup-vmailcryptredisrspamdpostfixmysqlall-delete-days" title="Permanent link">&para;</a></h1>
# Backup all, delete backups older than 3 days <h1 id="backup-all-delete-backups-older-than-3-days">Backup all, delete backups older than 3 days<a class="headerlink" href="#backup-all-delete-backups-older-than-3-days" title="Permanent link">&para;</a></h1>
./helper-scripts/backup_and_restore.sh backup all --delete-days 3 <p>./helper-scripts/backup_and_restore.sh backup all --delete-days 3</p>
<h1 id="backup-vmail-crypt-and-mysql-data-delete-backups-older-than-30-days">Backup vmail, crypt and mysql data, delete backups older than 30 days<a class="headerlink" href="#backup-vmail-crypt-and-mysql-data-delete-backups-older-than-30-days" title="Permanent link">&para;</a></h1>
# Backup vmail, crypt and mysql data, delete backups older than 30 days <p>./helper-scripts/backup_and_restore.sh backup vmail crypt mysql --delete-days 30</p>
./helper-scripts/backup_and_restore.sh backup vmail crypt mysql --delete-days 30 <h1 id="backup-vmail">Backup vmail<a class="headerlink" href="#backup-vmail" title="Permanent link">&para;</a></h1>
<p>./helper-scripts/backup_and_restore.sh backup vmail</p>
# Backup vmail <p>```</p>
./helper-scripts/backup_and_restore.sh backup vmail
</code></pre></div>
<p>The script will ask you for a backup location. Inside of this location it will create folders in the format "mailcow_DATE". <p>The script will ask you for a backup location. Inside of this location it will create folders in the format "mailcow_DATE".
You should not rename those folders to not break the restore process.</p> You should not rename those folders to not break the restore process.</p>
<p>To run a backup unattended, define MAILCOW_BACKUP_LOCATION as environment variable before starting the script:</p> <p>To run a backup unattended, define MAILCOW_BACKUP_LOCATION as environment variable before starting the script:</p>
<div class="highlight"><pre><span></span><code>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all <p><code>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all</code></p>
</code></pre></div>
<h4 id="cronjob">Cronjob<a class="headerlink" href="#cronjob" title="Permanent link">&para;</a></h4> <h4 id="cronjob">Cronjob<a class="headerlink" href="#cronjob" title="Permanent link">&para;</a></h4>
<p>You can run the backup script regularly via cronjob. Make sure <code>BACKUP_LOCATION</code> exists:</p> <p>You can run the backup script regularly via cronjob. Make sure <code>BACKUP_LOCATION</code> exists:</p>
<div class="highlight"><pre><span></span><code>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3 <p><code>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3</code></p>
</code></pre></div>
<p>Per default cron sends the full result of each backup operation by email. If you want cron to only mail on error (non-zero exit code) you may want to use the following snippet. Pathes need to be modified according to your setup (this script is a user contribution).</p> <p>Per default cron sends the full result of each backup operation by email. If you want cron to only mail on error (non-zero exit code) you may want to use the following snippet. Pathes need to be modified according to your setup (this script is a user contribution).</p>
<p>This following script may be placed in <code>/etc/cron.daily/mailcow-backup</code> - do not forget to mark it as executable via <code>chmod +x</code>:</p> <p>This following script may be placed in <code>/etc/cron.daily/mailcow-backup</code> - do not forget to mark it as executable via <code>chmod +x</code>:</p>
<div class="highlight"><pre><span></span><code>#!/bin/sh <p>```</p>
<h1 id="binsh">!/bin/sh<a class="headerlink" href="#binsh" title="Permanent link">&para;</a></h1>
# Backup mailcow data <h1 id="backup-mailcow-data">Backup mailcow data<a class="headerlink" href="#backup-mailcow-data" title="Permanent link">&para;</a></h1>
# https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/ <h1 id="httpsmailcowgithubiomailcow-dockerized-docsbackup_restoreb_n_r-backup"><a href="https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/">https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/</a><a class="headerlink" href="#httpsmailcowgithubiomailcow-dockerized-docsbackup_restoreb_n_r-backup" title="Permanent link">&para;</a></h1>
<p>set -e</p>
set -e <p>OUT="$(mktemp)"
export MAILCOW_BACKUP_LOCATION="/opt/backup"
OUT=&quot;$(mktemp)&quot; SCRIPT="/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh"
export MAILCOW_BACKUP_LOCATION=&quot;/opt/backup&quot; PARAMETERS="backup all"
SCRIPT=&quot;/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh&quot; OPTIONS="--delete-days 30"</p>
PARAMETERS=&quot;backup all&quot; <h1 id="run-command">run command<a class="headerlink" href="#run-command" title="Permanent link">&para;</a></h1>
OPTIONS=&quot;--delete-days 30&quot; <p>set +e
"${SCRIPT}" ${PARAMETERS} ${OPTIONS} 2&gt;&amp;1 &gt; "$OUT"
# run command RESULT=$?</p>
set +e <p>if [ $RESULT -ne 0 ]
&quot;${SCRIPT}&quot; ${PARAMETERS} ${OPTIONS} 2&gt;&amp;1 &gt; &quot;$OUT&quot;
RESULT=$?
if [ $RESULT -ne 0 ]
then then
echo &quot;${SCRIPT} ${PARAMETERS} ${OPTIONS} encounters an error:&quot; echo "${SCRIPT} ${PARAMETERS} ${OPTIONS} encounters an error:"
echo &quot;RESULT=$RESULT&quot; echo "RESULT=$RESULT"
echo &quot;STDOUT / STDERR:&quot; echo "STDOUT / STDERR:"
cat &quot;$OUT&quot; cat "$OUT"
fi fi
</code></pre></div> ```</p>
<h1 id="backup-strategy-with-rsync-and-mailcow-backup-script">Backup strategy with rsync and mailcow backup script<a class="headerlink" href="#backup-strategy-with-rsync-and-mailcow-backup-script" title="Permanent link">&para;</a></h1> <h1 id="backup-strategy-with-rsync-and-mailcow-backup-script">Backup strategy with rsync and mailcow backup script<a class="headerlink" href="#backup-strategy-with-rsync-and-mailcow-backup-script" title="Permanent link">&para;</a></h1>
<p>Create the destination directory for mailcows helper script: <p>Create the destination directory for mailcows helper script:
<div class="highlight"><pre><span></span><code>mkdir -p /external_share/backups/backup_script <code>mkdir -p /external_share/backups/backup_script</code></p>
</code></pre></div></p>
<p>Create cronjobs: <p>Create cronjobs:
<div class="highlight"><pre><span></span><code>25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized ```
25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized
40 2 * * * rsync -aH --delete /var/lib/docker/volumes /external_share/backups/var_lib_docker_volumes 40 2 * * * rsync -aH --delete /var/lib/docker/volumes /external_share/backups/var_lib_docker_volumes
5 4 * * * cd /opt/mailcow-dockerized/; BACKUP_LOCATION=/external_share/backups/backup_script /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3 5 4 * * * cd /opt/mailcow-dockerized/; BACKUP_LOCATION=/external_share/backups/backup_script /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3</p>
# If you want to, use the acl util to backup permissions of some/all folders/files: getfacl -Rn /path <h1 id="if-you-want-to-use-the-acl-util-to-backup-permissions-of-someall-foldersfiles-getfacl-rn-path">If you want to, use the acl util to backup permissions of some/all folders/files: getfacl -Rn /path<a class="headerlink" href="#if-you-want-to-use-the-acl-util-to-backup-permissions-of-someall-foldersfiles-getfacl-rn-path" title="Permanent link">&para;</a></h1>
</code></pre></div></p> <p>```</p>
<p>On the destination (in this case <code>/external_share/backups</code>) you may want to have snapshot capabilities (ZFS, Btrfs etc.). Snapshot daily and keep for n days for a consistent backup. <p>On the destination (in this case <code>/external_share/backups</code>) you may want to have snapshot capabilities (ZFS, Btrfs etc.). Snapshot daily and keep for n days for a consistent backup.
Do <strong>not</strong> rsync to a Samba share, you need to keep the correct permissions!</p> Do <strong>not</strong> rsync to a Samba share, you need to keep the correct permissions!</p>
<p>To restore you'd simply need to run rsync the other way round and restart Docker to re-read the volumes. Run <code>docker-compose pull</code> and <code>docker-compose up -d</code>.</p> <p>To restore you'd simply need to run rsync the other way round and restart Docker to re-read the volumes. Run <code>docker-compose pull</code> and <code>docker-compose up -d</code>.</p>

Datei anzeigen

@ -2412,15 +2412,13 @@
<h3 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h3> <h3 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h3>
<p>This line backups the vmail directory to a file backup_vmail.tar.gz in the mailcow root directory: <p>This line backups the vmail directory to a file backup_vmail.tar.gz in the mailcow root directory:
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized <code>cd /path/to/mailcow-dockerized
docker run --rm -i -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar cvfz /backup/backup_vmail.tar.gz /vmail docker run --rm -i -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar cvfz /backup/backup_vmail.tar.gz /vmail</code></p>
</code></pre></div></p>
<p>You can change the path by adjusting ${PWD} (which equals to the current directory) to any path you have write-access to. <p>You can change the path by adjusting ${PWD} (which equals to the current directory) to any path you have write-access to.
Set the filename <code>backup_vmail.tar.gz</code> to any custom name, but leave the path as it is. Example: <code>[...] tar cvfz /backup/my_own_filename_.tar.gz</code></p> Set the filename <code>backup_vmail.tar.gz</code> to any custom name, but leave the path as it is. Example: <code>[...] tar cvfz /backup/my_own_filename_.tar.gz</code></p>
<h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3> <h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized <p><code>cd /path/to/mailcow-dockerized
docker run --rm -it -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar xvfz /backup/backup_vmail.tar.gz docker run --rm -it -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar xvfz /backup/backup_vmail.tar.gz</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2411,20 +2411,18 @@
<h1>MySQL (mysqldump)</h1> <h1>MySQL (mysqldump)</h1>
<h2 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h2> <h2 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized <p><code>cd /path/to/mailcow-dockerized
source mailcow.conf source mailcow.conf
DATE=$(date +&quot;%Y%m%d_%H%M%S&quot;) DATE=$(date +"%Y%m%d_%H%M%S")
docker-compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} &gt; backup_${DBNAME}_${DATE}.sql docker-compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} &gt; backup_${DBNAME}_${DATE}.sql</code></p>
</code></pre></div>
<h2 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h2> <h2 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h2>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
<p>You should redirect the SQL dump without <code>docker-compose</code> to prevent parsing errors.</p> <p>You should redirect the SQL dump without <code>docker-compose</code> to prevent parsing errors.</p>
</div> </div>
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized <p><code>cd /path/to/mailcow-dockerized
source mailcow.conf source mailcow.conf
docker exec -i $(docker-compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} &lt; backup_file.sql docker exec -i $(docker-compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} &lt; backup_file.sql</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2459,10 +2459,9 @@
<p>You will need a SSH-enabled destination and a keyfile to connect to said destination. The key should not be protected by a password for the script to work unattended.</p> <p>You will need a SSH-enabled destination and a keyfile to connect to said destination. The key should not be protected by a password for the script to work unattended.</p>
<p>In your mailcow base directory, e.g. <code>/opt/mailcow-dockerized</code> you will find a file <code>create_cold_standby.sh</code>.</p> <p>In your mailcow base directory, e.g. <code>/opt/mailcow-dockerized</code> you will find a file <code>create_cold_standby.sh</code>.</p>
<p>Edit this file and change the exported variables:</p> <p>Edit this file and change the exported variables:</p>
<div class="highlight"><pre><span></span><code>export REMOTE_SSH_KEY=/path/to/keyfile <p><code>export REMOTE_SSH_KEY=/path/to/keyfile
export REMOTE_SSH_PORT=22 export REMOTE_SSH_PORT=22
export REMOTE_SSH_HOST=mailcow-backup.host.name export REMOTE_SSH_HOST=mailcow-backup.host.name</code></p>
</code></pre></div>
<p>The key must be owned and readable by root only.</p> <p>The key must be owned and readable by root only.</p>
<p>Both the source and destination require <code>rsync</code> &gt;= v3.1.0. <p>Both the source and destination require <code>rsync</code> &gt;= v3.1.0.
The destination must have Docker and docker-compose <strong>v1</strong> available.</p> The destination must have Docker and docker-compose <strong>v1</strong> available.</p>
@ -2470,28 +2469,23 @@ The destination must have Docker and docker-compose <strong>v1</strong> availabl
<p>You may want to test the connection by running <code>ssh mailcow-backup.host.name -p22 -i /path/to/keyfile</code>.</p> <p>You may want to test the connection by running <code>ssh mailcow-backup.host.name -p22 -i /path/to/keyfile</code>.</p>
<h2 id="backup-and-refresh-the-cold-standby">Backup and refresh the cold-standby<a class="headerlink" href="#backup-and-refresh-the-cold-standby" title="Permanent link">&para;</a></h2> <h2 id="backup-and-refresh-the-cold-standby">Backup and refresh the cold-standby<a class="headerlink" href="#backup-and-refresh-the-cold-standby" title="Permanent link">&para;</a></h2>
<p>Run the first backup, this may take a while depending on the connection:</p> <p>Run the first backup, this may take a while depending on the connection:</p>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh <p><code>bash /opt/mailcow-dockerized/create_cold_standby.sh</code></p>
</code></pre></div>
<p>That was easy, wasn't it?</p> <p>That was easy, wasn't it?</p>
<p>Updating your cold-standby is just as easy:</p> <p>Updating your cold-standby is just as easy:</p>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh <p><code>bash /opt/mailcow-dockerized/create_cold_standby.sh</code></p>
</code></pre></div>
<p>It's the same command.</p> <p>It's the same command.</p>
<h2 id="automated-backups-with-cron">Automated backups with cron<a class="headerlink" href="#automated-backups-with-cron" title="Permanent link">&para;</a></h2> <h2 id="automated-backups-with-cron">Automated backups with cron<a class="headerlink" href="#automated-backups-with-cron" title="Permanent link">&para;</a></h2>
<p>First make sure that the <code>cron</code> service is enabled and running:</p> <p>First make sure that the <code>cron</code> service is enabled and running:</p>
<div class="highlight"><pre><span></span><code>systemctl enable cron.service &amp;&amp; systemctl start cron.service <p><code>systemctl enable cron.service &amp;&amp; systemctl start cron.service</code></p>
</code></pre></div>
<p>To automate the backups to the cold-standby server you can use a cron job. To edit the cron jobs for the root user run:</p> <p>To automate the backups to the cold-standby server you can use a cron job. To edit the cron jobs for the root user run:</p>
<div class="highlight"><pre><span></span><code>crontab -e <p><code>crontab -e</code></p>
</code></pre></div>
<p>Add the following lines to synchronize the cold standby server daily at 03:00. In this example errors of the last execution are logged into a file.</p> <p>Add the following lines to synchronize the cold standby server daily at 03:00. In this example errors of the last execution are logged into a file.</p>
<div class="highlight"><pre><span></span><code>PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin <p>```
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin</p>
0 3 * * * bash /opt/mailcow-dockerized/create_cold_standby.sh 2&gt; /var/log/mailcow-coldstandby-sync.log <p>0 3 * * * bash /opt/mailcow-dockerized/create_cold_standby.sh 2&gt; /var/log/mailcow-coldstandby-sync.log
</code></pre></div> ```</p>
<p>If saved correctly, the cron job should be shown by typing:</p> <p>If saved correctly, the cron job should be shown by typing:</p>
<div class="highlight"><pre><span></span><code>crontab -l <p><code>crontab -l</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -965,6 +965,20 @@
Restore Restore
</a> </a>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-restore" class="md-nav__link">
./helper-scripts/backup_and_restore.sh restore
</a>
</li> </li>
</ul> </ul>
@ -2374,6 +2388,20 @@
Restore Restore
</a> </a>
</li>
<li class="md-nav__item">
<a href="#syntax" class="md-nav__link">
Syntax:
</a>
</li>
<li class="md-nav__item">
<a href="#helper-scriptsbackup_and_restoresh-restore" class="md-nav__link">
./helper-scripts/backup_and_restore.sh restore
</a>
</li> </li>
</ul> </ul>
@ -2394,14 +2422,13 @@
<h1>Restore</h1>
<h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3> <h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3>
<p>Please do not copy this script to another location.</p> <p>Please do not copy this script to another location.</p>
<p>To run a restore, <strong>start mailcow</strong>, use the script with "restore" as first parameter.</p> <p>To run a restore, <strong>start mailcow</strong>, use the script with "restore" as first parameter.</p>
<div class="highlight"><pre><span></span><code># Syntax: <p>```</p>
# ./helper-scripts/backup_and_restore.sh restore <h1 id="syntax">Syntax:<a class="headerlink" href="#syntax" title="Permanent link">&para;</a></h1>
</code></pre></div> <h1 id="helper-scriptsbackup_and_restoresh-restore">./helper-scripts/backup_and_restore.sh restore<a class="headerlink" href="#helper-scriptsbackup_and_restoresh-restore" title="Permanent link">&para;</a></h1>
<p>```</p>
<p>The script will ask you for a backup location containing the mailcow_DATE folders.</p> <p>The script will ask you for a backup location containing the mailcow_DATE folders.</p>
<hr> <hr>

Datei anzeigen

@ -2346,8 +2346,7 @@
<h1>Deinstallation</h1> <h1>Deinstallation</h1>
<p>To remove mailcow: dockerized with all it's volumes, images and containers do:</p> <p>To remove mailcow: dockerized with all it's volumes, images and containers do:</p>
<div class="highlight"><pre><span></span><code>docker-compose down -v --rmi all --remove-orphans <p><code>docker-compose down -v --rmi all --remove-orphans</code></p>
</code></pre></div>
<div class="admonition info"> <div class="admonition info">
<p class="admonition-title">Info</p> <p class="admonition-title">Info</p>
<ul> <ul>

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#after-the-installation-process-is-finished-you-may-need-to-enable-the-service-and-make-sure-it-is-started-eg-centos-7" class="md-skip">
Skip to content
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -362,6 +367,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
Installation Installation
@ -2326,6 +2333,8 @@
</nav> </nav>
</div> </div>
@ -2343,66 +2352,58 @@
<h1>Installation</h1>
<p>You need Docker (a version &gt;= <code>20.10.2</code> is required) and Docker Compose (a version <code>&lt;= 2.0</code> is required).</p> <p>You need Docker (a version &gt;= <code>20.10.2</code> is required) and Docker Compose (a version <code>&lt;= 2.0</code> is required).</p>
<p><strong>1.</strong> Learn how to install <a href="https://docs.docker.com/install/">Docker</a> and <a href="https://docs.docker.com/compose/install/">Docker Compose</a>.</p> <p><strong>1.</strong> Learn how to install <a href="https://docs.docker.com/install/">Docker</a> and <a href="https://docs.docker.com/compose/install/">Docker Compose</a>.</p>
<p>Quick installation for most operation systems:</p> <p>Quick installation for most operation systems:</p>
<ul> <ul>
<li> <li>Docker
<p>Docker ```
<div class="highlight"><pre><span></span><code>curl -sSL https://get.docker.com/ | CHANNEL=stable sh curl -sSL <a href="https://get.docker.com/">https://get.docker.com/</a> | CHANNEL=stable sh</li>
# After the installation process is finished, you may need to enable the service and make sure it is started (e.g. CentOS 7) </ul>
systemctl enable --now docker <h1 id="after-the-installation-process-is-finished-you-may-need-to-enable-the-service-and-make-sure-it-is-started-eg-centos-7">After the installation process is finished, you may need to enable the service and make sure it is started (e.g. CentOS 7)<a class="headerlink" href="#after-the-installation-process-is-finished-you-may-need-to-enable-the-service-and-make-sure-it-is-started-eg-centos-7" title="Permanent link">&para;</a></h1>
</code></pre></div></p> <p>systemctl enable --now docker
</li> ```</p>
<li> <ul>
<p>Docker-Compose</p> <li>Docker-Compose</li>
</li>
</ul> </ul>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
<p><strong>mailcow requires the latest version of docker-compose v1.</strong> It is highly recommended to use the commands below to install <code>docker-compose</code>. Package managers (e.g. <code>apt</code>, <code>yum</code>) <strong>likely won't</strong> give you the correct version. <p><strong>mailcow requires the latest version of docker-compose v1.</strong> It is highly recommended to use the commands below to install <code>docker-compose</code>. Package managers (e.g. <code>apt</code>, <code>yum</code>) <strong>likely won't</strong> give you the correct version.
<em>Note: This command downloads docker-compose from the official Docker Github repository and is a safe method. The snippet will determine the latest supported version by mailcow. In almost all cases this is the latest version available (exceptions are broken releases or major changes not yet supported by mailcow).</em></p> <em>Note: This command downloads docker-compose from the official Docker Github repository and is a safe method. The snippet will determine the latest supported version by mailcow. In almost all cases this is the latest version available (exceptions are broken releases or major changes not yet supported by mailcow).</em></p>
</div> </div>
<div class="highlight"><pre><span></span><code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose <p><code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose</code></p>
</code></pre></div>
<p>Please use the latest Docker engine available and do not use the engine that ships with your distros repository.</p> <p>Please use the latest Docker engine available and do not use the engine that ships with your distros repository.</p>
<p><strong>1.1.</strong> On SELinux enabled systems, e.g. CentOS 7:</p> <p><strong>1.1.</strong> On SELinux enabled systems, e.g. CentOS 7:</p>
<ul> <ul>
<li>Check if "container-selinux" package is present on your system:</li> <li>Check if "container-selinux" package is present on your system:</li>
</ul> </ul>
<div class="highlight"><pre><span></span><code>rpm -qa | grep container-selinux <p><code>rpm -qa | grep container-selinux</code></p>
</code></pre></div>
<p>If the above command returns an empty or no output, you should install it via your package manager.</p> <p>If the above command returns an empty or no output, you should install it via your package manager.</p>
<ul> <ul>
<li>Check if docker has SELinux support enabled:</li> <li>Check if docker has SELinux support enabled:</li>
</ul> </ul>
<div class="highlight"><pre><span></span><code>docker info | grep selinux <p><code>docker info | grep selinux</code></p>
</code></pre></div>
<p>If the above command returns an empty or no output, create or edit <code>/etc/docker/daemon.json</code> and add <code>"selinux-enabled": true</code>. Example file content:</p> <p>If the above command returns an empty or no output, create or edit <code>/etc/docker/daemon.json</code> and add <code>"selinux-enabled": true</code>. Example file content:</p>
<div class="highlight"><pre><span></span><code>{ <p><code>{
&quot;selinux-enabled&quot;: true "selinux-enabled": true
} }</code></p>
</code></pre></div>
<p>Restart the docker daemon and verify SELinux is now enabled.</p> <p>Restart the docker daemon and verify SELinux is now enabled.</p>
<p>This step is required to make sure mailcows volumes are properly labeled as declared in the compose file. <p>This step is required to make sure mailcows volumes are properly labeled as declared in the compose file.
If you are interested in how this works, you can check out the readme of <a href="https://github.com/containers/container-selinux">https://github.com/containers/container-selinux</a> which links to a lot of useful information on that topic.</p> If you are interested in how this works, you can check out the readme of <a href="https://github.com/containers/container-selinux">https://github.com/containers/container-selinux</a> which links to a lot of useful information on that topic.</p>
<p><strong>2.</strong> Clone the master branch of the repository, make sure your umask equals 0022. Please clone the repository as root user and also control the stack as root. We will modify attributes - if necessary - while bootstrapping the containers automatically and make sure everything is secured. The update.sh script must therefore also be run as root. It might be necessary to change ownership and other attributes of files you will otherwise not have access to. <strong>We drop permissions for every exposed application</strong> and will not run an exposed service as root! Controlling the Docker daemon as non-root user does not give you additional security. The unprivileged user will spawn the containers as root likewise. The behaviour of the stack is identical.</p> <p><strong>2.</strong> Clone the master branch of the repository, make sure your umask equals 0022. Please clone the repository as root user and also control the stack as root. We will modify attributes - if necessary - while bootstrapping the containers automatically and make sure everything is secured. The update.sh script must therefore also be run as root. It might be necessary to change ownership and other attributes of files you will otherwise not have access to. <strong>We drop permissions for every exposed application</strong> and will not run an exposed service as root! Controlling the Docker daemon as non-root user does not give you additional security. The unprivileged user will spawn the containers as root likewise. The behaviour of the stack is identical.</p>
<div class="highlight"><pre><span></span><code>$ su <p>```
# umask $ su</p>
0022 # &lt;- Verify it is 0022 <h1 id="umask">umask<a class="headerlink" href="#umask" title="Permanent link">&para;</a></h1>
# cd /opt <p>0022 # &lt;- Verify it is 0022</p>
# git clone https://github.com/mailcow/mailcow-dockerized <h1 id="cd-opt">cd /opt<a class="headerlink" href="#cd-opt" title="Permanent link">&para;</a></h1>
# cd mailcow-dockerized <h1 id="git-clone-httpsgithubcommailcowmailcow-dockerized">git clone <a href="https://github.com/mailcow/mailcow-dockerized">https://github.com/mailcow/mailcow-dockerized</a><a class="headerlink" href="#git-clone-httpsgithubcommailcowmailcow-dockerized" title="Permanent link">&para;</a></h1>
</code></pre></div> <h1 id="cd-mailcow-dockerized">cd mailcow-dockerized<a class="headerlink" href="#cd-mailcow-dockerized" title="Permanent link">&para;</a></h1>
<p>```</p>
<p><strong>3.</strong> Generate a configuration file. Use a FQDN (<code>host.domain.tld</code>) as hostname when asked. <p><strong>3.</strong> Generate a configuration file. Use a FQDN (<code>host.domain.tld</code>) as hostname when asked.
<div class="highlight"><pre><span></span><code>./generate_config.sh <code>./generate_config.sh</code></p>
</code></pre></div></p>
<p><strong>4.</strong> Change configuration if you want or need to. <p><strong>4.</strong> Change configuration if you want or need to.
<div class="highlight"><pre><span></span><code>nano mailcow.conf <code>nano mailcow.conf</code>
</code></pre></div>
If you plan to use a reverse proxy, you can, for example, bind HTTPS to 127.0.0.1 on port 8443 and HTTP to 127.0.0.1 on port 8080.</p> If you plan to use a reverse proxy, you can, for example, bind HTTPS to 127.0.0.1 on port 8443 and HTTP to 127.0.0.1 on port 8080.</p>
<p>You may need to stop an existing pre-installed MTA which blocks port 25/tcp. See <a href="../../post_installation/firststeps-local_mta/">this chapter</a> to learn how to reconfigure Postfix to run besides mailcow after a successful installation.</p> <p>You may need to stop an existing pre-installed MTA which blocks port 25/tcp. See <a href="../../post_installation/firststeps-local_mta/">this chapter</a> to learn how to reconfigure Postfix to run besides mailcow after a successful installation.</p>
<p>Some updates modify mailcow.conf and add new parameters. It is hard to keep track of them in the documentation. Please check their description and, if unsure, ask at the known channels for advise.</p> <p>Some updates modify mailcow.conf and add new parameters. It is hard to keep track of them in the documentation. Please check their description and, if unsure, ask at the known channels for advise.</p>
@ -2410,20 +2411,18 @@ If you plan to use a reverse proxy, you can, for example, bind HTTPS to 127.0.0.
<p><strong>Whenever you run into trouble and strange phenomena, please check your MTU.</strong></p> <p><strong>Whenever you run into trouble and strange phenomena, please check your MTU.</strong></p>
<p>Edit <code>docker-compose.yml</code> and change the network settings according to your MTU. <p>Edit <code>docker-compose.yml</code> and change the network settings according to your MTU.
Add the new driver_opts parameter like this: Add the new driver_opts parameter like this:
<div class="highlight"><pre><span></span><code>networks: <code>networks:
mailcow-network: mailcow-network:
... ...
driver_opts: driver_opts:
com.docker.network.driver.mtu: 1450 com.docker.network.driver.mtu: 1450
... ...</code></p>
</code></pre></div></p>
<p><strong>4.2.</strong> Users without an IPv6 enabled network on their host system:</p> <p><strong>4.2.</strong> Users without an IPv6 enabled network on their host system:</p>
<p><strong>Enable IPv6. Finally.</strong></p> <p><strong>Enable IPv6. Finally.</strong></p>
<p>If you do not have an IPv6 enabled network on your host and you don't care for a better internet (thehe), it is recommended to <a href="../../post_installation/firststeps-disable_ipv6/">disable IPv6</a> for the mailcow network to prevent unforeseen issues.</p> <p>If you do not have an IPv6 enabled network on your host and you don't care for a better internet (thehe), it is recommended to <a href="../../post_installation/firststeps-disable_ipv6/">disable IPv6</a> for the mailcow network to prevent unforeseen issues.</p>
<p><strong>5.</strong> Pull the images and run the compose file. The parameter <code>-d</code> will start mailcow: dockerized detached: <p><strong>5.</strong> Pull the images and run the compose file. The parameter <code>-d</code> will start mailcow: dockerized detached:
<div class="highlight"><pre><span></span><code>docker-compose pull <code>docker-compose pull
docker-compose up -d docker-compose up -d</code></p>
</code></pre></div></p>
<p>Done!</p> <p>Done!</p>
<p>You can now access <strong>https://${MAILCOW_HOSTNAME}</strong> with the default credentials <code>admin</code> + password <code>moohoo</code>.</p> <p>You can now access <strong>https://${MAILCOW_HOSTNAME}</strong> with the default credentials <code>admin</code> + password <code>moohoo</code>.</p>
<div class="admonition info"> <div class="admonition info">

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#after-the-installation-process-is-finished-you-may-need-to-enable-the-service-and-make-sure-it-is-started-eg-centos-7" class="md-skip">
Skip to content
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -390,6 +395,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
Migration Migration
@ -2326,6 +2333,8 @@
</nav> </nav>
</div> </div>
@ -2343,8 +2352,6 @@
<h1>Migration</h1>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
<p>This guide assumes you intend to migrate an existing mailcow server (source) over to a brand new, empty server (target). It takes no care about preserving any existing data on your target server and will erase anything within <code>/var/lib/docker/volumes</code> and thus any Docker volumes you may have already set up.</p> <p>This guide assumes you intend to migrate an existing mailcow server (source) over to a brand new, empty server (target). It takes no care about preserving any existing data on your target server and will erase anything within <code>/var/lib/docker/volumes</code> and thus any Docker volumes you may have already set up.</p>
@ -2357,45 +2364,37 @@
Install <a href="https://docs.docker.com/engine/installation/linux/">Docker</a> and <a href="https://docs.docker.com/compose/install/">Docker Compose</a> on your new server.</p> Install <a href="https://docs.docker.com/engine/installation/linux/">Docker</a> and <a href="https://docs.docker.com/compose/install/">Docker Compose</a> on your new server.</p>
<p>Quick installation for most operation systems:</p> <p>Quick installation for most operation systems:</p>
<ul> <ul>
<li> <li>Docker
<p>Docker ```
<div class="highlight"><pre><span></span><code>curl -sSL https://get.docker.com/ | CHANNEL=stable sh curl -sSL <a href="https://get.docker.com/">https://get.docker.com/</a> | CHANNEL=stable sh</li>
# After the installation process is finished, you may need to enable the service and make sure it is started (e.g. CentOS 7) </ul>
systemctl enable docker.service <h1 id="after-the-installation-process-is-finished-you-may-need-to-enable-the-service-and-make-sure-it-is-started-eg-centos-7">After the installation process is finished, you may need to enable the service and make sure it is started (e.g. CentOS 7)<a class="headerlink" href="#after-the-installation-process-is-finished-you-may-need-to-enable-the-service-and-make-sure-it-is-started-eg-centos-7" title="Permanent link">&para;</a></h1>
</code></pre></div></p> <p>systemctl enable docker.service
</li> ```</p>
<li> <ul>
<p>docker-compose <li>docker-compose
<div class="highlight"><pre><span></span><code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose <code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose</code></li>
</code></pre></div></p>
</li>
</ul> </ul>
<p>Please use the latest Docker engine available and do not use the engine that ships with your distros repository.</p> <p>Please use the latest Docker engine available and do not use the engine that ships with your distros repository.</p>
<p><strong>2.</strong> Stop Docker and assure Docker has stopped: <p><strong>2.</strong> Stop Docker and assure Docker has stopped:
<div class="highlight"><pre><span></span><code>systemctl stop docker.service <code>systemctl stop docker.service
systemctl status docker.service systemctl status docker.service</code></p>
</code></pre></div></p>
<p><strong>3.</strong> Run the following commands on the source machine (take care of adding the trailing slashes in the first path parameter as shown below!) - <strong>WARNING: This command will erase anything that may already exist under <code>/var/lib/docker/volumes</code> on the target machine</strong>: <p><strong>3.</strong> Run the following commands on the source machine (take care of adding the trailing slashes in the first path parameter as shown below!) - <strong>WARNING: This command will erase anything that may already exist under <code>/var/lib/docker/volumes</code> on the target machine</strong>:
<div class="highlight"><pre><span></span><code>rsync -aHhP --numeric-ids --delete /opt/mailcow-dockerized/ root@target-machine.example.com:/opt/mailcow-dockerized <code>rsync -aHhP --numeric-ids --delete /opt/mailcow-dockerized/ root@target-machine.example.com:/opt/mailcow-dockerized
rsync -aHhP --numeric-ids --delete /var/lib/docker/volumes/ root@target-machine.example.com:/var/lib/docker/volumes rsync -aHhP --numeric-ids --delete /var/lib/docker/volumes/ root@target-machine.example.com:/var/lib/docker/volumes</code></p>
</code></pre></div></p>
<p><strong>4.</strong> Shut down mailcow and stop Docker on the source machine. <p><strong>4.</strong> Shut down mailcow and stop Docker on the source machine.
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized <code>cd /opt/mailcow-dockerized
docker-compose down docker-compose down
systemctl stop docker.service systemctl stop docker.service</code></p>
</code></pre></div></p>
<p><strong>5.</strong> Repeat step 3 with the same commands. This will be much quicker than the first time.</p> <p><strong>5.</strong> Repeat step 3 with the same commands. This will be much quicker than the first time.</p>
<p><strong>6.</strong> Switch over to the target machine and start Docker. <p><strong>6.</strong> Switch over to the target machine and start Docker.
<div class="highlight"><pre><span></span><code>systemctl start docker.service <code>systemctl start docker.service</code></p>
</code></pre></div></p>
<p><strong>7.</strong> Now pull the mailcow Docker images on the target machine. <p><strong>7.</strong> Now pull the mailcow Docker images on the target machine.
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized <code>cd /opt/mailcow-dockerized
docker-compose pull docker-compose pull</code></p>
</code></pre></div></p>
<p><strong>8.</strong> Start the whole mailcow stack and everything should be done! <p><strong>8.</strong> Start the whole mailcow stack and everything should be done!
<div class="highlight"><pre><span></span><code>docker-compose up -d <code>docker-compose up -d</code></p>
</code></pre></div></p>
<p><strong>9.</strong> Finally, change your DNS settings to point to the target server.</p> <p><strong>9.</strong> Finally, change your DNS settings to point to the target server.</p>
<hr> <hr>

Datei anzeigen

@ -419,6 +419,75 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#options-can-be-combined" class="md-nav__link">
Options can be combined
</a>
</li>
<li class="md-nav__item">
<a href="#-check-for-updates-and-show-changes" class="md-nav__link">
- Check for updates and show changes
</a>
</li>
<li class="md-nav__item">
<a href="#do-not-try-to-update-docker-compose-make-sure-to-use-the-latest-docker-compose-available" class="md-nav__link">
Do not try to update docker-compose, make sure to use the latest docker-compose available
</a>
</li>
<li class="md-nav__item">
<a href="#-do-not-start-mailcow-after-applying-an-update" class="md-nav__link">
- Do not start mailcow after applying an update
</a>
</li>
<li class="md-nav__item">
<a href="#-force-update-unattended-but-unsupported-use-at-own-risk" class="md-nav__link">
- Force update (unattended, but unsupported, use at own risk)
</a>
</li>
<li class="md-nav__item">
<a href="#-run-garbage-collector-to-cleanup-old-image-tags-and-exit" class="md-nav__link">
- Run garbage collector to cleanup old image tags and exit
</a>
</li>
<li class="md-nav__item">
<a href="#-update-with-merge-strategy-option-ours-instead-of-theirs" class="md-nav__link">
- Update with merge strategy option "ours" instead of "theirs"
</a>
</li>
<li class="md-nav__item">
<a href="#this-will-solve-conflicts-when-merging-in-favor-for-your-local-changes-and-should-be-avoided-local-changes-will-always-be-kept-unless-we-changed-file-xy-too" class="md-nav__link">
This will solve conflicts when merging in favor for your local changes and should be avoided. Local changes will always be kept, unless we changed file XY, too.
</a>
</li>
<li class="md-nav__item">
<a href="#-dont-update-but-prefetch-images-and-exit" class="md-nav__link">
- Don't update, but prefetch images and exit
</a>
<nav class="md-nav" aria-label="- Don't update, but prefetch images and exit">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#i-forgot-what-i-changed-before-running-updatesh" class="md-nav__link"> <a href="#i-forgot-what-i-changed-before-running-updatesh" class="md-nav__link">
I forgot what I changed before running update.sh I forgot what I changed before running update.sh
@ -433,6 +502,19 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#replace-commit-id-22cd00b5e28893ef9ddef3c2b5436453cc5223ab-by-your-id" class="md-nav__link">
Replace commit ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab by your ID
</a>
<nav class="md-nav" aria-label="Replace commit ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab by your ID">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#hooks" class="md-nav__link"> <a href="#hooks" class="md-nav__link">
Hooks Hooks
@ -440,16 +522,16 @@
</li> </li>
</ul> <li class="md-nav__item">
</nav>
</li>
<li class="md-nav__item">
<a href="#footnotes" class="md-nav__link"> <a href="#footnotes" class="md-nav__link">
Footnotes Footnotes
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2423,6 +2505,75 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#options-can-be-combined" class="md-nav__link">
Options can be combined
</a>
</li>
<li class="md-nav__item">
<a href="#-check-for-updates-and-show-changes" class="md-nav__link">
- Check for updates and show changes
</a>
</li>
<li class="md-nav__item">
<a href="#do-not-try-to-update-docker-compose-make-sure-to-use-the-latest-docker-compose-available" class="md-nav__link">
Do not try to update docker-compose, make sure to use the latest docker-compose available
</a>
</li>
<li class="md-nav__item">
<a href="#-do-not-start-mailcow-after-applying-an-update" class="md-nav__link">
- Do not start mailcow after applying an update
</a>
</li>
<li class="md-nav__item">
<a href="#-force-update-unattended-but-unsupported-use-at-own-risk" class="md-nav__link">
- Force update (unattended, but unsupported, use at own risk)
</a>
</li>
<li class="md-nav__item">
<a href="#-run-garbage-collector-to-cleanup-old-image-tags-and-exit" class="md-nav__link">
- Run garbage collector to cleanup old image tags and exit
</a>
</li>
<li class="md-nav__item">
<a href="#-update-with-merge-strategy-option-ours-instead-of-theirs" class="md-nav__link">
- Update with merge strategy option "ours" instead of "theirs"
</a>
</li>
<li class="md-nav__item">
<a href="#this-will-solve-conflicts-when-merging-in-favor-for-your-local-changes-and-should-be-avoided-local-changes-will-always-be-kept-unless-we-changed-file-xy-too" class="md-nav__link">
This will solve conflicts when merging in favor for your local changes and should be avoided. Local changes will always be kept, unless we changed file XY, too.
</a>
</li>
<li class="md-nav__item">
<a href="#-dont-update-but-prefetch-images-and-exit" class="md-nav__link">
- Don't update, but prefetch images and exit
</a>
<nav class="md-nav" aria-label="- Don't update, but prefetch images and exit">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#i-forgot-what-i-changed-before-running-updatesh" class="md-nav__link"> <a href="#i-forgot-what-i-changed-before-running-updatesh" class="md-nav__link">
I forgot what I changed before running update.sh I forgot what I changed before running update.sh
@ -2437,6 +2588,19 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#replace-commit-id-22cd00b5e28893ef9ddef3c2b5436453cc5223ab-by-your-id" class="md-nav__link">
Replace commit ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab by your ID
</a>
<nav class="md-nav" aria-label="Replace commit ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab by your ID">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#hooks" class="md-nav__link"> <a href="#hooks" class="md-nav__link">
Hooks Hooks
@ -2444,16 +2608,16 @@
</li> </li>
</ul> <li class="md-nav__item">
</nav>
</li>
<li class="md-nav__item">
<a href="#footnotes" class="md-nav__link"> <a href="#footnotes" class="md-nav__link">
Footnotes Footnotes
</a> </a>
</li>
</ul>
</nav>
</li> </li>
</ul> </ul>
@ -2474,57 +2638,48 @@
<h1>Update</h1>
<h2 id="automatic-update">Automatic update<a class="headerlink" href="#automatic-update" title="Permanent link">&para;</a></h2> <h2 id="automatic-update">Automatic update<a class="headerlink" href="#automatic-update" title="Permanent link">&para;</a></h2>
<p>An update script in your mailcow-dockerized directory will take care of updates.</p> <p>An update script in your mailcow-dockerized directory will take care of updates.</p>
<p>But use it with caution! If you think you made a lot of changes to the mailcow code, you should use the manual update guide below.</p> <p>But use it with caution! If you think you made a lot of changes to the mailcow code, you should use the manual update guide below.</p>
<p>Run the update script: <p>Run the update script:
<div class="highlight"><pre><span></span><code>./update.sh <code>./update.sh</code></p>
</code></pre></div></p>
<p>If it needs to, it will ask you how you wish to proceed. <p>If it needs to, it will ask you how you wish to proceed.
Merge errors will be reported. Merge errors will be reported.
Some minor conflicts will be auto-corrected (in favour for the mailcow: dockerized repository code).</p> Some minor conflicts will be auto-corrected (in favour for the mailcow: dockerized repository code).</p>
<h3 id="options">Options<a class="headerlink" href="#options" title="Permanent link">&para;</a></h3> <h3 id="options">Options<a class="headerlink" href="#options" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code># Options can be combined <p>```</p>
<h1 id="options-can-be-combined">Options can be combined<a class="headerlink" href="#options-can-be-combined" title="Permanent link">&para;</a></h1>
# - Check for updates and show changes <h1 id="-check-for-updates-and-show-changes">- Check for updates and show changes<a class="headerlink" href="#-check-for-updates-and-show-changes" title="Permanent link">&para;</a></h1>
./update.sh --check <p>./update.sh --check</p>
<h1 id="do-not-try-to-update-docker-compose-make-sure-to-use-the-latest-docker-compose-available">Do not try to update docker-compose, <strong>make sure to use the latest docker-compose available</strong><a class="headerlink" href="#do-not-try-to-update-docker-compose-make-sure-to-use-the-latest-docker-compose-available" title="Permanent link">&para;</a></h1>
# Do not try to update docker-compose, **make sure to use the latest docker-compose available** <p>./update.sh --no-update-compose</p>
./update.sh --no-update-compose <h1 id="-do-not-start-mailcow-after-applying-an-update">- Do not start mailcow after applying an update<a class="headerlink" href="#-do-not-start-mailcow-after-applying-an-update" title="Permanent link">&para;</a></h1>
<p>./update.sh --skip-start</p>
# - Do not start mailcow after applying an update <h1 id="-force-update-unattended-but-unsupported-use-at-own-risk">- Force update (unattended, but unsupported, use at own risk)<a class="headerlink" href="#-force-update-unattended-but-unsupported-use-at-own-risk" title="Permanent link">&para;</a></h1>
./update.sh --skip-start <p>./update.sh --force</p>
<h1 id="-run-garbage-collector-to-cleanup-old-image-tags-and-exit">- Run garbage collector to cleanup old image tags and exit<a class="headerlink" href="#-run-garbage-collector-to-cleanup-old-image-tags-and-exit" title="Permanent link">&para;</a></h1>
# - Force update (unattended, but unsupported, use at own risk) <p>./update.sh --gc</p>
./update.sh --force <h1 id="-update-with-merge-strategy-option-ours-instead-of-theirs">- Update with merge strategy option "ours" instead of "theirs"<a class="headerlink" href="#-update-with-merge-strategy-option-ours-instead-of-theirs" title="Permanent link">&para;</a></h1>
<h1 id="this-will-solve-conflicts-when-merging-in-favor-for-your-local-changes-and-should-be-avoided-local-changes-will-always-be-kept-unless-we-changed-file-xy-too">This will <strong>solve conflicts</strong> when merging in favor for your local changes and should be avoided. Local changes will always be kept, unless we changed file XY, too.<a class="headerlink" href="#this-will-solve-conflicts-when-merging-in-favor-for-your-local-changes-and-should-be-avoided-local-changes-will-always-be-kept-unless-we-changed-file-xy-too" title="Permanent link">&para;</a></h1>
# - Run garbage collector to cleanup old image tags and exit <p>./update.sh --ours</p>
./update.sh --gc <h1 id="-dont-update-but-prefetch-images-and-exit">- Don't update, but prefetch images and exit<a class="headerlink" href="#-dont-update-but-prefetch-images-and-exit" title="Permanent link">&para;</a></h1>
<p>./update.sh --prefetch
# - Update with merge strategy option &quot;ours&quot; instead of &quot;theirs&quot; ```</p>
# This will **solve conflicts** when merging in favor for your local changes and should be avoided. Local changes will always be kept, unless we changed file XY, too.
./update.sh --ours
# - Don&#39;t update, but prefetch images and exit
./update.sh --prefetch
</code></pre></div>
<h3 id="i-forgot-what-i-changed-before-running-updatesh">I forgot what I changed before running update.sh<a class="headerlink" href="#i-forgot-what-i-changed-before-running-updatesh" title="Permanent link">&para;</a></h3> <h3 id="i-forgot-what-i-changed-before-running-updatesh">I forgot what I changed before running update.sh<a class="headerlink" href="#i-forgot-what-i-changed-before-running-updatesh" title="Permanent link">&para;</a></h3>
<p>See <code>git log --pretty=oneline | grep -i "before update"</code>, you will have an output similar to this:</p> <p>See <code>git log --pretty=oneline | grep -i "before update"</code>, you will have an output similar to this:</p>
<div class="highlight"><pre><span></span><code>22cd00b5e28893ef9ddef3c2b5436453cc5223ab Before update on 2020-09-28_19_25_45 <p><code>22cd00b5e28893ef9ddef3c2b5436453cc5223ab Before update on 2020-09-28_19_25_45
dacd4fb9b51e9e1c8a37d84485b92ffaf6c59353 Before update on 2020-08-07_13_31_31 dacd4fb9b51e9e1c8a37d84485b92ffaf6c59353 Before update on 2020-08-07_13_31_31</code></p>
</code></pre></div>
<p>Run <code>git diff 22cd00b5e28893ef9ddef3c2b5436453cc5223ab</code> to see what changed.</p> <p>Run <code>git diff 22cd00b5e28893ef9ddef3c2b5436453cc5223ab</code> to see what changed.</p>
<h3 id="can-i-roll-back">Can I roll back?<a class="headerlink" href="#can-i-roll-back" title="Permanent link">&para;</a></h3> <h3 id="can-i-roll-back">Can I roll back?<a class="headerlink" href="#can-i-roll-back" title="Permanent link">&para;</a></h3>
<p>Yes.</p> <p>Yes.</p>
<p>See the topic above, instead of a diff, you run checkout:</p> <p>See the topic above, instead of a diff, you run checkout:</p>
<div class="highlight"><pre><span></span><code>docker-compose down <p>```
# Replace commit ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab by your ID docker-compose down</p>
git checkout 22cd00b5e28893ef9ddef3c2b5436453cc5223ab <h1 id="replace-commit-id-22cd00b5e28893ef9ddef3c2b5436453cc5223ab-by-your-id">Replace commit ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab by your ID<a class="headerlink" href="#replace-commit-id-22cd00b5e28893ef9ddef3c2b5436453cc5223ab-by-your-id" title="Permanent link">&para;</a></h1>
<p>git checkout 22cd00b5e28893ef9ddef3c2b5436453cc5223ab
docker-compose pull docker-compose pull
docker-compose up -d docker-compose up -d
</code></pre></div> ```</p>
<h3 id="hooks">Hooks<a class="headerlink" href="#hooks" title="Permanent link">&para;</a></h3> <h3 id="hooks">Hooks<a class="headerlink" href="#hooks" title="Permanent link">&para;</a></h3>
<p>You can hook into the update mechanism by adding scripts called <code>pre_commit_hook.sh</code> and <code>post_commit_hook.sh</code> to your mailcows root directory. See <a href="../../manual-guides/u_e-update-hooks/">this</a> for more details.</p> <p>You can hook into the update mechanism by adding scripts called <code>pre_commit_hook.sh</code> and <code>post_commit_hook.sh</code> to your mailcows root directory. See <a href="../../manual-guides/u_e-update-hooks/">this</a> for more details.</p>
<h2 id="footnotes">Footnotes<a class="headerlink" href="#footnotes" title="Permanent link">&para;</a></h2> <h2 id="footnotes">Footnotes<a class="headerlink" href="#footnotes" title="Permanent link">&para;</a></h2>

Datei anzeigen

@ -2466,21 +2466,20 @@
<li>You will need to get <code>your_id</code> from one of the download links, they are individual for every user</li> <li>You will need to get <code>your_id</code> from one of the download links, they are individual for every user</li>
<li> <li>
<p>Add to <code>data/conf/clamav/freshclam.conf</code> with replaced <code>your_id</code> part: <p>Add to <code>data/conf/clamav/freshclam.conf</code> with replaced <code>your_id</code> part:
<div class="highlight"><pre><span></span><code>DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.hdb <code>DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.ign2 DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.ign2
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/javascript.ndb DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/javascript.ndb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/spam_marketing.ndb DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/spam_marketing.ndb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfohtml.hdb DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfohtml.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfoascii.hdb DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfoascii.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfopdf.hdb DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfopdf.hdb</code></p>
</code></pre></div></p>
</li> </li>
<li> <li>
<p>For free SecuriteInfo databases, download speed is limited to 300 kB/s. In <code>data/conf/clamav/freshclam.conf</code>, increase the default <code>ReceiveTimeout 20</code> value to <code>ReceiveTimeout 90</code> (time in seconds), otherwise some of the database downloads could fail because of their size.</p> <p>For free SecuriteInfo databases, download speed is limited to 300 kB/s. In <code>data/conf/clamav/freshclam.conf</code>, increase the default <code>ReceiveTimeout 20</code> value to <code>ReceiveTimeout 90</code> (time in seconds), otherwise some of the database downloads could fail because of their size.</p>
</li> </li>
<li> <li>
<p>Adjust <code>data/conf/clamav/clamd.conf</code> to align with next settings: <p>Adjust <code>data/conf/clamav/clamd.conf</code> to align with next settings:
<div class="highlight"><pre><span></span><code>DetectPUA yes <code>DetectPUA yes
ExcludePUA PUA.Win.Packer ExcludePUA PUA.Win.Packer
ExcludePUA PUA.Win.Trojan.Packed ExcludePUA PUA.Win.Trojan.Packed
ExcludePUA PUA.Win.Trojan.Molebox ExcludePUA PUA.Win.Trojan.Molebox
@ -2492,12 +2491,11 @@ MaxRecursion 40
MaxEmbeddedPE 100M MaxEmbeddedPE 100M
MaxHTMLNormalize 50M MaxHTMLNormalize 50M
MaxScriptNormalize 50M MaxScriptNormalize 50M
MaxZipTypeRcg 50M MaxZipTypeRcg 50M</code></p>
</code></pre></div></p>
</li> </li>
<li>Restart ClamAV container: <li>Restart ClamAV container:
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow <code>bash
</code></pre></div></li> docker-compose restart clamd-mailcow</code></li>
</ol> </ol>
<p>Please note:</p> <p>Please note:</p>
<ul> <ul>
@ -2509,14 +2507,13 @@ MaxZipTypeRcg 50M
<h3 id="enable-interserver-databases">Enable InterServer databases<a class="headerlink" href="#enable-interserver-databases" title="Permanent link">&para;</a></h3> <h3 id="enable-interserver-databases">Enable InterServer databases<a class="headerlink" href="#enable-interserver-databases" title="Permanent link">&para;</a></h3>
<ol> <ol>
<li>Add to <code>data/conf/clamav/freshclam.conf</code>: <li>Add to <code>data/conf/clamav/freshclam.conf</code>:
<div class="highlight"><pre><span></span><code>DatabaseCustomURL http://sigs.interserver.net/interserver256.hdb <code>DatabaseCustomURL http://sigs.interserver.net/interserver256.hdb
DatabaseCustomURL http://sigs.interserver.net/interservertopline.db DatabaseCustomURL http://sigs.interserver.net/interservertopline.db
DatabaseCustomURL http://sigs.interserver.net/shell.ldb DatabaseCustomURL http://sigs.interserver.net/shell.ldb
DatabaseCustomURL http://sigs.interserver.net/whitelist.fp DatabaseCustomURL http://sigs.interserver.net/whitelist.fp</code></li>
</code></pre></div></li>
<li>Restart ClamAV container: <li>Restart ClamAV container:
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow <code>bash
</code></pre></div></li> docker-compose restart clamd-mailcow</code></li>
</ol> </ol>
<hr> <hr>

Datei anzeigen

@ -1842,6 +1842,13 @@
Whitelist specific ClamAV signatures Whitelist specific ClamAV signatures
</a> </a>
</li>
<li class="md-nav__item">
<a href="#docker-compose-exec-redis-mailcow-binsh" class="md-nav__link">
docker-compose exec redis-mailcow /bin/sh
</a>
</li> </li>
</ul> </ul>
@ -2374,6 +2381,13 @@
Whitelist specific ClamAV signatures Whitelist specific ClamAV signatures
</a> </a>
</li>
<li class="md-nav__item">
<a href="#docker-compose-exec-redis-mailcow-binsh" class="md-nav__link">
docker-compose exec redis-mailcow /bin/sh
</a>
</li> </li>
</ul> </ul>
@ -2394,26 +2408,25 @@
<h1>Whitelist</h1>
<h2 id="whitelist-specific-clamav-signatures">Whitelist specific ClamAV signatures<a class="headerlink" href="#whitelist-specific-clamav-signatures" title="Permanent link">&para;</a></h2> <h2 id="whitelist-specific-clamav-signatures">Whitelist specific ClamAV signatures<a class="headerlink" href="#whitelist-specific-clamav-signatures" title="Permanent link">&para;</a></h2>
<p>You may find that legitimate (clean) mail is being blocked by ClamAV (Rspamd will flag the mail with <code>VIRUS_FOUND</code>). For instance, interactive PDF form attachments are blocked by default because the embedded Javascript code may be used for nefarious purposes. Confirm by looking at the clamd logs, e.g.:</p> <p>You may find that legitimate (clean) mail is being blocked by ClamAV (Rspamd will flag the mail with <code>VIRUS_FOUND</code>). For instance, interactive PDF form attachments are blocked by default because the embedded Javascript code may be used for nefarious purposes. Confirm by looking at the clamd logs, e.g.:</p>
<div class="highlight"><pre><span></span><code>docker-compose logs clamd-mailcow <span class="p">|</span> grep <span class="s2">&quot;FOUND&quot;</span> <p><code>bash
</code></pre></div> docker-compose logs clamd-mailcow | grep "FOUND"</code></p>
<p>This line confirms that such was identified:</p> <p>This line confirms that such was identified:</p>
<div class="highlight"><pre><span></span><code>clamd-mailcow_1 | Sat Sep 28 07:43:24 2019 -&gt; instream(local): PUA.Pdf.Trojan.EmbeddedJavaScript-1(e887d2ac324ce90750768b86b63d0749:363325) FOUND <p><code>text
</code></pre></div> clamd-mailcow_1 | Sat Sep 28 07:43:24 2019 -&gt; instream(local): PUA.Pdf.Trojan.EmbeddedJavaScript-1(e887d2ac324ce90750768b86b63d0749:363325) FOUND</code></p>
<p>To whitelist this particular signature (and enable sending this type of file attached), add it to the ClamAV signature whitelist file:</p> <p>To whitelist this particular signature (and enable sending this type of file attached), add it to the ClamAV signature whitelist file:</p>
<div class="highlight"><pre><span></span><code><span class="nb">echo</span> <span class="s1">&#39;PUA.Pdf.Trojan.EmbeddedJavaScript-1&#39;</span> &gt;&gt; data/conf/clamav/whitelist.ign2 <p><code>bash
</code></pre></div> echo 'PUA.Pdf.Trojan.EmbeddedJavaScript-1' &gt;&gt; data/conf/clamav/whitelist.ign2</code></p>
<p>Then restart the clamd-mailcow service container in the mailcow UI or using docker-compose:</p> <p>Then restart the clamd-mailcow service container in the mailcow UI or using docker-compose:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow <p><code>bash
</code></pre></div> docker-compose restart clamd-mailcow</code></p>
<p>Cleanup cached ClamAV results in Redis:</p> <p>Cleanup cached ClamAV results in Redis:</p>
<div class="highlight"><pre><span></span><code># docker-compose exec redis-mailcow /bin/sh <p>```</p>
/data # redis-cli KEYS rs_cl* | xargs redis-cli DEL <h1 id="docker-compose-exec-redis-mailcow-binsh">docker-compose exec redis-mailcow /bin/sh<a class="headerlink" href="#docker-compose-exec-redis-mailcow-binsh" title="Permanent link">&para;</a></h1>
<p>/data # redis-cli KEYS rs_cl* | xargs redis-cli DEL
/data # exit /data # exit
</code></pre></div> ```</p>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2348,14 +2348,11 @@
<h1>Customize Dockerfiles</h1> <h1>Customize Dockerfiles</h1>
<p>You need to copy the override file with corresponding build tags to the mailcow: dockerized root folder (i.e. <code>/opt/mailcow-dockerized</code>):</p> <p>You need to copy the override file with corresponding build tags to the mailcow: dockerized root folder (i.e. <code>/opt/mailcow-dockerized</code>):</p>
<div class="highlight"><pre><span></span><code>cp helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml docker-compose.override.yml <p><code>cp helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml docker-compose.override.yml</code></p>
</code></pre></div>
<p>Make your changes in <code>data/Dockerfiles/$service</code> and build the image locally:</p> <p>Make your changes in <code>data/Dockerfiles/$service</code> and build the image locally:</p>
<div class="highlight"><pre><span></span><code>docker build data/Dockerfiles/service -t mailcow/$service <p><code>docker build data/Dockerfiles/service -t mailcow/$service</code></p>
</code></pre></div>
<p>Now auto-recreate modified containers:</p> <p>Now auto-recreate modified containers:</p>
<div class="highlight"><pre><span></span><code>docker-compose up -d <p><code>docker-compose up -d</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2348,8 +2348,7 @@
<h1>Docker Compose Bash Completion</h1> <h1>Docker Compose Bash Completion</h1>
<p>To get some sexy bash completion inside your containers simply execute the following:</p> <p>To get some sexy bash completion inside your containers simply execute the following:</p>
<div class="highlight"><pre><span></span><code>curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose <p><code>curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2349,8 +2349,7 @@
<p>On August the 17th, we disabled the possibility to share with "any" or "all authenticated users" by default.</p> <p>On August the 17th, we disabled the possibility to share with "any" or "all authenticated users" by default.</p>
<p>This function can be re-enabled by setting <code>ACL_ANYONE</code> to <code>allow</code> in mailcow.conf:</p> <p>This function can be re-enabled by setting <code>ACL_ANYONE</code> to <code>allow</code> in mailcow.conf:</p>
<div class="highlight"><pre><span></span><code>ACL_ANYONE=allow <p><code>ACL_ANYONE=allow</code></p>
</code></pre></div>
<p>Apply the changes by running <code>docker-compose up -d</code>.</p> <p>Apply the changes by running <code>docker-compose up -d</code>.</p>
<hr> <hr>

Datei anzeigen

@ -1564,6 +1564,33 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#binbash" class="md-nav__link">
!/bin/bash
</a>
</li>
<li class="md-nav__item">
<a href="#path-to-mailcow-dockerized-eg-optmailcow-dockerized" class="md-nav__link">
Path to mailcow-dockerized, e.g. /opt/mailcow-dockerized
</a>
</li>
<li class="md-nav__item">
<a href="#execute-everyday-at-0400-am" class="md-nav__link">
Execute everyday at 04:00 A.M.
</a>
<nav class="md-nav" aria-label="Execute everyday at 04:00 A.M.">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#via-docker-job-scheduler" class="md-nav__link"> <a href="#via-docker-job-scheduler" class="md-nav__link">
via Docker job scheduler via Docker job scheduler
@ -2418,6 +2445,33 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#binbash" class="md-nav__link">
!/bin/bash
</a>
</li>
<li class="md-nav__item">
<a href="#path-to-mailcow-dockerized-eg-optmailcow-dockerized" class="md-nav__link">
Path to mailcow-dockerized, e.g. /opt/mailcow-dockerized
</a>
</li>
<li class="md-nav__item">
<a href="#execute-everyday-at-0400-am" class="md-nav__link">
Execute everyday at 04:00 A.M.
</a>
<nav class="md-nav" aria-label="Execute everyday at 04:00 A.M.">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#via-docker-job-scheduler" class="md-nav__link"> <a href="#via-docker-job-scheduler" class="md-nav__link">
via Docker job scheduler via Docker job scheduler
@ -2448,23 +2502,17 @@
<h1>Expunge a Users mails</h1>
<p>If you want to delete old mails out of the <code>.Junk</code> or <code>.Trash</code> folders or maybe delete all read mails that are older than a certain amount of time you may use dovecot's tool doveadm <a href="https://wiki.dovecot.org/Tools/Doveadm/Expunge">man doveadm-expunge</a>.</p> <p>If you want to delete old mails out of the <code>.Junk</code> or <code>.Trash</code> folders or maybe delete all read mails that are older than a certain amount of time you may use dovecot's tool doveadm <a href="https://wiki.dovecot.org/Tools/Doveadm/Expunge">man doveadm-expunge</a>.</p>
<h2 id="the-manual-way">The manual way<a class="headerlink" href="#the-manual-way" title="Permanent link">&para;</a></h2> <h2 id="the-manual-way">The manual way<a class="headerlink" href="#the-manual-way" title="Permanent link">&para;</a></h2>
<p>That said, let's dive in:</p> <p>That said, let's dive in:</p>
<p>Delete a user's mails inside the junk folder that <strong>are read</strong> and <strong>older</strong> than 4 hours</p> <p>Delete a user's mails inside the junk folder that <strong>are read</strong> and <strong>older</strong> than 4 hours</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;Junk&#39; SEEN not SINCE 4h <p><code>docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'Junk' SEEN not SINCE 4h</code></p>
</code></pre></div>
<p>Delete <strong>all</strong> user's mails in the junk folder that are <strong>older</strong> than 7 days</p> <p>Delete <strong>all</strong> user's mails in the junk folder that are <strong>older</strong> than 7 days</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 7d <p><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 7d</code></p>
</code></pre></div>
<p>Delete <strong>all</strong> mails (of all users) in <strong>all</strong> folders that are <strong>older</strong> than 52 weeks (internal date of the mail, not the date it was saved on the system =&gt; <code>before</code> instead of <code>savedbefore</code>). Useful for deleting very old mails on all users and folders (thus especially useful for GDPR-compliance).</p> <p>Delete <strong>all</strong> mails (of all users) in <strong>all</strong> folders that are <strong>older</strong> than 52 weeks (internal date of the mail, not the date it was saved on the system =&gt; <code>before</code> instead of <code>savedbefore</code>). Useful for deleting very old mails on all users and folders (thus especially useful for GDPR-compliance).</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox % before 52w <p><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox % before 52w</code></p>
</code></pre></div>
<p>Delete mails inside a custom folder <strong>inside</strong> a user's inbox that are <strong>not</strong> flagged and <strong>older</strong> than 2 weeks</p> <p>Delete mails inside a custom folder <strong>inside</strong> a user's inbox that are <strong>not</strong> flagged and <strong>older</strong> than 2 weeks</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;INBOX/custom-folder&#39; not FLAGGED not SINCE 2w <p><code>docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'INBOX/custom-folder' not FLAGGED not SINCE 2w</code></p>
</code></pre></div>
<div class="admonition info"> <div class="admonition info">
<p class="admonition-title">Info</p> <p class="admonition-title">Info</p>
<p>For possible <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_date_specification">time spans</a> or <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_search_keys">search keys</a> have a look at <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery">man doveadm-search-query</a></p> <p>For possible <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_date_specification">time spans</a> or <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_search_keys">search keys</a> have a look at <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery">man doveadm-search-query</a></p>
@ -2472,44 +2520,42 @@
<h2 id="job-scheduler">Job scheduler<a class="headerlink" href="#job-scheduler" title="Permanent link">&para;</a></h2> <h2 id="job-scheduler">Job scheduler<a class="headerlink" href="#job-scheduler" title="Permanent link">&para;</a></h2>
<h3 id="via-the-host-system-cron">via the host system cron<a class="headerlink" href="#via-the-host-system-cron" title="Permanent link">&para;</a></h3> <h3 id="via-the-host-system-cron">via the host system cron<a class="headerlink" href="#via-the-host-system-cron" title="Permanent link">&para;</a></h3>
<p>If you want to automate such a task you can create a cron job on your host that calls a script like the one below:</p> <p>If you want to automate such a task you can create a cron job on your host that calls a script like the one below:</p>
<div class="highlight"><pre><span></span><code>#!/bin/bash <p>```</p>
# Path to mailcow-dockerized, e.g. /opt/mailcow-dockerized <h1 id="binbash">!/bin/bash<a class="headerlink" href="#binbash" title="Permanent link">&para;</a></h1>
cd /path/to/your/mailcow-dockerized <h1 id="path-to-mailcow-dockerized-eg-optmailcow-dockerized">Path to mailcow-dockerized, e.g. /opt/mailcow-dockerized<a class="headerlink" href="#path-to-mailcow-dockerized-eg-optmailcow-dockerized" title="Permanent link">&para;</a></h1>
<p>cd /path/to/your/mailcow-dockerized</p>
/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w <p>/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 2w
/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; SEEN not SINCE 12h /usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox 'Junk' SEEN not SINCE 12h
[...] [...]
</code></pre></div> ```</p>
<p>To create a cron job you may execute <code>crontab -e</code> and insert something like the following to execute a script:</p> <p>To create a cron job you may execute <code>crontab -e</code> and insert something like the following to execute a script:</p>
<div class="highlight"><pre><span></span><code># Execute everyday at 04:00 A.M. <p>```</p>
0 4 * * * /path/to/your/expunge_mailboxes.sh <h1 id="execute-everyday-at-0400-am">Execute everyday at 04:00 A.M.<a class="headerlink" href="#execute-everyday-at-0400-am" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>0 4 * * * /path/to/your/expunge_mailboxes.sh
```</p>
<h3 id="via-docker-job-scheduler">via Docker job scheduler<a class="headerlink" href="#via-docker-job-scheduler" title="Permanent link">&para;</a></h3> <h3 id="via-docker-job-scheduler">via Docker job scheduler<a class="headerlink" href="#via-docker-job-scheduler" title="Permanent link">&para;</a></h3>
<p>To archive this with a docker job scheduler use this docker-compose.override.yml with your mailcow: </p> <p>To archive this with a docker job scheduler use this docker-compose.override.yml with your mailcow: </p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p>```
version: '2.1'</p>
services: <p>services:</p>
<p>ofelia:
ofelia:
image: mcuadros/ofelia:latest image: mcuadros/ofelia:latest
restart: always restart: always
command: daemon --docker command: daemon --docker
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro <br />
network_mode: none network_mode: none</p>
<p>dovecot-mailcow:
dovecot-mailcow:
labels: labels:
- &quot;ofelia.enabled=true&quot; - "ofelia.enabled=true"
- &quot;ofelia.job-exec.dovecot-expunge-trash.schedule=0 4 * * *&quot; - "ofelia.job-exec.dovecot-expunge-trash.schedule=0 4 * * *"
- &quot;ofelia.job-exec.dovecot-expunge-trash.command=doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w&quot; - "ofelia.job-exec.dovecot-expunge-trash.command=doveadm expunge -A mailbox 'Junk' savedbefore 2w"
- &quot;ofelia.job-exec.dovecot-expunge-trash.tty=false&quot; - "ofelia.job-exec.dovecot-expunge-trash.tty=false"</p>
</code></pre></div> <p>```</p>
<p>The job controller just need access to the docker control socket to be able to emulate the behavior of "exec". Then we add a few label to our dovecot-container to activate the job scheduler and tell him in a cron compatible scheduling format when to run. If you struggle with that schedule string you can use <a href="https://crontab.guru/">crontab guru</a>. <p>The job controller just need access to the docker control socket to be able to emulate the behavior of "exec". Then we add a few label to our dovecot-container to activate the job scheduler and tell him in a cron compatible scheduling format when to run. If you struggle with that schedule string you can use <a href="https://crontab.guru/">crontab guru</a>.
This docker-compose.override.yml deletes all mails older then 2 weeks from the "Junk" folder every day at 4 am. To see if things ran proper, you can not only see in your mailbox but also check Ofelia's docker log if it looks something like this:</p> This docker-compose.override.yml deletes all mails older then 2 weeks from the "Junk" folder every day at 4 am. To see if things ran proper, you can not only see in your mailbox but also check Ofelia's docker log if it looks something like this:</p>
<div class="highlight"><pre><span></span><code>common.go:124 ▶ NOTICE [Job &quot;dovecot-expunge-trash&quot; (8759567efa66)] Started - doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w, <p><code>common.go:124 ▶ NOTICE [Job "dovecot-expunge-trash" (8759567efa66)] Started - doveadm expunge -A mailbox 'Junk' savedbefore 2w,
common.go:124 ▶ NOTICE [Job &quot;dovecot-expunge-trash&quot; (8759567efa66)] Finished in &quot;285.032291ms&quot;, failed: false, skipped: false, error: none, common.go:124 ▶ NOTICE [Job "dovecot-expunge-trash" (8759567efa66)] Finished in "285.032291ms", failed: false, skipped: false, error: none,</code></p>
</code></pre></div>
<p>If it failed it will say so and give you the output of the doveadm in the log to make it easy on you to debug.</p> <p>If it failed it will say so and give you the output of the doveadm in the log to make it easy on you to debug.</p>
<p>In case you want to add more jobs, ensure you change the "dovecot-expunge-trash" part after "ofelia.job-exec." to something else, it defines the name of the job. Syntax of the labels you find at <a href="https://github.com/mcuadros/ofelia">mcuadros/ofelia</a>.</p> <p>In case you want to add more jobs, ensure you change the "dovecot-expunge-trash" part after "ofelia.job-exec." to something else, it defines the name of the job. Syntax of the labels you find at <a href="https://github.com/mcuadros/ofelia">mcuadros/ofelia</a>.</p>

Datei anzeigen

@ -2349,8 +2349,7 @@
<p>Create a file <code>data/conf/dovecot/extra.conf</code> - if missing - and add your additional content here.</p> <p>Create a file <code>data/conf/dovecot/extra.conf</code> - if missing - and add your additional content here.</p>
<p>Restart <code>dovecot-mailcow</code> to apply your changes:</p> <p>Restart <code>dovecot-mailcow</code> to apply your changes:</p>
<div class="highlight"><pre><span></span><code>docker-compose restart dovecot-mailcow <p><code>docker-compose restart dovecot-mailcow</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -1571,6 +1571,40 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#single-user" class="md-nav__link">
single user
</a>
</li>
<li class="md-nav__item">
<a href="#all-users" class="md-nav__link">
all users
</a>
</li>
<li class="md-nav__item">
<a href="#single-user_1" class="md-nav__link">
single user
</a>
</li>
<li class="md-nav__item">
<a href="#all-users-but-obviously-slower-and-more-dangerous" class="md-nav__link">
all users, but obviously slower and more dangerous
</a>
<nav class="md-nav" aria-label="all users, but obviously slower and more dangerous">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#delete-mailbox-data" class="md-nav__link"> <a href="#delete-mailbox-data" class="md-nav__link">
Delete mailbox data Delete mailbox data
@ -2404,6 +2438,40 @@
</li> </li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#single-user" class="md-nav__link">
single user
</a>
</li>
<li class="md-nav__item">
<a href="#all-users" class="md-nav__link">
all users
</a>
</li>
<li class="md-nav__item">
<a href="#single-user_1" class="md-nav__link">
single user
</a>
</li>
<li class="md-nav__item">
<a href="#all-users-but-obviously-slower-and-more-dangerous" class="md-nav__link">
all users, but obviously slower and more dangerous
</a>
<nav class="md-nav" aria-label="all users, but obviously slower and more dangerous">
<ul class="md-nav__list">
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#delete-mailbox-data" class="md-nav__link"> <a href="#delete-mailbox-data" class="md-nav__link">
Delete mailbox data Delete mailbox data
@ -2434,8 +2502,6 @@
<h1>FTS (Solr)</h1>
<h2 id="fts-solr">FTS Solr<a class="headerlink" href="#fts-solr" title="Permanent link">&para;</a></h2> <h2 id="fts-solr">FTS Solr<a class="headerlink" href="#fts-solr" title="Permanent link">&para;</a></h2>
<p>Solr is used for setups with memory &gt;= 3.5 GiB to provide full-text search in Dovecot.</p> <p>Solr is used for setups with memory &gt;= 3.5 GiB to provide full-text search in Dovecot.</p>
<p>Please be aware that applications like Solr <em>may</em> need maintenance from time to time.</p> <p>Please be aware that applications like Solr <em>may</em> need maintenance from time to time.</p>
@ -2443,19 +2509,21 @@
<p>The default heap size (1024 M) is defined in mailcow.conf.</p> <p>The default heap size (1024 M) is defined in mailcow.conf.</p>
<p>Since we run in Docker and create our containers with the "restart: always" flag, a oom situation will at least only trigger a restart of the container.</p> <p>Since we run in Docker and create our containers with the "restart: always" flag, a oom situation will at least only trigger a restart of the container.</p>
<h3 id="fts-related-dovecot-commands">FTS related Dovecot commands<a class="headerlink" href="#fts-related-dovecot-commands" title="Permanent link">&para;</a></h3> <h3 id="fts-related-dovecot-commands">FTS related Dovecot commands<a class="headerlink" href="#fts-related-dovecot-commands" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code># single user <p>```</p>
docker-compose exec dovecot-mailcow doveadm fts rescan -u user@domain <h1 id="single-user">single user<a class="headerlink" href="#single-user" title="Permanent link">&para;</a></h1>
# all users <p>docker-compose exec dovecot-mailcow doveadm fts rescan -u user@domain</p>
docker-compose exec dovecot-mailcow doveadm fts rescan -A <h1 id="all-users">all users<a class="headerlink" href="#all-users" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>docker-compose exec dovecot-mailcow doveadm fts rescan -A
```</p>
<p>Dovecot Wiki: "Scan what mails exist in the full text search index and compare those to what actually exist in mailboxes. This removes mails from the index that have already been expunged and makes sure that the next doveadm index will index all the missing mails (if any)."</p> <p>Dovecot Wiki: "Scan what mails exist in the full text search index and compare those to what actually exist in mailboxes. This removes mails from the index that have already been expunged and makes sure that the next doveadm index will index all the missing mails (if any)."</p>
<p>This does <strong>not</strong> re-index a mailbox. It basically repairs a given index.</p> <p>This does <strong>not</strong> re-index a mailbox. It basically repairs a given index.</p>
<p>If you want to re-index data immediately, you can run the followig command, where '*' can also be a mailbox mask like 'Sent'. You do not need to run these commands, but it will speed things up a bit:</p> <p>If you want to re-index data immediately, you can run the followig command, where '*' can also be a mailbox mask like 'Sent'. You do not need to run these commands, but it will speed things up a bit:</p>
<div class="highlight"><pre><span></span><code># single user <p>```</p>
docker-compose exec dovecot-mailcow doveadm index -u user@domain &#39;*&#39; <h1 id="single-user_1">single user<a class="headerlink" href="#single-user_1" title="Permanent link">&para;</a></h1>
# all users, but obviously slower and more dangerous <p>docker-compose exec dovecot-mailcow doveadm index -u user@domain '*'</p>
docker-compose exec dovecot-mailcow doveadm index -A &#39;*&#39; <h1 id="all-users-but-obviously-slower-and-more-dangerous">all users, but obviously slower and more dangerous<a class="headerlink" href="#all-users-but-obviously-slower-and-more-dangerous" title="Permanent link">&para;</a></h1>
</code></pre></div> <p>docker-compose exec dovecot-mailcow doveadm index -A '*'
```</p>
<p>This <strong>will</strong> take some time depending on your machine and Solr can run oom, monitor it!</p> <p>This <strong>will</strong> take some time depending on your machine and Solr can run oom, monitor it!</p>
<p>Because re-indexing is very sensible, we did not include it to mailcow UI. You will need to take care of any errors while re-indexing a mailbox.</p> <p>Because re-indexing is very sensible, we did not include it to mailcow UI. You will need to take care of any errors while re-indexing a mailbox.</p>
<h3 id="delete-mailbox-data">Delete mailbox data<a class="headerlink" href="#delete-mailbox-data" title="Permanent link">&para;</a></h3> <h3 id="delete-mailbox-data">Delete mailbox data<a class="headerlink" href="#delete-mailbox-data" title="Permanent link">&para;</a></h3>

Datei anzeigen

@ -2462,8 +2462,7 @@
<h3 id="change-configuration">Change configuration<a class="headerlink" href="#change-configuration" title="Permanent link">&para;</a></h3> <h3 id="change-configuration">Change configuration<a class="headerlink" href="#change-configuration" title="Permanent link">&para;</a></h3>
<p>Create a new file <code>data/conf/dovecot/extra.conf</code> (or edit it if it already exists). <p>Create a new file <code>data/conf/dovecot/extra.conf</code> (or edit it if it already exists).
Insert the setting followed by the new value. For example, to set the interval to 5 minutes you could type:</p> Insert the setting followed by the new value. For example, to set the interval to 5 minutes you could type:</p>
<div class="highlight"><pre><span></span><code>imap_idle_notify_interval = 5 mins <p><code>imap_idle_notify_interval = 5 mins</code></p>
</code></pre></div>
<p>29 minutes is the maximum value allowed by the <a href="https://tools.ietf.org/html/rfc2177">corresponding RFC</a>.</p> <p>29 minutes is the maximum value allowed by the <a href="https://tools.ietf.org/html/rfc2177">corresponding RFC</a>.</p>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
@ -2471,13 +2470,11 @@ Insert the setting followed by the new value. For example, to set the interval t
</div> </div>
<h3 id="reload-dovecot">Reload Dovecot<a class="headerlink" href="#reload-dovecot" title="Permanent link">&para;</a></h3> <h3 id="reload-dovecot">Reload Dovecot<a class="headerlink" href="#reload-dovecot" title="Permanent link">&para;</a></h3>
<p>Now reload Dovecot: <p>Now reload Dovecot:
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow dovecot reload <code>docker-compose exec dovecot-mailcow dovecot reload</code></p>
</code></pre></div></p>
<div class="admonition info"> <div class="admonition info">
<p class="admonition-title">Info</p> <p class="admonition-title">Info</p>
<p>You can check the value of this setting with <p>You can check the value of this setting with
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow dovecot -a | grep &quot;imap_idle_notify_interval&quot; <code>docker-compose exec dovecot-mailcow dovecot -a | grep "imap_idle_notify_interval"</code>
</code></pre></div>
If you didn't change it, it should be at 2m. If you did change it, you should see your new value.</p> If you didn't change it, it should be at 2m. If you did change it, you should see your new value.</p>
</div> </div>

Datei anzeigen

@ -66,6 +66,11 @@
<label class="md-overlay" for="__drawer"></label> <label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip"> <div data-md-component="skip">
<a href="#decrypt-varvmail" class="md-skip">
Skip to content
</a>
</div> </div>
<div data-md-component="announce"> <div data-md-component="announce">
@ -1556,6 +1561,8 @@
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
Mail crypt Mail crypt
@ -2328,6 +2335,8 @@
</nav> </nav>
</div> </div>
@ -2345,36 +2354,34 @@
<h1>Mail crypt</h1>
<p>Mails are stored compressed (lz4) and encrypted. The key pair can be found in crypt-vol-1.</p> <p>Mails are stored compressed (lz4) and encrypted. The key pair can be found in crypt-vol-1.</p>
<p>If you want to decode/encode existing maildir files, you can use the following script at your own risk:</p> <p>If you want to decode/encode existing maildir files, you can use the following script at your own risk:</p>
<p>Enter Dovecot by running <code>docker-compose exec dovecot-mailcow /bin/bash</code> in the mailcow-dockerized location.</p> <p>Enter Dovecot by running <code>docker-compose exec dovecot-mailcow /bin/bash</code> in the mailcow-dockerized location.</p>
<div class="highlight"><pre><span></span><code># Decrypt /var/vmail <p>```</p>
find /var/vmail/ -type f -regextype egrep -regex &#39;.*S=.*W=.*&#39; | while read -r file; do <h1 id="decrypt-varvmail">Decrypt /var/vmail<a class="headerlink" href="#decrypt-varvmail" title="Permanent link">&para;</a></h1>
if [[ $(head -c7 &quot;$file&quot;) == &quot;CRYPTED&quot; ]]; then <p>find /var/vmail/ -type f -regextype egrep -regex '.<em>S=.</em>W=.*' | while read -r file; do
if [[ $(head -c7 "$file") == "CRYPTED" ]]; then
doveadm fs get compress lz4:0:crypt:private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \ doveadm fs get compress lz4:0:crypt:private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \
&quot;$file&quot; &gt; &quot;/tmp/$(basename &quot;$file&quot;)&quot; "$file" &gt; "/tmp/$(basename "$file")"
if [[ -s &quot;/tmp/$(basename &quot;$file&quot;)&quot; ]]; then if [[ -s "/tmp/$(basename "$file")" ]]; then
chmod 600 &quot;/tmp/$(basename &quot;$file&quot;)&quot; chmod 600 "/tmp/$(basename "$file")"
chown 5000:5000 &quot;/tmp/$(basename &quot;$file&quot;)&quot; chown 5000:5000 "/tmp/$(basename "$file")"
mv &quot;/tmp/$(basename &quot;$file&quot;)&quot; &quot;$file&quot; mv "/tmp/$(basename "$file")" "$file"
else else
rm &quot;/tmp/$(basename &quot;$file&quot;)&quot; rm "/tmp/$(basename "$file")"
fi fi
fi fi
done done</p>
<h1 id="encrypt-varvmail">Encrypt /var/vmail<a class="headerlink" href="#encrypt-varvmail" title="Permanent link">&para;</a></h1>
# Encrypt /var/vmail <p>find /var/vmail/ -type f -regextype egrep -regex '.<em>S=.</em>W=.*' | while read -r file; do
find /var/vmail/ -type f -regextype egrep -regex &#39;.*S=.*W=.*&#39; | while read -r file; do if [[ $(head -c7 "$file") != "CRYPTED" ]]; then
if [[ $(head -c7 &quot;$file&quot;) != &quot;CRYPTED&quot; ]]; then
doveadm fs put crypt private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \ doveadm fs put crypt private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \
&quot;$file&quot; &quot;$file&quot; "$file" "$file"
chmod 600 &quot;$file&quot; chmod 600 "$file"
chown 5000:5000 &quot;$file&quot; chown 5000:5000 "$file"
fi fi
done done
</code></pre></div> ```</p>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2414,25 +2414,19 @@
<h2 id="doveadm-quota">doveadm quota<a class="headerlink" href="#doveadm-quota" title="Permanent link">&para;</a></h2> <h2 id="doveadm-quota">doveadm quota<a class="headerlink" href="#doveadm-quota" title="Permanent link">&para;</a></h2>
<p>The <code>quota get</code> and <code>quota recalc</code><sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> commands are used to display or recalculate the current user's quota usage. The reported values are in <em>kilobytes</em>.</p> <p>The <code>quota get</code> and <code>quota recalc</code><sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> commands are used to display or recalculate the current user's quota usage. The reported values are in <em>kilobytes</em>.</p>
<p>To list the current quota status for a user / mailbox, do:</p> <p>To list the current quota status for a user / mailbox, do:</p>
<div class="highlight"><pre><span></span><code>doveadm quota get -u &#39;mailbox@example.org&#39; <p><code>doveadm quota get -u 'mailbox@example.org'</code></p>
</code></pre></div>
<p>To list the quota storage value for <strong>all</strong> users, do:</p> <p>To list the quota storage value for <strong>all</strong> users, do:</p>
<div class="highlight"><pre><span></span><code>doveadm quota get -A |grep &quot;STORAGE&quot; <p><code>doveadm quota get -A |grep "STORAGE"</code></p>
</code></pre></div>
<p>Recalculate a single user's quota usage:</p> <p>Recalculate a single user's quota usage:</p>
<div class="highlight"><pre><span></span><code>doveadm quota recalc -u &#39;mailbox@example.org&#39; <p><code>doveadm quota recalc -u 'mailbox@example.org'</code></p>
</code></pre></div>
<h2 id="doveadm-search">doveadm search<a class="headerlink" href="#doveadm-search" title="Permanent link">&para;</a></h2> <h2 id="doveadm-search">doveadm search<a class="headerlink" href="#doveadm-search" title="Permanent link">&para;</a></h2>
<p>The <code>doveadm search</code><sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> command is used to find messages matching your query. It can return the username, mailbox-GUID / -UID and message-GUIDs / -UIDs.</p> <p>The <code>doveadm search</code><sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> command is used to find messages matching your query. It can return the username, mailbox-GUID / -UID and message-GUIDs / -UIDs.</p>
<p>To view the number of messages, by user, in their <strong>.Trash</strong> folder:</p> <p>To view the number of messages, by user, in their <strong>.Trash</strong> folder:</p>
<div class="highlight"><pre><span></span><code>doveadm search -A mailbox &#39;Trash&#39; | awk &#39;{print $1}&#39; | sort | uniq -c <p><code>doveadm search -A mailbox 'Trash' | awk '{print $1}' | sort | uniq -c</code></p>
</code></pre></div>
<p>Show all messages in a user's <strong>inbox</strong> older then 90 days:</p> <p>Show all messages in a user's <strong>inbox</strong> older then 90 days:</p>
<div class="highlight"><pre><span></span><code>doveadm search -u &#39;mailbox@example.org&#39; mailbox &#39;INBOX&#39; savedbefore 90d <p><code>doveadm search -u 'mailbox@example.org' mailbox 'INBOX' savedbefore 90d</code></p>
</code></pre></div>
<p>Show <strong>all messages</strong> in <strong>any folder</strong> that are <strong>older</strong> then 30 days for <code>mailbox@example.org</code>:</p> <p>Show <strong>all messages</strong> in <strong>any folder</strong> that are <strong>older</strong> then 30 days for <code>mailbox@example.org</code>:</p>
<div class="highlight"><pre><span></span><code>doveadm search -u &#39;mailbox@example.org&#39; mailbox &quot;*&quot; savedbefore 30d <p><code>doveadm search -u 'mailbox@example.org' mailbox "*" savedbefore 30d</code></p>
</code></pre></div>
<div class="footnote"> <div class="footnote">
<hr /> <hr />
<ol> <ol>

Datei anzeigen

@ -2398,28 +2398,25 @@
<p>Create a new public namespace "Public" and a mailbox "Develcow" inside that namespace:</p> <p>Create a new public namespace "Public" and a mailbox "Develcow" inside that namespace:</p>
<p>Edit or create <code>data/conf/dovecot/extra.conf</code>, add:</p> <p>Edit or create <code>data/conf/dovecot/extra.conf</code>, add:</p>
<div class="highlight"><pre><span></span><code>namespace { <p><code>namespace {
type = public type = public
separator = / separator = /
prefix = Public/ prefix = Public/
location = maildir:/var/vmail/public:INDEXPVT=~/public location = maildir:/var/vmail/public:INDEXPVT=~/public
subscriptions = yes subscriptions = yes
mailbox &quot;Develcow&quot; { mailbox "Develcow" {
auto = subscribe auto = subscribe
} }
} }</code></p>
</code></pre></div>
<p><code>:INDEXPVT=~/public</code> can be omitted if per-user seen flags are not wanted.</p> <p><code>:INDEXPVT=~/public</code> can be omitted if per-user seen flags are not wanted.</p>
<p>The new mailbox in the public namespace will be auto-subscribed by users.</p> <p>The new mailbox in the public namespace will be auto-subscribed by users.</p>
<p>To allow all authenticated users access full to that new mailbox (not the whole namespace), run:</p> <p>To allow all authenticated users access full to that new mailbox (not the whole namespace), run:</p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm acl set -A &quot;Public/Develcow&quot; &quot;authenticated&quot; lookup read write write-seen write-deleted insert post delete expunge create <p><code>docker-compose exec dovecot-mailcow doveadm acl set -A "Public/Develcow" "authenticated" lookup read write write-seen write-deleted insert post delete expunge create</code></p>
</code></pre></div>
<p>Adjust the command to your needs if you like to assign more granular rights per user (use <code>-u user@domain</code> instead of <code>-A</code> for example).</p> <p>Adjust the command to your needs if you like to assign more granular rights per user (use <code>-u user@domain</code> instead of <code>-A</code> for example).</p>
<h2 id="allow-authenticated-users-access-to-the-whole-public-namespace">Allow authenticated users access to the whole public namespace<a class="headerlink" href="#allow-authenticated-users-access-to-the-whole-public-namespace" title="Permanent link">&para;</a></h2> <h2 id="allow-authenticated-users-access-to-the-whole-public-namespace">Allow authenticated users access to the whole public namespace<a class="headerlink" href="#allow-authenticated-users-access-to-the-whole-public-namespace" title="Permanent link">&para;</a></h2>
<p>To allow all authenticated users access full access to the whole public namespace and its subfolders, create a new <code>dovecot-acl</code> file in the namespace root directory:</p> <p>To allow all authenticated users access full access to the whole public namespace and its subfolders, create a new <code>dovecot-acl</code> file in the namespace root directory:</p>
<p>Open/edit/create <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/public/dovecot-acl</code> (adjust the path accordingly) to create the global ACL file with the following content:</p> <p>Open/edit/create <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/public/dovecot-acl</code> (adjust the path accordingly) to create the global ACL file with the following content:</p>
<div class="highlight"><pre><span></span><code>authenticated kxeilprwts <p><code>authenticated kxeilprwts</code></p>
</code></pre></div>
<p><code>kxeilprwts</code> equals to <code>lookup read write write-seen write-deleted insert post delete expunge create</code>.</p> <p><code>kxeilprwts</code> equals to <code>lookup read write write-seen write-deleted insert post delete expunge create</code>.</p>
<p>You can use <code>doveadm acl set -u user@domain "Public/Develcow" user=user@domain lookup read</code> to limit access for a single user. You may also turn it around to limit access for all users to "lr" and grant only some users full access.</p> <p>You can use <code>doveadm acl set -u user@domain "Public/Develcow" user=user@domain lookup read</code> to limit access for a single user. You may also turn it around to limit access for all users to "lr" and grant only some users full access.</p>
<p>See <a href="https://doc.dovecot.org/settings/plugin/acl/">Dovecot ACL</a> for further information about ACL.</p> <p>See <a href="https://doc.dovecot.org/settings/plugin/acl/">Dovecot ACL</a> for further information about ACL.</p>

Datei anzeigen

@ -2351,9 +2351,8 @@
<p><strong>That's recommended and should not be changed.</strong></p> <p><strong>That's recommended and should not be changed.</strong></p>
<p>If you need the user to be static anyway, please specify two variables in <code>mailcow.conf</code>.</p> <p>If you need the user to be static anyway, please specify two variables in <code>mailcow.conf</code>.</p>
<p><strong>Both</strong> parameters must not be empty!</p> <p><strong>Both</strong> parameters must not be empty!</p>
<div class="highlight"><pre><span></span><code>DOVECOT_MASTER_USER=mymasteruser <p><code>DOVECOT_MASTER_USER=mymasteruser
DOVECOT_MASTER_PASS=mysecretpass DOVECOT_MASTER_PASS=mysecretpass</code></p>
</code></pre></div>
<p>Run <code>docker-compose up -d</code> to apply your changes.</p> <p>Run <code>docker-compose up -d</code> to apply your changes.</p>
<p>The static master username will be expanded to <code>DOVECOT_MASTER_USER@mailcow.local</code>.</p> <p>The static master username will be expanded to <code>DOVECOT_MASTER_USER@mailcow.local</code>.</p>
<p>To login as <code>test@example.org</code> this would equal to <code>test@example.org*mymasteruser@mailcow.local</code> with the specified password above.</p> <p>To login as <code>test@example.org</code> this would equal to <code>test@example.org*mymasteruser@mailcow.local</code> with the specified password above.</p>

Datei anzeigen

@ -2442,41 +2442,39 @@
<p>Newer Docker versions seem to complain about existing volumes. You can fix this temporarily by removing the existing volume and start mailcow with the override file. But it seems to be problematic after a reboot (needs to be confirmed).</p> <p>Newer Docker versions seem to complain about existing volumes. You can fix this temporarily by removing the existing volume and start mailcow with the override file. But it seems to be problematic after a reboot (needs to be confirmed).</p>
</div> </div>
<p>An easy, dirty, yet stable workaround is to stop mailcow (<code>docker-compose down</code>), remove <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data</code> and create a new link to your remote filesystem location, for example:</p> <p>An easy, dirty, yet stable workaround is to stop mailcow (<code>docker-compose down</code>), remove <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data</code> and create a new link to your remote filesystem location, for example:</p>
<div class="highlight"><pre><span></span><code>mv /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data_backup <p><code>mv /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data_backup
ln -s /mnt/volume-xy/vmail_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data ln -s /mnt/volume-xy/vmail_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data</code></p>
</code></pre></div>
<p>Start mailcow afterwards.</p> <p>Start mailcow afterwards.</p>
<hr /> <hr />
<h2 id="the-old-way">The "old" way<a class="headerlink" href="#the-old-way" title="Permanent link">&para;</a></h2> <h2 id="the-old-way">The "old" way<a class="headerlink" href="#the-old-way" title="Permanent link">&para;</a></h2>
<p>If you want to use another folder for the vmail-volume, you can create a <code>docker-compose.override.yml</code> file and add the following content:</p> <p>If you want to use another folder for the vmail-volume, you can create a <code>docker-compose.override.yml</code> file and add the following content:</p>
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39; <p><code>version: '2.1'
volumes: volumes:
vmail-vol-1: vmail-vol-1:
driver_opts: driver_opts:
type: none type: none
device: /data/mailcow/vmail device: /data/mailcow/vmail
o: bind o: bind</code></p>
</code></pre></div>
<h3 id="moving-an-existing-vmail-folder">Moving an existing vmail folder:<a class="headerlink" href="#moving-an-existing-vmail-folder" title="Permanent link">&para;</a></h3> <h3 id="moving-an-existing-vmail-folder">Moving an existing vmail folder:<a class="headerlink" href="#moving-an-existing-vmail-folder" title="Permanent link">&para;</a></h3>
<ul> <ul>
<li>Locate the current vmail folder by its "Mountpoint" attribute: <code>docker volume inspect mailcowdockerized_vmail-vol-1</code></li> <li>Locate the current vmail folder by its "Mountpoint" attribute: <code>docker volume inspect mailcowdockerized_vmail-vol-1</code></li>
</ul> </ul>
<div class="highlight"><pre><span></span><code>[ <p><code>hl_lines="10"
[
{ {
&quot;CreatedAt&quot;: &quot;2019-06-16T22:08:34+02:00&quot;, "CreatedAt": "2019-06-16T22:08:34+02:00",
&quot;Driver&quot;: &quot;local&quot;, "Driver": "local",
&quot;Labels&quot;: { "Labels": {
&quot;com.docker.compose.project&quot;: &quot;mailcowdockerized&quot;, "com.docker.compose.project": "mailcowdockerized",
&quot;com.docker.compose.version&quot;: &quot;1.23.2&quot;, "com.docker.compose.version": "1.23.2",
&quot;com.docker.compose.volume&quot;: &quot;vmail-vol-1&quot; "com.docker.compose.volume": "vmail-vol-1"
}, },
<span class="hll"> &quot;Mountpoint&quot;: &quot;/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data&quot;, "Mountpoint": "/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data",
</span> &quot;Name&quot;: &quot;mailcowdockerized_vmail-vol-1&quot;, "Name": "mailcowdockerized_vmail-vol-1",
&quot;Options&quot;: null, "Options": null,
&quot;Scope&quot;: &quot;local&quot; "Scope": "local"
} }
] ]</code></p>
</code></pre></div>
<ul> <ul>
<li>Copy the content of the <code>Mountpoint</code> folder to the new location (e.g. <code>/data/mailcow/vmail</code>) using <code>cp -a</code>, <code>rsync -a</code> or a similar non strcuture breaking copy command</li> <li>Copy the content of the <code>Mountpoint</code> folder to the new location (e.g. <code>/data/mailcow/vmail</code>) using <code>cp -a</code>, <code>rsync -a</code> or a similar non strcuture breaking copy command</li>
<li>Stop mailcow by executing <code>docker-compose down</code> from within your mailcow root folder (e.g. <code>/opt/mailcow-dockerized</code>)</li> <li>Stop mailcow by executing <code>docker-compose down</code> from within your mailcow root folder (e.g. <code>/opt/mailcow-dockerized</code>)</li>

Datei anzeigen

@ -2444,9 +2444,9 @@
<h2 id="new-site">New site<a class="headerlink" href="#new-site" title="Permanent link">&para;</a></h2> <h2 id="new-site">New site<a class="headerlink" href="#new-site" title="Permanent link">&para;</a></h2>
<p>To create persistent (over updates) sites hosted by mailcow: dockerized, a new site configuration must be placed inside <code>data/conf/nginx/</code>:</p> <p>To create persistent (over updates) sites hosted by mailcow: dockerized, a new site configuration must be placed inside <code>data/conf/nginx/</code>:</p>
<p>A good template to begin with:</p> <p>A good template to begin with:</p>
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/my_custom_site.conf <p><code>nano data/conf/nginx/my_custom_site.conf</code></p>
</code></pre></div> <p>``` hl_lines="16"
<div class="highlight"><pre><span></span><code>server { server {
ssl_certificate /etc/ssl/mail/cert.pem; ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem; ssl_certificate_key /etc/ssl/mail/key.pem;
ssl_protocols TLSv1.2 TLSv1.3; ssl_protocols TLSv1.2 TLSv1.3;
@ -2461,29 +2461,27 @@
# Location: data/web # Location: data/web
root /web; root /web;
# Location: data/web/mysite.com # Location: data/web/mysite.com
<span class="hll"> #root /web/mysite.com #root /web/mysite.com
</span> include /etc/nginx/conf.d/listen_plain.active; include /etc/nginx/conf.d/listen_plain.active;
include /etc/nginx/conf.d/listen_ssl.active; include /etc/nginx/conf.d/listen_ssl.active;
server_name mysite.example.org; server_name mysite.example.org;
server_tokens off; server_tokens off;</p>
<p># This allows acme to be validated even with a different web root
# This allows acme to be validated even with a different web root
location ^~ /.well-known/acme-challenge/ { location ^~ /.well-known/acme-challenge/ {
default_type &quot;text/plain&quot;; default_type "text/plain";
rewrite /.well-known/acme-challenge/(.*) /$1 break; rewrite /.well-known/acme-challenge/(.*) /$1 break;
root /web/.well-known/acme-challenge/; root /web/.well-known/acme-challenge/;
} }</p>
<p>if ($scheme = http) {
if ($scheme = http) {
return 301 https://$server_name$request_uri; return 301 https://$server_name$request_uri;
} }
} }
</code></pre></div> ```</p>
<h2 id="new-site-with-proxy-to-a-remote-location">New site with proxy to a remote location<a class="headerlink" href="#new-site-with-proxy-to-a-remote-location" title="Permanent link">&para;</a></h2> <h2 id="new-site-with-proxy-to-a-remote-location">New site with proxy to a remote location<a class="headerlink" href="#new-site-with-proxy-to-a-remote-location" title="Permanent link">&para;</a></h2>
<p>Another example with a reverse proxy configuration:</p> <p>Another example with a reverse proxy configuration:</p>
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/my_custom_site.conf <p><code>nano data/conf/nginx/my_custom_site.conf</code></p>
</code></pre></div> <p>``` hl_lines="16 28"
<div class="highlight"><pre><span></span><code>server { server {
ssl_certificate /etc/ssl/mail/cert.pem; ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem; ssl_certificate_key /etc/ssl/mail/key.pem;
ssl_protocols TLSv1.2 TLSv1.3; ssl_protocols TLSv1.2 TLSv1.3;
@ -2498,20 +2496,17 @@
root /web; root /web;
include /etc/nginx/conf.d/listen_plain.active; include /etc/nginx/conf.d/listen_plain.active;
include /etc/nginx/conf.d/listen_ssl.active; include /etc/nginx/conf.d/listen_ssl.active;
<span class="hll"> server_name example.domain.tld; server_name example.domain.tld;
</span> server_tokens off; server_tokens off;</p>
<p>location ^~ /.well-known/acme-challenge/ {
location ^~ /.well-known/acme-challenge/ {
allow all; allow all;
default_type &quot;text/plain&quot;; default_type "text/plain";
} }</p>
<p>if ($scheme = http) {
if ($scheme = http) {
return 301 https://$host$request_uri; return 301 https://$host$request_uri;
} }</p>
<p>location / {
<span class="hll"> location / { proxy_pass <a href="http://service:3000/">http://service:3000/</a>;
</span> proxy_pass http://service:3000/;
proxy_set_header Host $http_host; proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@ -2519,18 +2514,16 @@
client_max_body_size 0; client_max_body_size 0;
} }
} }
</code></pre></div> ```</p>
<h2 id="config-expansion-in-mailcows-nginx">Config expansion in mailcows Nginx<a class="headerlink" href="#config-expansion-in-mailcows-nginx" title="Permanent link">&para;</a></h2> <h2 id="config-expansion-in-mailcows-nginx">Config expansion in mailcows Nginx<a class="headerlink" href="#config-expansion-in-mailcows-nginx" title="Permanent link">&para;</a></h2>
<p>The filename used for a new site is not important, as long as the filename carries a .conf extension.</p> <p>The filename used for a new site is not important, as long as the filename carries a .conf extension.</p>
<p>It is also possible to extend the configuration of the default file <code>site.conf</code> file:</p> <p>It is also possible to extend the configuration of the default file <code>site.conf</code> file:</p>
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/site.my_content.custom <p><code>nano data/conf/nginx/site.my_content.custom</code></p>
</code></pre></div>
<p>This filename does not need to have a ".conf" extension but follows the pattern <code>site.*.custom</code>, where <code>*</code> is a custom name.</p> <p>This filename does not need to have a ".conf" extension but follows the pattern <code>site.*.custom</code>, where <code>*</code> is a custom name.</p>
<p>If PHP is to be included in a custom site, please use the PHP-FPM listener on phpfpm:9002 or create a new listener in <code>data/conf/phpfpm/php-fpm.d/pools.conf</code>.</p> <p>If PHP is to be included in a custom site, please use the PHP-FPM listener on phpfpm:9002 or create a new listener in <code>data/conf/phpfpm/php-fpm.d/pools.conf</code>.</p>
<p>Restart Nginx (and PHP-FPM, if a new listener was created):</p> <p>Restart Nginx (and PHP-FPM, if a new listener was created):</p>
<div class="highlight"><pre><span></span><code>docker-compose restart nginx-mailcow <p><code>docker-compose restart nginx-mailcow
docker-compose restart php-fpm-mailcow docker-compose restart php-fpm-mailcow</code></p>
</code></pre></div>
<hr> <hr>
<div class="md-source-file"> <div class="md-source-file">

Datei anzeigen

@ -2350,7 +2350,8 @@
<p><strong>IMPORTANT</strong>: This guide only applies to non SNI enabled configurations. The certificate path needs to be adjusted if SNI is enabled. Something like <code>ssl_certificate,key /etc/ssl/mail/webmail.example.org/cert.pem,key.pem;</code> will do. <strong>But</strong>: The certificate should be acquired <strong>first</strong> and only after the certificate exists a site config should be created. Nginx will fail to start if it cannot find the certificate and key.</p> <p><strong>IMPORTANT</strong>: This guide only applies to non SNI enabled configurations. The certificate path needs to be adjusted if SNI is enabled. Something like <code>ssl_certificate,key /etc/ssl/mail/webmail.example.org/cert.pem,key.pem;</code> will do. <strong>But</strong>: The certificate should be acquired <strong>first</strong> and only after the certificate exists a site config should be created. Nginx will fail to start if it cannot find the certificate and key.</p>
<p>To create a subdomain <code>webmail.example.org</code> and redirect it to SOGo, you need to create a <strong>new</strong> Nginx site. Take care of "CHANGE_TO_MAILCOW_HOSTNAME"!</p> <p>To create a subdomain <code>webmail.example.org</code> and redirect it to SOGo, you need to create a <strong>new</strong> Nginx site. Take care of "CHANGE_TO_MAILCOW_HOSTNAME"!</p>
<p><strong>nano data/conf/nginx/webmail.conf</strong></p> <p><strong>nano data/conf/nginx/webmail.conf</strong></p>
<div class="highlight"><pre><span></span><code>server { <p>``` hl_lines="9 17"
server {
ssl_certificate /etc/ssl/mail/cert.pem; ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem; ssl_certificate_key /etc/ssl/mail/key.pem;
index index.php index.html; index index.php index.html;
@ -2358,23 +2359,21 @@
root /web; root /web;
include /etc/nginx/conf.d/listen_plain.active; include /etc/nginx/conf.d/listen_plain.active;
include /etc/nginx/conf.d/listen_ssl.active; include /etc/nginx/conf.d/listen_ssl.active;
<span class="hll"> server_name webmail.example.org; server_name webmail.example.org;
</span> server_tokens off; server_tokens off;
location ^~ /.well-known/acme-challenge/ { location ^~ /.well-known/acme-challenge/ {
allow all; allow all;
default_type &quot;text/plain&quot;; default_type "text/plain";
}</p>
<p>location / {
return 301 <a href="https://CHANGE_TO_MAILCOW_HOSTNAME/SOGo">https://CHANGE_TO_MAILCOW_HOSTNAME/SOGo</a>;
} }
location / {
<span class="hll"> return 301 https://CHANGE_TO_MAILCOW_HOSTNAME/SOGo;
</span> }
} }
</code></pre></div> ```</p>
<p>Save and restart Nginx: <code>docker-compose restart nginx-mailcow</code>.</p> <p>Save and restart Nginx: <code>docker-compose restart nginx-mailcow</code>.</p>
<p>Now open <code>mailcow.conf</code> and find <code>ADDITIONAL_SAN</code>. <p>Now open <code>mailcow.conf</code> and find <code>ADDITIONAL_SAN</code>.
Add <code>webmail.example.org</code> to this array, don't use quotes!</p> Add <code>webmail.example.org</code> to this array, don't use quotes!</p>
<div class="highlight"><pre><span></span><code>ADDITIONAL_SAN=webmail.example.org <p><code>ADDITIONAL_SAN=webmail.example.org</code></p>
</code></pre></div>
<p>Run <code>docker-compose up -d</code>. See "acme-mailcow" and "nginx-mailcow" logs if anything fails.</p> <p>Run <code>docker-compose up -d</code>. See "acme-mailcow" and "nginx-mailcow" logs if anything fails.</p>
<hr> <hr>

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden Mehr anzeigen