Bạn muốn chạy Supabase (Firebase Alternative) trên VPS Fastpanel nhưng gặp lỗi xung đột cổng 8000/3000? Bài viết này hướng dẫn chi tiết cách deploy Supabase với Docker, tách riêng domain cho API và Studio Dashboard để hệ thống hoạt động ổn định nhất.

Supabase là một giải pháp thay thế mã nguồn mở tuyệt vời cho Firebase. Tuy nhiên, việc tự host (Self-host) Supabase trên một VPS đã cài sẵn Control Panel (như Fastpanel, CyberPanel…) thường gặp nhiều khó khăn, đặc biệt là vấn đề Reverse ProxyXung đột cổng (Port Conflict).

Mặc định, Supabase sử dụng cổng 8000 cho API Gateway, cổng này thường bị tranh chấp bởi các dịch vụ khác (như Portainer hoặc Nginx mặc định). Ngoài ra, Dashboard quản trị (Supabase Studio) chạy ẩn ở cổng 3000 và cần được cấu hình đúng cách mới truy cập được.

Trong bài viết này, DPS Media sẽ chia sẻ kinh nghiệm triển khai Supabase trên Ubuntu 24.04 sử dụng Fastpanel, với cấu hình tùy chỉnh cổng: API chạy port 8008Studio chạy port 3003.

1. Chuẩn bị tài nguyên

  • VPS: Ubuntu 22.04 hoặc 24.04 (Khuyên dùng tối thiểu 4GB RAM).
  • Fastpanel: Đã được cài đặt sẵn.
  • Docker & Portainer: Đã cài đặt (Xem bài hướng dẫn trước).
  • Tên miền: Bạn cần chuẩn bị 2 subdomain:
    • studio.domain.com: Dùng cho giao diện quản lý.
    • spb.domain.com: Dùng cho API backend.

2. Tải mã nguồn Supabase

Truy cập SSH vào VPS với quyền root và tải bộ deploy Docker của Supabase:

Bash

# Di chuyển đến thư mục làm việc
cd /opt

# Tải source code từ Github
git clone --depth 1 https://github.com/supabase/supabase

# Vào thư mục chứa cấu hình Docker
cd supabase/docker

3. Cấu hình Docker Compose (Tránh trùng Port)

Đây là bước quan trọng nhất. Chúng ta sẽ không dùng cổng mặc định (8000) để tránh xung đột với Portainer hay các service khác.

Mở file docker-compose.yml:

Bash

nano docker-compose.yml

Thực hiện 2 thay đổi quan trọng:

  1. Mở cổng cho Studio (Giao diện): Tìm service studio, thêm phần ports để map cổng 3003 của VPS vào cổng 3000 của container.
  2. Đổi cổng cho Kong (API): Tìm service kong, sửa map port thành 8008.

Đoạn code sửa đổi sẽ trông như sau:

YAML

services:
  studio:
    image: supabase/studio:2025...
    # ... các config khác giữ nguyên
    ports:
      - "3003:3000"  # Map Host 3003 -> Container 3000

  kong:
    image: kong:2.8.1
    # ... các config khác giữ nguyên
    ports:
      - "8008:8000/tcp" # Map Host 8008 -> Container 8000 (API)
      - "${KONG_HTTPS_PORT}:8443/tcp"

4. Cấu hình biến môi trường (.env)

Copy file mẫu và chỉnh sửa:

Bash

cp .env.example .env
nano .env

Bạn cần điền các mật khẩu mạnh (Database, JWT Secret) và quan trọng nhất là cấu hình URL cho khớp với 2 subdomain đã chuẩn bị.

Các thông số bắt buộc sửa:

Bash

# 1. Bảo mật (Tự tạo chuỗi ngẫu nhiên mạnh)
POSTGRES_PASSWORD=MatKhauDbCucManh!!!
JWT_SECRET=Chuoi_JWT_Bi_Mat_Dai_It_Nhat_32_Ky_Tu
DASHBOARD_PASSWORD=MatKhauDangNhapWeb!!!

# 2. Cấu hình Port API (Phải khớp với file yml ở trên)
KONG_HTTP_PORT=8008

# 3. Cấu hình Domain (Quan trọng)
# SITE_URL: Là địa chỉ truy cập Giao diện Studio
SITE_URL=https://studio.domain.com

# SUPABASE_PUBLIC_URL: Là địa chỉ API (Studio sẽ gọi vào link này để lấy data)
# LƯU Ý: Phải điền domain API, KHÔNG điền domain Studio
SUPABASE_PUBLIC_URL=https://spb.domain.com

# API Auth: Cũng trỏ về domain API
API_EXTERNAL_URL=https://spb.domain.com

# Redirect URL: Thêm cả domain studio vào để login xong quay về đúng chỗ
ADDITIONAL_REDIRECT_URLS=https://studio.domain.com,https://spb.domain.com

5. Khởi chạy Supabase

Sau khi cấu hình xong, chạy lệnh sau để Docker tải và dựng hệ thống:

Bash

docker compose up -d

Lưu ý: Quá trình này có thể mất 5-10 phút để tải khoảng 1GB images.

6. Cấu hình Reverse Proxy trên Fastpanel

Để truy cập được web mà không cần gõ IP:3003, ta dùng tính năng Proxy của Fastpanel.

Trang 1: Giao diện quản lý (Studio)

  1. Tạo site mới: Reverse Proxy.
  2. Domain: studio.domain.com.
  3. Upstream: http://127.0.0.1:3003.
  4. Cực kỳ quan trọng: Vào Settings -> Static Content -> TẮT dòng “Use NGINX for static files”.
  5. Cài SSL Let’s Encrypt.

Page 2: API Backend (Supabase)

  1. Tạo site mới: Reverse Proxy.
  2. Domain: spb.domain.com.
  3. Upstream: http://127.0.0.1:8008.
  4. Cũng TẮT dòng “Use NGINX for static files”.
  5. Cài SSL Let’s Encrypt.

(Lưu ý: Trang spb khi truy cập trực tiếp sẽ báo lỗi 404 Not Found, điều này là bình thường vì API Gateway không có giao diện).

7. Kết quả & Đăng nhập

Bây giờ bạn truy cập vào: https://studio.domain.com

  • Đăng nhập bằng tài khoản: supabase / Mật khẩu bạn đã đặt trong .env.

Thông số kết nối cho Dev:

  • Project URL: https://spb.domain.com
  • Anon/Service Key: Lấy trong Dashboard (Settings -> API).

Kết luận

Việc tách biệt Studio (Port 3003)API (Port 8008 giúp hệ thống Supabase hoạt động mượt mà trên Fastpanel mà không can thiệp vào các dịch vụ mặc định khác. Hy vọng hướng dẫn này giúp bạn tự chủ được hạ tầng Backend mạnh mẽ của mình.


Nguồn: dps.media

DPS.MEDIA