x-arcane:
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/sftpgo.svg
urls:
- https://github.com/sftpgo/docs/blob/main/docs/docker.md
services:
sftpgo:
image: drakkan/sftpgo:latest
restart: unless-stopped
ports:
- "${BIND_ADDRESS:-127.0.0.1}:${PORT:-8080}:8080"
- "${BIND_ADDRESS:-127.0.0.1}:${SFTP_PORT:-2022}:2022"
labels:
com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/sftpgo.svg
environment:
SFTPGO_DATA_PROVIDER__CREATE_DEFAULT_ADMIN: "true"
SFTPGO_DEFAULT_ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
SFTPGO_DEFAULT_ADMIN_PASSWORD: ${ADMIN_PASSWORD:?Set a strong SFTPGo administrator password}
volumes:
- data:/srv/sftpgo
- state:/var/lib/sftpgo
volumes:
data:
state:
BIND_ADDRESS=127.0.0.1
PORT=8080
TZ=Etc/UTC
SFTP_PORT=2022
ADMIN_USERNAME=admin
# Replace this example value before deployment; never use it in production.
ADMIN_PASSWORD=change-me-use-a-long-random-secret-admin_password
README
Managed SFTP file transfer with a web administration console.
Copy .env.example to .env, replace every example secret with a unique generated value, adjust the settings, then deploy with docker compose up -d or import this template in Arcane. Open http://localhost:8080 on the Docker host. Ports bind to localhost by default; set BIND_ADDRESS to a trusted interface for LAN access, or use a reverse proxy with HTTPS.
Set administrator credentials before deploying, then open /web/admin and create file transfer users. Administrator credentials initialize a new database only; use the UI for later password changes. Only SFTP and the HTTP UI are exposed.
Named volumes retain internal application state across container upgrades. Keep a backup before updating images; docker compose down -v deletes named volume data.
Upstream: installation and configuration.