Docker Compose
This guide walks through deploying Frona AI with Docker Compose. This is the recommended approach for most deployments.
1. Get the example files
Section titled “1. Get the example files”git clone https://github.com/fronalabs/frona.gitcd frona/examples/docker-composeThe directory contains:
| File | Description |
|---|---|
docker-compose.yml | Service definitions |
env.example | Environment variable template |
config.yaml | Frona configuration (optional — defaults work out of the box) |
searxng/settings.yml | SearXNG search engine configuration |
2. Create your environment file
Section titled “2. Create your environment file”cp env.example .envEdit .env and set your encryption secret and at least one LLM API key:
# Required: change this from the defaultFRONA_AUTH_ENCRYPTION_SECRET=generate-a-strong-secret-here
# Required: at least one LLM provider API keyANTHROPIC_API_KEY=sk-ant-...See Environment Variables for the full reference.
3. Start the services
Section titled “3. Start the services”docker compose up -dThis starts three services:
| Service | Description | Port |
|---|---|---|
| frona | Frona server | 3001 (host) |
| browserless | Headless Chromium for browser automation | internal only |
| searxng | Meta search engine for web search | internal only |
4. Verify the deployment
Section titled “4. Verify the deployment”Check that all services are running:
docker compose psOpen http://localhost:3001 in your browser.
5. Create your first account
Section titled “5. Create your first account”The first time you access Frona, you’ll see the registration page. Create an account with a username and password. This becomes the first user on the instance.
Docker Compose file
Section titled “Docker Compose file”services: frona: image: ghcr.io/fronalabs/frona:latest ports: - "3001:3001" volumes: - ./data:/app/data - ./config.yaml:/app/data/config.yaml:ro env_file: - .env # See .env.example environment: - FRONA_BROWSER_WS_URL=ws://browserless:3333 - FRONA_SEARCH_SEARXNG_BASE_URL=http://searxng:8080 depends_on: - browserless - searxng restart: unless-stopped
browserless: image: ghcr.io/browserless/chromium:latest environment: - MAX_CONCURRENT_SESSIONS=10 - PREBOOT_CHROME=true volumes: - ./data/browser_profiles:/profiles restart: unless-stopped
searxng: image: searxng/searxng:latest environment: - SEARXNG_BASE_URL=http://searxng:8080 volumes: - ./searxng:/etc/searxng restart: unless-stoppedConfiguration
Section titled “Configuration”The optional config.yaml file lets you configure model groups, providers, and other settings. Environment variables with the FRONA_ prefix override values from the config file. See Config File Reference for the full reference.
All persistent data is stored in ./data/:
| Directory | Contents |
|---|---|
data/db/ | Database |
data/workspaces/ | Agent workspaces |
data/files/ | Uploaded files |
data/browser_profiles/ | Browser automation profiles |
Stopping the services
Section titled “Stopping the services”docker compose downTo stop and remove all data (volumes):
docker compose down -vUpdating
Section titled “Updating”docker compose pulldocker compose up -dSee Upgrades for more details on the upgrade process.