لوگو آی پی استاتیک

رفع تحریم گیت‌هاب، داکر، npm و pip — راهنمای کامل برنامه‌نویسان

ابزارهای برنامه‌نویسی برخلاف مرورگر، تنظیمات پروکسی سیستم را نمی‌خوانند. در این راهنما مسیر عبور هر ابزار را جداگانه تنظیم می‌کنیم.

رفع تحریم گیت‌هاب، داکر، npm و pip — راهنمای کامل برنامه‌نویسان

چرا با آی‌پی ایران خطا می‌گیرید؟

بیشتر سرویس‌های توسعه‌دهندگان، درخواست‌هایی که از محدودهٔ آی‌پی ایران می‌آیند را در لبهٔ شبکه (CDN) رد می‌کنند. نتیجه‌اش یکی از این پیام‌هاست:

  • 403 Forbidden هنگام git clone یا git push
  • Error response from daemon: ... 403 هنگام docker pull
  • پیام «this service is not available in your country» در پنل‌های ابری
  • کند شدن یا نیمه‌کاره ماندن npm install و pip install

نکتهٔ مهم این است که این خطاها ربطی به فیلترینگ داخلی ندارند؛ سمت مقابل شما را رد می‌کند. برای همین «باز شدن سایت در مرورگر» لزوماً به معنی درست‌شدن ابزار خط فرمان نیست: هر ابزار مسیر شبکهٔ خودش را دارد.

اول از همه: آی‌پی باید ثابت و تمیز باشد

اگر آی‌پی خروجی شما مدام عوض شود، سرویس‌هایی مثل پنل‌های ابری و درگاه‌های ثبت حساب، رفتار شما را مشکوک تشخیص می‌دهند و ورود دومرحله‌ای یا کپچا می‌گیرند. آی‌پی اشتراکی که بین صدها کاربر می‌چرخد، معمولاً پیش‌تر توسط دیگران «سوخته» شده است. به همین دلیل برای کار حرفه‌ای، آی‌پی ثابت و اختصاصی تفاوت محسوسی ایجاد می‌کند.

تنظیم گیت (Git)

گیت پروکسی سیستم را نادیده می‌گیرد و باید صریح تنظیم شود:

git config --global http.proxy socks5://127.0.0.1:10808
git config --global https.proxy socks5://127.0.0.1:10808

برای برداشتن تنظیمات:

git config --global --unset http.proxy
git config --global --unset https.proxy

اگر با SSH کار می‌کنید (git@github.com:...)، تنظیم بالا اثری ندارد، چون SSH از مسیر دیگری می‌رود. در فایل ~/.ssh/config بنویسید:

Host github.com
  HostName ssh.github.com
  Port 443
  User git

تنظیم npm و Yarn

npm config set proxy http://127.0.0.1:10809
npm config set https-proxy http://127.0.0.1:10809

دقت کنید که npm با پروکسی HTTP کار می‌کند، نه SOCKS. بیشتر کلاینت‌ها هر دو پورت را هم‌زمان باز می‌کنند (مثلاً SOCKS روی ۱۰۸۰۸ و HTTP روی ۱۰۸۰۹)؛ پورت درست را از تنظیمات برنامهٔ خود بردارید.

تنظیم pip

برای یک بار:

pip install --proxy http://127.0.0.1:10809 requests

برای همیشه، فایل pip.conf (در ویندوز pip.ini):

[global]
proxy = http://127.0.0.1:10809

تنظیم داکر

داکر با کاربر شما کار نمی‌کند؛ سرویس آن (daemon) باید پروکسی را بشناسد. در لینوکس یک فایل drop-in بسازید:

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:10809"
Environment="HTTPS_PROXY=http://127.0.0.1:10809"
Environment="NO_PROXY=localhost,127.0.0.1"
sudo systemctl daemon-reload
sudo systemctl restart docker

توجه: این تنظیم برای docker pull است. اگر داخل کانتینر هم به اینترنت نیاز دارید، متغیرهای پروکسی را جداگانه به کانتینر بدهید.

Composer و Go

# Composer (PHP)
export HTTP_PROXY=http://127.0.0.1:10809
export HTTPS_PROXY=http://127.0.0.1:10809

# Go
go env -w GOPROXY=https://proxy.golang.org,direct

چک‌لیست عیب‌یابی

  1. آی‌پی خروجی‌تان را بررسی کنید؛ باید آی‌پی سرویس باشد، نه آی‌پی ایران.
  2. ابزار را جداگانه تست کنید — باز شدن سایت در مرورگر کافی نیست.
  3. اگر پورت را عوض کرده‌اید، تنظیمات قدیمی ابزار را پاک کنید.
  4. برای داکر حتماً سرویس را ری‌استارت کنید؛ بدون آن تنظیم اعمال نمی‌شود.

پرسش‌های متداول

چرا سایت در مرورگر باز می‌شود ولی git clone خطا می‌دهد؟

چون گیت تنظیمات پروکسی مرورگر را نمی‌خواند و باید با دستور git config جداگانه تنظیم شود.

برای npm از SOCKS استفاده کنم یا HTTP؟

npm فقط پروکسی HTTP را قبول می‌کند. اگر برنامهٔ شما هر دو پورت را باز می‌کند، پورت HTTP را بدهید.

بعد از تنظیم پروکسی، docker pull هنوز خطا می‌دهد. چرا؟

تنظیم داکر باید در سطح سرویس (systemd) انجام شود و سپس daemon-reload و restart اجرا شود.

آی‌پی ثابت می‌خواهید؟

دو روز رایگان تست کنید؛ اگر مناسب کارتان نبود، هزینه‌ای پرداخت نکرده‌اید.

مطالب مرتبط