Sabit kodlanmış API anahtarları ve zaman aşımları prototipler için işe yarar. Üretim, ortama özel yapılandırmaya, gizli dizi yönetimine ve yeniden konuşlandırmaya gerek kalmadan ayarları değiştirebilme yeteneğine ihtiyaç duyar.
Yapılandırma Hiyerarşisi
Priority (highest → lowest):
1. Environment variables ← deployment-specific overrides
2. Config file (YAML/JSON) ← version-controlled defaults
3. Application defaults ← fallback values in code
Tam Yapılandırma Referansı
| Parametre | Ortam Değişkeni | Varsayılan | Açıklama |
|---|---|---|---|
| API Anahtarı | CAPTCHAAI_API_KEY |
— | Gerekli. CaptchaAI API anahtarınız |
| URL'yi gönder | CAPTCHAAI_SUBMIT_URL |
https://ocr.captchaai.com/in.php |
Görev gönderme uç noktası |
| Anket URL'si | CAPTCHAAI_POLL_URL |
https://ocr.captchaai.com/res.php |
Sonuç yoklama uç noktası |
| Anket aralığı | CAPTCHAAI_POLL_INTERVAL |
5 |
Oylama girişimleri arasındaki saniyeler |
| Maksimum anket denemesi | CAPTCHAAI_MAX_POLLS |
60 |
Zaman aşımından önce maksimum yoklama denemesi |
| Eşzamanlılık | CAPTCHAAI_CONCURRENCY |
10 |
Maksimum paralel CAPTCHA görevleri |
| Zaman aşımı | CAPTCHAAI_TIMEOUT |
300 |
Saniye cinsinden genel zaman aşımı |
| vekil | CAPTCHAAI_PROXY |
— | CAPTCHA çözümü için proxy URL'si |
| Geri arama URL'si | CAPTCHAAI_CALLBACK_URL |
— | Eşzamansız sonuçlar için web kancası URL'si |
| Tekrar deneme denemeleri | CAPTCHAAI_RETRIES |
3 |
Geçici arızalarda yeniden denemeler |
| Günlük düzeyi | CAPTCHAAI_LOG_LEVEL |
info |
Günlüğe kaydetme ayrıntısı |
Yapılandırma Yükleyici
Python
import os
import yaml
from dataclasses import dataclass, field
from pathlib import Path
@dataclass
class CaptchaAIConfig:
api_key: str = ""
submit_url: str = "https://ocr.captchaai.com/in.php"
poll_url: str = "https://ocr.captchaai.com/res.php"
poll_interval: int = 5
max_polls: int = 60
concurrency: int = 10
timeout: int = 300
proxy: str = ""
callback_url: str = ""
retries: int = 3
log_level: str = "info"
@classmethod
def load(cls, config_path=None):
"""Load config: env vars override file, which overrides defaults."""
config = cls()
# Layer 2: Config file
if config_path and Path(config_path).exists():
with open(config_path) as f:
file_config = yaml.safe_load(f) or {}
for key, value in file_config.items():
if hasattr(config, key):
setattr(config, key, value)
# Layer 1: Environment variables (highest priority)
env_map = {
"CAPTCHAAI_API_KEY": "api_key",
"CAPTCHAAI_SUBMIT_URL": "submit_url",
"CAPTCHAAI_POLL_URL": "poll_url",
"CAPTCHAAI_POLL_INTERVAL": "poll_interval",
"CAPTCHAAI_MAX_POLLS": "max_polls",
"CAPTCHAAI_CONCURRENCY": "concurrency",
"CAPTCHAAI_TIMEOUT": "timeout",
"CAPTCHAAI_PROXY": "proxy",
"CAPTCHAAI_CALLBACK_URL": "callback_url",
"CAPTCHAAI_RETRIES": "retries",
"CAPTCHAAI_LOG_LEVEL": "log_level",
}
for env_key, attr_name in env_map.items():
value = os.environ.get(env_key)
if value is not None:
# Cast to correct type
current = getattr(config, attr_name)
if isinstance(current, int):
value = int(value)
setattr(config, attr_name, value)
config.validate()
return config
def validate(self):
if not self.api_key:
raise ValueError("CAPTCHAAI_API_KEY is required")
if self.poll_interval < 1:
raise ValueError("poll_interval must be >= 1")
if self.concurrency < 1:
raise ValueError("concurrency must be >= 1")
# Usage
config = CaptchaAIConfig.load("config/captchaai.yaml")
print(f"Concurrency: {config.concurrency}, Timeout: {config.timeout}s")
JavaScript
const fs = require("fs");
const yaml = require("js-yaml");
const path = require("path");
class CaptchaAIConfig {
static defaults = {
apiKey: "",
submitUrl: "https://ocr.captchaai.com/in.php",
pollUrl: "https://ocr.captchaai.com/res.php",
pollInterval: 5,
maxPolls: 60,
concurrency: 10,
timeout: 300,
proxy: "",
callbackUrl: "",
retries: 3,
logLevel: "info",
};
static envMap = {
CAPTCHAAI_API_KEY: "apiKey",
CAPTCHAAI_SUBMIT_URL: "submitUrl",
CAPTCHAAI_POLL_URL: "pollUrl",
CAPTCHAAI_POLL_INTERVAL: { key: "pollInterval", type: "int" },
CAPTCHAAI_MAX_POLLS: { key: "maxPolls", type: "int" },
CAPTCHAAI_CONCURRENCY: { key: "concurrency", type: "int" },
CAPTCHAAI_TIMEOUT: { key: "timeout", type: "int" },
CAPTCHAAI_PROXY: "proxy",
CAPTCHAAI_CALLBACK_URL: "callbackUrl",
CAPTCHAAI_RETRIES: { key: "retries", type: "int" },
CAPTCHAAI_LOG_LEVEL: "logLevel",
};
static load(configPath = null) {
let config = { ...CaptchaAIConfig.defaults };
// Layer 2: Config file
if (configPath && fs.existsSync(configPath)) {
const ext = path.extname(configPath);
const raw = fs.readFileSync(configPath, "utf8");
const fileConfig = ext === ".json" ? JSON.parse(raw) : yaml.load(raw);
config = { ...config, ...fileConfig };
}
// Layer 1: Environment variables
for (const [envKey, mapping] of Object.entries(CaptchaAIConfig.envMap)) {
const value = process.env[envKey];
if (value !== undefined) {
const attrKey = typeof mapping === "string" ? mapping : mapping.key;
const type = typeof mapping === "string" ? "string" : mapping.type;
config[attrKey] = type === "int" ? parseInt(value, 10) : value;
}
}
CaptchaAIConfig.validate(config);
return config;
}
static validate(config) {
if (!config.apiKey) throw new Error("CAPTCHAAI_API_KEY is required");
if (config.pollInterval < 1) throw new Error("pollInterval must be >= 1");
if (config.concurrency < 1) throw new Error("concurrency must be >= 1");
}
}
// Usage
const config = CaptchaAIConfig.load("config/captchaai.yaml");
console.log(`Concurrency: ${config.concurrency}, Timeout: ${config.timeout}s`);
Ortam Başına Yapılandırma Dosyaları
# config/captchaai.yaml — base
api_key: "" # Always set via env var
concurrency: 5
poll_interval: 5
retries: 3
log_level: info
# config/captchaai.production.yaml
concurrency: 20
poll_interval: 3
timeout: 180
log_level: warning
# config/captchaai.staging.yaml
concurrency: 3
poll_interval: 5
timeout: 300
log_level: debug
Sırlar Yönetimi
API anahtarlarını asla yapılandırma dosyalarında veya kaynak kontrolünde saklamayın.
| Yöntem | En İyisi | Örnek |
|---|---|---|
| Ortam değişkenleri | Konteynerler, CI/CD | export CAPTCHAAI_API_KEY=abc123 |
| AWS Sırları Yöneticisi | AWS altyapısı | Başlangıçta getir; otomatik döndürme |
| HashiCorp Kasası | Çoklu bulut, şirket içi | TTL ile dinamik sırlar |
| Docker sırları | Docker Swarm / Oluşturma | /run/secrets/'ye monte edildi |
.env dosyası (yalnızca geliştirici) |
Yerel kalkınma | dotenv kütüphanesi; .gitignore |
Docker Oluşturma Örneği
services:
captcha-worker:
image: captcha-worker:latest
environment:
- CAPTCHAAI_API_KEY=${CAPTCHAAI_API_KEY}
- CAPTCHAAI_CONCURRENCY=15
- CAPTCHAAI_LOG_LEVEL=warning
env_file:
- .env.production
Özellik Bayrakları
Yeniden konuşlandırmaya gerek kalmadan yetenekleri değiştirin:
class FeatureFlags:
def __init__(self):
self.flags = {
"use_callback": os.environ.get("FF_USE_CALLBACK", "false") == "true",
"enable_proxy": os.environ.get("FF_ENABLE_PROXY", "true") == "true",
"max_concurrent": int(os.environ.get("FF_MAX_CONCURRENT", "10")),
}
def is_enabled(self, flag):
return self.flags.get(flag, False)
def get(self, flag, default=None):
return self.flags.get(flag, default)
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
| API anahtarı yüklenmiyor | Eksik env var; yanlış değişken adı | echo $CAPTCHAAI_API_KEY'yi kontrol edin; Yazımı doğrula |
| Yapılandırma dosyası göz ardı edildi | Yanlış yol veya eksik YAML kitaplığı | Dosyanın var olduğunu doğrulayın; pyyaml / js-yaml'yi yükleyin |
| Geliştirme ayarlarını kullanan üretim | Ortam'a özgü geçersiz kılma uygulanmadı | Env var önceliğini kontrol edin; NODE_ENV / APP_ENV'yi doğrulayın |
| Günlüklerde görünen sırlar | Yapılandırma dökümü API anahtarını içerir | Günlük çıktısındaki hassas alanları maskeleyin |
SSS
Yapılandırma dosyaları için YAML veya JSON kullanmalı mıyım?
İnsanlar tarafından düzenlenen dosyalar için YAML (yorumları destekler). Makine tarafından oluşturulan yapılandırmalar için veya katı ayrıştırma istediğinizde JSON.
API anahtarlarını ne sıklıkla döndürmeliyim?
Tehlikedeyseniz hemen döndürün. Uyumluluk için her 90 günde bir rotasyon planlayın. Otomatik rotasyonu destekleyen gizli dizi yöneticilerini kullanın.
Yeniden başlatmadan eşzamanlılığı değiştirebilir miyim?
Evet — yalnızca başlangıçta değil, her görev kümesindeki ortam değişkenlerinden veya yapılandırma hizmetinden ayarları okuyun. Bu, env değişkenini güncelleyerek ve yeniden yükleme sinyali göndererek eşzamanlılığı ayarlamanıza olanak tanır.
İlgili Makaleler
- Socks5 Proxy Captchaai Kurulum Yapılandırması
- Captchaai Ekipleri Çoklu Kullanıcı Api Anahtar Yönetimi
- Captchaai Proxy Yapılandırma Kılavuzu
Sonraki Adımlar
Konfigürasyonunuzu üretime hazır hale getirin —CaptchaAI API anahtarıyla başlayınve yukarıdaki yapılandırma şablonlarından derleyin.
İlgili kılavuzlar: