stl-storage/README-Docker.md

122 lines
2.8 KiB
Markdown
Raw Normal View History

# STL Storage - Docker Deployment
A web-based STL file storage and 3D viewer application packaged for container deployment.
## Quick Start
### Using Podman/Docker Compose (Recommended)
1. **Build and start the application:**
```bash
podman-compose up -d --build
# or with Docker
docker-compose up -d --build
```
2. **Access the application:**
- Web interface: http://localhost:3000
- Upload STL files and view them in 3D
### Using Podman/Docker directly
1. **Build the container:**
```bash
podman build -t stl-storage .
# or with Docker
docker build -t stl-storage .
```
2. **Run the container:**
```bash
podman run -d \
--name stl-storage-app \
-p 3000:3000 \
-v ./uploads:/app/uploads \
-v ./stl_storage.db:/app/stl_storage.db \
stl-storage
```
## Features
### 🎯 **Core Functionality**
- **Web-based STL upload** with drag-and-drop support
- **3D viewer** with interactive controls (rotate, zoom, pan)
- **File management** (search, download, delete)
- **Viewer controls** (wireframe mode, color changes, screenshots)
- **SQLite database** for metadata storage
- **Local file storage** for STL files
### 🔒 **Security Features**
- **Rate limiting** and DDoS protection
- **Input validation** and sanitization
- **File format validation** beyond extension checking
- **Security headers** via Helmet.js
- **Non-root container** execution
- **Structured logging** with Winston
### 📊 **Monitoring & Reliability**
- **Health checks** for container monitoring
- **Graceful shutdown** handling
- **Error tracking** and logging
- **Configurable file size** and rate limits
## Container Details
- **Base Image:** Node.js 18 Alpine
- **Port:** 3000
- **User:** Non-root user (stlapp:1001)
- **Health Check:** Built-in endpoint monitoring
- **Persistent Data:** Uploads and database via volumes
## Volume Mounts
- `./uploads:/app/uploads` - STL file storage
- `./stl_storage.db:/app/stl_storage.db` - SQLite database
## Environment Variables
- `NODE_ENV=production` (default)
- `PORT=3000` (default)
## Management Commands
```bash
# View logs
podman logs stl-storage-app
# Stop application
podman-compose down
# Restart application
podman-compose restart
# Update application
podman-compose up -d --build
```
## Security Features
- Non-root user execution
- File type validation (STL only)
- File size limits (100MB)
- CORS protection
- Health monitoring
## Troubleshooting
1. **Port conflicts:** Change the port mapping in docker-compose.yml
2. **Permission issues:** Ensure upload directory is writable
3. **Database issues:** Delete stl_storage.db to reinitialize
4. **Memory issues:** Increase container memory limits for large STL files
## Development
To run in development mode:
```bash
podman run -it --rm \
-p 3000:3000 \
-v $(pwd):/app \
-w /app \
node:18-alpine \
npm run dev
```