Supabase adalah alternatif Firebase open-source yang menyediakan semua alat yang dibutuhkan untuk mengembangkan aplikasi Anda. Supabase menawarkan database PostgreSQL, autentikasi pengguna, penyimpanan, dan API waktu nyata serta terintegrasi dengan kerangka kerja dan alat populer seperti Angular, Flutter, Next.js, React, Svelte, dan Vue.
Ada dua cara menggunakan Supabase. Opsi pertama adalah mendaftar ke aplikasi yang dihosting cloud mereka, yang menawarkan lebih banyak fitur. Opsi kedua adalah menghosting sendiri kode menggunakan Docker. Namun, ada beberapa peringatan tentang hosting sendiri. Anda tidak dapat membuat atau mengelola proyek. Selain itu, seluruh proyek berada dalam fase beta, dan Anda harus menggunakan versi yang dihosting sendiri hanya untuk pengujian dan pengembangan lokal. Untuk semua tujuan lain, Anda harus menggunakan aplikasi cloud mereka.
Dalam tutorial ini, Anda akan mempelajari cara menginstal Supabase di server berbasis Debian 11 dan mem-proxy-nya melalui server Nginx.
Prasyarat
-
Server yang menjalankan Debian 11 dengan RAM minimal 2 GB.
-
Pengguna non-root dengan hak istimewa sudo.
-
Nama domain (
supabase.example.com
) menunjuk ke server. -
Semuanya diperbarui.
$ sudo apt update &&sudo apt upgrade
-
Beberapa paket yang dibutuhkan sistem Anda.
$ sudo apt install nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring -y
Beberapa paket ini mungkin sudah diinstal pada sistem Anda.
Langkah 1 - Konfigurasi Firewall
Langkah pertama adalah mengkonfigurasi firewall. Debian hadir dengan ufw (Firewall Tidak Kompleks).
Periksa apakah firewall sedang berjalan.
$ sudo ufw status
Anda akan mendapatkan output berikut.
Status:tidak aktif
Izinkan port SSH agar firewall tidak memutus koneksi saat ini saat mengaktifkannya.
$ sudo ufw izinkan OpenSSH
Izinkan port HTTP dan HTTPS juga.
$ sudo ufw izinkan 80/tcp$ sudo ufw izinkan 443/tcp
Aktifkan Firewall
$ sudo ufw enableCommand dapat mengganggu koneksi ssh yang ada. Lanjutkan dengan operasi (y|n)? yFirewall aktif dan diaktifkan pada startup sistem
Periksa kembali status firewall.
$ sudo ufw status
Anda akan melihat keluaran serupa.
Status:activeTo Action From-- ------ ----OpenSSH ALLOW Anywhere80/tcp ALLOW Anywhere443/tcp ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)80/tcp (v6) ALLOW Anywhere (v6) 443/tcp (v6) Izinkan Di Mana Saja (v6)
Langkah 2 - Instal Git
Instal Git.
$ sudo apt install git
Konfirmasi pemasangan.
$ git --versiongit versi 2.30.2
Langkah 3 - Instal Docker
Untuk menginstal versi terbaru Docker, tambahkan kunci GPG resmi Docker.
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Instal repositori Docker resmi.
$ echo \ "deb [arch=$(dpkg --print-architecture) ditandatangani-oleh=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux /debian \ $(lsb_release -cs) stabil" | sudo tee /etc/apt/sources.list.d/docker.list> /dev/null
Perbarui repositori sistem Debian.
$ sudo apt update
Instal Docker versi terbaru.
$ sudo apt install docker-ce docker-ce-cli containerd.io
Verifikasi bahwa Docker sedang berjalan.
$ Sudo systemctl status buruh pelabuhan? docker.service - Mesin Kontainer Aplikasi Docker Dimuat:dimuat (/lib/systemd/system/docker.service; diaktifkan; preset vendor:diaktifkan) Aktif:aktif (berjalan) sejak Senin 2022-03-21 03:19:09 UTC; 9 detik yang laluDipicu Oleh:? docker.socket Dokumen:https://docs.docker.com PID Utama:15816 (dockerd) Tugas:7 Memori:27,9M CPU:566ms CGroup:/system.slice/docker.service ??15816 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Secara default, Docker membutuhkan hak akses root. Jika Anda ingin menghindari penggunaan sudo
setiap kali Anda menjalankan docker
perintah, tambahkan nama pengguna Anda ke docker
grup.
$ sudo usermod -aG docker $(whoami)
Anda harus keluar dari server dan kembali sebagai pengguna yang sama untuk mengaktifkan perubahan ini.
Langkah 4 - Instal Docker Compose
Versi terbaru Docker Compose yang tersedia adalah 2.0.x, tetapi untuk alasan kompatibilitas, kami akan menginstal v1.29.2 yang lebih lama dan stabil.
Jalankan perintah berikut untuk mengunduh rilis stabil Docker Compose.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o / usr/local/bin/docker-compose
Terapkan izin yang dapat dieksekusi ke file biner.
$ sudo chmod +x /usr/local/bin/docker-compose
Unduh dan instal skrip penyelesaian bash Docker Compose.
$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-composeJalankan perintah berikut untuk menerapkan perubahan.
$ source ~/.bashrcLangkah 5 - Unduh dan Konfigurasi Supabase
Kloning repositori Supabase Github.
$ git clone --depth 1 https://github.com/supabase/supabase.git
--depth 1
parameter melakukan klon dangkal dari repositori, yaitu, hanya menarik komit terbaru dan bukan seluruh riwayat. Hal ini dilakukan untuk meningkatkan kinerja.Beralih ke direktori buruh pelabuhan.
$ cd supabase/dockerBuat file lingkungan dari file contoh.
$ cp .env.example .envBuka file yang baru dibuat untuk diedit.
$ nano .envUbah nilai variabel
POSTGRES_PASSWORD
dengan sandi unik yang dibuat dengan kuat.$ POSTGRES_PASSWORD=Buat kata sandi unik lainnya dengan lebih dari 32 karakter tanpa karakter khusus. Ganti nilai
JWT_SECRET
dengan kata sandi ini.JWT_SECRET=Anda dapat menggunakan pembuat kata sandi online seperti Bitwarden atau 1password untuk membuat kata sandi di atas.
Buka situs web Supabase dan masukkan
JWT_SECRET
your untuk menghasilkanANON_KEY
. TempelkanJWT_SECRET
. Anda di kotak yang ditentukan, pilihANON_KEY
dari Payload yang telah dikonfigurasikan sebelumnya menu tarik-turun dan klik Hasilkan JWT tombol untuk menghasilkan token.
Salin dan tempel token ini sebagai nilai untuk
ANON_KEY
di.env
berkas.Demikian pula, ulangi langkah yang sama untuk membuat
SERVICE_KEY
dengan mengganti Payload yang Dikonfigurasi sebelumnya dan menekan tombol Hasilkan JWT tombol.
Salin token yang dihasilkan dan tempel sebagai nilai untuk
SERVICE_KEY
di.env
berkas.Konfigurasikan pengaturan SMTP email dengan mengonfigurasi variabel berikut. Kami menggunakan layanan SES Amazon untuk tutorial kami.
[email protected]SMTP_HOST=email-smtp.us-west-2.amazonaws.comSMTP_PORT=587SMTP_USER=SMTP_PASS= SMTP_SENDER_NAME=SupabaseAdmin Konfigurasikan URL situs.
SITE_URL=https://supabase.example.comKonfigurasikan URL REST publik.
PUBLIC_REST_URL=https://supabase.example.com/rest/v1/Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Email autentikasi yang dikirim melalui SMTP akan memiliki tautan yang rusak karena bug yang umum di Supabase. Untuk memperbaiki masalah ini, buka
docker-compose.yml
berkas.$ nano docker-compose.ymlTambahkan variabel
API_EXTERNAL_URL
tepat di bawahGOTRUE_SITE_URL
variabel agar terlihat seperti berikut.GOTRUE_SITE_URL:${SITE_URL} API_EXTERNAL_URL:${SITE_URL}Simpan file dengan menekan Ctrl + X dan memasukkan Y ketika diminta. File ini akan ditimpa setiap kali Anda meningkatkan instalasi Supabase Anda. Mudah-mudahan, bug akan diperbaiki lain kali. Anda perlu menambahkan variabel ini secara manual untuk memastikan bug email tidak berulang.
Buka
volumes/api/kong.yml
file untuk diedit.$ nano volumes/api/kong.ymlDi bawah
consumers
bagian, gantianon
kunci pengguna denganANON_KEY
dihasilkan sebelumnya.konsumen:- username:anon keyauth_credentials:- kunci:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GEJuga, ganti
service_role
's denganSERVICE_KEY
dihasilkan di atas.- username:keyauth_credentials service_role:- key:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4QSimpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Langkah 6 - Instal Supabase
Jalankan Supabase dengan menggunakan perintah berikut. Proses ini akan memakan waktu.
$ docker-compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml up -dPeriksa status container yang sedang berjalan.
$ docker psCONTAINER ID IMAGE COMMAND NAMA PORT STATUS DIBUAT NAMASd25393873731 supabase/storage-api:v0.10.0 "/bin/sh -c \"./stora..." Sekitar satu menit yang lalu Naik Sekitar satu menit 5000/tcp supabase-storagee6df7dcdd45b supabase/gotrue:v2.5.21 "gotrue" Sekitar satu menit yang lalu Naik Sekitar satu menit supabase-authb3a758592d10 supabase/postgres-meta:v0.29.0 "postgres-meta" Sekitar satu menit yang lalu Naik Sekitar satu menit 0.0.0.0:5555-> 8080/tcp, :::5555->8080/tcp supabase-metacdb18c248f79 supabase/realtime:v0.21.0 "bash -c './prod/rel..." Sekitar satu menit yang lalu Naik Sekitar satu menit supabase-realtime71417337efae postgrest/postgrest:v9.0.0 "/bin/postgrest" Sekitar satu menit yang lalu Naik Sekitar satu menit 3000/tcp supabase-rest2d51af16bd1f kong:2.1 "/docker-entrypoint...." 2 menit yang lalu Naik Sekitar satu menit 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 8001 /tcp, 0.0.0.0:8443->8443/tcp, :::8443->8443/tcp, 8444/tcp supabase-kongd6490380e4e8 supabase/postgres:14.1.0 "docker-entrypoint.s..." 2 menit yang lalu Sampai Tentang sebentar ute 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp supabase-db40a49d1482fa supabase/studio:latest "docker-entrypoint.s..." 2 menit yang lalu Naik Sekitar satu menit 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp supabase-studio3cce50db9782 inbucket/inbucket:stable "/start-inbucket.sh ..." 2 menit yang lalu Naik Sekitar satu menit (sehat) 0.0.0.0:1100->1100/ tcp, :::1100->1100/tcp, 0.0.0.0:2500->2500/tcp, :::2500->2500/tcp, 0.0.0.0:9000->9000/tcp, :::9000-> 9000/tcp supabase-mailLangkah 7 - Instal SSL
Untuk menginstal sertifikat SSL menggunakan Let's Encrypt, kita perlu menginstal alat Certbot.
Kami akan menggunakan penginstal paket Snapd untuk itu. Karena sebagian besar server Debian tidak disertakan bersamanya, instal penginstal Snapd.
$ sudo apt install snapdPastikan versi Snapd Anda terbaru.
$ sudo snap install core &&sudo snap refresh coreInstal Certbot.
$ sudo snap install --classic certbotGunakan perintah berikut untuk memastikan bahwa perintah Certbot dapat dijalankan dengan membuat tautan simbolis ke
/usr/bin
direktori.$ sudo ln -s /snap/bin/certbot /usr/bin/certbotVerifikasi penginstalan.
$ certbot --versioncertbot 1.25.0Buat sertifikat SSL.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d supabase.example.comPerintah di atas akan mengunduh sertifikat ke
/etc/letsencrypt/live/supabase.example.com
direktori di server Anda.Buat grup Diffie-Hellman sertifikat.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096Buat direktori webroot tantangan untuk pembaruan otomatis Let's Encrypt.
$ sudo mkdir -p /var/lib/letsencryptBuat Pekerjaan Cron untuk memperbarui SSL. Ini akan berjalan setiap hari untuk memeriksa sertifikat dan memperbarui jika diperlukan. Untuk itu, buat dulu file
/etc/cron.daily/certbot-renew
dan buka untuk diedit.$ sudo nano /etc/cron.daily/certbot-renewTempelkan kode berikut.
#!/bin/shcertbot perbarui --cert-name supabase.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Ubah izin pada file tugas agar dapat dieksekusi.
$ sudo chmod +x /etc/cron.daily/certbot-renewLangkah 8 - Instal dan Konfigurasi Nginx
Debian dikirimkan dengan versi Nginx yang lebih lama. Anda perlu mengunduh repositori Nginx resmi untuk menginstal versi terbaru.
Impor kunci penandatanganan Nginx resmi.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg>/dev/nullTambahkan repositori untuk versi stabil Nginx.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.listPerbarui repositori Debian.
$ sudo apt updateInstal Nginx.
$ sudo apt install nginxVerifikasi instalasi. Pastikan Anda menggunakan
sudo
setiap kali Anda menjalankan perintah Nginx di Debian. Jika tidak, itu tidak akan berhasil.$ sudo nginx -vnginx versi:nginx/1.20.2Buat dan buka file
/etc/nginx/conf.d/supabase.conf
untuk diedit.$ sudo nano /etc/nginx/conf.d/supabase.confTempelkan kode berikut di dalamnya.
map $http_upgrade $connection_upgrade { peningkatan default; '' close;}upstream supabase { server localhost:3000;}upstream kong { server localhost:8000;}# menegakkan HTTPSserver { mendengarkan 80; dengarkan [::]:80; nama_server supabase.example.com; return 301 https://$host$request_uri;}server { dengarkan 443 ssl http2; dengarkan [::]:443 ssl http2; nama_server supabase.example.com; access_log /var/log/nginx/supabase.access.log; error_log /var/log/nginx/supabase.error.log; gzip aktif; # SSL ssl_certificate /etc/letsencrypt/live/supabase.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/supabase.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/supabase.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache dibagikan:MozSSL:10m; ssl_session_tickets mati; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers aktif; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDALY -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapel aktif; ssl_stapling_verifikasi aktif; ssl_dhparam /etc/ssl/certs/dhparam.pem; penyelesai 8.8.8.8; client_max_body_size 100m; # Lokasi API REST ~ ^/rest/v1/(.*)$ { proxy_set_header Host $host; proxy_pass http://kong; proxy_redirect mati; } # Lokasi otentikasi ~ ^/auth/v1/(.*)$ { proxy_set_header Host $host; proxy_pass http://kong; proxy_redirect mati; } # Lokasi realtime ~ ^/realtime/v1/(.*)$ { proxy_redirect off; proxy_pass http://kong; proxy_http_version 1.1; proxy_set_header Tingkatkan $http_upgrade; proxy_set_header Koneksi $connection_upgrade; proxy_set_header Host $host; } # Lokasi studio / { proxy_set_header Host $host; proxy_pass http://supabase; proxy_redirect mati; proxy_set_header Tingkatkan $http_upgrade; }}Simpan file dengan menekan Ctrl + X dan memasukkan Y ketika diminta setelah selesai.
Buka file
/etc/nginx/nginx.conf
untuk diedit.$ sudo nano /etc/nginx/nginx.confTambahkan baris berikut sebelum baris
include /etc/nginx/conf.d/*.conf;
.server_names_hash_bucket_size 64;Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Verifikasi sintaks file konfigurasi Nginx.
$ sudo nginx -tnginx:file konfigurasi /etc/nginx/nginx.conf sintaksnya oknginx:file konfigurasi /etc/nginx/nginx.conf tes berhasilMulai layanan Nginx untuk mengaktifkan konfigurasi baru.
$ sudo systemctl start nginxLangkah 9 - Akses Supabase
Anda sekarang dapat mengakses Supabase melalui URL
https://supabase.example.com
di browser web Anda.
Anda tidak dapat membuat proyek baru, tetapi Anda dapat mengelola yang sudah ada dan mengonfigurasi database, penyimpanan, dan autentikasi.
Langkah 10 - Aktifkan otentikasi HTTP
Supabase tidak menyediakan manajemen pengguna, jadi Anda perlu mengamankan instalasi Supabase Anda. Cara termudah untuk melakukannya adalah dengan mengaktifkan otentikasi HTTP menggunakan server Nginx.
Instal
apache2-utils
paket untuk Nginx.$ Sudo apt install Apache2-utilsBuat file kata sandi untuk pengguna
supabase
. Anda dapat memilih nama pengguna yang Anda inginkan. Ini akan meminta Anda untuk kata sandi baru. Masukkan sandi yang kuat untuk menyelesaikan penyiapan file.$ sudo htpasswd -c /etc/nginx/.htpasswd supabaseKata sandi baru:Ketik ulang kata sandi baru:Menambahkan kata sandi untuk pengguna supabase
-c
flag memberitahu utilitas untuk membuat file baru. Jika Anda menghilangkan file, Anda perlu menentukan lokasi file yang ada.Buka
/etc/nginx/conf.d/supabase.conf
untuk diedit.$ sudo nano /etc/nginx/conf.d/supabase.confBuat perubahan di bagian file berikut, seperti yang ditunjukkan di bawah ini.
# Lokasi API REST ~ ^/rest/v1/(.*)$ { auth_basic nonaktif; proxy_set_header Host $host; proxy_pass http://kong; proxy_redirect mati; } # Lokasi otentikasi ~ ^/auth/v1/(.*)$ { auth_basic off; proxy_set_header Host $host; proxy_pass http://kong; proxy_redirect mati; } # Lokasi waktu nyata ~ ^/waktu nyata/v1/(.*)$ { auth_basic nonaktif; proxy_redirect mati; proxy_pass http://kong; proxy_http_version 1.1; proxy_set_header Tingkatkan $http_upgrade; proxy_set_header Koneksi $connection_upgrade; proxy_set_header Host $host; } # Lokasi studio / { auth_basic “Login Supabase Studio”; auth_basic_user_file /etc/nginx/.htpasswd; proxy_set_header Host $host; proxy_pass http://supabase; proxy_redirect mati; proxy_set_header Tingkatkan $http_upgrade; }Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Verifikasi konfigurasi.
$ sudo nginx -tnginx:file konfigurasi /etc/nginx/nginx.conf sintaksnya oknginx:file konfigurasi /etc/nginx/nginx.conf tes berhasilMulai ulang layanan Nginx.
$ sudo systemctl restart nginxSaat berikutnya Anda membuka Supabase, Anda akan disambut dengan layar login berikut.
Langkah 11 - Perbarui Supabase
Supabase adalah produk dalam proses yang konstan dan akan mengalami perubahan yang konstan. Jika Anda menggunakannya sebagai instance yang dihosting sendiri, Anda harus terus memperbarui instalasi Supabase Anda.
Beralih ke direktori Supabase.
$ cd ~/supabaseTarik repositori Github terbaru.
$ git tarikCari perubahan apa pun di
docker/.env
,docker/volumes/api/kong.yml
file untuk apa pun yang memerlukan konfigurasi ulang.Matikan dan bersihkan container Docker yang ada.
$ docker-compose down --remove-orphansTarik gambar terbaru.
$ tarikan komposisi buruh pelabuhanMulai container lagi.
$ docker-compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml up -dKesimpulan
Ini mengakhiri tutorial kami tentang menginstal Supabase pada server berbasis Debian 11 menggunakan server Nginx sebagai proxy-balik. Jika Anda memiliki pertanyaan, kirimkan di komentar di bawah.
Debian