GNU/Linux >> Linux Esercitazione >  >> Debian

Come installare Supabase con Docker su Debian 11

Supabase è un'alternativa Firebase open source che ti fornisce tutti gli strumenti necessari per sviluppare le tue applicazioni. Supabase offre un database PostgreSQL, autenticazione utente, archiviazione e un'API in tempo reale e si integra con framework e strumenti popolari come Angular, Flutter, Next.js, React, Svelte e Vue.

Ci sono due modi per usare Supabase. La prima opzione è iscriversi alla loro app ospitata su cloud, che offre più funzionalità. La seconda opzione consiste nell'ospitare automaticamente il codice utilizzando Docker. Tuttavia, ci sono alcuni avvertimenti sull'hosting automatico. Non puoi creare o gestire progetti. Inoltre, l'intero progetto è in fase beta e dovresti usare la versione self-hosted solo per i test e lo sviluppo locale. Per tutti gli altri scopi, dovresti utilizzare la loro applicazione cloud.

In questo tutorial imparerai come installare Supabase su un server basato su Debian 11 e come proxy tramite il server Nginx.

Prerequisiti

  • Un server che esegue Debian 11 con un minimo di 2 GB di RAM.

  • Un utente non root con privilegi sudo.

  • Un nome di dominio (supabase.example.com ) che punta al server.

  • Tutto è aggiornato.

    $ sudo apt update && sudo apt upgrade
    
  • Pochi pacchetti di cui il tuo sistema ha bisogno.

    $ sudo apt install nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring -y
    

    Alcuni di questi pacchetti potrebbero essere già installati sul tuo sistema.

Passaggio 1:configurazione del firewall

Il primo passo è configurare il firewall. Debian viene fornito con ufw (Uncomplicated Firewall).

Controlla se il firewall è in esecuzione.

$ sudo ufw status

Dovresti ottenere il seguente output.

Status: inactive

Consenti porta SSH in modo che il firewall non interrompa la connessione corrente quando lo si abilita.

$ sudo ufw allow OpenSSH

Consenti anche le porte HTTP e HTTPS.

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

Abilita il Firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Ricontrolla lo stato del firewall.

$ sudo ufw status

Dovresti vedere un output simile.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Passaggio 2:installa Git

Installa Git.

$ sudo apt install git

Conferma l'installazione.

$ git --version
git version 2.30.2

Passaggio 3 - Installa Docker

Per installare l'ultima versione di Docker, aggiungi la chiave GPG ufficiale di Docker.

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Installa il repository Docker ufficiale.

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Aggiorna i repository di sistema Debian.

$ sudo apt update

Installa l'ultima versione di Docker.

$ sudo apt install docker-ce docker-ce-cli containerd.io

Verifica che Docker sia in esecuzione.

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-03-21 03:19:09 UTC; 9s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 15816 (dockerd)
      Tasks: 7
     Memory: 27.9M
        CPU: 566ms
     CGroup: /system.slice/docker.service
             ??15816 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Per impostazione predefinita, Docker richiede i privilegi di root. Se vuoi evitare di usare sudo ogni volta che esegui la docker comando, aggiungi il tuo nome utente alla docker gruppo.

$ sudo usermod -aG docker $(whoami)

Devi uscire dal server e riconnetterti come lo stesso utente per abilitare questa modifica.

Passaggio 4 - Installa Docker Compose

L'ultima versione disponibile di Docker Compose è la 2.0.x, ma per motivi di compatibilità installeremo la vecchia e stabile v1.29.2.

Esegui il comando seguente per scaricare la versione stabile di 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

Applica le autorizzazioni eseguibili al file binario.

$ sudo chmod +x /usr/local/bin/docker-compose

Scarica e installa lo script di completamento bash di 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

Esegui il comando seguente per applicare le modifiche.

$ source ~/.bashrc

Passaggio 5 - Scarica e configura Supabase

Clona il repository Supabase Github.

$ git clone --depth 1 https://github.com/supabase/supabase.git

Il --depth 1 il parametro esegue un clone superficiale del repository, ovvero estrae solo gli ultimi commit e non l'intera cronologia. Questo viene fatto per migliorare le prestazioni.

Passa alla directory della finestra mobile.

$ cd supabase/docker

Crea il file di ambiente dal file di esempio.

$ cp .env.example .env

Apri il file appena creato per la modifica.

$ nano .env

Modifica il valore della variabile POSTGRES_PASSWORD con una password univoca fortemente generata.

$ POSTGRES_PASSWORD=<yourpostgresqlpwd>

Genera un'altra password univoca con più di 32 caratteri senza caratteri speciali. Sostituisci il valore di JWT_SECRET con questa password.

JWT_SECRET=<your32pluscharacterspwd>

Puoi utilizzare un generatore di password online come Bitwarden o 1password per creare le password di cui sopra.

Apri il sito Web di Supabase e inserisci il tuo JWT_SECRET per generare un ANON_KEY . Incolla il tuo JWT_SECRET nella casella specificata, seleziona ANON_KEY dal Carico utile preconfigurato menu a discesa e fai clic su Genera JWT pulsante per generare il token.

Copia e incolla questo token come valore per ANON_KEY nel .env file.

Allo stesso modo, ripeti gli stessi passaggi per generare il SERVICE_KEY cambiando il Carico utile preconfigurato e premendo il pulsante Genera JWT pulsante.

Copia il token generato e incollalo come valore per il SERVICE_KEY nel .env file.

Configurare le impostazioni SMTP dell'e-mail configurando le seguenti variabili. Stiamo utilizzando il servizio SES di Amazon per il nostro tutorial.

[email protected]
SMTP_HOST=email-smtp.us-west-2.amazonaws.com
SMTP_PORT=587
SMTP_USER=<your_amazon_ses_user>
SMTP_PASS=<your_amazon_ses_password>
SMTP_SENDER_NAME=SupabaseAdmin

Configura l'URL del sito.

SITE_URL=https://supabase.example.com

Configura l'URL REST pubblico.

PUBLIC_REST_URL=https://supabase.example.com/rest/v1/

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Le e-mail di autenticazione inviate tramite SMTP avranno collegamenti interrotti a causa di un bug prevalente in Supabase. Per risolvere questo problema, apri docker-compose.yml file.

$ nano docker-compose.yml

Aggiungi la variabile API_EXTERNAL_URL proprio sotto il GOTRUE_SITE_URL variabile in modo che assomigli alla seguente.

 GOTRUE_SITE_URL: ${SITE_URL}
 API_EXTERNAL_URL: ${SITE_URL}

Salva il file premendo Ctrl + X e inserendo Y quando richiesto. Questo file verrà sovrascritto ogni volta che aggiorni l'installazione di Supabase. Si spera che il bug venga corretto la prossima volta. Dovrai aggiungere questa variabile manualmente per assicurarti che il bug dell'email non si ripeta.

Apri volumes/api/kong.yml file per la modifica.

$ nano volumes/api/kong.yml

Sotto i consumers sezione, sostituisci anon chiave dell'utente con il ANON_KEY generato prima.

consumers:
  - username: anon
    keyauth_credentials:
      - key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE

Inoltre, sostituisci il service_role 's con il SERVICE_KEY generato sopra.

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

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Passaggio 6 - Installa Supabase

Eseguire Supabase utilizzando il comando seguente. Questo processo richiederà del tempo.

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

Controlla lo stato dei contenitori in esecuzione.

$ docker ps
CONTAINER ID   IMAGE                            COMMAND                   CREATED              STATUS                        PORTS                                                                                                                             NAMES
d25393873731   supabase/storage-api:v0.10.0     "/bin/sh -c \"./stora…"   About a minute ago   Up About a minute             5000/tcp                                                                                                                          supabase-storage
e6df7dcdd45b   supabase/gotrue:v2.5.21          "gotrue"                  About a minute ago   Up About a minute                                                                                                                                               supabase-auth
b3a758592d10   supabase/postgres-meta:v0.29.0   "postgres-meta"           About a minute ago   Up About a minute             0.0.0.0:5555->8080/tcp, :::5555->8080/tcp                                                                                         supabase-meta
cdb18c248f79   supabase/realtime:v0.21.0        "bash -c './prod/rel…"    About a minute ago   Up About a minute                                                                                                                                               supabase-realtime
71417337efae   postgrest/postgrest:v9.0.0       "/bin/postgrest"          About a minute ago   Up About a minute             3000/tcp                                                                                                                          supabase-rest
2d51af16bd1f   kong:2.1                         "/docker-entrypoint.…"    2 minutes ago        Up About a minute             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-kong
d6490380e4e8   supabase/postgres:14.1.0         "docker-entrypoint.s…"    2 minutes ago        Up About a minute             0.0.0.0:5432->5432/tcp, :::5432->5432/tcp
                                              supabase-db
40a49d1482fa   supabase/studio:latest           "docker-entrypoint.s…"    2 minutes ago        Up About a minute             0.0.0.0:3000->3000/tcp, :::3000->3000/tcp                                                                                         supabase-studio
3cce50db9782   inbucket/inbucket:stable         "/start-inbucket.sh …"    2 minutes ago        Up About a minute (healthy)   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

Passaggio 7 - Installa SSL

Per installare un certificato SSL utilizzando Let's Encrypt, è necessario installare lo strumento Certbot.

Useremo il programma di installazione del pacchetto Snapd per questo. Poiché la maggior parte dei server Debian non viene fornita con esso, installa il programma di installazione Snapd.

$ sudo apt install snapd

Assicurati che la tua versione di Snapd sia aggiornata.

$ sudo snap install core && sudo snap refresh core

Installa Certbot.

$ sudo snap install --classic certbot

Utilizzare il comando seguente per assicurarsi che il comando Certbot possa essere eseguito creando un collegamento simbolico al /usr/bin directory.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verifica l'installazione.

$ certbot --version
certbot 1.25.0

Genera il certificato SSL.

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

Il comando precedente scaricherà un certificato in /etc/letsencrypt/live/supabase.example.com directory sul tuo server.

Genera un gruppo Diffie-Hellman certificato.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Crea una directory webroot di sfida per il rinnovo automatico di Let's Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crea un Cron Job per rinnovare l'SSL. Verrà eseguito ogni giorno per controllare il certificato e rinnovarlo se necessario. Per questo, prima crea il file /etc/cron.daily/certbot-renew e aprilo per la modifica.

$ sudo nano /etc/cron.daily/certbot-renew

Incolla il seguente codice.

#!/bin/sh
certbot renew --cert-name supabase.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Modifica le autorizzazioni sul file dell'attività per renderlo eseguibile.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Passaggio 8 - Installa e configura Nginx

Debian viene fornito con una versione precedente di Nginx. Devi scaricare il repository Nginx ufficiale per installare l'ultima versione.

Importa la chiave di firma Nginx ufficiale.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
	 | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Aggiungi il repository per la versione stabile di 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

Aggiorna i repository Debian.

$ sudo apt update

Installa Nginx.

$ sudo apt install nginx

Verificare l'installazione. Assicurati di utilizzare sudo ogni volta che esegui il comando Nginx su Debian. Altrimenti, non funzionerà.

$ sudo nginx -v
nginx version: nginx/1.20.2

Crea e apri il file /etc/nginx/conf.d/supabase.conf per la modifica.

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

Incolla il seguente codice al suo interno.

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
upstream supabase {
  	server localhost:3000;
}
upstream kong {
  	server localhost:8000;
}
# enforce HTTPS
server {
    listen       80; 
    listen 		[::]:80;
    server_name  supabase.example.com;
    return 301   https://$host$request_uri;
}
server {
    listen       443 ssl http2;
    listen 		[::]:443 ssl http2;
    server_name  supabase.example.com;

    access_log  /var/log/nginx/supabase.access.log;
    error_log   /var/log/nginx/supabase.error.log;
    
    gzip on;
    
    # 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 shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;
    
    client_max_body_size 100m;
    
    # REST API
	location ~ ^/rest/v1/(.*)$ {
    	proxy_set_header Host $host;
	    proxy_pass http://kong;
	    proxy_redirect off;
  	}

	# Authentication
	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://supabase;
	    proxy_redirect off;
	    proxy_set_header Upgrade $http_upgrade;
  	}
}

Salva il file premendo Ctrl + X e inserendo Y quando richiesto una volta terminato.

Apri il file /etc/nginx/nginx.conf per la modifica.

$ sudo nano /etc/nginx/nginx.conf

Aggiungi la riga seguente prima della riga include /etc/nginx/conf.d/*.conf; .

server_names_hash_bucket_size  64;

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Verifica la sintassi del file di configurazione Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Avvia il servizio Nginx per abilitare la nuova configurazione.

$ sudo systemctl start nginx

Fase 9 - Accedi a Supabase

Ora puoi accedere a Supabase tramite l'URL https://supabase.example.com nel tuo browser web.

Non puoi creare nuovi progetti, ma puoi gestire quelli esistenti e configurare il database, l'archiviazione e l'autenticazione.

Passaggio 10 - Abilita l'autenticazione HTTP

Supabase non fornisce la gestione degli utenti, quindi è necessario proteggere l'installazione di Supabase. Il modo più semplice per farlo è abilitare l'autenticazione HTTP utilizzando il server Nginx.

Installa apache2-utils pacchetto per Nginx.

$ sudo apt install apache2-utils

Crea un file di password per l'utente supabase . Puoi scegliere qualsiasi nome utente desideri. Ti verrà richiesta una nuova password. Inserisci una password complessa per completare la configurazione del file.

$ sudo htpasswd -c /etc/nginx/.htpasswd supabase
New password:
Re-type new password:
Adding password for user supabase

Il -c flag dice all'utilità di creare un nuovo file. Se ometti il ​​file, devi specificare la posizione di un file esistente.

Apri il /etc/nginx/conf.d/supabase.conf per la modifica.

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

Apporta le modifiche nelle seguenti sezioni del file, come mostrato di seguito.

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

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

	# Realtime
	location ~ ^/realtime/v1/(.*)$ {
	    auth_basic off;
    	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 / {
	    auth_basic “Supabase Studio Login”;
	    auth_basic_user_file /etc/nginx/.htpasswd;
    
    	proxy_set_header Host $host;
	    proxy_pass http://supabase;
	    proxy_redirect off;
	    proxy_set_header Upgrade $http_upgrade;
  	}

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Verifica la configurazione.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Riavvia il servizio Nginx.

$ sudo systemctl restart nginx

La prossima volta che apri Supabase, verrai accolto con la seguente schermata di accesso.

Passaggio 11 - Aggiorna Supabase

Supabase è un prodotto in costante evoluzione e subirà continui cambiamenti. Se la utilizzi come istanza self-hosted, devi mantenere aggiornata l'installazione di Supabase.

Passa alla directory Supabase.

$ cd ~/supabase

Estrai l'ultimo repository Github.

$ git pull

Cerca eventuali modifiche nella docker/.env , docker/volumes/api/kong.yml file per tutto ciò che richiede una riconfigurazione.

Spegni e ripulisci i contenitori Docker esistenti.

$ docker-compose down --remove-orphans

Estrai le ultime immagini.

$ docker-compose pull

Riavvia i contenitori.

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

Conclusione

Questo conclude il nostro tutorial sull'installazione di Supabase su un server basato su Debian 11 utilizzando il server Nginx come proxy inverso. Se hai domande, pubblicale nei commenti qui sotto.


Debian
  1. Come installare Docker su Debian 10 Buster

  2. Come installare e utilizzare Docker su Debian 9

  3. Come installare Tomcat 8.5 su Debian 9

  4. Come installare MongoDB su Debian 9

  5. Come installare Docker su Debian/Ubuntu

Come installare Docker su Debian 10

Come installare Docker in Debian 11 (Bullseye)

Come installare Docker su Debian 10 Buster

Come installare Vai su Debian 11

Come installare Joomla con LAMP su Debian 10

Come installare Docker CE su Debian 11