SSD Nodes Learn 🎉 VPS $5.50/মাস থেকে
নির্দেশিকা Matt Connorদ্বারা Matt Connor

Self-hosted file manager তুলনা: কোনটি বেছে নেবেন?

FileBrowser, Filestash, SFTPGo ও Cloud Commander-এর scoping, share link, storage backend এবং auth তুলনা করুন। ফাইলের ঝুঁকি না বাড়িয়ে একটি চালানোর পদ্ধতিও জানুন।

একটি self-hosted file manager কী এবং কী নয়

একটি self-hosted file manager হলো আপনার VPS (virtual private server)-এ আগে থেকেই থাকা directory tree-এর ওপর চলা একটি web page। আপনি লগ ইন করবেন, disk-এ যেভাবে আছে সেভাবেই /srv/files দেখতে পাবেন, এবং upload, rename, download করবেন বা কাউকে একটি link দেবেন। কোনো কিছু দ্বিতীয় system-এ copy করা হয় না। তাই browser-এ রাখা file এক সেকেন্ড পরেই ls-এ দেখা যাবে।

Search result-এ প্রায়ই এটিকে এমন software-এর সঙ্গে এক করে দেখা হয়, যেগুলো অন্য কাজ করে। Sync tool প্রতিটি device-এ প্রতিটি file-এর একটি copy রাখে। self-hosted Dropbox alternative-এর কাজ এটাই। Object storage-এ কোনো directory tree থাকে না। সেখানে bucket এবং API থাকে। তাই S3 compatible object storage-এর জন্য MinIO চালানো একটি ভিন্ন প্রয়োজনের সমাধান। Server admin panel file নয়, machine পরিচালনা করে। সেই বিষয়টি Cockpit এবং Webmin-এর তুলনা-তে ব্যাখ্যা করা হয়েছে।

যখন কোনো সহকর্মীর server থেকে একটি 300 MB archive দরকার হয়, অথবা আপনি phone থেকে কোনো config file-এর typo ঠিক করতে চান, তখন file manager ব্যবহার করুন। কাজটি ছোট, তাই tool-ও ছোট।

পড়ার সময় একটি বিষয় মনে রাখুন। এটি এমন একটি web application, যার filesystem-এ read এবং write access আছে এবং যা একটি port-এ listening করছে। নিচের প্রতিটি সিদ্ধান্ত আসলে নির্ধারণ করে, ওই process আপনার disk-এর কতটা অংশে পৌঁছাতে পারবে।

FileBrowser আর্কাইভ করা হয়েছে, তাই এটি ইনস্টল করার আগে এই তথ্য পড়ুন

FileBrowser, filebrowser/filebrowser project, এমন একটি উত্তর যা এখনো অধিকাংশ গাইডে দেওয়া হয়। এর README এখন একটি বিজ্ঞপ্তি দিয়ে শুরু হয়:

File Browser 2026-09-01 তারিখে আর্কাইভ করা হয়েছে। সর্বশেষ পরিকল্পিত release ইতিমধ্যে প্রকাশিত হয়েছে। এরপর আর কোনো release, bug fix বা security fix দেওয়া হবে না।

Apache 2.0 code কাজ করতে থাকবে। তবে security fix বন্ধ হয়ে যাবে। এই ধরনের software-এর ক্ষেত্রে বিষয়টি অন্য অনেক software-এর তুলনায় বেশি গুরুত্বপূর্ণ, কারণ এর মূল উদ্দেশ্যই হলো HTTP-এর মাধ্যমে filesystem-এ write access দেওয়া।

Maintainer-রা কীভাবে এটি চালু রাখা যায়, তা লিখে দিয়েছেন। আপনি যে tool-ই বেছে নিন, এই পরামর্শগুলো অনুসরণ করা উচিত: FileBrowser-কে সরাসরি Internet-এ expose করবেন না, TLS (transport layer security) termination এবং নিজস্ব authentication সম্পন্ন করে এমন একটি reverse proxy-এর পেছনে রাখুন, command runner disabled রাখুন, এবং unprivileged user হিসেবে একটি container-এ চালান। Container-এ শুধু যে directory serve করার কথা, সেটিই mount করুন।

README-এর একটি লাইন বাকি সবকিছুর চেয়ে বেশি গুরুত্বপূর্ণ। Session server-side identifier-এর পরিবর্তে self-contained JWT (JSON web token) ব্যবহার করে, তাই সেগুলো revoke করা যায় না। কোনো session token ফাঁস হলে সেটি expire না হওয়া পর্যন্ত valid থাকে, এবং password পরিবর্তন করলেও token বাতিল হয় না। FileBrowser ব্যবহার চালিয়ে গেলে এর সামনের authentication layer-ই প্রকৃত নিরাপত্তার কাজ করে।

FileBrowser Quantum: এখনো সক্রিয়ভাবে উন্নয়নাধীন fork

সক্রিয় উন্নয়ন একটি fork, FileBrowser Quantum (gtsteffaniak/filebrowser)-এ চলে গেছে। এটি gtstef/filebrowser image হিসেবে প্রকাশিত হয়। পুরোনো command line flag ও database setting-এর মিশ্রণের বদলে এটি একটি একক config.yaml-কে কেন্দ্র করে configuration পুনর্গঠন করে। নথিভুক্ত quick try:

docker run -d \
  -v $(pwd):/srv \
  -p 80:80 \
  gtstef/filebrowser:beta

এটি বর্তমান directory-কে http://localhost-এ serve করে। প্রথম login হলো admin / admin। container-টি আপনার নিজের মেশিন ছাড়া অন্য কোথাও accessible করার আগে এটি পরিবর্তন করুন।

যে instance চালু রাখবেন, তার জন্য Compose ব্যবহার করুন। একটি database file-এর বদলে data directory mount করুন এবং port-টি localhost-এ bind করুন:

services:
  filebrowser:
    image: gtstef/filebrowser:beta
    user: "1000:1000"
    volumes:
      - /srv/files:/folder
      - ./data:/home/filebrowser/data
    ports:
      - 127.0.0.1:8080:80
    restart: unless-stopped

Configuration থাকে /home/filebrowser/data/config.yaml-এ এবং database থাকে /home/filebrowser/data/filebrowser.sqlite-এ। Version 2.0.0 database format পরিবর্তন করেছে এবং একবারের migration চালায়। এ কারণেই documentation-এ directory mount করতে বলা হয়েছে। একটি single file mount করলে নতুন file রাখার কোনো স্থান থাকে না। config.yaml-এর ভেতরের path-গুলো container path। তাই config-এর একটি source /folder পড়ে, /srv/files নয়। এটি ভুলভাবে সেট করলে কোনো error ছাড়াই file list খালি দেখা যায়, কারণ directory-টি সত্যিই সেখানে নেই।

Project প্রায় 60 MB আকারের latest এবং stable প্রকাশ করে, যেখানে video thumbnail-এর জন্য FFmpeg bundled থাকে। এছাড়া প্রায় 15 MB আকারের, শুধু core-সমৃদ্ধ stable-slim-ও প্রকাশ করে। এগুলো August 2026-এর install page-এ দেওয়া আকার। নির্বাচিত tag pin করুন। latest আপনাকে না জানিয়েই পরিবর্তিত হতে পারে। চলমান container-এর মধ্যে file manager তার config format পরিবর্তন করলে তা সমস্যার কারণ হবে।

এই কাজের জন্য ছোট tool-গুলোর মধ্যে এটিই সবচেয়ে শক্তিশালী। এটি include ও exclude rule ব্যবহার করে একাধিক source serve করতে পারে। তাই একটি instance থেকে ভিন্ন scope-এ /srv/media এবং /srv/docs প্রকাশ করা যায়। Share-এ expiration time থাকে এবং সেগুলো anonymous হতে পারে, অথবা নির্দিষ্ট user-এ সীমাবদ্ধ থাকতে পারে। Authentication হিসেবে OIDC (OpenID Connect), LDAP (lightweight directory access protocol), two factor-সহ password এবং proxy header mode সমর্থিত। এই proxy mode-এর মাধ্যমে দ্বিতীয় user list না রেখে self-hosted Authentik server থেকে single sign on (SSO)-এর আড়ালে এটি চালানো যায়।

Filestash: আপনার বিদ্যমান storage-এর জন্য একটি interface

Filestash-এর কাঠামো ভিন্ন। এটি এমন একটি front end, যা একটি backend-এর সঙ্গে সংযোগ করে। Backend-এর তালিকা দীর্ঘ: FTP, SFTP (SSH file transfer protocol), S3, SMB, WebDAV, IPFS এবং আরও প্রায় বিশটি। যে সার্ভারে interface চলছে, ফাইলগুলো সেখানে না থাকলে এটি উপযোগী।

mkdir -p /srv/filestash && cd /srv/filestash
curl -O https://downloads.filestash.app/latest/docker-compose.yml
docker compose up -d

Image হলো machines/filestash:latesthttp://your_domain:8334 খুলুন। প্রথম screen-এ admin password সেট করার নির্দেশ থাকবে। এটি সঙ্গে সঙ্গে সেট করুন। কারণ password সেট না করা পর্যন্ত port খুঁজে পাওয়া যে কেউ admin console-এ প্রবেশ করতে পারে।

এটির ওপর ভিত্তি করে configuration করার আগে identity model বুঝে নিন। প্রচলিত অর্থে Filestash কোনো user database সংরক্ষণ করে না। Credentials আপনার browser-এ cookie হিসেবে সংরক্ষিত থাকে। এগুলো encrypted, authenticated এবং HTTP only। Share feature ব্যবহার না করলে server side-এ কিছুই রাখা হয় না। Share feature ব্যবহার করলে Filestash আপনার credentials-এর একটি persistent encrypted সংস্করণ সংরক্ষণ করে। এখানে "users" বলতে storage account বোঝায়। Identity Filestash-এ নয়, backend-এ থাকে; যেমন SFTP account বা S3 key-তে।

এই নকশা সরল, তবে এর একটি খরচ আছে। Pricing page অনুযায়ী, free self-hosted tier AGPL v3 (GNU Affero General Public License)-এর অধীনে এবং এতে সর্বোচ্চ 3 users রয়েছে। একই page-এ role based access control-সহ SSO (SAML, OIDC এবং LDAP) paid self-hosted tier-এ রাখা হয়েছে, যার মূল্য August 2026 অনুযায়ী প্রতি মাসে $50 থেকে শুরু। পরিকল্পনা যদি হয় "company SSO-এর সামনে Filestash বিনামূল্যে চালানো", তাহলে এর ওপর নির্ভর করে architecture তৈরির আগে ওই page পরীক্ষা করুন।

SFTPGo: একটি protocol server, যার web interface-ও আছে

এখানে SFTPGo সবচেয়ে সক্ষম software, এবং ভুল কারণে এটিই সবচেয়ে বেশি সুপারিশ করা হয়। এটি local filesystem, encrypted local filesystem, S3 compatible object storage, Google Cloud Storage, Azure Blob Storage অথবা অন্য একটি SFTP server-এর ওপর SFTP, HTTP/S, FTP/S এবং WebDAV সরবরাহ করে।

Binaries, Debian ও Ubuntu packages এবং একটি container image—সবই প্রকাশ করা হয়। বর্তমান APT repository line এবং এর signing key SFTPGo documentation-এর installation page-এ রয়েছে। দ্রুত চালু করার জন্য container পদ্ধতিই সবচেয়ে সহজ। আপনি যে version চান, তা দিয়ে tag প্রতিস্থাপন করুন:

docker run --name some-sftpgo -p 8080:8080 -p 2022:2022 -d "drakkan/sftpgo:tag"

SFTP 2022 port-এ এবং web interface-গুলো 8080 port-এ listen করে। /srv/sftpgo-কে volume হিসেবে mount করুন। তা না হলে container পুনরায় তৈরি হলে account এবং তাদের file হারিয়ে যাবে, কারণ user home directory-এর default হলো /srv/sftpgo/data/<username>

এখানে দুটি web interface আছে। এই দুটির পার্থক্যটি বেশিরভাগ write-up-এ স্পষ্টভাবে বলা হয় না। /web/admin-এ থাকা WebAdmin প্রশাসনিক কাজের জন্য। এখানে user, group, virtual folder এবং event rule তৈরি করা যায়। quota, bandwidth limit এবং access time restriction-ও এখানে নির্ধারণ করা যায়। /web/client-এ থাকা WebClient হলো end user-এর interface। এখানে user file browse করতে, নিজের credential পরিবর্তন করতে, two-factor authentication সেট up করতে এবং share তৈরি করতে পারে।

এই তুলনায় share সুবিধাটিই সবচেয়ে শক্তিশালী। User file ও folder share করার জন্য HTTP/S link তৈরি করতে পারে। Download এবং upload-এর সংখ্যা সীমিত করা যায়। Share-এ password সুরক্ষা যোগ করা যায়। Source IP address অনুযায়ী access সীমিত করা যায়। স্বয়ংক্রিয় expiration date-ও নির্ধারণ করা যায়।

তাহলে সতর্কতার কারণ কী? এর মূল গুরুত্ব browsing experience নয়; account model এবং protocol server। অন্যদের quota-সহ প্রকৃত account প্রয়োজন হলে SFTPGo বেছে নিন। আপনার নিয়ন্ত্রণের বাইরে থাকা কোনো system থেকে SFTP বা FTPS-এর মাধ্যমে upload এলে এটিও উপযুক্ত। আবার একটি bucket একাধিক user-এর home directory-তে দেখাতে হলেও এটি ব্যবহার করা যায়। Virtual folder এই কাজটি করে। Local disk, S3, GCS, Azure Blob, SFTP অথবা HTTP-ভিত্তিক একটি folder একাধিক account-এ mount করা যায়। Shared folder-এর জন্য user-ভিত্তিক আলাদা quota-ও নির্ধারণ করা যায়। আপনি যদি শুধু /srv/files-এর ওপর browse করা যায় এমন একটি page চান, তাহলে এই কাজের জন্য এটি অতিরিক্ত বড় একটি ব্যবস্থা।

আরও দুটি তথ্য জানা দরকার। Community edition AGPL-3.0-only license এবং অতিরিক্ত terms-এর অধীনে প্রকাশিত হয়। এর পাশাপাশি commercially licensed Enterprise edition-ও আছে। Open source build-এ OIDC login রয়েছে। এটি উভয় web interface-এর জন্য identity provider-এর user-দের SFTPGo admin এবং user-এর সঙ্গে map করতে পারে। httpd configuration-এ enable_web_client ব্যবহার করে globally client interface বন্ধ করা যায়। অথবা কোনো user-এর denied protocols-এ HTTP যোগ করে শুধু সেই user-এর জন্য এটি বন্ধ করা যায়। ফলে file manager একজনের জন্য চালু রেখে অন্য সবার জন্য বন্ধ রাখা সম্ভব।

Cloud Commander: একজন ব্যবহারকারীর জন্য দুই প্যানেল ও একটি terminal

Cloud Commander হলো MIT লাইসেন্সের অধীনে প্রকাশিত Node.js manager। এতে two-pane interface, built-in editor, console এবং terminal রয়েছে। npm i cloudcmd -g দিয়ে এটি globally install করুন, অথবা প্রকাশিত container চালান:

docker run -it --rm -v ~:/root -v /:/mnt/fs -w=/root -p 8000:8000 coderaiser/cloudcmd

চালানোর আগে commandটি পড়ে নিন। -v /:/mnt/fs host-এর সম্পূর্ণ filesystem container-এর মধ্যে mount করে। নমুনা ~/.cloudcmd.json-এ "root": "/", "auth": false এবং "console": true দেওয়া আছে। এর ফলে port 8000-এ পৌঁছাতে পারা যে কেউ server-এর সম্পূর্ণ disk এবং command console পেয়ে যায়। Laptop-এর জন্য এটি যুক্তিসংগত default, কিন্তু VPS-এর জন্য উপযুক্ত নয়।

এর scope সীমিত করুন। Containerটি /root/.cloudcmd.json পড়ে। প্রকাশিত command-এ home directory mount করে এটি সরবরাহ করা হয়। তাই config mount রাখুন এবং বাকি অংশ বাদ দিন:

docker run -d --name cloudcmd \
  -v ~/.cloudcmd.json:/root/.cloudcmd.json \
  -v /srv/files:/srv/files \
  -w=/srv/files \
  -p 127.0.0.1:8000:8000 \
  coderaiser/cloudcmd

Config file-এ "root"-এর মান /srv/files, "auth"-এর মান true একটি "username""password"-সহ, এবং "console""terminal"-এর মান false সেট করুন—যদি না আপনি সত্যিই browser shell access চান। Command line-এর সমতুল্য option-ও রয়েছে, যার মধ্যে --root, --auth, --username, --password এবং --prefix অন্তর্ভুক্ত।

এটি আসলে কী, সে বিষয়ে পরিষ্কার থাকুন। এতে একটি credential pair আছে, per-user scope নেই, quota নেই এবং share link নেই। এটি ব্যক্তিগত ব্যবহারের tool। তাই উপরের মতো এটিকে localhost-এ bind করুন এবং tunnel-এর মাধ্যমে ব্যবহার করুন:

ssh -L 8000:127.0.0.1:8000 you@your-vps

এরপর নিজের machine-এ http://127.0.0.1:8000 খুলুন। File manager কখনো publicly exposed হবে না। Internet-এর দিকে কেবল সেই SSH daemon-ই উন্মুক্ত থাকবে, যেটি আপনি আগেই আপনার VPS-এ harden করেছেন

এই একটি কাজের জন্য Nextcloud সঠিক টুল নয়

Nextcloud ভালো software, কিন্তু এই কাজের জন্য এটি উপযুক্ত নয়। এটি একটি collaboration platform: একটি PHP application, একটি database, background jobs, desktop sync clients এবং একটি app store নিয়ে গঠিত। /srv/files-এর web view পাওয়ার জন্য এটি চালানো একটি ছোট কাজের তুলনায় অতিরিক্ত অনেক উপাদান পরিচালনার প্রয়োজন তৈরি করে। এর সঙ্গে একটি নির্দিষ্ট অমিলও আছে। Nextcloud প্রতিটি request-এর সময় directory পড়ার বদলে একটি database table-এ file metadata সংরক্ষণ করে। তাই rsync বা cron job দিয়ে লেখা file-গুলো scan সম্পন্ন না হওয়া পর্যন্ত interface-এ দেখা নাও যেতে পারে, এবং এর ফলে sudo -u www-data php occ files:scan --all হতে পারে। File manager page load করার সময় directory তালিকাভুক্ত করে, তাই সেখানে এই ব্যবধান থাকে না।

Nextcloud যেসব কাজে ভালো, সেসবের জন্য এটি ব্যবহার করুন: calendar, contact, sync এবং desktop client প্রত্যাশা করেন এমন ব্যক্তিদের সঙ্গে sharing। Docker, TLS এবং backup সহ VPS-এ Nextcloud-এ এই setup বর্ণনা করা হয়েছে। আপনি যদি ইতিমধ্যে এটি চালান এবং শুধু একটি বিদ্যমান directory দেখতে চান, তাহলে External Storage app enable করে সেখানেই থামুন। একই disk-এ write access থাকা দ্বিতীয় একটি web application মানে patch করার জন্য দ্বিতীয় একটি ব্যবস্থা।

কীভাবে পুরো সার্ভারের অ্যাক্সেস না দিয়ে একটি চালাবেন

এটি কখনো /-এর দিকে নির্দেশ করবেন না। প্রক্রিয়াটি তার user account যে সবকিছুতে পৌঁছাতে পারে, সেগুলো পড়তে ও লিখতে পারে। তাই চুরি হওয়া session token সেই পরিমাণ filesystem access-এ পরিণত হয়। একটি মাত্র directory serve করুন, /srv/files, এবং এই উদ্দেশ্যে directory-টি তৈরি করুন।

এটি non-root user হিসেবে চালান এবং শুধু যে directory serve করে সেটিই mount করুন। Compose-এ এর অর্থ হলো user: "1000:1000", প্রতি directory-এর জন্য একটি bind mount, এবং যে কোনো directory-তে লেখার প্রয়োজন নেই সেখানে :ro ব্যবহার করা:

    volumes:
      - /srv/files:/folder
      - /srv/media:/media:ro

এই পরিবর্তনের সাধারণ ফল হলো browsing কাজ করে, কিন্তু upload permission denied দিয়ে ব্যর্থ হয়, কারণ container-এর ভেতরের user id বাইরে থাকা directory-টির মালিক নয়। দুটি ফল তুলনা করুন: docker exec filebrowser id container-এর user দেখায়, আর ls -ln /srv/files host-এ numeric owner দেখায়। sudo chown -R 1000:1000 /srv/files দিয়ে সমস্যাটি ঠিক করুন। এটিই সেই ownership সমস্যা, যা সমাধান করার জন্য Docker image-এ PUID এবং PGID রাখা হয়।

প্রকাশিত port-টি localhost-এ bind করুন, 127.0.0.1:8080:80-এ; 8080:80-এ নয়। Docker তার নিজস্ব netfilter rule-গুলো ufw-এর আগে লিখে। তাই ufw deny 8080 সক্রিয় থাকলেও সরাসরি published port Internet থেকে পৌঁছানো যায়। TLS-এর জন্য সামনে একটি reverse proxy রাখুন। Plain HTTP ব্যবহার করলে session cookie network-এর ওপর plaintext অবস্থায় যায়, আর সেই cookie-ই filesystem access দেয়। Compose আপনার কাছে নতুন হলে VPS-এ Docker Compose-এ এই snippet-গুলো যে file layout ধরে নেয়, তা ব্যাখ্যা করা হয়েছে।

অ্যাপ্লিকেশনের নিজস্ব authentication ব্যবস্থা দুর্বল হলে একটি authentication layer যোগ করুন। একক user instance-এর জন্য proxy-তে HTTP basic auth যথেষ্ট। একাধিক ব্যক্তি যুক্ত হলে identity provider-এর বিরুদ্ধে OIDC বা forward auth ব্যবহার করুন, যাতে একটি account revoke করলে সব জায়গায় তার access revoke হয়।

অতিরিক্ত সুবিধাগুলো বন্ধ করুন। যে কোনো file manager shell, command runner বা in-browser terminal দেয়, সেটি বৈধ session যার কাছে আছে তাকে remote code execution-এর সুযোগ দেয়। FileBrowser-এর নিজস্ব নির্দেশনা হলো command runner disabled রাখা, আর Cloud Commander-এর sample config console সক্রিয় করে। Default অনুযায়ী নয়, উদ্দেশ্য অনুযায়ী সিদ্ধান্ত নিন।

প্রথমে কী ভাঙে এবং আপনি কোন ত্রুটি দেখবেন

listen tcp :80: bind: permission denied. Linux 1024-এর নিচের port-গুলো privileged process-এর জন্য সংরক্ষণ করে। FileBrowser Quantum-এর নথিভুক্ত configuration-এ port 80 ব্যবহার করা হয়েছে। Container-এর ভিতরে এটি ঠিকভাবে কাজ করে, কিন্তু host-এ binary-টি unprivileged user হিসেবে চালালেই ব্যর্থ হয়। config.yaml-এ 1024-এর বেশি একটি port সেট করুন এবং 443 proxy-কে ব্যবহারের জন্য ছেড়ে দিন।

ব্রাউজ করা কাজ করে, কিন্তু upload ব্যর্থ হয়। একটি directory তালিকাভুক্ত করতে r-x প্রয়োজন, আর সেখানে লিখতে w প্রয়োজন। Web interface একটি সাধারণ error দেখায়। তাই প্রথমে application log নয়, filesystem পরীক্ষা করুন।

413 Request Entity Too Large. এই error nginx থেকে আসে, file manager থেকে নয়। ডিফল্ট client_max_body_size হলো 1 MB। তাই বড় upload application-এর কাছে পৌঁছানোর আগেই proxy সেটি প্রত্যাখ্যান করে। server block-এ client_max_body_size 4096m; সেট করুন, অথবা check নিষ্ক্রিয় করতে 0 ব্যবহার করুন।

Upload করা file-গুলোর group সঠিক নয়। আশপাশের directory-তে কী নির্ধারিত আছে তা বিবেচনা না করে নতুন file-গুলোর মালিকানা process user-এর হয়। একই tree পড়ে এমন দ্বিতীয় service থাকলে এতে সমস্যা হয়। উভয় service-এর জন্য একটি shared group দিন এবং sudo chmod g+s /srv/files ব্যবহার করে directory-তে setgid bit সেট করুন। এতে নতুন file-গুলো directory-এর group উত্তরাধিকার করবে।

Port-এ সব কাজ করে, কিন্তু proxy-এর পেছনে ব্যর্থ হয়। Subpath-এর অধীনে চালানো application link তৈরি করার সময় একটি prefix ব্যবহার করে। এই prefix সম্পর্কে application-কে জানাতে হয়। Cloud Commander-এর জন্য --prefix রয়েছে। এ ধরনের option না থাকলে application-কে নিজস্ব subdomain দিন এবং root path proxy করুন।

কোন self-hosted file manager চালাবেন?

  • একটি VPS, একটি বা দুটি directory, মেয়াদ-নির্ধারিত share link এবং পরে হয়তো SSO দরকার হলে: FileBrowser Quantum।
  • ফাইল অন্য কোথাও থাকে—S3 bucket, SFTP host বা SMB-এর মাধ্যমে যুক্ত NAS-এ—এবং সেগুলোর জন্য একটি web view চান: free tier-এর সীমার মধ্যে Filestash।
  • অন্যদের account, quota এবং SFTP বা FTPS-এর মাধ্যমে upload দরকার হলে: SFTPGo। এখানে web client-কে অতিরিক্ত সুবিধা হিসেবে বিবেচনা করুন; এটি বেছে নেওয়ার মূল কারণ হিসেবে নয়।
  • SSH tunnel-এর মাধ্যমে ব্যবহার করবেন এবং কখনো public করবেন না—এমন editor ও terminal-সহ ব্যক্তিগত tool চাইলে: Cloud Commander।
  • Nextcloud আগে থেকেই চলছে এবং expose করার জন্য একটি existing directory আছে: External Storage app ব্যবহার করুন; নতুন কোনো software একেবারেই লাগবে না।

আপনি যা-ই বেছে নিন, পছন্দের চেয়ে deployment পদ্ধতি বেশি গুরুত্বপূর্ণ। একটি directory, non-root user, localhost-এ bind করা একটি port এবং সামনে authentication রাখুন। এভাবে সেট up করা file manager একটি সুবিধাজনক tool। একই software /-এ shared password দিয়ে চালালে সেটি সুন্দর interface-সহ একটি remote shell হয়ে যায়।

FAQ

FileBrowser কি 2026 সালেও নিরাপদে চালানো যায়?

Upstream filebrowser/filebrowser README-তে বলা হয়েছে, File Browser 2026-09-01 তারিখে archived হয়েছে এবং এরপর আর কোনো release, bug fix বা security fix হবে না। কোডটি এখনও চলে, কিন্তু filesystem-এ write access থাকা unpatched software সময়ের সঙ্গে বাড়তে থাকা ঝুঁকি তৈরি করে। এটি চালু রাখলে project-এর নিজস্ব পরামর্শ অনুসরণ করুন: Internet-এ সরাসরি exposure দেবেন না, TLS এবং নিজস্ব authentication-সহ reverse proxy ব্যবহার করুন, command runner disabled রাখুন, এবং শুধু পরিবেশিত directory mount করা একটি unprivileged container ব্যবহার করুন। আরও মনে রাখুন, এর session server-side identifier নয়, self-contained JWT; তাই এগুলো revoke করা যায় না এবং password পরিবর্তন করলেও ইতিমধ্যে জারি হওয়া token invalid হয় না। নতুন করে install করলে FileBrowser Quantum ব্যবহার করুন। এটি gtstef/filebrowser image হিসেবে প্রকাশিত, এবং এর development এখনও চলছে।

Self-hosted file manager কি আমার বিদ্যমান SSO ব্যবহার করতে পারে?

FileBrowser Quantum OIDC, LDAP এবং proxy header mode সমর্থন করে। তাই দ্বিতীয় user list ছাড়াই এটি বিদ্যমান identity provider-এর পেছনে চালানো যায়। SFTPGo-এর OpenID Connect integration open source build-এ রয়েছে এবং WebAdmin ও WebClient উভয় interface-এর জন্য identity provider-এর user-দের SFTPGo admin ও user-এ map করে। Filestash-এর ক্ষেত্রে সতর্ক থাকুন: 2026 সালের August অনুযায়ী, এর pricing page-এ SSO (SAML, OIDC এবং LDAP) paid self-hosted tier-এ রাখা হয়েছে, যার মূল্য মাসে $50 থেকে শুরু; free tier-এ AGPL v3 এবং সর্বোচ্চ 3 users উল্লেখ করা আছে। কোনো application-এ SSO support না থাকলে reverse proxy-তে forward authentication ব্যবহার করা যায়। এতে login page সুরক্ষিত হয়, কিন্তু application-এর অভ্যন্তরীণ permission অপরিবর্তিত থাকে।

SFTPGo-তে সবচেয়ে সম্পূর্ণ implementation রয়েছে। একজন user WebClient থেকে HTTP/S link তৈরি করতে পারেন এবং download ও upload-এর সংখ্যা সীমিত করতে, password সেট করতে, source IP address অনুযায়ী access সীমাবদ্ধ করতে এবং automatic expiration date নির্ধারণ করতে পারেন। FileBrowser Quantum expiration time-সহ share সমর্থন করে। Access anonymous হতে পারে অথবা নির্দিষ্ট user-এ সীমাবদ্ধ করা যায়। প্রতিটি share-এর জন্য viewing, editing এবং uploading permission-ও নির্ধারণ করা যায়। Filestash-এও share feature রয়েছে। browser session শেষ হয়ে গেলেও link কাজ করার জন্য server storage credential-এর একটি persistent encrypted copy সংরক্ষণ করে—এটি একমাত্র এমন ক্ষেত্রে ঘটে। Cloud Commander-এ কোনো share link নেই।

আমি যদি একমাত্র user হই, তাহলে file manager-কে /-এ point করা কি নিরাপদ?

না। ঝুঁকিটি মূলত নিজেকে বিশ্বাস করার বিষয় নয়। Process-টি তার user account যে সবকিছুতে পৌঁছাতে পারে, সেগুলোর সবকটিতে read এবং write access ধরে রাখে। তাই ওই session-এ পৌঁছানোর যেকোনো পথ, চুরি হওয়া cookie, upload handler-এর unpatched bug, অথবা পুনর্ব্যবহৃত password /etc-এ, আপনার SSH key-তে এবং প্রতিটি service-এর data directory-তে access দিতে পারে। এর বদলে mount-কে একটি directory-তে সীমাবদ্ধ করুন: /srv/files ব্যবহার করুন, / নয়। Cloud Commander-এ এই ঝুঁকি সবচেয়ে বেশি, কারণ এর প্রকাশিত Docker command host root-কে /mnt/fs-এ mount করে এবং এর sample config "root": "/"-কে "auth": false দিয়ে সেট করে। Container কোনো কিছুতে localhost ছাড়া অন্য interface-এ listen করার আগে দুটিই পরিবর্তন করুন।

#file-manager#filebrowser#sftpgo#self-hosting#storage