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
- สร้าง
.envfile จาก 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 UIsupabase-kong- API Gatewaysupabase-auth- Authentication servicesupabase-rest- PostgREST APIsupabase-realtime- Realtime subscriptionssupabase-storage- File storagesupabase-db- PostgreSQL databasesupabase-meta- Database metadatasupabase-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 ประเภท:
- ANON_KEY - ใช้สำหรับ client-side (public)
- 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- Superuserauthenticator- สำหรับ PostgRESTanon- Anonymous accessauthenticated- Authenticated usersservice_role- Service role (bypass RLS)supabase_admin- Admin operationssupabase_auth_admin- Auth servicesupabase_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 ที่:
- http://localhost:3010 (ใน Studio UI)
🛠️ 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
- เปลี่ยน default passwords ทั้งหมดใน
.env - Generate JWT secrets ใหม่ สำหรับ production
- Enable Row Level Security (RLS) สำหรับทุก table
- ใช้ HTTPS ใน production (ผ่าน Nginx Proxy Manager)
- Backup database เป็นประจำ
- Monitor logs สำหรับ suspicious activities
- Update images เป็นประจำเพื่อ security patches
📞 Support
หากมีปัญหาหรือคำถาม:
- ตรวจสอบ logs:
docker compose logs - ดู Supabase Discussions
- อ่าน Self-Hosting Troubleshooting