mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 19:41:09 +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)
7.2 KiB
7.2 KiB
🚀 DEPLOYMENT - Job Queue System
Status: In Progress Started: 2025-10-09
✅ Step 1: Database Migration
Option A: Via Supabase Dashboard (EMPFOHLEN für Production)
-
Öffne Supabase Dashboard:
https://supabase.com/dashboard/project/mjuvnnjxwfwlmxjsgkqu -
Navigiere zu: SQL Editor (linkes Menü)
-
Kopiere die Migration:
- Datei:
apps/mobile/supabase/migrations/20251009_job_queue_system.sql - Kompletten Inhalt kopieren
- Datei:
-
Führe aus:
- New Query → Paste → Run
- Warte auf Success Message
-
Verifiziere:
-- 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)
# 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
cd apps/mobile
npx supabase functions deploy start-generation --project-ref mjuvnnjxwfwlmxjsgkqu
Expected Output:
✓ Deployed Function start-generation
2.2 Deploy process-generation
npx supabase functions deploy process-generation --project-ref mjuvnnjxwfwlmxjsgkqu
2.3 Deploy process-jobs
npx supabase functions deploy process-jobs --project-ref mjuvnnjxwfwlmxjsgkqu
🔐 Step 3: Set Environment Secrets
# 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 keySUPABASE_URL- Auto-setSUPABASE_ANON_KEY- Auto-setSUPABASE_SERVICE_ROLE_KEY- Auto-set
⏰ Step 4: Setup pg_cron Worker
4.1 Enable pg_cron Extension
Via SQL Editor:
-- 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
- Gehe zu: Settings → API im Supabase Dashboard
- Kopiere:
service_rolekey (secret!) - Speichere sicher (brauchen wir gleich)
4.3 Schedule Worker Job
WICHTIG: Ersetze YOUR_SERVICE_ROLE_KEY mit dem echten Key!
-- 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
-- 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
-- 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:
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:
{
"success": true,
"generation_id": "uuid-here",
"job_id": "uuid-here",
"status": "queued"
}
Test process-jobs (manual trigger):
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
-- 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:
-- 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_queuetable 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:
-- 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:
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