pno-table runs as a single Node container with a persistent volume for its SQLite metadata database.
- A Coolify instance (v4+)
- A Git repository containing this project
- Network access from the Coolify host to your Postgres servers
Generate a master key:
openssl rand -hex 32Store it securely. Do not change it after deployment — encrypted connection passwords become unreadable if the key changes.
-
In Coolify, create a New Resource → Application.
-
Connect your Git repository and select the branch to deploy.
-
Set Build Pack to Dockerfile (Coolify detects
Dockerfilein the repo root). -
Set Port to
3000. -
Under Environment Variables, add:
Variable Value PNO_MASTER_KEYOutput of openssl rand -hex 32PNO_DATA_DIR/dataPNO_AUTH_PASSWORDStrong shared password (enables login gate) -
Under Persistent Storage, add a volume:
Mount path Description /dataSQLite metadata (saved connections) -
Enable HTTPS on your Coolify domain (Traefik/Caddy proxy handles TLS).
-
Deploy.
On each deploy, the container runs drizzle-kit push before starting the server so the SQLite schema stays in sync.
If you prefer a Compose resource in Coolify:
- Create New Resource → Docker Compose.
- Point at this repository (
docker-compose.ymlin the root). - Set
PNO_MASTER_KEYin the Compose environment (or Coolify secrets). - Ensure the
pno-datavolume is retained across redeploys.
Coolify injects its own proxy; you usually do not need to publish host ports in Compose.
pno-table uses a single shared password when PNO_AUTH_PASSWORD is set — suitable for a small trusted team behind HTTPS, not multi-tenant SaaS.
Before exposing the app beyond a trusted network:
- Put it behind VPN, IP allowlisting, or an SSO reverse proxy (Authelia, Cloudflare Access, etc.).
- Use read-only Postgres roles where possible.
- Back up
/data/pno-table.sqliteregularly together with yourPNO_MASTER_KEY.
export PNO_MASTER_KEY="$(openssl rand -hex 32)"
docker compose up --buildOpen http://localhost:3000 (Coolify will assign its own domain in production).
| Symptom | Fix |
|---|---|
| Container exits immediately | Check PNO_MASTER_KEY is set (min 16 chars). |
| Connections disappear after redeploy | Persistent volume missing at /data. |
| Cannot reach Postgres | Firewall / security group must allow egress from the Coolify host to Postgres port 5432. |
better-sqlite3 build errors |
Ensure Coolify builds on Linux amd64/arm64 with the provided Dockerfile (do not use a Node buildpack without native module support). |