Konfiguracja - emielregis2/SmartFlowAI GitHub Wiki

Konfiguracja - SmartFlowAI

Skonfiguruj SmartFlowAI krok po kroku - od kluczy API po bazę danych! ⚙️

🔑 Przegląd kluczy API

SmartFlowAI wymaga następujących kluczy:

Serwis Klucz Koszt Wymagany
Supabase URL + anon_key + service_role_key Darmowy (500MB) ✅ Tak
OpenAI API key ~$0.01-0.03/analiza ✅ Tak

🗄️ Konfiguracja Supabase

Krok 1: Utworzenie projektu

  1. Przejdź na supabase.com
  2. Kliknij "Start your project"
  3. Zaloguj się przez GitHub
  4. Kliknij "New project"
  5. Wybierz organizację i nazwij projekt (np. "smartflowai")
  6. Ustaw hasło bazy danych (zapisz je!)
  7. Wybierz region (Europe West dla Polski)
  8. Kliknij "Create new project"

Krok 2: Pobranie kluczy API

  1. W dashboardzie przejdź do Settings → API
  2. Skopiuj następujące wartości:
    • URL: https://twoj-projekt.supabase.co
    • anon public: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    • service_role: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Krok 3: Konfiguracja bazy danych

  1. Przejdź do SQL Editor
  2. Kliknij "New query"
  3. Skopiuj i wklej zawartość pliku supabase_setup.sql:
-- Włącz rozszerzenia
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

-- Tabela użytkowników
CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    full_name VARCHAR(255),
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Tabela procesów biznesowych
CREATE TABLE business_processes (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id) ON DELETE CASCADE,
    title VARCHAR(500) NOT NULL,
    description TEXT NOT NULL,
    ai_analysis TEXT,
    analysis_depth VARCHAR(50),
    company_size VARCHAR(50),
    industry VARCHAR(100),
    budget_range VARCHAR(50),
    automation_potential INTEGER,
    time_savings_hours DECIMAL(10,2),
    cost_savings_annual DECIMAL(12,2),
    implementation_difficulty VARCHAR(50),
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Indeksy dla wydajności
CREATE INDEX idx_business_processes_user_id ON business_processes(user_id);
CREATE INDEX idx_business_processes_created_at ON business_processes(created_at);

-- Konta testowe (hasło: test123456)
INSERT INTO users (email, password_hash, full_name) VALUES
('[email protected]', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewdBPj3QJflLxQjO', 'Test User'),
('[email protected]', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewdBPj3QJflLxQjO', 'Admin User'),
('[email protected]', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewdBPj3QJflLxQjO', 'Demo User');
  1. Kliknij "Run" żeby wykonać skrypt
  2. Sprawdź czy tabele zostały utworzone w sekcji Table Editor

Krok 4: Wyłączenie RLS (dla developmentu)

Jeśli masz problemy z dostępem do danych, uruchom:

-- Wyłącz Row Level Security dla developmentu
ALTER TABLE users DISABLE ROW LEVEL SECURITY;
ALTER TABLE business_processes DISABLE ROW LEVEL SECURITY;

⚠️ UWAGA: W produkcji włącz RLS dla bezpieczeństwa!


🤖 Konfiguracja OpenAI

Krok 1: Utworzenie konta

  1. Przejdź na platform.openai.com
  2. Kliknij "Sign up" lub "Log in"
  3. Zweryfikuj email i numer telefonu
  4. Dodaj metodę płatności (wymagane dla API)

Krok 2: Utworzenie klucza API

  1. Przejdź do API Keys
  2. Kliknij "Create new secret key"
  3. Nazwij klucz (np. "SmartFlowAI")
  4. Skopiuj klucz (zaczyna się od sk-)
  5. WAŻNE: Zapisz klucz bezpiecznie - nie będzie więcej widoczny!

Krok 3: Ustawienie limitów (zalecane)

  1. Przejdź do Usage limits
  2. Ustaw Hard limit (np. $10/miesiąc)
  3. Ustaw Soft limit (np. $5/miesiąc)
  4. Włącz powiadomienia email

Koszty OpenAI GPT-4o

  • Input: $2.50 / 1M tokenów
  • Output: $10.00 / 1M tokenów
  • Typowa analiza: 1000-3000 tokenów = $0.01-0.03

📁 Konfiguracja plików

Opcja 1: .streamlit/secrets.toml (zalecane)

Utwórz plik .streamlit/secrets.toml:

# Supabase Configuration
SUPABASE_URL = "https://gqplfsbefkxqvqglydgd.supabase.co"
SUPABASE_ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImdxcGxmc2JlZmt4cXZxZ2x5ZGdkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MzQxOTQ4NzEsImV4cCI6MjA0OTc3MDg3MX0.example"
SUPABASE_SERVICE_ROLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImdxcGxmc2JlZmt4cXZxZ2x5ZGdkIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTczNDE5NDg3MSwiZXhwIjoyMDQ5NzcwODcxfQ.example"

# OpenAI Configuration
OPENAI_API_KEY = "sk-proj-example-key-here"

# Application Settings
DEMO_MODE = false

Opcja 2: Zmienne środowiskowe

# Linux/macOS - dodaj do ~/.bashrc lub ~/.zshrc
export SUPABASE_URL="https://twoj-projekt.supabase.co"
export SUPABASE_ANON_KEY="twoj_anon_key"
export SUPABASE_SERVICE_ROLE_KEY="twoj_service_role_key"
export OPENAI_API_KEY="sk-twoj_klucz"

# Windows - PowerShell
$env:SUPABASE_URL="https://twoj-projekt.supabase.co"
$env:SUPABASE_ANON_KEY="twoj_anon_key"
$env:SUPABASE_SERVICE_ROLE_KEY="twoj_service_role_key"
$env:OPENAI_API_KEY="sk-twoj_klucz"

Opcja 3: .env (nie zalecane - może być w .gitignore)

SUPABASE_URL=https://twoj-projekt.supabase.co
SUPABASE_ANON_KEY=twoj_anon_key
SUPABASE_SERVICE_ROLE_KEY=twoj_service_role_key
OPENAI_API_KEY=sk-twoj_klucz
DEMO_MODE=false

🔧 Konfiguracja Streamlit

.streamlit/config.toml

[server]
port = 8501
address = "localhost"
enableCORS = false
enableXsrfProtection = false

[browser]
gatherUsageStats = false

[theme]
primaryColor = "#FF6B6B"
backgroundColor = "#FFFFFF"
secondaryBackgroundColor = "#F0F2F6"
textColor = "#262730"

🧪 Testowanie konfiguracji

Test 1: Połączenie z Supabase

# test_supabase.py
from supabase import create_client
import os

url = "https://twoj-projekt.supabase.co"
key = "twoj_anon_key"

try:
    supabase = create_client(url, key)
    result = supabase.table('users').select('*').limit(1).execute()
    print("✅ Supabase działa!")
    print(f"Znaleziono {len(result.data)} użytkowników")
except Exception as e:
    print(f"❌ Błąd Supabase: {e}")

Test 2: Połączenie z OpenAI

# test_openai.py
import openai
import os

openai.api_key = "sk-twoj_klucz"

try:
    response = openai.ChatCompletion.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": "Test"}],
        max_tokens=10
    )
    print("✅ OpenAI działa!")
    print(f"Odpowiedź: {response.choices[0].message.content}")
except Exception as e:
    print(f"❌ Błąd OpenAI: {e}")

Test 3: Uruchomienie aplikacji

# Uruchom aplikację
streamlit run streamlit_app.py

# Sprawdź w przeglądarce: http://localhost:8501
# Powinieneś zobaczyć formularz logowania

🔒 Bezpieczeństwo konfiguracji

✅ Dobre praktyki

  • Nigdy nie commituj kluczy API do Git
  • Używaj .streamlit/secrets.toml dla lokalnego developmentu
  • Używaj zmiennych środowiskowych w produkcji
  • Ustaw limity w OpenAI
  • Włącz RLS w Supabase w produkcji

❌ Czego unikać

  • Kluczy API w kodzie źródłowym
  • Udostępniania kluczy w komunikatorach
  • Używania kluczy produkcyjnych do testów
  • Pozostawiania RLS wyłączonego w produkcji

🔐 Rotacja kluczy

Supabase:

  1. Settings → API → Reset API keys
  2. Zaktualizuj klucze w aplikacji

OpenAI:

  1. API Keys → Revoke key
  2. Create new secret key
  3. Zaktualizuj w konfiguracji

🌍 Konfiguracja dla różnych środowisk

Development (lokalne)

# .streamlit/secrets.toml
SUPABASE_URL = "https://dev-projekt.supabase.co"
OPENAI_API_KEY = "sk-dev-key"
DEMO_MODE = true

Staging

# Zmienne środowiskowe
export SUPABASE_URL="https://staging-projekt.supabase.co"
export OPENAI_API_KEY="sk-staging-key"
export DEMO_MODE="false"

Production

# Zmienne środowiskowe (bezpieczne)
export SUPABASE_URL="https://prod-projekt.supabase.co"
export OPENAI_API_KEY="sk-prod-key"
export DEMO_MODE="false"

🚨 Rozwiązywanie problemów konfiguracji

Problem: "Invalid API key"

  1. Sprawdź klucze - Czy są poprawnie skopiowane?
  2. Sprawdź spacje - Usuń spacje na początku/końcu
  3. Sprawdź projekt - Czy Supabase projekt jest aktywny?
  4. Sprawdź RLS - Może być potrzebne wyłączenie dla testów

Problem: "Table does not exist"

  1. Uruchom skrypt supabase_setup.sql
  2. Sprawdź tabele w Table Editor
  3. Sprawdź połączenie z właściwym projektem

Problem: "OpenAI rate limit"

  1. Sprawdź limity w OpenAI dashboard
  2. Dodaj metodę płatności
  3. Zwiększ limity jeśli potrzebne

Problem: "Streamlit nie widzi secrets"

  1. Sprawdź ścieżkę - Plik musi być w .streamlit/secrets.toml
  2. Sprawdź format - Musi być poprawny TOML
  3. Restart aplikacji - Ctrl+C i uruchom ponownie

✅ Checklist konfiguracji

  • Supabase projekt utworzony
  • Klucze Supabase skopiowane
  • Baza danych skonfigurowana (supabase_setup.sql)
  • Konta testowe działają
  • OpenAI konto utworzone
  • OpenAI API key wygenerowany
  • Limity OpenAI ustawione
  • Plik secrets.toml utworzony
  • Aplikacja uruchamia się bez błędów
  • Logowanie działa z kontami testowymi
  • Analiza AI działa (test z przykładowym procesem)

Konfiguracja gotowa! Przejdź do Quick Start żeby przetestować aplikację lub sprawdź FAQ jeśli masz pytania.