Self-hosting Supabase na AWS bez Amazon ECR

Jerzy Kopaczewski 01 czerwca 2026 11 min czytania
Contents
Częste pytanie przy self-hostingu Supabase na AWS: czy naprawdę potrzebuję Amazon ECR? Krótka odpowiedź brzmi: nie. Supabase publikuje wszystkie swoje obrazy kontenerów publicznie na Docker Hub i istnieją uzasadnione powody, by całkowicie pominąć ECR.

Ten artykuł opisuje jak uruchomić Supabase na AWS korzystając z publicznych rejestrów kontenerów, kiedy ECR ma sens i jak skonfigurować ECS Fargate lub EC2, by pobierać obrazy z Docker Hub lub GitHub Container Registry.

Jeśli wciąż zastanawiasz się, czy w ogóle self-hostować, zacznij od naszego przewodnika dlaczego zespoły wybierają self-hosting Supabase na AWS zamiast Supabase Cloud.

 

Dlaczego pominąć ECR?

Amazon Elastic Container Registry to natywny rejestr obrazów kontenerów w AWS. Integruje się ściśle z ECS, ma kontrolę dostępu opartą na IAM i oferuje skanowanie podatności przez Amazon Inspector. To domyślna rekomendacja w większości poradników AWS.

Ale są uzasadnione powody, by go unikać:

  • Złożoność dla małych zespołów. ECR wymaga polityk IAM, polityk cyklu życia i konfiguracji uwierzytelniania. Dla zespołu, który chce po prostu uruchomić Supabase, to zbędny narzut przy korzystaniu z publicznych obrazów.
  • Koszty. ECR nalicza opłaty za przechowywanie ($0.10/GB/miesiąc) i transfer danych. Przy ~15 obrazach Supabase, które często się aktualizują, to się sumuje. Publiczne obrazy z Docker Hub są bezpłatne.
  • Nie budujesz własnych obrazów Supabase. Jeśli korzystasz z oficjalnych obrazów Supabase bez modyfikacji, nie ma powodu kopiować ich do ECR. Dodajesz pośrednika między Docker Hub a swoim compute.
  • Uproszczenie CI/CD. Bez ECR pipeline wdrożeniowy nie potrzebuje poświadczeń docker push/pull, kroków logowania do ECR ani zarządzania tagami obrazów. Plik docker-compose po prostu referencuje publiczne tagi.

Gdzie znajdują się obrazy Supabase

Supabase publikuje wszystkie oficjalne obrazy na Docker Hub pod przestrzenią nazw supabase/. To te same obrazy używane przez supabase start (CLI) oraz oficjalny docker-compose.yml w repozytorium Supabase.

Kluczowe obrazy potrzebne do self-hosted deploymentu:

ObrazUsługaDocker Hub
supabase/postgresPostgreSQL z rozszerzeniami10M+ pobrań
supabase/gotrueUwierzytelnianie (GoTrue)Publiczny
supabase/realtimeSubskrypcje czasu rzeczywistegoPubliczny
supabase/storage-apiAPI storage obiektowegoPubliczny
supabase/postgrestREST API (PostgREST)Publiczny
supabase/studioPanel administracyjnyPubliczny
supabase/edge-runtimeEdge Functions (Deno)Publiczny
kongAPI GatewayPubliczny (oficjalny obraz Kong)

Wszystkie te obrazy mogą być pobierane bezpośrednio przez ECS Fargate, EC2 lub dowolny host Docker bez żadnego uwierzytelniania.

Opcja 1: Docker Compose na EC2 (najprostsza)

Najprostsze podejście. Sklonuj oficjalną konfigurację Docker Supabase i uruchom ją na instancji EC2. Żaden ECR nie jest potrzebny.

# SSH do instancji EC2
git clone --depth 1 https://github.com/supabase/supabase
cd supabase/docker
cp .env.example .env

# Edytuj .env swoimi sekretami (JWT secret, anon key, service role key itp.)
# NIGDY nie używaj przykładowych wartości na produkcji

docker compose up -d

Wszystkie obrazy pobierają się automatycznie z Docker Hub. Żadna konfiguracja rejestru nie jest potrzebna.

Zalety:

  • Zero konfiguracji rejestru
  • Identyczne doświadczenie jak przy lokalnym developmencie
  • Łatwa aktualizacja (docker compose pull && docker compose up -d)

Wady:

  • Pojedyncza instancja EC2 (brak wysokiej dostępności bez dodatkowej pracy)
  • Sam zarządzasz patchowaniem OS, aktualizacjami Dockera i backupami
  • Brak wbudowanego auto-scalingu

Kiedy użyć: Proof of concept, środowiska deweloperskie lub małe workloady produkcyjne, gdzie prostota jest ważniejsza niż odporność.

Opcja 2: ECS Fargate z publicznymi obrazami Docker Hub

ECS Fargate może pobierać bezpośrednio z Docker Hub bez żadnego udziału ECR. Po prostu referencujesz publiczny obraz w definicji zadania.

{
  "containerDefinitions": [
    {
      "name": "supabase-postgrest",
      "image": "supabase/postgrest:latest",
      "essential": true,
      "portMappings": [
        {
          "containerPort": 3000,
          "protocol": "tcp"
        }
      ],
      "environment": [
        {
          "name": "PGRST_DB_URI",
          "value": "postgres://authenticator:password@db:5432/postgres"
        },
        {
          "name": "PGRST_DB_SCHEMAS",
          "value": "public,storage,graphql_public"
        }
      ]
    }
  ]
}

Pole image wskazuje bezpośrednio na Docker Hub. ECS pobiera obraz bez uwierzytelniania, ponieważ jest publiczny.

Ważne kwestie:

  • Przypnij tagi obrazów. Nie używaj :latest na produkcji. Używaj konkretnych tagów wersji jak supabase/postgrest:v12.2.3, by deploymenty były powtarzalne i kontrolujesz kiedy następują aktualizacje.
  • Limity Docker Hub. Anonimowe pobierania z Docker Hub są ograniczone do 100 pobrań na 6 godzin na IP. Dla ECS Fargate (który używa współdzielonych IP NAT) możesz trafić w ten limit przy skalowaniu wielu tasków. Rozwiązania: użyj uwierzytelnionego pobierania (darmowy tier daje 200/6h) lub mirror do ECR przy dużej skali.
  • Brak skanowania podatności. Bez ECR nie masz skanowania Amazon Inspector na obrazach kontenerów. Musisz uruchomić osobne narzędzie skanujące w pipeline CI.

Przykład Terraform dla ECS z obrazami Docker Hub

resource "aws_ecs_task_definition" "supabase_postgrest" {
  family                   = "supabase-postgrest"
  requires_compatibilities = ["FARGATE"]
  network_mode             = "awsvpc"
  cpu                      = "256"
  memory                   = "512"

  container_definitions = jsonencode([
    {
      name      = "postgrest"
      image     = "supabase/postgrest:v12.2.3"
      essential = true
      portMappings = [
        {
          containerPort = 3000
          protocol      = "tcp"
        }
      ]
      environment = [
        {
          name  = "PGRST_DB_SCHEMAS"
          value = "public,storage,graphql_public"
        }
      ]
      secrets = [
        {
          name      = "PGRST_DB_URI"
          valueFrom = aws_secretsmanager_secret.db_uri.arn
        }
      ]
      logConfiguration = {
        logDriver = "awslogs"
        options = {
          "awslogs-group"         = "/ecs/supabase-postgrest"
          "awslogs-region"        = "eu-west-2"
          "awslogs-stream-prefix" = "ecs"
        }
      }
    }
  ])

  execution_role_arn = aws_iam_role.ecs_execution.arn
  task_role_arn      = aws_iam_role.ecs_task.arn
}

Uwaga: sekrety pobierane są z AWS Secrets Manager (nie ze zmiennych środowiskowych), co jest najlepszą praktyką niezależnie od używanego rejestru.

Opcja 3: GitHub Container Registry (GHCR)

Jeśli forkujesz lub modyfikujesz obrazy Supabase, GitHub Container Registry (ghcr.io) to dobra alternatywa dla ECR. Naturalnie integruje się z GitHub Actions, obsługuje publiczne i prywatne obrazy i nie ma limitów pobierania dla publicznych obrazów.

# Twój zmodyfikowany obraz Supabase
FROM supabase/postgrest:v12.2.3

# Dodaj własną konfigurację
COPY custom-postgrest.conf /etc/postgrest.conf

Push do GHCR z GitHub Actions:

- name: Push to GHCR
  run: |
    echo "$" | docker login ghcr.io -u $ --password-stdin
    docker push ghcr.io/$/supabase-postgrest:$

Następnie referencujesz ghcr.io/twoja-org/supabase-postgrest:sha w definicji zadania ECS. Dla publicznych obrazów GHCR nie jest potrzebne uwierzytelnianie po stronie ECS.

Kiedy naprawdę potrzebujesz ECR

ECR ma sens gdy:

  • Budujesz własne obrazy zawierające zastrzeżony kod lub konfigurację, którą nie chcesz upubliczniać.
  • Potrzebujesz skanowania Inspector do wykrywania podatności w ramach wymagań compliance (SOC 2, Cyber Essentials Plus, HIPAA).
  • Trafiasz w limity Docker Hub przy dużej skali (dziesiątki tasków ECS często pobierających obrazy).
  • Chcesz pull-through cache. ECR może działać jako cache proxy dla Docker Hub, dając ci szybkość lokalnego rejestru z wygodą publicznych obrazów.
  • Redundancja między regionami. Reguły replikacji ECR mogą mirrorować obrazy między regionami na potrzeby disaster recovery.

Jeśli którykolwiek z tych punktów dotyczy twojego przypadku, ECR jest właściwym wyborem. Ale dla standardowego self-hostingu Supabase z oficjalnymi publicznymi obrazami jest to zbędna warstwa.

Porównanie: ECR vs Docker Hub vs GHCR dla Supabase

CzynnikDocker Hub (publiczny)GHCRAWS ECR
KosztDarmowy dla pobrańDarmowy dla publicznych$0.10/GB storage + transfer
Auth wymagany dla ECSNie (publiczne obrazy)Nie (publiczne obrazy)Nie (to samo konto AWS)
Limity100 pobrań/6h (anon)Bez limitów (publiczne)Bez limitów
Skanowanie podatnościDocker Scout (płatny)GitHub security alertsAmazon Inspector (w cenie)
Integracja CI/CDDowolny pipelineGitHub Actions natywnieAWS CodePipeline / dowolny z IAM
Najlepszy dlaOficjalne obrazy bez zmianWłasne forki, zespoły na GitHubEnterprise, compliance, skala

Obsługa aktualizacji bez ECR

Gdy Supabase wydaje nową wersję, musisz zaktualizować tagi obrazów w swoim deploymencie:

Docker Compose (EC2):

cd supabase/docker
git pull  # Pobiera zaktualizowany docker-compose.yml z nowymi tagami
docker compose pull
docker compose up -d

ECS Fargate (Terraform): Zaktualizuj tag obrazu w zmiennej Terraform i wdróż:

variable "supabase_postgrest_version" {
  default = "v12.2.3"  # Podnieś to by zaktualizować
}

Następnie terraform apply uruchamia nowy deployment ECS z zaktualizowanym obrazem.

Wskazówka: Przypnij do konkretnych tagów wersji i traktuj aktualizacje jako świadome wdrożenia. Nie używaj :latest na produkcji, ponieważ uniemożliwia to rollbacki i może cicho wprowadzać zmiany łamiące.

Kwestie bezpieczeństwa bez ECR

Bez wbudowanego skanowania ECR potrzebujesz alternatywnych podejść do bezpieczeństwa kontenerów:

  • Trivy (open-source, działa w CI): Skanuj obrazy przed wdrożeniem. Dodaj krok w GitHub Actions, który uruchamia trivy image supabase/postgrest:v12.2.3 i failuje build przy krytycznych CVE.
  • Docker Scout (natywny dla Docker Hub): Dostępny dla obrazów Docker Hub, zapewnia wgląd w podatności bezpośrednio w rejestrze.
  • Przypnij i audytuj: Korzystając z oficjalnych obrazów Supabase, zespół Supabase zajmuje się patchowaniem. Twoją odpowiedzialnością jest utrzymywanie aktualnych wersji i szybka aktualizacja gdy pojawiają się advisory bezpieczeństwa.

Dla regulowanych środowisk (fintech, healthcare), gdzie musisz wykazać proces skanowania podatności audytorom, ECR + Inspector to ścieżka najmniejszego oporu. Zobacz nasze usługi bezpieczeństwa i compliance.

Podsumowanie

Nie potrzebujesz ECR, by self-hostować Supabase na AWS. Oficjalne obrazy są publiczne na Docker Hub i mogą być pobierane bezpośrednio przez ECS Fargate lub EC2 bez żadnej konfiguracji rejestru. To upraszcza wdrożenie, eliminuje komponent infrastruktury do zarządzania i oszczędza koszty.

Użyj ECR gdy potrzebujesz skanowania podatności dla compliance, budujesz własne obrazy lub operujesz na skali, gdzie limity Docker Hub stają się problemem.

Dla większości zespołów rozpoczynających self-hosting Supabase na AWS, bezpośrednie pobieranie z Docker Hub to właściwy punkt startowy. Zawsze możesz dodać ECR później, gdy pojawi się potrzeba.

Powiązane przewodniki:

Potrzebujesz pomocy z konfiguracją self-hosted Supabase na swojej infrastrukturze AWS? Nasze usługi migracji do chmury obejmują pełną konfigurację od IaC po CI/CD.

Supabase AWS Docker self-hosting ECR

Przeczytaj również:

Poprzedni post