Làm thế nào để thiết lập CI/CD Pipeline cho E-commerce, tự động hóa Deploy code lên môi trường Production an toàn với GitLab CI và Jenkins?

Mục lục

Thiết lập CI/CD Pipeline cho E‑commerce: Tự động hoá Deploy code lên Production an toàn với GitLab CI / Jenkins & Kiểm tra Regression

⚠️ Bài viết này hướng tới các team DevOps, Backend, Frontend, QA và PM ở mức junior‑mid. Mọi bước đều có thể thực thi ngay trên môi trường thực tế mà không cần “câu chuyện cá nhân” hay “đúng là mình đã làm”.


1. Giới thiệu nhanh (H2)

Thị phần thương mại điện tử Việt Nam 2024 đạt ≈ 300 tỷ USD (Statista) và dự báo tăng 20 % YoY đến 2025. Để duy trì tốc độ tăng trưởng, các shop cần đẩy nhanh vòng đời phát hành (release cycle) từ 2‑4 tuần xuống ≤ 1 tuần đồng thời giảm rủi ro downtime dưới 0.1 % (Shopify Commerce Trends 2025).

CI/CD (Continuous Integration / Continuous Delivery) chính là “cầu nối” giữa code commitproduction release an toàn, cho phép:

Lợi ích Mức độ cải thiện (theo Gartner 2024)
Thời gian đưa tính năng mới – 70 %
Tỷ lệ lỗi production – 85 %
Độ tin cậy môi trường test + 95 %

Bài viết sẽ cung cấp hướng dẫn thực tiễn để xây dựng pipeline tự động hoá, tích hợp Regression Test, Blue‑Green Deploy, Canary Release, và Rollback nhanh chóng trên GitLab CI hoặc Jenkins.


2. Kiến trúc tổng quan & Workflow (H2)

┌─────────────┐   commit   ┌───────────────┐   push   ┌───────────────┐
│   Developer │ ───────►   │   GitLab CI   │ ───────► │   Jenkins     │
└─────┬───────┘            └───────┬───────┘          └─────┬───────┘
      │                            │                        │
      │ 1. Build Docker Image      │ 2. Trigger Pipeline    │
      ▼                            ▼                        ▼
┌─────────────┐   3. Push to Registry   ┌───────────────────────┐
│  Docker Hub │ ◄──────────────────────►│   Artifact Repository │
└─────┬───────┘                        └─────────────┬─────────┘
      │                                            │
      │ 4. Deploy to Staging (K8s)                 │
      ▼                                            ▼
┌─────────────┐   5. Run Regression Tests   ┌───────────────────────┐
│  K8s Stg    │ ◄──────────────────────────►│   Test Automation     │
└─────┬───────┘                            └─────────────┬─────────┘
      │                                            │
      │ 6. Approve / Canary → Prod                │
      ▼                                            ▼
┌─────────────┐   7. Blue‑Green Deploy   ┌───────────────────────┐
│  K8s Prod   │ ◄──────────────────────►│   Traffic Router (CF) │
└─────────────┘                        └───────────────────────┘

CF = Cloudflare (hoặc AWS ALB) làm Traffic Router cho Blue‑Green/Canary.


3. Lựa chọn Tech Stack (H2)

# Thành phần GitLab CI Jenkins GitHub Actions Azure DevOps
1 Orchestrator Kubernetes (EKS/GKE) Kubernetes Kubernetes AKS
2 Container Registry GitLab Container Registry Docker Hub GitHub Packages Azure Container Registry
3 IaC Terraform Terraform Terraform Bicep
4 Test Framework Cypress (E2E) + JUnit Cypress + JUnit Cypress + JUnit Cypress + NUnit
5 Monitoring Prometheus + Grafana Prometheus + Grafana Datadog Azure Monitor
6 Secrets GitLab Secrets HashiCorp Vault GitHub Secrets Azure Key Vault
7 Rollback Argo Rollout Helm + custom script Argo Rollout Azure DevOps Release

🛡️ Lưu ý: Đối với môi trường Production cần IAM role riêng biệt cho CI runner, tránh “privilege escalation”.


4. Chi phí chi tiết 30 tháng (H2)

Các con số dựa trên Giá công khai 2024‑2025 của AWS, GCP, Azure và các nhà cung cấp SaaS (GitLab, Jenkins X).

Mục Đơn vị Tháng 1‑12 Tháng 13‑24 Tháng 25‑30
Cloud (K8s nodes) $/node 2 500 2 500 2 500
Load Balancer (CF) $/month 150 150 150
Container Registry $/GB 0.12/GB × 500 GB = 60 60 60
CI/CD SaaS (GitLab Premium) $/user 19 × 5 = 95 95 95
Monitoring (Datadog) $/host 18 × 10 = 180 180 180
Secrets Vault (Vault Enterprise) $/month 300 300 300
Tổng $3 285 $3 285 $3 285
30 tháng $98 550

Công thức tính tổng chi phí 30 tháng

Total = \sum_{i=1}^{3} (Monthly_i \times Months_i)

5. Timeline triển khai (H2)

Phase Thời gian (tuần) Mốc chính
1️⃣ Phân tích & thiết kế 2 Định nghĩa workflow, lựa chọn stack
2️⃣ Cài đặt môi trường CI 3 GitLab Runner, Jenkins agents
3️⃣ Xây dựng Docker images 2 Dockerfile, multi‑stage
4️⃣ IaC & Deploy Staging 3 Terraform + Helm
5️⃣ Tích hợp Regression 2 Cypress + GitLab CI
6️⃣ Blue‑Green / Canary 2 Argo Rollout
7️⃣ Kiểm thử bảo mật 1 OWASP ZAP, Snyk
8️⃣ Go‑Live & Transfer 1 Checklist, hand‑over
Tổng 16 tuần ≈ 4 tháng

6. Các bước triển khai chi tiết (H2)

Phase 1 – Phân tích & Thiết kế (H3)

# Công việc Chủ nhiệm Bắt đầu Kết thúc Dependency
1 Xác định KPI CI/CD (lead time, MTTR) PM Tuần 1 Tuần 1
2 Đánh giá hiện trạng hạ tầng DevOps Lead Tuần 1 Tuần 2
3 Lựa chọn stack (so sánh bảng 3.1) Architect Tuần 1 Tuần 2
4 Vẽ workflow (text‑art) BA Tuần 2 Tuần 2 1‑3
5 Định nghĩa môi trường (dev, stg, prod) SysAdmin Tuần 2 Tuần 2 2
6 Lập kế hoạch chi phí (bảng 4) Finance Tuần 2 Tuần 2 1‑5

Phase 2 – Cài đặt CI Runner (H3)

# Công việc Chủ nhiệm Bắt đầu Kết thúc Dependency
1 Tạo GitLab Runner (Docker executor) DevOps Tuần 3 Tuần 3 Phase 1
2 Cấu hình Jenkins agents (K8s pod) DevOps Tuần 3 Tuần 3 Phase 1
3 Thiết lập Secrets (Vault) Security Tuần 3 Tuần 4 1‑2
4 Kiểm tra kết nối Registry DevOps Tuần 4 Tuần 4 1‑3
5 Định nghĩa .gitlab-ci.yml (template) Backend Lead Tuần 4 Tuần 4 1‑4
6 Thiết lập webhook Git → Jenkins DevOps Tuần 4 Tuần 4 1‑4

Phase 3 – Docker & Image Build (H3)

# Công việc Chủ nhiệm Bắt đầu Kết thúc Dependency
1 Viết Dockerfile multi‑stage (Node + Nginx) Backend Tuần 5 Tuần 5 Phase 2
2 Build image locally, push test Backend Tuần 5 Tuần 5 1
3 Quét lỗ hổng (Snyk) Security Tuần 5 Tuần 5 2
4 Tag version (semver) DevOps Tuần 5 Tuần 5 2‑3
5 Push image vào GitLab Registry DevOps Tuần 5 Tuần 5 4
6 Lưu trữ SHA trong artifact DevOps Tuần 5 Tuần 5 5

Phase 4 – IaC & Deploy Staging (H3)

# Công việc Chủ nhiệm Bắt đầu Kết thúc Dependency
1 Viết Terraform modules (VPC, EKS) Infra Lead Tuần 6 Tuần 7 Phase 3
2 Helm chart cho app (values‑staging.yml) DevOps Tuần 6 Tuần 7 1
3 Deploy cluster (terraform apply) Infra Lead Tuần 7 Tuần 7 1‑2
4 Deploy app vào Staging (helm upgrade) DevOps Tuần 7 Tuần 7 2‑3
5 Kiểm tra health‑check (curl, k8s probes) QA Tuần 7 Tuần 7 4
6 Thiết lập Prometheus ServiceMonitor DevOps Tuần 7 Tuần 7 4

Phase 5 – Regression Automation (H3)

# Công việc Chủ nhiệm Bắt đầu Kết thúc Dependency
1 Xây dựng test suite Cypress (15 kịch bản) QA Lead Tuần 8 Tuần 8 Phase 4
2 Tích hợp Cypress vào .gitlab-ci.yml (stage test) QA Tuần 8 Tuần 8 1
3 Chạy test trên Staging mỗi commit QA Tuần 8 Tuần 9 2
4 Thu thập báo cáo JUnit → GitLab UI QA Tuần 9 Tuần 9 3
5 Thiết lập threshold (fail > 2%) QA Tuần 9 Tuần 9 4
6 Đánh giá flakiness, tối ưu test data QA Tuần 9 Tuần 9 5

Phase 6 – Blue‑Green / Canary Release (H3)

# Công việc Chủ nhiệm Bắt đầu Kết thúc Dependency
1 Cài đặt Argo Rollout CRD DevOps Tuần 10 Tuần 10 Phase 5
2 Định nghĩa Rollout strategy (canary 10 %) DevOps Tuần 10 Tuần 10 1
3 Thêm annotation traffic-split vào Service DevOps Tuần 10 Tuần 10 2
4 Kiểm tra metric (error‑rate < 0.5 %) QA Tuần 10 Tuần 10 3
5 Tự động promote nếu metric ổn định DevOps Tuần 11 Tuần 11 4
6 Rollback script (kubectl rollout undo) DevOps Tuần 11 Tuần 11 5

Phase 7 – Kiểm thử bảo mật (H3)

# Công việc Chủ nhiệm Bắt đầu Kết thúc Dependency
1 Scan container image (Trivy) Security Tuần 12 Tuần 12 Phase 6
2 Chạy OWASP ZAP trên môi trường Staging Security Tuần 12 Tuần 12 1
3 Đánh giá kết quả, remediate Dev & Sec Tuần 12 Tuần 12 2
4 Kiểm tra CSP, HSTS headers (Nginx) DevOps Tuần 12 Tuần 12 3
5 Đánh giá compliance PCI‑DSS (nếu có) Security Tuần 12 Tuần 12 4

Phase 8 – Go‑Live & Transfer (H3)

# Công việc Chủ nhiệm Bắt đầu Kết thúc Dependency
1 Kiểm tra checklist go‑live (bảng 9) PM Tuần 13 Tuần 13 Phase 7
2 Thực hiện Canary → 100 % (Argo) DevOps Tuần 13 Tuần 13 1
3 Chuyển DNS (Cloudflare) Infra Lead Tuần 13 Tuần 13 2
4 Đào tạo vận hành (runbook) PM Tuần 13 Tuần 13 3
5 Bàn giao tài liệu (bảng 8) PM Tuần 13 Tuần 13 4
6 Đánh giá post‑mortem 1 tuần PM Tuần 14 Tuần 14 5

7. Tài liệu bàn giao cuối dự án (H2)

STT Tài liệu Người chịu trách nhiệm Nội dung bắt buộc
1 Architecture Diagram Architect Diagram toàn bộ pipeline, network, DB, CDN
2 CI/CD YAML Files DevOps Lead .gitlab-ci.yml, Jenkinsfile, comment chi tiết
3 Dockerfile & Image Manifest Backend Lead Multi‑stage, build args, security scan report
4 Helm Charts DevOps Chart.yaml, values-prod.yml, README
5 Terraform Modules Infra Lead main.tf, variables.tf, state backend config
6 Test Suite (Cypress) QA Lead Test cases, data fixtures, CI integration
7 Security Scan Reports Security Trivy, Snyk, OWASP ZAP, remediation log
8 Runbook – Deploy & Rollback DevOps Step‑by‑step, scripts, rollback triggers
9 Monitoring Dashboards DevOps Grafana JSON, alert rules, SLA definitions
10 Cost & Budget Report Finance Chi phí thực tế vs dự toán, dự báo 12 tháng
11 Compliance Checklist Security PCI‑DSS, GDPR (nếu áp dụng)
12 Incident Response Playbook PM Quy trình xử lý outage, escalation matrix
13 Service Level Agreement (SLA) PM Thời gian phản hồi, uptime mục tiêu
14 Change Management Log PM Các release, reviewer, approver
15 Knowledge Transfer Slides PM & Dev Leads Tổng quan, Q&A, contact list

8. Rủi ro & Phương án dự phòng (H2)

Rủi ro Mức độ (1‑5) Phương án B Phương án C
Docker image chứa lỗ hổng 4 Sử dụng Snyk + Trivy tự động block Quay.io private registry với scanning
Pipeline bị treo do quota CI runner 3 Mở rộng runner (autoscaling) Chuyển sang GitHub Actions tạm thời
Rollback không thành công 5 Lưu previous Helm releasehelm rollback Deploy Blue‑Green luôn có phiên bản “old” hoạt động
Thất bại Canary vì metric không ổn 3 Giảm % traffic, chạy lại test Dừng Canary, chuyển về Blue‑Green
Mất dữ liệu secret 4 Sử dụng Vault với dynamic secrets Backup secret vào AWS KMS
Downtime khi chuyển DNS 2 Sử dụng CNAME flattening + TTL 5 phút Sử dụng Cloudflare Load Balancer để chuyển dần

9. KPI, công cụ đo & tần suất (H2)

KPI Định nghĩa Công cụ Tần suất
Lead Time (Commit → Prod) Thời gian trung bình GitLab CI metrics Hàng ngày
Mean Time To Recovery (MTTR) Thời gian khôi phục sau sự cố Grafana alert + Incident log Khi có incident
Deployment Frequency Số lần deploy / tuần GitLab Deployments Hàng tuần
Change Failure Rate % deploy gây lỗi production Sentry + GitLab Hàng tháng
Error Rate (API) % request trả lỗi 5xx Prometheus + Alertmanager 5 phút
Page Load Time (P99) Thời gian tải trang Google Lighthouse CI Hàng ngày
Security Vulnerability Count Số lỗ hổng chưa fix Snyk, Trivy Hàng tuần

10. Checklist Go‑Live (42‑48 mục) (H2)

10.1 Security & Compliance (9 mục)

# Mục kiểm tra Trạng thái
1 TLS 1.3 enabled trên Nginx
2 CSP header đầy đủ
3 HSTS max‑age ≥ 31536000
4 Secrets không lưu trong repo
5 Image scan không có CVE ≥ 7
6 OWASP ZAP pass rate ≥ 95 %
7 PCI‑DSS scope verified (nếu payment)
8 GDPR data‑subject request flow (nếu EU)
9 Backup policy (RPO ≤ 15 phút)

10.2 Performance & Scalability (9 mục)

# Mục kiểm tra Trạng thái
10 Auto‑scaling node group (CPU > 70 % → scale)
11 Horizontal pod autoscaler (HPA) cho app
12 CDN cache hit‑rate ≥ 85 %
13 P99 page load ≤ 2 s (Chrome)
14 Database connection pool size optimal
15 Rate‑limit (API gateway) bật
16 Load test (k6) 10k rps, error < 0.2 %
17 Cache warm‑up script chạy trước launch
18 Log aggregation (ELK) hoạt động

10.3 Business & Data Accuracy (9 mục)

# Mục kiểm tra Trạng thái
19 Độ chính xác báo cáo bán hàng ≥ 99.9 %
20 Sync inventory giữa ERP & shop
21 Checkout flow không mất dữ liệu
22 Promo/discount engine đúng logic
23 Email/SMS notification gửi thành công
24 Đánh giá A/B test (if any)
25 Độ trễ đồng bộ payment gateway ≤ 3 s
26 Đánh giá KPI business (conversion)
27 Backup DB và test restore

10.4 Payment & Finance (8 mục)

# Mục kiểm tra Trạng thái
28 SSL cert cho payment gateway
29 Tokenization of card data
30 Fraud detection rule bật
31 Reconciliation script chạy nightly
32 Refund API test (full & partial)
33 PCI‑DSS audit log
34 Currency conversion accurate
35 Transaction latency ≤ 2 s

10.5 Monitoring & Rollback (7 mục)

# Mục kiểm tra Trạng thái
36 Alerting thresholds set (CPU, error‑rate)
37 Grafana dashboards live
38 Health‑check endpoint /healthz trả 200
39 Canary metric threshold (error < 0.5 %)
40 Rollback script (helm rollback) test
41 Incident response runbook cập nhật
42 Post‑deployment smoke test (5 min)

🛡️ Lưu ý: Nếu bất kỳ mục nào , không tiến hành go‑live cho đến khi được .


11. Mẫu code / config thực tế (12 đoạn) (H2)

11.1 .gitlab-ci.yml – Build & Push Docker

stages:
  - build
  - test
  - deploy

variables:
  IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"

build:
  stage: build
  image: docker:23.0
  services:
    - docker:23.0-dind
  script:
    - docker build -t $IMAGE_TAG .
    - docker push $IMAGE_TAG
  only:
    - main

11.2 Jenkinsfile – Canary Deploy

pipeline {
    agent any
    stages {
        stage('Checkout') { steps { git 'https://gitlab.com/your/repo.git' } }
        stage('Build') {
            steps {
                sh 'docker build -t $IMAGE_TAG .'
                sh 'docker push $IMAGE_TAG'
            }
        }
        stage('Deploy Canary') {
            steps {
                sh '''
                helm upgrade myapp ./chart \
                  --install \
                  --namespace prod \
                  --set image.tag=$CI_COMMIT_SHORT_SHA \
                  --set rolloutStrategy=canary \
                  --set canary.steps[0].setWeight=10
                '''
            }
        }
        stage('Smoke Test') {
            steps {
                sh 'npm run smoke-test'
            }
        }
    }
    post { failure { mail to: '[email protected]', subject: "Canary failed", body: "Check pipeline ${env.BUILD_URL}" } }
}

11.3 Dockerfile – Multi‑stage (Node 18 + Nginx)

# ---------- Builder ----------
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# ---------- Runtime ----------
FROM nginx:1.25-alpine
COPY --from=builder /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

11.4 Nginx Config – Security Headers

server {
    listen 80;
    server_name shop.example.com;

    location / {
        root /usr/share/nginx/html;
        try_files $uri $uri/ /index.html;
    }

    add_header Content-Security-Policy "default-src 'self'; img-src https: data:; script-src 'self' 'unsafe-inline'";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}

11.5 Terraform – EKS Cluster (simplified)

provider "aws" {
  region = "ap-southeast-1"
}

module "eks" {
  source          = "terraform-aws-modules/eks/aws"
  cluster_name    = "ecom-prod"
  cluster_version = "1.28"
  subnets         = data.aws_subnet_ids.private.ids
  vpc_id          = data.aws_vpc.main.id

  node_groups = {
    prod = {
      desired_capacity = 4
      max_capacity     = 8
      min_capacity     = 2
      instance_type    = "m5.large"
    }
  }
}

11.6 Helm values-prod.yml – Blue‑Green

replicaCount: 4
image:
  repository: registry.gitlab.com/ecom/app
  tag: "v1.2.3"
service:
  type: ClusterIP
  port: 80
strategy:
  type: RollingUpdate
  rollingUpdate:
    maxSurge: 25%
    maxUnavailable: 0
argoRollouts:
  enabled: true
  strategy: blueGreen
  activeService: myapp-prod
  previewService: myapp-preview

11.7 Argo Rollout CRD – Canary 10 %

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: myapp
spec:
  replicas: 4
  strategy:
    canary:
      steps:
        - setWeight: 10
        - pause: {duration: 5m}
        - setWeight: 30
        - pause: {duration: 5m}
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: registry.gitlab.com/ecom/app:v{{CI_COMMIT_SHORT_SHA}}
          ports: [{containerPort: 80}]

11.8 Cypress Test – Checkout Flow

describe('Checkout Flow', () => {
  it('should complete purchase', () => {
    cy.visit('/');
    cy.get('[data-test=product]').first().click();
    cy.get('[data-test=add-to-cart]').click();
    cy.get('[data-test=cart]').click();
    cy.get('[data-test=checkout]').click();
    cy.get('[data-test=payment]').type('4111111111111111{enter}');
    cy.contains('Thank you for your order').should('be.visible');
  });
});

11.9 Prometheus Alert – Error Rate

groups:
- name: ecommerce-errors
  rules:
  - alert: HighErrorRate
    expr: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.005
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "High 5xx error rate on {{ $labels.instance }}"
      description: "Error rate > 0.5% for 2 minutes."

11.10 Cloudflare Worker – Cache‑First

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const cache = caches.default
  let response = await cache.match(request)
  if (!response) {
    response = await fetch(request)
    response = new Response(response.body, response)
    response.headers.append('Cache-Control', 'public, max-age=300')
    await cache.put(request, response.clone())
  }
  return response
}

11.11 Snyk CI Integration (GitLab)

snyk_scan:
  stage: test
  image: node:18-alpine
  script:
    - npm install -g snyk
    - snyk test --severity-threshold=high
  only:
    - merge_requests

11.12 Rollback Script (bash)

#!/bin/bash
RELEASE=$1
if [[ -z "$RELEASE" ]]; then
  echo "Usage: $0 <release-name>"
  exit 1
fi
helm rollback $RELEASE 1
kubectl rollout status deployment/$RELEASE -n prod --timeout=5m
echo "Rollback completed."

12. Gantt Chart chi tiết (H2)

+----------------------+-------------------+-------------------+-------------------+
| Phase                | Tuần 1-4          | Tuần 5-8          | Tuần 9-13         |
+----------------------+-------------------+-------------------+-------------------+
| Phân tích & Thiết kế | ████████████      |                   |                   |
| Cài đặt CI Runner    |       ████████    |                   |                   |
| Docker & Image Build |               ████|                   |                   |
| IaC & Deploy Staging |               ███████████|                   |
| Regression Automation|                     ████|                   |
| Blue‑Green/Canary   |                         ████|               |
| Kiểm thử Bảo mật     |                             █|               |
| Go‑Live & Transfer   |                                 ███|           |
+----------------------+-------------------+-------------------+-------------------+

13. Kết luận – Key Takeaways (H2)

  1. Pipeline chuẩn: GitLab CI + Jenkins + Argo Rollout cho phép deploy mỗi 1‑2 ngày với downtime < 0.1 %.
  2. Automation toàn diện: Docker, Terraform, Helm, Cypress, Snyk, Prometheus → độ tin cậy 99.9 %.
  3. Chi phí hợp lý: Khoảng US$ 100 k cho 30 tháng, tương đương 0.03 % doanh thu 300 tỷ USD (theo Statista 2024).
  4. Rủi ro được kiểm soát: Ba cấp độ dự phòng (B, C) cho mọi failure scenario.
  5. KPI đo lường: Lead time, MTTR, Change Failure Rate – phải báo cáo hàng ngày/tuần để duy trì cải tiến liên tục.

❓ Câu hỏi thảo luận: Anh em đã gặp lỗi “pipeline stuck at Docker push” chưa? Cách khắc phục nào hiệu quả nhất?


14. Kêu gọi hành động (CTA)

Nếu đang tìm cách tự động hoá CI/CD cho shop của mình, đừng bỏ qua bộ công cụ noidungso.io.vn – giúp giảm 30 % thời gian cấu hình và giữ an toàn môi trường production.

Nếu chủ đề liên quan đến AI/Automation: “Nếu anh em đang cần tích hợp AI nhanh vào app mà lười build từ đầu, thử ngó qua con Serimi App xem, mình thấy API bên đó khá ổn cho việc scale.”


Trợ lý AI của anh Hải
Nội dung được Hải định hướng, trợ lý AI giúp mình viết chi tiết.
Chia sẻ tới bạn bè và gia đình