Skip to content

Installation

This guide covers how to install and run SkySend using Docker.

Prerequisites

  • Docker Engine 20.10+
  • Docker Compose v2+ (recommended)

Multi-Architecture Support

SkySend images are available for AMD64 (x86_64) and ARM64 (aarch64) architectures.

Supports: Intel/AMD servers, Raspberry Pi 4+, Apple Silicon (M1/M2/M3), AWS Graviton

Docker Installation

yaml
# docker-compose.yml
services:
  skysend:
    image: skyfay/skysend:latest
    container_name: skysend
    restart: always
    ports:
      - "3000:3000"
    environment:
      - BASE_URL=http://localhost:3000
      # - DATA_DIR=/data            # Optional: Custom data directory (for the skysend.db SQLite file)
      # - UPLOADS_DIR=/uploads      # Optional: Custom data and uploads directories
      # - MAX_FILE_SIZE=2GB         # Optional: Max upload size
      # - UPLOAD_QUOTA_BYTES=10GB   # Optional: Per-IP quota per 24h
      # - TRUST_PROXY=true          # Optional: If behind a reverse proxy
      # - PUID=1001                 # Optional: User ID
      # - PGID=1001                 # Optional: Group ID
    volumes:
      - ./data:/data
      - ./uploads:/uploads
bash
docker run -d \
  --name skysend \
  --restart always \
  -p 3000:3000 \
  -e BASE_URL=http://localhost:3000 \
  -e DATA_DIR=/data \
  -e UPLOADS_DIR=/uploads \
  -v "$(pwd)/data:/data" \
  -v "$(pwd)/uploads:/uploads" \
  skyfay/skysend:latest

Start & Access

bash
docker compose up -d

SkySend is now running at http://localhost:3000.

Environment Variables

All environment variables are optional. SkySend works out of the box with sensible defaults.

→ See the full Environment Variables reference for all options, default values and descriptions.

Volume Mounts

Mount PointRequiredPurpose
/dataDatabase and persistent data.
/uploadsEncrypted file storage.

Data Persistence

Always mount both /data and /uploads to host directories. Without volumes, all uploads and database state are lost when the container is recreated.

Health Check

SkySend includes a built-in Docker health check:

bash
curl http://localhost:3000/api/health

Response:

json
{
  "status": "ok",
  "version": "0.1.0",
  "timestamp": "2026-01-01T00:00:00.000Z"
}

The health check runs every 30 seconds. Docker marks the container as unhealthy if 3 consecutive checks fail.

Next Steps