Release v3.7: Codebase cleanup and security improvements
This commit is contained in:
parent
056824cfa8
commit
7d696a93af
6 changed files with 102 additions and 104 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
# Stage 1: Build Image (Frontend)
|
# Stage 1: Build Image (Frontend)
|
||||||
FROM node:18-alpine AS frontend-builder
|
FROM node:20-alpine AS frontend-builder
|
||||||
WORKDIR /app/frontend
|
WORKDIR /app/frontend
|
||||||
COPY frontend-react/package*.json ./
|
COPY frontend-react/package*.json ./
|
||||||
RUN npm install
|
RUN npm install
|
||||||
|
|
@ -7,7 +7,7 @@ COPY frontend-react/ .
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
# Stage 2: Build Image (Backend)
|
# Stage 2: Build Image (Backend)
|
||||||
FROM golang:1.23-alpine AS backend-builder
|
FROM golang:1.24-alpine AS backend-builder
|
||||||
WORKDIR /app/backend
|
WORKDIR /app/backend
|
||||||
# Install build dependencies
|
# Install build dependencies
|
||||||
RUN apk add --no-cache gcc musl-dev
|
RUN apk add --no-cache gcc musl-dev
|
||||||
|
|
|
||||||
154
README.md
154
README.md
|
|
@ -1,82 +1,78 @@
|
||||||
# StreamFlow V3.6
|
# StreamFlow V3.7
|
||||||
|
|
||||||
StreamFlow is a high-performance video streaming web application featuring a pure Go backend and a modern React + Tailwind frontend.
|
StreamFlow is a high-performance video streaming web application featuring a pure Go backend and a modern React + Tailwind frontend.
|
||||||
|
|
||||||
## 🚀 Features
|
## 🚀 Features
|
||||||
|
|
||||||
- **Modern UI**: Built with React, TypeScript, and Tailwind CSS for a premium, responsive experience.
|
- **Modern UI**: Built with React, TypeScript, and Tailwind CSS for a premium, responsive experience.
|
||||||
- **High Performance**: Backend written in Go (Golang) for speed and concurrency.
|
- **High Performance**: Backend written in Go (Golang) for speed and concurrency.
|
||||||
- **Smart Scraping**: Integrated scraping engine (Rophim) with automated episode extraction.
|
- **Smart Scraping**: Integrated scraping engine (Rophim) with automated episode extraction.
|
||||||
- **HLS Streaming**: Native HLS playback support.
|
- **HLS Streaming**: Native HLS playback support.
|
||||||
- **Android TV Support (New)**: Optimized TV client with D-pad controls and 10s skip.
|
- **Android TV Support**: Optimized TV client with D-pad controls and 10s skip.
|
||||||
- **Performance Optimized**: Parallel API fetching and global image caching for instant loading.
|
- **Performance Optimized**: Parallel API fetching and global image caching for instant loading.
|
||||||
- **Android TV App**: Native TV app support with dedicated APK available for download.
|
- **Android TV App**: Native TV app support with dedicated APK available for download.
|
||||||
- **Docker Ready**: Multi-stage Docker build optimized for NAS Synology (linux/amd64).
|
- **Docker Ready**: Multi-stage Docker build optimized for NAS Synology (linux/amd64).
|
||||||
|
- **PWA Support**: Install as a progressive web app on mobile devices.
|
||||||
## 🛠️ Tech Stack
|
|
||||||
|
## 🛠️ Tech Stack
|
||||||
- **Backend**: Go (Chi Router, GORM, GoQuery)
|
|
||||||
- **Frontend**: React, TypeScript, Vite, Tailwind CSS
|
- **Backend**: Go 1.23 (Chi Router, GORM, GoQuery)
|
||||||
- **Database**: SQLite
|
- **Frontend**: React 19, TypeScript, Vite 7, Tailwind CSS 4
|
||||||
- **Deployment**: Docker
|
- **Database**: SQLite
|
||||||
|
- **Deployment**: Docker
|
||||||
## 📦 Installation
|
|
||||||
|
## 📦 Installation
|
||||||
### Prerequisites
|
|
||||||
|
### Prerequisites
|
||||||
- Go 1.22+
|
|
||||||
- Node.js 20+
|
- Go 1.23+
|
||||||
- Docker (optional)
|
- Node.js 20+
|
||||||
|
- Docker (optional)
|
||||||
### Local Development
|
|
||||||
|
### Local Development
|
||||||
1. **Backend**
|
|
||||||
```bash
|
1. **Backend**
|
||||||
cd backend
|
```bash
|
||||||
go mod tidy
|
cd backend
|
||||||
go run ./cmd/server/main.go
|
go mod tidy
|
||||||
```
|
go run ./cmd/server/main.go
|
||||||
Server runs at `http://localhost:8000`.
|
```
|
||||||
|
Server runs at `http://localhost:8000`.
|
||||||
2. **Frontend**
|
|
||||||
```bash
|
2. **Frontend**
|
||||||
cd frontend-react
|
```bash
|
||||||
npm install
|
cd frontend-react
|
||||||
npm run dev
|
npm install
|
||||||
```
|
npm run dev
|
||||||
Frontend runs at `http://localhost:5173` (proxying to backend).
|
```
|
||||||
|
Frontend runs at `http://localhost:5173` (proxying to backend).
|
||||||
### Docker Deployment (Recommended for NAS Synology)
|
|
||||||
|
### Docker Deployment (Recommended for NAS Synology)
|
||||||
1. **Environmental Variables**: Create a `.env` file or set them in your NAS:
|
|
||||||
```env
|
1. **Run with Docker Compose**:
|
||||||
TMDB_API_KEY=your_api_key_here
|
```yaml
|
||||||
```
|
version: '3.8'
|
||||||
|
|
||||||
2. **Run with Docker Compose**:
|
services:
|
||||||
```yaml
|
streamflow:
|
||||||
version: '3.8'
|
image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.7
|
||||||
|
container_name: streamflow
|
||||||
services:
|
platform: linux/amd64
|
||||||
streamflow:
|
ports:
|
||||||
image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.6
|
- "3478:8000"
|
||||||
container_name: streamflow
|
environment:
|
||||||
platform: linux/amd64
|
- DATABASE_URL=/app/data/streamflow.db
|
||||||
ports:
|
- TZ=Asia/Ho_Chi_Minh
|
||||||
- "3478:8000"
|
volumes:
|
||||||
environment:
|
- ./data:/app/data
|
||||||
- DATABASE_URL=/app/data/streamflow.db
|
restart: unless-stopped
|
||||||
- TMDB_API_KEY=${TMDB_API_KEY}
|
```
|
||||||
volumes:
|
|
||||||
- ./data:/app/data
|
```bash
|
||||||
restart: always
|
docker-compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
Access the application at `http://YOUR_NAS_IP:3478`. You can download the **Android TV App** directly from the navigation bar once the webapp is running.
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
Access the application at `http://YOUR_NAS_IP:3478`. You can download the **Android TV App** directly from the navigation bar once the webapp is running.
|
|
||||||
|
|
||||||
## 📂 Project Structure
|
## 📂 Project Structure
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ func main() {
|
||||||
|
|
||||||
r.Route("/api", func(r chi.Router) {
|
r.Route("/api", func(r chi.Router) {
|
||||||
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
|
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Write([]byte(`{"status":"healthy", "version":"v3.6-go"}`))
|
w.Write([]byte(`{"status":"healthy", "version":"v3.7"}`))
|
||||||
})
|
})
|
||||||
|
|
||||||
api.RegisterRoutes(r, handler)
|
api.RegisterRoutes(r, handler)
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,22 @@
|
||||||
version: '3.8'
|
version: '3.8'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
streamflow:
|
streamflow:
|
||||||
# build: .
|
image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.7
|
||||||
image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.6
|
container_name: streamflow
|
||||||
container_name: streamflow
|
platform: linux/amd64
|
||||||
platform: linux/amd64
|
ports:
|
||||||
ports:
|
- "3478:8000"
|
||||||
- "3478:8000"
|
environment:
|
||||||
environment:
|
- DATABASE_URL=/app/data/streamflow.db
|
||||||
- DATABASE_URL=/app/data/streamflow.db
|
- PORT=8000
|
||||||
# - TMDB_API_KEY=${TMDB_API_KEY}
|
- TZ=Asia/Ho_Chi_Minh
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
restart: always
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
volumes:
|
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8000/api/health"]
|
||||||
streamflow_data:
|
interval: 30s
|
||||||
streamflow_cache:
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 10s
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Component, ErrorInfo, ReactNode } from 'react';
|
import { Component, type ErrorInfo, type ReactNode } from 'react';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { defineConfig } from 'vite'
|
import { defineConfig } from 'vitest/config'
|
||||||
import react from '@vitejs/plugin-react'
|
import react from '@vitejs/plugin-react'
|
||||||
import { VitePWA } from 'vite-plugin-pwa'
|
import { VitePWA } from 'vite-plugin-pwa'
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue