Skip to content

Installation

The canonical install walkthrough is in the main repo at deploy/INSTALL.md. Every command is verified against a real Contabo VPS.

Quick summary

  1. DNS — point app.yourdomain.com A record at your VPS IP (Cloudflare DNS-only / grey cloud for initial cert issuance)
  2. SSH in, install Docker:
    Terminal window
    curl -fsSL https://get.docker.com | sh
    systemctl enable --now docker
  3. Clone the repo (with a GitHub deploy key if you forked privately):
    Terminal window
    git clone https://github.com/mezzanine-cloud/mezzanine.git /opt/mezzanine
  4. Issue the Let’s Encrypt cert on the host before bringing up nginx:
    Terminal window
    apt install -y certbot
    certbot certonly --standalone -d app.yourdomain.com -m you@yourdomain.com --agree-tos -n
    systemctl enable --now certbot.timer
  5. Configure + start the stack:
    Terminal window
    cd /opt/mezzanine/deploy/docker
    cp .env.example .env
    $EDITOR .env # set DOMAIN=app.yourdomain.com
    docker compose --env-file .env build
    docker compose --env-file .env up -d
    docker compose ps # all 3 services should be Up/healthy
  6. Open https://app.yourdomain.com → create the first admin → you’re in.

What you’ll have

  • A Mezzanine panel at https://app.yourdomain.com
  • An SQLite-backed DB on a named Docker volume that survives container recreates
  • Three running containers (backend, frontend, nginx) bound to host :80/:443
  • TLS auto-renewing via certbot’s systemd timer
  • A repo-cloned /opt/mezzanine that you can git pull to update

Beyond Phase 1

The walkthrough continues to:

  • Phase 7 — wire CI/CD so Mezzanine deploys itself on git push
  • Phase 8 — deploy a landing site (e.g. yourdomain.com) through Mezzanine itself
  • Phase 9 — security hardening (ufw, key-only SSH, Cloudflare proxied, DB backups)

See the full INSTALL.md for every command + troubleshooting for every error we hit during the verified install.

Local dev

If you’re hacking on Mezzanine itself (not deploying it):

Terminal window
git clone https://github.com/mezzanine-cloud/mezzanine.git
cd mezzanine
npm install
npm run dev

Open http://localhost:3000. First-load wizard creates the admin. SQLite lives at backend/data/mezzanine.db (gitignored).