chore: 优化本地开发环境配置
- 添加 .env.local 支持,app.sh 和 dev-migrate.sh 自动覆盖 - Docker Compose 使用 profiles 区分 dev/prod 环境 - 改进认证 dev session 判断逻辑,使用 test account 配置 - 修复 CoinPackageCard 重复代码问题 - 清理 opencode 配置,移除敏感信息 - 新增 infra/docker/README.md 文档 - 修复 ruff/pyright/flutter lint 错误 - 更新测试用例移除已删除的 country 字段
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
# Docker Compose Infrastructure
|
||||
|
||||
> Local development infrastructure orchestration.
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
This directory contains Docker Compose configurations for local development:
|
||||
|
||||
- `docker-compose.yml` - Base services (Redis, etc.)
|
||||
- `supabase/docker-compose.yml` - Local Supabase stack (PostgreSQL, Auth, Storage, Studio, etc.)
|
||||
|
||||
---
|
||||
|
||||
## Environment-Based Service Activation
|
||||
|
||||
Services are conditionally enabled based on `ERYAO_RUNTIME__ENVIRONMENT`:
|
||||
|
||||
| Environment | Services |
|
||||
|-------------|----------|
|
||||
| `dev` | Redis + Local Supabase |
|
||||
| `prod` | Redis only (use cloud Supabase) |
|
||||
|
||||
### How It Works
|
||||
|
||||
Supabase services use `profiles: [dev]`. They only start when the `dev` profile is activated.
|
||||
|
||||
---
|
||||
|
||||
## Usage
|
||||
|
||||
### Development (with local Supabase)
|
||||
|
||||
```bash
|
||||
cd infra/docker
|
||||
docker compose --profile dev up -d
|
||||
```
|
||||
|
||||
Or with environment variable:
|
||||
|
||||
```bash
|
||||
ERYAO_RUNTIME__ENVIRONMENT=dev docker compose --profile dev up -d
|
||||
```
|
||||
|
||||
### Production (cloud Supabase)
|
||||
|
||||
```bash
|
||||
cd infra/docker
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Services Reference
|
||||
|
||||
### Base Services (always started)
|
||||
|
||||
| Service | Port | Description |
|
||||
|---------|------|-------------|
|
||||
| Redis | 6379 | Caching and queue backend |
|
||||
|
||||
### Dev-Only Services (profile: dev)
|
||||
|
||||
| Service | Port | Description |
|
||||
|---------|------|-------------|
|
||||
| PostgreSQL | 5432 | Local database |
|
||||
| GoTrue (Auth) | 9999 | Authentication service |
|
||||
| PostgREST | 3000 | REST API for database |
|
||||
| Storage | 5000 | File storage service |
|
||||
| Studio | 3000 | Supabase dashboard UI |
|
||||
| Kong | 8001, 8443 | API gateway |
|
||||
|
||||
---
|
||||
|
||||
## Configuration
|
||||
|
||||
All services read configuration from `.env` (symlinked to project root `.env`).
|
||||
|
||||
Required environment variables:
|
||||
|
||||
```bash
|
||||
# Runtime
|
||||
ERYAO_RUNTIME__ENVIRONMENT=dev
|
||||
|
||||
# Database
|
||||
ERYAO_DATABASE__PORT=5432
|
||||
ERYAO_DATABASE__NAME=postgres
|
||||
ERYAO_DATABASE__PASSWORD=your-password
|
||||
|
||||
# Supabase
|
||||
ERYAO_SUPABASE__JWT_SECRET=your-jwt-secret
|
||||
ERYAO_SUPABASE__ANON_KEY=your-anon-key
|
||||
ERYAO_SUPABASE__SERVICE_ROLE_KEY=your-service-role-key
|
||||
ERYAO_SUPABASE__PUBLIC_URL=http://localhost:8001
|
||||
|
||||
# Redis
|
||||
ERYAO_REDIS__PORT=6379
|
||||
ERYAO_REDIS__PASSWORD=your-redis-password
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Supabase services not starting
|
||||
|
||||
1. Check profile is activated: `docker compose --profile dev config`
|
||||
2. Verify environment variables in `.env`
|
||||
3. Check logs: `docker compose logs <service-name>`
|
||||
|
||||
### Port conflicts
|
||||
|
||||
If ports are already in use, override in `.env`:
|
||||
|
||||
```bash
|
||||
ERYAO_DATABASE__PORT=5433
|
||||
ERYAO_REDIS__PORT=6380
|
||||
```
|
||||
|
||||
### Reset local database
|
||||
|
||||
```bash
|
||||
docker compose --profile dev down -v
|
||||
docker compose --profile dev up -d
|
||||
```
|
||||
@@ -4,29 +4,29 @@ include:
|
||||
- ./supabase/docker-compose.yml
|
||||
|
||||
services:
|
||||
redis:
|
||||
image: redis:7.4.2-alpine
|
||||
container_name: eryao-local-redis
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "127.0.0.1:${ERYAO_REDIS__PORT:-6379}:6379"
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
environment:
|
||||
REDIS_PASSWORD: ${ERYAO_REDIS__PASSWORD:-}
|
||||
command: >
|
||||
sh -c 'if [ -n "$$REDIS_PASSWORD" ]; then redis-server --appendonly yes --requirepass "$$REDIS_PASSWORD"; else redis-server --appendonly yes; fi'
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"sh",
|
||||
"-c",
|
||||
"if [ -n \"$$REDIS_PASSWORD\" ]; then redis-cli -a \"$$REDIS_PASSWORD\" ping; else redis-cli ping; fi",
|
||||
]
|
||||
interval: 5s
|
||||
timeout: 3s
|
||||
retries: 5
|
||||
redis:
|
||||
image: redis:7.4.2-alpine
|
||||
container_name: eryao-local-redis
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "127.0.0.1:${ERYAO_REDIS__PORT:-6379}:6379"
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
environment:
|
||||
REDIS_PASSWORD: ${ERYAO_REDIS__PASSWORD:-}
|
||||
command: >
|
||||
sh -c 'if [ -n "$$REDIS_PASSWORD" ]; then redis-server --appendonly yes --requirepass "$$REDIS_PASSWORD"; else redis-server --appendonly yes; fi'
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"sh",
|
||||
"-c",
|
||||
'if [ -n "$$REDIS_PASSWORD" ]; then redis-cli -a "$$REDIS_PASSWORD" ping; else redis-cli ping; fi',
|
||||
]
|
||||
interval: 5s
|
||||
timeout: 3s
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
redis_data:
|
||||
redis_data:
|
||||
|
||||
@@ -2,6 +2,7 @@ name: eryao-supabase
|
||||
|
||||
services:
|
||||
db:
|
||||
profiles: [dev]
|
||||
container_name: eryao-supabase-db
|
||||
image: supabase/postgres:15.8.1.085
|
||||
restart: unless-stopped
|
||||
@@ -33,6 +34,7 @@ services:
|
||||
- 127.0.0.1:${ERYAO_DATABASE__PORT:-5432}:5432
|
||||
|
||||
auth:
|
||||
profiles: [dev]
|
||||
container_name: eryao-supabase-auth
|
||||
image: supabase/gotrue:v2.186.0
|
||||
restart: unless-stopped
|
||||
@@ -73,6 +75,7 @@ services:
|
||||
GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE: /auth/v1/verify
|
||||
|
||||
rest:
|
||||
profiles: [dev]
|
||||
container_name: eryao-supabase-rest
|
||||
image: postgrest/postgrest:v14.8
|
||||
restart: unless-stopped
|
||||
@@ -91,6 +94,7 @@ services:
|
||||
PGRST_APP_SETTINGS_JWT_EXP: 3600
|
||||
|
||||
storage:
|
||||
profiles: [dev]
|
||||
container_name: eryao-supabase-storage
|
||||
image: supabase/storage-api:v1.48.26
|
||||
restart: unless-stopped
|
||||
@@ -124,6 +128,7 @@ services:
|
||||
- storage-data:/var/lib/storage
|
||||
|
||||
meta:
|
||||
profiles: [dev]
|
||||
container_name: eryao-supabase-meta
|
||||
image: supabase/postgres-meta:v0.96.3
|
||||
restart: unless-stopped
|
||||
@@ -145,6 +150,7 @@ services:
|
||||
retries: 1
|
||||
|
||||
studio:
|
||||
profiles: [dev]
|
||||
container_name: eryao-supabase-studio
|
||||
image: supabase/studio:2026.04.08-sha-205cbe7
|
||||
restart: unless-stopped
|
||||
@@ -180,6 +186,7 @@ services:
|
||||
- studio-functions:/var/lib/functions
|
||||
|
||||
kong:
|
||||
profiles: [dev]
|
||||
container_name: eryao-supabase-kong
|
||||
image: kong/kong:3.9.1
|
||||
restart: unless-stopped
|
||||
|
||||
Reference in New Issue
Block a user