نصب و راه‌اندازی

استقرار با VPN (Gluetun)

عبور دادن همهٔ ترافیک ربات و تونل Cloudflare از یک VPN با سرویس Gluetun در docker-compose.yml.

اگر می‌خواهید همهٔ ترافیک ربات (دانلودها، اتصال به تلگرام و حتی تونل Cloudflare) از یک VPN عبور کند، docker-compose.yml یک سرویس آماده و کامنت‌شده برای Gluetun دارد. Gluetun یک کانتینر کلاینت VPN است که با بسیاری از سرویس‌دهنده‌های VPN، با OpenVPN یا WireGuard کار می‌کند.

ایدهٔ کار ساده است: کانتینر app شبکهٔ خودش را ندارد و از شبکهٔ کانتینر gluetun استفاده می‌کند. کانتینر tunnel هم از قبل با network_mode: "service:app" به شبکهٔ app وصل است، پس آن هم از همان VPN رد می‌شود.

پیش از شروع، روش استقرار روی VPS را بخوانید؛ این صفحه فقط تفاوت‌ها را توضیح می‌دهد.

۱. فعال کردن سرویس gluetun

در docker-compose.yml، بلوک اول gluetun (بالای سرویس app) را از حالت کامنت خارج کنید:

  gluetun:
    image: qmcgaw/gluetun:latest
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    environment:
      - VPN_SERVICE_PROVIDER=
      - VPN_TYPE=
      # OpenVPN
      - OPENVPN_USER=
      - OPENVPN_PASSWORD=
      # Wireguard
      - WIREGUARD_PRIVATE_KEY=
      - WIREGUARD_ADDRESS=
      - WIREGUARD_PUBLIC_KEY=
      - TZ=Asia/Kolkata
      - UPDATER_PERIOD=24h
    ports:
      - "8080:8080"
      - "8081:8081"
    restart: on-failure

Gluetun برای ساختن اتصال VPN به قابلیت NET_ADMIN و دستگاه /dev/net/tun روی سرور نیاز دارد.

۲. وارد کردن اطلاعات سرویس VPN

مقادیر خالی را با اطلاعات سرویس‌دهندهٔ VPN خودتان پر کنید:

متغیرتوضیح
VPN_SERVICE_PROVIDERنام سرویس‌دهندهٔ VPN، به همان شکلی که Gluetun می‌شناسد.
VPN_TYPEنوع اتصال: OpenVPN یا WireGuard.
OPENVPN_USER و OPENVPN_PASSWORDفقط برای OpenVPN.
WIREGUARD_PRIVATE_KEY، WIREGUARD_ADDRESS و WIREGUARD_PUBLIC_KEYفقط برای WireGuard.
TZمنطقهٔ زمانی کانتینر؛ در فایل نمونه Asia/Kolkata است و می‌توانید آن را عوض کنید (مثلاً Asia/Tehran).
UPDATER_PERIODفاصلهٔ به‌روزرسانی فهرست سرورهای Gluetun؛ در نمونه 24h.

مقدارهای دقیق هر سرویس‌دهنده (و متغیرهای اضافه‌ای که ممکن است لازم داشته باشد) را در ویکی Gluetun پیدا کنید. فقط متغیرهای مربوط به نوع اتصال خودتان را نگه دارید.

۳. وصل کردن app به شبکهٔ gluetun

در سرویس app، خط network_mode را اضافه کنید:

  app:
    build: .
    command: bash start.sh
    restart: unless-stopped
    network_mode: "service:gluetun"
    volumes:
      - ./config.py:/usr/src/app/config.py:ro
      - ./accounts:/usr/src/app/accounts
      - ./downloads:/usr/src/app/downloads
      - tunnel_data:/data:ro

در این حالت پورت‌ها روی سرویس gluetun تعریف می‌شوند، نه روی app؛ به همین دلیل در نمونهٔ بالا بخش expose حذف شده است. Docker تعریف پورت برای کانتینری را که از شبکهٔ کانتینر دیگری استفاده می‌کند نمی‌پذیرد.

سرویس tunnel را تغییر ندهید؛ همان network_mode: "service:app" کافی است.

۴. اجرا

docker compose up -d --build

بعد از اجرا، لاگ Gluetun را ببینید تا مطمئن شوید اتصال VPN برقرار شده است:

docker compose logs gluetun

آدرس تونل را مثل قبل با docker compose logs tunnel پیدا کنید.

نکته‌ها

  • طبق README.md، با این تنظیم همهٔ ترافیک، از جمله تونل cloudflared، از VPN عبور می‌کند.
  • بخش ports سرویس gluetun پورت‌های 8080 (رابط وب) و 8081 (پیش‌فرض rclone serve) را روی سرور منتشر می‌کند؛ یعنی رابط وب از آدرس IP سرور هم در دسترس خواهد بود. تونل برای کار کردن به این پورت‌ها نیاز ندارد، چون از داخل همان شبکه به localhost:8080 وصل می‌شود؛ اگر دسترسی مستقیم نمی‌خواهید، می‌توانید این بخش را حذف کنید.
  • اگر Gluetun متوقف شود، app و tunnel هم ارتباط شبکه‌شان را از دست می‌دهند. سیاست ری‌استارت Gluetun در نمونه on-failure است.
  • برای اجرای ربات دوم پشت VPN، docker-compose.yml یک بلوک کامنت‌شدهٔ دیگر برای gluetun در بخش نمونهٔ دوم دارد. هر دو بلوک نام سرویس gluetun و container_name: gluetun دارند، پس هم‌زمان فقط یکی را می‌توانید با این نام فعال کنید. صفحهٔ چند نمونه را ببینید.

مثلاً LEECH_SPLIT_SIZE، /mirror، -up یا «تامبنیل»