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.com200 döner - Git config ayarlandı:
git config --global --list | grep proxyproxy'nizi gösterir - Kopyalama testi:
git clone https://github.com/torvalds/linux.git --depth=1çalışır - npm proxy ayarlandı:
npm config get proxyproxy'nizi gösterir - npm install testi:
npm install lodashbaş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.proxyayarlayın. - SSH üzerinden Git için -
~/.ssh/configdosyası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.