1 zammad
Luca Matteo Spoljarevic edited this page 2026-02-27 21:45:51 +01:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Zammad

Zammad is a web-based helpdesk/customer support and ticketing system. This setup runs the full Zammad stack with Podman Compose: web app, Rails, Nginx, PostgreSQL, Redis, Memcached, optional Elasticsearch, and backup.


What the compose file does

Main application services

Service Role
zammad-nginx Reverse proxy; exposes HTTP (default 8080)
zammad-railsserver Rails application server
zammad-websocket Real-time updates
zammad-scheduler Background/scheduled jobs
zammad-init One-off DB init (runs on first start)
zammad-backup Backup job (e.g. at 03:00)

Supporting services

Service Role
zammad-postgresql Primary database
zammad-redis Cache/sessions
zammad-memcached Cache
zammad-elasticsearch Optional search (single-node)

Configuration

  • Image: ghcr.io/zammad/zammad:6.5.2-46 (overridable via IMAGE_REPO and VERSION)
  • Environment: Database (PostgreSQL), Redis URL, Memcached, backup dir/time/hold days, timezone (Europe/Berlin), and many optional vars (Elasticsearch, Nginx, proxies, etc.)
  • Port: Nginx exposes ${NGINX_EXPOSE_PORT:-8080} on the host
  • Volumes: Named volumes for PostgreSQL, Redis, Elasticsearch, Zammad storage, and backup

Most settings use defaults; override them with a .env file (e.g. POSTGRES_PASS, TZ, BACKUP_TIME, NGINX_EXPOSE_PORT).


Prerequisites

  • Podman and Podman Compose installed
  • Optional: .env for custom DB passwords, timezone, backup time, or port (see compose file for variable names)

How to use

  1. Go to the project folder:

    cd zammad
    
  2. (Optional) Create a .env file to set:

    • POSTGRES_PASS (and optionally POSTGRES_USER, POSTGRES_DB)
    • TZ
    • NGINX_EXPOSE_PORT (if you dont want 8080)
    • BACKUP_TIME, BACKUP_DIR, HOLD_DAYS for backups
  3. Start the stack:

    podman-compose up -d
    

    Wait for zammad-init to finish (check logs if needed).

  4. Open Zammad:
    http://<your-host>:8080
    (or the port set in NGINX_EXPOSE_PORT)

  5. First run:
    Follow the web setup wizard (create admin, etc.).

  6. Stop:

    podman-compose down
    

Data is in named volumes, so it persists across restarts.


Useful commands

Action Command
Start podman-compose up -d
Stop podman-compose down
Logs podman-compose logs -f
Restart podman-compose restart

Customization

  • Port: Set NGINX_EXPOSE_PORT=80 (or another port) in .env to change the host port.
  • Database/Redis/Memcached: Override POSTGRES_*, REDIS_URL, MEMCACHE_SERVERS in .env if you use external services.
  • Backups: Adjust BACKUP_DIR, BACKUP_TIME, and HOLD_DAYS in the compose environment or via .env.
  • Elasticsearch: Configure the optional Elasticsearch-related variables if you enable and use it.