Skip to main content

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:
string
default:"127.0.0.1:8090"
HTTP server address and port (host:port)

Programmatic Port Configuration

Set the port in code using os.Args:

Environment Variable

Set via environment variable:

Data Directory

Default Data Directory

By default, PocketBase stores all data in pb_data/:

Custom Data Directory via Flag

Programmatic Configuration

Configure the data directory in code:
Ensure the data directory has proper permissions (0755 for directory, 0600 for database file) and sufficient disk space.

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:
Command line:
Features:
  • Verbose logging
  • Runtime OpenAPI spec generation via AST parsing
  • Auto-migration of schema changes
  • CORS headers relaxed for localhost
  • Admin UI accessible without HTTPS
Never use developer mode in production. It disables important security features.

Normal Mode (Production)

Production-ready configuration:
Features:
  • 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:
Backups are created:
  • Before schema migrations
  • On demand via admin UI
  • Via cron job (if configured)

Logs and Persistent Storage

Application Logs

Structured logs are written to:
Access logs via SQL:

pb-ext System Logs

pb-ext creates these collections for operational data:

Log Rotation

For systemd deployments, use journald for log management:
View logs:

Environment Variables

Common environment variables for pb-ext:
string
default:"127.0.0.1:8090"
HTTP server address
string
default:"./pb_data"
Data directory path
boolean
default:false
Enable developer mode
string
32-character key for encrypting sensitive fields
string
Default admin email (first-run setup)
string
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):
  1. Default values (hardcoded in PocketBase/pb-ext)
  2. Environment variables (PB_*)
  3. Command-line flags (--http, --dir, etc.)
  4. Programmatic configuration (WithConfig, os.Args)

Security Considerations

Set restrictive permissions on sensitive files:
Generate a secure encryption key:
Store securely (environment variable or secrets manager).
  • Development: 127.0.0.1:8090 (localhost only)
  • Production: Use reverse proxy (Nginx/Caddy)
  • Docker: 0.0.0.0:8090 inside container, map externally
  • 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
Access via the dashboard at http://localhost:8090/_/_

Troubleshooting

Error: bind: address already in useSolution:
Error: failed to open database: unable to open database fileSolution:
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

Next Steps

Production Deployment

Deploy to production with automated tools

Frontend Configuration

Set up SvelteKit and static file serving