Files
2026-03-03 00:41:48 +07:00
..
2026-03-03 00:41:48 +07:00
2026-03-03 00:41:48 +07:00
2026-03-03 00:41:48 +07:00
2026-03-03 00:41:48 +07:00
2026-03-03 00:41:48 +07:00
2026-03-03 00:41:48 +07:00
2026-03-03 00:41:48 +07:00
2026-03-03 00:41:48 +07:00

Supabase - Backend as a Service

Supabase เป็น open-source Firebase alternative ที่ให้บริการ:

  • PostgreSQL Database พร้อม Realtime subscriptions
  • Authentication & Authorization
  • RESTful API (PostgREST)
  • Storage สำหรับไฟล์
  • Edge Functions
  • Studio UI สำหรับจัดการ

🚀 Quick Start

1. Setup Configuration Files

cd 02-supabase
bash setup.sh

Script นี้จะ:

  • สร้าง directories ที่จำเป็น
  • ดาวน์โหลด config files จาก Supabase repository
  • สร้าง .env file จาก template

2. Configure Environment Variables

แก้ไขไฟล์ .env:

nano .env

สิ่งที่ต้องแก้ไข:

# Generate secure passwords and secrets
POSTGRES_PASSWORD=<your-secure-password>
JWT_SECRET=$(openssl rand -base64 32)
SECRET_KEY_BASE=$(openssl rand -base64 32)
VAULT_ENC_KEY=$(openssl rand -base64 32)
PG_META_CRYPTO_KEY=$(openssl rand -base64 32)
LOGFLARE_PUBLIC_ACCESS_TOKEN=$(openssl rand -base64 32)
LOGFLARE_PRIVATE_ACCESS_TOKEN=$(openssl rand -base64 32)

# Dashboard credentials
DASHBOARD_USERNAME=admin
DASHBOARD_PASSWORD=<your-secure-password>

# Update URLs if needed
SUPABASE_PUBLIC_URL=http://localhost:8100
SITE_URL=http://localhost:3010

3. Start Supabase

# Ensure network exists
cd ../00-network
bash create-network.sh

# Start Supabase
cd ../02-supabase
docker compose up -d

4. Verify Services

docker compose ps

คุณควรเห็น containers:

  • supabase-studio - Web UI
  • supabase-kong - API Gateway
  • supabase-auth - Authentication service
  • supabase-rest - PostgREST API
  • supabase-realtime - Realtime subscriptions
  • supabase-storage - File storage
  • supabase-db - PostgreSQL database
  • supabase-meta - Database metadata
  • supabase-analytics - Logflare analytics
  • และอื่นๆ

🔑 Access Points

Service URL Port Description
Studio http://localhost:3010 3010 Web UI สำหรับจัดการ
API Gateway http://localhost:8100 8100 REST API endpoint
PostgreSQL localhost:5434 5434 Database (internal)
Pooler localhost:6544 6544 Connection pooler

📝 Port Configuration

Supabase ใช้ port ที่ไม่ชนกับ services อื่นใน stack:

  • 3010: Studio (แทน default 3000)
  • 8100: Kong HTTP (แทน default 8000)
  • 8443: Kong HTTPS
  • 5434: PostgreSQL (แทน default 5432, เพราะ 5435 ใช้โดย main PostgreSQL)
  • 6544: Pooler (แทน default 6543)

🔐 Authentication

Default API Keys

ใน .env จะมี API keys 2 ประเภท:

  1. ANON_KEY - ใช้สำหรับ client-side (public)
  2. SERVICE_ROLE_KEY - ใช้สำหรับ server-side (private, bypass RLS)

⚠️ สำคัญ: ใน production ต้อง generate keys ใหม่ด้วย Supabase CLI:

# Install Supabase CLI
npm install -g supabase

# Generate new JWT secrets
supabase gen keys jwt

Dashboard Access

เข้า Studio ที่ http://localhost:3010 แล้วใช้:

  • Username: DASHBOARD_USERNAME จาก .env
  • Password: DASHBOARD_PASSWORD จาก .env

📊 Database Management

Connect to PostgreSQL

# Using psql
psql -h localhost -p 5434 -U postgres -d postgres

# Using connection string
postgresql://postgres:<POSTGRES_PASSWORD>@localhost:5434/postgres

Database Roles

Supabase สร้าง roles หลายตัวอัตโนมัติ:

  • postgres - Superuser
  • authenticator - สำหรับ PostgREST
  • anon - Anonymous access
  • authenticated - Authenticated users
  • service_role - Service role (bypass RLS)
  • supabase_admin - Admin operations
  • supabase_auth_admin - Auth service
  • supabase_storage_admin - Storage service

🔄 Realtime Subscriptions

Supabase Realtime ให้ subscribe การเปลี่ยนแปลงใน database:

import { createClient } from '@supabase/supabase-js'

const supabase = createClient(
  'http://localhost:8100',
  'YOUR_ANON_KEY'
)

// Subscribe to changes
const channel = supabase
  .channel('table-changes')
  .on('postgres_changes', 
    { event: '*', schema: 'public', table: 'your_table' },
    (payload) => console.log(payload)
  )
  .subscribe()

📦 Storage

Upload Files

const { data, error } = await supabase
  .storage
  .from('bucket-name')
  .upload('file-path', file)

Download Files

const { data, error } = await supabase
  .storage
  .from('bucket-name')
  .download('file-path')

🔧 Edge Functions

Edge Functions อยู่ใน volumes/functions/:

# Create new function
mkdir -p volumes/functions/hello
cat > volumes/functions/hello/index.ts << 'EOF'
import { serve } from "https://deno.land/std@0.168.0/http/server.ts"

serve(async (req) => {
  return new Response(
    JSON.stringify({ message: "Hello from Supabase Edge Functions!" }),
    { headers: { "Content-Type": "application/json" } },
  )
})
EOF

# Restart functions service
docker compose restart functions

🔍 Monitoring & Logs

View Logs

# All services
docker compose logs -f

# Specific service
docker compose logs -f studio
docker compose logs -f auth
docker compose logs -f db

Analytics

Supabase Analytics (Logflare) รวบรวม logs และ metrics ที่:

🛠️ Maintenance

Backup Database

# Backup
docker exec supabase-db pg_dump -U postgres postgres > backup_$(date +%Y%m%d).sql

# Restore
docker exec -i supabase-db psql -U postgres postgres < backup_20260218.sql

Update Supabase

# Pull latest images
docker compose pull

# Restart services
docker compose up -d

Reset Everything

# Stop and remove containers
docker compose down

# Remove volumes (⚠️ This deletes all data!)
docker compose down -v
rm -rf volumes/db/data

# Start fresh
bash setup.sh
docker compose up -d

🔗 Integration with Other Services

Connect from API Service (FastAPI)

from supabase import create_client, Client

supabase: Client = create_client(
    "http://supabase-kong:8000",  # Internal network
    "YOUR_SERVICE_ROLE_KEY"
)

# Query data
response = supabase.table('users').select("*").execute()

Connect via Nginx Proxy Manager

เพิ่ม Proxy Host:

  • Domain: supabase.sriphat.local
  • Forward Hostname: supabase-kong
  • Forward Port: 8000

📚 Documentation

🐛 Troubleshooting

Services not starting

# Check logs
docker compose logs

# Check network
docker network inspect shared_data_network

# Verify .env file
cat .env | grep -v '^#' | grep -v '^$'

Database connection issues

# Check database is ready
docker exec supabase-db pg_isready -U postgres

# Check database logs
docker compose logs db

Port conflicts

ถ้า port ชน ให้แก้ไขใน .env:

STUDIO_PORT=3011
KONG_HTTP_PORT=8101

แล้ว restart:

docker compose down
docker compose up -d

🔒 Security Best Practices

  1. เปลี่ยน default passwords ทั้งหมดใน .env
  2. Generate JWT secrets ใหม่ สำหรับ production
  3. Enable Row Level Security (RLS) สำหรับทุก table
  4. ใช้ HTTPS ใน production (ผ่าน Nginx Proxy Manager)
  5. Backup database เป็นประจำ
  6. Monitor logs สำหรับ suspicious activities
  7. Update images เป็นประจำเพื่อ security patches

📞 Support

หากมีปัญหาหรือคำถาม:

  1. ตรวจสอบ logs: docker compose logs
  2. ดู Supabase Discussions
  3. อ่าน Self-Hosting Troubleshooting