talk / backend /sql /004_tts_scale_instances_v2.sql
user
Deploy StyleVoiceChat backend
aa9892b
Raw History Blame Contribute Delete
3.02 kB
-- TTS μŠ€μΌ€μΌμ•„μ›ƒ v2: μΈμŠ€ν„΄μŠ€(docker) λ‹¨μœ„ + μΈμŠ€ν„΄μŠ€ μ•ˆμ— 3 μ›Œμ»€(cloudflare 터널) 묢음.
-- v1 (003) 의 slot_name 1:1 hostname λͺ¨λΈμ€ 폐기. 메인 μΈμŠ€ν„΄μŠ€κ°€ docker 1λŒ€μ— TTS
-- 3 ν”„λ‘œμ„ΈμŠ€ λ„μš°λŠ” νŒ¨ν„΄κ³Ό μΌμΉ˜μ‹œν‚€κΈ° μœ„ν•¨.
--
-- 사전 λ°œκΈ‰λœ cloudflare 터널 7 μΈμŠ€ν„΄μŠ€ Γ— 3 μ›Œμ»€ = 21개 (Phase 6).
-- naming: tts4-1/2/3, tts5-1/2/3, ..., tts10-1/2/3
--
-- μ‹€ν–‰ μˆœμ„œ (ν•œ 번):
-- 1) 이 SQL (DROP + CREATE)
-- 2) /tmp/seed-tts-instances-v2.sql (자격증λͺ… 21개 INSERT)
DROP TABLE IF EXISTS public.tts_scale_instances CASCADE;
CREATE TABLE public.tts_scale_instances (
-- μΈμŠ€ν„΄μŠ€ 식별 (docker 1λŒ€ λ‹¨μœ„)
instance_name TEXT PRIMARY KEY, -- 'tts4', 'tts5', ..., 'tts10'
-- μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 3 μ›Œμ»€ (cloudflare 터널 + 포트). μ˜ˆμ‹œ:
-- [
-- {"hostname": "tts4-1.stylevoicetalk.com", "tunnel_id": "uuid", "credentials_json": {...}, "port": 7860},
-- {"hostname": "tts4-2.stylevoicetalk.com", "tunnel_id": "uuid", "credentials_json": {...}, "port": 7861},
-- {"hostname": "tts4-3.stylevoicetalk.com", "tunnel_id": "uuid", "credentials_json": {...}, "port": 7862}
-- ]
workers JSONB NOT NULL,
-- Vast.ai μΈμŠ€ν„΄μŠ€ λ§€ν•‘ (ν• λ‹Ή μ‹œ μ±„μ›Œμ§)
vast_instance_id BIGINT,
vast_offer_id BIGINT,
vast_dph DECIMAL(8,5),
-- μƒνƒœ (μΈμŠ€ν„΄μŠ€ λ‹¨μœ„)
-- 'free' / 'creating' / 'pulling' / 'starting' / 'ready' / 'warm_stopped' / 'destroying' / 'failed'
status TEXT NOT NULL DEFAULT 'free',
status_detail TEXT,
is_warm BOOLEAN NOT NULL DEFAULT false,
assigned_at TIMESTAMPTZ,
became_ready_at TIMESTAMPTZ,
released_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_tts_scale_status_v2 ON public.tts_scale_instances(status)
WHERE status IN ('free', 'warm_stopped');
CREATE OR REPLACE FUNCTION public.set_updated_at_tts_scale()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS trg_tts_scale_updated_at ON public.tts_scale_instances;
CREATE TRIGGER trg_tts_scale_updated_at
BEFORE UPDATE ON public.tts_scale_instances
FOR EACH ROW EXECUTE FUNCTION public.set_updated_at_tts_scale();
ALTER TABLE public.tts_scale_instances ENABLE ROW LEVEL SECURITY;
-- (μ •μ±… μ—†μŒ β€” service_role 만 μ ‘κ·Ό)
-- system_settings λŠ” v1 κ·ΈλŒ€λ‘œ μ‚¬μš© (warm_pool_enabled / max_instances).
-- 단, v2 μ—μ„œλŠ” max_instances κ°€ docker μΈμŠ€ν„΄μŠ€ 개수 (μ›Œμ»€ κ°œμˆ˜κ°€ μ•„λ‹˜).
-- 7 슬둯 = μ΅œλŒ€ 7 μΈμŠ€ν„΄μŠ€ = 21 μ›Œμ»€.
INSERT INTO public.system_settings(key, value) VALUES
('tts_scale_warm_pool_enabled', 'false'::jsonb),
('tts_scale_max_instances', '7'::jsonb)
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value;