Module 8 · Lesson 17 of 26

The update.sh workflow

Part of Mailcow: Self-Hosted Mail Server Mastery — Upgrades, Migrations & Version Pinning.

Mailcow ships update.sh in the repo root. It pulls new container tags, regenerates configs, and brings the stack up.

Standard upgrade:

cd /opt/mailcow-dockerized
./update.sh -c     # show changelog only
./update.sh        # actually upgrade

What it does:

  1. git fetch and check for new commits on master.
  2. Diff your mailcow.conf against mailcow.conf.example and warn about new variables.
  3. docker compose pull new image versions.
  4. docker compose down and up -d.

Best practices:

  • Read ./update.sh -c BEFORE running. Breaking changes are flagged with !!!.
  • Take a backup snapshot first (backup_and_restore.sh backup all).
  • Upgrade in a low-traffic window — there's typically 30–90 s of downtime.
  • After upgrade, check docker compose ps — every container should be healthy or running.

Sign in to keep track of what you have read.

Pulse · self-hosted sending

Own the infrastructure your pipeline depends on.

One install script on your own server. Pulse sets up the MTA, mailboxes, certificates and dashboard; you add domains and start sending.

# on a fresh Ubuntu server
$ cd pulse && sudo ./install.sh
→ docker compose up · kumomta · stalwart · caddy
→ dashboard ready on https://pulse.yourdomain.com
$

Also from us:Beat — monitoring that tells you the fixConsulting — $65/hr, no retainer