# SFTPGo — Self-Hosted Secure File Transfer Server > SFTPGo is a full-featured SFTP, FTP/S, WebDAV, and HTTP/S file server written in Go, supporting virtual folders, multiple storage backends including S3 and GCS, and a web admin interface for user and quota management. ## Install Save as a script file and run: # SFTPGo — Self-Hosted Secure File Transfer Server ## Quick Use ```bash # Install via Docker docker run --name sftpgo -p 8080:8080 -p 2022:2022 \ -v /srv/sftpgo/data:/srv/sftpgo/data \ -v /srv/sftpgo/home:/home \ drakkan/sftpgo # Web admin at http://localhost:8080/web/admin # SFTP on port 2022 ``` ## Introduction SFTPGo is a modern, fully-featured file transfer server that supports SFTP, SCP, FTP/S, WebDAV, and HTTP/S file sharing. Written in Go, it replaces legacy OpenSSH-based SFTP setups with a secure, performant server that includes a web admin panel, virtual users (no OS accounts needed), and pluggable storage backends. ## What SFTPGo Does - Serves files via SFTP, SCP, FTP/S, WebDAV, and HTTP/S from a single process - Manages virtual users with quotas, bandwidth limits, and per-directory permissions - Supports multiple storage backends: local disk, S3, GCS, Azure Blob, and encrypted local - Provides a web admin panel and REST API for user and configuration management - Triggers event actions (webhooks, scripts, email) on file upload, download, or deletion ## Architecture Overview SFTPGo is a single Go binary with an event-driven architecture. Each protocol (SFTP, FTP, WebDAV, HTTP) runs as a listener sharing a common virtual filesystem layer. User data is stored in SQLite, PostgreSQL, or MySQL. The virtual filesystem abstraction maps user home directories to any storage backend transparently. ## Self-Hosting & Configuration - Deploy via Docker, native packages (deb/rpm), or a single binary download - Configure via sftpgo.json, environment variables, or the web admin UI - Choose database backend: embedded SQLite for single-node, PostgreSQL for HA - Set up TLS certificates for FTPS and HTTPS; SFTP uses SSH host keys - Integrate with external auth via LDAP, HTTP hooks, or PAM modules ## Key Features - Multi-protocol: SFTP, SCP, FTP/S, WebDAV, HTTP/S from one server - Virtual users with no OS account requirement and fine-grained permissions - Storage backends: local, S3, GCS, Azure Blob, SFTP-to-SFTP proxy, encrypted FS - Event system with webhooks, email notifications, and custom scripts - Two-factor authentication and IP-based access rules ## Comparison with Similar Tools - **OpenSSH sftp-server** — requires OS users, no web UI; SFTPGo uses virtual users with quotas - **ProFTPD** — FTP-focused with complex config; SFTPGo is multi-protocol with modern defaults - **vsftpd** — FTP only, minimal features; SFTPGo adds SFTP, WebDAV, and cloud storage backends - **Nextcloud** — full collaboration suite; SFTPGo is focused on file transfer protocols - **MinIO** — S3-only interface; SFTPGo provides traditional file transfer protocols over any backend ## FAQ **Q: Do I need to create Linux users for each SFTP account?** A: No. SFTPGo uses virtual users stored in its database. No OS accounts needed. **Q: Can I use S3 as the storage backend?** A: Yes. Configure an S3 bucket as a user's home directory or as a virtual folder. **Q: Does it support public key authentication?** A: Yes, with per-user authorized keys, certificate auth, and keyboard-interactive methods. **Q: How do I monitor transfers?** A: Use the REST API, web admin live connections view, or configure event actions for logging. ## Sources - https://github.com/drakkan/sftpgo - https://docs.sftpgo.com --- Source: https://tokrepo.com/en/workflows/asset-c41cdc5e Author: Script Depot