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 viaIMAGE_REPOandVERSION) - 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:
.envfor custom DB passwords, timezone, backup time, or port (see compose file for variable names)
How to use
-
Go to the project folder:
cd zammad -
(Optional) Create a
.envfile to set:POSTGRES_PASS(and optionallyPOSTGRES_USER,POSTGRES_DB)TZNGINX_EXPOSE_PORT(if you don’t want 8080)BACKUP_TIME,BACKUP_DIR,HOLD_DAYSfor backups
-
Start the stack:
podman-compose up -dWait for
zammad-initto finish (check logs if needed). -
Open Zammad:
http://<your-host>:8080
(or the port set inNGINX_EXPOSE_PORT) -
First run:
Follow the web setup wizard (create admin, etc.). -
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.envto change the host port. - Database/Redis/Memcached: Override
POSTGRES_*,REDIS_URL,MEMCACHE_SERVERSin.envif you use external services. - Backups: Adjust
BACKUP_DIR,BACKUP_TIME, andHOLD_DAYSin the compose environment or via.env. - Elasticsearch: Configure the optional Elasticsearch-related variables if you enable and use it.