Cách cài đặt Supabase (thay thế Firebase) bằng Docker trên Ubuntu 24.04

theanh

Administrator
Nhân viên
Supabase là một giải pháp thay thế Firebase mã nguồn mở được xây dựng trên cơ sở dữ liệu PostgreSQL, cơ sở dữ liệu quan hệ đáng tin cậy nhất thế giới. Nó cho phép các nhà phát triển xây dựng các ứng dụng web, di động và AI hoàn chỉnh. Supabase cung cấp cơ sở dữ liệu PostgreSQL, xác thực, API, Lưu trữ, đăng ký thời gian thực và nhúng Vector. Với thiết lập đơn giản và giao diện người dùng, các nhà phát triển có thể nhanh chóng xây dựng các ứng dụng trên Supabase.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt Supabase trên máy chủ Ubuntu 24.04. Bạn sẽ chạy Supabase với các vùng chứa có Docker và bảo mật Supabase với xác thực bằng mật khẩu và mã thông báo JWT. Cuối cùng, bạn cũng sẽ học cách thiết lập Nginx làm proxy ngược cho Supabase.

Điều kiện tiên quyết​

Để bắt đầu với hướng dẫn này, hãy đảm bảo bạn có những điều sau:
  • Máy chủ Ubuntu 24.04
  • Người dùng không phải root có quyền quản trị viên
  • Tên miền trỏ đến địa chỉ IP của máy chủ

Cài đặt Docker Engine​

Để triển khai Supabase trên máy chủ của bạn, bạn cần cài đặt Docker Engine trên máy của mình. Các ứng dụng Supabase sẽ chạy như một vùng chứa trên máy chủ của bạn.

Trong phần này, bạn sẽ cài đặt Docker Engine thông qua kho lưu trữ Docker chính thức.

Trước tiên, hãy chạy lệnh bên dưới để cập nhật chỉ mục gói Ubuntu của bạn và cài đặt các gói như 'ca-certificates', 'curl' và 'git'.
Mã:
sudo apt update
sudo apt install -y ca-certificates curl git

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22705%22%20height=%22242%22%3E%3C/svg%3E


Bây giờ hãy chạy lệnh sau để thêm khóa GPG cho Docker Engine kho lưu trữ.
Mã:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Thêm kho lưu trữ Docker Engine cho máy chủ Ubuntu của bạn bằng cách thực hiện lệnh bên dưới.
Mã:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22388%22%3E%3C/svg%3E


Sau khi thêm khóa GPG Docker và kho lưu trữ, hãy chạy lệnh 'apt' bên dưới để làm mới chỉ mục gói của bạn và cài đặt Docker Engine. Với điều này, bạn cũng sẽ cài đặt các plugin Docker Compose và buildx.
Mã:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Nhập 'Y' để xác nhận cài đặt.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22265%22%3E%3C/svg%3E

Thêm người dùng vào Docker Nhóm​

Trong hướng dẫn này, bạn sẽ chạy Supabase với tư cách là người dùng không phải root, vì vậy hãy đảm bảo rằng bạn đã tạo một người dùng chuyên dụng. Sau đó, bạn cần thêm người dùng của mình vào nhóm 'docker', nhóm này sẽ cho phép người dùng chạy container.

Thêm người dùng của bạn vào nhóm 'docker' bằng lệnh bên dưới. Điều này sẽ cho phép người dùng của bạn thực thi và chạy các container.
Mã:
sudo usermod -aG sudo username
Đăng nhập vào người dùng của bạn bằng lệnh 'su' bên dưới.
Mã:
su - username
Cuối cùng, thực thi lệnh 'docker' bên dưới để chạy 'hello-world' container.
Mã:
docker run hello-world
Nếu mọi việc diễn ra tốt đẹp, bạn sẽ thấy thông báo 'Xin chào thế giới' từ Docker.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22316%22%3E%3C/svg%3E

Tải xuống và cài đặt Supabase​

Bây giờ bạn đã cài đặt Docker, bước tiếp theo là tải Supabase xuống và chạy nó như một container. Trong phần này, bạn sẽ tìm hiểu cách thiết lập và chạy Supabase, và sau đó, bạn sẽ tìm hiểu cách bảo mật nó.

Tải xuống mã nguồn 'supabase' bằng lệnh 'git' bên dưới.
Mã:
git clone --depth 1 https://github.com/supabase/supabase
Di chuyển đến thư mục 'supabase/docker' và sao chép tệp '.env.example' vào '.env'. Tệp này sẽ được sử dụng để cấu hình cài đặt Supabase của bạn.
Mã:
cd supbase/docker
cp .env.example .env
Tiếp theo, hãy chạy lệnh 'docker compose' bên dưới để tải xuống hình ảnh Supase từ kho lưu trữ Docker. Thao tác này sẽ tải xuống nhiều hình ảnh cho Supabase.
Mã:
docker compose pull
Bạn có thể xem quy trình tải xuống hình ảnh Supabase Docker bên dưới.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22687%22%20height=%22381%22%3E%3C/svg%3E


Sau khi quy trình hoàn tất, hãy thực thi lệnh sau để khởi động vùng chứa Supabase. Với tùy chọn '-d', bạn sẽ chạy các container ở chế độ nền, do đó nhật ký cho các container Supbase sẽ không được hiển thị.
Mã:
docker compose up -d

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22591%22%20height=%22496%22%3E%3C/svg%3E


Cuối cùng, hãy chạy lệnh 'docker compose' bên dưới để kiểm tra trạng thái của các container Supbase.
Mã:
docker compose ps
Trong kết quả đầu ra bên dưới, bạn có thể thấy rằng các container Supbase như 'supabase-auth', 'supabase-kong', 'supabase-rest' và 'supabase-studio' đang chạy.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22233%22%3E%3C/svg%3E

Bảo mật Supabase​

Hiện tại, Supabase đang hoạt động trên hệ thống của bạn, nhưng không có mật khẩu và xác thực phù hợp. Vì vậy, hiện tại, bạn sẽ bảo mật cài đặt Supabase bằng cách thay đổi thông tin đăng nhập trong tệp '.env'.

Trước khi bắt đầu, hãy tạo mật khẩu cho máy chủ PostgreSQL và bảng điều khiển Supabase, sau đó tạo bí mật và mã thông báo JWT.

Thực hiện lệnh bên dưới hai lần để tạo mật khẩu an toàn cho bảng điều khiển Supabase và máy chủ PostgreSQL.
Mã:
openssl rand -hex 16

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22497%22%20height=%22175%22%3E%3C/svg%3E


Bây giờ hãy truy cập vào trang webSupabaseđể tạo hai mã thông báo JWT cho Supabase. Hãy đảm bảo ghi lại những thông tin sau:
  • JWT Secret
  • Key cho cả ANON_KEYSERVICE_KEY
  • Tạo mã thông báo JWT cho cả hai

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22560%22%3E%3C/svg%3E


Bây giờ bạn đã tạo mật khẩu và mã thông báo cho Supabase, hãy áp dụng chúng bằng cách chỉnh sửa tệp '.env'.

Mở tệp '.env' bằng 'vim' biên tập viên.
Mã:
vim .env
Dán mật khẩu OpenSSL đã tạo của bạn vào tùy chọn 'POSTGRES_PASSWORD'.
Mã:
POSTGRES_PASSWORD=f489d6f61514eb90fbf57fb574c3d367
Nhập khóa bí mật JWT của bạn vào 'JWT_SECRET' tùy chọn.
Mã:
JWT_SECRET=PUaiJLm1PKAebJJRIdXylVJrfgGbRWdWvzN0EUgh
Thay thế giá trị 'ANON_KEY' bằng mã thông báo JWT đã tạo của bạn cho người dùng 'anon'.
Mã:
ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogImFub24iLAogICJpc3MiOiAic3VwYWJhc2UiLAogICJpYXQiOiAxNzM2MzU1NjAwLAogICJleHAiOiAxODk0MTIyMDAwCn0.f8_wST3WX1bmvsHttRokJPCz7-rpyjU8HMNnYH7kSd4
Thay thế giá trị 'SERVICE_ROLE_KEY' bằng mã thông báo JWT đã tạo của bạn cho Người dùng 'service_role'.
Mã:
SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogInNlcnZpY2Vfcm9sZSIsCiAgImlzcyI6ICJzdXBhYmFzZSIsCiAgImlhdCI6IDE3MzYzNTU2MDAsCiAgImV4cCI6IDE4OTQxMjIwMDAKfQ.DOo1lqH76AR_jCx0N9QDZBEdrQ8T_JBQqc7CagD1mWM
Nếu bạn đang triển khai trên máy chủ công cộng, hãy nhập thông tin chi tiết về máy chủ SMTP của bạn.
Mã:
Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=false
[emailprotected]
SMTP_HOST=smtp.server.address
SMTP_PORT=2500
SMTP_USER=username
SMTP_PASS=password
SMTP_SENDER_NAME=sender_name
ENABLE_ANONYMOUS_USERS=false
Nhập tên người dùng và mật khẩu của bạn cho cả hai tùy chọn 'DASHBOARD_USERNAME' và 'DASHBOARD_PASSWORD'. Người dùng này sẽ được sử dụng để đăng nhập vào Supabase.
Mã:
DASHBOARD_USERNAME=supabase
DASHBOARD_PASSWORD=91521851a4e1375145959eecddfaff45
Nhập tên miền của bạn vào các tùy chọn 'SITE_URL', 'API_EXTERNAL_URL' và 'SUPABASE_PUBLIC_URL'. Trong ví dụ này, chúng tôi sẽ sử dụng tên miền 'https://supabase.howtoforge.local'.
Mã:
SITE_URL=https://supabase.howtoforge.local
API_EXTERNAL_URL=https://supabase.howtoforge.local
SUPABASE_PUBLIC_URL=https://supabase.howtoforge.local
Lưu tệp và thoát khỏi trình chỉnh sửa khi hoàn tất.

Bây giờ hãy chạy lệnh 'docker' bên dưới để dừng và xóa các vùng chứa Supabase.
Mã:
docker compose down
Sau đó tạo lại các container cho Supabase bằng lệnh sau.
Mã:
docker compose up -d
Khi mọi thứ đã chạy, hãy kiểm tra từng dịch vụ container bằng lệnh bên dưới.
Mã:
docker compose ps
Bạn có thể thấy bên dưới rằng từng container cho Supabase đang chạy.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22211%22%3E%3C/svg%3E


Thiết lập Nginx làm Proxy ngược cho Supabase

Bây giờ Supabase đã được bảo mật, hãy cài đặt máy chủ web Nginx và cấu hình nó làm proxy ngược cho Supabase. Hãy đảm bảo rằng bạn đã chuẩn bị tên miền và trỏ đến địa chỉ IP của máy chủ.

Cài đặt Nginx bằng lệnh 'apt' sau.
Mã:
sudo apt install nginx -y
Bây giờ hãy tạo cấu hình khối máy chủ Nginx mới '/etc/nginx/sites-available/supabase' bằng 'vim' biên tập viên.
Mã:
sudo vim /etc/nginx/sites-available/supabase
Dán cấu hình sau và đảm bảo thay đổi tên miền trong tùy chọn 'server_name'.
Mã:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

upstream kong {
server localhost:8000;
}

server {
listen 80;
server_name supabase.howtoforge.local;

# REST
location ~ ^/rest/v1/(.*)$ {
proxy_set_header Host $host;
proxy_pass http://kong;
proxy_redirect off;
}

# AUTH
location ~ ^/auth/v1/(.*)$ {
proxy_set_header Host $host;
proxy_pass http://kong;
proxy_redirect off;
}

# REALTIME
location ~ ^/realtime/v1/(.*)$ {
proxy_redirect off;
proxy_pass http://kong;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
}

# STUDIO
location / {
proxy_set_header Host $host;
proxy_pass http://kong;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
}
}
Lưu tệp và thoát khỏi trình chỉnh sửa khi hoàn tất.

Tiếp theo, thực hiện lệnh bên dưới để kích hoạt khối máy chủ Supabase và xác minh cú pháp Nginx của bạn. Nếu không có lỗi, bạn sẽ nhận được thông báo 'syntax is ok - test is successful'.
Mã:
sudo ln -s /etc/nginx/sites-available/supabase /etc/nginx/sites-enabled/
sudo nginx -t

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22157%22%3E%3C/svg%3E


Bây giờ hãy chạy lệnh 'systemctl' bên dưới để khởi động lại máy chủ web Nginx và áp dụng các thay đổi của bạn. Với điều này, cài đặt Supabase của bạn sẽ chạy dưới Proxy ngược Nginx.
Mã:
sudo systemctl restart nginx
Cuối cùng, thực hiện lệnh 'systemctl' bên dưới để xác minh dịch vụ Nginx và đảm bảo rằng dịch vụ đang chạy.
Mã:
sudo systemctl status nginx
Nếu mọi thứ diễn ra tốt đẹp, bạn sẽ thấy đầu ra như sau.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22255%22%3E%3C/svg%3E

Bảo mật Supabase bằng HTTPS​

Sau khi Nginx được thiết lập và chạy như một proxy ngược, hãy tạo chứng chỉ SSL và bật HTTPS để bảo mật cài đặt Supabase.

Nếu bạn đang ở chế độ phát triển, bạn có thể bỏ qua phần này và để Supabase với HTTPS. Đối với sản xuất, bạn phải triển khai HTTPS để bảo mật máy chủ Supabase của mình.

Cài đặt Certbot và Nginx Certbot Plugin bằng lệnh 'apt' bên dưới. Nhập 'Y' để xác nhận cài đặt.
Mã:
sudo apt install certbot python3-certbot-nginx
Sau khi cài đặt hoàn tất, hãy thực hiện lệnh 'certbot' bên dưới để tạo chứng chỉ SSL cho tên miền của bạn. Đảm bảo thay đổi tên miền và địa chỉ email trong lệnh.
Mã:
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [emailprotected] -d supabase.howtoforge.local
Sau khi hoàn tất, chứng chỉ SSL của bạn sẽ có tại thư mục '/etc/letsencrypt/live/domain.com' và Supabase sẽ được bảo mật bằng HTTPS tự động thông qua plugin Nginx Certbot.

Truy cập Supabase Studio​

Để truy cập Supabase, hãy mở trình duyệt web của bạn và truy cập https://supabase.howtoforge.local. Nếu cài đặt thành công, bạn sẽ được nhắc xác thực mật khẩu cơ bản.

Nhập tên người dùng và mật khẩu trong các tùy chọn 'DASHBOARD_USERNAME' và 'DASHBOARD_PASSWORD' rồi nhấp vào 'Đăng nhập'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22532%22%20height=%22257%22%3E%3C/svg%3E


Nếu thành công, bạn sẽ thấy Bảng điều khiển Supabase sau.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22366%22%3E%3C/svg%3E

Kết luận​

Xin chúc mừng! Bạn đã hoàn tất cài đặt Supabase trên máy chủ Ubuntu 24.04 thông qua Docker. Bạn đã triển khai và bảo mật Supabase bằng mã thông báo JWT xác thực mật khẩu, sau đó cài đặt và cấu hình Nginx làm proxy ngược. Cuối cùng, bạn cũng đã bảo mật Supabase bằng HTTPS thông qua Certbot và Letsencrypt. Từ đây, giờ bạn có thể thử tạo cơ sở dữ liệu mới, chèn dữ liệu vào Supabase, sau đó tạo các ứng dụng đơn giản bằng mô-đun Supabase để giao tiếp qua REST API.
 
Back
Bên trên