Skip to content

DoawnLet/BloggingPlatform

Repository files navigation

Blogging Platform

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.

🏗 Cấu Trúc Hệ Thống

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.

Sơ đồ kiến trúc tổng quan:

  • 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).

🚀 Chi Tiết Các Server

1. Identity Service

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).

2. Content Service

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).

3. API Gateway

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.

4. Frontend

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.

🛠 Hướng Dẫn Cài Đặt & Chạy Hệ Thống

Yêu cầu tiên quyết

  • 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).

Chạy bằng Docker Compose (Khuyên dùng)

Cách nhanh nhất để dựng toàn bộ hệ thống (Database, Backend, Gateway).

  1. Mở terminal tại thư mục gốc dự án.
  2. Chạy lệnh:
    docker-compose up -d --build
  3. Truy cập Frontend:
    • Mở trình duyệt tại http://localhost:3000.

Biến môi trường Database theo từng service

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

Giao tiếp service-to-service

  • 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 -> IdentityService qua HTTP trực tiếp, có tùy chọn gRPC.
    • Bất đồng bộ: RabbitMQ + MassTransit, ví dụ event UserProfileUpdated.
  • Tracing: chuẩn hóa header X-Correlation-Id qua Gateway và các service.
  • Bật gRPC nội bộ bằng cấu hình IdentityService:UseGrpc=true (mặc định đang false để tương thích môi trường local hiện tại).

Các Port Mặc Định (Docker)

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

📂 Cấu Trúc Thư Mục

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

About

Blog Platform manager blog for each blogger want to push some information such as traveling, research, feeling of problem

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages