Overview
This is a repackaged software product wherein additional charges apply for hardening, security configuration, and support.
WHAT IS SUPABASE
Supabase is an open-source Firebase alternative built on PostgreSQL. It turns a Postgres database into a full application backend: instant RESTful and GraphQL APIs over your tables (PostgREST), a complete authentication and user-management server with email and JWT support (GoTrue), realtime subscriptions over WebSockets, S3-compatible object storage with on-the-fly image transformation, serverless edge functions, and the Supabase Studio dashboard for managing it all from the browser. The self-hosted edition runs as a docker-compose deployment of eleven services - Studio, the Kong API gateway, Auth, REST, Realtime, Storage, imgproxy, postgres-meta, Edge Functions, the Postgres database, and the Supavisor connection pooler. Build a backend for web and mobile apps without writing server code: define tables, get APIs and a typed client instantly, manage users, and subscribe to changes. Apache-2.0 license, no vendor lock-in.
WHAT THIS AMI ADDS
Security hardening:
- Every secret regenerated per instance at first boot - the Postgres password, the JWT signing secret, the dashboard password, the Realtime/Supavisor key base, the Vault and postgres-meta encryption keys, and the Storage S3 keys. The publicly known upstream demo values are never used.
- Both API keys (anon and service_role) are freshly minted JWTs re-signed from the per-instance JWT secret - the default anon/service-role keys that ship with bare Supabase are public and grant full database access
- Host Nginx fronts the Kong API gateway on TCP 443 with a self-signed certificate; HTTP redirects to HTTPS; the Studio dashboard is protected by HTTP basic auth
- All eleven container images (Studio, Kong, Auth, REST, Realtime, Storage, imgproxy, postgres-meta, Edge Functions, PostgreSQL, Supavisor) pinned by SHA-256 digest with explicit linux/amd64 platform - reproducible builds, no surprise upgrades on rebuild
- Kong, Postgres (5432) and the Supavisor pooler (6543) bind to 127.0.0.1 only - Nginx on 443 is the sole public-facing endpoint by default
- UFW firewall pre-configured - only TCP 22, 80, 443 are exposed
- fail2ban, AppArmor
- CVE scan - every image is scanned for vulnerabilities before release
OS hardening (CIS Level 1):
- CIS Ubuntu 24.04 LTS Level 1 benchmark applied via ansible-lockdown
- auditd, SSH hardening, kernel hardening, IMDSv2 enforced
Compliance artifacts:
- SBOM - CycloneDX 1.6 at /etc/lynxroute/sbom.json
- CIS Conformance Report at /etc/lynxroute/cis-report.html
- CIS Tailored Profile at /usr/share/doc/lynxroute/CIS_TAILORED_PROFILE.md
ARCHITECTURE NOTES
A single host Nginx vhost on TCP 443 terminates TLS and proxies to the Kong gateway, which routes internally to Studio (/), Auth (/auth/v1), REST and GraphQL (/rest/v1, /graphql/v1), Realtime (/realtime/v1, WebSocket), Storage (/storage/v1), and Edge Functions (/functions/v1). Postgres data and uploaded objects persist at /opt/supabase/volumes/db/data and /opt/supabase/volumes/storage - operators can attach an EBS volume there. Direct database access on ports 5432 (session) and 6543 (transaction pooler) is bound to localhost by default; open it explicitly when you need external connections. Replace the self-signed certificate with a CA-signed certificate for production using Certbot, then set SUPABASE_PUBLIC_URL, API_EXTERNAL_URL and SITE_URL in /opt/supabase/.env to your HTTPS hostname so auth callbacks, storage URLs and the Studio dashboard use the new origin.
Highlights
- Supabase security baked in: the Postgres password, JWT secret, dashboard password and both API keys (anon + service_role) are regenerated per instance at first boot, host nginx puts TLS in front of the Kong gateway, all eleven images SHA-pinned - unlike bare Supabase AMIs that ship with the public demo JWT secret, the well-known anon/service-role keys, and the default dashboard password.
- CIS Level 1 hardened Ubuntu 24.04 LTS: auditd, fail2ban, AppArmor, SSH key-only, IMDSv2 enforced. CVE-scanned before every release. SBOM (CycloneDX) and CIS Conformance Report included.
- A full open-source backend: PostgreSQL with instant REST and GraphQL APIs, authentication, realtime subscriptions, object storage, edge functions, and the Studio dashboard. Self-hosted, your data stays in your account. Apache-2.0 license - fully auditable, no vendor lock-in, ever.
Details
Introducing multi-product solutions
You can now purchase comprehensive solutions tailored to use cases and industries.
Features and programs
Financing for AWS Marketplace purchases
Pricing
Free trial
Dimension | Cost/hour |
|---|---|
t3.large Recommended | $0.03 |
m6i.xlarge | $0.05 |
m6i.large | $0.03 |
Vendor refund policy
We do not offer refunds for this product. AWS infrastructure charges (EC2, EBS, data transfer) are billed separately by AWS and are not refundable by us.
How can we make this page better?
Legal
Vendor terms and conditions
Content disclaimer
Delivery details
64-bit (x86) Amazon Machine Image (AMI)
Amazon Machine Image (AMI)
An AMI is a virtual image that provides the information required to launch an instance. Amazon EC2 (Elastic Compute Cloud) instances are virtual servers on which you can run your applications and workloads, offering varying combinations of CPU, memory, storage, and networking resources. You can launch as many instances from as many different AMIs as you need.
Version release notes
Supabase 2026.06.03 - Initial release (June 2026)
- Supabase self-hosted stack (snapshot 2026.06.03) on Ubuntu 24.04 LTS
- CIS Level 1 hardening applied (ansible-lockdown/UBUNTU24-CIS)
- CVE-scanned before every release
- Every secret regenerated per instance at first boot: Postgres password, JWT signing secret, dashboard password, Realtime/Supavisor key base, Vault and postgres-meta encryption keys, Storage S3 keys
- Both API keys (anon and service_role) re-signed per instance from the new JWT secret - the public upstream demo keys are never used
- Host Nginx fronts the Kong gateway on TCP 443 with a self-signed certificate; HTTP redirects to HTTPS; Studio dashboard behind HTTP basic auth
- All eleven container images pinned by SHA-256 digest with explicit linux/amd64 platform
- Kong, Postgres and the Supavisor pooler bind to 127.0.0.1 only; Nginx on 443 is the sole public endpoint
- UFW firewall pre-configured (TCP 22, 80, 443 only)
- fail2ban, auditd, AppArmor pre-configured
- SBOM (CycloneDX 1.6) at /etc/lynxroute/sbom.json
- CIS Conformance Report (OpenSCAP) at /etc/lynxroute/cis-report.html
- IMDSv2 enforced
Additional details
Usage instructions
- Launch instance (t3.large recommended; the bundled stack runs eleven containers and needs about 8 GB RAM)
- Open Security Group - restrict TCP 443 to YOUR IP/32 until you have logged in (the anon and service_role API keys in the credentials file grant full API access)
- SSH: ssh -i key.pem ubuntu@<PUBLIC_IP>
- Read credentials: sudo cat /root/supabase-credentials.txt
- Wait for first-boot initialization to finish - on first launch the stack takes about 2 to 5 minutes (database migrations plus eleven containers). A loading page is shown until the backend is ready, then it switches to the dashboard automatically.
- Open https://<PUBLIC_IP> in your browser - accept the self-signed certificate warning, then log in to the Studio dashboard with the basic-auth username and password from the credentials file
- Use the API from your application: the project URL is https://<PUBLIC_IP> and the anon and service_role keys are in the credentials file. Example: curl https://<PUBLIC_IP>/rest/v1/ -H "apikey: YOUR_ANON_KEY" -k
API routes (through the Kong gateway on https://<PUBLIC_IP>): /auth/v1/ Authentication (GoTrue) /rest/v1/ Auto-generated REST API (PostgREST) /graphql/v1 GraphQL API /realtime/v1/ Realtime subscriptions (WebSocket) /storage/v1/ Object storage /functions/v1/ Edge functions
Direct Postgres access: Ports 5432 (session pooler) and 6543 (transaction pooler) are bound to 127.0.0.1 by default. To connect an external client, change the supavisor port binding in /opt/supabase/docker-compose.yml from 127.0.0.1 to 0.0.0.0, run sudo systemctl restart supabase, and open the port in the Security Group. The Postgres password is in /root/supabase-credentials.txt.
Stack management: cd /opt/supabase && sudo docker compose ps cd /opt/supabase && sudo docker compose logs -f kong sudo systemctl restart supabase
Replace the self-signed TLS certificate with a CA-signed certificate for production using Certbot or another ACME client. After the certificate is issued, edit /opt/supabase/.env and set SUPABASE_PUBLIC_URL, API_EXTERNAL_URL and SITE_URL to https with your domain, then sudo systemctl restart supabase so auth callbacks, storage URLs and the dashboard use the new hostname.
Resources
Vendor resources
Support
Vendor support
Visit us online: https://lynxroute.com
For Supabase documentation: https://supabase.com/docs For Supabase upstream issues:
AWS infrastructure support
AWS Support is a one-on-one, fast-response support channel that is staffed 24x7x365 with experienced and technical support engineers. The service helps customers of all sizes and technical abilities to successfully utilize the products and features provided by Amazon Web Services.