Self-Hosting
FloImg Studio is open-source and designed for self-hosting. Run it on your own servers with full control.
Quick Start
Section titled “Quick Start”Docker (Recommended)
Section titled “Docker (Recommended)”docker run -d \ --name floimg-studio \ -p 5100:5100 \ ghcr.io/teamflojo/floimg-studioOpen http://localhost:5100 in your browser.
Docker Compose
Section titled “Docker Compose”version: '3.8'services: floimg-studio: image: ghcr.io/teamflojo/floimg-studio ports: - "5100:5100" environment: - NODE_ENV=production restart: unless-stoppeddocker-compose up -dConfiguration
Section titled “Configuration”Environment Variables
Section titled “Environment Variables”| Variable | Description | Default |
|---|---|---|
PORT | Server port | 5100 |
NODE_ENV | Environment | development |
CORS_ORIGIN | Allowed origins | * |
OUTPUT_DIR | Default output directory | /tmp/floimg |
AWS_ACCESS_KEY_ID | For S3 outputs | - |
AWS_SECRET_ACCESS_KEY | For S3 outputs | - |
AWS_REGION | For S3 outputs | - |
Example with S3
Section titled “Example with S3”services: floimg-studio: image: ghcr.io/teamflojo/floimg-studio ports: - "5100:5100" environment: - NODE_ENV=production - AWS_ACCESS_KEY_ID=your-key - AWS_SECRET_ACCESS_KEY=your-secret - AWS_REGION=us-east-1Production Deployment
Section titled “Production Deployment”With Nginx Reverse Proxy
Section titled “With Nginx Reverse Proxy”server { listen 80; server_name studio.yourdomain.com; return 301 https://$server_name$request_uri;}
server { listen 443 ssl http2; server_name studio.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/studio.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/studio.yourdomain.com/privkey.pem;
location / { proxy_pass http://localhost:5100; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache_bypass $http_upgrade; }}With Traefik
Section titled “With Traefik”services: floimg-studio: image: ghcr.io/teamflojo/floimg-studio labels: - "traefik.enable=true" - "traefik.http.routers.studio.rule=Host(`studio.yourdomain.com`)" - "traefik.http.routers.studio.tls.certresolver=letsencrypt" - "traefik.http.services.studio.loadbalancer.server.port=5100"With Coolify
Section titled “With Coolify”- Add new resource → Docker Image
- Image:
ghcr.io/teamflojo/floimg-studio - Port:
5100 - Add environment variables as needed
- Deploy
Kubernetes
Section titled “Kubernetes”apiVersion: apps/v1kind: Deploymentmetadata: name: floimg-studiospec: replicas: 1 selector: matchLabels: app: floimg-studio template: metadata: labels: app: floimg-studio spec: containers: - name: floimg-studio image: ghcr.io/teamflojo/floimg-studio ports: - containerPort: 5100 env: - name: NODE_ENV value: "production"---apiVersion: v1kind: Servicemetadata: name: floimg-studiospec: selector: app: floimg-studio ports: - port: 80 targetPort: 5100Building from Source
Section titled “Building from Source”Studio is part of the floimg monorepo at apps/studio/:
# Clone the floimg monorepogit clone https://github.com/teamflojo/floimg.gitcd floimg
# Install all dependenciespnpm install
# Build studiopnpm build:studio
# Run studio dev serverpnpm dev:studioCustom Docker Build
Section titled “Custom Docker Build”From the apps/studio/ directory:
cd apps/studiodocker build -t floimg-studio .docker run -p 5100:5100 floimg-studioHealth Checks
Section titled “Health Checks”The server exposes a health endpoint:
curl http://localhost:5100/healthResponse:
{"status": "ok", "version": "1.0.0"}Persistent Storage
Section titled “Persistent Storage”For workflow persistence, mount a volume:
services: floimg-studio: image: ghcr.io/teamflojo/floimg-studio volumes: - ./data:/app/data environment: - DATA_DIR=/app/dataSee Also
Section titled “See Also”- Studio Overview - Introduction
- Building Workflows - Usage guide