Build và Deploy
builderx_spa build bằng Vite, đóng gói cùng server.js và triển khai lên server bằng Ansible.
Script npm
| Script | Vai trò |
|---|---|
npm run dev | Chạy node server.js — Express + Vite middleware ở chế độ dev. |
npm run watch | Giống dev nhưng dùng nodemon để reload lớp Node. |
npm run build:client | vite build --outDir dist/client --mode production. |
npm run test_build:client | Build vào dist/client_<sha> — cho bản preview / QA. |
npm run clean | Xoá thư mục dist/. |
npm run lint | ESLint --fix cho src/. |
npm run format | Prettier toàn repo. |
npm run setup:husky | Cài Husky + chmod hook. |
npm run validate:schemas | Kiểm tra JSON schema trait Editor V2 trong schemas/. |
npm run build:schemas | Sinh lại schemas/elements.json từ schemas/elements/*. |
npm run deploy | Alias cho build:client (không tự push). |
Quy trình build
- Validate schema ở CI (
npm run validate:schemas). - Lint + kiểm tra format.
npm run build:client— sinhdist/client/:index.html,index_themes.html.assets/*.js,assets/*.cssđã hash.- Tệp tĩnh copy từ
public/.
- Hook
postinstallđảm bảo thư mụctinymce/tồn tại ở thư mục gốc (rm -rf tinymce && cp -R node_modules/tinymce tinymce).
Vận hành ở production
server.jscần:- Có sẵn
dist/client/. - Đầy đủ biến
process.env.*(xem Biến môi trường). - Cổng mặc định 3000 (cấu hình trong
server.js).
- Có sẵn
- Khuyến nghị: chạy sau Nginx, đặt
Cache-Control: max-age=31536000choassets/*đã hash vàno-cachechoindex.html.
Docker
Dockerfilebuild image gọn (Node 16 alpine, chứadist/,server.js,package.json).docker-compose.ymldùng cho dev (mount source, link với container backend).make devkhởi động stack dev;make bashmở shell trong container.
Triển khai bằng Ansible
Thư mục ansible/ chứa playbook. Hai môi trường: staging và production (chia cluster theo region).
Quy trình điển hình:
-
Merge nhánh feature vào
develop→ CI tự deploy staging. -
QA thông qua → merge
developvàomaster. -
Trên máy có quyền:
cd builderx_spaansible-playbook -i ansible/inventory.yaml ansible/deploy.yaml
Playbook sẽ:
- Pull repo trên server.
- Chạy
npm ci && npm run build:client. - Reload service Node (systemd hoặc pm2 tuỳ cluster).
- Nếu bật CDN, đẩy bundle lên CDN.
Build preview theo commit
npm run test_build:client
# → dist/client_<short_sha>/
Tiện cho việc upload bản preview của một PR lên S3 hoặc server staging.
Việc cần làm sau khi deploy
- Mở URL admin, kiểm tra phiên bản build (Sentry release tag hoặc header
x-build). - Smoke test: đăng nhập, dashboard, danh sách sản phẩm, mở Editor V2.
- Theo dõi Sentry 10–15 phút để phát hiện lỗi mới.
- Theo dõi log Nginx và Node những phút đầu.
Rollback
-
Server giữ symlink
currenttrỏ về release đang chạy (pattern release của Ansible). -
Cách rollback:
ansible-playbook -i ansible/inventory.yaml ansible/rollback.yamlHoặc trỏ symlink về release trước rồi reload Node thủ công.
Đo lường
- Sentry release tag = phiên bản trong
package.json+ git SHA. src/measure/thu Web Vitals và các mark tuỳ chỉnh (publish, AI generate).- Khi thêm dependency, nên audit kích thước bundle:
npx vite-bundle-visualizer.