GNU/Linux >> Tutoriels Linux >  >> Debian

Comment installer Supabase avec Docker sur Debian 11

Supabase est une alternative Firebase open source qui vous fournit tous les outils nécessaires pour développer vos applications. Supabase offre une base de données PostgreSQL, l'authentification des utilisateurs, le stockage et une API en temps réel et s'intègre aux frameworks et outils populaires tels que Angular, Flutter, Next.js, React, Svelte et Vue.

Il existe deux manières d'utiliser Supabase. La première option consiste à s'inscrire à leur application hébergée dans le cloud, qui offre plus de fonctionnalités. La deuxième option consiste à auto-héberger le code à l'aide de Docker. Il y a cependant quelques mises en garde sur l'auto-hébergement. Vous ne pouvez pas créer ou gérer des projets. De plus, l'ensemble du projet est en phase bêta et vous ne devez utiliser la version auto-hébergée que pour les tests et le développement local. À toutes autres fins, vous devez utiliser leur application cloud.

Dans ce didacticiel, vous apprendrez à installer Supabase sur un serveur basé sur Debian 11 et à le proxy via le serveur Nginx.

Prérequis

  • Un serveur exécutant Debian 11 avec un minimum de 2 Go de RAM.

  • Un utilisateur non root avec des privilèges sudo.

  • Un nom de domaine (supabase.example.com ) pointant vers le serveur.

  • Tout est mis à jour.

    $ sudo apt update &&sudo apt upgrade
  • Peu de packages dont votre système a besoin.

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

    Certains de ces packages sont peut-être déjà installés sur votre système.

Étape 1 - Configurer le pare-feu

La première étape consiste à configurer le pare-feu. Debian est livré avec ufw (pare-feu non compliqué).

Vérifiez si le pare-feu est en cours d'exécution.

État $ sudo ufw

Vous devriez obtenir le résultat suivant.

Statut :inactif

Autorisez le port SSH afin que le pare-feu n'interrompe pas la connexion actuelle en l'activant.

$ sudo ufw autorise OpenSSH

Autorisez également les ports HTTP et HTTPS.

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

Activer le pare-feu

$ sudo ufw enableCommand peut perturber les connexions ssh existantes. Continuer avec l'opération (o|n) ? yLe pare-feu est actif et activé au démarrage du système

Vérifiez à nouveau l'état du pare-feu.

État $ sudo ufw

Vous devriez voir une sortie similaire.

Statut :activeTo Action From-- ------ ----OpenSSH AUTORISER Anywhere80/tcp AUTORISER Anywhere443/tcp AUTORISER AnywhereOpenSSH (v6) AUTORISER Anywhere (v6)80/tcp (v6) AUTORISER Anywhere (v6) 443/tcp (v6) AUTORISER n'importe où (v6)

Étape 2 - Installer Git

Installez Git.

$ sudo apt install git

Confirmez l'installation.

$ git --versiongit version 2.30.2

Étape 3 - Installer Docker

Pour installer la dernière version de Docker, ajoutez la clé GPG officielle de Docker.

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

Installez le référentiel Docker officiel.

$ 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

Mettre à jour les référentiels du système Debian.

Mise à jour $ sudo apt

Installez la dernière version de Docker.

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

Vérifiez que Docker est en cours d'exécution.

$ sudo systemctl status docker ? docker.service - Docker Application Container Engine Loaded :chargé (/lib/systemd/system/docker.service ; activé ; préréglage fournisseur :activé) Actif :actif (en cours d'exécution) depuis le lundi 2022-03-21 03:19:09 UTC ; il y a 9sTriggeredBy : ? docker.socket Docs :https://docs.docker.com PID principal :15816 (dockerd) Tâches :7 Mémoire :27,9 M CPU :566 ms CGroup :/system.slice/docker.service ??15816 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Par défaut, Docker nécessite des privilèges root. Si vous voulez éviter d'utiliser sudo chaque fois que vous exécutez le docker commande, ajoutez votre nom d'utilisateur au docker groupe.

$ sudo usermod -aG docker $(whoami)

Vous devez vous déconnecter du serveur et vous reconnecter avec le même utilisateur pour activer ce changement.

Étape 4 - Installer Docker Compose

La dernière version disponible de Docker Compose est la 2.0.x, mais pour des raisons de compatibilité, nous allons installer l'ancienne et stable v1.29.2.

Exécutez la commande suivante pour télécharger la version stable de 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

Appliquez les autorisations exécutables au fichier binaire.

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

Téléchargez et installez le script de complétion bash de 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 

Exécutez la commande suivante pour appliquer les modifications.

$ source ~/.bashrc

Étape 5 - Télécharger et configurer Supabase

Clonez le dépôt Supabase Github.

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

Le --depth 1 Le paramètre effectue un clone superficiel du référentiel, c'est-à-dire qu'il extrait uniquement les derniers commits et non l'intégralité de l'historique. Ceci est fait pour améliorer les performances.

Basculez vers le répertoire docker.

$ cd supabase/docker

Créez le fichier d'environnement à partir du fichier d'exemple.

$ cp .env.exemple .env

Ouvrez le fichier nouvellement créé pour le modifier.

$ nano .env

Modifier la valeur de la variable POSTGRES_PASSWORD avec un mot de passe unique fortement généré.

$ POSTGRES_PASSWORD=

Générez un autre mot de passe unique avec plus de 32 caractères sans caractères spéciaux. Remplacez la valeur de JWT_SECRET avec ce mot de passe.

JWT_SECRET=

Vous pouvez utiliser un générateur de mots de passe en ligne comme Bitwarden ou 1password pour créer les mots de passe ci-dessus.

Ouvrez le site Web de Supabase et entrez votre JWT_SECRET pour générer une ANON_KEY . Collez votre JWT_SECRET dans la case indiquée, sélectionnez ANON_KEY à partir de la charge utile préconfigurée menu déroulant et cliquez sur Générer JWT bouton pour générer le jeton.

Copiez et collez ce jeton comme valeur pour ANON_KEY dans le .env fichier.

De même, répétez les mêmes étapes pour générer le SERVICE_KEY en changeant la charge utile préconfigurée et en appuyant sur Générer JWT bouton.

Copiez le jeton généré et collez-le comme valeur pour le SERVICE_KEY dans le .env fichier.

Configurez les paramètres SMTP de messagerie en configurant les variables suivantes. Nous utilisons le service SES d'Amazon pour notre tutoriel.

[email protected]SMTP_HOST=email-smtp.us-west-2.amazonaws.comSMTP_PORT=587SMTP_USER=SMTP_PASS=SMTP_SENDER_NAME=SupabaseAdmin

Configurez l'URL du site.

SITE_URL=https://supabase.example.com

Configurez l'URL REST publique.

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

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Les mails d'authentification envoyés via SMTP auront des liens rompus à cause d'un bogue répandu dans Supabase. Pour résoudre ce problème, ouvrez le docker-compose.yml fichier.

$ nano docker-compose.yml

Ajoutez la variable API_EXTERNAL_URL juste en dessous de GOTRUE_SITE_URL variable pour ressembler à ce qui suit.

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

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité. Ce fichier sera écrasé à chaque mise à jour de votre installation Supabase. Espérons que le bug sera corrigé la prochaine fois. Vous devrez ajouter cette variable manuellement pour vous assurer que le bogue de l'e-mail ne se répète pas.

Ouvrez le volumes/api/kong.yml fichier à éditer.

$ nano volumes/api/kong.yml

Sous les consumers section, remplacez le anon la clé de l'utilisateur avec le ANON_KEY généré avant.

 consommateurs:- Nom d'utilisateur:Anon keyauth_credentials:- clé:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE 

Remplacez également le service_role de la clé avec le SERVICE_KEY généré ci-dessus.

 - Nom d'utilisateur:service_role keyauth_credentials:- clés:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q 

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Étape 6 - Installer Supabase

Exécutez Supabase à l'aide de la commande suivante. Ce processus prendra un certain temps.

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

Vérifiez l'état des conteneurs en cours d'exécution.

$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd25393873731 supabase/storage-api:v0.10.0 "/bin/sh -c \"./stora…" Il y a environ une minute Up Environ une minute 5000/tcp supabase-storagee6df7dcdd45b supabase/gotrue:v2.5.21 "gotrue" Il y a environ une minute Up Environ une minute supabase-authb3a758592d10 supabase/postgres-meta:v0.29.0 "postgres-meta" Il y a environ une minute Up Environ une minute 0.0.0.0:5555-> 8080/tcp, :::5555->8080/tcp supabase-metacdb18c248f79 supabase/realtime:v0.21.0 "bash -c './prod/rel…" Il y a environ une minute Up Environ une minute supabase-realtime71417337efae postgrest/postgrest:v9.0.0 "/bin/postgrest" Il y a environ une minute Up Environ une minute 3000/tcp supabase-rest2d51af16bd1f kong:2.1 "/docker-entrypoint.…" il y a 2 minutes Up Environ une 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-kongd6490380e4e8 supabase/postgres:14.1.0 "docker-entrypoint.s…" il y a 2 minutes Haut À propos une minute ute 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp supabase-db40a49d1482fa supabase/studio:latest "docker-entrypoint.s…" Il y a 2 minutes Up Environ une minute 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp supabase-studio3cce50db9782 inbucket/inbucket:stable "/start-inbucket.sh …" Il y a 2 minutes Up Environ une minute (sain) 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

Étape 7 - Installer SSL

Pour installer un certificat SSL avec Let's Encrypt, nous devons installer l'outil Certbot.

Nous utiliserons le programme d'installation du package Snapd pour cela. Comme la plupart des serveurs Debian ne sont pas livrés avec, installez le programme d'installation de Snapd.

$ sudo apt install snapd

Assurez-vous que votre version de Snapd est à jour.

$ sudo snap install core &&sudo snap refresh core

Installez Certbot.

$ sudo snap install --classic certbot

Utilisez la commande suivante pour vous assurer que la commande Certbot peut être exécutée en créant un lien symbolique vers /usr/bin répertoire.

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

Vérifiez l'installation.

$ certbot --versioncertbot 1.25.0

Générez le certificat SSL.

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

La commande ci-dessus téléchargera un certificat dans /etc/letsencrypt/live/supabase.example.com répertoire sur votre serveur.

Générer un groupe Diffie-Hellman certificat.

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

Créez un répertoire racine Web de défi pour le renouvellement automatique de Let's Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Créez une tâche Cron pour renouveler le SSL. Il s'exécutera tous les jours pour vérifier le certificat et le renouveler si nécessaire. Pour cela, créez d'abord le fichier /etc/cron.daily/certbot-renew et ouvrez-le pour le modifier.

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

Collez le code suivant.

#!/bin/shcertbot renouveler --cert-name supabase.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl recharger nginx"

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Modifiez les autorisations sur le fichier de tâche pour le rendre exécutable.

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

Étape 8 - Installer et configurer Nginx

Debian est livré avec une ancienne version de Nginx. Vous devez télécharger le dépôt officiel Nginx pour installer la dernière version.

Importez la clé de signature officielle Nginx.

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

Ajoutez le référentiel pour la version stable de 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

Mettez à jour les dépôts Debian.

Mise à jour $ sudo apt

Installez Nginx.

$ sudo apt install nginx

Vérifiez l'installation. Assurez-vous d'utiliser sudo chaque fois que vous exécutez la commande Nginx sur Debian. Sinon, cela ne fonctionnera pas.

$ sudo nginx -vnginx version :nginx/1.20.2

Créez et ouvrez le fichier /etc/nginx/conf.d/supabase.conf pour l'édition.

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

Collez-y le code suivant.

map $http_upgrade $connection_upgrade { mise à jour par défaut ; '' close;}upstream supabase { server localhost:3000;}upstream kong { server localhost:8000;}# applique HTTPSserver { listen 80; écouter [::]:80 ; nom_serveur supabase.exemple.com ; renvoie 301 https://$host$request_uri;}serveur { écoute 443 ssl http2; écouter [::]:443 ssl http2 ; nom_serveur supabase.exemple.com ; access_log /var/log/nginx/supabase.access.log ; error_log /var/log/nginx/supabase.error.log; gzip activé ; # SSL certificat_ssl /etc/letsencrypt/live/supabase.example.com/fullchain.pem ; clé_certificat_ssl /etc/letsencrypt/live/supabase.example.com/privkey.pem ; ssl_trusted_certificate /etc/letsencrypt/live/supabase.example.com/chain.pem ; SSL_session_timeout 5 m ; ssl_session_cache partagé :MozSSL :10 m ; ssl_session_tickets désactivé ; ssl_protocols TLSv1.2 TLSv1.3 ; ssl_prefer_server_ciphers activé ; chiffrements_ssl -RSA-CHACHA20-POLY1305 :DHE-RSA-AES128-GCM-SHA256 :DHE-RSA-AES256-GCM-SHA384 ; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling activé ; ssl_stapling_verify activé ; ssl_dhparam /etc/ssl/certs/dhparam.pem ; résolveur 8.8.8.8 ; client_max_body_size 100 m ; # Emplacement de l'API REST ~ ^/rest/v1/(.*)$ { proxy_set_header Host $host ; proxy_pass http://kong; proxy_redirect désactivé ; } # Emplacement d'authentification ~ ^/auth/v1/(.*)$ { proxy_set_header Host $host; proxy_pass http://kong; proxy_redirect désactivé ; } # Emplacement en temps réel ~ ^/realtime/v1/(.*)$ { proxy_redirect off ; proxy_pass http://kong; proxy_http_version 1.1 ; proxy_set_header Mettre à jour $http_upgrade ; proxy_set_header Connexion $connection_upgrade ; proxy_set_header Hôte $hôte ; } # Emplacement du studio / { proxy_set_header Host $host ; proxy_pass http://supabase; proxy_redirect désactivé ; proxy_set_header Mettre à jour $http_upgrade ; }}

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité une fois terminé.

Ouvrez le fichier /etc/nginx/nginx.conf pour l'édition.

$ sudo nano /etc/nginx/nginx.conf

Ajoutez la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf; .

server_names_hash_bucket_size 64 ;

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Vérifiez la syntaxe du fichier de configuration Nginx.

$ sudo nginx -tnginx :la syntaxe du fichier de configuration /etc/nginx/nginx.conf est oknginx :le test du fichier de configuration /etc/nginx/nginx.conf est réussi

Démarrez le service Nginx pour activer la nouvelle configuration.

$ sudo systemctl start nginx

Étape 9 - Accéder à Supabase

Vous pouvez maintenant accéder à Supabase via l'URL https://supabase.example.com dans votre navigateur Web.

Vous ne pouvez pas créer de nouveaux projets, mais vous pouvez gérer ceux qui existent et configurer la base de données, le stockage et l'authentification.

Étape 10 - Activer l'authentification HTTP

Supabase ne fournit pas de gestion des utilisateurs, vous devez donc sécuriser votre installation Supabase. Le moyen le plus simple consiste à activer l'authentification HTTP à l'aide du serveur Nginx.

Installez apache2-utils package pour Nginx.

$ sudo apt install apache2-utils

Créer un fichier de mot de passe pour l'utilisateur supabase . Vous pouvez choisir n'importe quel nom d'utilisateur que vous voulez. Il vous demandera un nouveau mot de passe. Entrez un mot de passe fort pour terminer la configuration du fichier.

$ sudo htpasswd -c /etc/nginx/.htpasswd supabaseNouveau mot de passe :Retapez le nouveau mot de passe :Ajout du mot de passe pour l'utilisateur supabase

Le -c indique à l'utilitaire de créer un nouveau fichier. Si vous omettez le fichier, vous devez spécifier l'emplacement d'un fichier existant.

Ouvrez le /etc/nginx/conf.d/supabase.conf pour l'édition.

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

Apportez les modifications dans les sections suivantes du fichier, comme indiqué ci-dessous.

# Emplacement de l'API REST ~ ^/rest/v1/(.*)$ { auth_basic off ; proxy_set_header Hôte $hôte ; proxy_pass http://kong; proxy_redirect désactivé ; } # Emplacement d'authentification ~ ^/auth/v1/(.*)$ { auth_basic off; proxy_set_header Hôte $hôte ; proxy_pass http://kong; proxy_redirect désactivé ; } # Emplacement en temps réel ~ ^/realtime/v1/(.*)$ { auth_basic off; proxy_redirect désactivé ; proxy_pass http://kong; proxy_http_version 1.1 ; proxy_set_header Mettre à jour $http_upgrade ; proxy_set_header Connexion $connection_upgrade ; proxy_set_header Hôte $hôte ; } # Emplacement du studio / { auth_basic "Connexion à Supabase Studio" ; auth_basic_user_file /etc/nginx/.htpasswd ; proxy_set_header Hôte $hôte ; proxy_pass http://supabase; proxy_redirect désactivé ; proxy_set_header Mettre à jour $http_upgrade ; } 

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Vérifiez la configuration.

$ sudo nginx -tnginx :la syntaxe du fichier de configuration /etc/nginx/nginx.conf est oknginx :le test du fichier de configuration /etc/nginx/nginx.conf est réussi

Redémarrez le service Nginx.

$ sudo systemctl redémarrer nginx

La prochaine fois que vous ouvrirez Supabase, vous serez accueilli par l'écran de connexion suivant.

Étape 11 - Mettre à jour Supabase

Supabase est un produit en constante évolution et subira des changements constants. Si vous l'utilisez en tant qu'instance auto-hébergée, vous devez maintenir votre installation Supabase à jour.

Basculez vers le répertoire Supabase.

$ cd ~/supabase

Tirez le dernier dépôt Github.

$ git pull

Recherchez les modifications dans le docker/.env , docker/volumes/api/kong.yml fichiers pour tout ce qui nécessite une reconfiguration.

Arrêtez et nettoyez les conteneurs Docker existants.

$ docker-compose down --remove-orphans

Tirez les dernières images.

$ docker-compose pull

Redémarrez les conteneurs.

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

Conclusion

Ceci conclut notre tutoriel sur l'installation de Supabase sur un serveur basé sur Debian 11 en utilisant le serveur Nginx comme proxy inverse. Si vous avez des questions, postez-les dans les commentaires ci-dessous.


Debian
  1. Comment installer Docker sur Debian 10 Buster

  2. Comment installer et utiliser Docker sur Debian 9

  3. Comment installer Tomcat 8.5 sur Debian 9

  4. Comment installer MongoDB sur Debian 9

  5. Comment installer Docker sur Debian / Ubuntu

Comment installer Docker sur Debian 10

Comment installer Docker dans Debian 11 (Bullseye)

Comment installer Docker sur Debian 10 Buster

Comment installer Go sur Debian 11

Comment installer Joomla avec LAMP sur Debian 10

Comment installer Docker CE sur Debian 11