Skip to content

Quickstart

This page walks you from zero to a running FreeSDN instance using the Lite tier - the fastest path for a homelab or evaluation. For production sizing see Deployment Tiers.

Requirement Minimum
Docker Engine 26+
Docker Compose plugin v2.24+
RAM 2 GB free (Lite tier)
Disk 10 GB free
OS Linux, macOS, or Windows with WSL2
Terminal window
git clone https://github.com/freesdn/freesdn.git
cd freesdn

install.sh is a tier-aware one-command bootstrapper. For a local HTTP instance:

Terminal window
./install.sh

For a named domain with automatic HTTPS via Let’s Encrypt:

Terminal window
./install.sh --tier pro --domain freesdn.example.com

The installer copies the right .env.<tier>.example to .env.<tier>, generates strong random secrets, and runs docker compose --env-file .env.<tier> up -d.

If you prefer full control over the env file:

Terminal window
cp .env.lite.example .env.lite

Open .env.lite and set the required secrets. Generate strong values with:

Terminal window
python3 -c "import secrets; print(secrets.token_urlsafe(48))"

Set at minimum:

Variable Purpose
SECRET_KEY JWT signing key (≥ 32 characters, non-default)
ENCRYPTION_SALT Fernet credential encryption salt
POSTGRES_PASSWORD Primary database password
LOGDB_PASSWORD TimescaleDB (metrics) password (Compose assembles the full connection URL from this)
REDIS_PASSWORD Valkey cache / broker password

Bring it up:

Terminal window
docker compose --env-file .env.lite up -d
Terminal window
docker compose --env-file .env.lite logs -f api

The API worker reports all services healthy and begins listening. The first boot runs database migrations automatically.

The Lite tier defaults to plain HTTP on port 8080:

http://localhost:8080

To use port 80 instead, set EDGE_HTTP_PORT=80 in your .env.lite (requires running as root or with CAP_NET_BIND_SERVICE).

Set CADDY_SITE_ADDRESS=localhost to get HTTPS via Caddy’s internal CA:

https://localhost

The edge exposes these paths:

Path What
/ React SPA
/api/v1/ REST API (JSON)
/api/v1/docs Swagger UI (dev tier only - disabled when ENVIRONMENT=production)
/api/v1/redoc ReDoc (dev tier only - disabled when ENVIRONMENT=production)

There is no default admin password. On first boot FreeSDN presents a web wizard that creates the initial super-admin account. Follow the wizard to:

  1. Set the admin email and password (minimum 12 characters).
  2. Name your first Organization.
  3. Choose which modules to enable for your organization.
  4. Add your first controller (IP/hostname and adapter type).

(The wizard also runs automated Welcome and Database health-check steps before these.)

Once the wizard completes you land on the main dashboard. To invite additional users, go to Administration → Users after setup.

  1. Overview → Sites - create a Site (e.g. “Main Office”).
  2. Credentials - store the username/password for your first controller.
  3. Controllers - point FreeSDN at your controller’s IP or hostname and select the adapter (e.g. Omada, OPNsense).
  4. Enable the modules your site needs (Network, Cameras, etc.) under Settings → Modules.

FreeSDN discovers devices registered in that controller on the next sync cycle.

Terminal window
# Stop without removing volumes
docker compose --env-file .env.lite down
# Pull the latest images and restart
docker compose --env-file .env.lite pull
docker compose --env-file .env.lite up -d
Goal Where to go
Size for production Deployment Tiers
Understand the data model Concepts
Configure TLS / domain Configuration
Enable cameras or HA Deployment Tiers
Set up roles and access Roles and Permissions

All product names, logos, and brands are property of their respective owners. FreeSDN is an independent project and is not affiliated with or endorsed by the vendors it integrates with. See Trademarks.