Sign inSign up

e1saps/asterdrive

By e1saps

Updated 5 days ago

A self-hosted cloud storage solution.

Image
Networking
Web servers
Databases & storage
0

10K+

e1saps/asterdrive repository overview

AsterDrive

AsterDrive

Self-hosted file infrastructure in Rust for small teams that need storage control, reliable large-file uploads, WebDAV/WOPI, and operations visibility — without adopting a full private-cloud suite.

Route files across local, S3-compatible, Azure Blob, Tencent COS, Alibaba OSS, Qiniu Kodo, OneDrive/SharePoint, SFTP, and remote-node backends with one dual-licensed (MIT / Apache 2.0) Rust + React service.

Quick Start

The container runs as the non-root user aster (UID/GID 10001:10001). If you bind mount a host directory, create it first and align ownership:

mkdir -p ./data
sudo chown -R 10001:10001 ./data

docker run -d \
  --name asterdrive \
  -p 3000:3000 \
  -e ASTER__DATABASE__URL="sqlite:///data/asterdrive.db?mode=rwc" \
  -v "$(pwd)/data:/data" \
  e1saps/asterdrive:latest

Then open http://localhost:3000, create the administrator account, and create the first storage policy — the instance reports ready only after both exist.

Why is ASTER__DATABASE__URL required? The built-in default SQLite path is relative to the working directory (/), which the non-root container user cannot write to. Point the database (and everything else) at the /data volume.

Named volumes (docker volume create) are owned by the in-container user automatically and do not need chown.

Tags and Variants

All tags are multi-arch manifests for linux/amd64 and linux/arm64.

ChannelFull imageSlim image
Stable releaselatest, stable, vX.Y.Zlatest-slim, stable-slim, vX.Y.Z-slim
Stable + metricslatest-metrics, stable-metrics, vX.Y.Z-metricslatest-metrics-slim, stable-metrics-slim, vX.Y.Z-metrics-slim
Prerelease (alpha / beta / rc)edge, vX.Y.Z-rc.Nedge-slim, vX.Y.Z-rc.N-slim
Prerelease + metricsedge-metrics, vX.Y.Z-rc.N-metricsedge-metrics-slim, vX.Y.Z-rc.N-metrics-slim

Full vs slim: the full image bundles vips, ffmpeg, and ffprobe for HEIC/AVIF/PDF covers, video thumbnails, and video metadata. Slim images omit those external media tools for a smaller download and software bill of materials; built-in image/audio processing and every other capability (databases, storage backends, WebDAV, WOPI, remote nodes) are unchanged. If an existing instance uses those media processors (Admin → System Settings → File Processing → Media Processing), stay on the full image.

Metrics: -metrics builds compile in the Prometheus metrics feature. See Monitoring and Grafana.

Docker Compose

services:
  asterdrive:
    image: e1saps/asterdrive:stable
    ports:
      - "3000:3000"
    volumes:
      - ./data:/data
      - /etc/localtime:/etc/localtime:ro
    environment:
      - ASTER__DATABASE__URL=sqlite:///data/asterdrive.db?mode=rwc
    stop_grace_period: 45s
    restart: unless-stopped

Prepare the bind mount first: mkdir -p ./data && sudo chown -R 10001:10001 ./data.

An optional aria2 profile for link import is available in the repository's docker-compose.yml; see Single-Instance Docker Deployment.

Configuration

AsterDrive generates /data/config.toml on first startup. Edit it on the host and restart the container, or override any key with an environment variable: prefix ASTER__, with __ as the section separator.

VariableDefaultPurpose
ASTER__SERVER__HOST0.0.0.0 (set in image)HTTP bind address
ASTER__SERVER__PORT3000HTTP port
ASTER__DATABASE__URLsqlite://asterdrive.db?mode=rwcSQLite, or postgres://… / mysql://…
ASTER__AUTH__JWT_SECRETchange-me-in-productionChange before production
ASTER__CACHE__BACKENDmemorymemory or redis
ASTER__CACHE__ENDPOINTemptye.g. redis://redis:6379/0
ASTER__DEPLOYMENT__PROFILEsinglesingle or cluster
ASTER__LOGGING__LEVELinfotrace / debug / info / warn / error
ASTER__LOGGING__FORMATtexttext or json

Full reference: config.example.toml and the configuration docs.

Image Layout

ItemValue
Useraster (UID/GID 10001:10001), non-root
Exposed port3000 (HTTP)
Volume/dataconfig.toml, SQLite database, uploads, avatars, temp dirs
HealthcheckGET /health/ready on port 3000
Entrypoint/usr/local/bin/aster_drive (the same binary provides the ops CLI, e.g. docker compose exec asterdrive aster_drive config …)

Production Notes

  • Put AsterDrive behind an HTTPS reverse proxy; do not expose port 3000 directly to the public internet. See Reverse Proxy.
  • Change all change-me-in-production secrets in config.toml before launch.
  • Upgrades run database migrations automatically. Back up /data first, and do not roll back to an older version after a minor-version upgrade. See Upgrade and Version Migration.
  • Multi-primary (cluster profile) deployments require shared PostgreSQL/MySQL, Redis, and object storage. See Load Balancing and Multi-Instance Deployments and Kubernetes Deployment.
  • Backups: keep config.toml, the database, and uploads/ (plus avatar/ if used). .tmp/ and .uploads/ are disposable. See Backup and Restore.

License

Dual-licensed under MIT or Apache 2.0. No paid edition, no feature wall.

Tag summary

Content type

Image

Digest

sha256:1cb06c356

Size

106.8 MB

Last updated

5 days ago

docker pull e1saps/asterdrive