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:
| Obraz | Usługa | Docker Hub |
|---|---|---|
supabase/postgres | PostgreSQL z rozszerzeniami | 10M+ pobrań |
supabase/gotrue | Uwierzytelnianie (GoTrue) | Publiczny |
supabase/realtime | Subskrypcje czasu rzeczywistego | Publiczny |
supabase/storage-api | API storage obiektowego | Publiczny |
supabase/postgrest | REST API (PostgREST) | Publiczny |
supabase/studio | Panel administracyjny | Publiczny |
supabase/edge-runtime | Edge Functions (Deno) | Publiczny |
kong | API Gateway | Publiczny (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
:latestna produkcji. Używaj konkretnych tagów wersji jaksupabase/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
| Czynnik | Docker Hub (publiczny) | GHCR | AWS ECR |
|---|---|---|---|
| Koszt | Darmowy dla pobrań | Darmowy dla publicznych | $0.10/GB storage + transfer |
| Auth wymagany dla ECS | Nie (publiczne obrazy) | Nie (publiczne obrazy) | Nie (to samo konto AWS) |
| Limity | 100 pobrań/6h (anon) | Bez limitów (publiczne) | Bez limitów |
| Skanowanie podatności | Docker Scout (płatny) | GitHub security alerts | Amazon Inspector (w cenie) |
| Integracja CI/CD | Dowolny pipeline | GitHub Actions natywnie | AWS CodePipeline / dowolny z IAM |
| Najlepszy dla | Oficjalne obrazy bez zmian | Własne forki, zespoły na GitHub | Enterprise, 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.3i 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:
- Dlaczego self-hostować Supabase na AWS zamiast Supabase Cloud?
- Self-hosting Supabase na AWS: Architektura i przewodnik konfiguracji
- Migracja z Heroku do AWS: Czego się spodziewać
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.