Environment Overview
pb-ext inherits PocketBase’s configuration system and adds pb-ext-specific settings. Configuration can be set via environment variables, command-line flags, or programmatically in code.Port Configuration
Default Port
pb-ext runs on port 8090 by default:Custom Port via Command Line
Use the--http flag to specify a custom port:
HTTP server address and port (
host:port)Programmatic Port Configuration
Set the port in code usingos.Args:
Environment Variable
Set via environment variable:Data Directory
Default Data Directory
By default, PocketBase stores all data inpb_data/:
Custom Data Directory via Flag
Programmatic Configuration
Configure the data directory in code:Developer Mode vs Normal Mode
pb-ext can run in two modes that affect behavior and security settings.Developer Mode
Enables development features and relaxed security:- Verbose logging
- Runtime OpenAPI spec generation via AST parsing
- Auto-migration of schema changes
- CORS headers relaxed for
localhost - Admin UI accessible without HTTPS
Normal Mode (Production)
Production-ready configuration:- Structured logging only
- OpenAPI specs read from disk (
specs/directory) - CORS restrictions enforced
- Requires HTTPS for admin UI (recommended)
- Security headers enabled
Database Configuration
Database File Location
The main database file:Connection Pool Settings
PocketBase uses SQLite with WAL mode enabled by default for better concurrency:Database Backups
Automatic backups are stored in:- Before schema migrations
- On demand via admin UI
- Via cron job (if configured)
Logs and Persistent Storage
Application Logs
Structured logs are written to:pb-ext System Logs
pb-ext creates these collections for operational data:| Collection | Purpose | Retention |
|---|---|---|
_analytics | Page view analytics | 90 days |
_analytics_sessions | Recent 50 visits | Ring buffer |
_job_logs | Cron job execution logs | 72 hours |
Log Rotation
For systemd deployments, use journald for log management:Environment Variables
Common environment variables for pb-ext:HTTP server address
Data directory path
Enable developer mode
32-character key for encrypting sensitive fields
Default admin email (first-run setup)
Default admin password (first-run setup)
Example .env File
Load environment variables using a package like godotenv or via systemd service configuration.
Docker Configuration
Dockerfile Example
Docker Compose
Running with Docker
Configuration Precedence
Settings are applied in this order (later overrides earlier):- Default values (hardcoded in PocketBase/pb-ext)
- Environment variables (
PB_*) - Command-line flags (
--http,--dir, etc.) - Programmatic configuration (
WithConfig,os.Args)
Security Considerations
File Permissions
File Permissions
Set restrictive permissions on sensitive files:
Encryption Key
Encryption Key
Generate a secure encryption key:Store securely (environment variable or secrets manager).
Network Binding
Network Binding
- Development:
127.0.0.1:8090(localhost only) - Production: Use reverse proxy (Nginx/Caddy)
- Docker:
0.0.0.0:8090inside container, map externally
Admin Access
Admin Access
- Use strong admin passwords
- Enable 2FA for admin accounts
- Restrict admin panel to VPN or trusted IPs
- Use HTTPS in production
Monitoring Configuration
Health Checks
Configure health check endpoints:Metrics Collection
pb-ext automatically collects system metrics:- CPU usage
- Memory usage
- Disk space
- Network I/O
- Request statistics
- Active connections
http://localhost:8090/_/_
Troubleshooting
Port already in use
Port already in use
Error:
bind: address already in useSolution:Permission denied on data directory
Permission denied on data directory
Error:
failed to open database: unable to open database fileSolution:Database locked errors
Database locked errors
Cause: Multiple instances accessing same database or stale lock.Solution:
- Ensure only one instance is running
- Remove stale lock:
rm pb_data/data.db-wal - Check file permissions