streamflow/DEPLOYMENT.md
2025-12-17 00:42:43 +00:00

5.6 KiB

StreamFlow IPTV - Deployment Guide

Quick Deployment

StreamFlow IPTV is available as a pre-built Docker image on Docker Hub, making deployment quick and easy.

Prerequisites

  • Docker and Docker Compose installed on your system
  • Docker Hub account (for accessing the private image)

Step 1: Login to GitHub Container Registry

Before pulling the private image, you need to authenticate with GitHub Container Registry:

echo YOUR_GITHUB_TOKEN | docker login ghcr.io -u YOUR_GITHUB_USERNAME --password-stdin

Replace YOUR_GITHUB_TOKEN with a Personal Access Token from GitHub (Settings → Developer settings → Personal access tokens) with read:packages scope.

Step 2: Download the docker-compose.yml

Download the docker-compose.yml file from the repository:

curl -O https://raw.githubusercontent.com/yourusername/streamflow-iptv/main/docker-compose.yml

Or manually create a docker-compose.yml file with the following content:

#version: '3.8'

services:
  streamflow:
    image: ghcr.io/aiulian25/streamflow-iptv:latest
    container_name: streamflow
    restart: unless-stopped
    ports:
      - "0.0.0.0:12345:12345"
      - "0.0.0.0:9000:9000"
    environment:
      - NODE_ENV=production
      - PORT=12345
      - DB_PATH=/app/data/streamflow.db
      - JWT_SECRET=${JWT_SECRET:-change_this_in_production}
      - SESSION_SECRET=${SESSION_SECRET:-change_this_in_production}
      - DISABLE_SIGNUPS=true
      - MAX_RECORDING_SIZE=100GB
      - ENABLE_GPU=${ENABLE_GPU:-false}
    volumes:
      - streamflow-data:/app/data
      - streamflow-logs:/app/logs
      - streamflow-uploads:/app/uploads
    devices:
      - /dev/dri:/dev/dri  # Intel Quick Sync / VAAPI
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    privileged: true  # Required for VPN operations
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv6.conf.all.disable_ipv6=0
    read_only: false
    tmpfs:
      - /tmp:size=1G,mode=1777
    networks:
      - streamflow-network
    healthcheck:
      test: ["CMD", "node", "backend/healthcheck.js"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

volumes:
  streamflow-data:
    driver: local
  streamflow-logs:
    driver: local
  streamflow-uploads:
    driver: local

networks:
  streamflow-network:
    driver: bridge

Create a .env file in the same directory as docker-compose.yml:

JWT_SECRET=your_secure_random_string_here
SESSION_SECRET=your_secure_random_string_here
ENABLE_GPU=false

Important Security Note: Change the JWT_SECRET and SESSION_SECRET to secure random strings in production!

Generate secure secrets:

# Generate JWT_SECRET
echo "JWT_SECRET=$(openssl rand -base64 32)" >> .env

# Generate SESSION_SECRET
echo "SESSION_SECRET=$(openssl rand -base64 32)" >> .env

Step 4: Deploy

Start the application:

docker-compose up -d

This will:

  1. Pull the latest StreamFlow IPTV image from Docker Hub
  2. Create the necessary volumes for data persistence
  3. Start the application

Step 5: Access the Application

Step 6: Initial Setup

  1. Navigate to http://localhost:12345
  2. Create your admin account (first user)
  3. Upload your M3U playlist files
  4. Start streaming!

Available Image Tags

  • ghcr.io/aiulian25/streamflow-iptv:latest - Latest stable release
  • ghcr.io/aiulian25/streamflow-iptv:1.0.0 - Specific version

To use a specific version, update the docker-compose.yml:

image: ghcr.io/aiulian25/streamflow-iptv:1.0.0

Updating the Application

To update to the latest version:

docker-compose pull
docker-compose up -d

This will pull the latest image and restart the container with the new version.

GPU Acceleration

Intel Quick Sync (Default)

The default configuration includes Intel Quick Sync support. Make sure your system has /dev/dri devices available.

NVIDIA GPU

To enable NVIDIA GPU acceleration, uncomment the following section in docker-compose.yml:

deploy:
  resources:
    reservations:
      devices:
        - driver: nvidia
          count: 1
          capabilities: [gpu, video]

Data Persistence

All data is stored in Docker volumes:

  • streamflow-data - Database, playlists, recordings
  • streamflow-logs - Application logs
  • streamflow-uploads - User uploads

To backup your data:

docker run --rm -v streamflow-data:/data -v $(pwd):/backup alpine tar czf /backup/streamflow-backup.tar.gz /data

To restore from backup:

docker run --rm -v streamflow-data:/data -v $(pwd):/backup alpine tar xzf /backup/streamflow-backup.tar.gz -C /

Troubleshooting

Check Container Logs

docker-compose logs -f streamflow

Check Container Status

docker-compose ps

Restart Container

docker-compose restart

Remove and Recreate

docker-compose down
docker-compose up -d

Security Considerations

  1. Change Default Secrets: Always change JWT_SECRET and SESSION_SECRET in production
  2. Firewall Configuration: Consider restricting port access to specific IP ranges
  3. HTTPS: Use a reverse proxy (nginx, Traefik) with SSL certificates for production
  4. Regular Updates: Keep the Docker image updated with docker-compose pull

Support

For issues or questions, please:

  • Check the logs: docker-compose logs -f
  • Review the documentation in the docs/ directory
  • Open an issue on GitHub

License

Proprietary - See LICENSE file for details