Lunar Architecture
Project dùng để provision nhanh chóng các store bán hàng merch theo chủ đề. (Sản phẩm chủ yếu lấy từ Redbubble).
Repo: https://github.com/swebvn/lucommerce
Domain chính tdalunar.com: dùng để khởi tạo các server hub, ví dụ: s1, s2, sx…
Dev server (hub) https://dev.tdalunar.com: Server dành cho developer để test, cấu hình giống các server hub thực tế.
lunar hq control hq.tdalunar.com: Nơi quản lý tập trung các chức năng chung cho toàn bộ hệ thống Lunar.
Mô hình hệ thống
Mỗi server sẽ được thiết lập một website chính, gọi là hub (central). Các hub có khả năng tạo và quản lý nhiều website trên cùng một server.
Quy tắc đặt tên: s1.tdalunar.com, s2.tdalunar.com, …
Stack sử dụng
Stack:
- Laravel
- AlpineJS
- Livewire
- SQLite
- File storage: Bunny
- Queue: Redis + Horizon
- Ansible for CI/CD (viết trong Hansible)
Server:
- Caddy with auto TLS: cấu hình đơn giản, tự động TLS thay vì Nginx và Certbot
- SQLite
- PHP-FPM
Kiến trúc website sử dụng 2 package chính:
- Lunarphp: cung cấp các chức năng và backend liên quan đến E-commerce
- TenancyForLaravel: dùng cho kiến trúc multi-tenancy, một server (hub) phục vụ nhiều website (tenant)
Các tính năng có thể được viết như một ứng dụng Laravel cơ bản, hoặc tách thành các package trong thư mục packages của dự án. Điều này giúp việc bảo trì code dễ dàng hơn.
Hiện tại đang sử dụng 2 Bunny storage cho toàn bộ các hub
CI/CD
CI/CD của hệ thống được chạy trên Jenkins, thông qua các Ansible playbooks được viết trong Hansible
- Push to
mainbranch sẽ trigger job deploy lên tất cả các hub - Push to
devbranch sẽ trigger job deploy lên dev hubdev.tdalunar.com
Lunar HQ là gì?
Server trung tâm dành cho việc khởi tạo và quản lý các website Lunar
Hiện tại nhân viên sẽ thực hiện khởi tạo website và phân phối đến các hub
Lunar hub là gì?
Lunar hub là các website chính được cài đặt trên từng server, phụ trách việc khởi tạo và quản lý các website trên server đó.
Hub admin URL: hubdomain/hub
Giao diện admin của hub có thể thực hiện các hành động sau:
- Bật/tắt chế độ maintenance của website
- Download, upload (thay thế) database của một store (hỗ trợ việc chuyển store từ server này sang server khác)
- Quản lý các store trên hub
- Chạy bulk action trên các store thuộc hub đó: fix bug, regenerate, etc.
Tenant là gì?
Tenant hay còn gọi là các store bán sản phẩm, được tạo trên một hub.
Store admin URL: domain/lunar
Admin của store được sử dụng để quản lý sản phẩm và các chức năng khác.
Payment gateway
Các store Lunar không sử dụng checkout trực tiếp trên web, mà sẽ chuyển hướng thông qua một payment gateway khác (Woocommerce), còn gọi là redirect pay. Điều này giúp giảm thiểu việc cài đặt tài khoản thanh toán trên hàng ngàn store, tránh khó khăn trong quản lý.
Development
Đọc chi tiết trong file readme.md của project
Chú ý môi trường dev cần hỗ trợ Virtual Host. Trên macOS có thể sử dụng Valet, ngoài ra còn có các lựa chọn khác như Laragon hoặc Herd
Tạo dev store với demo data
Trước hết cần thiết lập hub, sau đó tạo một store trong hub.
Chú ý: domain local có thể phải cập nhật file /etc/hosts để trỏ về IP của hub. File hosts sẽ tùy vào hệ điều hành.
Ví dụ domain của tenant là lunar1.test, cần thêm vào file hosts như sau:
127.0.0.1 lunar1.test
Chú ý: chỉ nên sử dụng các TLD test, ví dụ: .test, .local, …
Fill demo data
- Chạy queue và khởi tạo như bình thường (ví dụ: import từ Redbubble).
- Download database từ một store đã được khởi tạo, sau đó upload vào hub. Download images từ Bunny của production storage, upload sang dev storage và đổi tên thư mục trùng với domain của tenant ở local.
Khởi tạo 1 server hub
Server requirements:
- Ubuntu 22.04
Các bước khỏi tạo hub sẽ thực hiện trên Jenkins hoặc có thể run trực tiếp qua
- Add deploy key dùng job: http://jenkins.sweb.vn/job/Add_user_deploy/
- Provision server cho hub dùng job: http://jenkins.sweb.vn/job/lunar2/job/provision/
- Tạo domain cho hub (sx.tdalunar.com): http://jenkins.sweb.vn/job/lunar2/job/create-hub-vhost/
Add server vào trong inventories/lunar.ini trong hansible repo để quản lý.
Auto backup
Database của các store sẽ được backup 1 tuần 1 lần, lưu trên Bunny.
User manual
Các store sẽ chịu trách nhiệm như là catalog, hiện thị thông tin sản phẩm, giá tiền chủ yếu được thiết lập thông qua loại sản phẩm (hay combination)
Phát triển các theme, giao diện, generate content.
Việc checkout hay giỏ hàng sẽ được redirect và thực hiện trên Payment gateway