GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo instalar Supabase con Docker en Debian 11

Supabase es una alternativa de Firebase de código abierto que le brinda todas las herramientas necesarias para desarrollar sus aplicaciones. Supabase ofrece una base de datos PostgreSQL, autenticación de usuarios, almacenamiento y una API en tiempo real y se integra con marcos y herramientas populares como Angular, Flutter, Next.js, React, Svelte y Vue.

Hay dos formas de usar Supabase. La primera opción es registrarse en su aplicación alojada en la nube, que ofrece más funciones. La segunda opción es autohospedar el código usando Docker. Sin embargo, hay algunas advertencias sobre el alojamiento propio. No puede crear ni administrar proyectos. Además, todo el proyecto se encuentra en la fase beta y debe usar la versión autohospedada solo para pruebas y desarrollo local. Para todos los demás fines, debe usar su aplicación en la nube.

En este tutorial, aprenderá cómo instalar Supabase en un servidor basado en Debian 11 y utilizarlo como proxy a través del servidor Nginx.

Requisitos

  • Un servidor que ejecute Debian 11 con un mínimo de 2 GB de RAM.

  • Un usuario no root con privilegios sudo.

  • Un nombre de dominio (supabase.example.com ) apuntando al servidor.

  • Todo está actualizado.

    $ sudo apt update && sudo apt upgrade
    
  • Pocos paquetes que tu sistema necesita.

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

    Es posible que algunos de estos paquetes ya estén instalados en su sistema.

Paso 1:configurar el cortafuegos

El primer paso es configurar el cortafuegos. Debian viene con ufw (cortafuegos sin complicaciones).

Compruebe si el cortafuegos se está ejecutando.

$ sudo ufw status

Deberías obtener el siguiente resultado.

Status: inactive

Permita el puerto SSH para que el cortafuegos no interrumpa la conexión actual al habilitarlo.

$ sudo ufw allow OpenSSH

Permitir puertos HTTP y HTTPS también.

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

Habilitar el cortafuegos

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

Vuelva a comprobar el estado del cortafuegos.

$ sudo ufw status

Debería ver un resultado similar.

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)

Paso 2:instalar Git

Instalar Git.

$ sudo apt install git

Confirme la instalación.

$ git --version
git version 2.30.2

Paso 3:instalar Docker

Para instalar la última versión de Docker, agregue la clave GPG oficial de Docker.

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

Instale el repositorio oficial de Docker.

$ 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

Actualice los repositorios del sistema Debian.

$ sudo apt update

Instale la última versión de Docker.

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

Verifique que Docker se esté ejecutando.

$ 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

De forma predeterminada, Docker requiere privilegios de root. Si desea evitar el uso de sudo cada vez que ejecuta el docker comando, agregue su nombre de usuario a la docker grupo.

$ sudo usermod -aG docker $(whoami)

Debe cerrar sesión en el servidor y volver a iniciarla como el mismo usuario para habilitar este cambio.

Paso 4:instalar Docker Compose

La última versión disponible de Docker Compose es 2.0.x, pero por motivos de compatibilidad, instalaremos la versión 1.29.2, más antigua y estable.

Ejecute el siguiente comando para descargar la versión estable 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

Aplicar permisos ejecutables al archivo binario.

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

Descargue e instale el script de finalización 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

Ejecute el siguiente comando para aplicar los cambios.

$ source ~/.bashrc

Paso 5:descargar y configurar Supabase

Clona el repositorio de Supabase Github.

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

El --depth 1 El parámetro hace una clonación superficial del repositorio, es decir, solo extrae las últimas confirmaciones y no todo el historial. Esto se hace para mejorar el rendimiento.

Cambia al directorio docker.

$ cd supabase/docker

Cree el archivo de entorno a partir del archivo de ejemplo.

$ cp .env.example .env

Abra el archivo recién creado para editarlo.

$ nano .env

Cambia el valor de la variable POSTGRES_PASSWORD con una contraseña única fuertemente generada.

$ POSTGRES_PASSWORD=<yourpostgresqlpwd>

Genere otra contraseña única con más de 32 caracteres sin caracteres especiales. Reemplace el valor de JWT_SECRET con esta contraseña.

JWT_SECRET=<your32pluscharacterspwd>

Puede usar un generador de contraseñas en línea como Bitwarden o 1password para crear las contraseñas anteriores.

Abra el sitio web de Supabase e ingrese su JWT_SECRET para generar una ANON_KEY . Pega tu JWT_SECRET en el cuadro especificado, seleccione ANON_KEY de la carga útil preconfigurada menú desplegable y haga clic en Generar JWT botón para generar el token.

Copie y pegue este token como valor para ANON_KEY en el .env archivo.

Del mismo modo, repita los mismos pasos para generar la SERVICE_KEY cambiando la carga útil preconfigurada y presionando Generar JWT botón.

Copie el token generado y péguelo como el valor de SERVICE_KEY en el .env archivo.

Configure los ajustes SMTP del correo electrónico configurando las siguientes variables. Estamos utilizando el servicio SES de Amazon para nuestro 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

Configure la URL del sitio.

SITE_URL=https://supabase.example.com

Configure la URL REST pública.

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

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Los correos de autenticación enviados a través de SMTP tendrán enlaces rotos debido a un error frecuente en Supabase. Para solucionar este problema, abra docker-compose.yml archivo.

$ nano docker-compose.yml

Agrega la variable API_EXTERNAL_URL justo debajo de GOTRUE_SITE_URL variable para que se parezca a lo siguiente.

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

Guarde el archivo presionando Ctrl + X e ingresando Y Cuando se le solicite. Este archivo se sobrescribirá cada vez que actualice su instalación de Supabase. Con suerte, el error se solucionará la próxima vez. Deberá agregar esta variable manualmente para asegurarse de que el error del correo electrónico no se repita.

Abra volumes/api/kong.yml archivo para editar.

$ nano volumes/api/kong.yml

Bajo los consumers sección, reemplace el anon clave del usuario con ANON_KEY generado antes.

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

Además, reemplace el service_role clave con SERVICE_KEY generado arriba.

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

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Paso 6 - Instalar Supabase

Ejecute Supabase usando el siguiente comando. Este proceso llevará algún tiempo.

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

Verifique el estado de los contenedores en ejecución.

$ 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

Paso 7:instalar SSL

Para instalar un certificado SSL usando Let's Encrypt, necesitamos instalar la herramienta Certbot.

Usaremos el instalador del paquete Snapd para eso. Dado que la mayoría de los servidores Debian no lo incluyen, instale el instalador de Snapd.

$ sudo apt install snapd

Asegúrese de que su versión de Snapd esté actualizada.

$ sudo snap install core && sudo snap refresh core

Instale Certbot.

$ sudo snap install --classic certbot

Use el siguiente comando para asegurarse de que el comando Certbot se pueda ejecutar creando un enlace simbólico al /usr/bin directorio.

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

Verifique la instalación.

$ certbot --version
certbot 1.25.0

Genere el certificado SSL.

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

El comando anterior descargará un certificado en /etc/letsencrypt/live/supabase.example.com directorio en su servidor.

Generar un grupo Diffie-Hellman certificado.

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

Cree un directorio webroot de desafío para la renovación automática de Let's Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Cree un trabajo cron para renovar el SSL. Se ejecutará todos los días para verificar el certificado y renovarlo si es necesario. Para eso, primero crea el archivo /etc/cron.daily/certbot-renew y ábralo para editarlo.

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

Pegue el siguiente código.

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

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Cambie los permisos en el archivo de tareas para que sea ejecutable.

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

Paso 8:instalar y configurar Nginx

Debian se envía con una versión anterior de Nginx. Debe descargar el repositorio oficial de Nginx para instalar la última versión.

Importe la clave de firma oficial de Nginx.

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

Agregue el repositorio para la versión estable 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

Actualice los repositorios de Debian.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifique la instalación. Asegúrate de usar sudo cada vez que ejecuta el comando Nginx en Debian. De lo contrario, no funcionará.

$ sudo nginx -v
nginx version: nginx/1.20.2

Cree y abra el archivo /etc/nginx/conf.d/supabase.conf para editar.

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

Pegue el siguiente código en él.

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;
  	}
}

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite una vez terminado.

Abra el archivo /etc/nginx/nginx.conf para editar.

$ sudo nano /etc/nginx/nginx.conf

Agregue la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf; .

server_names_hash_bucket_size  64;

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Verifique la sintaxis del archivo de configuración de 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

Inicie el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl start nginx

Paso 9 - Acceder a Supabase

Ahora puede acceder a Supabase a través de la URL https://supabase.example.com en su navegador web.

No puede crear nuevos proyectos, pero puede administrar los existentes y configurar la base de datos, el almacenamiento y la autenticación.

Paso 10:habilitar la autenticación HTTP

Supabase no proporciona administración de usuarios, por lo que debe asegurar su instalación de Supabase. La forma más sencilla de hacerlo es habilitar la autenticación HTTP mediante el servidor Nginx.

Instalar apache2-utils paquete para Nginx.

$ sudo apt install apache2-utils

Cree un archivo de contraseña para el usuario supabase . Puede elegir cualquier nombre de usuario que desee. Le pedirá una nueva contraseña. Introduzca una contraseña segura para terminar de configurar el archivo.

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

El -c flag le dice a la utilidad que cree un nuevo archivo. Si omite el archivo, debe especificar la ubicación de un archivo existente.

Abra el /etc/nginx/conf.d/supabase.conf para editar.

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

Realice los cambios en las siguientes secciones del archivo, como se muestra a continuación.

# 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;
  	}

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Verifique la configuración.

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

Reinicie el servicio Nginx.

$ sudo systemctl restart nginx

La próxima vez que abra Supabase, aparecerá la siguiente pantalla de inicio de sesión.

Paso 11 - Actualizar Supabase

Supabase es un producto de trabajo en progreso constante y sufrirá cambios constantes. Si lo usa como una instancia autohospedada, debe mantener actualizada su instalación de Supabase.

Cambie al directorio de Supabase.

$ cd ~/supabase

Obtenga el último repositorio de Github.

$ git pull

Busque cualquier cambio en docker/.env , docker/volumes/api/kong.yml archivos para cualquier cosa que requiera reconfiguración.

Apague y limpie los contenedores Docker existentes.

$ docker-compose down --remove-orphans

Obtenga las últimas imágenes.

$ docker-compose pull

Inicie los contenedores de nuevo.

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

Conclusión

Esto concluye nuestro tutorial sobre la instalación de Supabase en un servidor basado en Debian 11 utilizando el servidor Nginx como proxy inverso. Si tiene alguna pregunta, publíquela en los comentarios a continuación.


Debian
  1. Cómo instalar Docker en Debian 10 Buster

  2. Cómo instalar y usar Docker en Debian 9

  3. Cómo instalar Tomcat 8.5 en Debian 9

  4. Cómo instalar MongoDB en Debian 9

  5. Cómo instalar Docker en Debian/Ubuntu

Cómo instalar Docker en Debian 10

Cómo instalar Docker en Debian 11 (Bullseye)

Cómo instalar Docker en Debian 10 Buster

Cómo instalar Go en Debian 11

Cómo instalar Joomla con LAMP en Debian 10

Cómo instalar Docker CE en Debian 11