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.