Một nền tảng blog hiện đại được xây dựng dựa trên kiến trúc Microservices, sử dụng .NET 8 cho Backend và Next.js cho Frontend.
Hệ thống được chia thành các dịch vụ độc lập (Microservices), giao tiếp với nhau thông qua API Gateway.
- Frontend (Next.js): Giao diện người dùng cho Độc giả, Tác giả và Quản trị viên.
- API Gateway (Ocelot): Cổng vào duy nhất cho tất cả các yêu cầu API, điều hướng đến các service backend tương ứng.
- Identity Service: Quản lý xác thực (Authentication), phân quyền (Authorization) và thông tin người dùng.
- Content Service: Quản lý bài viết, danh mục, thẻ (tags) và quy trình xuất bản nội dung.
- Shared Library: Chứa các thành phần dùng chung (Middleware, DTOs, Constants) cho các service .NET.
- Infrastructure: SQL Server (lưu trữ theo từng service), RabbitMQ (event bus), Docker (containerization).
Dịch vụ chịu trách nhiệm quản lý danh tính và bảo mật.
- Công nghệ: .NET 8, ASP.NET Core Web API, Entity Framework Core, JWT Bearer Authentication.
- Cấu trúc (Clean Architecture):
Identity.API: Chứa các Controllers (AuthenticationController,ImageController) để tiếp nhận request.Identity.Application: Chứa logic nghiệp vụ, DTOs, Validators và Interfaces.Identity.Domain: Chứa các thực thể (Entities) cốt lõi nhưUser,RefreshToken.Identity.Infrastructure: Triển khai các Interfaces (Database Context, File Storage, Repositories).
- Chức năng chính:
- Đăng ký, Đăng nhập (trả về JWT Token & Refresh Token).
- Quản lý thông tin cá nhân (Profile).
- Upload ảnh đại diện (Avatar) - Lưu trữ cục bộ (Local Storage).
Dịch vụ cốt lõi quản lý nội dung blog.
- Công nghệ: .NET 8, ASP.NET Core Web API, MediatR (CQRS Pattern).
- Cấu trúc (Vertical Slice Architecture):
ContentAPI/Features: Tổ chức code theo tính năng (Feature-based). Mỗi tính năng (VD:CreateArticle,GetArticles) bao gồm Command/Query, Handler, Endpoint, Validator và DTO riêng biệt.ContentAPI/Domain: Chứa các thực thể nhưArticle,Category,Tag.ContentAPI/Infrastructure: Cấu hình Database, Seeding dữ liệu.
- Chức năng chính:
- Quản lý bài viết: Tạo, Sửa, Xóa, Lấy danh sách bài viết (phân trang, lọc theo danh mục/tag).
- Quy trình xuất bản:
Pending: Bài viết mới tạo chờ duyệt.Published: Bài viết đã được duyệt và hiển thị công khai.Rejected: Bài viết bị từ chối.
- Quản lý Danh mục & Thẻ: Phân loại bài viết.
- Thống kê: Cung cấp số liệu thống kê bài viết hàng tuần (Weekly Stats).
Cổng kết nối trung gian.
- Công nghệ: .NET 8, Ocelot.
- Cấu hình:
ocelot.json(Local) vàocelot.docker.json(Docker). - Chức năng:
- Routing: Chuyển tiếp request từ Client đến đúng service (VD:
/auth/*-> IdentityService,/api/*-> ContentService). - Versioned Routing: hỗ trợ cả prefix
/v1/*cho client bên ngoài. - Media Handling: Map đường dẫn
/media/từ Frontend sang thư mục/uploads/của backend để hiển thị hình ảnh.
- Routing: Chuyển tiếp request từ Client đến đúng service (VD:
Giao diện người dùng tương tác.
- Công nghệ: Next.js 15 (App Router), TypeScript, Tailwind CSS, Shadcn UI, React Query.
- Cấu trúc:
src/app: Các trang (Pages) theo cấu trúc routing của Next.js (Auth, Blog, Editor, Management).src/components: Các thành phần giao diện tái sử dụng (PostCard,Navbar,Sidebar).src/services: Các hàm gọi API (Axios instance, Interceptors).src/contexts: Quản lý trạng thái toàn cục (AuthContext).
- Chức năng:
- Public: Xem bài viết, tìm kiếm, lọc theo danh mục.
- Editor: Soạn thảo bài viết (hỗ trợ upload ảnh, Markdown/Rich Text).
- Management: Dashboard dành cho Admin/Manager để duyệt bài (Approve/Reject) và quản lý nội dung.
- Docker Desktop (đã cài đặt và đang chạy).
- .NET 8 SDK (nếu muốn chạy local từng service).
- Node.js 18+ (cho Frontend).
Cách nhanh nhất để dựng toàn bộ hệ thống (Database, Backend, Gateway).
- Mở terminal tại thư mục gốc dự án.
- Chạy lệnh:
docker-compose up -d --build
- Truy cập Frontend:
- Mở trình duyệt tại
http://localhost:3000.
- Mở trình duyệt tại
Mỗi service backend dùng connection string riêng:
| Service | Connection string key | Biến .env |
|---|---|---|
| Identity Service | ConnectionStrings:IdentityDb |
IDENTITY_DB_CONNECTION |
| Content Service | ConnectionStrings:ContentDb |
CONTENT_DB_CONNECTION |
- Client -> Gateway: giữ nguyên qua Ocelot (
/api/*,/v1/api/*). - Service nội bộ -> service nội bộ: gọi trực tiếp (không vòng qua Gateway).
- Đồng bộ:
ContentService -> IdentityServicequa HTTP trực tiếp, có tùy chọn gRPC. - Bất đồng bộ: RabbitMQ + MassTransit, ví dụ event
UserProfileUpdated.
- Đồng bộ:
- Tracing: chuẩn hóa header
X-Correlation-Idqua Gateway và các service. - Bật gRPC nội bộ bằng cấu hình
IdentityService:UseGrpc=true(mặc định đangfalseđể tương thích môi trường local hiện tại).
| Service | Port Host | Port Container | Mô tả |
|---|---|---|---|
| Frontend | 3000 | 3000 | Giao diện Web |
| API Gateway | 5003 | 8080 | Cổng API chính |
| Content Service | 5002 | 8080 | API Nội dung |
| Identity Service | 5001 | 8080 | API Xác thực |
| SQL Server | 1433 | 1433 | Database |
BloggingPlatform/
├── backend_system/
│ ├── APIGateway/ # Ocelot Gateway Project
│ ├── ContentService/ # Content Microservice (.NET 8)
│ │ └── ContentAPI/ # Main API Project (CQRS/Features)
│ ├── IdentityService/ # Identity Microservice (.NET 8)
│ │ ├── Identity.API/ # API Entry point
│ │ ├── Application/
│ │ ├── Identity.Domain/
│ │ └── Identity.Infrastructure/
│ └── SharedLibrary/ # Thư viện dùng chung (Auth, Exceptions)
├── frontend/ # Next.js Application
├── docker-compose.yml # Docker Orchestration
└── README.md # Tài liệu dự án