--- title: One-Line Install Script description: One-command installation of SurfSense using Docker --- Downloads the compose files, generates a `SECRET_KEY`, starts all services with `docker compose up -d --wait`, and starts [Watchtower](https://github.com/nicholas-fedor/watchtower) as an external updater for automatic daily updates. **Prerequisites:** [Docker Desktop](https://www.docker.com/products/docker-desktop/) must be installed and running. ### For Linux/macOS users: ```bash curl -fsSL https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.sh | bash ``` ### For Windows users (PowerShell): ```powershell irm https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.ps1 | iex ``` This creates a `./surfsense/` directory with `docker-compose.yml`, `docker-compose.gpu.yml`, and `.env`, then runs `docker compose up -d --wait`. If an NVIDIA GPU and NVIDIA Container Toolkit are detected, the installer prompts for the backend variant. Non-interactive installs default to CPU unless you pass an explicit flag. ### GPU options Linux/macOS: ```bash # CUDA 12.8 curl -fsSL https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.sh | bash -s -- --variant=cuda # CUDA 12.6 fallback for older driver stacks curl -fsSL https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.sh | bash -s -- --variant=cuda126 # Reserve all available GPUs curl -fsSL https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.sh | bash -s -- --gpu --gpu-count=all ``` PowerShell: ```powershell # Save the script locally first when passing PowerShell parameters. .\install.ps1 -Variant cuda .\install.ps1 -Variant cuda126 -GpuCount all ``` The installer writes the same `.env` settings you would configure manually: `SURFSENSE_VARIANT` selects the backend image and `COMPOSE_FILE` enables the GPU overlay. To skip Watchtower (e.g. in production where you manage updates yourself): ```bash curl -fsSL https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.sh | bash -s -- --no-watchtower ``` To customise the check interval (default 24h), use `--watchtower-interval=SECONDS`. Manual updates use the same compose state stored in `.env`, so GPU overlays and variants are preserved: ```bash cd surfsense docker compose pull docker compose up -d --wait ``` If Watchtower is enabled, it preserves the running image variant tag automatically. Because SurfSense images are large, use `--no-watchtower` when you prefer to manage update timing yourself. --- ## Access SurfSense After starting, access SurfSense at: - **Frontend**: [http://localhost:3929](http://localhost:3929) - **Backend API**: [http://localhost:8929](http://localhost:8929) - **API Docs**: [http://localhost:8929/docs](http://localhost:8929/docs) - **Zero-cache**: [http://localhost:5929](http://localhost:5929)