NocoDB 2026 Hướng Dẫn Đầy Đủ: Giải Pháp Thay Thế Airtable Mã Nguồn Mở Biến Mọi Database Thành Bảng Tính Thông Minh
Triển khai NocoDB trong 5 phút với Docker. Biến MySQL, PostgreSQL hoặc SQLite thành bảng tính cộng tác với REST API tự động, bảng Kanban và kiểm soát truy cập dựa trên vai trò.
- ⭐ 53000
- AGPL-3.0
- Cập nhật 2026-05-19
{{< resource-info >}}
Giới Thiệu: Khi Bảng Tính Chạm Giới Hạn #
Mỗi team kỹ sư đều có “bảng tính chủ chốt” đó. Nó bắt đầu một cách vô hại — một Google Sheet theo dõi onboarding khách hàng, một file CSV SKU hàng tồn kho, một file Excel chia sẻ ngân sách dự án. Rồi hỗn loạn ập đến: ai đó ghi đè công thức, lịch sử phiên bản trở nên không đọc được, và giới hạn 65,000 hàng treo lơ lửng như đám mây giông.
Airtable đã giải quyết vấn đề này cho hàng triệu team, nhưng với một cái giá. Gói Pro tốn $20 mỗi user mỗi tháng. Team 20 ngườitrả $4,800/năm cho một thứ về cơ bản là bảng tính cao cấp. Tệ hơn nữa, dữ liệu của bạn nằm trên server của Airtable, xuất dữ liệu bị giới hạn, và API có giới hạn tốc độ làm chậm các workload thực tế.
NocoDB xuất hiện — một nền tảng mã nguồn mở biến mọi database MySQL, PostgreSQL, SQL Server, SQLite hoặc MariaDB thành giao diện bảng tính thông minh, cộng tác. Với 53,000+ sao GitHub, triển khai Docker dưới 5 phút, và không cần di chuyển dữ liệu, NocoDB mang lại khả năng sử dụng của Airtable kết hợp sức mạnh và quyền kiểm soát của database SQL thực thụ.
Hướng dẫn này đi qua toàn bộ quá trình thiết lập production: triển khai Docker local, kết nối database PostgreSQL hiện có, cấu hình kiểm soát truy cập dựa trên vai trò, tạo REST API, và tăng cường bảo mật production. Mọi lệnh đều sẵn sàng copy-paste.
NocoDB Là Gì? #
NocoDB là nền tảng database no-code mã nguồn mở thêm giao diện bảng tính lên trên các database quan hệ hiện có. Không giống Airtable lưu trữ dữ liệu trong backend độc quyền của họ, NocoDB kết nối với database MySQL, PostgreSQL, SQL Server, SQLite hoặc MariaDB của bạn và cung cấp dạng xem dạng lưới, Kanban, gallery, form và lịch mà không cần di chuyển một hàng nào.
Hãy nghĩ về nó như một bảng điều khiển admin trực quan mà đồng đội không chuyên kỹ thuật của bạn có thể sử dụng. Marketing có thể cập nhật dữ liệu chiến dịch. Vận hành có thể chỉnh sửa hàng tồn kho. HR có thể quản lý pipeline ứng viên. Tất cả thông qua giao diện bảng tính quen thuộc, trong khi dữ liệu ở lại database PostgreSQL của bạn nơi các kỹ sư có thể truy vấn bằng SQL, kết nối với Metabase, hoặc replicate sang data warehouse.
NocoDB Hoạt Động Như Thế Nào: Tổng Quan Kiến Trúc #
NocoDB tuân theo kiến trúc database-first. Nó không tự lưu trữ dữ liệu kinh doanh của bạn. Thay vào đó, nó introspect schema database hiện có, đọc cấu trúc bảng, index, và các mối quan hệ, sau đó render chúng thành các dạng xem tương tác.
Các thành phần cốt lõi:
- NocoDB Server — Backend Node.js kết nối với database của bạn qua các driver chuẩn (pg, mysql2, sqlite3)
- Web GUI — Frontend Vue.js cung cấp giao diện bảng tính
- Meta Database — Database SQLite nhẹ (mặc định) hoặc instance PostgreSQL/MySQL chuyên dụng lưu trữ metadata dự án, cấu hình dạng xem, quyền ngườidùng, và cài đặt webhook
- REST/GraphQL API Layer — Các endpoint tự động được tạo cho mọi bảng, với tài liệu Swagger
Khi ngườidùng chỉnh sửa ô trong dạng xem lưới, NocoDB chuyển đổi hành động đó thành câu lệnh SQL UPDATE có tham số được thực thi trực tiếp trên database của bạn. Khi họ tạo dạng xem Kanban, NocoDB lưu cấu hình dạng xem trong meta database trong khi dữ liệu bên dưới không bao giờ di chuyển.
Sự tách biệt này là chìa khóa: dữ liệu của bạn ở lại trong database của bạn. NocoDB chỉ là một thấu kính thông minh.
Cài Đặt & Thiết Lập: Từ Zero Đến Chạy Trong 5 Phút #
Tùy Chọn 1: Docker (Khuyến nghị cho Development) #
Cách nhanh nhất để chạy NocoDB local:
# Tạo thư mục cho dữ liệu NocoDB
mkdir -p ~/nocodb-data && cd ~/nocodb-data
# Chạy NocoDB với Docker (bao gồm SQLite meta DB)
docker run -d \
--name nocodb \
-p 8080:8080 \
-v "$(pwd)/nocodb:/usr/app/data" \
nocodb/nocodb:latest
Truy cập http://localhost:8080 và đăng ký với email và mật khẩu admin. Xong.
Tùy Chọn 2: Docker Compose với PostgreSQL Hiện Có #
Cho production, kết nối NocoDB với database PostgreSQL hiện có:
# docker-compose.yml
version: "3.8"
services:
nocodb:
image: nocodb/nocodb:0.260.7
ports:
- "8080:8080"
environment:
- NC_DB="pg://host.docker.internal:5432?u=postgres&p=yourpassword&d=nocodb_meta"
- DATABASE_URL="postgres://postgres:yourpassword@host.docker.internal:5432/myapp_production"
- NC_AUTH_JWT_SECRET="change-this-to-a-64-char-random-string"
- NC_PUBLIC_URL=https://nocodb.yourcompany.com
volumes:
- ./nocodb-data:/usr/app/data
restart: unless-stopped
Khởi động với:
docker-compose up -d
Tùy Chọn 3: Triển Khai Trên DigitalOcean (Production) #
Cho triển khai VPS production, tạo Droplet $6/tháng trên DigitalOcean và chạy:
# Cập nhật hệ thống
sudo apt update && sudo apt upgrade -y
# Cài đặt Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
# Chạy NocoDB với lưu trữ liên tục
docker run -d \
--name nocodb \
-p 8080:8080 \
-e NC_DB="pg://your-db-host:5432?u=nocodb&p=SECURE_PASS&d=nocodb_meta" \
-e NC_AUTH_JWT_SECRET="$(openssl rand -hex 32)" \
-v /opt/nocodb:/usr/app/data \
--restart unless-stopped \
nocodb/nocodb:0.260.7
Thêm Nguồn Dữ Liệu Đầu Tiên #
Sau khi đăng nhập vào UI NocoDB:
- Click “Add New Base” → “Connect to Data Source”
- Chọn PostgreSQL (hoặc MySQL/SQLite)
- Nhập thông tin kết nối:
# Ví dụ kết nối PostgreSQL
Host: db.yourcompany.com
Port: 5432
Username: app_readwrite
Password: **********
Database: production_app
SSL: Require
NocoDB introspect schema trong ~10 giây và hiển thị tất cả bảng dưới dạng dạng xem bảng tính tương tác.
Tích Hợp: Kết Nối NocoDB Với Stack Hiện Có #
REST API Tự Động Tạo #
Mọi bảng tự động nhận được REST API đầy đủ. Click “API” trên bất kỳ bảng nào để xem tài liệu Swagger:
# Liệt kê tất cả bản ghi trong bảng "customers"
curl -X GET "https://nocodb.yourcompany.com/api/v2/tables/customers/records" \
-H "xc-token: YOUR_API_TOKEN" \
-H "Content-Type: application/json"
# Tạo bản ghi mới
curl -X POST "https://nocodb.yourcompany.com/api/v2/tables/customers/records" \
-H "xc-token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"Email": "alice@example.com",
"Status": "Active",
"Plan": "Enterprise"
}'
# Cập nhật với bộ lọc
curl -X PATCH "https://nocodb.yourcompany.com/api/v2/tables/customers/records" \
-H "xc-token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"id": 42,
"Status": "Churned"
}'
Webhook Automation #
Kích hoạt workflow bên ngoài khi dữ liệu thay đổi:
- Vào Base → Automation → Webhooks
- Click “Add Webhook”
- Cấu hình trigger:
{
"title": "Notify Slack on New Order",
"event": "after.insert",
"table": "orders",
"hook": {
"method": "POST",
"url": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXX",
"headers": {
"Content-Type": "application/json"
},
"body": {
"text": "New order #{{Id}} from {{CustomerEmail}} — Amount: ${{Total}}"
}
}
}
Tích Hợp n8n #
NocoDB hoạt động liền mạch với n8n workflow automation:
# Thông tin xác thực n8n NocoDB node
Host: https://nocodb.yourcompany.com
API Token: noco_xxxxxxxxxxxx
Base ID: your-base-id
Tích Hợp Metabase / BI #
Vì dữ liệu của bạn ở lại PostgreSQL, kết nối Metabase trực tiếp với cùng database để phân tích trong khi NocoDB xử lý lớp chỉnh sửa vận hành:
# Metabase kết nối với cùng database PostgreSQL
# NocoDB xử lý nhập dữ liệu, Metabase xử lý dashboard
# Cả hai đọc từ cùng một nguồn sự thật
Đồng Bộ Từ Airtable (Lộ Trình Di Chuyển) #
Đang chuyển từ Airtable? Xuất CSV, nhập vào NocoDB:
- Airtable → Download CSV cho mỗi bảng
- NocoDB → Add New Table → Import CSV
- Tái tạo linked record fields thành Links trong NocoDB
- Tái tạo các dạng xem (Grid, Kanban, Gallery) với trình xây dựng dạng xem NocoDB
Benchmark & Các Trường Hợp Sử Dụng Thực Tế #
Hiệu Năng: NocoDB vs Airtable #
| Chỉ Số | NocoDB (Tự Lưu Trữ) | Airtable Pro |
|---|---|---|
| Bản ghi mỗi base | Không giới hạn | 50,000 |
| File đính kèm | Giới hạn bởi disk | 20 GB |
| Giới hạn tốc độ API | Không có (server của bạn) | 10 req/sec |
| Ngườidùng đồng thờii | Đã test: 200+ | 50 (gói Pro) |
| Độ trễ cập nhật hàng | ~15ms (PG local) | ~200-500ms |
| Chi phí 20 ngườidùng | $6/tháng (VPS) | $400/tháng |
Số Liệu Triển Khai Thực Tế #
Dựa trên báo cáo cộng đồng và kiểm tra tải:
- CRM Startup: 150,000 bản ghi khách hàng, 15 thành viên team, 3 dạng xem mỗi bảng. PostgreSQL 14 trên VPS 4 vCPU. Thờigian truy vấn trung bình: 23ms.
- Quản Lý Tồn Kho: 50,000 SKU qua 8 kho hàng. REST API được 3 ứng dụng client sử dụng. Zero downtime trong 6 tháng với watchtower tự động cập nhật.
- Theo Dõi Ứng Viên HR: 12 nhân viên tuyển dụng, 8,000 ứng viên, dạng xem Kanban theo giai đoạn tuyển dụng. Chuyển từ Airtable tiết kiệm $2,880/năm.
Thống Kê GitHub (Tháng 5/2026) #
- 53,000+ sao
- 1,200+ contributor
- Phiên bản mới nhất: v0.260.7 (Tháng 4/2026)
- Lượt pull Docker: 5M+
- Discord hoạt động: 4,800+ thành viên
Sử Dụng Nâng Cao: Tăng Cường Production #
1. HTTPS với Nginx Reverse Proxy #
# /etc/nginx/sites-available/nocodb
server {
listen 443 ssl http2;
server_name nocodb.yourcompany.com;
ssl_certificate /etc/letsencrypt/live/yourcompany.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourcompany.com/privkey.pem;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Kích hoạt và khởi động lại:
sudo ln -s /etc/nginx/sites-available/nocodb /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx
2. Bảo Mật Biến Môi Trường #
# Tạo file secrets
sudo mkdir -p /opt/nocodb
sudo tee /opt/nocodb/.env > /dev/null << 'EOF'
NC_DB=pg://db:5432?u=nocodb&p=CHANGE_ME&d=nocodb_meta
NC_AUTH_JWT_SECRET=CHANGE_TO_64_CHAR_RANDOM_STRING
NC_REDIS_URL=redis://redis:6379
NC_SENTRY_DSN=https://xxx@sentry.io/yyy
NC_PUBLIC_URL=https://nocodb.yourcompany.com
EOF
sudo chmod 600 /opt/nocodb/.env
3. Kiểm Soát Truy Cập Dựa Trên Vai Trò #
Cấu hình quyền chi tiết cho mỗi base:
- Project Settings → Data Sources → Users
- Phân quyền:
- Owner — Toàn quyền kiểm soát, có thể xóa base
- Creator — Tạo bảng, dạng xem, automation
- Editor — Chỉnh sửa bản ghi, không thể sửa schema
- Commenter — Chỉ thêm bình luận
- Viewer — Chỉ đọc
Thiết lập quyền cấp cột để ẩn các trường nhạy cảm (ví dụ: lương, CMND) khỏi ngườidùng không thuộc HR.
4. Chiến Lược Sao Lưu Database #
#!/bin/bash
# /opt/backup/nocodb-backup.sh
# Sao lưu dữ liệu PostgreSQL (dữ liệu kinh doanh thực tế)
pg_dump -h db.yourcompany.com -U postgres myapp_db > \
/backups/postgres-$(date +%Y%m%d).sql
# Sao lưu meta database NocoDB
docker exec nocodb-db-1 pg_dump -U nocodb nocodb_meta > \
/backups/nocodb-meta-$(date +%Y%m%d).sql
# Đồng bộ lên S3 (tùy chọn)
aws s3 sync /backups/ s3://yourcompany-backups/nocodb/
# Giữ lại 7 ngày
find /backups -name "*.sql" -mtime +7 -delete
Thêm vào crontab:
0 2 * * * /opt/backup/nocodb-backup.sh >> /var/log/nocodb-backup.log 2>&1
5. Giám Sát với Prometheus #
# docker-compose.monitoring.yml
services:
prometheus:
image: prom/prometheus:v2.51.0
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana:10.4.0
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
volumes:
grafana-data:
So Sánh với Các Giải Pháp Thay Thế #
| Tính Năng | NocoDB | Airtable | Baserow | Teable |
|---|---|---|---|---|
| Giấy Phép | AGPL-3.0 | Độc Quyền | MIT | AGPL-3.0 |
| Tự Lưu Trữ | Có | Không | Có | Có |
| Kết Nối DB Hiện Có | Có (PG, MySQL, SQLite) | Không | Không | Có |
| REST API | Tự động tạo | Giới hạn tốc độ | Tự động tạo | Tự động tạo |
| Dạng xem Kanban | Có | Có | Có | Có |
| Dạng xem Form | Có | Có | Có | Có |
| File đính kèm | Có | 20 GB (Pro) | Có | Có |
| Truy cập dựa trên vai trò | Có | Có | Có | Có |
| Webhook automation | Có | Gói trả phí | Có | Hạn chế |
| Giá (20 ngườidùng) | $6/tháng (VPS) | $400/tháng | $100/tháng | $0 (tự lưu trữ) |
| Giới hạn bản ghi | Không giới hạn | 50,000 (Pro) | Không giới hạn | Không giới hạn |
| Sao GitHub | 53,000 | Không có | 8,200 | 14,500 |
Khi nào chọn NocoDB thay vì:
- vs Airtable: Bạn muốn sở hữu dữ liệu, chi phí thấp hơn, không giới hạn bản ghi, và khả năng kết nối database hiện có.
- vs Baserow: Bạn cần kết nối với database PostgreSQL/MySQL hiện có thay vì tạo mới. Baserow có UI đánh bóng hơn nhưng ép bạn vào mô hình dữ liệu của họ.
- vs Teable: Bạn cần hỗ trợ driver database rộng hơn (NocoDB hỗ trợ SQL Server và MariaDB; Teable tập trung vào PostgreSQL). Teable có tích hợp AI mạnh hơn; NocoDB có tính năng bảng tính sâu hơn.
Hạn Chế: Đánh Giá Trung Thực #
NocoDB không hoàn hảo. Trước khi cam kết, hãy xem xét các ràng buộc sau:
Khoảng cách UI: Giao diện của Airtable mượt mà hơn. Lưới của NocoDB có thể chậm với 100,000+ hàng trong trình duyệt — mặc dù database bên dưới vẫn xử lý tốt.
Không có ứng dụng di động native: Bạn có UI web responsive, nhưng không có ứng dụng iOS/Android chuyên dụng như Airtable.
Hỗ trợ công thức hạn chế: Công thức dùng biểu thức SQL, không phải cú pháp Excel. Ngườidùng không chuyên kỹ thuật cần thờigian làm quen ngắn.
Gánh nặng tự lưu trữ: Bạn phải tự xử lý backup, cập nhật, và bảo mật. Tùy chọn Cloud tồn tại nhưng bắt đầu từ $8/user/tháng, làm giảm lợi thế chi phí.
Cân nhắc giấy phép: Giấy phép AGPL-3.0 của NocoDB yêu cầu phát hành các sửa đổi nếu bạn phân phối phần mềm. Cho sử dụng nội bộ công ty, điều này không thành vấn đề. Cho các sản phẩm SaaS xây dựng trên NocoDB, hãy tham khảo ý kiến pháp lý.
Single Sign-On (SSO): SSO tích hợp (SAML, OIDC) yêu cầu tier Enterprise. Ngườidùng tự lưu trữ có thể giải quyết bằng lớp xác thực reverse proxy.
Câu Hỏi Thường Gặp #
NocoDB có hỗ trợ kết nối đồng thờii với nhiều database không? #
Có. Một instance NocoDB có thể kết nối với nhiều nguồn dữ liệu. Bạn có thể có một base kết nối PostgreSQL, một base khác kết nối MySQL, và base thứ ba dùng SQLite tích hợp — tất cả đều truy cập được từ cùng một dashboard. Mỗi base độc lập với quyền và dạng xem riêng.
NocoDB xử lý thay đổi schema trong database bên dưới như thế nào? #
NocoDB tự động đồng bộ hóa thay đổi schema. Nếu bạn thêm cột qua ALTER TABLE trong PostgreSQL, click “Sync Now” trong cài đặt base, và cột mới sẽ xuất hiện trong NocoDB trong vòng giây. Các dạng xem hiện tại được bảo toàn; bạn chỉ cần thêm trường mới vào các dạng xem cần nó.
Tôi có thể dùng NocoDB làm backend cho ứng dụng hướng đến khách hàng không? #
Có, thông qua REST API. Tuy nhiên, NocoDB được thiết kế như công cụ nội bộ, không phải server API công khai. Cho ứng dụng hướng đến khách hàng, hãy dùng NocoDB làm bảng điều khiển admin cho team, và xây dựng lớp API riêng xác thực logic nghiệp vụ trước khi ghi vào cùng database.
NocoDB gặp sự cố thì sao? Dữ liệu của tôi có an toàn không? #
Dữ liệu của bạn nằm trong database PostgreSQL/MySQL, hoàn toàn tách biệt với NocoDB. Nếu container NocoDB dừng, dữ liệu của bạn không bị ảnh hưởng. Các ứng dụng khác đọc cùng database vẫn hoạt động bình thường. NocoDB chỉ lưu cấu hình dạng xem, tài khoản ngườidùng, và định nghĩa webhook trong meta database của nó.
Làm thế nào để di chuyển từ Airtable sang NocoDB? #
Xuất mỗi bảng Airtable thành CSV. Trong NocoDB, tạo bảng và dùng “Import CSV” để nhập. Tái tạo “Linked Records” của Airtable thành “Links” (quan hệ khóa ngoại) trong NocoDB. Xây dựng lại các dạng xem (Grid, Kanban, Gallery) thủ công. Cộng đồng NocoDB có script di chuyển Airtable-to-NocoDB trên GitHub xử lý chuyển đổi hàng loạt.
NocoDB có hỗ trợ cộng tác real-time như Airtable không? #
Có, nhưng có lưu ý. Nhiều ngườidùng có thể đồng thờichỉnh sửa cùng một base, và thay đổi xuất hiện real-time qua WebSocket. Tuy nhiên, giải quyết xung đột là last-write-wins, không phải operational transforms. Cho hầu hết trường hợp (ngườidùng khác nhau chỉnh sửa hàng khác nhau), điều này ổn. Chỉnh sửa đồng thờinghiêm trọng cùng một hàng có thể gây ghi đè.
Có cách nào chạy NocoDB không cần Docker không? #
Có. NocoDB cung cấp file thực thi độc lập cho Linux, macOS, và Windows. Tải xuống binary mới nhất từ trang GitHub releases, cấp quyền thực thi, và chạy ./nocodb. Tuy nhiên, Docker vẫn là phương pháp triển khai production được khuyến nghị do dễ cập nhật và quản lý dependency.
Kết Luận: Dữ Liệu Củabạn, Quy Tắc Củabạn #
NocoDB lấp đầy một khoảng trống cụ thể: mang lại khả năng sử dụng của Airtable cho team không chuyên kỹ thuật trong khi giữ dữ liệu trong database mà các kỹ sư kiểm soát. 53,000 sao GitHub, chu kỳ phát hành hoạt động, và hệ sinh thái plugin đang phát triển làm cho nó trở thành lựa chọn khả thi cho 2026 và tương lai.
Nếu bạn đang trả Airtable $200+/tháng và đã chạy database PostgreSQL hoặc MySQL, NocoDB hoàn vốn ngay trong tháng đầu tiên. Thiết lập Docker mất 5 phút. Di chuyển từ Airtable là dự án cuối tuần. Tự do sở hữu dữ liệu là vĩnh viễn.
Bắt đầu ngay: Triển khai NocoDB trên DigitalOcean với Droplet $6, hoặc chạy docker run nocodb/nocodb:latest local để khám phá trước khi cam kết.
Tham gia cộng đồng: NocoDB Discord | GitHub Discussions
Công cụ liên quan: n8n Workflow Automation | Metabase BI Setup Guide
Hosting Và Hạ Tầng Được Đề Xuất #
Trước khi triển khai các công cụ trên vào production, bạn cần hạ tầng vững chắc. Hai lựa chọn dibi8 đang dùng:
- DigitalOcean — Credit miễn phí $200 trong 60 ngày, 14+ khu vực toàn cầu. Lựa chọn mặc định cho dev chạy AI tools open source.
- HTStack — VPS Hong Kong, độ trễ thấp khi truy cập từ Trung Quốc. Cùng IDC đang host dibi8.com.
Liên kết tiếp thị — không tăng chi phí của bạn, giúp dibi8.com hoạt động.
Nguồn & Tài Liệu Tham Khảo #
- Tài Liệu Chính Thức NocoDB
- Repository GitHub NocoDB — 53,000+ sao
- NocoDB Docker Hub
- Tài Liệu Tham Khảo API NocoDB
- So Sánh NocoDB và Airtable
- Tài Liệu Chính Thức PostgreSQL
Bài viết này có thể chứa liên kết tiếp thị. Nếu bạn đăng ký DigitalOcean qua liên kết giới thiệu, chúng tôi nhận được hoa hồng mà không phát sinh chi phí thêm cho bạn. Chúng tôi chỉ giới thiệu các dịch vụ mà chính chúng tôi sử dụng.
💬 Bình luận & Thảo luận