202 lines
7.7 KiB
Markdown
202 lines
7.7 KiB
Markdown
# StreamFlow IPTV - Project Structure
|
|
|
|
```
|
|
tv/
|
|
├── 📄 README.md # Main documentation
|
|
├── 📄 SETUP.md # Installation guide
|
|
├── 📄 ARCHITECTURE.md # Architecture overview
|
|
├── 📄 package.json # Root package file
|
|
├── 📄 .env.example # Environment template
|
|
├── 📄 .gitignore # Git ignore rules
|
|
├── 📄 .dockerignore # Docker ignore rules
|
|
├── 🐳 Dockerfile # Multi-stage Docker build
|
|
├── 🐳 docker-compose.yml # Docker Compose config
|
|
├── 🚀 start.sh # Start script
|
|
├── 🛑 stop.sh # Stop script
|
|
│
|
|
├── 📁 backend/ # Node.js Backend
|
|
│ ├── 📄 package.json # Backend dependencies
|
|
│ ├── 🚀 server.js # Main server file
|
|
│ ├── 💊 healthcheck.js # Docker health check
|
|
│ │
|
|
│ ├── 📁 database/ # Database layer
|
|
│ │ └── 🗄️ db.js # SQLite setup & schema
|
|
│ │
|
|
│ ├── 📁 middleware/ # Express middleware
|
|
│ │ └── 🔒 auth.js # JWT authentication
|
|
│ │
|
|
│ ├── 📁 routes/ # API endpoints
|
|
│ │ ├── 🔐 auth.js # Authentication routes
|
|
│ │ ├── 📺 channels.js # Channel management
|
|
│ │ ├── 📋 playlists.js # Playlist management
|
|
│ │ ├── 📅 epg.js # EPG data
|
|
│ │ ├── ⏺️ recordings.js # Recording system
|
|
│ │ ├── 👤 profiles.js # User profiles
|
|
│ │ ├── 📻 radio.js # Radio channels
|
|
│ │ ├── 📂 groups.js # Custom groups
|
|
│ │ ├── ⚙️ settings.js # User settings
|
|
│ │ ├── 🎬 stream.js # Stream proxy
|
|
│ │ └── 📊 stats.js # Analytics
|
|
│ │
|
|
│ ├── 📁 jobs/ # Background jobs
|
|
│ │ ├── 📡 epgSync.js # EPG synchronization
|
|
│ │ ├── 💚 channelHealth.js # Health monitoring
|
|
│ │ └── ⏰ recordingScheduler.js # Recording scheduler
|
|
│ │
|
|
│ └── 📁 utils/ # Utilities
|
|
│ ├── 📝 logger.js # Winston logger
|
|
│ └── 🔍 m3uParser.js # M3U parser
|
|
│
|
|
├── 📁 frontend/ # React Frontend
|
|
│ ├── 📄 package.json # Frontend dependencies
|
|
│ ├── ⚙️ vite.config.js # Vite configuration
|
|
│ ├── 📄 index.html # HTML template
|
|
│ │
|
|
│ ├── 📁 public/ # Static assets
|
|
│ │ ├── placeholder-channel.png
|
|
│ │ └── placeholder-show.png
|
|
│ │
|
|
│ └── 📁 src/ # Source code
|
|
│ ├── 🎯 main.jsx # Entry point
|
|
│ ├── 🎨 App.jsx # Main app component
|
|
│ ├── 🌍 i18n.js # Internationalization
|
|
│ ├── 🎨 theme.js # MUI themes
|
|
│ ├── 💅 index.css # Global styles
|
|
│ │
|
|
│ ├── 📁 components/ # React components
|
|
│ │ ├── 🎬 VideoPlayer.jsx # Video player
|
|
│ │ ├── 📺 EPGTimeline.jsx # EPG viewer
|
|
│ │ ├── 🏠 Sidebar.jsx # Navigation sidebar
|
|
│ │ └── 🔝 Header.jsx # Top header
|
|
│ │
|
|
│ ├── 📁 pages/ # Page components
|
|
│ │ ├── 🔐 Login.jsx # Login page
|
|
│ │ ├── 📝 Register.jsx # Registration page
|
|
│ │ ├── 📊 Dashboard.jsx # Main dashboard
|
|
│ │ ├── 📺 LiveTV.jsx # Live TV page
|
|
│ │ ├── 📻 Radio.jsx # Radio page
|
|
│ │ ├── 🎬 Movies.jsx # Movies page
|
|
│ │ ├── 📺 Series.jsx # Series page
|
|
│ │ ├── ⭐ Favorites.jsx # Favorites page
|
|
│ │ └── ⚙️ Settings.jsx # Settings page
|
|
│ │
|
|
│ ├── 📁 store/ # Zustand stores
|
|
│ │ ├── 🔐 authStore.js # Auth state
|
|
│ │ └── 🎨 themeStore.js # Theme state
|
|
│ │
|
|
│ ├── 📁 utils/ # Utilities
|
|
│ │ └── 🌐 api.js # Axios client
|
|
│ │
|
|
│ └── 📁 locales/ # Translations
|
|
│ ├── 🇬🇧 en.json # English
|
|
│ └── 🇷🇴 ro.json # Romanian
|
|
│
|
|
├── 📁 data/ # Persistent data (Docker volume)
|
|
│ ├── 📁 playlists/ # Uploaded playlists
|
|
│ ├── 📁 recordings/ # Recorded content
|
|
│ ├── 📁 logos/ # Channel logos
|
|
│ ├── 📁 epg/ # EPG cache
|
|
│ ├── 📁 uploads/ # User uploads
|
|
│ └── 🗄️ streamflow.db # SQLite database
|
|
│
|
|
└── 📁 logs/ # Application logs (Docker volume)
|
|
├── 📄 error.log # Error logs
|
|
└── 📄 combined.log # All logs
|
|
```
|
|
|
|
## File Count Summary
|
|
|
|
- **Total Files**: 52
|
|
- **Backend Files**: 17
|
|
- **Frontend Files**: 25
|
|
- **Configuration**: 7
|
|
- **Documentation**: 3
|
|
|
|
## Key Technologies by Layer
|
|
|
|
### Backend
|
|
- **Runtime**: Node.js 20 (Alpine Linux)
|
|
- **Framework**: Express.js
|
|
- **Database**: SQLite3
|
|
- **Authentication**: JWT + Bcrypt
|
|
- **Security**: Helmet, CORS, Rate Limiting
|
|
- **Media**: FFmpeg, Streamlink
|
|
- **Jobs**: node-cron
|
|
- **Logging**: Winston
|
|
|
|
### Frontend
|
|
- **Framework**: React 18
|
|
- **Build Tool**: Vite
|
|
- **UI Library**: Material-UI (MUI) 5
|
|
- **Router**: React Router 6
|
|
- **State**: Zustand
|
|
- **HTTP Client**: Axios
|
|
- **i18n**: i18next
|
|
- **Video**: React Player
|
|
|
|
### Infrastructure
|
|
- **Container**: Docker (Alpine base)
|
|
- **Orchestration**: Docker Compose
|
|
- **Volumes**: Named volumes for data/logs
|
|
- **Network**: Bridge network
|
|
- **Health**: Automatic health checks
|
|
|
|
## Lines of Code (Approximate)
|
|
|
|
| Component | Lines |
|
|
|-----------|-------|
|
|
| Backend Routes | ~800 |
|
|
| Database Schema | ~200 |
|
|
| Frontend Components | ~1200 |
|
|
| Pages | ~800 |
|
|
| Configuration | ~400 |
|
|
| **Total** | **~3400** |
|
|
|
|
## Security Features by File
|
|
|
|
| File | Security Features |
|
|
|------|------------------|
|
|
| `Dockerfile` | Non-root user, capability dropping, minimal base |
|
|
| `docker-compose.yml` | Security opts, resource limits, health checks |
|
|
| `backend/middleware/auth.js` | JWT validation, role-based access |
|
|
| `backend/routes/auth.js` | Bcrypt hashing, rate limiting, input validation |
|
|
| `backend/server.js` | Helmet headers, CORS, compression |
|
|
| `frontend/src/utils/api.js` | Token injection, 401 handling |
|
|
|
|
## Development Workflow
|
|
|
|
```
|
|
1. 📝 Edit source files
|
|
└── backend/ or frontend/src/
|
|
|
|
2. 🔧 Test locally
|
|
└── npm run dev:backend
|
|
└── npm run dev:frontend
|
|
|
|
3. 🏗️ Build Docker image
|
|
└── docker-compose build
|
|
|
|
4. 🚀 Deploy container
|
|
└── docker-compose up -d
|
|
|
|
5. ✅ Verify deployment
|
|
└── http://localhost:12345
|
|
```
|
|
|
|
## Production Checklist
|
|
|
|
- [ ] Change JWT_SECRET in .env
|
|
- [ ] Change SESSION_SECRET in .env
|
|
- [ ] Set NODE_ENV=production
|
|
- [ ] Configure SSL/HTTPS (reverse proxy)
|
|
- [ ] Set up firewall rules
|
|
- [ ] Configure backup schedule
|
|
- [ ] Set up monitoring/alerts
|
|
- [ ] Test all features
|
|
- [ ] Review logs for errors
|
|
- [ ] Document custom configurations
|
|
|
|
---
|
|
|
|
**Last Updated**: December 2025
|
|
**Version**: 1.0.0
|