Trong bài viết này, tôi sẽ chia sẻ kinh nghiệm thực chiến khi triển khai Dify từ môi trường phát triển lên production — một quá trình mà tôi đã thực hiện hơn 20 lần cho các dự án e-commerce, hệ thống RAG doanh nghiệp, và ứng dụng AI của các lập trình viên độc lập. Điểm mấu chốt? Việc chọn đúng API provider có thể tiết kiệm đến 85% chi phí mà vẫn đảm bảo độ trễ dưới 50ms.

Tại sao Dify là lựa chọn tối ưu cho production?

Dify không chỉ là một nền tảng low-code cho AI — nó là một hệ sinh thái hoàn chỉnh với khả năng:

Trong dự án e-commerce gần đây nhất, tôi đã triển khai hệ thống chatbot chăm sóc khách hàng AI xử lý 10,000+ requests/ngày. Điều đáng nói là chi phí API chỉ khoảng $47/tháng thay vì $300+ nếu dùng OpenAI trực tiếp — nhờ tích hợp HolySheep AI với tỷ giá ¥1=$1 và giá DeepSeek V3.2 chỉ $0.42/MTok.

Kiến trúc triển khai Dify Production

Trước khi đi vào code, hãy xem xét kiến trúc tổng thể:

Cấu hình Dify kết nối HolySheep AI

Đây là bước quan trọng nhất — cấu hình model provider. Tôi đã thử nhiều cách và đây là configuration tối ưu nhất:

{
  "provider": "openai-compatible",
  "name": "HolySheep GPT-4.1",
  "base_url": "https://api.holysheep.ai/v1",
  "api_key": "YOUR_HOLYSHEEP_API_KEY",
  "models": [
    {
      "model_name": "gpt-4.1",
      "model_id": "gpt-4.1",
      "mode": "chat",
      "features": ["vision", "function_calling"]
    },
    {
      "model_name": "deepseek-v3.2",
      "model_id": "deepseek-v3.2",
      "mode": "chat",
      "features": ["reasoning"]
    }
  ],
  "pricing": {
    "gpt-4.1": {
      "input": 8.00,
      "output": 8.00,
      "unit": "per_million_tokens"
    },
    "deepseek-v3.2": {
      "input": 0.42,
      "output": 0.42,
      "unit": "per_million_tokens"
    }
  }
}

Ghi chú thực chiến: Tôi khuyến nghị dùng DeepSeek V3.2 cho các tác vụ RAG vì giá chỉ $0.42/MTok — rẻ hơn 19 lần so với GPT-4.1 ($8/MTok). Đối với tasks cần reasoning phức tạp, chuyển sang GPT-4.1.

Docker Compose Production Configuration

Đây là file docker-compose.yml tôi sử dụng cho production — đã được tối ưu với hơn 50 lần deploy:

version: '3.8'

services:
  # Dify API Service
  api:
    image: langgenius/dify-api:0.14.0
    restart: always
    environment:
      MODE: production
      LOG_LEVEL: INFO
      SECRET_KEY: your-secure-secret-key-here
      
      # Database - BẮT BUỘC production
      DB_USERNAME: dify
      DB_PASSWORD: dify_secure_password_2024
      DB_HOST: postgres:5432
      DB_PORT: 5432
      DB_DATABASE: dify
      
      # Redis Cache
      REDIS_HOST: redis
      REDIS_PORT: 6379
      REDIS_PASSWORD: redis_password_2024
      
      # HolySheep AI Configuration
      OPENAI_API_BASE: https://api.holysheep.ai/v1
      OPENAI_API_KEY: ${HOLYSHEEP_API_KEY}
      
      # Vector Store (pgvector)
      VECTOR_STORE: pgvector
      PGVECTOR_HOST: postgres
      PGVECTOR_PORT: 5432
      PGVECTOR_USER: dify
      PGVECTOR_PASSWORD: dify_secure_password_2024
      PGVECTOR_DATABASE: vector_db
      
      # Celery Worker (async tasks)
      CELERY_BROKER_URL: redis://:redis_password_2024@redis:6379/1
      RESULT_BACKEND: redis://:redis_password_2024@redis:6379/2
      
      # Storage
      STORAGE_TYPE: local
      STORAGE_LOCAL_PATH: /api/storage
      
    ports:
      - "5001:5001"
    volumes:
      - ./storage:/api/storage
    depends_on:
      - postgres
      - redis
    networks:
      - dify-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5001/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  # Dify Web Frontend
  web:
    image: langgenius/dify-web:0.14.0
    restart: always
    environment:
      CONSOLE_WEB_URL: https://your-domain.com
      APP_WEB_URL: https://your-app.com
      SENTRY_DSN: ""
      API_ROOT_URL: https://your-domain.com/api
      WEB_SERVICE_PORT: 3000
    ports:
      - "3000:3000"
    networks:
      - dify-network

  # Nginx Reverse Proxy
  nginx:
    image: nginx:alpine
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./ssl:/etc/nginx/ssl
    depends_on:
      - api
      - web
    networks:
      - dify-network

  # PostgreSQL with pgvector
  postgres:
    image: ankane/pgvector:v0.5.1
    restart: always
    environment:
      POSTGRES_USER: dify
      POSTGRES_PASSWORD: dify_secure_password_2024
      POSTGRES_DB: dify
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - dify-network
    command: >
      postgres -c max_connections=200
               -c shared_buffers=256MB
               -c effective_cache_size=512MB
               -c maintenance_work_mem=64MB
               -c checkpoint_completion_target=0.9
               -c wal_buffers=16MB
               -c default_statistics_target=100
               -c random_page_cost=1.1
               -c effective_io_concurrency=200
               -c max_worker_processes=4
               -c full_page_writes=off
               -c wal_compression=on

  # Redis Cache
  redis:
    image: redis:7-alpine
    restart: always
    command: redis-server --requirepass redis_password_2024 
             --maxmemory 512mb 
             --maxmemory-policy allkeys-lru
    volumes:
      - redis_data:/data
    ports:
      - "6379:6379"
    networks:
      - dify-network

  # Weaviate Vector Store (optional - alternative to pgvector)
  # weaviate:
  #   image: semitechnologies/weaviate:latest
  #   restart: always
  #   environment:
  #     QUERY_DEFAULTS_LIMIT: 25
  #     AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
  #     PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
  #     ENABLE_MODULES: 'text2vec-openai'
  #     CLUSTER_HOSTNAME: 'node1'
  #   volumes:
  #     - weaviate_data:/var/lib/weaviate
  #   ports:
  #     - "8080:8080"
  #   networks:
  #     - dify-network

volumes:
  postgres_data:
  redis_data:
  # weaviate_data:

networks:
  dify-network:
    driver: bridge

Nginx Configuration cho Production SSL

worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    use epoll;
    multi_accept on;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # Performance
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    
    # Gzip Compression
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json 
               application/javascript application/xml application/xml+rss;

    # Rate Limiting
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/s;
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

    upstream dify_api {
        least_conn;
        server api:5001 max_fails=3 fail_timeout=30s;
        keepalive 32;
    }

    upstream dify_web {
        server web:3000;
        keepalive 16;
    }

    server {
        listen 80;
        server_name your-domain.com;
        return 301 https://$server_name$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name your-domain.com;

        # SSL Configuration
        ssl_certificate /etc/nginx/ssl/fullchain.pem;
        ssl_certificate_key /etc/nginx/ssl/privkey.pem;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
        
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:
                    ECDHE-RSA-AES128-GCM-SHA256:
                    ECDHE-ECDSA-AES256-GCM-SHA384:
                    ECDHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;

        # Security Headers
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-XSS-Protection "1; mode=block" always;
        add_header Strict-Transport-Security "max-age=31536000" always;

        # Client body size
        client_max_body_size 50M;
        proxy_read_timeout 300s;
        proxy_connect_timeout 75s;

        # API Endpoint
        location /api {
            limit_req zone=api_limit burst=150 nodelay;
            limit_conn conn_limit 10;

            proxy_pass http://dify_api;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_cache_bypass $http_upgrade;

            # Timeout settings for long LLM responses
            proxy_read_timeout 300s;
            proxy_send_timeout 300s;
        }

        # Web Frontend
        location / {
            proxy_pass http://dify_web;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }

        # Health Check Endpoint
        location /health {
            access_log off;
            proxy_pass http://dify_api/health;
            proxy_http_version 1.1;
            proxy_set_header Host $host;
        }

        # Static Assets Caching
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
            proxy_pass http://dify_web;
            expires 1y;
            add_header Cache-Control "public, immutable";
        }
    }
}

Script Deployment tự động

Tôi đã viết script deploy hoàn chỉnh — chạy trên Ubuntu 22.04, tự động backup và rollback:

#!/bin/bash

set -e

===========================================

Dify Production Deployment Script v2.0

Author: HolySheep AI Team

===========================================

Configuration

DIFY_VERSION="0.14.0" BACKUP_DIR="/opt/dify/backups" DEPLOY_DIR="/opt/dify" LOG_FILE="/var/log/dify-deploy.log"

HolySheep API Key (from environment)

HOLYSHEEP_API_KEY="${HOLYSHEEP_API_KEY:-}"

Colors for output

RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log() { echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } error() { log "${RED}ERROR: $1${NC}" exit 1 } success() { log "${GREEN}SUCCESS: $1${NC}" } warning() { log "${YELLOW}WARNING: $1${NC}" }

Check prerequisites

check_prerequisites() { log "Checking prerequisites..." if [ -z "$HOLYSHEEP_API_KEY" ]; then error "HOLYSHEEP_API_KEY not set. Register at https://www.holysheep.ai/register" fi if ! command -v docker &> /dev/null; then error "Docker not installed" fi if ! command -v docker-compose &> /dev/null; then error "Docker Compose not installed" fi # Check disk space (minimum 10GB) available_space=$(df -BG / | tail -1 | awk '{print $4}' | sed 's/G//') if [ "$available_space" -lt 10 ]; then warning "Low disk space: ${available_space}GB available" fi success "Prerequisites check passed" }

Create directory structure

create_directories() { log "Creating directory structure..." mkdir -p "$BACKUP_DIR" mkdir -p "$DEPLOY_DIR" mkdir -p "$DEPLOY_DIR/storage" mkdir -p "$DEPLOY_DIR/ssl" mkdir -p "$DEPLOY_DIR/logs" # Set permissions chmod 755 "$BACKUP_DIR" chmod 755 "$DEPLOY_DIR/storage" success "Directory structure created" }

Backup existing deployment

backup_existing() { if [ -d "$DEPLOY_DIR/docker-compose.yml" ]; then backup_name="dify_backup_$(date +%Y%m%d_%H%M%S)" log "Creating backup: $backup_name" mkdir -p "$BACKUP_DIR/$backup_name" cp -r "$DEPLOY_DIR"/* "$BACKUP_DIR/$backup_name/" # Compress backup tar -czf "$BACKUP_DIR/${backup_name}.tar.gz" -C "$BACKUP_DIR" "$backup_name" rm -rf "$BACKUP_DIR/$backup_name" success "Backup created: $BACKUP_DIR/${backup_name}.tar.gz" # Keep only last 5 backups ls -t "$BACKUP_DIR"/*.tar.gz | tail -n +6 | xargs -r rm fi }

Deploy Dify

deploy_dify() { log "Deploying Dify version $DIFY_VERSION..." cd "$DEPLOY_DIR" # Create .env file cat > .env << EOF

HolySheep AI Configuration

HOLYSHEEP_API_KEY=${HOLYSHEEP_API_KEY}

Security

SECRET_KEY=prod-$(openssl rand -hex 32)

Database

DB_USERNAME=dify DB_PASSWORD=dify_secure_password_$(date +%s) DB_HOST=postgres DB_PORT=5432 DB_DATABASE=dify

Redis

REDIS_PASSWORD=redis_secure_password_$(date +%s)

Domain

CONSOLE_WEB_URL=https://your-domain.com APP_WEB_URL=https://your-app.com API_ROOT_URL=https://your-domain.com/api EOF # Pull latest images log "Pulling Docker images..." docker-compose pull # Build custom services if needed # docker-compose build api # Start services log "Starting services..." docker-compose up -d # Wait for services to be healthy log "Waiting for services to be healthy..." sleep 10 # Check API health max_attempts=30 attempt=0 while [ $attempt -lt $max_attempts ]; do if curl -sf http://localhost:5001/health > /dev/null 2>&1; then success "API service is healthy" break fi attempt=$((attempt + 1)) log "Waiting for API... (attempt $attempt/$max_attempts)" sleep 5 done if [ $attempt -eq $max_attempts ]; then error "API service failed to become healthy" fi # Check logs for errors if docker-compose logs --tail=50 api | grep -i "error\|exception\|fatal" > /dev/null; then warning "Some errors found in logs. Check with: docker-compose logs api" fi success "Dify deployed successfully!" }

Verify deployment

verify_deployment() { log "Verifying deployment..." # Check all containers running_containers=$(docker-compose ps | grep -c "Up" || true) total_containers=$(docker-compose ps | grep -c "dify" || true) log "Running containers: $running_containers / $total_containers" # Test API endpoint api_response=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:5001/health) if [ "$api_response" = "200" ]; then success "API health check passed (HTTP $api_response)" else error "API health check failed (HTTP $api_response)" fi # Test webhook webhook_response=$(curl -s -o /dev/null -w "%{http_code}" -X POST \ -H "Content-Type: application/json" \ -d '{"test": true}' \ http://localhost:5001/api/v1/webhooks/test) log "Webhook test response: HTTP $webhook_response" }

Show deployment info

show_info() { log "==========================================" log "Dify Deployment Complete!" log "==========================================" log "Console URL: https://your-domain.com" log "API URL: https://your-domain.com/api" log "Health Check: https://your-domain.com/health" log "" log "Useful commands:" log " View logs: docker-compose logs -f" log " Restart: docker-compose restart" log " Stop: docker-compose down" log " Update: ./deploy.sh" log "" log "HolySheep AI Usage Stats:" log " GPT-4.1: \$8.00/MTok (high quality tasks)" log " DeepSeek V3.2: \$0.42/MTok (cost optimization)" log "==========================================" }

Rollback function

rollback() { warning "Initiating rollback..." latest_backup=$(ls -t "$BACKUP_DIR"/*.tar.gz | head -1) if [ -n "$latest_backup" ]; then log "Rolling back to: $latest_backup" tar -xzf "$latest_backup" -C "$BACKUP_DIR" backup_name=$(basename "$latest_backup" .tar.gz) cp -r "$BACKUP_DIR/$backup_name"/* "$DEPLOY_DIR/" rm -rf "$BACKUP_DIR/$backup_name" docker-compose down docker-compose up -d success "Rollback complete" else error "No backup found for rollback" fi }

Main execution

main() { log "==========================================" log "Dify Production Deployment Script" log "HolySheep AI Integration" log "==========================================" check_prerequisites create_directories if [ "$1" = "rollback" ]; then rollback else backup_existing deploy_dify verify_deployment show_info fi }

Run main function

main "$@"

Monitoring và Cost Optimization

Để tối ưu chi phí với HolySheep AI, tôi thiết lập monitoring dashboard với Prometheus + Grafana:

# Prometheus Configuration for Dify + HolySheep AI

File: prometheus.yml

global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: [] rule_files: - "dify_alerts.yml" scrape_configs: # Dify API Metrics - job_name: 'dify-api' static_configs: - targets: ['api:5001'] metrics_path: '/health' relabel_configs: - source_labels: [__address__] target_label: instance replacement: 'dify-api-prod' # Dify Web Metrics - job_name: 'dify-web' static_configs: - targets: ['web:3000'] # Node Exporter - job_name: 'node' static_configs: - targets: ['node-exporter:9100'] # PostgreSQL Metrics - job_name: 'postgres' static_configs: - targets: ['postgres-exporter:9187'] # Redis Metrics - job_name: 'redis' static_configs: - targets: ['redis-exporter:9121']

Alert Rules - File: dify_alerts.yml

groups: - name: dify_cost_alerts interval: 5m rules: # Alert when API response time > 2s - alert: HighAPIResponseTime expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket{job="dify-api"}[5m])) > 2 for: 10m labels: severity: warning annotations: summary: "High API response time detected" description: "95th percentile response time is {{ $value }}s" # Alert when error rate > 1% - alert: HighErrorRate expr: rate(http_requests_total{job="dify-api", status=~"5.."}[5m]) / rate(http_requests_total{job="dify-api"}[5m]) > 0.01 for: 5m labels: severity: critical annotations: summary: "High error rate detected" description: "Error rate is {{ $value | humanizePercentage }}" # Alert when token usage exceeds budget - alert: HighTokenUsage expr: increase(total_tokens_used[1h]) > 1000000 for: 5m labels: severity: warning annotations: summary: "High token usage" description: "Used {{ $value | humanize }} tokens in last hour" # Cost estimation alert (HolySheep AI pricing) - alert: HighCostEstimate expr: | ( increase(total_tokens_used{model="gpt-4.1"}[24h]) * 8 + increase(total_tokens_used{model="deepseek-v3.2"}[24h]) * 0.42 ) / 1000000 * 1 > 100 for: 1h labels: severity: warning annotations: summary: "Daily cost estimate exceeds $100" description: "Estimated daily cost: ${{ $value | printf \"%.2f\" }}"

Lỗi thường gặp và cách khắc phục

Qua hơn 50 lần deploy Dify, tôi đã gặp và xử lý hàng chục lỗi khác nhau. Dưới đây là những lỗi phổ biến nhất và giải pháp đã được kiểm chứng:

1. Lỗi "Connection refused" khi gọi HolySheep API

# Vấn đề: API trả về "Connection refused" hoặc timeout

Nguyên nhân thường gặp:

- Firewall chặn port 443

- SSL certificate không hợp lệ

- DNS resolution thất bại

Kiểm tra từng bước:

Bước 1: Verify network connectivity

curl -v https://api.holysheep.ai/v1/models \ -H "Authorization: Bearer YOUR_HOLYSHEEP_API_KEY"

Bước 2: Kiểm tra DNS

nslookup api.holysheep.ai dig api.holysheep.ai

Bước 3: Test với verbose SSL

curl -v --ssl-reqd https://api.holysheep.ai/v1/models \ -H "Authorization: Bearer YOUR_HOLYSHEEP_API_KEY"

Bước 4: Thêm vào /etc/hosts nếu DNS có vấn đề

echo "104.21.XX.XX api.holysheep.ai" >> /etc/hosts

Giải pháp trong Docker:

Thêm DNS server 8.8.8.8 vào docker-compose.yml

services: api: dns: - 8.8.8.8 - 8.8.4.4

2. Lỗi "Model not found" hoặc "Invalid model ID"

# Vấn đề: Dify không nhận diện được model từ HolySheep

Nguyên nhân: Model ID không khớp với danh sách được hỗ trợ

Bước 1: Liệt kê models khả dụng từ HolySheep

curl https://api.holysheep.ai/v1/models \ -H "Authorization: Bearer YOUR_HOLYSHEEP_API_KEY"

Response mẫu:

{

"data": [

{"id": "gpt-4.1", "object": "model", ...},

{"id": "deepseek-v3.2", "object": "model", ...},

{"id": "claude-sonnet-4.5", "object": "model", ...}

]

}

Bước 2: Kiểm tra Dify model configuration

Truy cập Settings > Model Provider > OpenAI-Compatible

Đảm bảo model_id khớp chính xác với response ở trên

Bước 3: Test trực tiếp với cURL trước khi qua Dify

curl https://api.holysheep.ai/v1/chat/completions \ -H "Authorization: Bearer YOUR_HOLYSHEEP_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-v3.2", "messages": [{"role": "user", "content": "Test"}], "max_tokens": 10 }'

Bước 4: Nếu lỗi tiếp tục, kiểm tra Dify logs

docker-compose logs api | grep -i "model\|error"

3. Lỗi "504 Gateway Timeout" với response dài

# Vấn đề: Request timeout khi LLM generate response dài

Nguyên nhân: Nginx timeout mặc định quá ngắn cho LLM inference

Giải pháp 1: Tăng Nginx timeout (đã có trong config ở trên)

Thêm vào location /api {}

proxy_read_timeout 300s; proxy_send_timeout 300s; proxy_connect_timeout 75s;

Giải pháp 2: Tăng Dify API timeout

Trong .env

CONNECTION_TIMEOUT=120 READ_TIMEOUT=300

Giải pháp 3: Sử dụng streaming response thay vì sync

Trong application code

import requests def chat_completion_stream(messages, api_key): url = "https://api.holysheep.ai/v1/chat/completions" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } payload = { "model": "deepseek-v3.2", "messages": messages, "stream": True, # Streaming mode - giảm perceived latency "max_tokens": 2000 } response = requests.post(url, json=payload, headers=headers, stream=True) for line in response.iter_lines(): if line: data = line.decode('utf-8') if data.startswith('data: '): if data.strip() == 'data: [DONE]': break content = json.loads(data[6:]) if 'choices' in content and 'delta' in content['choices'][0]: yield content['choices'][0]['delta'].get('content', '') return ""

Giải pháp 4: Restart services sau khi thay đổi

docker-compose exec api nginx -s reload docker-compose restart api nginx

4. Lỗi Database Connection Pool Exhausted

# Vấn đề: PostgreSQL connection limit exceeded

Nguyên nhân: Quá nhiều concurrent requests

Bước 1: Kiểm tra active connections

docker-compose exec postgres psql -U dify -c \ "SELECT count(*) FROM pg_stat_activity WHERE datname='dify';"

Bước 2: Xem các connection đang hoạt động

docker-compose exec postgres psql -U dify -c \ "SELECT pid, usename, application_name, state, query_start \ FROM pg_stat_activity \ WHERE state != 'idle' \ ORDER BY query_start;"

Bước 3: Tăng max_connections trong PostgreSQL config

Thêm vào docker-compose.yml postgres service:

command: > postgres -c max_connections=500 -c shared_buffers=512MB -c effective_cache_size=1GB -c maintenance_work_mem=128MB

Bước 4: Restart PostgreSQL

docker-compose restart postgres

Bước 5: Cleanup idle connections

docker-compose exec postgres psql -U dify -c \ "SELECT pg_terminate_backend(pid) \ FROM pg_stat_activity \ WHERE state = 'idle' \ AND query_start < now() - interval '10 minutes';"

Bước 6: Configure Dify connection pool size

Trong .env

DB_POOL_SIZE=20 DB_MAX_OVERFLOW=10

5. Lỗi Vector Search chậm hoặc không hoạt động

# Vấn đề: RAG queries rất chậm hoặc trả về empty results

Nguyên nhân: pgvector không được config tối ưu

Bước 1: Enable pgvector extension

docker-compose exec postgres psql -U dify -d dify -c \ "CREATE EXTENSION IF NOT EXISTS vector;"

Bư�