streamflow/README.md

265 lines
7.9 KiB
Markdown
Raw Normal View History

# StreamFlow IPTV Application
[![Docker Hub](https://img.shields.io/docker/v/aiulian25/streamflow?label=Docker%20Hub&logo=docker)](https://hub.docker.com/r/aiulian25/streamflow)
[![Docker Pulls](https://img.shields.io/docker/pulls/aiulian25/streamflow)](https://hub.docker.com/r/aiulian25/streamflow)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
A modern, feature-rich IPTV streaming application with secure Docker deployment.
## 🚀 Quick Start (3 Commands)
```bash
# 1. Download docker-compose.yml
wget https://raw.githubusercontent.com/aiulian25/streamflow/main/docker-compose.yml
# 2. Start the application
docker compose up -d
# 3. Access at http://localhost:12345
# Login: admin / admin (change on first login!)
```
**That's it!** See [DOCKER_INSTALLATION.md](DOCKER_INSTALLATION.md) for detailed setup.
## 🆕 Desktop Application Available!
StreamFlow now includes a **native Linux desktop application** (AppImage) with full feature parity!
**[→ View Desktop App Documentation](desktop-app/README.md)**
Features:
- ✅ Server connection management
- ✅ Encrypted credential storage
- ✅ 2FA support (TOTP & backup codes)
- ✅ Multi-language (EN, RO)
- ✅ Hardware acceleration
- ✅ All web app features
Quick start:
```bash
cd desktop-app
npm install
./build.sh
# AppImage created in dist/
```
---
## Features
- **Multi-Device Compatibility** - Works on all major platforms
- **Desktop App** - Native Linux application (AppImage) 🆕
- **Live TV & Radio** - Stream live channels and radio stations
- **Recording System** - Schedule and manage recordings
- **Multi-Language Support** - English and Romanian
- **Two-Factor Authentication** - Enhanced security with 2FA support
- **Light/Dark Theme** - Modern, glossy UI with transparent effects
- **User Profiles** - Multiple user support with individual settings
- **Security First** - Non-root containers, proper permissions, JWT authentication
## Technology Stack
### Backend
- Node.js with Express
- SQLite database
- JWT authentication
- FFmpeg & Streamlink for media processing
- Bcrypt for password hashing
### Frontend
- React 18 with Vite
- Material-UI (MUI) components
- React Router for navigation
- Zustand for state management
- i18next for internationalization
## Quick Start
### Prerequisites
- Docker and Docker Compose
- Git
### Installation
1. Clone the repository:
```bash
cd /home/iulian/projects/tv
```
2. Set environment variables (optional):
```bash
cp .env.example .env
# Edit .env with your preferred settings
```
3. Build and start the application:
```bash
docker-compose up -d
# Or use the convenience script
./scripts/start.sh
```
4. Access the application:
```
http://localhost:12345
```
5. Stop the application:
```bash
docker-compose down
# Or use the convenience script
./scripts/stop.sh
```
### Default Login
First user registration will create an account. No default credentials are provided for security.
## Development Setup
### Backend Development
```bash
cd backend
npm install
npm run dev
```
### Frontend Development
```bash
cd frontend
npm install
npm run dev
```
Frontend dev server runs on port 3000 with proxy to backend on 12345.
## Docker Security Features
- Non-root user execution (UID 1001)
- Minimal Alpine Linux base
- Security-opt: no-new-privileges
- Capability dropping (cap_drop: ALL)
- Read-only file system where possible
- Health checks enabled
- Proper file permissions (755/644, no 777)
## Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| PORT | 12345 | Application port |
| NODE_ENV | production | Environment mode |
| JWT_SECRET | (required) | JWT signing secret |
| SESSION_SECRET | (required) | Session secret |
| MAX_RECORDING_SIZE | 10GB | Maximum recording size |
## Project Structure
```
tv/
├── backend/
│ ├── database/ # Database models and schema
│ ├── jobs/ # Background cron jobs
│ ├── middleware/ # Express middleware
│ ├── routes/ # API routes
│ ├── utils/ # Utility functions
│ └── server.js # Main server file
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── pages/ # Page components
│ │ ├── store/ # Zustand stores
│ │ ├── locales/ # Translation files (EN, RO)
│ │ └── theme.js # MUI theme config
│ └── vite.config.js # Vite configuration
├── desktop-app/ # 🆕 Linux Desktop Application (Electron)
│ ├── src/
│ │ ├── main/ # Electron main process
│ │ ├── preload/ # IPC bridge
│ │ └── renderer/ # Connection UI
│ ├── build/ # Build resources
│ ├── package.json # Desktop app dependencies
│ ├── build.sh # Build script
│ ├── README.md # Desktop app documentation
│ ├── INSTALLATION.md # Installation guide
│ ├── DEVELOPER_GUIDE.md # Developer documentation
│ ├── SECURITY_AUDIT.md # Security review
│ └── CHANGELOG.md # Version history
├── docs/ # Documentation files
│ ├── ARCHITECTURE.md # System architecture
│ ├── BUILD.md # Build & deployment guide
│ ├── LOGO_GUIDE.md # Logo & branding guide
│ ├── PROJECT_STRUCTURE.md # Detailed structure
│ ├── QUICK_REFERENCE.md # Quick reference guide
│ └── SETUP.md # Setup instructions
├── scripts/ # Utility scripts
│ ├── start.sh # Start application
│ └── stop.sh # Stop application
├── data/ # Persistent data (Docker volume)
├── logs/ # Application logs (Docker volume)
├── uploads/ # User uploads (Docker volume)
├── Dockerfile # Multi-stage Docker build
├── docker-compose.yml # Docker Compose configuration
└── README.md # This file
```
## Documentation
- **[Architecture Guide](docs/ARCHITECTURE.md)** - System design and architecture
- **[Build & Deployment](docs/BUILD.md)** - Complete build instructions for PWA, APK, AppImage
- **[Logo Guide](docs/LOGO_GUIDE.md)** - Branding and icon usage
- **[Project Structure](docs/PROJECT_STRUCTURE.md)** - Detailed file structure
- **[Quick Reference](docs/QUICK_REFERENCE.md)** - Common commands and tips
- **[Setup Guide](docs/SETUP.md)** - Detailed setup instructions
## API Endpoints
### Authentication
- `POST /api/auth/register` - Register new user
- `POST /api/auth/login` - Login user
- `GET /api/auth/verify` - Verify token
### Playlists
- `GET /api/playlists` - Get all playlists
- `POST /api/playlists/url` - Add playlist from URL
- `POST /api/playlists/upload` - Upload M3U file
- `DELETE /api/playlists/:id` - Delete playlist
- `PATCH /api/playlists/:id` - Rename playlist
- `POST /api/playlists/bulk-delete` - Bulk delete playlists
### Channels
- `GET /api/channels` - Get channels with filters
- `GET /api/channels/groups` - Get channel groups
### Additional Endpoints
- Recordings, Profiles, Radio, Groups, Settings, Stream, Stats
## Languages Supported
- **English (en)** - Default
- **Romanian (ro)** - Full translation
Change language in Settings page or it auto-detects browser language.
## Theme System
The application includes light and dark themes with:
- Glossy, transparent UI elements
- Material Design 3 principles
- Smooth animations and transitions
- Backdrop blur effects
- Responsive design
Toggle theme in Settings page. Theme preference is persisted.
## Contributing
This is a private project. For issues or feature requests, please contact the repository owner.
## License
Proprietary - All rights reserved
## Support
For support and questions, please refer to the project documentation or contact the development team.