نصب و راهاندازی
استقرار با 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دارند، پس همزمان فقط یکی را میتوانید با این نام فعال کنید. صفحهٔ چند نمونه را ببینید.