Skip to content

Docker Compose

This guide walks through deploying Frona AI with Docker Compose. This is the recommended approach for most deployments.

git clone https://github.com/fronalabs/frona.git
cd frona/examples/docker-compose

The directory contains:

FileDescription
docker-compose.ymlService definitions
env.exampleEnvironment variable template
config.yamlFrona configuration (optional — defaults work out of the box)
searxng/settings.ymlSearXNG search engine configuration
cp env.example .env

Edit .env and set your encryption secret and at least one LLM API key:

# Required: change this from the default
FRONA_AUTH_ENCRYPTION_SECRET=generate-a-strong-secret-here
# Required: at least one LLM provider API key
ANTHROPIC_API_KEY=sk-ant-...

See Environment Variables for the full reference.

docker compose up -d

This starts three services:

ServiceDescriptionPort
fronaFrona server3001 (host)
browserlessHeadless Chromium for browser automationinternal only
searxngMeta search engine for web searchinternal only

Check that all services are running:

docker compose ps

Open http://localhost:3001 in your browser.

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.

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-stopped

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/:

DirectoryContents
data/db/Database
data/workspaces/Agent workspaces
data/files/Uploaded files
data/browser_profiles/Browser automation profiles
docker compose down

To stop and remove all data (volumes):

docker compose down -v
docker compose pull
docker compose up -d

See Upgrades for more details on the upgrade process.