رفع تحریم گیتهاب، داکر، npm و pip — راهنمای کامل برنامهنویسان
ابزارهای برنامهنویسی برخلاف مرورگر، تنظیمات پروکسی سیستم را نمیخوانند. در این راهنما مسیر عبور هر ابزار را جداگانه تنظیم میکنیم.
چرا با آیپی ایران خطا میگیرید؟
بیشتر سرویسهای توسعهدهندگان، درخواستهایی که از محدودهٔ آیپی ایران میآیند را در لبهٔ شبکه (CDN) رد میکنند. نتیجهاش یکی از این پیامهاست:
403 Forbiddenهنگامgit cloneیاgit pushError 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
چکلیست عیبیابی
- آیپی خروجیتان را بررسی کنید؛ باید آیپی سرویس باشد، نه آیپی ایران.
- ابزار را جداگانه تست کنید — باز شدن سایت در مرورگر کافی نیست.
- اگر پورت را عوض کردهاید، تنظیمات قدیمی ابزار را پاک کنید.
- برای داکر حتماً سرویس را ریاستارت کنید؛ بدون آن تنظیم اعمال نمیشود.
پرسشهای متداول
چرا سایت در مرورگر باز میشود ولی git clone خطا میدهد؟
چون گیت تنظیمات پروکسی مرورگر را نمیخواند و باید با دستور git config جداگانه تنظیم شود.
برای npm از SOCKS استفاده کنم یا HTTP؟
npm فقط پروکسی HTTP را قبول میکند. اگر برنامهٔ شما هر دو پورت را باز میکند، پورت HTTP را بدهید.
بعد از تنظیم پروکسی، docker pull هنوز خطا میدهد. چرا؟
تنظیم داکر باید در سطح سرویس (systemd) انجام شود و سپس daemon-reload و restart اجرا شود.