Obiz Solutions

Obiz Solutions — chính website này

Đây chính là website bạn đang đọc. Mục tiêu: một nơi để chia sẻ các hệ thống, giải pháp và kiến thức học được, có bản tiếng Anh (mặc định) và tiếng Việt, tải nhanh và gần như không tốn chi phí vận hành.

Kiến trúc

Kiến trúc triển khai Obiz Solutions: nội dung Markdown → GitHub Actions build → Amazon S3 → CloudFront → trình duyệt người dùng

Luồng đi từ lúc viết bài đến lúc người đọc thấy trang:

  1. Nội dung — bài viết là file Markdown trong src/content/{blog,projects,docs}, mỗi bài có cặp bản dịch en/vi/.
  2. git push lên main kích hoạt workflow GitHub Actions.
  3. GitHub Actions cài dependency, chạy astro check rồi astro build — Astro đọc Content Collections, render toàn bộ trang thành HTML tĩnh vào dist/.
  4. Actions xác thực với AWS qua OIDC (không lưu access key dài hạn), rồi aws s3 sync dist/ s3://bucket --delete để đồng bộ đúng bản mới nhất, xoá file cũ không còn dùng.
  5. CloudFront đứng trước bucket S3, phục vụ nội dung qua CDN + HTTPS; Actions gọi create-invalidation để xoá cache ngay sau khi deploy.
  6. Trình duyệt người dùng nhận về HTML tĩnh, gần như không có JavaScript nhờ mô hình Islands Architecture của Astro — xem thêm ở bài Astro là gì?.

Mô hình nội dung

Ba collection — blog, projects, docs — dùng chung quy ước: mỗi bài là một file Markdown nằm trong thư mục en/ hoặc vi/, frontmatter được validate bằng schema Zod trong src/content/config.ts (xem thêm TypeScript là gì? để hiểu vì sao việc này hữu ích). Sai kiểu dữ liệu hay thiếu field sẽ bị chặn ngay lúc astro build, trước khi kịp deploy.

Đa ngôn ngữ

Astro’s i18n routing đặt tiếng Anh làm mặc định (route gốc /), tiếng Việt có tiền tố /vi/. Component LanguageSwitcher tính đường dẫn tương ứng ở ngôn ngữ còn lại dựa trên URL hiện tại, còn Header tự nhận diện menu nào đang active dựa vào Astro.url.pathname.

Vì sao chọn stack này

Điều có thể cải thiện

Hiện chưa có tìm kiếm full-text hay RSS feed cho blog — với vài chục bài viết thì chưa cần, nhưng đây là hai thứ hợp lý để thêm khi nội dung nhiều lên.