Docker Compose-ல் Prowlarr, Sonarr, Radarr அமைப்பது எப்படி
ஒரே Docker Compose கோப்பில் Prowlarr, Sonarr, Radarr மற்றும் qBittorrent ஆகியவற்றை நிறுவுவது எப்படி? Hardlinks வேலை செய்ய தேவையான PUID, PGID மற்றும் volume layout முறைகளை அறிக.
நீங்கள் உருவாக்குவது
Docker Compose arr stack என்பது media library-ஐ நிர்வகிக்கும் நான்கு containers-ஐக் கொண்டது: indexer அமைப்புகளுக்காக Prowlarr, தொடர்களுக்காக (series) Sonarr, திரைப்படங்களுக்காக Radarr, மற்றும் download client-ஆக qBittorrent. இவை Compose network வழியாக service name மூலம் ஒன்றோடொன்று தொடர்புகொள்கின்றன, மேலும் host-ல் உள்ள ஒரே folder tree-ஐப் பகிர்ந்து கொள்கின்றன. இதன் நிறுவல் எளிதானது. இந்த stack பல ஆண்டுகள் சீராக இயங்குமா அல்லது வாரந்தோறும் சிக்கல்களைத் தருமா என்பதைத் தீர்மானிப்பது volume layout தான், எனவே இந்த வழிகாட்டியின் பெரும்பகுதி அதைப் பற்றியதே.
இந்த stack உங்களுக்காக உள்ளடக்கத்தைத் தேடித் தராது. நீங்கள் சேர்க்கும் indexer-களை மட்டுமே Prowlarr வைத்திருக்கும்; எந்த indexer-களைப் பயன்படுத்த வேண்டும் என்பது உங்கள் முடிவு மற்றும் உங்கள் சட்டப்பூர்வப் பொறுப்பு. இந்த வழிகாட்டி plumbing எனப்படும் அடிப்படை அமைப்புகளைப் பற்றியது: பயனர்கள், paths, அனுமதிகள், container networking, மற்றும் அது சரியாக இயங்குவதை உறுதிப்படுத்தும் சோதனைகள்.
நீங்கள் இதுவரை ஒரு Compose file-ஐ எழுதியதில்லை என்றால், முதலில் the Docker Compose basics for a VPS-ஐப் படிக்கவும். இந்த இடுகை, உங்கள் server-ல் docker compose version ஏற்கனவே இயங்குகிறது என்று கருதுகிறது.
Hardlinks ஏன் செயலிழக்கின்றன மற்றும் அது ஏன் மிக முக்கியமானது
Sonarr ஒரு பதிவிறக்கத்தை முடித்ததும், அந்த கோப்பை உங்கள் library-க்குள் இறக்குமதி செய்கிறது. பதிவிறக்க கோப்புறையும் (download folder) library கோப்புறையும் ஒரே filesystem-ல் இருந்தால், அந்த இறக்குமதி ஒரு hardlink ஆக அமையும்: இது வட்டில் உள்ள ஒரே தரவைச் சுட்டிக்காட்டும் இரண்டாவது பெயராகும். இதற்கு கூடுதல் இடமோ அல்லது நேரமோ தேவைப்படாது. உங்கள் media server புதிய கோப்பைப் படிக்கும் அதே வேளையில், torrent பழைய பெயரிலிருந்தே தொடர்ந்து seeding செய்யும்.
இந்த இரண்டு கோப்புறைகளும் வெவ்வேறு filesystem-களில் இருந்தால், kernel-ஆல் அந்த இணைப்பை உருவாக்க முடியாது. அப்போது Sonarr ஒரு நகலை (copy) உருவாக்குகிறது. இதனால் 40 GB அளவுள்ள ஒரு season இப்போது 80 GB வட்டு இடத்தைப் பிடிக்கும் மற்றும் கோப்புகளை நகலெடுக்க பல நிமிடங்கள் எடுக்கும். hardlink தோல்வியடைந்து கோப்பு நகலெடுக்கப்பட்டதை இறக்குமதி log பதிவு செய்யும். குறிப்பிட்ட அளவு வட்டு வசதி கொண்ட VPS-ல், இதுவே ஒரு வாரத்தில் வட்டு இடம் தீர்ந்துபோகக் காரணமாகிறது.
இங்கேதான் சிக்கல் உள்ளது. ஒரு container-க்குள், bind mount என்பது ஒரு filesystem எல்லையாகும். /mnt/data/torrents-ஐ /downloads ஆகவும், /mnt/data/media-ஐ /tv ஆகவும் mount செய்தால், அவை இரண்டும் ஒரே host வட்டில் இருந்தாலும், Sonarr அவற்றை இரண்டு தனித்தனி mount-களாகவே பார்க்கும் மற்றும் அவற்றுக்கிடையே link செய்ய மறுக்கும். அதிகாரப்பூர்வ LinuxServer.io image ஆவணங்கள் இதை நேரடியாகக் குறிப்பிடுகின்றன: தனித்தனி /downloads மற்றும் /tv பாதைகளைப் பயன்படுத்துவது hardlink செய்யும் திறனை இழக்கச் செய்யும்.
இதற்கான தீர்வு ஒரே ஒரு mount-ஐப் பயன்படுத்துவதாகும். media-வை அணுகும் ஒவ்வொரு container-க்கும் ஒரே volume-ஐ, அதாவது /mnt/data:/data-ஐ வழங்க வேண்டும். அவை பயன்படுத்தும் ஒவ்வொரு பாதையும் அதற்குள் இருக்கும் ஒரு கோப்புறையாக இருக்க வேண்டும். ஒரே ஒரு mount point, ஒரே ஒரு filesystem, இதுவே hardlinks சரியாகச் செயல்பட உதவும்.
பயனர், குழு மற்றும் கோப்புறைகளை உருவாக்குதல்
Containers கோப்புகளை ஒரு எண் சார்ந்த பயனர் அடையாளத்துடன் (numeric user id) எழுதுகின்றன, இது PUID மற்றும் PGID மூலம் அமைக்கப்படுகிறது. உங்கள் சொந்த கணக்கைப் பயன்படுத்தவும், அப்போதுதான் sudo தேவைப்படாமல் SSH வழியாக அந்த கோப்புகளை உங்களால் படிக்கவும் திருத்தவும் முடியும்.
id -u
id -gபுதிய Ubuntu VPS-ல் இவை இரண்டும் பொதுவாக 1000 என்று காட்டும். இப்போது கோப்பு கட்டமைப்பை (tree) உருவாக்கவும். உங்கள் மீடியா கோப்புகள் இருக்கும் வட்டில் இதை வைக்கவும், முழு கட்டமைப்பையும் அந்த ஒரே வட்டில் வைத்திருக்கவும்.
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மேலும் தொடர்வதற்கு முன், இது ஒரே கோப்பு முறைமை (filesystem) தானா என்பதைச் சரிபார்க்கவும்:
df --output=source,target /mnt/data/torrents /mnt/data/mediaஇரண்டு வரிகளும் ஒரே source சாதனத்தைக் காட்ட வேண்டும். இரண்டு வெவ்வேறு சாதனங்கள் இருந்தால், container அமைப்பில் நீங்கள் எதை அமைத்தாலும் hardlinks வேலை செய்யாது.
நூலகக் கோப்புறைகள் (library folders) வேண்டுமென்றே Movies மற்றும் Shows என்று பெயரிடப்பட்டுள்ளன. நீங்கள் ஏற்கனவே Jellyfin-ஐ உங்கள் மீடியா சர்வராக இயக்குகிறீர்கள் என்றால், /mnt/data/media-ஐ Jellyfin-ல் /media ஆக mount செய்யவும். அதன் நூலகங்கள் /media/Movies மற்றும் /media/Shows ஆகிய இடங்களில் அமையும், இது அந்த வழிகாட்டி குறிப்பிடும் அதே இடமாகும்.
Environment file
ஒவ்வொரு server-க்கும் மாறுபடும் மதிப்புகளை .env-ல், Compose file-க்கு அருகிலேயே வைத்திருக்கவும்.
mkdir -p ~/arr && cd ~/arr~/arr/.env-ஐ உருவாக்கவும்:
PUID=1000
PGID=1000
TZ=Etc/UTC
DATA_ROOT=/mnt/dataTZ-ஐ உங்கள் zone-க்கு ஏற்ப அமைக்கவும், உதாரணமாக Europe/Berlin. Arr applications அந்த zone-ல் தான் பணிகளைத் திட்டமிடுகின்றன மற்றும் log வரிகளைப் பதிவு செய்கின்றன, எனவே தவறான மதிப்பை அமைத்தால் பிற்காலத்தில் அனைத்து log-களையும் புரிந்துகொள்வது கடினமாகிவிடும்.
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அந்தக் கோப்பில் உள்ள நான்கு விஷயங்கள் உண்மையான பணிகளைச் செய்கின்றன.
மீடியா கோப்புகளை அணுகும் மூன்று container-களிலும் ${DATA_ROOT}:/data ஒரே மாதிரியாக இருக்கும். Prowlarr ஒருபோதும் மீடியா கோப்பைத் திறக்காது என்பதால், அதற்கு இது தேவையில்லை.
ஒவ்வொரு web port-ம் 127.0.0.1-உடன் இணைக்கப்பட்டுள்ளது, எனவே Docker அதை loopback முகவரியில் மட்டுமே வெளியிடுகிறது. ஒரு சாதாரண 8989:8989 அனைத்து interface-களிலும் அதை வெளியிடும், மேலும் Docker-ன் சொந்த firewall விதிகள் அந்த traffic-ஐ ufw deny விதியைக் கடந்து நேரடியாக அனுமதித்துவிடும். இந்தச் செயல்பாடு பயனர்களுக்கு எப்போதும் ஆச்சரியத்தைத் தருகிறது, இது Docker ஏன் ufw-ஐத் தாண்டி port-களை வெளியிடுகிறது என்பதில் விளக்கப்பட்டுள்ளது.
Port 6881 வேண்டுமென்றே அனைத்து interface-களிலும் வெளியிடப்படுகிறது. இது torrent listening port ஆகும், உள்வரும் peer இணைப்புகளுக்கு இது சென்றடையக்கூடியதாக இருக்க வேண்டும். sudo ufw allow 6881 மூலம் இதை அனுமதிக்கவும், இந்த command உங்களுக்குப் புதியது என்றால் VPS-க்கான ufw firewall அடிப்படைகள் என்பதைப் படிக்கவும்.
Config கோப்பகங்கள் ஒவ்வொரு application-க்கும் தனித்தனியாக உள்ளன, மீடியா volume மட்டும் பகிரப்படுகிறது. முதல்முறை தொடங்குவதற்கு முன்பே அவற்றை உருவாக்கவும், அப்போதுதான் அவை root-க்கு பதிலாக உங்கள் user-ன் உரிமையில் இருக்கும்:
mkdir -p ~/arr/config/prowlarr ~/arr/config/sonarr ~/arr/config/radarr ~/arr/config/qbittorrent
docker compose up -d
docker compose psநான்கு service-களும் running-ஐப் படிக்க வேண்டும். ஜூலை 2026 நிலவரப்படி, இந்த images lscr.io-ல் வெளியிடப்படுகின்றன மற்றும் latest tag தற்போதைய stable release-ஐப் பின்தொடர்கிறது. எனவே, மேம்படுத்தல்கள் தானாக நடப்பது உங்களுக்கு விருப்பமில்லை என்றால், ஒரு குறிப்பிட்ட version tag-ஐப் பயன்படுத்தவும்.
இணைய இடைமுகங்களை பாதுகாப்பாக அணுகுதல்
ports அனைத்தும் loopback-ல் இருப்பதால், இதுவரை எதுவும் பொதுவெளியில் வெளிப்படவில்லை. உங்கள் கணினியிலிருந்து SSH மூலம் அவற்றை forward செய்யவும்:
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இப்போது உங்கள் browser-ல் http://127.0.0.1:8989-ஐ உள்ளிட்டால், server-ல் உள்ள Sonarr-ஐ அணுகலாம். நிரந்தர அணுகலுக்கு, இந்த stack-ஐ பல செயலிகளுக்கான TLS certificates கொண்ட Traefik பின்னால் வைக்கவும், அல்லது நீங்கள் சொந்தமாக நடத்தும் WireGuard VPN மூலம் server-ஐ அணுகவும். இந்த செயலிகள் எதையும், அவற்றின் சொந்த login பக்கத்தை மட்டும் நம்பி பொது இணையத்தில் (public internet) வைக்கக்கூடாது. நீங்கள் reverse proxy முறையைத் தேர்ந்தெடுத்து, நான்கு தனித்தனி login-களை நிர்வகிப்பதற்குப் பதிலாக, அனைத்து நான்கு இடைமுகங்களுக்கும் ஒரே கணக்கைப் பயன்படுத்த விரும்பினால், Authentik மூலம் self-hosted single sign-on வசதியைப் பெறலாம்; இதை Traefik மூலம் ஒவ்வொரு கோரிக்கையிலும் forward auth ஆக அமல்படுத்த முடியும்.
qBittorrent முதல்முறை தொடங்கும்போது ஒரு random administrator password-ஐ உருவாக்கி, அதை container log-ல் பதிவிடும். அதை வாசித்து, பின் web interface-ல் மாற்றவும்:
docker compose logs qbittorrent | grep -i passwordஇந்த மாற்றத்தைச் செய்யத் தவறினால், ஒவ்வொரு முறை restart செய்யும்போதும் புதிய random password உருவாக்கப்படும், இதனால் ஒவ்வொரு முறையும் நீங்கள் logs-ஐப் பார்க்க வேண்டியிருக்கும்.
ஒவ்வொரு application-க்குள்ளும் பாதைகளை (paths) அமைத்தல்
qBittorrent-ல், Options என்பதைத் திறந்து, பின் Downloads என்பதைத் தேர்ந்தெடுக்கவும். இயல்புநிலை சேமிப்புப் பாதையை (default save path) /data/torrents என அமைக்கவும். முழுமையடையாத பதிவிறக்கங்களுக்கான (incomplete-downloads) கோப்புறையை அதே கட்டமைப்பிற்குள், உதாரணமாக /data/torrents/incomplete என வைத்திருக்கவும். /data-க்கு வெளியே எங்கு பதிவிறக்கம் முடிவடைந்தாலும், அதை library-க்குள் hardlink செய்ய முடியாது.
Sonarr-ல், Settings என்பதைத் திறந்து, பின் Media Management என்பதைத் தேர்ந்தெடுக்கவும். அங்கு root folder-ஆக /data/media/Shows என்பதைச் சேர்க்கவும். Radarr-ல் root folder என்பது /data/media/Movies ஆகும். இவை container-க்குள் இருக்கும் பாதைகள். host பாதையான /mnt/data/media/Shows நிராகரிக்கப்படும், ஏனெனில் container-ன் பார்வையில் அந்த directory இல்லை.
Sonarr மற்றும் Radarr ஆகிய இரண்டிலும், Settings என்பதைத் திறந்து, பின் Download Clients என்பதைத் தேர்ந்தெடுக்கவும். அங்கு qBittorrent-ஐச் சேர்க்கவும். host என்பது qbittorrent மற்றும் port என்பது 8080 ஆகும். Compose அனைத்து நான்கு container-களையும் ஒரே network-ல், internal DNS (domain name system) சேவையுடன் இணைப்பதால், service பெயர் hostname-ஆகச் செயல்படுகிறது. இங்கே localhost-ஐப் பயன்படுத்த வேண்டாம்: Sonarr container-க்குள், localhost என்பது Sonarr-ஐயே குறிக்கும்.
Remote Path Mappings-ஐ காலியாக விடவும். download client தெரிவிக்கும் பாதையை, arr application பார்க்கக்கூடிய பாதையாக மாற்றுவதே இந்த வசதியின் நோக்கம். ஒரே பகிரப்பட்ட /data mount இருப்பதால், இரண்டு container-களும் அனைத்துப் பாதைகளையும் ஒரே மாதிரியாகப் புரிந்துகொள்கின்றன. இந்த அமைப்பை உருவாக்குவதற்கு இதுவே இரண்டாவது முக்கியக் காரணமாகும்.
Prowlarr-ஐ Sonarr மற்றும் Radarr-உடன் இணைத்தல்
Prowlarr, indexer வரையறைகளை மற்ற applications-க்கு அனுப்புகிறது. எனவே, ஒரு indexer-ஐ இருமுறை உள்ளமைப்பதற்குப் பதிலாக, ஒருமுறை மட்டும் உள்ளமைத்தால் போதுமானது. இதற்கு ஒவ்வொரு application-லிருந்தும் ஒரு API (application programming interface) key தேவைப்படுகிறது.
Sonarr-ல், Settings-ஐத் திறந்து, பின் General-க்குச் சென்று, API key-ஐ நகலெடுக்கவும். Prowlarr-ல், Settings-ஐத் திறந்து, Apps-க்குச் சென்று, ஒரு Sonarr application-ஐச் சேர்க்கவும். பின்வரும் மூன்று புலங்களை நிரப்பவும். Prowlarr Server என்பது http://prowlarr:9696 ஆகும். Sonarr Server என்பது http://sonarr:8989 ஆகும். API Key என்பது நீங்கள் நகலெடுத்த மதிப்பு ஆகும். Test என்பதை அழுத்தவும். பச்சை நிற முடிவு, Prowlarr ஆனது Compose network வழியாக Sonarr-ஐ அடைந்துவிட்டது என்பதைக் குறிக்கிறது. Radarr-உடன் http://radarr:7878-ல் இதையே மீண்டும் செய்யவும்.
இணைப்பு மறுக்கப்பட்டதைக் குறிக்கும் சிவப்பு நிற முடிவு, பெரும்பாலும் தவறான service பெயர் அல்லது விடுபட்ட http:// முன்னொட்டைக் குறிக்கும். container-க்கு உள்ளிருந்து அந்தப் பெயர் சரியாகத் தீர்க்கப்படுகிறதா (resolve) என்பதை உறுதிப்படுத்தவும்:
docker compose exec prowlarr curl -sS -o /dev/null -w '%{http_code}\n' http://sonarr:8989ஒரு HTTP status code, network பாதை சரியாக இருப்பதற்கான ஆதாரமாகும். பெயர் தீர்க்கப்படாவிட்டால் (name resolution error), service பெயர் தவறானது என்று அர்த்தம்.
Hardlinks உண்மையில் செயல்படுவதை உறுதிப்படுத்துதல்
Link count-ஐ சரிபார்க்கும் வரை இந்த அமைப்பை முழுமையாக நம்ப வேண்டாம். ஒரு கோப்பு (item) import செய்யப்பட்ட பிறகு, தரவிறக்கம் செய்யப்பட்ட கோப்பையும் library கோப்பையும் ஒப்பிட்டுப் பார்க்கவும்:
stat -c '%i %h %n' /mnt/data/torrents/tv/*/*.mkv
stat -c '%i %h %n' /mnt/data/media/Shows/*/*/*.mkvமுதல் எண் inode-ஐயும், இரண்டாவது எண் link count-ஐயும் குறிக்கும். ஒரு கோப்பு hardlink செய்யப்பட்டிருந்தால், இரண்டு இடங்களிலும் ஒரே inode எண் இருக்கும் மற்றும் link count 2 என்று காட்டும். இரண்டு வெவ்வேறு inode-கள் மற்றும் ஒவ்வொன்றிற்கும் 1 என்ற link count இருந்தால், Sonarr கோப்பை நகல் (copy) எடுத்துள்ளது என்று அர்த்தம்; மேலும் import log-ல் hardlink தோல்வியடைந்ததாகக் குறிப்பிடப்பட்டிருக்கும்.
Disk பயன்பாட்டையும் கவனிக்கவும். Hardlink என்பது தரவை நகலெடுக்காமல் ஒரு பெயரை மட்டுமே சேர்ப்பதால், import நடக்கும்போது df -h /mnt/data அளவில் எந்த மாற்றமும் இருக்கக்கூடாது.
எது உண்மையில் செயலிழக்கிறது
Import செய்யும்போது ஏற்படும் Permission பிழைகள், container-ன் user id-ஆல் library folder-ல் எழுத முடியவில்லை என்பதைக் குறிக்கிறது. இதற்கான செய்தி Access to the path ... is denied ஆகும். ls -ln /mnt/data/media கட்டளையைப் பயன்படுத்தி, owner id உங்கள் PUID-உடன் ஒத்துப்போகிறதா என்பதைச் சரிபார்க்கவும். மேலும், ஒரு container அந்த directory-க்குள் நுழைவதற்கு, அதற்கு execute bit அவசியம் என்பதை நினைவில் கொள்ளவும்.
கோப்புகள் root-க்கு சொந்தமானதாகத் தோன்றினால், host directory உருவாவதற்கு முன்பே container தொடங்கிவிட்டது என்று அர்த்தம். இதனால் Docker அதை root உரிமையுடன் உருவாக்கியுள்ளது. Stack-ஐ நிறுத்திவிட்டு, அந்த directory-ஐ chown செய்துவிட்டு, மீண்டும் தொடங்கவும்.
qBittorrent-லிருந்து ஒரு torrent-ஐ நீக்கும்போது library கோப்பும் நீக்கப்பட்டால், அந்த import ஒரு நகலாக (copy) இருந்து பின்னர் நீக்கப்பட்டிருக்கலாம் அல்லது நீங்கள் torrent entry-ஐ நீக்குவதற்குப் பதிலாக தரவையே (data) நீக்கியிருக்கலாம். உண்மையான hardlink பயன்படுத்தப்பட்டிருந்தால், ஒரு பெயரை நீக்கினாலும் மற்றொன்று அப்படியே இருக்கும். ஏனெனில், link count பூஜ்ஜியத்தை அடையும்போது மட்டுமே தரவு நீக்கப்படும்.
நீங்கள் சேர்த்த media-வை விட disk வேகமாக நிரம்பினால், அது நகல் எடுப்பதில் (copy problem) ஏற்படும் மிக மோசமான விளைவாகும். அதிக storage வாங்குவதற்கு முன், மேலே உள்ள stat சோதனையை இயக்கவும்.
இந்த stack-க்கு ஒரு VPS-ல் தேவைப்படுபவை
மூன்று arr applications-உம் குறைந்த வளத்தையே பயன்படுத்தும். அவை indexers-ஐ poll செய்து, சிறிய SQLite database-ல் எழுதிச், files-ன் பெயர்களை மாற்றும். 2 GB RAM கொண்ட server-ல் நான்கு containers-உம் சிரமமின்றி இயங்கும். சுமை வேறு இடத்திலிருந்து வருகிறது. பெரிய torrents-ஐ download செய்யும்போது download client disk input மற்றும் output-ஐ முழுமையாகப் பயன்படுத்தும். அதே box-ல் media server video-ஐ transcode செய்தால் CPU பயன்பாடும் அதிகரிக்கும். Media-வை உண்மையான throughput கொண்ட volume-ல் வைத்திருங்கள். Server-ல் நீங்கள் முக்கியமாகக் கருதும் வேறு பணிகள் இருந்தால், download client-ல் bandwidth limit அமைக்கவும். மற்ற பணிகளுக்கான வளங்களை தனியாகத் திட்டமிடுங்கள். போதுமான headroom இருக்கும் என்று கருத வேண்டாம்: self-hosted AFFiNE workspace என்பதும் பின்னால் database கொண்ட மேலும் நான்கு containers-ஐ சேர்க்கிறது; 2 GB box-ல் அது பெரும்பாலான memory-ஐ தனக்கே பயன்படுத்தும். ஒவ்வொரு கூடுதல் service-ம் இவ்வளவு வளம் கேட்காது: self-hosted openGym workout tracker போன்ற single-purpose service, தனக்கென TLS அமைத்து, அதன் database file எங்கு உள்ளது என்பதை முன்கூட்டியே அறிந்திருந்தால், அந்த box-ஐ சிரமமின்றிப் பகிர்ந்து கொள்ளும். அப்போதுதான் ஒரு ஆண்டு training history-ஐ அதனிடம் நம்பிக்கையுடன் ஒப்படைக்க முடியும். web application, Postgres database மற்றும் background worker queue ஆகியவற்றைக் கொண்ட எதுவும் அந்த வரம்பில் AFFiNE-க்கு அருகிலேயே இருக்கும். எனவே import நடுவில் வரம்பை எதிர்கொள்ளும் முன், self-hosted Chatwoot support desk இந்த server-ல் இயங்க வேண்டுமா அல்லது தனி server-ல் இருக்க வேண்டுமா என்பதைத் தீர்மானிக்கவும். Bursty workloads-க்கு இன்னும் அதிக கவனம் தேவை. Import நடைபெறும் நேரத்தில் மோதுவது average அல்ல, peak பயன்பாடாகும். self-hosted OneCLI handing each person their own sandboxed agent பற்றி பரிசீலித்தால், qBittorrent முழு வேகத்தில் இயங்கும்போது உண்மையில் free ஆக இருக்கும் வளத்துடன் அதன் வெளியிடப்பட்ட sizing numbers-ஐ ஒப்பிடுங்கள். idle box-ல் free -h காட்டும் மதிப்புடன் ஒப்பிட வேண்டாம்.
FAQ
Sonarr ஏன் கோப்புகளை hardlink செய்வதற்குப் பதிலாக நகலெடுக்கிறது?
ஏனெனில், container-ன் பார்வையில் மூலமும் (source) இலக்கும் (destination) வெவ்வேறு filesystems-ல் உள்ளன. /downloads மற்றும் /tv போன்ற இரண்டு தனித்தனி bind mounts, ஒரே host disk-லிருந்து வந்தாலும் அவை இரண்டு வெவ்வேறு filesystems-ஆகவே கருதப்படும். ஒவ்வொரு container-லும் ஒரு பொதுவான parent directory-ஐ /data என mount செய்து, downloads மற்றும் library-ஐ அதற்குள் வைத்தால், link செய்வது சாத்தியமாகும். இரண்டு கோப்புகளிலும் stat -c '%i %h %n' கட்டளையைப் பயன்படுத்தி முடிவை உறுதிப்படுத்தவும்: ஒரே inode மற்றும் 2 என்ற link count இருக்க வேண்டும்.
நான் எந்த PUID மற்றும் PGID-ஐப் பயன்படுத்த வேண்டும்?
Media tree-க்கு உரிமையாளராக இருக்கும் host account-ன் numeric id-ஐப் பயன்படுத்தவும்; இதை id -u மற்றும் id -g மூலம் பெறலாம். புதிய Ubuntu VPS-ல் இவை பொதுவாக இரண்டிற்கும் 1000 என்றே இருக்கும். Stack-ல் உள்ள ஒவ்வொரு container-ம் ஒரே ஜோடியைப் பயன்படுத்த வேண்டும், இல்லையெனில் ஒரு application எழுதும் கோப்புகளை மற்றொன்றால் மாற்ற முடியாது. மதிப்புகளை மாற்றிய பிறகு, docker compose up -d --force-recreate மூலம் container-களை மீண்டும் உருவாக்கி, chown -R மூலம் ஏற்கனவே உள்ள கோப்புகளைச் சரிசெய்யவும்.
இந்த web interfaces-ஐ நான் இணையத்தில் வெளிப்படுத்த வேண்டுமா?
இல்லை, அவ்வாறு செய்யக்கூடாது. Compose கோப்பில் ஒவ்வொரு published port-ஐயும் 127.0.0.1-க்கு bind செய்யவும். பின்னர், SSH tunnel, VPN அல்லது TLS (transport layer security)-ஐ முடித்து, சொந்தமாக authentication-ஐச் சேர்க்கும் ஒரு reverse proxy மூலம் interfaces-ஐ அணுகவும். இவற்றை நேரடியாகப் பதிப்பிப்பது ஆபத்தானது, ஏனெனில் Docker தனது சொந்த firewall விதிகளைச் சேர்க்கிறது; எனவே, ufw deny விதி அந்த traffic-ஐத் தடுக்காது.
qBittorrent கடவுச்சொல்லை நான் எங்கே கண்டறிவது?
LinuxServer.io image, அதன் startup log-ல் admin பயனருக்கான தற்காலிக கடவுச்சொல்லை அச்சிடும். அதை வாசிக்க docker compose logs qbittorrent | grep -i password கட்டளையை இயக்கவும், பின்னர் Options மற்றும் Web UI பகுதிக்குச் சென்று நிரந்தர கடவுச்சொல்லை அமைக்கவும். நீங்கள் சொந்தமாக கடவுச்சொல்லை அமைக்கும் வரை, ஒவ்வொரு முறை restart செய்யும்போதும் புதிய தற்காலிக கடவுச்சொல் உருவாக்கப்படும்.
Jellyfin அதே கோப்புறைகளைப் பயன்படுத்த முடியுமா?
ஆம், அதுதான் இந்த அமைப்பின் நோக்கமே. /mnt/data/media-ஐ உங்கள் media server-ல் /media என mount செய்யவும். அதன் libraries /media/Movies மற்றும் /media/Shows-ல் இருக்கும்போது, Sonarr மற்றும் Radarr ஆகியவை /data/media வழியாக அதே directories-ல் எழுதும். Media server-க்கு அதே PUID மற்றும் PGID-ஐ வழங்கவும், அப்போதுதான் arr stack எழுதும் கோப்புகளை அதனால் வாசிக்க முடியும்.