234 lines
5.6 KiB
Markdown
234 lines
5.6 KiB
Markdown
# 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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```yaml
|
|
#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
|
|
```
|
|
|
|
### Step 3: Configure Environment Variables (Recommended)
|
|
|
|
Create a `.env` file in the same directory as `docker-compose.yml`:
|
|
|
|
```bash
|
|
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:
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
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
|
|
|
|
- Web Interface: http://localhost:12345
|
|
- Update Server: http://localhost:9000
|
|
|
|
### 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:
|
|
```yaml
|
|
image: ghcr.io/aiulian25/streamflow-iptv:1.0.0
|
|
```
|
|
|
|
## Updating the Application
|
|
|
|
To update to the latest version:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```yaml
|
|
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:
|
|
```bash
|
|
docker run --rm -v streamflow-data:/data -v $(pwd):/backup alpine tar czf /backup/streamflow-backup.tar.gz /data
|
|
```
|
|
|
|
To restore from backup:
|
|
```bash
|
|
docker run --rm -v streamflow-data:/data -v $(pwd):/backup alpine tar xzf /backup/streamflow-backup.tar.gz -C /
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Check Container Logs
|
|
```bash
|
|
docker-compose logs -f streamflow
|
|
```
|
|
|
|
### Check Container Status
|
|
```bash
|
|
docker-compose ps
|
|
```
|
|
|
|
### Restart Container
|
|
```bash
|
|
docker-compose restart
|
|
```
|
|
|
|
### Remove and Recreate
|
|
```bash
|
|
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
|