Tự Host Supabase Trên VPS Ubuntu Setup Production An Toàn, Từ A-Z
Tự Host Supabase Trên Ubuntu Server đang trở thành giải pháp tối ưu cho các lập trình viên muốn sở hữu nền tảng Backend-as-a-Service (BaaS) hoàn chỉnh mà không phải gánh chịu chi phí tăng vọt theo quy mô từ các dịch vụ đám mây công cộng. Việc phụ thuộc vào nền tảng đóng gói […]
Tự Host Supabase Trên Ubuntu Server đang trở thành giải pháp tối ưu cho các lập trình viên muốn sở hữu nền tảng Backend-as-a-Service (BaaS) hoàn chỉnh mà không phải gánh chịu chi phí tăng vọt theo quy mô từ các dịch vụ đám mây công cộng. Việc phụ thuộc vào nền tảng đóng gói sẵn khiến bạn khó kiểm soát toàn quyền cơ sở dữ liệu PostgreSQL và đối mặt rủi ro khóa mã nguồn. Với hạ tầng máy chủ linh hoạt từ ThueVPSGiaRe.vn, bạn hoàn toàn có thể tự vận hành cụm Supabase ổn định, an toàn và tối ưu tài nguyên từ A-Z.
1. Tổng quan kiến trúc và yêu cầu cấu hình phần cứng để tự host Supabase
Supabase được xem là giải pháp mã nguồn mở thay thế trực tiếp cho Firebase, vận hành dựa trên lõi cơ sở dữ liệu quan hệ PostgreSQL mạnh mẽ kết hợp cùng hàng loạt dịch vụ mở rộng. Thay vì là một ứng dụng nguyên khối (monolithic), Supabase bao gồm một cụm microservices chạy đồng thời khoảng 10 đến 12 container độc lập để xử lý từng chức năng chuyên biệt.
Các thành phần cốt lõi trong hệ sinh thái Supabase bao gồm:
- PostgreSQL Database: Trung tâm lưu trữ dữ liệu chính, tích hợp sẵn các phần mở rộng hữu ích như pgvector cho tác vụ AI và tìm kiếm vector.
- GoTrue (Supabase Auth): Dịch vụ quản lý xác thực người dùng, đăng ký, đăng nhập và tích hợp OAuth providers.
- PostgREST: Tự động chuyển đổi schema trong PostgreSQL thành chuẩn RESTful API tốc độ cao.
- Realtime Engine: Lắng nghe các thay đổi dữ liệu từ Postgres qua cơ chế WAL để truyền phát thời gian thực tới máy khách qua WebSockets.
- Supabase Storage: Quản lý tải lên và phân phối tệp tin với quyền hạn được phân cấp chi tiết qua Row Level Security (RLS) của Postgres.
- Kong API Gateway: Cổng điều phối API trung tâm, định tuyến lưu lượng vào các service nội bộ và kiểm tra API Key.
- Supabase Studio: Giao diện Dashboard trực quan trên nền web hỗ trợ quản lý bảng, truy vấn SQL và phân quyền người dùng.
Vì cụm microservices này vận hành nhiều tiến trình nền, việc phân bổ cấu hình máy chủ không đủ dung lượng có thể kích hoạt trình xử lý Out Of Memory (OOM Killer) của nhân Linux, làm sập container cơ sở dữ liệu.

Bạn có thể sử dụng các lệnh kiểm tra cấu hình VPS trước khi cài đặt nhằm đối chiếu với bảng thông số tiêu chuẩn sau:
| Môi trường triển khai | Số lượng vCPU | Dung lượng RAM | Ổ cứng lưu trữ | Mục đích khuyến nghị |
|---|---|---|---|---|
| Tối thiểu (Dev / Test) | 2 vCPU | 4 GB RAM | 30 – 50 GB SSD | Thử nghiệm, dự án cá nhân, lượng request thấp |
| Khuyến nghị (Production SME) | 4 vCPU | 8 GB RAM | 80 – 100 GB NVMe | Sản phẩm thực tế, chạy ổn định cho ứng dụng vừa |
| Quy mô lớn (High Realtime) | 8 vCPU trở lên | 16 – 32 GB RAM | 200 GB+ NVMe | Hàng triệu bản ghi, WebSocket kết nối liên tục |
Đối với các hệ thống Production có khối lượng công việc mở rộng, lựa chọn phương án như sử dụng gói máy chủ VPS 8GB RAM sẽ giúp đảm bảo tiến trình PostgreSQL và Kong API Gateway duy trì lượng bộ nhớ đệm cần thiết mà không gặp tình trạng thắt nút cổ chai.
2. Bước 1: Chuẩn bị Ubuntu Server và cài đặt Docker Compose
Các phiên bản hệ điều hành được khuyến nghị ưu tiên triển khai gồm Ubuntu 22.04 LTS hoặc Ubuntu 24.04 LTS nhờ tính ổn định lâu dài và khả năng tương thích gói thư viện cao. Trước khi bắt đầu, hãy thực hiện thao tác kết nối SSH vào máy chủ Linux bằng tài khoản có quyền sudo hoặc root để tiến hành cập nhật hệ thống.

Chạy các lệnh sau để đồng bộ kho phần mềm và nâng cấp các gói hiện có:
# Cập nhật danh sách gói và nâng cấp hệ thống
sudo apt update && sudo apt upgrade -y
# Cài đặt các thư viện bổ trợ cần thiết
sudo apt install -y curl apt-transport-https ca-certificates gnupg lsb-release git
Supabase sử dụng phiên bản Docker Compose V2 plugin (sử dụng cú pháp docker compose không có dấu gạch ngang). Nếu bạn cần tìm hiểu sâu hơn về kiến trúc container hóa này, có thể đọc thêm bài hướng dẫn cài đặt Docker Compose trên hệ điều hành Ubuntu. Quy trình thiết lập repository chính thức và cài đặt Docker Engine thực hiện như sau:
# Khởi tạo thư mục keyring và bổ sung GPG key chính thức của Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Đăng ký repository của Docker vào danh sách apt
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Tiến hành cài đặt Docker Engine và Docker Compose plugin
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Kiểm tra trạng thái và phiên bản đã cài
docker --version
docker compose version
3. Bước 2: Tải mã nguồn Supabase và cấu hình biến môi trường an toàn
Để tối ưu hóa không gian lưu trữ và tránh kéo toàn bộ kho tài nguyên khổng lồ của Supabase, chúng ta chỉ lấy phần mã nguồn chứa cấu hình triển khai Docker bằng cách giới hạn độ sâu (shallow clone) với tham số --depth 1.
# Clone thư mục cấu hình từ repository chính thức của Supabase
git clone --depth 1 https://github.com/supabase/supabase
# Di chuyển trực tiếp vào thư mục docker
cd supabase/docker
# Tạo file biến môi trường từ file mẫu
cp .env.example .env
Lưu ý bảo mật đặc biệt quan trọng: File mẫu .env.example chỉ chứa các chuỗi mật khẩu và khóa JWT mặc định dùng cho thử nghiệm. Nếu giữ nguyên các giá trị này khi chạy thực tế, bất kỳ đối tượng nào cũng có thể khai thác và kiểm soát cơ sở dữ liệu của bạn. Do đó, bạn cần tạo lại toàn bộ chuỗi bí mật.
Bạn có thể sinh chuỗi bí mật ngẫu nhiên qua OpenSSL trên cửa sổ dòng lệnh:
# Sinh chuỗi ngẫu nhiên cho JWT Secret
openssl rand -hex 32
# Sinh mật khẩu an toàn cho tài khoản root của PostgreSQL
openssl rand -base64 24
Ngoài ra, trong thư mục của Supabase có cung cấp sẵn tập lệnh hỗ trợ tự động sinh lại các cặp key bảo mật. Bạn có thể kích hoạt tập lệnh này:
# Chạy script tự động cập nhật các khóa bí mật vào file .env
sh ./utils/generate-keys.sh
Tiếp tục mở file cấu hình bằng lệnh nano .env để rà soát và điều chỉnh các tham số thiết yếu:
- POSTGRES_PASSWORD: Mật khẩu quản trị cơ sở dữ liệu PostgreSQL.
- JWT_SECRET: Khóa bí mật dùng để xác thực và ký token cho toàn bộ hệ thống API.
- ANON_KEY & SERVICE_ROLE_KEY: Token phân quyền truy cập cho client công khai và dịch vụ backend đặc quyền.
- DASHBOARD_USERNAME & DASHBOARD_PASSWORD: Tài khoản và mật khẩu dùng để truy cập Supabase Studio Dashboard.
- SUPABASE_PUBLIC_URL & API_EXTERNAL_URL: Địa chỉ tên miền công khai sẽ gắn vào hệ thống (ví dụ:
https://api.yourdomain.comhoặc tên miền kèm porthttp://your-server-ip:8000khi chưa có domain).
4. Bước 3: Khởi chạy cụm container Supabase với Docker Compose
Sau khi đã hoàn tất lưu cấu hình tại file .env, bước tiếp theo là tải các Image chính thức từ Docker Hub và khởi động toàn bộ cụm dịch vụ dưới dạng tiến trình chạy ngầm (detached mode).
# Kéo phiên bản Docker Image mới nhất của từng container
docker compose pull
# Kích hoạt toàn bộ cụm dịch vụ
docker compose up -d
Để kiểm tra xem các container đã hoạt động đầy đủ và không gặp sự cố crash, hãy sử dụng lệnh liệt kê trạng thái tiến trình:
# Kiểm tra danh sách container đang chạy
docker compose ps
Kết quả hiển thị trên terminal cần đảm bảo các service thiết yếu như supabase-db, supabase-kong, supabase-auth, supabase-studio, supabase-storage đều hiển thị trạng thái Up hoặc healthy. Tại thời điểm này, bạn đã có thể truy cập trực tiếp trang quản trị Supabase Studio qua địa chỉ IP máy chủ tại cổng mặc định http://your-server-ip:8000.

5. Bước 4: Thiết lập Reverse Proxy Nginx, SSL và tường lửa UFW
Trong môi trường vận hành thực tế, việc mở trực tiếp các cổng nội bộ như port 8000 hay port 3000 ra môi trường Internet tiềm ẩn nhiều rủi ro bị quét cổng và tấn công. Giải pháp chuyên nghiệp là sử dụng máy chủ web đóng vai trò làm reverse proxy tiếp nhận lưu lượng truy cập qua giao thức HTTPS chuẩn bảo mật.
Nhờ khả năng xử lý đồng thời hàng nghìn kết nối nhẹ nhàng, lựa chọn triển khai web server mã nguồn mở Nginx làm cổng chuyển tiếp lưu lượng là phương án được sử dụng phổ biến nhất. Cài đặt Nginx cùng công cụ Certbot thông qua lệnh:
# Cài đặt Nginx và Certbot hỗ trợ Nginx
sudo apt install -y nginx certbot python3-certbot-nginx
Tạo tệp cấu hình Virtual Host tại đường dẫn /etc/nginx/sites-available/supabase.conf để phân luồng truy cập cho Supabase Studio (quản trị) và Kong (API Gateway):
# Cấu hình chuyển tiếp cho Supabase Studio Dashboard
server {
server_name studio.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}
# Cấu hình chuyển tiếp cho Kong API Gateway
server {
server_name api.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8000;
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 cấu hình, kiểm tra cú pháp và tiến hành cài đặt chứng chỉ SSL Let’s Encrypt qua Certbot hoàn toàn tự động:
# Tạo liên kết kích hoạt Virtual Host
sudo ln -s /etc/nginx/sites-available/supabase.conf /etc/nginx/sites-enabled/
# Kiểm tra cú pháp cấu hình Nginx
sudo nginx -t
# Tải lại dịch vụ Nginx
sudo systemctl reload nginx
# Đăng ký và gắn chứng chỉ SSL miễn phí tự động
sudo certbot --nginx -d studio.yourdomain.com -d api.yourdomain.com
Để hoàn thiện lớp phòng vệ cho máy chủ, bạn cần tiến hành thiết lập tường lửa UFW trên Ubuntu nhằm đóng toàn bộ các cổng truy cập cơ sở dữ liệu nhạy cảm (như 5432, 6543) và cổng dịch vụ nội bộ, chỉ giữ lại các cổng công khai cần thiết:
# Đặt chính sách mặc định: Chặn toàn bộ kết nối vào, cho phép kết nối ra
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Chỉ mở cổng SSH và cổng web Nginx tiếp nhận
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Kích hoạt tường lửa UFW
sudo ufw enable
sudo ufw status
6. Bước 5: Giám sát Container, sao lưu cơ sở dữ liệu và phương án độ sẵn sàng cao
Khi đưa hệ thống vào hoạt động liên tục, việc giám sát nhật ký (logs) và sao lưu định kỳ là điều kiện tiên quyết giúp bạn chủ động xử lý sự cố phát sinh.
1. Kiểm tra nhật ký hoạt động của các dịch vụ: Khi gặp lỗi phản hồi từ API hoặc bảng điều khiển không tải được dữ liệu, bạn có thể kiểm tra trực tiếp nhật ký từ container cơ sở dữ liệu hoặc gateway:
# Theo dõi log thời gian thực của container cơ sở dữ liệu PostgreSQL
docker compose logs -f db
# Theo dõi log xử lý định tuyến của Kong API Gateway
docker compose logs -f kong
2. Sao lưu cơ sở dữ liệu PostgreSQL: Bạn có thể xuất toàn bộ schema và dữ liệu từ bên trong container bằng tiện ích pg_dumpall mà không cần cài đặt thêm công cụ bên ngoài máy chủ:
# Xuất và nén toàn bộ database ra file sql.gz theo mốc thời gian
docker compose exec -T db pg_dumpall -U postgres | gzip > "supabase_backup_$(date +%Y%m%d_%H%M%S).sql.gz"
3. Phương án mở rộng và đảm bảo tính sẵn sàng cao (High Availability):
- Mô hình dự phòng cơ bản (Basic Redundancy): Sử dụng 2 máy chủ ảo kết hợp dịch vụ DNS/Proxy như Cloudflare để xử lý failover. Một node chính chạy toàn bộ dịch vụ Supabase, node phụ chạy PostgreSQL ở chế độ streaming replication để sẵn sàng thay thế khi node chính gặp sự cố phần cứng.
- Cụm máy chủ PostgreSQL (Cluster Failover): Xây dựng cụm tối thiểu 3 node PostgreSQL với công cụ Patroni quản lý tự động chuyển đổi dự phòng (automatic failover), trong khi các dịch vụ stateless (Kong, PostgREST, Auth) chạy phân tách riêng biệt.
- Nâng cấp hạ tầng khi mở rộng: Khi quy mô cơ sở dữ liệu vượt ngưỡng hàng trăm Gigabyte và tính năng tìm kiếm qua pgvector đòi hỏi tốc độ I/O cao, việc hiểu rõ bản chất sự khác biệt giữa VPS và Cloud Server sẽ giúp bạn đưa ra quyết định chuyển đổi hạ tầng đúng thời điểm, đảm bảo khả năng mở rộng tài nguyên tính toán tức thì mà không gián đoạn dịch vụ.
7. Câu hỏi thường gặp khi tự host Supabase trên Ubuntu (FAQ)
Dưới đây là giải đáp chi tiết cho những vướng mắc phổ biến nhất khi triển khai cụm Supabase tự quản lý trên máy chủ ảo Ubuntu Server.
Tự host Supabase có hỗ trợ đầy đủ các tính năng như bản Cloud không?
Phiên bản tự host cung cấp hầu hết các tính năng cốt lõi gồm PostgreSQL Database, Row Level Security, Auth, Realtime, RESTful API và Storage. Tuy nhiên, một số thành phần như Supabase Edge Functions (dùng Deno runtime) đòi hỏi cấu hình bổ sung phức tạp hơn so với việc kích hoạt sẵn trên giao diện bản Cloud quản lý tập trung.
Tại sao container supabase-db thường xuyên bị tự động thoát (Exit/Restart)?
Nguyên nhân phổ biến nhất là máy chủ bị tràn RAM. Khi dung lượng RAM thực tế dưới 4GB, tiến trình PostgreSQL và các container đi kèm sẽ bị cơ chế Out Of Memory (OOM Killer) của Linux can thiệp để bảo vệ hệ điều hành. Hãy nâng cấp RAM hoặc tạo thêm phân vùng bộ nhớ ảo (Swap) để xử lý tạm thời.
Tôi có thể kết nối công cụ quản trị ngoài (DBeaver, pgAdmin) vào Supabase không?
Có. Bạn có thể kết nối trực tiếp vào PostgreSQL qua cổng mặc định 5432 (hoặc qua port bouncers 6543) bằng mật khẩu khai báo trong biến POSTGRES_PASSWORD. Để an toàn, chỉ nên mở cổng này cho địa chỉ IP mạng cố định của bạn hoặc kết nối thông qua SSH Tunnel thay vì mở công khai qua Internet.
Quy trình Tự Host Supabase Trên Ubuntu Server mang lại cho các nhóm phát triển quyền làm chủ toàn diện hạ tầng cơ sở dữ liệu, tối ưu chi phí vận hành và linh hoạt tùy chỉnh môi trường phần mềm theo nhu cầu. Để hệ thống luôn chạy mượt mà, hãy chú trọng phân bổ dung lượng phần cứng tối thiểu từ 4GB đến 8GB RAM, luôn tái tạo chuỗi bảo mật JWT trước khi chạy Production và định cấu hình Nginx Reverse Proxy kèm tường lửa nghiêm ngặt. Khi được thiết lập chuẩn xác, bạn sẽ sở hữu một hệ thống BaaS mạnh mẽ phục vụ hàng ngàn người dùng mà không lo phụ thuộc vào nền tảng thứ ba.
Cần một VPS giá rẻ để bắt đầu?
Chọn cấu hình vừa đủ nhu cầu, ưu tiên chi phí dễ tiếp cận và khả năng quản trị riêng.
Nội dung bài viết mang tính tham khảo kỹ thuật. Các cú pháp lệnh, file cấu hình và thông số hệ thống có thể thay đổi tùy thuộc vào phiên bản phát hành của Supabase, Docker cũng như môi trường hệ điều hành cụ thể. Quản trị viên nên chủ động kiểm thử trong môi trường thử nghiệm, thiết lập cơ chế sao lưu dữ liệu và đánh giá rủi ro an toàn mạng trước khi áp dụng vào hệ thống thực tế.



