Ngô Minh Phúc

Đồ án tốt nghiệp — Cá nhân

SangGarden

Nền tảng e-commerce fullstack bán cây cảnh — tự xây dựng và triển khai production trên VPS

Spring Boot + Angular + MariaDB. Không chỉ là code demo — hệ thống thực tế có thanh toán VNPay, phân quyền JWT, vận hành qua Nginx + SSL trên Ubuntu VPS.

JavaSpring BootSpring Data JPAHibernateSpring SecurityAngularTypeScriptMariaDBRESTful APIJWTVNPayNginxMavenVPS
SangGarden preview

Điểm nổi bật

Production thật
VPS Ubuntu, domain riêng, HTTPS/SSL, Nginx reverse proxy
Kiến trúc enterprise
Controller → Service → Repository (Spring Boot 3-layer)
Thanh toán thật
VNPay — xử lý callback, xác thực giao dịch, cập nhật đơn hàng
JWT + RBAC
Phân quyền ADMIN/USER, stateless authentication

Vấn đề & Mục tiêu

Các cửa hàng cây cảnh vừa và nhỏ chủ yếu bán offline, khó quản lý sản phẩm, tồn kho và đơn hàng khi quy mô tăng. Thao tác thủ công tốn thời gian và dễ sai sót. Khách hàng ngày càng kỳ vọng trải nghiệm online mượt mà, catalog chi tiết, thanh toán tiện lợi.

→ Mục tiêu Thiết kế, phát triển và deploy một nền tảng e-commerce hoàn chỉnh — không dừng ở code demo, đưa thẳng lên production với thanh toán online thật, bảo mật, và khả năng mở rộng.

Chuyển đổi sang Next.js

Mặc dù phiên bản Spring Boot + Angular hoạt động tốt và có kiến trúc enterprise, nhưng việc dùng bộ công nghệ này cho một website e-commerce quy mô nhỏ là không hợp lý và tốn kém chi phí bảo trì. Việc triển khai (deploy) trên VPS tự quản lý cũng phức tạp hơn mức cần thiết. Do đó, dự án đã được chuyển sang phiên bản Next.js để dễ dàng deploy (Vercel) và tối ưu hơn.

Công nghệ

Backend — Java
  • Spring Bootlayered architecture, embedded server
  • Spring Data JPA + HibernateORM, JPQL, transactions
  • Spring Securityfilter chain, BCrypt password
  • JWTaccess + refresh token, ADMIN/USER authorization
  • @ControllerAdvicecentralized exception handling
  • Mavenbuild & dependency management
  • RESTful APIstateless, JSON, resource-based
Frontend — Angular
  • Angular + TypeScriptSPA, module-based
  • RxJSObservable, BehaviorSubject
  • Reactive Formsvalidation, custom validators
  • Angular Routerlazy loading, route guards
  • ResponsiveFlexbox/Grid
Database & Integration
  • MariaDBnormalized ERD, FK, indexing
  • VNPaypayment request, callback, verify
  • Email xác thực đơn hàng tự động
DevOps / Deployment
  • Ubuntu VPSself-hosted
  • Nginxreverse proxy + static server
  • CertbotSSL/HTTPS (Let's Encrypt)
  • UFW Firewall
  • nohupbackend bind 127.0.0.1
  • application-prod.properties

Kiến trúc hệ thống

Mô hình 3 tầng, client-server, giao tiếp qua RESTful API. Backend chỉ bind 127.0.0.1 — không expose trực tiếp, mọi request đi qua Nginx.

[Browser] │ HTTPS ▼ [Nginx — reverse proxy + SSL] ├── serve Angular SPA (/var/www/sanggarden) └── proxy_pass → Spring Boot (127.0.0.1:8080) │ ├── MariaDB (local) └── VNPay Gateway └── callback → verify & update order https://sanggarden.com | api: /api/*
Controller
Nhận request, validate, trả response — mỗi domain một controller
Service
Business logic, transaction management
Repository
Spring Data JPA, CRUD tự động, JPQL, Hibernate ORM
Security
JWT filter chain, phân quyền ADMIN/USER

Thiết kế Database

BảngVai trò
usersTài khoản, role (ADMIN/USER), email verification, password mã hóa
user_infosThông tin cá nhân (họ tên, SĐT, địa chỉ giao hàng)
productsSản phẩm — tên, slug SEO, giá, ảnh, trạng thái, liên kết category
categoriesDanh mục sản phẩm
carts / cart_itemsGiỏ hàng và items (số lượng, giá, trạng thái chọn)
ordersĐơn hàng — hỗ trợ guest checkout, địa chỉ, phí ship, trạng thái, mã VNPay
order_itemsChi tiết đơn — lưu snapshot tên/giá tại thời điểm mua

Đáng chú ý: Hỗ trợ guest checkout và lưu snapshot giá tại thời điểm đặt — tránh sai lệch khi giá thay đổi sau này.

Tính năng chính

Authentication & Authorization
  • Trang login/register hợp nhất, chuyển mode động không reload trang
  • JWT access + refresh token, ADMIN/USER dùng chung một luồng login
  • Email verification cho tài khoản mới
Trải nghiệm mua sắm
  • Trang chủ hero slider, danh mục sản phẩm
  • Danh sách & chi tiết sản phẩm, URL SEO-friendly (slug)
  • Giỏ hàng real-time với RxJS BehaviorSubject
  • Guest checkout — đặt hàng không cần tài khoản
  • Giỏ hàng guest tự động merge lên server khi đăng nhập
Đặt hàng & Thanh toán
  • Checkout mượt mà, nhập địa chỉ giao hàng
  • VNPay: tạo request, xử lý callback, verify, cập nhật trạng thái
  • Gửi email xác nhận đơn hàng tự động
  • Trang theo dõi đơn hàng của tôi
Admin Dashboard
  • CRUD sản phẩm, thêm ảnh, gán danh mục
  • Quản lý danh mục sản phẩm
  • Quản lý đơn hàng, cập nhật trạng thái
  • Route /admin/* bảo vệ bằng route guard

Bảo mật & Production

Điểm khác biệt không chỉ là viết code — mà là tư duy vận hành thật trên production.

JWTStateless — access + refresh token, phân quyền theo role
Spring SecurityCấu hình filter chain, mã hóa BCrypt
HTTPS / SSLToàn bộ traffic qua SSL — Certbot (Let's Encrypt)
Nginx proxyBackend chỉ bind 127.0.0.1 — không expose trực tiếp
UFW FirewallTường lửa cấp production trên VPS
Config separationapplication-prod.properties — tách dev/production
@ControllerAdviceXử lý lỗi tập trung — không lộ thông tin ra client

Hình ảnh

Trang chủ
Trang chủ
Danh sách sản phẩm
Danh sách sản phẩm
Giỏ hàng
Giỏ hàng
Thanh toán & Đặt hàng
Thanh toán & Đặt hàng
Xác thực / Đăng nhập
Xác thực / Đăng nhập
Cấu trúc Database (ERD)
Cấu trúc Database (ERD)
Kiến trúc triển khai VPS
Kiến trúc triển khai VPS

Hướng phát triển

  • Tìm kiếm/lọc nâng cao, gợi ý sản phẩm, wishlist, đánh giá sản phẩm
  • Đa dạng thanh toán — COD, ví điện tử, cổng quốc tế
  • Caching, load balancing, tối ưu DB, migrate cloud
  • Multi-factor auth, refresh token rotation, mã hóa nâng cao
  • Admin analytics — thống kê doanh thu, dự báo tồn kho
  • Mobile app hoặc PWA