DevOps ve Ölçeklendirme

Docker + CaptchaAI: Konteynerli CAPTCHA Çözümü

CAPTCHA çözücülerini Docker kapsayıcılarında çalıştırmak tutarlı ortamlar, kolay ölçeklendirme ve temiz dağıtımlar sağlar. Bu kılavuz, temel Dockerfile'dan çok çalışanlı Docker Compose kurulumlarına kadar her şeyi kapsar.


Temel Docker dosyası

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY solver.py .

# API key passed at runtime, not baked into image
ENV CAPTCHAAI_KEY=""

CMD ["python", "solver.py"]

gereksinimler.txt:

requests>=2.31.0

Çözücü Komut Dosyası

# solver.py
import os
import sys
import requests
import time


def solve_recaptcha(api_key, site_key, page_url):
    """Solve reCAPTCHA v2 using CaptchaAI."""
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": api_key,
        "method": "userrecaptcha",
        "googlekey": site_key,
        "pageurl": page_url,
        "json": 1,
    }, timeout=30)
    result = resp.json()

    if result.get("status") != 1:
        raise RuntimeError(f"Submit error: {result.get('request')}")

    task_id = result["request"]

    # Poll for result
    for _ in range(24):  # 120s max
        time.sleep(5)
        resp = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key,
            "action": "get",
            "id": task_id,
            "json": 1,
        }, timeout=15)
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            if data.get("status") == 1:
                return data["request"]
            raise RuntimeError(f"Solve error: {data['request']}")

    raise TimeoutError("Solve timeout")


if __name__ == "__main__":
    api_key = os.environ.get("CAPTCHAAI_KEY")
    if not api_key:
        print("Error: CAPTCHAAI_KEY environment variable required")
        sys.exit(1)

    site_key = os.environ.get("SITE_KEY", "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-")
    page_url = os.environ.get("PAGE_URL", "https://example.com")

    token = solve_recaptcha(api_key, site_key, page_url)
    print(f"Token: {token[:50]}...")

Oluştur ve Çalıştır

# Build
docker build -t captchaai-solver .

# Run with API key from environment
docker run --rm \
  -e CAPTCHAAI_KEY="YOUR_API_KEY" \
  -e SITE_KEY="TARGET_SITE_KEY" \
  -e PAGE_URL="https://example.com" \
  captchaai-solver

Çok Aşamalı Yapı (Üretim)

En iyi güvenlik uygulamalarını içeren daha küçük resim:

# Build stage
FROM python:3.11-slim AS builder

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --target=/app/deps -r requirements.txt

# Runtime stage
FROM python:3.11-slim

# Run as non-root
RUN useradd --create-home solver
USER solver

WORKDIR /home/solver/app

COPY --from=builder /app/deps /home/solver/app/deps
COPY solver.py .

ENV PYTHONPATH=/home/solver/app/deps
ENV PYTHONUNBUFFERED=1

CMD ["python", "solver.py"]

Docker Compose: Çok Çalışanlı Kurulum

CAPTCHA çözümünü birden fazla kapsayıcıda ölçeklendirin:

# docker-compose.yml
version: "3.8"

services:
  solver-worker:
    build: .
    environment:

      - CAPTCHAAI_KEY=${CAPTCHAAI_KEY}
    restart: unless-stopped
    deploy:
      replicas: 4
      resources:
        limits:
          memory: 256M
          cpus: "0.25"

  redis:
    image: redis:7-alpine
    ports:

      - "6379:6379"

  queue-worker:
    build:
      context: .
      dockerfile: Dockerfile.worker
    environment:

      - CAPTCHAAI_KEY=${CAPTCHAAI_KEY}
      - REDIS_URL=redis://redis:6379
    depends_on:

      - redis
    deploy:
      replicas: 4

Kuyruk Tabanlı Çalışan

# queue_worker.py
import os
import json
import time
import redis
import requests


def process_task(api_key, task_data):
    """Process a single CAPTCHA task from the queue."""
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": api_key,
        "method": task_data["method"],
        "json": 1,
        **task_data["params"],
    }, timeout=30)
    result = resp.json()

    if result.get("status") != 1:
        return {"error": result.get("request")}

    task_id = result["request"]

    for _ in range(24):
        time.sleep(5)
        resp = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get",
            "id": task_id, "json": 1,
        }, timeout=15)
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            if data.get("status") == 1:
                return {"token": data["request"]}
            return {"error": data["request"]}

    return {"error": "timeout"}


def main():
    api_key = os.environ["CAPTCHAAI_KEY"]
    redis_url = os.environ.get("REDIS_URL", "redis://localhost:6379")
    r = redis.from_url(redis_url)

    print("Worker started, waiting for tasks...")
    while True:
        _, raw = r.blpop("captcha:tasks")
        task = json.loads(raw)
        task_id = task.get("id", "unknown")

        print(f"Processing task {task_id}...")
        result = process_task(api_key, task)

        r.hset("captcha:results", task_id, json.dumps(result))
        print(f"Task {task_id} done: {'ok' if 'token' in result else 'error'}")


if __name__ == "__main__":
    main()

Ortam Değişkeni Yönetimi

# .env file (never commit to Git)
CAPTCHAAI_KEY=your_api_key_here

# .gitignore
echo ".env" >> .gitignore

# Run with .env file
docker compose --env-file .env up -d

# Scale workers
docker compose up -d --scale queue-worker=8

Sorun giderme

Sorun Sebep Düzeltme
Konteyner hemen çıkıyor CAPTCHAAI_KEY eksik -e CAPTCHAAI_KEY=...'yi geçin
DNS çözümlemesi başarısız oluyor Ağ erişimi yok Docker ağ ayarlarını kontrol edin
Yüksek bellek kullanımı Çok fazla eşzamanlı istek Kapsayıcı belleğini ve eşzamanlılığı sınırlayın
Resimde gösterilen API anahtarı Dockerfile'ı girin Ortam değişkenlerini veya gizli dizileri kullanma

SSS

API anahtarını Docker görüntüsüne yerleştirmeli miyim?

Asla. API anahtarını her zaman çalışma zamanında bir ortam değişkeni olarak iletin veya Docker gizli dizilerini kullanın. Anahtarları görüntülere dönüştürmek bir güvenlik riskidir.

Kaç konteyner çalıştırmalıyım?

4 çalışanla başlayın ve üretim ihtiyaçlarına göre ölçeklendirin. Her çalışan 5-10 eşzamanlı çözümü gerçekleştirebilir, yani 4 çalışan 20-40 eşzamanlı görevi destekler.

Bunun yerine Docker sırlarını kullanabilir miyim?

Evet. Docker Swarm ve Kubernetes'in her ikisi de sırları destekler. Bunları dosya olarak bağlayın ve /run/secrets/captchaai_key'den okuyun.


İlgili Kılavuzlar


Çözücünüzü kapsayıcıya alın —CaptchaAI'yi edininBugün.

Bu makale için yorumlar devre dışı bırakılmıştır.