-
Notifications
You must be signed in to change notification settings - Fork 0
Installation
deannos edited this page Apr 26, 2026
·
1 revision
This page covers every supported way to run NotifyQ.
| Requirement | Version | Notes |
|---|---|---|
| Go | 1.25+ | |
| C toolchain | any |
gcc on Linux/Windows, clang on macOS (Xcode CLI tools) |
git |
any |
CGO must be enabled because the SQLite driver (mattn/go-sqlite3) compiles a C library.
macOS:
xcode-select --installUbuntu / Debian:
sudo apt-get install -y build-essentialAlpine Linux:
apk add --no-cache gcc musl-dev- Docker Engine 20.10+ (no local Go toolchain needed)
# Clone
git clone https://github.com/deannos/notification-queue.git
cd notification-queue
# Configure
cp .env.example .env
# Edit .env — at minimum set JWT_SECRET
# Run (builds UI + starts server)
make runThe server listens on http://localhost:8080 by default.
To compile a standalone binary:
make build # outputs ./notifyq
./notifyq
make buildrequires the Vite toolchain to build the embedded UI. If you only want the Go binary without rebuilding the UI, run:CGO_ENABLED=1 go build -o notifyq .
# Build the image
docker build -t notifyq .
# Run
docker run -d \
--name notifyq \
-p 8080:8080 \
-v notifyq-data:/data \
-e JWT_SECRET=your-random-secret \
-e DEFAULT_ADMIN_PASS=changeme \
-e ENV=production \
notifyqThe SQLite database is written to /data/notifications.db inside the container. The named volume notifyq-data persists it across container restarts.
Create a docker-compose.yml:
services:
notifyq:
image: notifyq # or build: . to build locally
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- notifyq-data:/data
environment:
ENV: production
JWT_SECRET: ${JWT_SECRET}
DEFAULT_ADMIN_USER: admin
DEFAULT_ADMIN_PASS: ${ADMIN_PASS}
ALLOW_REGISTRATION: "false"
RETENTION_DAYS: "30"
volumes:
notifyq-data:# Create a .env file with secrets
echo "JWT_SECRET=$(openssl rand -hex 32)" >> .env
echo "ADMIN_PASS=strongpassword" >> .env
docker compose up -dOn startup NotifyQ will:
- Open (or create) the SQLite database at
DATABASE_PATH. - Run schema migrations automatically.
- Create the admin user defined by
DEFAULT_ADMIN_USER/DEFAULT_ADMIN_PASSif no users exist.
Open http://localhost:8080 and log in:
| Username | Password |
|---|---|
admin |
(value of DEFAULT_ADMIN_PASS) |
Change the admin password immediately in any internet-facing deployment.
curl http://localhost:8080/health
# {"status":"ok"}- Configuration — tune every environment variable
- Deployment — production hardening and reverse proxy setup