GNU/Linux >> Belajar Linux >  >> Debian

Cara Menginstal Supabase dengan Docker di Debian 11

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-compose 

Jalankan perintah berikut untuk menerapkan perubahan.

$ source ~/.bashrc

Langkah 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/docker

Buat file lingkungan dari file contoh.

$ cp .env.example .env

Buka file yang baru dibuat untuk diedit.

$ nano .env

Ubah 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 menghasilkan ANON_KEY . Tempelkan JWT_SECRET . Anda di kotak yang ditentukan, pilih ANON_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.com

Konfigurasikan 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.yml

Tambahkan variabel API_EXTERNAL_URL tepat di bawah GOTRUE_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.yml

Di bawah consumers bagian, ganti anon kunci pengguna dengan ANON_KEY dihasilkan sebelumnya.

 konsumen:- username:anon keyauth_credentials:- kunci:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE 

Juga, ganti service_role 's dengan SERVICE_KEY dihasilkan di atas.

 - username:keyauth_credentials service_role:- key:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q 

Simpan 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 -d

Periksa 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-mail

Langkah 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 snapd

Pastikan versi Snapd Anda terbaru.

$ sudo snap install core &&sudo snap refresh core

Instal Certbot.

$ sudo snap install --classic certbot

Gunakan 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/certbot

Verifikasi penginstalan.

$ certbot --versioncertbot 1.25.0

Buat sertifikat SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d supabase.example.com

Perintah 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 4096

Buat direktori webroot tantangan untuk pembaruan otomatis Let's Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Buat 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-renew

Tempelkan 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-renew

Langkah 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/null

Tambahkan 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.list

Perbarui repositori Debian.

$ sudo apt update

Instal Nginx.

$ sudo apt install nginx

Verifikasi 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.2

Buat dan buka file /etc/nginx/conf.d/supabase.conf untuk diedit.

$ sudo nano /etc/nginx/conf.d/supabase.conf

Tempelkan 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.conf

Tambahkan 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 berhasil

Mulai layanan Nginx untuk mengaktifkan konfigurasi baru.

$ sudo systemctl start nginx

Langkah 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-utils

Buat 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.conf

Buat 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 berhasil

Mulai ulang layanan Nginx.

$ sudo systemctl restart nginx

Saat 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 ~/supabase

Tarik repositori Github terbaru.

$ git tarik

Cari 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-orphans

Tarik gambar terbaru.

$ tarikan komposisi buruh pelabuhan

Mulai container lagi.

$ docker-compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml up -d

Kesimpulan

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
  1. Cara Menginstal Docker di Debian 10 Buster

  2. Cara Menginstal dan Menggunakan Docker di Debian 9

  3. Cara menginstal Docker di Debian / Ubuntu

  1. Cara Menginstal Tomcat 8.5 di Debian 9

  2. Cara Menginstal MongoDB di Debian 9

  3. Cara Menginstal Nginx di Debian 9

  1. Cara Instal Apache di Debian 9

  2. Cara Menginstal Jenkins di Debian 9

  3. Cara Menginstal Webmin di Debian 9