Skip to content

Quick Start

Requirements

  • Docker 24+
  • Docker Compose v2
  • A public facing domain name for Android panels (e.g. panels.mydomain.com) (recommended)
  • A internal domain name for main app (recommended)

1. Download and configure

bash
mkdir notifiq && cd notifiq
wget -O docker-compose.yml https://getnotifiq.app/downloads/docker-compose.yml
wget -O .env https://getnotifiq.app/downloads/.env.example

Edit .env and fill in your values:

bash
# ═══════════════════════════════════════════════════════════════
# CRITICAL SECURITY SETTINGS (REQUIRED)
# ═══════════════════════════════════════════════════════════════

# 32-byte hex encryption key for sensitive credentials
# Generate: openssl rand -hex 32
ENCRYPTION_KEY=

# 32-byte hex key for session signing
# Generate: openssl rand -hex 32
NOTIFIQ_SESSION_SECRET=

# ═══════════════════════════════════════════════════════════════
# APPLICATION SETTINGS
# ═══════════════════════════════════════════════════════════════

NODE_ENV=production

# ═══════════════════════════════════════════════════════════════
# DATABASE CONFIGURATION
# ═══════════════════════════════════════════════════════════════

# Generate: openssl rand -hex 32
POSTGRES_PASSWORD=

# ═══════════════════════════════════════════════════════════════
# SYSTEM EMAIL (for invitations and password resets)
# ═══════════════════════════════════════════════════════════════

# Public URL of your Notifiq instance
APP_URL=https://notifiq.yourdomain.com

SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=
SMTP_PASSWORD=
SMTP_SECURE=false
SMTP_FROM_ADDRESS=Notifiq <[email protected]>

# ═══════════════════════════════════════════════════════════════
# OPTIONAL SETTINGS
# ═══════════════════════════════════════════════════════════════

# Set to 'true' if behind a reverse proxy with SSL termination (Traefik, nginx)
FORCE_HTTPS=true

# Set to 'true' when running over plain HTTP (internal network, no TLS)
# Disables secure cookies, HSTS, and CSP upgrade-insecure-requests
FORCE_HTTP=false

Generate your secrets

bash
openssl rand -hex 32  # run once for ENCRYPTION_KEY
openssl rand -hex 32  # run again for NOTIFIQ_SESSION_SECRET
openssl rand -hex 32  # run again for POSTGRES_PASSWORD

2. Start the stack

bash
docker compose up -d

Docker will pull libreitbe/notifiq-app:latest automatically on first run.

This starts three containers:

  • notifiq — the application (port 80 → 8080)
  • postgres — the database
  • redis — the job queue

3. First login

On first boot Notifiq initializes default accounts. The credentials are printed once to the container log — copy them immediately, they will not be shown again:

bash
docker compose logs notifiq

You will see output like:

============================================================
 Notifiq Multi-Tenant Initialization Complete
============================================================

 Default Tenant Created:
   Name: Default Organization
   Slug: default
   Tier: enterprise

 Super Admin User Created:
   Username: admin
   Email:    [email protected]
   Password: <generated-password>
   Role:     super_admin (global access)

 Tenant Admin User Created:
   Username: tenant_admin
   Email:    [email protected]
   Password: <generated-password>
   Role:     admin (default tenant)

 PLEASE STORE THESE PASSWORDS NOW
 They will NOT be shown again.
============================================================

Two accounts are created:

  • Super Admin (admin) — global access, manages tenants and the platform
  • Tenant Admin (tenant_admin) — admin of the default tenant

WARNING

Change both passwords immediately after first login via Settings → Change password.

4. Create a tenant

Notifiq is multi-tenant. The default tenant is created automatically, but you can create additional ones:

  1. Log in as Super Admin
  2. Go to Tenants
  3. Click New Tenant and fill in the name and tier
  4. Switch into the new tenant context to configure it

See Tenants for details.

5. Invite tenant users

Each tenant has its own users. To invite users to a tenant:

  1. Switch to the tenant context (as Super Admin or Tenant Admin)
  2. Go to Settings → Users
  3. Click Invite User and enter their email address
  4. They will receive an invitation email with a link to set their password

TIP

SMTP must be configured in .env for invitation emails to be sent.

6. Send your first notification

Create an API token in Settings → API Tokens, then:

bash
curl -X POST https://notifiq.yourdomain.com/api/notify \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Hello from Notifiq",
    "message": "Your first notification is working!",
    "level": "success"
  }'

The notification appears in the History view of your dashboard immediately.

7. Set up a display panel (optional)

To see notifications in real time on a dedicated screen:

  • Android — install the Notifiq Android app, connect with your API token
  • Linux — run the Notifiq Linux app
  • Docker panel — see Docker Panel

See Endpoints for setup details.

Reverse proxy (Traefik)

Example Traefik labels to add to the notifiq service:

yaml
labels:
  - "traefik.enable=true"
  - "traefik.http.routers.notifiq.rule=Host(`notify.yourdomain.com`)"
  - "traefik.http.routers.notifiq.entrypoints=websecure"
  - "traefik.http.routers.notifiq.tls.certresolver=letsencrypt"
  - "traefik.http.services.notifiq.loadbalancer.server.port=8080"

For the panel API prefix shortcut:

yaml
  - "traefik.http.routers.panels.rule=Host(`panels.yourdomain.com`) && PathPrefix(`/api/panels/`)"

Updating

bash
docker compose pull
docker compose up -d

Migrations run automatically on startup.

Backups

Back up the PostgreSQL database:

bash
docker exec notifiq-postgres-1 pg_dump -U notifiq notifiq > backup.sql

Health check

bash
curl https://notifiq.yourdomain.com/health
# {"status":"ok"}

The Docker Compose file includes a health check that restarts the container if /health fails.