8.3 KiB
Docker Deployment Guide
Run your own prompts.chat instance with a single command.
Quick Start
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
ghcr.io/f/prompts.chat
First run: The container will clone the repository and build the app (~3-5 minutes).
Subsequent runs: Starts immediately using the cached build.
Open http://localhost:4444 in your browser.
Custom Branding
Customize your instance with environment variables:
docker run -d \
--name my-prompts \
-p 4444:3000 \
-v prompts-data:/data \
-e PCHAT_NAME="Acme Prompts" \
-e PCHAT_DESCRIPTION="Our team's AI prompt library" \
-e PCHAT_COLOR="#ff6600" \
-e PCHAT_AUTH_PROVIDERS="github,google" \
-e PCHAT_LOCALES="en,es,fr" \
ghcr.io/f/prompts.chat
Note: Branding is applied during the first build. To change branding later, delete the volume and re-run:
docker rm -f my-prompts docker volume rm prompts-data docker run ... # with new env vars
Configuration Variables
All variables are prefixed with PCHAT_ to avoid conflicts.
Branding (branding.* in prompts.config.ts)
| Env Variable | Config Path | Description | Default |
|---|---|---|---|
PCHAT_NAME |
branding.name |
App name shown in UI | My Prompt Library |
PCHAT_DESCRIPTION |
branding.description |
App description | Collect, organize... |
PCHAT_LOGO |
branding.logo |
Logo path (in public/) | /logo.svg |
PCHAT_LOGO_DARK |
branding.logoDark |
Dark mode logo | Same as PCHAT_LOGO |
PCHAT_FAVICON |
branding.favicon |
Favicon path | /logo.svg |
Theme (theme.* in prompts.config.ts)
| Env Variable | Config Path | Description | Default |
|---|---|---|---|
PCHAT_COLOR |
theme.colors.primary |
Primary color (hex) | #6366f1 |
PCHAT_THEME_RADIUS |
theme.radius |
Border radius: none|sm|md|lg |
sm |
PCHAT_THEME_VARIANT |
theme.variant |
UI style: default|flat|brutal |
default |
PCHAT_THEME_DENSITY |
theme.density |
Spacing: compact|default|comfortable |
default |
Authentication (auth.* in prompts.config.ts)
| Env Variable | Config Path | Description | Default |
|---|---|---|---|
PCHAT_AUTH_PROVIDERS |
auth.providers |
Providers: github,google,credentials |
credentials |
PCHAT_ALLOW_REGISTRATION |
auth.allowRegistration |
Allow public signup | true |
Internationalization (i18n.* in prompts.config.ts)
| Env Variable | Config Path | Description | Default |
|---|---|---|---|
PCHAT_LOCALES |
i18n.locales |
Supported locales (comma-separated) | en |
PCHAT_DEFAULT_LOCALE |
i18n.defaultLocale |
Default locale | en |
Features (features.* in prompts.config.ts)
| Env Variable | Config Path | Description | Default |
|---|---|---|---|
PCHAT_FEATURE_PRIVATE_PROMPTS |
features.privatePrompts |
Enable private prompts | true |
PCHAT_FEATURE_CHANGE_REQUESTS |
features.changeRequests |
Enable versioning | true |
PCHAT_FEATURE_CATEGORIES |
features.categories |
Enable categories | true |
PCHAT_FEATURE_TAGS |
features.tags |
Enable tags | true |
PCHAT_FEATURE_COMMENTS |
features.comments |
Enable comments | true |
PCHAT_FEATURE_AI_SEARCH |
features.aiSearch |
Enable AI search | false |
PCHAT_FEATURE_AI_GENERATION |
features.aiGeneration |
Enable AI generation | false |
PCHAT_FEATURE_MCP |
features.mcp |
Enable MCP features | false |
System Environment Variables
| Variable | Description | Default |
|---|---|---|
AUTH_SECRET |
Secret for authentication tokens | Auto-generated |
PORT |
Internal container port | 3000 |
DATABASE_URL |
PostgreSQL connection string | Internal DB |
Production Setup
For production, set AUTH_SECRET explicitly:
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
-e AUTH_SECRET="$(openssl rand -base64 32)" \
-e PCHAT_NAME="My Company Prompts" \
ghcr.io/f/prompts.chat
With OAuth Providers
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
-e AUTH_SECRET="your-secret-key" \
-e PCHAT_AUTH_PROVIDERS="github,google" \
-e AUTH_GITHUB_ID="your-github-client-id" \
-e AUTH_GITHUB_SECRET="your-github-client-secret" \
-e AUTH_GOOGLE_ID="your-google-client-id" \
-e AUTH_GOOGLE_SECRET="your-google-client-secret" \
ghcr.io/f/prompts.chat
With AI Features (OpenAI)
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
-e PCHAT_FEATURE_AI_SEARCH="true" \
-e OPENAI_API_KEY="sk-..." \
ghcr.io/f/prompts.chat
Custom Logo
Mount your logo file:
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
-v ./my-logo.svg:/data/app/public/logo.svg \
-e PCHAT_NAME="My App" \
ghcr.io/f/prompts.chat
Data Persistence
All-in-One Image
Data is stored in /data inside the container:
/data/postgres- PostgreSQL database files
Mount a volume to persist data:
docker run -d \
-v prompts-data:/data \
ghcr.io/f/prompts.chat
Backup
# Backup database
docker exec prompts pg_dump -U prompts prompts > backup.sql
# Restore database
docker exec -i prompts psql -U prompts prompts < backup.sql
Building Locally
Build and run locally:
docker build -f docker/Dockerfile -t prompts.chat .
docker run -p 4444:3000 -v prompts-data:/data prompts.chat
Health Check
The container includes a health check endpoint:
curl http://localhost:4444/api/health
Response:
{
"status": "healthy",
"timestamp": "2024-01-01T00:00:00.000Z",
"database": "connected"
}
Troubleshooting
View Logs
# All logs
docker logs prompts
# Follow logs
docker logs -f prompts
# PostgreSQL logs (inside container)
docker exec prompts cat /var/log/supervisor/postgresql.log
# Next.js logs (inside container)
docker exec prompts cat /var/log/supervisor/nextjs.log
Database Access
# Connect to PostgreSQL
docker exec -it prompts psql -U prompts -d prompts
# Run SQL query
docker exec prompts psql -U prompts -d prompts -c "SELECT COUNT(*) FROM \"Prompt\""
Container Shell
docker exec -it prompts bash
Common Issues
Container won't start:
- Check logs:
docker logs prompts - Ensure port 4444 is available:
lsof -i :4444
Database connection errors:
- Wait for PostgreSQL to initialize (can take 30-60 seconds on first run)
- Check database logs:
docker exec prompts cat /var/log/supervisor/postgresql.log
Authentication issues:
- Ensure
AUTH_SECRETis set for production - For OAuth, verify callback URLs are configured correctly
Resource Requirements
Minimum:
- 1 CPU core
- 1GB RAM
- 2GB disk space
Recommended:
- 2 CPU cores
- 2GB RAM
- 10GB disk space
Updating
# Pull latest image
docker pull ghcr.io/f/prompts.chat
# Stop and remove old container
docker stop prompts && docker rm prompts
# Start new container (data persists in volume)
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
-e AUTH_SECRET="your-secret-key" \
ghcr.io/f/prompts.chat
Security Considerations
- Always set AUTH_SECRET in production
- Use HTTPS - put a reverse proxy (nginx, Caddy, Traefik) in front
- Limit exposed ports - only expose what's needed
- Regular updates - pull the latest image regularly
- Backup data - regularly backup the
/datavolume
Example: Running Behind Nginx
server {
listen 443 ssl http2;
server_name prompts.example.com;
ssl_certificate /etc/letsencrypt/live/prompts.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/prompts.example.com/privkey.pem;
location / {
proxy_pass http://localhost:4444;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
License
MIT