2.6 KiB
Coolify — Deploy the Next.js web app
Source
Coolify pulls from Git. Set up the repo on GitHub/GitLab/Gitea (private OK; Coolify supports deploy keys).
This repo's /web directory is the app root.
Create the application
- Coolify → + New Resource → Application → Public Git (or Private with deploy key).
- Repository:
git@github.com:youruser/ufo.git(whatever you push to) - Branch:
main - Base directory:
/web← important, the Next app isn't at the repo root - Build pack:
Nixpacks(orDockerfileif you commit one — Nixpacks is simpler for Next 15) - Port:
3000 - Domain:
disclosure.topandwww.disclosure.top
Environment variables
Set in the application's Environment Variables tab:
# Supabase (from Coolify's Supabase project page)
NEXT_PUBLIC_SUPABASE_URL=https://db.disclosure.top
NEXT_PUBLIC_SUPABASE_ANON_KEY=<paste-anon-key>
SUPABASE_SERVICE_ROLE_KEY=<paste-service-role-key>
# Anthropic (the Claude API for the chat agent)
ANTHROPIC_API_KEY=sk-ant-...
ANTHROPIC_CHAT_MODEL=claude-haiku-4-5
# Paths inside the container (we mount the wiki/ + processing/ volumes)
UFO_ROOT=/data/ufo
# Public URL (for magic-link redirects)
NEXT_PUBLIC_SITE_URL=https://disclosure.top
Volume mounts — the wiki data
The Next.js app reads markdown directly from /Users/guto/ufo/{wiki,processing,raw}. On the VPS, mount the data dir into the container at /data/ufo.
In Coolify app → Storages:
| Source (host) | Target (container) | Mode |
|---|---|---|
/data/ufo/wiki |
/data/ufo/wiki |
read-only |
/data/ufo/processing |
/data/ufo/processing |
read-only |
/data/ufo/raw |
/data/ufo/raw |
read-only |
How to populate these on the VPS first time:
# On your laptop, after pipeline finishes:
rsync -avz --progress \
/Users/guto/ufo/wiki/ \
/Users/guto/ufo/processing/ \
/Users/guto/ufo/raw/ \
root@<vps-ip>:/data/ufo/
Subsequent updates: just re-rsync. The container reads live (with Next.js page revalidation set appropriately).
Deploy
Coolify pulls the repo, runs npm install && npm run build, then npm run start on port 3000.
First deploy ~5 min. Subsequent (cached layer) ~1 min.
Verify
curl https://disclosure.top/api/documents | head -c 300
# → {"documents":[{"doc_id":"doc-059uap00011",...
Continuous deploy
Coolify can listen to a Git webhook so every push to main triggers a rebuild. Set in Application → Webhooks.
Next
→ SHARED.md — Meilisearch + Dragonfly + Imgproxy