Local and Docker
This page covers running the SkillsCtl server on a local machine, either from source or with Docker.
Running from source
Section titled “Running from source”You need Go 1.21 or later. Clone the repository if you haven’t already:
git clone https://github.com/nebari-dev/skillsctl.gitcd skillsctlStart the server:
go run ./backend/cmd/serverOr build and run the binary:
CGO_ENABLED=0 go build -ldflags="-s -w" -o skillsctl-server ./backend/cmd/server./skillsctl-serverExpected startup output:
2026/03/18 10:00:00 auth disabled (no OIDC_ISSUER_URL)2026/03/18 10:00:00 starting server on :8080 (db: skillsctl.db)The server listens on :8080 and creates skillsctl.db in the current directory.
Verify it is running:
curl localhost:8080/healthzExpected response: ok
Dev mode
Section titled “Dev mode”When OIDC_ISSUER_URL is not set, the server starts in dev mode:
- Authentication is disabled - all requests are accepted
- A default user identity is injected so ownership tracking works
- No credentials are needed to publish or install skills
Dev mode is useful for local development and evaluation. Do not run dev mode in production.
Configuring the port and database path
Section titled “Configuring the port and database path”Set environment variables before starting:
PORT=9090 DB_PATH=/var/data/skillsctl.db go run ./backend/cmd/serverOr export them:
export PORT=9090export DB_PATH=/var/data/skillsctl.dbgo run ./backend/cmd/serverSee Configuration reference for all available variables.
Running with Docker
Section titled “Running with Docker”Pull the image:
docker pull ghcr.io/nebari-dev/skillsctl-backend:latestRun with a local volume for the database:
docker run -d \ --name SkillsCtl \ -p 8080:8080 \ -v skillsctl-data:/data \ -e DB_PATH=/data/skillsctl.db \ ghcr.io/nebari-dev/skillsctl-backend:latestThe container runs as UID 65534 (non-root). Mount the volume at a path writable by that user, or pre-create the directory with appropriate permissions.
Verify:
curl localhost:8080/healthzRunning with Docker Compose
Section titled “Running with Docker Compose”A minimal docker-compose.yml for local use:
services: skillsctl: image: ghcr.io/nebari-dev/skillsctl-backend:latest ports: - "8080:8080" volumes: - skillsctl-data:/data environment: DB_PATH: /data/skillsctl.db
volumes: skillsctl-data:Start it:
docker compose up -dConnecting the CLI
Section titled “Connecting the CLI”Once the server is running, configure the CLI to point at it:
skillsctl config initAccept the default http://localhost:8080 when prompted. If the server is on a different host or port, enter that URL instead.
Next steps
Section titled “Next steps”- Kubernetes deployment - Helm chart for production clusters
- Configuration reference - all environment variables