SSD Nodes Learn Hosting plans →
راهنماها Matt Connorتوسط Matt Connor · به‌روزرسانی شده 2026-10-20

راهنمای راه‌اندازی استک Arr در یک فایل Docker Compose

با استفاده از یک فایل Docker Compose، سرویس‌های Prowlarr، Sonarr، Radarr و qBittorrent را روی VPS اجرا کنید. تنظیمات صحیح PUID، PGID و Volume برای عملکرد هاردلینک‌ها ضروری است.

آنچه در حال ساخت آن هستید

یک استک arr در Docker Compose شامل چهار کانتینر است که یک کتابخانه رسانه‌ای را مدیریت می‌کنند: Prowlarr برای تنظیمات ایندکسرها، Sonarr برای سریال‌ها، Radarr برای فیلم‌ها و qBittorrent به عنوان کلاینت دانلود. این سرویس‌ها از طریق نام سرویس در شبکه Compose با یکدیگر ارتباط برقرار می‌کنند و یک ساختار درختی از پوشه‌ها را روی میزبان (host) به اشتراک می‌گذارند. نصب این مجموعه کوتاه است. بخشی که تعیین می‌کند آیا این استک سال‌ها بدون مشکل کار می‌کند یا هر هفته برای شما دردسر ایجاد می‌کند، نحوه چیدمان volumeها است؛ بنابراین بخش عمده‌ای از این راهنما به همین موضوع اختصاص دارد.

این استک محتوا را برای شما پیدا نمی‌کند. Prowlarr تنها ایندکسرهایی را که خودتان به آن اضافه می‌کنید نگه می‌دارد و انتخاب ایندکسرها و مسئولیت قانونی استفاده از آن‌ها بر عهده شماست. این راهنما به زیرساخت‌ها می‌پردازد: کاربران، مسیرها، مجوزها، شبکه‌بندی کانتینرها و بررسی‌هایی که صحت عملکرد سیستم را تأیید می‌کنند.

اگر تا به حال فایل Compose ننوشته‌اید، ابتدا مبانی Docker Compose برای VPS را مطالعه کنید. این مطلب فرض را بر این می‌گذارد که docker compose version هم‌اکنون خروجی معتبری در سرور شما نمایش می‌دهد.

چرا هاردلینک‌ها از کار می‌افتند و چرا این موضوع اهمیت حیاتی دارد

وقتی Sonarr کار دانلود را به پایان می‌رساند، فایل را به کتابخانه شما منتقل (import) می‌کند. اگر پوشه دانلود و پوشه کتابخانه روی یک فایل‌سیستم یکسان باشند، این انتقال به صورت یک هاردلینک انجام می‌شود: نام دومی که به همان داده‌های روی دیسک اشاره می‌کند. این کار هیچ فضای اضافی اشغال نمی‌کند و زمان‌بر نیست. تورنت همچنان از نام قدیمی به seeding ادامه می‌دهد، در حالی که مدیا سرور شما فایل را از نام جدید می‌خواند.

اگر این دو پوشه روی فایل‌سیستم‌های متفاوتی باشند، کرنل نمی‌تواند آن لینک را ایجاد کند. در این حالت Sonarr به کپی کردن فایل روی می‌آورد. یک فصل سریال با حجم 40 GB حالا 80 GB از دیسک را اشغال می‌کند و چندین دقیقه عملیات ورودی و خروجی (I/O) صرف آن می‌شود؛ لاگ انتقال نیز ثبت می‌کند که هاردلینک ناموفق بوده و فایل به جای آن کپی شده است. در یک VPS با فضای دیسک محدود، این همان دلیلی است که باعث می‌شود کاربران در عرض یک هفته با کمبود فضا مواجه شوند.

تله اصلی اینجاست. داخل یک کانتینر، یک bind mount یک مرز فایل‌سیستمی محسوب می‌شود. اگر /mnt/data/torrents را به عنوان /downloads و /mnt/data/media را به عنوان /tv مانت کنید، با وجود اینکه هر دو روی یک دیسک میزبان قرار دارند، Sonarr آن‌ها را دو مانت مجزا می‌بیند و از ایجاد لینک بین آن‌ها خودداری می‌کند. مستندات رسمی ایمیج LinuxServer.io مستقیماً به این موضوع اشاره دارد: استفاده از مسیرهای جداگانه /downloads و /tv باعث از دست رفتن قابلیت هاردلینک می‌شود.

راه حل، استفاده از یک مانت واحد است. هر کانتینری که با فایل‌های مدیا سروکار دارد باید همان volume واحد یعنی /mnt/data:/data را دریافت کند و تمام مسیرهایی که استفاده می‌کنند، پوشه‌هایی در دل همان volume باشند. یک نقطه مانت، یک فایل‌سیستم، و هاردلینک‌های فعال.

ایجاد کاربر، گروه و پوشه‌ها

کانتینرها فایل‌ها را با یک شناسه کاربری عددی می‌نویسند که توسط PUID و PGID تعیین می‌شود. از حساب کاربری خود استفاده کنید تا بتوانید بدون نیاز به sudo، آن فایل‌ها را از طریق SSH بخوانید و ویرایش کنید.

id -u
id -g

هر دو معمولاً در یک VPS تازه با سیستم‌عامل Ubuntu مقدار 1000 را نمایش می‌دهند. اکنون ساختار درختی را ایجاد کنید. آن را روی هر دیسکی که رسانه‌های شما را در خود جای داده است قرار دهید و کل این ساختار را روی همان یک دیسک نگه دارید.

sudo mkdir -p /mnt/data/torrents/movies /mnt/data/torrents/tv
sudo mkdir -p /mnt/data/media/Movies /mnt/data/media/Shows
sudo chown -R 1000:1000 /mnt/data
sudo chmod -R 775 /mnt/data

پیش از ادامه، بررسی کنید که آیا واقعاً روی یک فایل‌سیستم قرار دارند یا خیر:

df --output=source,target /mnt/data/torrents /mnt/data/media

هر دو خط باید دستگاه منبع یکسانی را نشان دهند. وجود دو دستگاه متفاوت به این معنی است که hardlinkها هرگز کار نخواهند کرد، فارغ از اینکه در پیکربندی کانتینر چه چیزی تنظیم کرده باشید.

پوشه‌های کتابخانه به عمد Movies و Shows نام‌گذاری شده‌اند. اگر قبلاً Jellyfin را به عنوان سرور رسانه خود اجرا کرده‌اید، /mnt/data/media را در Jellyfin به عنوان /media مونت کنید تا کتابخانه‌های آن دقیقاً در /media/Movies و /media/Shows قرار بگیرند، یعنی همان‌جایی که آن راهنما تعیین کرده است.

فایل محیطی (Environment file)

مقادیری را که در هر سرور تغییر می‌کنند، در .env و در کنار فایل Compose نگه دارید.

mkdir -p ~/arr && cd ~/arr

فایل ~/arr/.env را بنویسید:

PUID=1000
PGID=1000
TZ=Etc/UTC
DATA_ROOT=/mnt/data

مقدار TZ را روی منطقه زمانی خود تنظیم کنید، مانند Europe/Berlin. برنامه‌های arr وظایف را زمان‌بندی کرده و خطوط لاگ را با آن منطقه زمانی ثبت می‌کنند؛ بنابراین مقدار اشتباه باعث می‌شود که بررسی لاگ‌ها در آینده گیج‌کننده باشد.

فایل Compose

عبارت ~/arr/docker-compose.yml را بنویسید:

services:
  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ./config/prowlarr:/config
    ports:
      - 127.0.0.1:9696:9696
    restart: unless-stopped

  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ./config/sonarr:/config
      - ${DATA_ROOT}:/data
    ports:
      - 127.0.0.1:8989:8989
    restart: unless-stopped

  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ./config/radarr:/config
      - ${DATA_ROOT}:/data
    ports:
      - 127.0.0.1:7878:7878
    restart: unless-stopped

  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
      - WEBUI_PORT=8080
      - TORRENTING_PORT=6881
    volumes:
      - ./config/qbittorrent:/config
      - ${DATA_ROOT}:/data
    ports:
      - 127.0.0.1:8080:8080
      - 6881:6881
      - 6881:6881/udp
    stop_grace_period: "10s"
    restart: unless-stopped

چهار مورد در این فایل وظیفه اصلی را بر عهده دارند.

عبارت ${DATA_ROOT}:/data در هر سه کانتینری که با فایل‌های رسانه‌ای در ارتباط هستند، یکسان است. Prowlarr این بخش را دریافت نمی‌کند، زیرا Prowlarr هرگز فایل رسانه‌ای را باز نمی‌کند.

تمام پورت‌های وب به 127.0.0.1 متصل شده‌اند، بنابراین Docker آن‌ها را فقط روی آدرس loopback منتشر می‌کند. یک 8989:8989 ساده، آن‌ها را روی تمام رابط‌های شبکه منتشر می‌کند و قوانین فایروال خودِ Docker، ترافیک را مستقیماً از کنار قوانین ufw deny عبور می‌دهد. این رفتار همواره کاربران را غافلگیر می‌کند و در دلیل انتشار پورت‌ها توسط Docker بدون توجه به ufw توضیح داده شده است.

پورت 6881 عمداً روی تمام رابط‌ها منتشر می‌شود. این پورتِ گوش‌دهنده برای تورنت است و باید برای اتصالات ورودی همتایان (peers) در دسترس باشد. همان رفتار Docker در اینجا نیز صدق می‌کند، بنابراین نیازی به قانون ufw برای آن ندارید و افزودن آن تغییری ایجاد نمی‌کند. مستندات Docker که در اکتبر 2026 بررسی شد، بیان می‌کند که ترافیکِ پورت‌های منتشرشده، پیش از رسیدن به زنجیره‌های مورد استفاده توسط ufw مسیریابی می‌شود، بنابراین sudo ufw allow 6881 هیچ تأثیری بر این پورت ندارد. به محض شروع کانتینر، این پورت از اینترنت قابل دسترسی است و یک deny در ufw نیز آن را نمی‌بندد. اگر زمانی نیاز داشتید محدود کنید چه کسی می‌تواند به آن متصل شود، مستندات Docker به جای ufw، استفاده از قوانین در زنجیره DOCKER-USER خود را پیشنهاد می‌دهد. از ufw برای سرویس‌هایی که در Docker اجرا نمی‌شوند (مانند SSH) استفاده کنید و اگر با این ابزار آشنا نیستید، اصول فایروال ufw برای VPS را مطالعه کنید.

دایرکتوری‌های پیکربندی برای هر برنامه جداگانه هستند و فقط volume رسانه‌ای به اشتراک گذاشته شده است. آن‌ها را پیش از اولین اجرا ایجاد کنید تا مالکیت آن‌ها به جای root، در اختیار کاربر خودتان باشد:

mkdir -p ~/arr/config/prowlarr ~/arr/config/sonarr ~/arr/config/radarr ~/arr/config/qbittorrent
docker compose up -d
docker compose ps

هر چهار سرویس باید running را بخوانند. تا اکتبر 2026، این ایمیج‌ها در lscr.io منتشر می‌شوند و تگ latest از نسخه پایدار فعلی پیروی می‌کند؛ بنابراین اگر می‌خواهید ارتقاها یک تصمیم آگاهانه باشند و نه یک غافلگیری، از یک تگ نسخه ثابت (pin) استفاده کنید.

دسترسی ایمن به رابط‌های وب

از آنجا که پورت‌ها روی loopback قرار دارند، هنوز هیچ‌چیز در معرض دید نیست. آن‌ها را از طریق SSH از ماشین خود به سرور فوروارد کنید:

ssh -L 9696:127.0.0.1:9696 -L 8989:127.0.0.1:8989 \
    -L 7878:127.0.0.1:7878 -L 8080:127.0.0.1:8080 you@your-server

اکنون http://127.0.0.1:8989 در مرورگر شما به Sonarr روی سرور دسترسی پیدا می‌کند. برای دسترسی دائمی، این stack را پشت Traefik با گواهی‌های TLS برای چندین برنامه قرار دهید، یا از طریق یک VPN از نوع WireGuard که خودتان میزبانی می‌کنید به سرور متصل شوید. البته VPN به‌تنهایی به این پورت‌ها دسترسی ندارد. مستندات Docker که در اکتبر 2026 بررسی شد، می‌گوید وقتی پورتی روی آدرس localhost منتشر می‌شود، فقط میزبان Docker می‌تواند به آن دسترسی داشته باشد. برای استفاده از VPN، یا تونل SSH را از طریق آن اجرا کنید، یا bindingها را در فایل Compose از 127.0.0.1 به آدرس سرور روی اینترفیس VPN تغییر دهید. هیچ‌کدام از این برنامه‌ها نباید تنها با تکیه بر صفحه ورود خودشان، مستقیماً روی اینترنت عمومی قرار بگیرند. اگر مسیر reverse proxy را انتخاب کردید و ترجیح می‌دهید به‌جای مدیریت چهار ورود جداگانه برای برنامه‌ها، یک حساب کاربری برای هر چهار رابط داشته باشید، Authentik یک سیستم Single Sign-On خودمیزبان ارائه می‌دهد که Traefik می‌تواند آن را روی هر درخواست با استفاده از forward auth اعمال کند.

برنامه qBittorrent در اولین اجرا یک رمز عبور تصادفی برای مدیر تولید کرده و آن را در لاگ container چاپ می‌کند. آن را بخوانید و سپس در رابط وب تغییر دهید:

docker compose logs qbittorrent | grep -i password

اگر این تغییر را انجام ندهید، با هر بار راه‌اندازی مجدد، یک رمز عبور تصادفی جدید تولید می‌شود و هر بار مجبور خواهید بود به لاگ‌ها مراجعه کنید.

تنظیم مسیرها در هر برنامه

در qBittorrent، به بخش Options و سپس Downloads بروید و مسیر پیش‌فرض ذخیره‌سازی را روی /data/torrents تنظیم کنید. پوشه دانلودهای ناقص (incomplete-downloads) را در همان شاخه نگه دارید، مثلاً در /data/torrents/incomplete. دانلودی که در جایی خارج از /data به پایان برسد، نمی‌تواند به صورت hardlink در کتابخانه قرار گیرد.

در Sonarr، به بخش Settings و سپس Media Management بروید و پوشه ریشه (root folder) را به صورت /data/media/Shows اضافه کنید. در Radarr، پوشه ریشه /data/media/Movies است. این‌ها مسیرهایی در داخل container هستند. مسیر میزبان (host path) یعنی /mnt/data/media/Shows رد می‌شود، زیرا آن دایرکتوری از دیدگاه container وجود ندارد.

در هر دو برنامه Sonarr و Radarr، به بخش Settings و سپس Download Clients بروید و qBittorrent را اضافه کنید. میزبان (host) برابر با qbittorrent و پورت برابر با 8080 است. نام سرویس به عنوان hostname عمل می‌کند، زیرا Compose هر چهار container را در یک شبکه با سرویس DNS (سیستم نام دامنه) داخلی قرار می‌دهد. در اینجا از localhost استفاده نکنید: در داخل container مربوط به Sonarr، عبارت localhost همان Sonarr است.

بخش Remote Path Mappings را خالی بگذارید. این قابلیت برای ترجمه مسیری که کلاینت دانلود گزارش می‌دهد به مسیری که برنامه arr می‌تواند ببیند، وجود دارد. با داشتن یک mount مشترک در /data، هر دو container از قبل روی تمام مسیرها توافق دارند؛ این دومین دلیلی است که این ساختار ارزش صرف وقت را دارد.

اتصال Prowlarr به Sonarr و Radarr

نرم‌افزار Prowlarr تعاریف ایندکسرها را به سایر برنامه‌ها ارسال می‌کند، بنابراین شما به جای دو بار، فقط یک بار ایندکسر را پیکربندی می‌کنید. این کار نیازمند یک API (رابط برنامه‌نویسی اپلیکیشن) key از هر برنامه است.

در Sonarr، بخش Settings و سپس General را باز کرده و API key را کپی کنید. در Prowlarr، بخش Settings و سپس Apps را باز کنید، یک اپلیکیشن Sonarr اضافه کرده و سه فیلد را پر کنید. Prowlarr Server برابر با http://prowlarr:9696 است. Sonarr Server برابر با http://sonarr:8989 است. API Key همان مقداری است که کپی کردید. دکمه Test را بزنید. نتیجه سبز به این معنی است که Prowlarr از طریق شبکه Compose به Sonarr دسترسی پیدا کرده است. این مراحل را برای Radarr در http://radarr:7878 تکرار کنید.

نتیجه قرمز با پیام connection was refused تقریباً همیشه به معنای نام سرویس اشتباه یا نبود پیشوند http:// است. بررسی کنید که نام سرویس از داخل کانتینر resolve می‌شود یا خیر:

docker compose exec prowlarr curl -sS -o /dev/null -w '%{http_code}\n' http://sonarr:8989

یک کد وضعیت HTTP ثابت می‌کند که مسیر شبکه مشکلی ندارد. خطای name resolution ثابت می‌کند که نام سرویس اشتباه است.

تا زمانی که تعداد لینک‌ها (link count) را مشاهده نکرده‌اید، به تنظیمات اعتماد نکنید. پس از وارد کردن یک آیتم، فایل دانلود شده را با فایل موجود در کتابخانه مقایسه کنید:

stat -c '%i %h %n' /mnt/data/torrents/tv/*/*.mkv
stat -c '%i %h %n' /mnt/data/media/Shows/*/*/*.mkv

عدد اول inode و عدد دوم تعداد لینک‌ها است. فایلی که hardlink شده باشد، inode یکسانی را در هر دو مکان نشان می‌دهد و تعداد لینک آن 2 است. وجود دو inode متفاوت که هر کدام تعداد لینک 1 دارند، به این معنی است که Sonarr فایل را کپی کرده است و لاگ وارد کردن (import log) نیز عدم موفقیت در ایجاد hardlink را گزارش خواهد کرد.

همچنین وضعیت دیسک را زیر نظر بگیرید. هنگام انجام عملیات import، مقدار df -h /mnt/data نباید تغییر محسوسی داشته باشد، زیرا hardlink فقط یک نام جدید اضافه می‌کند و هیچ داده‌ای را جابه‌جا نمی‌کند.

چه چیزی واقعاً باعث خرابی می‌شود

خطاهای مجوز در هنگام import به این معناست که شناسه کاربری (user id) کانتینر نمی‌تواند در پوشه library بنویسد. پیام خطا Access to the path ... is denied است. با دستور ls -ln /mnt/data/media بررسی کنید که شناسه مالک با PUID شما مطابقت داشته باشد و به یاد داشته باشید که دایرکتوری‌ها پیش از آنکه کانتینر بتواند وارد آن‌ها شود، به بیت execute نیاز دارند.

فایل‌هایی که به نظر می‌رسد مالک آن‌ها root است، به این معناست که کانتینر پیش از ایجاد دایرکتوری در میزبان (host) شروع به کار کرده است، بنابراین Docker آن را با دسترسی root ایجاد کرده است. stack را متوقف کنید، دایرکتوری را chown کنید و دوباره آن را استارت بزنید.

حذف یک torrent از qBittorrent و مشاهده اینکه فایل library از بین رفته است، به این معناست که import به صورت کپی انجام شده و بعداً حذف شده است، یا اینکه شما به جای حذف ورودی torrent، داده‌ها را پاک کرده‌اید. با استفاده از hardlink واقعی، حذف یک نام، نام دیگر را دست‌نخورده باقی می‌گذارد، زیرا داده‌ها تنها زمانی آزاد می‌شوند که تعداد لینک‌ها به صفر برسد.

پر شدن دیسک با سرعتی بیش از رسانه‌ای که اضافه کرده‌اید، همان مشکل کپی در گران‌ترین حالت خود است. پیش از خرید فضای ذخیره‌سازی بیشتر، بررسی stat ذکر شده در بالا را اجرا کنید.

نیازهای این پشته از یک VPS

سه برنامه arr سبک هستند. آن‌ها ایندکسرها را بررسی (poll) می‌کنند، در یک دیتابیس کوچک SQLite می‌نویسند و نام فایل‌ها را تغییر می‌دهند. سروری با 2 GB رم، هر چهار کانتینر را به‌راحتی اجرا می‌کند. بار پردازشی از جای دیگری می‌آید. یک کلاینت دانلود، ورودی و خروجی دیسک را در تورنت‌های حجیم اشباع می‌کند و یک مدیا سرور که در حال transcoding ویدیو روی همان دستگاه باشد، CPU را درگیر خواهد کرد. رسانه‌ها را روی یک volume با throughput واقعی نگه دارید و اگر سرور کار دیگری انجام می‌دهد که برایتان مهم است، برای کلاینت دانلود محدودیت پهنای باند تعیین کنید. بودجهٔ منابع را برای آن کارهای دیگر به‌صورت جداگانه در نظر بگیرید و فرض نکنید که فضای خالی کافی وجود دارد: یک فضای کاری AFFiNE خودمیزبان شامل چهار کانتینر دیگر به همراه یک دیتابیس در پشت آن‌هاست و روی یک دستگاه 2 GB، بخش عمدهٔ آن حافظه را برای خود می‌خواهد. هر سرویس اضافه‌ای این‌قدر هزینه ندارد: چیزی با هدف واحد مانند یک ردیاب تمرین openGym خودمیزبان به‌خوبی با دستگاه اشتراک می‌شود، به شرطی که TLS اختصاصی خودش را به آن بدهید و پیش از آنکه یک سال تاریخچهٔ تمرینات خود را به آن بسپارید، بدانید فایل دیتابیس آن کجا قرار دارد. هر چیزی که شامل یک وب‌اپلیکیشن، دیتابیس Postgres و صف پردازش پس‌زمینه باشد، به محدودهٔ AFFiNE نزدیک‌تر است؛ بنابراین پیش از آنکه در میانهٔ یک import به محدودیت منابع برسید، تصمیم بگیرید که آیا یک میز پشتیبانی Chatwoot خودمیزبان باید روی این سرور باشد یا روی سرور خودش. بارهای کاری ناگهانی (Bursty) به احتیاط بیشتری نیاز دارند، زیرا اوج مصرف آن‌ها—نه میانگین مصرفشان—است که با یک عملیات import تداخل پیدا می‌کند: اگر در حال بررسی یک OneCLI خودمیزبان هستید که به هر نفر یک agent ایزوله می‌دهد، اعداد اندازه‌گیری‌شدهٔ منتشرشده برای آن را با آنچه در زمان فعالیت حداکثری qBittorrent واقعاً آزاد است مقایسه کنید، نه با آنچه free -h در یک دستگاه بیکار (idle) نشان می‌دهد.

FAQ

چرا Sonarr به جای هاردلینک کردن، فایل‌ها را کپی می‌کند؟

زیرا از دیدگاه کانتینر، مبدأ و مقصد روی فایل‌سیستم‌های متفاوتی قرار دارند. دو bind mount مجزا، مانند /downloads و /tv، حتی اگر هر دو از یک دیسک میزبان آمده باشند، دو فایل‌سیستم محسوب می‌شوند. یک دایرکتوری والد واحد را به عنوان /data در هر کانتینر mount کنید، پوشه‌های دانلود و کتابخانه را درون آن قرار دهید تا امکان ایجاد لینک فراهم شود. نتیجه را با دستور stat -c '%i %h %n' روی هر دو فایل تأیید کنید: باید inode یکسان و تعداد لینک 2 را مشاهده کنید.

از چه PUID و PGID باید استفاده کنم؟

از شناسه عددی (numeric ID) حساب کاربری میزبان که مالک درخت رسانه‌ها (media tree) است استفاده کنید؛ این شناسه را می‌توانید با دستورات id -u و id -g به دست آورید. در یک VPS تازه با توزیع Ubuntu، این مقدار معمولاً برای هر دو 1000 است. تمام کانتینرهای موجود در stack باید از جفت یکسانی استفاده کنند، در غیر این صورت یک برنامه فایل‌هایی را می‌نویسد که برنامه دیگر قادر به تغییر آن‌ها نیست. پس از تغییر مقادیر، کانتینرها را با docker compose up -d --force-recreate بازسازی کنید و فایل‌های موجود را با chown -R اصلاح نمایید.

آیا نیاز است این رابط‌های وب را در معرض اینترنت قرار دهم؟

خیر، و نباید این کار را انجام دهید. هر پورت منتشرشده را در فایل Compose به 127.0.0.1 متصل (bind) کنید، سپس از طریق یک تونل SSH یا یک reverse proxy روی سرور که TLS (امنیت لایه انتقال) را خاتمه می‌دهد و احراز هویت اختصاصی خود را اضافه می‌کند، به رابط‌ها دسترسی پیدا کنید. یک VPN به تنهایی نمی‌تواند به پورتی که به 127.0.0.1 متصل شده دسترسی یابد، زیرا Docker آن را فقط از خودِ میزبان قابل دسترس می‌کند. اگر دسترسی مستقیم از طریق VPN می‌خواهید، پورت‌ها را روی آدرس VPN سرور منتشر کنید. انتشار مستقیم آن‌ها روی اینترفیس عمومی از آنچه به نظر می‌رسد خطرناک‌تر است، زیرا Docker قوانین فایروال خاص خود را تزریق می‌کند و یک قانون deny در ufw مانع آن ترافیک نخواهد شد.

رمز عبور qBittorrent را کجا پیدا کنم؟

ایمیج LinuxServer.io یک رمز عبور موقت برای کاربر admin در لاگ راه‌اندازی خود چاپ می‌کند. برای خواندن آن دستور docker compose logs qbittorrent | grep -i password را اجرا کنید، سپس یک رمز عبور دائمی در بخش Options و Web UI تنظیم نمایید. تا زمانی که رمز عبور خود را تنظیم نکنید، با هر بار راه‌اندازی مجدد، یک رمز موقت جدید تولید می‌شود.

آیا Jellyfin می‌تواند از همان پوشه‌ها استفاده کند؟

بله، و هدف از این ساختار همین است. مسیر /mnt/data/media را به عنوان /media در سرور رسانه خود mount کنید؛ کتابخانه‌های آن در /media/Movies و /media/Shows قرار می‌گیرند، در حالی که Sonarr و Radarr از طریق /data/media در همان دایرکتوری‌ها می‌نویسند. به سرور رسانه همان PUID و PGID را اختصاص دهید تا بتواند آنچه را که stack برنامه‌های arr می‌نویسد، بخواند.

آیا این مقاله مفید بود؟

#sonarr#radarr#prowlarr#docker-compose#self-hosting