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

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.