--- 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 asks whether to use GPU acceleration and chooses the compatible backend image automatically. Non-interactive installs default to CPU unless you pass an explicit flag. Interactive installs also ask whether to enable automatic daily updates with Watchtower, noting that updates may download several GB in the background. ### 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, or to avoid large background image downloads): ```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)