Bloga geri dön

GitHub Actions ve CI/CD Pipeline'larda Proxy: Kod Örnekleri ile Kapsamlı Rehber

GitHub Actions iş akışına proxy nasıl bağlanacağını inceliyoruz - böylece otomatik görevler engellenmez ve gerekli bölgeden çalışır.

📅20 Temmuz 2026
```html

GitHub Actions — güçlü bir otomasyon aracıdır: testleri başlatır, uygulamaları dağıtır, veri toplar ve diğer birçok görevi yerine getirir. Ancak iş akışı dış kaynaklara — pazar yerlerine, reklam platformlarına, yurtdışı API'lerine — erişmeye başladığında, coğrafi engeller ve IP sınırlamaları ile karşılaşır. Tek çözüm: proxy'yi doğrudan pipeline'a bağlamak.

GitHub Actions'ta Proxy Neden Gereklidir: Gerçek Senaryolar

Birçok ekip, GitHub Actions'ı yalnızca kod dağıtımı için değil, aynı zamanda iş görevlerini otomatikleştirmek için de kullanıyor: rakip fiyatlarını izleme, pazar yerlerinden veri toplama, reklam hesaplarının otomatik kontrolü ve farklı bölgelerden web sitelerini test etme. Tüm bu görevlerin ortak bir sorunu var — GitHub Actions runner'ı, Microsoft Azure'un sabit bir IP'sine sahiptir ve birçok hizmet bunu engeller veya sınırlar.

İşte proxy olmadan geçilemeyecek belirli durumlar:

  • Wildberries, Ozon, Avito'yu Parselleme — bu platformlar, bulut sağlayıcılarının IP aralıklarını kara listeye almıştır. GitHub Actions runner'ından gelen bir istek, 2-3 denemeden sonra engellenecek veya CAPTCHA ile karşılaşacaktır.
  • Coğrafi Hedefleme Testi — pazarlamacılar ve QA mühendisleri, web sitesinin veya reklamın Moskova, Berlin veya New York'taki kullanıcılar için nasıl göründüğünü kontrol eder. Proxy olmadan, runner her zaman tek bir bölge için içeriği "görecektir".
  • Bölgeye Göre Sınırlı API'lerle Çalışma — bazı API'ler (örneğin, bölgesel Google Ads sürümleri, belirli ayarlarla Facebook Marketing API) isteğin coğrafi konumuna bağlı olarak farklı veriler döndürür.
  • Rakip İzleme — otomatik fiyat, kampanya ve ürün çeşitliliği toplama, tekrar eden veri merkezi IP'si ile kolayca tespit edilir.
  • Reklam Kontrollerinin Otomasyonu — aracı ve performans pazarlamacıları, CI/CD'deki scriptler aracılığıyla reklamların durumu, bakiyeleri ve metrikleri için otomatik kontroller başlatır.
  • Dış Hizmetlerle Entegrasyon Testleri — bazı hizmetler, güvenlik nedenleriyle Azure aralıklarından gelen istekleri engeller ve testler açıklama olmadan başarısız olur.

Tüm bu durumlarda proxy, sorunu köklü bir şekilde çözer: iş akışı, Microsoft'un bulut sunucusundan değil, gerekli şehirden sıradan bir kullanıcıdan gelen bir istek gibi görünmeye başlar.

GitHub Actions Ağ ile Nasıl Çalışır

Proxy'yi ayarlamadan önce, GitHub Actions'taki ağ mimarisini anlamak önemlidir. Standart bir ubuntu-latest runner'ında iş akışını başlattığınızda, görev Microsoft Azure altyapısındaki sanal bir makinede çalışır. Bu tür her makinenin Azure aralıklarından bir genel IP'si vardır — ve dış hizmetler bu IP'yi görür.

GitHub Actions'taki ağın ana özellikleri:

  • Her başlatmada IP değişir — ancak bilinen Azure aralıkları içinde kalır, bu da kolayca tespit edilir.
  • Proxy desteği yoktur — GitHub, trafiği proxy'leme için yerel bir mekanizma sağlamaz.
  • Ortam değişkenleri küresel olarak çalışırHTTP_PROXY'yu iş düzeyinde ayarlarsanız, bu iş içindeki tüm adımlar proxy'yi kullanır.
  • Self-hosted runners — kendi sunucunuzda bir runner çalıştırdığınız alternatif. Bu durumda, proxy sunucu düzeyinde, iş akışı düzeyinde değil ayarlanır.

Çoğu görev için en iyi yaklaşım, proxy'yi doğrudan iş akışı dosyasında ortam değişkenleri aracılığıyla ayarlamaktır (.github/workflows/your-workflow.yml). Bu, çoğu araç için çalışan evrensel bir yöntemdir: curl, wget, Python requests, Node.js http, Go net/http ve diğerleri.

CI/CD için Hangi Proxy Türü Seçilmeli

Proxy türü seçimi, göreve bağlıdır. CI/CD pipeline'ları için üç seçenek geçerlidir ve her birinin kendi nişi vardır:

Proxy Türü Hangi Görevler İçin Hız Güven Seviyesi
Konut Proxy'leri Korunan siteleri parselleme, coğrafi hedefleme, pazar yerlerini izleme Orta Yüksek — gerçek ev IP'leri
Mobil Proxy'ler Mobil versiyonları test etme, sosyal medya ile çalışma, Facebook/TikTok API Orta Maksimum — operatör IP'leri
Veri Merkezi Proxy'leri Entegrasyon testleri, korumasız API'lere istekler, yüksek yük Yüksek Orta

Pratik Kural: Eğer iş akışınız Wildberries, Ozon veya diğer bot koruma sistemine sahip pazar yerlerini parseliyorsa — konut proxy'leri alın. Facebook Ads veya TikTok Ads reklam hesaplarını test ediyorsanız — mobil proxy'ler kullanın. Basit entegrasyon testleri ve açık API istekleri için veri merkezi proxy'leri yeterlidir: daha hızlı ve daha ucuzdur.

💡 Protokoller Hakkında Önemli Bilgiler

GitHub Actions için HTTP/HTTPS proxy kullanmak daha tercih edilir — bunlar, ek ayar gerektirmeden çoğu araç tarafından desteklenir. SOCKS5 de çalışır, ancak her araçta açıkça belirtilmesi gerekir. Sağlayıcınız her iki protokolü de destekliyorsa — HTTP ile başlayın.

Proxy'yi Ortam Değişkenleri ile Ayarlama

GitHub Actions'ta proxy'yi bağlamanın en evrensel yolu, standart ortam değişkenlerini ayarlamaktır: HTTP_PROXY, HTTPS_PROXY ve NO_PROXY. Çoğu komut satırı aracı ve programlama dili bunları otomatik olarak alır.

Proxy ile temel iş akışı yapısı şöyle görünür:

name: Proxy ile İş Akışı

on:
  schedule:
    - cron: '0 9 * * *'
  workflow_dispatch:

jobs:
  scrape-data:
    runs-on: ubuntu-latest

    env:
      HTTP_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
      HTTPS_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
      NO_PROXY: localhost,127.0.0.1,github.com

    steps:
      - name: Depoyu Kontrol Et
        uses: actions/checkout@v4

      - name: Mevcut IP'yi Kontrol Et (kontrol için)
        run: curl -s https://api.ipify.org

      - name: Ana Scripti Çalıştır
        run: python scripts/scraper.py

NO_PROXY bloğuna dikkat edin — burada trafiğin proxy'lenmemesi gereken adresleri eklemeniz gerekir. En azından localhost ve 127.0.0.1 eklenmelidir. Ayrıca, depo ile yapılan işlemlerin (checkout, push) doğrudan gitmesi için github.com'u eklemek de önerilir.

Eğer proxy kimlik doğrulaması yoksa (sadece IP ve port), format basitleşir:

env:
  HTTP_PROXY: http://203.0.113.10:8080
  HTTPS_PROXY: http://203.0.113.10:8080
  NO_PROXY: localhost,127.0.0.1

SOCKS5 proxy için URL'deki sadece şema değişir:

env:
  HTTP_PROXY: socks5://user:password@proxy-host:1080
  HTTPS_PROXY: socks5://user:password@proxy-host:1080

curl, wget ve HTTP İstekleri için Proxy

Eğer ortam değişkenleri iş düzeyinde ayarlandıysa (yukarıda gösterildiği gibi), curl ve wget bunları otomatik olarak alır. Ancak bazen proxy'yi açıkça belirtmek gerekebilir — örneğin, belirli bir adım için veya hata ayıklama sırasında.

curl'da proxy'yi açıkça belirtme:

- name: Proxy ile Veri Al
  run: |
    curl -x http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }} \
      -s \
      -o output.json \
      https://api.example.com/data

    # Proxy üzerinden kontrol
    curl -x http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }} \
      -s https://api.ipify.org?format=json

wget için:

- name: Proxy Üzerinden wget ile İndir
  run: |
    wget -e "https_proxy=http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}" \
      -q \
      -O data.html \
      https://target-site.com/page

Hata ayıklama için yararlı bir adım, iş akışının başında IP adresini kontrol etmektir. Eğer proxy düzgün çalışıyorsa, Azure'dan değil, proxy sunucusunun IP'sini göreceksiniz:

- name: Proxy'nin Aktif Olduğunu Doğrula
  run: |
    echo "=== Proxy Olmadan IP ==="
    curl -s --noproxy '*' https://api.ipify.org || echo "Doğrudan istek başarısız"
    echo ""
    echo "=== Proxy Üzerinden IP ==="
    curl -s https://api.ipify.org

Workflow İçindeki Python Scriptlerinde Proxy

Python, CI/CD'de scriptler için en popüler dillerden biridir. requests kütüphanesi, ortam değişkenlerini otomatik olarak okur: HTTP_PROXY ve HTTPS_PROXY, eğer ayarlanmışlarsa. Ancak daha esnek bir yönetim için proxy'yi açıkça iletmek daha iyidir.

Proxy'yi açıkça ileten bir Python scripti örneği:

import os
import requests

# Proxy verilerini ortam değişkenlerinden okuma
proxy_host = os.environ.get('PROXY_HOST')
proxy_port = os.environ.get('PROXY_PORT')
proxy_user = os.environ.get('PROXY_USER')
proxy_pass = os.environ.get('PROXY_PASS')

proxies = {
    'http': f'http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}',
    'https': f'http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}',
}

# İsteklerde proxy kullanma
response = requests.get(
    'https://www.wildberries.ru/catalog/123456/detail.aspx',
    proxies=proxies,
    timeout=30,
    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    }
)

print(f"Durum: {response.status_code}")
print(f"İçerik uzunluğu: {len(response.content)}")

İş akışı dosyasında değişkenleri ayrı gizli bilgiler olarak iletmeniz gerekir (tam URL olarak değil), böylece script bunları toplayabilir:

- name: Python Scraper'ı Çalıştır
  env:
    PROXY_HOST: ${{ secrets.PROXY_HOST }}
    PROXY_PORT: ${{ secrets.PROXY_PORT }}
    PROXY_USER: ${{ secrets.PROXY_USER }}
    PROXY_PASS: ${{ secrets.PROXY_PASS }}
  run: python scripts/scraper.py

Playwright veya Selenium ile Python'da proxy yapılandırması biraz farklıdır:

# Playwright
from playwright.sync_api import sync_playwright
import os

proxy_url = f"http://{os.environ['PROXY_USER']}:{os.environ['PROXY_PASS']}@{os.environ['PROXY_HOST']}:{os.environ['PROXY_PORT']}"

with sync_playwright() as p:
    browser = p.chromium.launch(
        proxy={
            "server": proxy_url
        }
    )
    page = browser.new_page()
    page.goto("https://target-site.com")
    # ... sonraki mantık
    browser.close()

Node.js ve npm Görevlerinde Proxy

Node.js, sistem değişkenlerini otomatik olarak HTTP_PROXY olarak okumaz — ya özel kütüphaneler kullanmanız ya da proxy'yi açıkça ayarlamanız gerekir. En uygun seçenek, https-proxy-agent paketi veya proxy yapılandırması ile axios'dır.

// axios kullanarak
const axios = require('axios');

const proxyConfig = {
  host: process.env.PROXY_HOST,
  port: parseInt(process.env.PROXY_PORT),
  auth: {
    username: process.env.PROXY_USER,
    password: process.env.PROXY_PASS
  }
};

async function fetchData(url) {
  try {
    const response = await axios.get(url, {
      proxy: proxyConfig,
      timeout: 30000,
      headers: {
        'User-Agent': 'Mozilla/5.0 (compatible; MyBot/1.0)'
      }
    });
    return response.data;
  } catch (error) {
    console.error(`İstek başarısız oldu: ${error.message}`);
    throw error;
  }
}

fetchData('https://api.example.com/prices')
  .then(data => console.log(JSON.stringify(data, null, 2)))
  .catch(() => process.exit(1));

npm komutları için (örneğin, npm kurumsal proxy üzerinden paket indirmeye çalışıyorsa) yapılandırma daha basittir:

- name: npm proxy'yi yapılandır
  run: |
    npm config set proxy http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
    npm config set https-proxy http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}

- name: Bağımlılıkları Yükle
  run: npm install

- name: npm proxy'yi sıfırla (kullanımdan sonra temizle)
  run: |
    npm config delete proxy
    npm config delete https-proxy

Proxy Verilerini GitHub Secrets'ta Güvenli Saklama

Proxy verilerini (host, port, kullanıcı adı, şifre) asla iş akışı dosyasında açık bir şekilde saklamayın. Bu, ciddi bir güvenlik hatasıdır: iş akışı dosyaları depoda saklanır ve proje katılımcılarının hepsine veya tamamen halka açık olarak görünebilir.

Doğru yaklaşım — GitHub Secrets. İşte adım adım talimatlar:

  1. GitHub'da depoyu açın
  2. Ayarlar → Gizli ve Değişkenler → Eylemler kısmına gidin
  3. Yeni depo gizli bilgisi butonuna tıklayın
  4. Dört gizli bilgi oluşturun: PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PASS
  5. İş akışında bunlara ${{ secrets.PROXY_HOST }} sözdizimi ile erişin

🔒 Ek Güvenlik Önlemleri

  • Farklı ortamlar (staging/production) farklı proxy'ler kullanıyorsa Ortam gizli bilgilerini kullanın
  • Gizli bilgilere erişimi Ortam koruma kuralları ile sınırlayın — üretim için manuel onay isteyin
  • Proxy kimlik bilgilerini düzenli olarak döndürün — her 30-90 günde bir şifreleri değiştirin
  • Gizli bilgilerin değerlerini echo ile loglara yazmayın — GitHub bunları otomatik olarak maskeleyebilir, ancak riske girmemek daha iyidir

Eğer dönen proxy'ler kullanıyorsanız (IP her istekte veya belirli bir zaman diliminde değişiyorsa), genellikle yalnızca bir endpoint saklamak yeterlidir — proxy sağlayıcısı IP havuzunu kendisi yönetir. Bu durumda, gizli bilgilerde yalnızca bir döngü geçidi host ve portu olacaktır.

Proxy Rotasyonu ve Hata Yönetimi

Kaliteli proxy'ler bile bazen arızalanabilir: IP geçici bir yasakla karşılaşabilir, oturum kopabilir veya sunucu yanıt vermeyebilir. Gözetimsiz olarak otomatik çalışan CI/CD pipeline'ları için bu tür durumları önceden düşünmek önemlidir.

Strateji 1: Aynı Proxy ile Tekrar Dene

import requests
import time
import os

def fetch_with_retry(url, max_retries=3, delay=5):
    proxies = {
        'http': f"http://{os.environ['PROXY_USER']}:{os.environ['PROXY_PASS']}@{os.environ['PROXY_HOST']}:{os.environ['PROXY_PORT']}",
        'https': f"http://{os.environ['PROXY_USER']}:{os.environ['PROXY_PASS']}@{os.environ['PROXY_HOST']}:{os.environ['PROXY_PORT']}",
    }

    for attempt in range(max_retries):
        try:
            response = requests.get(url, proxies=proxies, timeout=30)
            response.raise_for_status()
            return response
        except requests.exceptions.RequestException as e:
            print(f"{attempt + 1}. deneme başarısız: {e}")
            if attempt < max_retries - 1:
                print(f"{delay} saniye içinde yeniden deniyor...")
                time.sleep(delay)
                delay *= 2  # Üstel gecikme
    raise Exception(f"{max_retries} denemenin hepsi {url} için başarısız oldu")

Strateji 2: Proxy Listesi ile Geçiş Yapma

Eğer birden fazla proxy sunucunuz varsa, bunların listesini bir gizli bilgi içinde (virgülle) saklayabilir ve hata durumunda geçiş yapabilirsiniz:

import os
import requests
import random

# PROXY_LIST gizli bilgisi: "host1:port1:user1:pass1,host2:port2:user2:pass2" içerir
proxy_list_raw = os.environ.get('PROXY_LIST', '').split(',')

def parse_proxy(proxy_str):
    parts = proxy_str.strip().split(':')
    if len(parts) == 4:
        host, port, user, password = parts
        return {
            'http': f'http://{user}:{password}@{host}:{port}',
            'https': f'http://{user}:{password}@{host}:{port}',
        }
    return None

proxies = [p for p in [parse_proxy(raw) for raw in proxy_list_raw] if p]

def fetch_with_proxy_rotation(url):
    random.shuffle(proxies)  # Rastgele sıralama
    for proxy in proxies:
        try:
            response = requests.get(url, proxies=proxy, timeout=20)
            if response.status_code == 200:
                return response
        except Exception as e:
            print(f"Proxy başarısız oldu: {e}, bir sonraki proxy'ye geçiliyor...")
    raise Exception("Tüm proxy'ler tükendi")

Strateji 3: Dönen Endpoint Kullanma

En basit seçenek, tek bir dönen geçit ile bir proxy sağlayıcısı kullanmaktır. Bu durumda, bir adrese bağlanırsınız ve sağlayıcı otomatik olarak havuzdan farklı IP'ler verir. Kodda herhangi bir döndürme mantığına gerek yoktur — sadece bir bağlantı satırı yeterlidir.

Gerçek Senaryolar: Veri Toplama, Testler, İzleme

GitHub Actions ile proxy kullanan ekiplerin en sık karşılaştığı üç belirli senaryoyu inceleyelim.

Senaryo 1: Wildberries'de Günlük Fiyat İzleme

Pazar yeri satıcıları genellikle rakip fiyatlarını otomatik olarak toplamak için ayarlama yapar. İş akışı belirli bir zaman diliminde (örneğin, her sabah 07:00'de) başlatılır, verileri toplar ve bunları Google Sheets'e kaydeder veya Telegram'a gönderir.

name: Günlük Fiyat İzleyici

on:
  schedule:
    - cron: '0 4 * * *'  # 07:00 MSK (UTC+3)

jobs:
  monitor-prices:
    runs-on: ubuntu-latest

    env:
      HTTP_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
      HTTPS_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
      NO_PROXY: github.com,api.github.com

    steps:
      - uses: actions/checkout@v4

      - name: Python'ı Ayarla
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: Bağımlılıkları Yükle
        run: pip install requests beautifulsoup4 gspread

      - name: Fiyat Scraper'ı Çalıştır
        env:
          GOOGLE_SHEETS_KEY: ${{ secrets.GOOGLE_SHEETS_KEY }}
          TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
          TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
        run: python scripts/price_monitor.py

      - name: Sonuçları Yükle
        uses: actions/upload-artifact@v4
        with:
          name: price-data-${{ github.run_id }}
          path: output/prices.json

Senaryo 2: Coğrafi Hedefleme ile Web Sitesi Testi

Pazarlamacılar ve QA ekipleri, web sitesinin veya reklamın farklı şehirlerden kullanıcılar için nasıl göründüğünü kontrol etmek için proxy kullanır. Özellikle bölgesel fiyatlar, içerik ve yönlendirmelerin kontrolü için geçerlidir.

name: Coğrafi Hedefleme Testleri

on:
  push:
    branches: [main]
  pull_request:

jobs:
  test-moscow:
    runs-on: ubuntu-latest
    name: Moskova'dan Test
    steps:
      - uses: actions/checkout@v4
      - name: Coğrafi Testleri Çalıştır (RU/Moskova proxy)
        env:
          HTTP_PROXY: http://${{ secrets.PROXY_RU_USER }}:${{ secrets.PROXY_RU_PASS }}@${{ secrets.PROXY_RU_HOST }}:${{ secrets.PROXY_RU_PORT }}
          HTTPS_PROXY: http://${{ secrets.PROXY_RU_USER }}:${{ secrets.PROXY_RU_PASS }}@${{ secrets.PROXY_RU_HOST }}:${{ secrets.PROXY_RU_PORT }}
        run: |
          python tests/geo_test.py --region=RU --city=Moscow

  test-germany:
    runs-on: ubuntu-latest
    name: Almanya'dan Test
    steps:
      - uses: actions/checkout@v4
      - name: Coğrafi Testleri Çalıştır (DE proxy)
        env:
          HTTP_PROXY: http://${{ secrets.PROXY_DE_USER }}:${{ secrets.PROXY_DE_PASS }}@${{ secrets.PROXY_DE_HOST }}:${{ secrets.PROXY_DE_PORT }}
          HTTPS_PROXY: http://${{ secrets.PROXY_DE_USER }}:${{ secrets.PROXY_DE_PASS }}@${{ secrets.PROXY_DE_HOST }}:${{ secrets.PROXY_DE_PORT }}
        run: |
          python tests/geo_test.py --region=DE

Senaryo 3: Reklam Hesaplarının Otomatik Kontrolü

Arbitrajcılar ve performans pazarlamacıları, sıklıkla GitHub Actions'ı Facebook Ads reklam hesaplarının durumu, bakiyeleri ve metriklerini otomatik olarak kontrol etmek için kullanır. Azure aralıklarından gelen Facebook Marketing API istekleri ek güvenlik kontrolleri gerektirebilir — proxy bunu aşmaya yardımcı olur.

name: Reklam Hesabı Sağlık Kontrolü

on:
  schedule:
    - cron: '*/30 6-22 * * *'  # 06:00'dan 22:00'ye kadar her 30 dakikada bir MSK

jobs:
  check-accounts:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Python'ı Ayarla
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: Bağımlılıkları Yükle
        run: pip install requests

      - name: Facebook Ads hesaplarını kontrol et
        env:
          HTTP_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
          HTTPS_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
          FB_ACCESS_TOKEN: ${{ secrets.FB_ACCESS_TOKEN }}
          ACCOUNT_IDS: ${{ secrets.FB_ACCOUNT_IDS }}
          TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
          TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
        run: python scripts/check_fb_accounts.py

📋 Proxy ile İş Akışını Başlatmadan Önce Kontrol Listesi

  • ✅ Proxy verileri GitHub Secrets'a eklenmiş (iş akışı dosyasına değil)
  • NO_PROXY değişkenleri github.com'u içeriyor
  • ✅ Hata ayıklama için IP kontrol adımı eklenmiş
  • ✅ Hata yönetimi ve tekrar deneme mantığı uygulanmış
  • ✅ Proxy türü göreve uygun (korunan siteler için konut proxy'leri)
  • ✅ Hatalar için bildirimler ayarlanmış (Telegram, Slack veya e-posta)
  • ✅ İş akışı, zamanlama eklenmeden önce workflow_dispatch ile manuel olarak test edilmiştir

Sonuç

GitHub Actions'ta proxy ayarlamak, doğru yaklaşımı bilirseniz zor bir görev değildir. Bu kılavuzdan çıkarılacak ana noktalar:

  • Ortam Değişkenleri HTTP_PROXY / HTTPS_PROXY — çoğu araç için kodda değişiklik yapmadan çalışan evrensel bir yöntemdir.
  • GitHub Secrets — proxy kimlik bilgilerini saklamak için tek doğru yerdir.
  • Proxy türü önemlidir: korunan pazar yerlerini parsellemek için konut IP'leri, reklam platformları için mobil, basit API istekleri için veri merkezi proxy'leri uygundur.
  • Tekrar deneme mantığı zorunludur gözetimsiz çalışan pipeline'lar için.
  • İş akışının başında IP kontrol adımı saatlerce hata ayıklamayı tasarruf ettirir.

Eğer GitHub Actions iş akışınız pazar yerleri, reklam platformları veya herhangi bir bot koruma sistemine sahip hizmetlerle çalışıyorsa, konut proxy'leri kullanmanızı öneririz — bunlar, gerçek ev kullanıcılarının IP'lerine sahiptir ve GitHub sunucularının bulut adreslerine göre çok daha az engelleme ile karşılaşır. Facebook Ads, TikTok veya diğer sosyal platformlarla ilgili görevler için en iyi seçim, mobil proxy'ler olacaktır — bunlar, platformlar tarafından maksimum güven seviyesi sağlar.

```