Get VaultStadio up and running in 5 minutes.
- Docker and Docker Compose installed
- OR JDK 21+ and Gradle 8+ for development
git clone https://github.com/yourusername/vaultstadio.git
cd vaultstadio# Copy example environment file
cp docker/.env.example docker/.env
# Edit the file (optional - defaults work for local testing)
# nano docker/.envMinimum configuration (in docker/.env):
POSTGRES_PASSWORD=your-secure-password
VAULTSTADIO_JWT_SECRET=your-32-character-secret-key-heredocker-compose -f docker/docker-compose.yml up -d- Web UI: http://localhost
- API: http://localhost:8080
- Swagger: http://localhost:8080/swagger-ui
- Open http://localhost
- Click "Register"
- Enter your email, username, and password
- Start uploading files!
git clone https://github.com/yourusername/vaultstadio.git
cd vaultstadiodocker-compose -f docker/docker-compose.yml up -d postgres./gradlew :backend:api:runThe API will be available at http://localhost:8080
Frontend is a standalone project in frontend/. From repo root you can use Make, or run Gradle from frontend/:
Desktop App:
make desktop-run
# Or: cd frontend && ./gradlew :composeApp:runWeb (WASM) – development dev server:
make frontend-run
# Or: cd frontend && ./gradlew :composeApp:wasmJsBrowserDevelopmentRunWeb (WASM) – production dev server:
make frontend-run-prod
# Or: cd frontend && ./gradlew :composeApp:wasmJsBrowserProductionRundocker-compose -f docker/docker-compose.yml build
# Push to your registry
docker tag vaultstadio-backend:latest your-registry/vaultstadio-backend:latest
docker tag vaultstadio-frontend:latest your-registry/vaultstadio-frontend:latest
docker push your-registry/vaultstadio-backend:latest
docker push your-registry/vaultstadio-frontend:latesthelm install vaultstadio ./helm/vaultstadio \
--set backend.image.repository=your-registry/vaultstadio-backend \
--set frontend.image.repository=your-registry/vaultstadio-frontend \
--set backend.persistence.hostPath.enabled=true \
--set backend.persistence.hostPath.path=/mnt/pool/vaultstadio \
--set backend.env.VAULTSTADIO_JWT_SECRET="your-32-char-secret" \
--set postgresql.auth.password="secure-password"The first user registered becomes the admin (or use API):
curl -X POST http://localhost:8080/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "admin@example.com",
"username": "admin",
"password": "secure-password"
}'Via Web UI:
- Log in
- Click "Upload" button
- Select files
- Done!
Via API:
# Login
TOKEN=$(curl -s -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@example.com","password":"secure-password"}' \
| jq -r '.accessToken')
# Upload file
curl -X POST http://localhost:8080/api/v1/storage/upload \
-H "Authorization: Bearer $TOKEN" \
-F "file=@/path/to/your/file.pdf"curl -X POST http://localhost:8080/api/v1/storage/folder \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Documents"}'curl -X POST http://localhost:8080/api/v1/shares \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"itemId": "file-uuid",
"expirationDays": 7,
"maxDownloads": 10
}'# Start all services
docker-compose -f docker/docker-compose.yml up -d
# Stop all services
docker-compose -f docker/docker-compose.yml down
# View logs
docker-compose -f docker/docker-compose.yml logs -f
# Rebuild after changes
docker-compose -f docker/docker-compose.yml up --build -d
# Run tests
./gradlew test
# Build for production
make build# Check logs
docker-compose -f docker/docker-compose.yml logs backend
# Common issues:
# - Database not ready: wait a few seconds and restart
# - Port in use: change BACKEND_PORT in .env# Ensure PostgreSQL is running
docker-compose -f docker/docker-compose.yml ps
# Check database logs
docker-compose -f docker/docker-compose.yml logs postgres- Check if containers are running:
docker ps - Check nginx logs:
docker-compose logs frontend - Verify port 80 is not in use
VaultStadio includes advanced features for enterprise use cases:
macOS:
mount_webdav http://localhost:8080/webdav /Volumes/VaultStadioWindows:
net use Z: http://localhost:8080/webdav /user:username passwordLinux:
sudo mount -t davfs http://localhost:8080/webdav /mnt/vaultstadio# Configure AWS CLI
aws configure
# Access Key: your-api-key
# Secret Key: your-api-secret
# Region: us-east-1
# List files
aws s3 ls --endpoint-url http://localhost:8080/s3
# Upload file
aws s3 cp myfile.txt s3://documents/myfile.txt --endpoint-url http://localhost:8080/s3Register a sync device and keep files synchronized:
# Register device
curl -X POST http://localhost:8080/api/v1/sync/devices \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"deviceId": "my-laptop", "deviceName": "My Laptop", "deviceType": "DESKTOP"}'
# Pull changes
curl -X POST http://localhost:8080/api/v1/sync/pull \
-H "Authorization: Bearer $TOKEN" \
-H "X-Device-ID: my-laptop" \
-H "Content-Type: application/json" \
-d '{"limit": 100}'See Phase 6 Advanced Features for complete documentation.
- Read the API Documentation
- Explore Phase 6 Advanced Features (WebDAV, S3, Sync, Federation)
- Configure Storage Options
- Learn about Plugin Development
- Set up Production Deployment