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.

RequirementMinimum
Docker Engine26+
Docker Compose pluginv2.24+
RAM2 GB free (Lite tier)
Disk10 GB free
OSLinux, 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:

VariablePurpose
SECRET_KEYJWT signing key (≥ 32 characters, non-default)
ENCRYPTION_SALTFernet credential encryption salt
POSTGRES_PASSWORDPrimary database password
LOGDB_PASSWORDTimescaleDB (metrics) password (Compose assembles the full connection URL from this)
REDIS_PASSWORDValkey 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:

PathWhat
/React SPA
/api/v1/REST API (JSON)
/api/v1/docsSwagger UI (dev tier only - disabled when ENVIRONMENT=production)
/api/v1/redocReDoc (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
GoalWhere to go
Size for productionDeployment Tiers
Understand the data modelConcepts
Configure TLS / domainConfiguration
Enable cameras or HADeployment Tiers
Set up roles and accessRoles and Permissions