This repository has been archived on 2026-07-15. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
drive/deployment.md
Elijah 724d70e58b
Some checks failed
Automated Container Build / build-and-push (push) Failing after 12s
Inital build
2026-05-22 12:29:43 -07:00

76 lines
3.4 KiB
Markdown

# Drive Deployment Documentation
This document covers everything you need to know to deploy and manage the Drive application. The stack consists of a high-performance Go + SQLite backend and a Next.js frontend, bundled together into a single, lightweight Docker container.
## Architecture & System Requirements
- **Backend**: Go (Fiber) running in WAL mode with SQLite for exceptional concurrency.
- **Frontend**: Next.js compiled into static assets served directly by the Go binary for optimal performance.
- **Media Support**: Built-in FFmpeg processing for video thumbnails and fast image resizing.
- **Data Persistence**: A single `/app/data` volume containing both your raw files and the SQLite metadata database (`drive.db`).
### Recommended Specs
- **CPU**: 1-2 Cores (More cores significantly accelerate FFmpeg video thumbnailing)
- **RAM**: 512MB minimum (1GB+ recommended for large concurrent video uploads)
- **Storage**: Sufficient space for your files.
---
## Deploying on Unraid
The application is heavily optimized for Unraid and native folder structures.
1. **Port Configuration**: The default internal port is `5827`. You can easily map this to any available port on your Unraid host using the Docker template or Compose file.
2. **Volume Mapping**: Map your Unraid array (e.g., `/mnt/user/Drive`) to the `/app/data` container path.
### Docker Compose Example
```yaml
services:
drive:
build: .
container_name: drive
ports:
- "5827:5827"
volumes:
# Map your Unraid array path here
- /mnt/user/Drive:/app/data
restart: unless-stopped
environment:
- PORT=5827
```
---
## First-Run Setup
1. Start the container: `docker-compose up -d`
2. Open your browser to `http://<your-unraid-ip>:5827`.
3. You will be greeted by the **First-Run Wizard**.
4. Create your initial admin account (username and password).
5. (Recommended) Enable 2FA in the Settings menu once logged in for additional security against brute-force attacks.
---
## Core Features & Maintenance
### File Versioning
When enabled in Settings, any time a file is overwritten (via web UI, WebDAV, or Tus upload), the older version is automatically moved to the hidden `.versions/` directory. Older versions are pruned automatically based on your Settings configuration.
### WebDAV Access
Drive supports native OS mounting via WebDAV (Windows Explorer, macOS Finder).
- **URL**: `http://<your-unraid-ip>:5827/webdav/`
- **Authentication**: Use your standard Drive username and password.
### Automated Backups
The container runs a daily background worker that safely executes a `sqlite3 .backup` command to create `drive.db.backup` in your `/app/data` folder. This ensures your metadata (share links, settings, users) is protected even if the live database encounters an issue during a power loss.
---
## Security Features
- **Path Jailing**: All file operations are rigorously sanitized and jailed to the `/app/data` directory to prevent directory traversal attacks (`../` exploits).
- **Brute-Force Protection**: The login API employs an exponential backoff mechanism.
- **JWT Authentication**: Short-lived access tokens with secure refresh token rotation.
- **Rate Limiting**: Public share endpoints are rate-limited to prevent abuse and denial-of-service against the backend.
- **Zip Slip Prevention**: The background archive extraction worker explicitly sanitizes all incoming archive paths before writing them to the disk.