mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-17 10:59:39 +02:00
Applied formatting to 1487+ files using pnpm format:write - TypeScript/JavaScript files - Svelte components - Astro pages - JSON configs - Markdown docs 13 files still need manual review (Astro JSX comments)
341 lines
7.2 KiB
Markdown
341 lines
7.2 KiB
Markdown
# 🚀 DEPLOYMENT - Job Queue System
|
|
|
|
**Status:** In Progress
|
|
**Started:** 2025-10-09
|
|
|
|
---
|
|
|
|
## ✅ Step 1: Database Migration
|
|
|
|
### Option A: Via Supabase Dashboard (EMPFOHLEN für Production)
|
|
|
|
1. **Öffne Supabase Dashboard:**
|
|
|
|
```
|
|
https://supabase.com/dashboard/project/mjuvnnjxwfwlmxjsgkqu
|
|
```
|
|
|
|
2. **Navigiere zu:** SQL Editor (linkes Menü)
|
|
|
|
3. **Kopiere die Migration:**
|
|
- Datei: `apps/mobile/supabase/migrations/20251009_job_queue_system.sql`
|
|
- Kompletten Inhalt kopieren
|
|
|
|
4. **Führe aus:**
|
|
- New Query → Paste → Run
|
|
- Warte auf Success Message
|
|
|
|
5. **Verifiziere:**
|
|
|
|
```sql
|
|
-- Check tables
|
|
SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tablename = 'job_queue';
|
|
|
|
-- Check functions
|
|
SELECT routine_name FROM information_schema.routines
|
|
WHERE routine_schema = 'public' AND routine_name IN ('enqueue_job', 'claim_next_job', 'complete_job');
|
|
|
|
-- Check views
|
|
SELECT viewname FROM pg_views WHERE schemaname = 'public'
|
|
AND viewname IN ('queue_health', 'failed_jobs_recent', 'stuck_jobs');
|
|
```
|
|
|
|
### Option B: Via CLI (Local → Remote)
|
|
|
|
```bash
|
|
# WARNUNG: Funktioniert nur wenn lokale DB version matches
|
|
# (haben DB version 17 vs 15 Mismatch)
|
|
|
|
# Falls du trotzdem CLI nutzen willst:
|
|
cd apps/mobile
|
|
npx supabase db push
|
|
```
|
|
|
|
---
|
|
|
|
## ⏳ Step 2: Deploy Edge Functions
|
|
|
|
### 2.1 Deploy start-generation
|
|
|
|
```bash
|
|
cd apps/mobile
|
|
npx supabase functions deploy start-generation --project-ref mjuvnnjxwfwlmxjsgkqu
|
|
```
|
|
|
|
**Expected Output:**
|
|
|
|
```
|
|
✓ Deployed Function start-generation
|
|
```
|
|
|
|
### 2.2 Deploy process-generation
|
|
|
|
```bash
|
|
npx supabase functions deploy process-generation --project-ref mjuvnnjxwfwlmxjsgkqu
|
|
```
|
|
|
|
### 2.3 Deploy process-jobs
|
|
|
|
```bash
|
|
npx supabase functions deploy process-jobs --project-ref mjuvnnjxwfwlmxjsgkqu
|
|
```
|
|
|
|
---
|
|
|
|
## 🔐 Step 3: Set Environment Secrets
|
|
|
|
```bash
|
|
# Replicate API Token (KRITISCH!)
|
|
npx supabase secrets set REPLICATE_API_TOKEN=r8_... --project-ref mjuvnnjxwfwlmxjsgkqu
|
|
|
|
# Verify secrets
|
|
npx supabase secrets list --project-ref mjuvnnjxwfwlmxjsgkqu
|
|
```
|
|
|
|
**Secrets needed:**
|
|
|
|
- `REPLICATE_API_TOKEN` - Your Replicate API key
|
|
- `SUPABASE_URL` - Auto-set
|
|
- `SUPABASE_ANON_KEY` - Auto-set
|
|
- `SUPABASE_SERVICE_ROLE_KEY` - Auto-set
|
|
|
|
---
|
|
|
|
## ⏰ Step 4: Setup pg_cron Worker
|
|
|
|
### 4.1 Enable pg_cron Extension
|
|
|
|
**Via SQL Editor:**
|
|
|
|
```sql
|
|
-- Enable extension
|
|
CREATE EXTENSION IF NOT EXISTS pg_cron;
|
|
|
|
-- Grant permissions
|
|
GRANT USAGE ON SCHEMA cron TO postgres;
|
|
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA cron TO postgres;
|
|
```
|
|
|
|
### 4.2 Get Service Role Key
|
|
|
|
1. Gehe zu: **Settings → API** im Supabase Dashboard
|
|
2. Kopiere: `service_role` key (secret!)
|
|
3. Speichere sicher (brauchen wir gleich)
|
|
|
|
### 4.3 Schedule Worker Job
|
|
|
|
**WICHTIG:** Ersetze `YOUR_SERVICE_ROLE_KEY` mit dem echten Key!
|
|
|
|
```sql
|
|
-- Schedule process-jobs to run every minute
|
|
SELECT cron.schedule(
|
|
'process-job-queue',
|
|
'* * * * *', -- Every minute
|
|
$$
|
|
SELECT net.http_post(
|
|
url := 'https://mjuvnnjxwfwlmxjsgkqu.supabase.co/functions/v1/process-jobs',
|
|
headers := jsonb_build_object(
|
|
'Content-Type', 'application/json',
|
|
'Authorization', 'Bearer YOUR_SERVICE_ROLE_KEY'
|
|
),
|
|
body := '{}'::jsonb
|
|
);
|
|
$$
|
|
);
|
|
```
|
|
|
|
### 4.4 Verify Cron Job
|
|
|
|
```sql
|
|
-- Check scheduled jobs
|
|
SELECT * FROM cron.job;
|
|
|
|
-- Check execution history
|
|
SELECT * FROM cron.job_run_details
|
|
ORDER BY start_time DESC
|
|
LIMIT 10;
|
|
```
|
|
|
|
---
|
|
|
|
## 🧪 Step 5: Test the System
|
|
|
|
### 5.1 Test Database Functions
|
|
|
|
```sql
|
|
-- Test: Enqueue a test job
|
|
SELECT enqueue_job(
|
|
'generate-image',
|
|
'{"test": true, "prompt": "Test deployment"}'::jsonb,
|
|
0
|
|
);
|
|
-- Should return: UUID of job
|
|
|
|
-- Check if job was created
|
|
SELECT * FROM job_queue ORDER BY created_at DESC LIMIT 1;
|
|
|
|
-- Test: Claim the job (simulates worker)
|
|
SELECT * FROM claim_next_job();
|
|
|
|
-- Test: Complete the job
|
|
-- (Use the job ID from above)
|
|
SELECT complete_job('job-id-here', NULL, NULL);
|
|
```
|
|
|
|
### 5.2 Test Edge Functions
|
|
|
|
#### Test start-generation:
|
|
|
|
```bash
|
|
curl -X POST \
|
|
https://mjuvnnjxwfwlmxjsgkqu.supabase.co/functions/v1/start-generation \
|
|
-H 'Authorization: Bearer YOUR_ANON_KEY' \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{
|
|
"prompt": "A beautiful sunset",
|
|
"model_id": "black-forest-labs/flux-schnell"
|
|
}'
|
|
```
|
|
|
|
**Expected Response:**
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"generation_id": "uuid-here",
|
|
"job_id": "uuid-here",
|
|
"status": "queued"
|
|
}
|
|
```
|
|
|
|
#### Test process-jobs (manual trigger):
|
|
|
|
```bash
|
|
curl -X POST \
|
|
https://mjuvnnjxwfwlmxjsgkqu.supabase.co/functions/v1/process-jobs \
|
|
-H 'Authorization: Bearer YOUR_SERVICE_ROLE_KEY' \
|
|
-H 'Content-Type: application/json'
|
|
```
|
|
|
|
### 5.3 Monitor Queue
|
|
|
|
```sql
|
|
-- Queue health
|
|
SELECT * FROM queue_health;
|
|
|
|
-- Pending jobs
|
|
SELECT COUNT(*) FROM job_queue WHERE status = 'pending';
|
|
|
|
-- Failed jobs (last 24h)
|
|
SELECT * FROM failed_jobs_recent;
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Step 6: Monitoring
|
|
|
|
### Key Metrics to Watch:
|
|
|
|
```sql
|
|
-- 1. Queue Depth (should stay low)
|
|
SELECT job_type, status, COUNT(*)
|
|
FROM job_queue
|
|
GROUP BY job_type, status;
|
|
|
|
-- 2. Average Processing Time
|
|
SELECT
|
|
job_type,
|
|
AVG(EXTRACT(EPOCH FROM (completed_at - created_at))) as avg_seconds
|
|
FROM job_queue
|
|
WHERE status = 'completed'
|
|
AND created_at > NOW() - INTERVAL '1 hour'
|
|
GROUP BY job_type;
|
|
|
|
-- 3. Success Rate
|
|
SELECT
|
|
job_type,
|
|
COUNT(CASE WHEN status = 'completed' THEN 1 END) as completed,
|
|
COUNT(CASE WHEN status = 'failed' THEN 1 END) as failed,
|
|
ROUND(100.0 * COUNT(CASE WHEN status = 'completed' THEN 1 END) / COUNT(*), 2) as success_rate
|
|
FROM job_queue
|
|
WHERE created_at > NOW() - INTERVAL '1 hour'
|
|
GROUP BY job_type;
|
|
|
|
-- 4. Stuck Jobs (processing > 10 min)
|
|
SELECT * FROM stuck_jobs;
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ Deployment Checklist
|
|
|
|
- [ ] Database migration applied successfully
|
|
- [ ] `job_queue` table created
|
|
- [ ] Database functions created (enqueue_job, claim_next_job, complete_job)
|
|
- [ ] Monitoring views created (queue_health, failed_jobs_recent, stuck_jobs)
|
|
- [ ] start-generation function deployed
|
|
- [ ] process-generation function deployed
|
|
- [ ] process-jobs function deployed
|
|
- [ ] REPLICATE_API_TOKEN secret set
|
|
- [ ] pg_cron extension enabled
|
|
- [ ] Cron job scheduled (process-job-queue)
|
|
- [ ] Test job completed successfully
|
|
- [ ] Monitoring queries working
|
|
|
|
---
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### Issue: Jobs stuck in pending
|
|
|
|
**Check:**
|
|
|
|
```sql
|
|
-- Is cron running?
|
|
SELECT * FROM cron.job_run_details ORDER BY start_time DESC LIMIT 5;
|
|
|
|
-- Is process-jobs working?
|
|
SELECT * FROM job_queue WHERE status = 'processing';
|
|
```
|
|
|
|
**Fix:**
|
|
|
|
- Manually trigger: `curl ... /process-jobs`
|
|
- Check service role key is correct
|
|
- Check Edge Function logs
|
|
|
|
### Issue: Jobs failing
|
|
|
|
**Check:**
|
|
|
|
```sql
|
|
SELECT error_message FROM failed_jobs_recent;
|
|
```
|
|
|
|
**Common Causes:**
|
|
|
|
- Missing REPLICATE_API_TOKEN
|
|
- Invalid model_id
|
|
- Replicate API down
|
|
|
|
---
|
|
|
|
## 📝 Notes
|
|
|
|
**Project:**
|
|
|
|
- ID: mjuvnnjxwfwlmxjsgkqu
|
|
- URL: https://mjuvnnjxwfwlmxjsgkqu.supabase.co
|
|
- Region: EU Central
|
|
|
|
**Important URLs:**
|
|
|
|
- Dashboard: https://supabase.com/dashboard/project/mjuvnnjxwfwlmxjsgkqu
|
|
- SQL Editor: https://supabase.com/dashboard/project/mjuvnnjxwfwlmxjsgkqu/sql
|
|
- Functions: https://supabase.com/dashboard/project/mjuvnnjxwfwlmxjsgkqu/functions
|
|
- Logs: https://supabase.com/dashboard/project/mjuvnnjxwfwlmxjsgkqu/logs/explorer
|
|
|
|
---
|
|
|
|
**Last Updated:** 2025-10-09
|
|
**Status:** Ready for deployment
|