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
- 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ể.
- 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.
- 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.
┌──────────────┐ ┌──────────────────┐ ┌────────────────────┐
│ Frontend │───▶ │ Backend API │───▶| CDN Proxy │
│(Vue 3 + Vite)│ │ (Rails 8.1) │ │ (Express.js) │
│ :3667 │ │ :3000 │ │ :4000 │
└──────────────┘ └──────────────────┘ └────────┬───────────┘
│ │
│ ┌─────┴─────────┐
▼ ▼ ▼
┌────────────────┐ ┌─────────────┐ ┌───────────┐
│ PostgreSQL │ │ Cloudflare │ │ Storage │
│ + Redis │ │ R2 │ │ Service │
└────────────────┘ └─────────────┘ │ (Local) │
│ :4001 │
└───────────┘
| 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 |
| 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 |
git clone https://github.com/NekoTech-Foundation/NekoComics-Rework.git
cd NekoComics-Reworkcd backendCài đặt dependencies:
bundle installCấu hình environment:
cp .env.example .envChỉ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.comKhởi tạo database:
rails db:create
rails db:migrate
rails db:seedChạy server:
rails s -b 0.0.0.0 -p 3000Chạy background jobs (GoodJob):
bundle exec good_job startBackend API sẽ chạy tại:
http://localhost:3000
cd frontendCài đặt dependencies:
npm installCấu hình environment:
cp .env.example .envNộ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/v2Chạy dev server:
npm run devFrontend sẽ chạy tại:
http://localhost:3667
Proxy xử lý upload ảnh lên CDN S3 NẾU ĐÃ SETUP, DRM scrambling và serve ảnh từ storage.
cd nekocomics-proxyCài đặt dependencies:
npm installCấu hình environment:
cp .env.example .envChỉ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-hashChạy server:
# Development
npm run dev
# Production
npm startCDN Proxy sẽ chạy tại:
http://localhost:4000
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-storageCài đặt dependencies:
npm installCấu hình environment:
cp .env.example .envCấ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-hashKhởi tạo database:
npx prisma generate
npx prisma migrate devBuild & chạy:
# Development (hot reload)
npm run dev
# Production
npm run build
npm startStorage Service sẽ chạy tại:
http://localhost:4001
Module descrambler cho client-side DRM. Chỉ cần build nếu phát triển tính năng DRM (Deprecated).
cd nekocomics-drmBuild (Windows):
./build.ps1Build (Linux/macOS):
mkdir -p build && cd build
cmake ..
makeDự á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 allServices đượ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 |
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}/...
- API Key:
CDN_API_KEY(backend) phải trùng vớiAPI_KEY(proxy) để xác thực upload. - Database: Kiểm tra
backend/config/database.ymlcho 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_ORIGINStrong.envcủa proxy nếu frontend chạy ở domain/port khác.
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