Skip to content

Repository files navigation

NekoComics-wide-3840x1080

NekoComics - Online Manga Reader Platform

Nền tảng truyện tranh đã đóng cửa từ khi chưa ra mắt (Private Beta) của NekoTech.

[Join our Discord Server] [Licensed with AGPL v3.0] [Contact us] [Book for a commission]

Warning

Mã nguồn của trang web không đồng nghĩa bạn được phép bê nguyên lại, hãy có tính sáng tạo cho riêng mình.

  • Trạng thái dự án: Mã nguồn đã được Archive từ ngày 02/07/2026. Chúng tôi hoàn toàn ngừng bảo trì và sẽ không chịu trách nhiệm cho bất kỳ lỗi bảo mật, lỗi thiết kế, và các vấn đề liên quan nào phát sinh từ mã nguồn này.
  • Miễn trừ trách nhiệm: Chúng tôi, NekoTech, không liên quan và không chịu bất kỳ trách nhiệm nào đối với các sự cố, thiệt hại hoặc hậu quả pháp lý phát sinh từ việc bạn tự ý fork, sao chép hoặc sử dụng lại mã nguồn này cho mục đích cá nhân hay thương mại.

Caution

TUYÊN BỐ MIỄN TRỪ TRÁCH NHIỆM PHÁP LÝ (DISCLAIMER)

  1. Sử dụng với rủi ro tự chịu (As-Is): Mã nguồn này được cung cấp theo nguyên trạng "như hiện có" mà không có bất kỳ sự đảm bảo nào, dù là rõ ràng hay ngầm định, bao gồm nhưng không giới hạn ở các bảo đảm về khả năng thương mại hoặc tính phù hợp cho một mục đích cụ thể.
  2. Giới hạn trách nhiệm: Trong mọi trường hợp, NekoTech cũng như các thành viên phát triển không chịu trách nhiệm pháp lý đối với bất kỳ khiếu nại, thiệt hại hoặc tổn thất nào (bao gồm tổn thất dữ liệu, lỗ hổng bảo mật, hoặc thiệt hại về tài chính) phát sinh từ hoặc có liên quan đến việc sử dụng, sửa đổi, hoặc phân phối mã nguồn này.
  3. Không hỗ trợ pháp lý: Việc bạn sử dụng lại mã nguồn để vận hành các dịch vụ công cộng hoặc thương mại tự chịu hoàn toàn trách nhiệm trước pháp luật hiện hành. NekoTech không có nghĩa vụ bảo vệ, can thiệp hoặc chịu trách nhiệm thay cho bất kỳ hành vi vi phạm bản quyền hay pháp lý nào từ phía bên thứ ba.

Cấu Trúc Tổng Quát của Mã Nguồn

┌──────────────┐     ┌──────────────────┐     ┌────────────────────┐
│   Frontend   │───▶ │   Backend API    │───▶| CDN Proxy          │
│(Vue 3 + Vite)│     │   (Rails 8.1)    │     │   (Express.js)     │
│   :3667      │     │   :3000          │     │   :4000            │
└──────────────┘     └──────────────────┘     └────────┬───────────┘
                              │                        │
                              │                  ┌─────┴─────────┐
                              ▼                  ▼               ▼
                     ┌────────────────┐  ┌─────────────┐  ┌───────────┐
                     │   PostgreSQL   │  │ Cloudflare  │  │  Storage  │
                     │   + Redis      │  │ R2          │  │  Service  │
                     └────────────────┘  └─────────────┘  │ (Local)   │
                                                          │  :4001    │
                                                          └───────────┘

Cấu trúc dự án

Thư mục Mô tả Tech Stack
backend/ API server chính Ruby on Rails 8.1, PostgreSQL, Redis
frontend/ Web app cho người dùng Vue 3, Vite, Pinia, Tailwind CSS 4
nekocomics-proxy/ CDN Proxy — upload, DRM scrambling, serve ảnh Node.js, Express, Sharp
nekocomics-storage/ Storage Service — sharding, async queue, metrics Node.js, Fastify, TypeScript, Prisma, BullMQ
nekocomics-drm/ DRM descrambler module (C++) (Deprecated) C++, CMake

Yêu cầu hệ thống

Công cụ Phiên bản Dùng cho
Node.js v22+ Frontend, Proxy, Storage
Ruby 3.4.8 Backend
PostgreSQL 14+ Backend + Storage
Redis 7+ ActionCable, Background Jobs, BullMQ
PM2 (tuỳ chọn) Quản lý process production

Cài đặt & Khởi chạy

1. Clone dự án

git clone https://github.com/NekoTech-Foundation/NekoComics-Rework.git
cd NekoComics-Rework

2. Backend (Rails API — port 3000)

cd backend

Cài đặt dependencies:

bundle install

Cấu hình environment:

cp .env.example .env

Chỉnh sửa file .env với thông tin database và CDN:

# === CDN ===
CDN_HOST=https://cdn.nekocomics.tech/          # URL public CDN
CDN_HOST_API=http://127.0.0.1:4000             # CDN Proxy local
CDN_API_KEY=your-secret-key                    # Key xác thực

# === Database ===
# Chỉnh trong config/database.yml

# === Backblaze B2 Storage ===
B2_BUCKET=nekocomics-storage
B2_REGION=us-west-000
B2_ACCESS_KEY_ID=your_key
B2_SECRET_ACCESS_KEY=your_secret
B2_ENDPOINT=https://s3.us-west-002.backblazeb2.com

Khởi tạo database:

rails db:create
rails db:migrate
rails db:seed

Chạy server:

rails s -b 0.0.0.0 -p 3000

Chạy background jobs (GoodJob):

bundle exec good_job start

Backend API sẽ chạy tại: http://localhost:3000


3. Frontend (Vue 3 — port 3667)

cd frontend

Cài đặt dependencies:

npm install

Cấu hình environment:

cp .env.example .env

Nội dung .env mặc định:

VUE_APP_API_BASE_URL=http://127.0.0.1:3000
VUE_APP_API_KAKAROT_URL=http://127.0.0.1:3000
VUE_APP_API_PROXIED_URL=http://127.0.0.1:3000
VUE_APP_IMAGE_CDN_URL=http://127.0.0.1:4000
VUE_APP_WS_URL=ws://127.0.0.1:3000/cable
VUE_APP_API_NAMESPACE=/api/v1
VUE_APP_API_NAMESPACEV2=/api/v2

Chạy dev server:

npm run dev

Frontend sẽ chạy tại: http://localhost:3667


4. CDN Proxy (Express.js — port 4000)

Proxy xử lý upload ảnh lên CDN S3 NẾU ĐÃ SETUP, DRM scrambling và serve ảnh từ storage.

cd nekocomics-proxy

Cài đặt dependencies:

npm install

Cấu hình environment:

cp .env.example .env

Chỉnh sửa .env:

PORT=4000
API_KEY=your-secret-key                        # Phải khớp với CDN_API_KEY ở backend

# Storage mode: r2 (Cloudflare R2) hoặc local
STORAGE_MODE=r2

# === Cloudflare R2 ===
R2_ACCOUNT_ID=your_account_id
R2_ACCESS_KEY_ID=your_access_key_id
R2_SECRET_ACCESS_KEY=your_secret_access_key
R2_BUCKET_NAME=nekocomicscdn
R2_PUBLIC_URL=https://cdn.nekocomics.tech

# === Local Storage (thay thế R2) ===
# STORAGE_MODE=local
# STORAGE_URL=http://localhost:4001             # Trỏ đến Storage Service
# SHARD_COUNT=4
# SHARD_STRATEGY=consistent-hash

Chạy server:

# Development
npm run dev

# Production
npm start

CDN Proxy sẽ chạy tại: http://localhost:4000


5. Storage Service (Fastify + TypeScript — port 4001)

Chỉ cần khi dùng STORAGE_MODE=local. Service chuyên biệt hỗ trợ sharding, async upload queue và Prometheus metrics.

cd nekocomics-storage

Cài đặt dependencies:

npm install

Cấu hình environment:

cp .env.example .env

Cấu hình quan trọng trong .env:

PORT=4001
API_KEY=neko-storage-secret-change-me
DATABASE_URL=postgresql://neko:password@localhost:5432/nekocomics_storage
REDIS_URL=redis://localhost:6379

STORAGE_MODE=local                             # hoặc r2
SHARD_COUNT=8
SHARD_STRATEGY=consistent-hash

Khởi tạo database:

npx prisma generate
npx prisma migrate dev

Build & chạy:

# Development (hot reload)
npm run dev

# Production
npm run build
npm start

Storage Service sẽ chạy tại: http://localhost:4001


6. DRM Module (tuỳ chọn — C++)

Module descrambler cho client-side DRM. Chỉ cần build nếu phát triển tính năng DRM (Deprecated).

cd nekocomics-drm

Build (Windows):

./build.ps1

Build (Linux/macOS):

mkdir -p build && cd build
cmake ..
make

Chạy tất cả với PM2

Dự án có sẵn file ecosystem.config.js để quản lý tất cả services:

# Cài PM2 global
npm install -g pm2

# Khởi chạy tất cả services
pm2 start ecosystem.config.js

# Xem logs
pm2 logs

# Xem trạng thái
pm2 status

# Dừng tất cả
pm2 stop all

Services được quản lý:

Tên Port Mô tả
nekocomics-backend 3000 Rails API server
nekocomics-worker GoodJob background worker
nekocomics-frontend 3667 Vue 3 dev server
nekocomics-proxy 4000 CDN Proxy
nekocomics-storage 4001 Storage Service

Luồng dữ liệu hình ảnh

Upload ảnh chapter:
  Backend (Rails) ──POST──▶ CDN Proxy (:4000) ──▶ Scramble (DRM)
                                                        │
                          ┌─────────────────────────────┘
                          ▼
                   STORAGE_MODE=r2?
                   ├── Có ──▶ Upload trực tiếp lên Cloudflare R2
                   └── Không ──▶ Proxy sang Storage Service (:4001)
                                         │
                                    Shard Router
                                    hash(manga_id) % N
                                         │
                              ┌──────────┼──────────┐
                              ▼          ▼          ▼
                          shard-0    shard-1    shard-N

Đọc ảnh:
  Client ──GET──▶ CDN Proxy (:4000) /images/...
                   ├── R2 mode ──▶ serve static từ local cache
                   └── Local mode ──▶ proxy sang Storage (:4001) /local/shard-{n}/...

Ghi chú quan trọng

  • API Key: CDN_API_KEY (backend) phải trùng với API_KEY (proxy) để xác thực upload.
  • Database: Kiểm tra backend/config/database.yml cho username/password PostgreSQL.
  • Tài khoản Admin: Tạo qua Rails Console:
    cd backend
    rails c
    # Trong console: User.create!(username: 'admin', email: 'admin@neko.com', password: '...', role: 'owner')
  • CORS: Chỉnh ALLOWED_ORIGINS trong .env của proxy nếu frontend chạy ở domain/port khác.

License

Dự án được phân phối dưới giấy phép GNU Affero General Public License v3.0.

Bản quyền mã nguồn thuộc CÔNG TY TNHH GIẢI PHÁP CÔNG NGHỆ NEKOTECH. Bạn được phép sử dụng mã nguồn này cho mục đích cá nhân hoặc để vận hành thương mại, tuy nhiên CHÚNG TÔI TỪ CHỐI TOÀN BỘ TRÁCH NHIỆM PHÁP LÝ VÀ BẢO HÀNH MÃ NGUỒN. Khi bạn sử dụng mã nguồn này, bạn đồng ý rằng toàn bộ quyền vận hành mã nguồn là của bạn, chúng tôi không có liên quan tới bất cứ vấn đề nào khi bạn sử dụng mã nguồn này.


Copyright (c) 2026 NekoTech Foundation. All Rights Reserved.

(VN) CÔNG TY TNHH GIẢI PHÁP CÔNG NGHỆ NEKOTECH

About

Full-stack, production-ready online manga reading platform, built with many cool features to help you build your own manga reading platform.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages