← Kembali ke blog

Proxy untuk GitHub dan npm: cara mengakses repositori dan paket dari negara-negara di mana GitHub diblokir atau lambat

Jika GitHub diblokir atau lambat, proxy menyelesaikan masalah dalam 10 menit. Kami menjelaskan cara mengatur akses ke repositori dan paket npm tanpa VPN.

šŸ“…4 April 2026
```html

GitHub diblokir, berfungsi dengan keterlambatan 10–30 detik, atau npm install terhenti di tengah jalan — situasi yang akrab bagi pengembang dari Rusia, Iran, Cina, dan sejumlah negara lainnya. Solusinya ada, dan lebih sederhana dari yang terlihat: proxy yang diatur dengan benar memberikan akses stabil ke repositori, paket, dan API GitHub tanpa VPN dan tanpa langkah-langkah yang rumit.

Mengapa GitHub dan npm diblokir atau diperlambat

Sebelum mengatur proxy, penting untuk memahami apa yang sebenarnya Anda hadapi. Masalah akses ke GitHub dan npm ada dalam tiga jenis, dan masing-masing memerlukan pendekatan yang berbeda.

Pemblokiran total di tingkat negara

Sejumlah negara — Cina, Iran, Korea Utara, dan sejak 2022 kadang-kadang Rusia — memblokir GitHub di tingkat DNS atau berdasarkan IP. Ini berarti bahwa permintaan ke github.com tidak berhasil sama sekali, atau mengembalikan kesalahan koneksi. Registri npm (registry.npmjs.org) mungkin berfungsi dengan baik — atau juga diblokir.

Firewall perusahaan dan pembatasan jaringan

Bahkan tanpa pemblokiran negara, jaringan perusahaan sering membatasi akses ke repositori eksternal. Ini adalah praktik standar di bank, lembaga pemerintah, dan perusahaan besar: departemen TI menutup koneksi keluar ke port 443 atau memblokir domain tertentu. Pengembang di jaringan semacam itu tidak dapat melakukan git clone atau npm install tanpa jalan pintas.

Kecepatan lambat karena geografi

Secara teknis GitHub dapat diakses, tetapi mengkloning repositori berukuran 500 MB memakan waktu 40 menit, dan menginstal dependensi melalui npm — selamanya. Ini adalah masalah routing: paket melewati node yang padat atau rute yang panjang. Server proxy yang terletak di AS atau Eropa memperpendek jalur dan memberikan peningkatan kecepatan nyata 3–10 kali lipat.

Penting untuk dipahami:

Proxy menyelesaikan ketiga masalah tersebut: menghindari pemblokiran, men-tunneling lalu lintas melalui port yang diizinkan, dan meningkatkan kecepatan melalui node keluar yang dekat secara geografis. Selain itu, proxy bekerja pada tingkat aplikasi tertentu — Git, npm, browser — tanpa mempengaruhi lalu lintas lainnya di mesin.

Proxy vs VPN: mana yang harus dipilih untuk bekerja dengan kode

Banyak pengembang secara naluriah memilih VPN. Ini bisa dimengerti — VPN mudah diatur dan bekerja langsung untuk seluruh sistem. Namun untuk bekerja dengan GitHub dan npm, proxy seringkali lebih nyaman. Mari kita bahas perbedaannya.

Kriteria Proxy VPN
Cakupan lalu lintas Hanya aplikasi tertentu (Git, npm) Seluruh lalu lintas sistem
Pengaturan di CI/CD Melalui variabel lingkungan, mudah Memerlukan instalasi klien, sulit
Bekerja di Docker Dikirim melalui ENV, tanpa masalah Memerlukan mode istimewa
Kecepatan Tinggi (tidak ada enkripsi seluruh lalu lintas) Lebih rendah karena enkripsi
Konflik dengan jaringan perusahaan Minimal Sering (diblokir oleh departemen TI)
Penggunaan di server Secara native melalui variabel env Memerlukan instalasi daemon

Kesimpulannya sederhana: jika tugas Anda adalah memberikan akses kepada tim ke GitHub dan npm, proxy diatur sekali dalam konfigurasi dan berfungsi tanpa intervensi dalam pengaturan sistem setiap mesin. Ini sangat penting untuk pipeline CI/CD, di mana VPN sulit untuk diatur secara fisik.

Jenis proxy mana yang cocok untuk GitHub dan npm

Tidak semua proxy bekerja dengan baik dengan Git dan npm. Pilihan tergantung pada tugas Anda: menghindari pemblokiran, mempercepat unduhan, atau bekerja dari jaringan perusahaan.

Proxy HTTP/HTTPS

Pilihan paling sederhana. Git dan npm secara native mendukung proxy HTTP melalui variabel lingkungan standar. Cocok untuk sebagian besar tugas: mengkloning repositori, menginstal paket, bekerja dengan API GitHub. Jika penyedia proxy Anda memberikan alamat HTTP — mulailah dari situ.

Proxy SOCKS5

Protokol yang lebih fleksibel, bekerja di tingkat TCP. Mendukung semua jenis lalu lintas, termasuk koneksi SSH dengan GitHub (port 22). Jika Anda menggunakan Git melalui SSH, bukan HTTPS — SOCKS5 lebih disukai. Git mendukung SOCKS5 melalui parameter socks5:// dalam konfigurasi.

Proxy residensial

Proxy residensial menggunakan alamat IP dari pengguna rumah yang nyata. Untuk GitHub, ini sangat relevan jika Anda bekerja dari negara dengan pemblokiran ketat: alamat IP semacam itu sangat jarang masuk dalam daftar hitam dan terlihat seperti lalu lintas pengguna biasa. Cocok untuk situasi di mana alamat IP dari pusat data sudah diblokir di tingkat penyedia.

Proxy pusat data

Proxy pusat data — pilihan optimal untuk sebagian besar pengembang. Mereka lebih cepat daripada proxy residensial, lebih murah, dan memberikan koneksi yang stabil. Jika GitHub hanya lambat, bukan diblokir — proxy pusat data di AS atau Eropa akan memberikan peningkatan kecepatan maksimum saat mengkloning dan mengunduh paket.

Jenis proxy Kecepatan Menghindari pemblokiran Terbaik untuk
HTTP pusat data ⭐⭐⭐⭐⭐ Sedang Mempercepat unduhan, npm install
SOCKS5 pusat data ⭐⭐⭐⭐⭐ Sedang Git melalui SSH, pengaturan fleksibel
Residensial ⭐⭐⭐ Tinggi Pemblokiran ketat (Iran, Cina)
Mobile ⭐⭐⭐ Sangat tinggi Menghindari maksimum, kasus jarang

Pengaturan proxy untuk Git: instruksi langkah demi langkah

Git mendukung proxy melalui konfigurasi bawaan dan melalui variabel lingkungan. Kami akan menunjukkan kedua cara — pilih yang lebih nyaman untuk alur kerja Anda.

Metode 1: Melalui git config (disarankan)

Ini adalah pengaturan permanen yang diterapkan untuk semua operasi Git di mesin. Buka terminal dan jalankan:

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

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

# Periksa apakah pengaturan diterapkan
git config --global --list | grep proxy

Gantilah username:password@proxy-host:port dengan data proxy Anda. Jika proxy tanpa otorisasi — hapus username:password@.

Metode 2: Melalui variabel lingkungan

Nyaman untuk penggunaan sementara atau dalam skrip. Git secara otomatis mengambil variabel standar HTTP_PROXY dan HTTPS_PROXY:

# Linux / macOS — tambahkan di ~/.bashrc atau ~/.zshrc
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"

# Terapkan tanpa me-restart terminal (Linux/macOS)
source ~/.bashrc

Pengaturan proxy hanya untuk GitHub

Jika Anda ingin mengarahkan hanya permintaan ke GitHub melalui proxy, bukan ke semua repositori, gunakan pengaturan bagian:

# Proxy hanya untuk github.com
git config --global http.https://github.com.proxy http://username:password@proxy-host:port

# Periksa pengkloningan melalui proxy
git clone https://github.com/username/repo.git

Git melalui SSH dengan SOCKS5

Jika Anda bekerja dengan GitHub melalui SSH (bukan HTTPS), pengaturannya sedikit berbeda. Anda perlu mengedit file ~/.ssh/config:

# ~/.ssh/config

Host github.com
    HostName github.com
    User git
    # Di Linux/macOS gunakan nc (netcat)
    ProxyCommand nc -X 5 -x proxy-host:port %h %p
    
    # Atau melalui connect-proxy (perlu diinstal)
    # ProxyCommand connect -S proxy-host:port %h %p
    
    # Di Windows melalui Git Bash
    # ProxyCommand connect -S proxy-host:port %h %p

Setelah itu, perintah git clone [email protected]:user/repo.git dan git push akan secara otomatis melalui proxy SOCKS5.

Cara mereset pengaturan proxy

# Hapus proxy dari konfigurasi global
git config --global --unset http.proxy
git config --global --unset https.proxy

Pengaturan proxy untuk npm, yarn, dan pnpm

Setiap manajer paket memiliki cara sendiri untuk mengatur proxy. Mari kita bahas ketiga — npm, yarn, dan pnpm — dengan perintah spesifik.

npm

npm mendukung proxy melalui pengaturan konfigurasi bawaan:

# Atur proxy untuk npm
npm config set proxy http://username:password@proxy-host:port
npm config set https-proxy http://username:password@proxy-host:port

# Periksa pengaturan
npm config get proxy
npm config get https-proxy

# Uji: instal paket melalui proxy
npm install lodash

# Reset proxy
npm config delete proxy
npm config delete https-proxy

Pengaturan disimpan dalam file ~/.npmrc. Anda dapat mengeditnya langsung:

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

Parameter strict-ssl=false

Jika proxy menangkap lalu lintas SSL (misalnya, perusahaan), npm mungkin mengeluh tentang sertifikat. Parameter strict-ssl=false menonaktifkan pemeriksaan. Gunakan hanya di jaringan perusahaan, di mana Anda mempercayai proxy — di jaringan publik ini tidak aman.

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

# Periksa
yarn config get proxy

# Reset
yarn config delete proxy
yarn config delete https-proxy

Yarn Berry (v2+)

# Yarn Berry menggunakan variabel lingkungan
# Tambahkan di .yarnrc.yml di root proyek:
httpProxy: "http://username:password@proxy-host:port"
httpsProxy: "http://username:password@proxy-host:port"

# Atau melalui variabel lingkungan
export HTTP_PROXY="http://username:password@proxy-host:port"
export HTTPS_PROXY="http://username:password@proxy-host:port"

pnpm

# pnpm menggunakan .npmrc yang sama dengan npm
# Pengaturan diterapkan secara otomatis jika npm sudah diatur

# Atau secara eksplisit melalui pnpm config
pnpm config set proxy http://username:password@proxy-host:port
pnpm config set https-proxy http://username:password@proxy-host:port

Alternatif: cermin registri npm

Jika registri npm lambat, tetapi GitHub dapat diakses — Anda dapat beralih ke cermin. Pilihan populer: Taobao (untuk Cina), Verdaccio (self-hosted). Namun cermin sering tertinggal dalam versi paket, jadi proxy lebih dapat diandalkan:

# Alihkan registri ke cermin (hanya untuk mempercepat, bukan untuk pemblokiran)
npm config set registry https://registry.npmmirror.com

# Kembalikan registri resmi
npm config set registry https://registry.npmjs.org

Proxy di CI/CD: GitHub Actions, Docker, Jenkins

Mengatur proxy di mesin lokal — itu setengah pekerjaan. Masalah nyata dimulai ketika Anda perlu memberikan akses ke GitHub dan npm dalam pipeline CI/CD yang berjalan di jaringan terisolasi. Mari kita bahas tiga skenario paling umum.

GitHub Actions

Di GitHub Actions, proxy diatur melalui variabel lingkungan dalam file workflow. Tambahkan rahasia di pengaturan repositori (Settings → Secrets), lalu gunakan dalam workflow:

# .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: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      
      - name: Configure npm proxy
        run: |
          npm config set proxy ${{ secrets.PROXY_URL }}
          npm config set https-proxy ${{ secrets.PROXY_URL }}
      
      - name: Install dependencies
        run: npm ci

Docker

Di Docker, proxy diperlukan di dua tingkat: saat membangun gambar (di docker build) dan di dalam kontainer. Ini adalah pengaturan yang berbeda:

# Kirim proxy saat membangun melalui --build-arg
docker build \
  --build-arg HTTP_PROXY=http://user:pass@proxy-host:port \
  --build-arg HTTPS_PROXY=http://user:pass@proxy-host:port \
  -t myapp .

# Di Dockerfile gunakan ARG untuk proxy
# Dockerfile
ARG HTTP_PROXY
ARG HTTPS_PROXY
ENV HTTP_PROXY=$HTTP_PROXY
ENV HTTPS_PROXY=$HTTPS_PROXY

RUN npm ci

# Setelah menginstal dependensi — reset proxy (jangan simpan dalam gambar!)
ENV HTTP_PROXY=""
ENV HTTPS_PROXY=""

Pengaturan proxy global untuk daemon Docker (untuk docker pull):

# /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"
  }
}

# Restart Docker setelah perubahan
sudo systemctl restart docker

Jenkins

Di Jenkins, proxy diatur di tingkat agen melalui variabel lingkungan dalam Jenkinsfile atau secara global di pengaturan sistem:

// Jenkinsfile
pipeline {
    agent any
    
    environment {
        HTTP_PROXY  = credentials('proxy-url')
        HTTPS_PROXY = credentials('proxy-url')
        NO_PROXY    = 'localhost,127.0.0.1'
    }
    
    stages {
        stage('Install') {
            steps {
                sh 'npm config set proxy $HTTP_PROXY'
                sh 'npm config set https-proxy $HTTPS_PROXY'
                sh 'npm ci'
            }
        }
        stage('Build') {
            steps {
                sh 'npm run build'
            }
        }
    }
}

Kesalahan umum dan cara memperbaikinya

Bahkan dengan pengaturan proxy yang benar, sesuatu mungkin tidak berjalan dengan baik. Kami telah mengumpulkan kesalahan yang paling umum dan cara untuk memperbaikinya.

Kesalahan: ECONNREFUSED atau Koneksi ditolak

Proxy tidak merespons. Alasan: alamat atau port tidak benar, server proxy tidak tersedia, masa berlaku kredensial telah habis.

Solusi: Periksa ketersediaan proxy dengan perintah:

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

Kesalahan: Masalah sertifikat SSL / UNABLE_TO_VERIFY_LEAF_SIGNATURE

Proxy menangkap lalu lintas SSL dan menyisipkan sertifikatnya sendiri, yang tidak dipercaya oleh Git atau npm.

Solusi untuk Git:

git config --global http.sslVerify false
# Atau tambahkan sertifikat root proxy:
git config --global http.sslCAInfo /path/to/proxy-ca.crt

Kesalahan: npm ERR! kode ENOTFOUND

npm tidak dapat menyelesaikan nama DNS registri. Proxy telah diatur, tetapi permintaan DNS tidak melewatinya.

Solusi: Gunakan SOCKS5 alih-alih proxy HTTP — ia men-tunneling permintaan DNS:

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

Kesalahan: 407 Autentikasi Proxy Diperlukan

Proxy memerlukan otorisasi, tetapi kredensial tidak dikirim atau dikirim dengan salah.

# Pastikan bahwa login dan kata sandi dalam URL dikodekan dengan benar
# Jika ada karakter khusus dalam kata sandi (@, :, #) — kodekan mereka:
# @ → %40, : → %3A, # → %23

# Contoh: kata sandi "p@ss:word" → "p%40ss%3Aword"
npm config set proxy http://user:p%40ss%3Aword@proxy-host:port

Git clone berfungsi, tetapi git push tidak

Clone (baca) dan push (tulis) dapat menggunakan protokol yang berbeda. Pastikan proxy diatur untuk HTTP dan HTTPS. Jika menggunakan SSH untuk push — diperlukan pengaturan terpisah di ~/.ssh/config seperti yang dijelaskan di atas.

Daftar periksa: memeriksa apakah semuanya berfungsi

Setelah mengatur proxy, ikuti daftar periksa ini untuk memastikan semuanya berfungsi dengan baik.

āœ… Daftar periksa pengaturan proxy untuk GitHub dan npm

  • Proxy tersedia: curl -v --proxy PROXY_URL https://github.com mengembalikan 200
  • Git config diatur: git config --global --list | grep proxy menunjukkan proxy Anda
  • Uji pengkloningan: git clone https://github.com/torvalds/linux.git --depth=1 berhasil
  • Proxy npm diatur: npm config get proxy menunjukkan proxy Anda
  • Uji npm install: npm install lodash berhasil
  • Jika menggunakan SSH: ssh -T [email protected] mengembalikan sambutan
  • CI/CD: variabel lingkungan ditambahkan ke rahasia, pipeline berhasil
  • Docker: docker build dengan --build-arg berhasil tanpa kesalahan jaringan
  • Kecepatan: pengkloningan jauh lebih cepat dibandingkan tanpa proxy
  • Kredensial proxy tidak disimpan dalam bentuk terbuka dalam kode (hanya dalam rahasia)

Diagnostik cepat dengan satu perintah

Jika sesuatu tidak berfungsi dan tidak jelas di mana masalahnya — jalankan skrip diagnostik ini:

#!/bin/bash
# Diagnostik proxy untuk GitHub/npm

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

echo "=== 1. Akses langsung ke GitHub ==="
curl -s -o /dev/null -w "%{http_code}" https://github.com && echo " OK" || echo " FAIL"

echo "=== 2. Akses melalui proxy ==="
curl -s -o /dev/null -w "%{http_code}" --proxy "$PROXY" https://github.com && echo " OK" || echo " FAIL"

echo "=== 3. Akses ke registri npm melalui proxy ==="
curl -s -o /dev/null -w "%{http_code}" --proxy "$PROXY" https://registry.npmjs.org && echo " OK" || echo " FAIL"

echo "=== 4. Pengaturan proxy Git saat ini ==="
git config --global --list | grep proxy || echo "Proxy Git tidak diatur"

echo "=== 5. Pengaturan proxy npm saat ini ==="
npm config get proxy
npm config get https-proxy

Kesimpulan

Mengatur proxy untuk GitHub dan npm bukanlah tugas yang sulit jika Anda tahu urutan tindakan yang benar. Mari kita ringkas:

  • Untuk mempercepat GitHub yang lambat — proxy pusat data di AS atau Eropa cocok: mereka cepat, stabil, dan murah.
  • Untuk menghindari pemblokiran — proxy residensial dengan IP pengguna nyata memberikan keandalan maksimum.
  • Untuk Git melalui HTTPS — atur http.proxy dalam konfigurasi git.
  • Untuk Git melalui SSH — gunakan ProxyCommand dalam ~/.ssh/config.
  • Untuk npm/yarn/pnpm — atur proxy melalui konfigurasi atau variabel lingkungan.
  • Untuk CI/CD — kirim data proxy melalui rahasia, jangan hardcode dalam kode.

Menghabiskan 10–15 menit untuk pengaturan sekali, Anda mendapatkan akses stabil ke GitHub dan npm tanpa tergantung pada keadaan saluran internet atau kebijakan pemblokiran. Tim tidak lagi membuang waktu menunggu unduhan lambat, pipeline CI/CD berjalan tanpa kesalahan jaringan, dan pengembang di berbagai negara bekerja dalam kondisi yang sama.

Jika Anda mencari proxy yang stabil untuk bekerja dengan GitHub dan npm dari negara dengan akses terbatas, kami merekomendasikan untuk mempertimbangkan proxy pusat data — mereka memberikan kecepatan tinggi dan stabilitas koneksi, yang sangat penting saat mengkloning repositori dan menginstal dependensi. Untuk wilayah dengan pemblokiran ketat, proxy residensial lebih cocok — IP mereka hampir tidak pernah terpengaruh oleh pembatasan.

```