個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證✨ Next.js PostgreSQL Valkey 🏃 Run fast 🚀
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Vietnamese movie streaming, done fast 🚀 — browse, search, and watch at phim.bluesia.net.
• 🔍 Browse & search a canonical VN catalog merged by the Blueflare backend
• 📱 Stream via device-aware embeds or native HLS — mobile-first, always
• ⭐ Remember favorites & watch history right in localStorage
• ⚡ Server-rendered on our own VPS, Cloudflare just does TLS/CDN duty
Next.js 16 App Router, self-hosted — no Astro, no Workers, no edge magic. Runs in the frontend Docker service on 127.0.0.1:3100, Caddy proxies it to the world.檢視完整 README ↗Vietnamese movie streaming, done fast 🚀 — browse, search, and watch at phim.bluesia.net.
localStorageNext.js 16 App Router, self-hosted — no Astro, no Workers, no edge magic. Runs in the frontend Docker service on 127.0.0.1:3100, Caddy proxies it to the world.
Same repo, same house: backend/ owns provider sync, PostgreSQL, Valkey caching, and the image cache at img.bluesia.net. Server Components talk to the API over the Docker network; browsers own playback + local state.
| What | How |
|---|---|
| 🖥️ Pages | Next.js 16 App Router + React Server Components |
| ⚛️ Interactivity | React 19, client components only where needed |
| 🎨 Styling | Tailwind CSS 4 |
| 🐳 Runtime | Node 26 standalone container |
| 🌐 Edge | Caddy + Cloudflare (plain proxy/CDN, no Worker) |
| 🎞️ Catalog/images | Blueflare API + img.bluesia.net |
| 📡 Providers | NguonC primary, KKPhim fills the gaps |
| 🗄️ Data/cache | PostgreSQL + Valkey + Next render cache |
| 🖼️ Images | Two variants only: /i/m/ portrait, /i/d/ landscape |
| 💾 Backup | Optional nightly dump to R2 (any S3-compatible store), on when BACKUP_ENABLED=true |
| ▶️ Video | hls.js light (lazy) + provider embeds |
cd frontend
npm install
npm run dev # http://localhost:3000
npm run build # production build (in frontend/)
npm run start # serve the standalone build
Want the full stack? 🐳
cp backend/.env.example /opt/stacks/blueflare/.env # rồi điền secret
cd /opt/stacks/blueflare && docker compose up -d --build
Codebase và runtime nằm ở hai chỗ (xem mục "Runtime/codebase split" trong backend/README.md):
| Đường dẫn | Nội dung | |
|---|---|---|
| Codebase | /home/ubuntu/blueflare | repo này — nguồn duy nhất của mọi thứ trong git |
| Runtime | /opt/stacks/blueflare | compose.yml, .env, deploy/, data/images/ (path để dockhand quét thấy) |
Một VPS trắng (Ubuntu 24.04/26.04) dựng bằng một lệnh — cài Docker + Caddy, clone
codebase qua SSH, dựng thư mục runtime, sinh .env với secret ngẫu nhiên, đặt Caddy
edge cho phim/img. Script không tự deploy container để bạn xem lại .env
(nhất là TMDB_API_KEY) rồi bấm deploy trong dockhand:
git clone [email protected]:O365ServeronMS/blueflare.git /home/ubuntu/blueflare
/home/ubuntu/blueflare/infra/scripts/bootstrap-vps.sh # thêm --deploy để build+up luôn
Mặc định script đặt runtime ở /opt/stacks/blueflare (để dockhand quét thấy) và bật
SYNC_ENABLED=true, BACKFILL_ENABLED=false — bạn bật backfill sau bằng cách sửa
.env qua dockhand rồi redeploy. Đổi path bằng biến STACK_DIR=… khi chạy script.
Compose build thẳng từ codebase qua BLUEFLARE_SRC (mặc định /home/ubuntu/blueflare),
nên deploy code mới là hai bước:
git pull
cd /opt/stacks/blueflare && docker compose up -d --build frontend
curl -fsS http://127.0.0.1:3100/healthz
Nếu sửa compose.yml hay script trong infra/, bản chuẩn nằm trong repo — đồng bộ sang
stack rồi mới áp dụng:
/home/ubuntu/blueflare/infra/scripts/sync-stack.sh --dry-run # xem trước
/home/ubuntu/blueflare/infra/scripts/sync-stack.sh
Đổi cấu hình mà không rebuild: cd /opt/stacks/blueflare && ./deploy/apply-env.sh
(script validate .env theo .env.example rồi tạo lại container từ image sẵn có).
⚠️ Đừng bao giờ chạy docker compose down -v — cờ -v xóa named volume, tức là mất
toàn bộ Postgres. Backup: ./deploy/backup-postgres.sh.
Caddy: bootstrap-vps.sh tự chèn hai khối phim.bluesia.net/img.bluesia.net vào
/etc/caddy/Caddyfile (idempotent, có marker) rồi caddy fmt/validate/reload — không
cần reload tay lần đầu. Chỉ khi sửa một Caddyfile đã triển khai (script bỏ qua khối đã có)
mới phải sửa tay rồi reload, xem backend/README.md. ✅
frontend/ # Next.js app: src/app, components, lib, public, Dockerfile
backend/ # VPS origin: API, worker, migrations, tests, Dockerfile
infra/ # compose.yml, scripts/ (bootstrap, sync), cloudflare/, backup/
scripts/ # deploy, rollback, verify
🧭 Category context rides in returnTo=<encoded path+search> — page 2/3/etc. stays addressable and reload-safe.
(cd frontend && npm run build) # frontend build
(cd frontend && npm test) # vitest
cd backend && node --test # backend suite