Bloga geri dön

GitHub ve npm için Proxy: GitHub'ın engellendiği veya yavaş çalıştığı ülkelerden depo ve paketlere nasıl erişilir

GitHub engellendiğinde veya yavaş çalıştığında, proxy sorunu 10 dakikada çözer. VPN olmadan depolara ve npm paketlerine erişimi nasıl ayarlayacağınızı anlatıyoruz.

📅4 Nisan 2026
```html

GitHub engellendiğinde, 10-30 saniye gecikmeli çalıştığında veya npm install yarıda kaldığında - bu, Rusya, İran, Çin ve diğer bazı ülkelerden geliştiriciler için tanıdık bir durum. Bir çözüm var ve göründüğünden daha basit: doğru ayarlanmış bir proxy, VPN olmadan ve gereksiz karmaşalar olmadan GitHub'a, paketlere ve API'ye istikrarlı erişim sağlar.

Neden GitHub ve npm engelleniyor veya yavaşlatılıyor

Proxy ayarlamadan önce, tam olarak neyle karşılaştığınızı anlamak önemlidir. GitHub ve npm'e erişim sorunları üç türdedir ve her biri farklı bir yaklaşım gerektirir.

Devlet Düzeyinde Tam Engelleme

Çin, İran, Kuzey Kore gibi bazı ülkeler ve 2022 yılından itibaren zaman zaman Rusya, GitHub'ı DNS veya IP düzeyinde engellemektedir. Bu, github.com adresine yapılan isteklerin ya hiç geçmemesi ya da bağlantı hatası vermesi anlamına gelir. npm kayıt defteri (registry.npmjs.org) bu durumda normal çalışabilir - ya da o da engellenmiş olabilir.

Kurumsal Güvenlik Duvarları ve Ağ Kısıtlamaları

Devlet engellemesi olmadan bile, kurumsal ağlar genellikle dış depolara erişimi kısıtlar. Bu, bankalarda, devlet kurumlarında ve büyük işletmelerde standart bir uygulamadır: IT departmanı, 443 numaralı portlara çıkış bağlantılarını kapatır veya belirli alan adlarını engeller. Böyle bir ağda bir geliştirici git clone veya npm install yapamaz.

Coğrafi Sebeplerle Yavaş Hız

Teknik olarak GitHub'a erişim var, ancak 500 MB'lık bir deponun kopyalanması 40 dakika sürüyor ve npm üzerinden bağımlılıkların kurulması sonsuz bir zaman alıyor. Bu, yönlendirme sorunudur: paketler, aşırı yüklenmiş düğümler veya uzun yollar üzerinden geçiyor. ABD veya Avrupa'da bulunan bir proxy sunucusu, yolu kısaltır ve 3-10 kat gerçek bir hız artışı sağlar.

Anlamak önemlidir:

Proxy, bu üç sorunu çözer: engellemeyi aşar, trafiği izin verilen portlar üzerinden tünelleştirir ve coğrafi olarak yakın bir çıkış düğümü sayesinde hızı artırır. Bu arada, proxy belirli bir uygulama düzeyinde çalışır - Git, npm, tarayıcı - makinedeki diğer trafiği etkilemeden.

Proxy vs VPN: Kod ile çalışmak için neyi seçmeli

Birçok geliştirici alışkanlık gereği VPN'e yöneliyor. Bu anlaşılabilir - VPN ayarlaması kolaydır ve sistemin tamamı için hemen çalışır. Ancak GitHub ve npm ile çalışmak için proxy genellikle daha kullanışlıdır. Farkı inceleyelim.

Kriter Proxy VPN
Trafik Kapsamı Sadece belirli bir uygulama (Git, npm) Sistemin tüm trafiği
CI/CD'de Ayarlama Çevresel değişkenler aracılığıyla, basit İstemci kurulumu gerektirir, zor
Docker'da Çalışma ENV üzerinden iletilir, sorun yok Yetkili mod gerektirir
Hız Yüksek (tüm trafiğin şifrelenmesi yok) Şifreleme nedeniyle daha düşük
Kurumsal Ağ ile Çatışmalar Minimum Sık (IT departmanı tarafından engellenir)
Sunucuda Kullanım env değişkenleri aracılığıyla yerel Demon kurulumu gerektirir

Sonuç basit: eğer amacınız ekibinize GitHub ve npm'e erişim sağlamaksa, proxy bir kez yapılandırılır ve her makinenin sistem ayarlarına müdahale etmeden çalışır. Bu, özellikle VPN'in fiziksel olarak zor olduğu CI/CD boru hatları için önemlidir.

GitHub ve npm için hangi proxy türü uygundur

Tüm proxy'ler Git ve npm ile aynı derecede iyi çalışmaz. Seçim, amacınıza bağlıdır: engellemeyi aşmak, indirme hızını artırmak veya kurumsal ağdan çalışmak.

HTTP/HTTPS Proxy

En basit seçenek. Git ve npm, standart çevresel değişkenler aracılığıyla HTTP proxy'yi yerel olarak destekler. Çoğu görev için uygundur: depo kopyalama, paket yükleme, GitHub API ile çalışma. Proxy sağlayıcınız HTTP adresi veriyorsa - bununla başlayın.

SOCKS5 Proxy

Daha esnek bir protokol, TCP düzeyinde çalışır. SSH bağlantıları dahil olmak üzere her türlü trafiği destekler (port 22). Git'i HTTPS yerine SSH üzerinden kullanıyorsanız - SOCKS5 daha uygundur. Git, yapılandırmada socks5:// parametresi aracılığıyla SOCKS5'i destekler.

İkamet Proxy'leri

İkamet proxy'leri, gerçek ev kullanıcılarının IP adreslerini kullanır. GitHub için bu özellikle önemlidir, eğer katı engellemelerin olduğu bir ülkede çalışıyorsanız: bu tür IP'ler nadiren kara listeye alınır ve sıradan kullanıcı trafiği gibi görünür. Veri merkezi IP'lerinin zaten sağlayıcı düzeyinde engellendiği durumlar için uygundur.

Veri Merkezi Proxy'leri

Veri merkezi proxy'leri çoğu geliştirici için en iyi seçimdir. İkamet proxy'lerinden daha hızlıdır, daha ucuzdur ve istikrarlı bir bağlantı sağlar. Eğer GitHub sadece yavaşsa ve engellenmemişse - ABD veya Avrupa'daki bir veri merkezi proxy'si, kopyalama ve paket yükleme sırasında maksimum hız artışı sağlar.

Proxy Türü Hız Engellemeleri Aşma En İyi Kullanım Alanı
Veri Merkezi HTTP ⭐⭐⭐⭐⭐ Orta İndirme hızını artırma, npm install
Veri Merkezi SOCKS5 ⭐⭐⭐⭐⭐ Orta Git üzerinden SSH, esnek ayar
İkamet ⭐⭐⭐ Yüksek Sert engellemeler (İran, Çin)
Mobil ⭐⭐⭐ Çok yüksek Maksimum aşma, nadir durumlar

Git için proxy ayarı: adım adım talimat

Git, proxy'yi yerleşik yapılandırma ve çevresel değişkenler aracılığıyla destekler. Her iki yöntemi de göstereceğiz - sizin için daha uygun olanı seçin.

Yöntem 1: git config aracılığıyla (önerilir)

Bu, makinedeki tüm Git işlemlerine uygulanan kalıcı bir ayardır. Terminali açın ve şu komutları çalıştırın:

# HTTP/HTTPS proxy için
git config --global http.proxy http://username:password@proxy-host:port
git config --global https.proxy http://username:password@proxy-host:port

# SOCKS5 proxy için
git config --global http.proxy socks5://username:password@proxy-host:port
git config --global https.proxy socks5://username:password@proxy-host:port

# Ayarların uygulandığını kontrol et
git config --global --list | grep proxy

username:password@proxy-host:port kısmını proxy bilgilerinizle değiştirin. Eğer proxy kimlik doğrulaması yoksa - username:password@ kısmını kaldırın.

Yöntem 2: Çevresel Değişkenler aracılığıyla

Geçici kullanım veya betiklerde kullanışlıdır. Git, standart değişkenleri otomatik olarak alır: HTTP_PROXY ve HTTPS_PROXY:

# Linux / macOS — ~/.bashrc veya ~/.zshrc'ye ekleyin
export HTTP_PROXY="http://username:password@proxy-host:port"
export HTTPS_PROXY="http://username:password@proxy-host:port"
export NO_PROXY="localhost,127.0.0.1,::1"

# Windows (PowerShell)
$env:HTTP_PROXY="http://username:password@proxy-host:port"
$env:HTTPS_PROXY="http://username:password@proxy-host:port"

# Terminali yeniden başlatmadan uygulamak (Linux/macOS)
source ~/.bashrc

Sadece GitHub için Proxy Ayarı

Eğer sadece GitHub'a yapılan istekleri proxy üzerinden yönlendirmek istiyorsanız, bölüm ayarını kullanın:

# Sadece github.com için proxy
git config --global http.https://github.com.proxy http://username:password@proxy-host:port

# Proxy üzerinden kopyalamayı kontrol et
git clone https://github.com/username/repo.git

SOCKS5 üzerinden SSH ile Git

Eğer GitHub ile SSH üzerinden çalışıyorsanız (HTTPS değil), ayar biraz farklıdır. ~/.ssh/config dosyasını düzenlemeniz gerekir:

# ~/.ssh/config

Host github.com
    HostName github.com
    User git
    # Linux/macOS'ta nc (netcat) kullanın
    ProxyCommand nc -X 5 -x proxy-host:port %h %p
    
    # Veya connect-proxy ile (kurulması gerekir)
    # ProxyCommand connect -S proxy-host:port %h %p
    
    # Windows'ta Git Bash üzerinden
    # ProxyCommand connect -S proxy-host:port %h %p

Bunun ardından git clone [email protected]:user/repo.git ve git push komutları otomatik olarak SOCKS5 proxy üzerinden gidecektir.

Proxy Ayarlarını Sıfırlama

# Global yapılandırmadan proxy'yi kaldır
git config --global --unset http.proxy
git config --global --unset https.proxy

npm, yarn ve pnpm için proxy ayarı

Her paket yöneticisinin proxy ayarlama yöntemi farklıdır. npm, yarn ve pnpm'yi belirli komutlarla inceleyelim.

npm

npm, proxy'yi yerleşik yapılandırma ayarları aracılığıyla destekler:

# npm için proxy ayarlama
npm config set proxy http://username:password@proxy-host:port
npm config set https-proxy http://username:password@proxy-host:port

# Ayarları kontrol et
npm config get proxy
npm config get https-proxy

# Test: proxy üzerinden paket yükleme
npm install lodash

# Proxy'yi sıfırlama
npm config delete proxy
npm config delete https-proxy

Ayarlar ~/.npmrc dosyasına kaydedilir. Bunu doğrudan düzenleyebilirsiniz:

# ~/.npmrc
proxy=http://username:password@proxy-host:port
https-proxy=http://username:password@proxy-host:port
strict-ssl=false

strict-ssl=false parametresi

Eğer proxy SSL trafiğini kesiyorsa (örneğin, kurumsal bir proxy), npm sertifika hatası verebilir. strict-ssl=false parametresi kontrolü devre dışı bırakır. Sadece proxy'e güvendiğiniz kurumsal ağlarda kullanın - genel ağlarda bu güvenli değildir.

Yarn (v1 Classic)

# Yarn Classic (v1)
yarn config set proxy http://username:password@proxy-host:port
yarn config set https-proxy http://username:password@proxy-host:port

# Kontrol et
yarn config get proxy

# Sıfırla
yarn config delete proxy
yarn config delete https-proxy

Yarn Berry (v2+)

# Yarn Berry çevresel değişkenleri kullanır
# Proje kökündeki .yarnrc.yml dosyasına ekleyin:
httpProxy: "http://username:password@proxy-host:port"
httpsProxy: "http://username:password@proxy-host:port"

# Veya çevresel değişkenler aracılığıyla
export HTTP_PROXY="http://username:password@proxy-host:port"
export HTTPS_PROXY="http://username:password@proxy-host:port"

pnpm

# pnpm, npm ile aynı .npmrc dosyasını kullanır
# Ayarlar, npm zaten ayarlandığında otomatik olarak uygulanır

# Veya açıkça pnpm config aracılığıyla
pnpm config set proxy http://username:password@proxy-host:port
pnpm config set https-proxy http://username:password@proxy-host:port

Alternatif: npm kayıt defteri aynaları

Eğer npm kayıt defteri yavaşsa, ancak GitHub erişilebilir durumdaysa - bir aynaya geçebilirsiniz. Popüler seçenekler: Taobao (Çin için), Verdaccio (kendi barındırdığınız). Ancak aynalar genellikle paket versiyonlarında geride kalır, bu nedenle proxy daha güvenilirdir:

# Kayıt defterini aynaya geçirmek (sadece hız için, engellemeler için değil)
npm config set registry https://registry.npmmirror.com

# Resmi kayıt defterine geri dön
npm config set registry https://registry.npmjs.org

CI/CD'de Proxy: GitHub Actions, Docker, Jenkins

Yerel makinede proxy ayarlamak işin yarısıdır. Gerçek zorluk, izole bir ağda çalışan CI/CD boru hattında GitHub ve npm'e erişimi sağlamaktır. En yaygın üç senaryoyu inceleyelim.

GitHub Actions

GitHub Actions'da proxy, workflow dosyasında çevresel değişkenler aracılığıyla ayarlanır. Depo ayarlarında (Ayarlar → Gizli Anahtarlar) gizli anahtarları ekleyin, ardından bunları workflow'da kullanın:

# .github/workflows/build.yml
name: Build

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    
    env:
      HTTP_PROXY: ${{ secrets.PROXY_URL }}
      HTTPS_PROXY: ${{ secrets.PROXY_URL }}
      NO_PROXY: "localhost,127.0.0.1"
    
    steps:
      - uses: actions/checkout@v3
      
      - name: Node.js Kurulumu
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      
      - name: npm proxy ayarlama
        run: |
          npm config set proxy ${{ secrets.PROXY_URL }}
          npm config set https-proxy ${{ secrets.PROXY_URL }}
      
      - name: Bağımlılıkları Yükle
        run: npm ci

Docker

Docker'da proxy, iki düzeyde gereklidir: imajın oluşturulması sırasında (docker build) ve konteyner içinde. Bu farklı ayarlardır:

# --build-arg ile proxy'yi geçirin
docker build \
  --build-arg HTTP_PROXY=http://user:pass@proxy-host:port \
  --build-arg HTTPS_PROXY=http://user:pass@proxy-host:port \
  -t myapp .

# Dockerfile'da proxy için ARG kullanın
# Dockerfile
ARG HTTP_PROXY
ARG HTTPS_PROXY
ENV HTTP_PROXY=$HTTP_PROXY
ENV HTTPS_PROXY=$HTTPS_PROXY

RUN npm ci

# Bağımlılıkları yükledikten sonra - proxy'yi sıfırlayın (imajda saklamayın!)
ENV HTTP_PROXY=""
ENV HTTPS_PROXY=""

Docker demonunun global proxy ayarı ( docker pull için):

# /etc/docker/daemon.json
{
  "proxies": {
    "http-proxy": "http://user:pass@proxy-host:port",
    "https-proxy": "http://user:pass@proxy-host:port",
    "no-proxy": "localhost,127.0.0.1"
  }
}

# Değişikliklerden sonra Docker'ı yeniden başlatın
sudo systemctl restart docker

Jenkins

Jenkins'te proxy, Jenkinsfile'da çevresel değişkenler aracılığıyla veya sistem ayarlarında global olarak ayarlanır:

// Jenkinsfile
pipeline {
    agent any
    
    environment {
        HTTP_PROXY  = credentials('proxy-url')
        HTTPS_PROXY = credentials('proxy-url')
        NO_PROXY    = 'localhost,127.0.0.1'
    }
    
    stages {
        stage('Yükle') {
            steps {
                sh 'npm config set proxy $HTTP_PROXY'
                sh 'npm config set https-proxy $HTTPS_PROXY'
                sh 'npm ci'
            }
        }
        stage('İnşa') {
            steps {
                sh 'npm run build'
            }
        }
    }
}

Yaygın Hatalar ve Nasıl Düzeltileceği

Proxy doğru ayarlandığında bile, bir şeyler yanlış gidebilir. En yaygın hataları ve bunların çözümlerini derledik.

Hata: ECONNREFUSED veya Bağlantı reddedildi

Proxy yanıt vermiyor. Sebepler: yanlış adres veya port, proxy sunucusu erişilemez, kimlik bilgileri süresi dolmuş.

Çözüm: Proxy'nin erişilebilirliğini kontrol etmek için şu komutu kullanın:

curl -v --proxy http://user:pass@proxy-host:port https://github.com

Hata: SSL sertifika sorunu / UNABLE_TO_VERIFY_LEAF_SIGNATURE

Proxy SSL trafiğini kesiyor ve kendi sertifikasını ekliyor, bu da Git veya npm tarafından güvenilmiyor.

Git için çözüm:

git config --global http.sslVerify false
# Veya proxy'nin kök sertifikasını ekleyin:
git config --global http.sslCAInfo /path/to/proxy-ca.crt

Hata: npm ERR! code ENOTFOUND

npm, kayıt defterinin DNS adını çözemiyor. Proxy ayarlandı, ancak DNS istekleri onun üzerinden gitmiyor.

Çözüm: HTTP proxy yerine SOCKS5 kullanın - bu, DNS isteklerini tünelleştirir:

npm config set proxy socks5://user:pass@proxy-host:port
npm config set https-proxy socks5://user:pass@proxy-host:port

Hata: 407 Proxy Kimlik Doğrulaması Gerekiyor

Proxy kimlik doğrulaması gerektiriyor, ancak kimlik bilgileri iletilmedi veya yanlış iletildi.

# URL'deki kullanıcı adı ve şifrenin doğru kodlandığından emin olun
# Şifrede özel karakterler varsa (@, :, #) - bunları kodlayın:
# @ → %40, : → %3A, # → %23

# Örnek: şifre "p@ss:word" → "p%40ss%3Aword"
npm config set proxy http://user:p%40ss%3Aword@proxy-host:port

Git clone çalışıyor, ancak git push çalışmıyor

Clone (okuma) ve push (yazma) farklı protokoller kullanabilir. Proxy'nin hem HTTP hem de HTTPS için ayarlandığından emin olun. Eğer push için SSH kullanıyorsanız - yukarıda açıklandığı gibi ~/.ssh/config dosyasında ayrı bir ayar gereklidir.

Kontrol Listesi: Her Şeyin Çalıştığını Kontrol Et

Proxy ayarlandıktan sonra, her şeyin düzgün çalıştığından emin olmak için bu kontrol listesini gözden geçirin.

✅ GitHub ve npm için Proxy Ayar Kontrol Listesi

  • Proxy erişilebilir: curl -v --proxy PROXY_URL https://github.com 200 döner
  • Git config ayarlandı: git config --global --list | grep proxy proxy'nizi gösterir
  • Kopyalama testi: git clone https://github.com/torvalds/linux.git --depth=1 çalışır
  • npm proxy ayarlandı: npm config get proxy proxy'nizi gösterir
  • npm install testi: npm install lodash başarıyla tamamlanır
  • SSH kullanıyorsanız: ssh -T [email protected] selam döner
  • CI/CD: çevresel değişkenler gizli anahtarlara eklendi, boru hattı geçiyor
  • Docker: docker build --build-arg ile ağ hatası olmadan tamamlanır
  • Hız: kopyalama, proxy olmadan belirgin şekilde daha hızlıdır
  • Proxy kimlik bilgileri kodda açık bir şekilde saklanmaz (sadece gizli anahtarlarda)

Tek Komutla Hızlı Tanı

Eğer bir şey çalışmıyorsa ve sorun nerede anlayamıyorsanız - bu tanı betiğini çalıştırın:

#!/bin/bash
# GitHub/npm için proxy tanısı

PROXY="http://user:pass@proxy-host:port"

echo "=== 1. GitHub'a doğrudan erişim ==="
curl -s -o /dev/null -w "%{http_code}" https://github.com && echo " OK" || echo " FAIL"

echo "=== 2. Proxy üzerinden erişim ==="
curl -s -o /dev/null -w "%{http_code}" --proxy "$PROXY" https://github.com && echo " OK" || echo " FAIL"

echo "=== 3. npm kayıt defterine proxy üzerinden erişim ==="
curl -s -o /dev/null -w "%{http_code}" --proxy "$PROXY" https://registry.npmjs.org && echo " OK" || echo " FAIL"

echo "=== 4. Mevcut Git proxy ayarları ==="
git config --global --list | grep proxy || echo "Git proxy ayarlanmadı"

echo "=== 5. Mevcut npm proxy ayarları ==="
npm config get proxy
npm config get https-proxy

Sonuç

GitHub ve npm için proxy ayarlamak, doğru adım sırasını bilmek şartıyla zor bir görev değildir. Özetleyelim:

  • Yavaş GitHub'ı hızlandırmak için - ABD veya Avrupa'daki veri merkezi proxy'leri uygundur: hızlı, istikrarlı ve ucuzdur.
  • Engellemeleri aşmak için - gerçek kullanıcıların IP'lerini kullanan ikamet proxy'leri maksimum güvenilirlik sağlar.
  • HTTPS üzerinden Git için - git config'de http.proxy ayarlayın.
  • SSH üzerinden Git için - ~/.ssh/config dosyasında ProxyCommand kullanın.
  • npm/yarn/pnpm için - config veya çevresel değişkenler aracılığıyla proxy ayarlayın.
  • CI/CD için - proxy bilgilerini gizli anahtarlar aracılığıyla iletin, kodda sabit yazmayın.

Bir kez 10-15 dakikanızı ayırarak ayarladığınızda, internet bağlantısının durumu veya engelleme politikalarına bağlı olmadan GitHub ve npm'e istikrarlı erişim elde edersiniz. Ekip, yavaş indirmeleri beklemek için zaman kaybetmez, CI/CD boru hatları ağ hatası olmadan geçer ve farklı ülkelerdeki geliştiriciler aynı koşullarda çalışır.

Eğer sınırlı erişim olan ülkelerden GitHub ve npm ile çalışmak için istikrarlı bir proxy arıyorsanız, veri merkezi proxy'lerini düşünmenizi öneririz - bunlar yüksek hız ve bağlantı istikrarı sağlar, bu da depo kopyalama ve bağımlılık yükleme sırasında kritik öneme sahiptir. Sert engellemelerin olduğu bölgeler için ikamet proxy'leri daha uygun olacaktır - bu IP'ler neredeyse hiç kısıtlamalara maruz kalmaz.

```