Skip to content

Upgrading

Rolling out a new version is designed to be boring. Releases are versioned (see the product’s CHANGELOG.md); you pull updates — you never edit core code, so there’s nothing to merge. Migrations run automatically on boot.

  1. Take a backup first (belt & braces — takes seconds):

    Terminal window
    cd /srv/app
    docker compose exec backup sh /backup.sh once

    Details and off-box copies: Backups.

  2. Get the new version:

    Terminal window
    git pull # or unpack the new purchase zip over /srv/app

    Frontend releases: if the release notes name new frontend image tags, bump STOREFRONT_TAG / ADMIN_TAG in .env (they’re prebuilt — never built here).

  3. Rebuild the API image, pull the new frontends, roll everything:

    Terminal window
    docker compose build web
    docker compose pull storefront admin
    docker compose up -d
    # full profile: add -f docker-compose.yml -f docker-compose.full.yml
  4. Watch it migrate and come healthy:

    Terminal window
    docker compose logs -f web # "Applying database migrations…" → gunicorn starts
    docker compose ps # every service "(healthy)"
    curl -s https://api.your-domain.com/health/
    curl -s https://your-domain.com/api/config # storefront up
    curl -s https://admin.your-domain.com/api/config # admin up

That’s the whole procedure. The web entrypoint waits for the database, migrates, collects static files and starts — the same automation as first boot. If a release ever needs more, its CHANGELOG entry will say so explicitly. Frontend config never requires an image change — API URL, domain, brand and theme are runtime values (Store settings & branding).

When you outgrow the 2 GB box: provision the 8 GB VPS (see the Hostinger runbook), copy /srv/app including .env, restore your latest backup there, and start with the full overlay:

Terminal window
docker compose -f docker-compose.yml -f docker-compose.full.yml up -d

Same image, same data, same .env — the overlay adds Redis/Celery/websockets and retunes Postgres. On the same box (if it has ≥8 GB) it’s just this command in place. More detail on the two footprints: Architecture overview.