Ubuntu 24.04-এ MinIO সেটআপ করার নিয়ম
Ubuntu 24.04 VPS-এ MinIO ইনস্টল করার পূর্ণাঙ্গ গাইড। সোর্স থেকে বিল্ড, systemd কনফিগারেশন, mc কমান্ডের ব্যবহার এবং restic দিয়ে ব্যাকআপ নেওয়ার সঠিক পদ্ধতি এখানে দেওয়া হলো।
MinIO-এর মাধ্যমে আপনি যা পাচ্ছেন
MinIO হলো একটি self-hosted object storage যা Amazon S3 API সমর্থন করে। restic বা কোনো S3 SDK-কে আপনার নিজস্ব সার্ভারের দিকে নির্দেশ করুন, একটি endpoint সেটিং পরিবর্তন করুন, এবং দৈনন্দিন object read, write, listing ও presigned link-এর জন্য এটুকুই যথেষ্ট। তবে, compatible হওয়া মানেই হুবহু এক হওয়া নয়। উদাহরণস্বরূপ, MinIO Amazon-এর object ACL বাস্তবায়ন করে না এবং এর রক্ষণাবেক্ষণকারীরা জানিয়েছেন যে তাদের তেমন কোনো পরিকল্পনাও নেই। তাই যে অ্যাপ্লিকেশনগুলো ACL আচরণের ওপর নির্ভরশীল, সেগুলোর জন্য শুধু একটি নতুন endpoint-এর চেয়ে বেশি কিছুর প্রয়োজন। এই নির্দেশিকাটি Ubuntu 24.04-এ একটি single node তৈরি করবে: যাচাইকৃত সোর্স থেকে compile করা একটি binary, একটি ডেডিকেটেড system user, একটি systemd unit যা root credentials-কে unit file-এর বাইরে রাখে এবং একটি bucket যেখানে restic backup রাখবে।
S3 (simple storage service) একটি filesystem নয়, বরং একটি HTTP API। আপনি একটি bucket-এ একটি key-এর অধীনে একটি object PUT করেন এবং তা GET করে ফেরত পান। একটি স্ট্যান্ডার্ড bucket-এ কোনো partial write বা rename-এর সুযোগ নেই। Amazon-এর S3 Express One Zone directory bucket-গুলো এর ব্যতিক্রম, যেগুলোতে নিজস্ব append এবং rename কল রয়েছে। তবে এটি কেবল একটি storage class এবং এই নির্দেশিকার কোনো কিছুই এর ওপর নির্ভরশীল নয়। Backup টুলগুলো এই স্ট্যান্ডার্ড মডেলটি পছন্দ করে, কারণ একটি object হয় সম্পূর্ণভাবে পৌঁছাবে, অথবা পৌঁছাবেই না।
একটি node আপনার ডেটার একটি কপি ধারণ করে। এটিই সেই বিনিময় যা আপনি করছেন। আপনি একটি VPS-এর খরচে আপনার নিয়ন্ত্রণাধীন একটি S3 endpoint পাচ্ছেন, এবং সেই সাথে ক্লাউড প্রোভাইডার আগে যে কাজগুলো করত, যেমন নষ্ট হয়ে যাওয়া ডিস্ক প্রতিস্থাপন করা থেকে শুরু করে সার্ভার সফটওয়্যার প্যাচ করা পর্যন্ত, তার সব দায়িত্ব এখন আপনার ওপর বর্তাবে। শেষের দিকের সেকশনটিতে স্পষ্টভাবে বলা হয়েছে কখন এই বিনিময়টি একটি ভালো সিদ্ধান্ত।
অক্টোবর 2026-এ MinIO কমিউনিটি এডিশনের বর্তমান অবস্থা
এই গাইডের ওপর ভিত্তি করে কাজ শুরু করার আগে এই অংশটি পড়ুন, কারণ সম্প্রতি এতে পরিবর্তন এসেছে। মে 2025-এ MinIO তাদের কমিউনিটি এডিশনের ওয়েব কনসোল থেকে অ্যাডমিনিস্ট্রেশন ফিচারগুলো সরিয়ে ফেলেছে। ব্রাউজারে এখন কেবল একটি অবজেক্ট ব্রাউজার অবশিষ্ট আছে, তাই বাকেট (buckets) এবং অ্যাক্সেস কি (access keys) এখন mc কমান্ড লাইন ক্লায়েন্টের মাধ্যমে ম্যানেজ করতে হয়।
2025 সালের শেষের দিকে MinIO প্রি-কম্পাইল করা কমিউনিটি বাইনারি প্রকাশ করা বন্ধ করে দেয়। প্রজেক্টের README অনুযায়ী, কমিউনিটি এডিশন এখন শুধুমাত্র সোর্স কোড হিসেবে বিতরণ করা হয় এবং এপ্রিল 2026 থেকে minio/minio রিপোজিটরিটিকে THIS REPOSITORY IS NO LONGER MAINTAINED নোটিশের অধীনে আর্কাইভ করা হয়েছে। পুরনো ডাউনলোড সার্ভারটিও এখন আর কমিউনিটি ফাইলগুলো সরবরাহ করছে না। 20 অক্টোবর 2026-এ যাচাই করে দেখা গেছে, এই গাইডে ডাউনলোড করার জন্য ব্যবহৃত প্রতিটি dl.min.io পাথ, সার্ভার বাইনারি, ক্লায়েন্ট বাইনারি এবং সেগুলোর চেকসাম ফাইল এখন 410 Gone রেসপন্স দিচ্ছে, যা কোনো বিভ্রাট নয় বরং ইচ্ছাকৃতভাবে সরিয়ে ফেলা হয়েছে। সেই সার্ভারে এখন একমাত্র যে mc বাইনারিটি রয়েছে তা হলো /aistor/mc/release/-এর অধীনে থাকা AIStor Client, যা তাদের বাণিজ্যিক লাইনের অন্তর্ভুক্ত। min.io-এর ডাউনলোড পেজে এখন AIStor Server, AIStor Client, AIStor SDK এবং কিছু AIStor অ্যাড-অন তালিকাভুক্ত আছে। এছাড়া সেখানে একটি ফ্রি AIStor টিয়ার রয়েছে যা ডেভেলপার, গবেষক এবং ছোট প্রতিষ্ঠানের জন্য তৈরি যারা স্ট্যান্ডঅ্যালোন ডিপ্লয়মেন্ট চালায়, কিন্তু সেখানে কোনো কমিউনিটি বিল্ড নেই।
সোর্স কোডটি এখনো সেখানে আছে এবং এটি সর্বশেষ বাইনারির চেয়েও নতুন। সর্বশেষ কমিউনিটি রিলিজ হলো RELEASE.2025-10-15T17-29-55Z, যা 16 অক্টোবর 2025-এ একটি সিকিউরিটি রিলিজ হিসেবে প্রকাশিত হয়েছিল: এটি সার্ভিস অ্যাকাউন্ট এবং STS-এ সেশন পলিসি বাইপাসের মাধ্যমে প্রিভিলেজ এসকেলেশনের সমস্যা সমাধান করে এবং রিলিজ নোটে সকল ব্যবহারকারীকে দ্রুত আপগ্রেড করার পরামর্শ দেওয়া হয়েছে। সর্বশেষ প্রি-কম্পাইল করা বাইনারিটি ছিল সেপ্টেম্বর 2025-এর বিল্ড, তাই সেটিতে এই ফিক্সটি ছিল না। এই গাইডটি অক্টোবর রিলিজটি কম্পাইল করে এবং যেহেতু রিপোজিটরি আর্কাইভ করা হয়েছে, তাই এটিই কমিউনিটি এডিশনের সর্বশেষ ফিক্স।
এই একটি তথ্যই এই গাইডের বাকি অংশকে প্রভাবিত করে। এই কারণেই এখানে MinIO 127.0.0.1-এ লিসেন করে এবং শুধুমাত্র আপনার নিয়ন্ত্রিত প্রক্সির মাধ্যমেই ইন্টারনেটে পৌঁছায়।
MinIO binary ইনস্টল করুন এবং ডাউনলোড যাচাই করুন
MinIO Go ল্যাঙ্গুয়েজে লেখা হয়েছে এবং এর ভেন্ডর README অনুযায়ী এটি একটি মাত্র go install কমান্ড দিয়ে বিল্ড করা যায়, যার জন্য Go 1.24 বা তার পরবর্তী সংস্করণ প্রয়োজন। প্রথমে অফিসিয়াল tarball থেকে Go ইনস্টল করুন। 20 অক্টোবর 2026 তারিখে go.dev/dl-এ বর্তমান স্থিতিশীল রিলিজ হলো go1.27.3, যা 19 অক্টোবর 2026 তারিখে crypto/x509 প্যাকেজে একটি সিকিউরিটি ফিক্সসহ রিলিজ হয়েছে। নিচে দেওয়া হ্যাশটি সেই পেজে linux-amd64 আর্কাইভের জন্য প্রকাশিত হয়েছে। আপনি যদি নতুন কোনো Go সংস্করণ বেছে নেন, তবে একই পেজ থেকে তার হ্যাশ সংগ্রহ করুন। -f ফ্ল্যাগটি ব্যবহার করলে HTTP ত্রুটির ক্ষেত্রে curl ফাইলটি সেভ না করে ব্যর্থ হয়। এটি ব্যবহার না করলে অনেক সময় ব্যবহারকারীরা ভুলবশত একটি 404 এরর পেজকে আর্কাইভ হিসেবে ডাউনলোড করে ফেলেন এবং পরে সেটি আনপ্যাক করতে গিয়ে সমস্যায় পড়েন।
cd /tmp
GOVER=go1.27.3
curl -fsSL "https://go.dev/dl/$GOVER.linux-amd64.tar.gz" -o go.tar.gzদুটি হ্যাশ তুলনা করুন এবং শুধুমাত্র হ্যাশগুলোই যাচাই করুন।
published=65efbc80fdc1fa2cd2631cad5b481777a68e8725f34e89f50fc6ac714e379b40
downloaded=$(sha256sum go.tar.gz | awk '{print $1}')
[ "$published" = "$downloaded" ] && echo "checksum ok"এই চেকটি কী প্রমাণ করে সে সম্পর্কে পরিষ্কার ধারণা রাখুন। হ্যাশ মিলে যাওয়া মানে হলো ডাউনলোডটি সম্পূর্ণ হয়েছে এবং ট্রানজিটের সময় এটি ক্ষতিগ্রস্ত বা পরিবর্তিত হয়নি। এটি প্রমাণ করে না যে ভেন্ডর নির্ভরযোগ্য। এটি একটি ভিন্ন সমস্যা এবং কোনো sha256sum কমান্ড এটি সমাধান করতে পারে না।
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go.tar.gz
export PATH=$PATH:/usr/local/go/bin
go versionএখন আপনার সাধারণ ব্যবহারকারী অ্যাকাউন্ট থেকে ফাইনাল কমিউনিটি রিলিজটি বিল্ড করুন। go install ডাউনলোড করা প্রতিটি মডিউল, এমনকি MinIO-এর নিজস্ব সোর্স কোডকেও sum.golang.org-এ থাকা Go-এর পাবলিক চেকসাম ডেটাবেসের সাথে যাচাই করে। ফলে কোনো মডিউল টেম্পারড বা পরিবর্তিত হলে তা বাইনারি তৈরি করার আগেই সিকিউরিটি এরর দেখিয়ে বিল্ড বন্ধ করে দেয়।
go install github.com/minio/minio@RELEASE.2025-10-15T17-29-55Z
sudo install -o root -g root -m 755 ~/go/bin/minio /usr/local/bin/minio
minio --version
go version -m /usr/local/bin/minio | head -n 3minio --version কমান্ডটি রিলিজ নামের পরিবর্তে DEVELOPMENT.GOGET প্রিন্ট করবে, কারণ go install সেই বিল্ড ফ্ল্যাগগুলো প্রয়োগ করে না যা ভেন্ডর তাদের নিজস্ব বাইনারি স্ট্যাম্প করার জন্য ব্যবহার করে। go version -m কমান্ডটি প্রতিটি বাইনারিতে এমবেড করা Go মডিউল তথ্য পড়ে এবং এর mod github.com/minio/minio লাইনটি সেই কমিটকে নির্দেশ করে যা আপনি বিল্ড করেছেন। এখানে Permission denied আসার অর্থ হলো মোড ভুল, এবং command not found আসার অর্থ হলো /usr/local/bin আপনার PATH-এ নেই। যদি কম্পাইল করার জন্য VPS-এ পর্যাপ্ত মেমোরি না থাকে, তবে একই আর্কিটেকচারের অন্য কোনো Linux মেশিনে একই go install কমান্ডটি চালান এবং বাইনারিটি কপি করে নিয়ে আসুন।
একটি সিস্টেম ইউজার এবং ডেটা ডিরেক্টরি তৈরি করুন
MinIO নেটওয়ার্ক থেকে আপলোড গ্রহণ করে, তাই এটি root হিসেবে চালানো উচিত নয়। এটিকে এমন একটি অ্যাকাউন্ট দিন যার কোনো হোম ডিরেক্টরি নেই এবং কোনো লগইন শেল নেই।
sudo groupadd -r minio-user
sudo useradd -M -r -g minio-user -s /usr/sbin/nologin minio-user
sudo mkdir -p /var/lib/minio/data
sudo chown -R minio-user:minio-user /var/lib/minio
sudo chmod 750 /var/lib/minio-r 1000-এর নিচে UID সহ একটি সিস্টেম অ্যাকাউন্ট তৈরি করে, যা এটিকে সাধারণ ব্যবহারকারীদের পরিসরের বাইরে রাখে। -M হোম ডিরেক্টরি তৈরি করা এড়িয়ে যায়, কারণ যে অ্যাকাউন্টে কখনোই লগইন করা হয় না, তার সেখানে কিছু রাখার প্রয়োজন নেই। id minio-user দিয়ে ফলাফলটি যাচাই করুন এবং stat -c '%U %a' /var/lib/minio দিয়ে দেখুন, যা minio-user 750 প্রিন্ট করবে।
ডেটা ডিরেক্টরিটিতে শুধুমাত্র রিড করার ক্ষমতাই নয়, সেই ইউজারের রাইট করার ক্ষমতাও থাকতে হবে। প্রথমবার চালু হওয়ার সময় MinIO তার নিজস্ব কনফিগারেশন রাখার জন্য ভলিউমের ভেতরে একটি .minio.sys ডিরেক্টরি তৈরি করে, তাই root-এর মালিকানাধীন ডিরেক্টরি থাকলে MinIO স্টার্টআপের সময় বন্ধ হয়ে যায় এবং একটি মেসেজ দেখায় যা permission denied দিয়ে শেষ হয়। আপনি এই পদ্ধতিতে যে সার্ভিসই চালান না কেন, একই নিয়ম প্রযোজ্য এবং VPS-এ লিস্ট-প্রিভিলেজ সার্ভিস ইউজার বিষয়টি বিস্তারিত আলোচনা করে।
রুট ক্রেডেনশিয়ালগুলো একটি এনভায়রনমেন্ট ফাইলে রাখুন
রুট ক্রেডেনশিয়ালগুলো প্রতিটি বাকেটের অ্যাক্সেস প্রদান করে, তাই এগুলো ইউনিট ফাইলে রাখা উচিত নয়, কারণ ইউনিট ফাইলটি যে কেউ পড়তে পারে। প্রথমে সঠিক মোড ব্যবহার করে ফাইলটি তৈরি করুন এবং তারপর তাতে তথ্য লিখুন, যাতে পাসওয়ার্ডটি কোনো মুহূর্তের জন্যও এমন কোনো ফাইলে না থাকে যা অন্য কেউ পড়তে পারে।
sudo install -o root -g root -m 600 /dev/null /etc/default/minio
printf 'MINIO_ROOT_USER=minio-root\nMINIO_ROOT_PASSWORD=%s\nMINIO_VOLUMES="/var/lib/minio/data"\nMINIO_OPTS="--address 127.0.0.1:9000 --console-address 127.0.0.1:9001"\n' "$(openssl rand -base64 24)" | sudo tee /etc/default/minio > /dev/null
sudo sed -n 's/^MINIO_ROOT_PASSWORD=//p' /etc/default/miniotee বিদ্যমান ফাইলকে নতুন করে তৈরি না করে সেটিকে ট্রাঙ্কেট (truncate) করে, ফলে ফাইলের মোড 600 এবং মালিকানা root হিসেবেই বজায় থাকে। এটি ইচ্ছাকৃতভাবেই করা হয়েছে। systemd ফাইলটিকে EnvironmentFile হিসেবে পড়ে, এরপর এটি প্রিভিলেজ কমিয়ে User=-এ নিয়ে আসে। এর অর্থ হলো, সার্ভিস অ্যাকাউন্টটির নিজের ক্রেডেনশিয়াল পড়ার প্রয়োজন হয় না। সার্ভিসটি চালু হওয়ার পর, sudo -u minio-user cat /etc/default/minio কমান্ড দিয়ে তা যাচাই করুন। এই কমান্ডটি অবশ্যই Permission denied আউটপুট প্রদর্শন করবে।
সার্ভিসটি শুরু করার আগে MinIO-এর দুটি আচরণ জেনে রাখা প্রয়োজন। কোনো MINIO_ROOT_USER এবং MINIO_ROOT_PASSWORD এনভায়রনমেন্টে না থাকলে, MinIO চালু হতে অস্বীকার করে না। এটি ডকুমেন্টেশনে উল্লিখিত ডিফল্ট ক্রেডেনশিয়াল minioadmin:minioadmin দিয়ে চালু হয়, যা যেকোনো স্ক্যানার সবার আগে চেষ্টা করে এবং এটি দেখতে সম্পূর্ণ স্বাভাবিক মনে হয়। 8 অক্ষরের কম পাসওয়ার্ড হলে MinIO তা প্রত্যাখ্যান করে: স্টার্টআপের সময় MinIO একটি ত্রুটি বার্তা দিয়ে বন্ধ হয়ে যায়, কারণ অ্যাক্সেস কি-এর জন্য কমপক্ষে 3টি এবং সিক্রেট কি-এর জন্য কমপক্ষে 8টি অক্ষর প্রয়োজন।
MINIO_VOLUMES হলো ডেটা পাথ এবং MINIO_OPTS-এ ফ্ল্যাগগুলো থাকে। 127.0.0.1-এ বাইন্ড করার অর্থ হলো, এই VPS-এর বাইরের কেউ এখনও S3 API-তে পৌঁছাতে পারবে না, যা একটি সঠিক ডিফল্ট সেটিংস। পরবর্তীতে একটি প্রক্সির মাধ্যমে সার্টিফিকেট ব্যবহার করে আপনি ইচ্ছাকৃতভাবে এটি উন্মুক্ত করবেন।
systemd ইউনিট তৈরি করুন
/etc/systemd/system/minio.service তৈরি করুন:
[Unit]
Description=MinIO object storage
Documentation=https://github.com/minio/minio
Wants=network-online.target
After=network-online.target
[Service]
User=minio-user
Group=minio-user
EnvironmentFile=/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_VOLUMES $MINIO_OPTS
Restart=always
RestartSec=5
LimitNOFILE=65536
NoNewPrivileges=true
[Install]
WantedBy=multi-user.targetEnvironmentFile-এ কোনো অগ্রবর্তী - নেই, এবং এটি কোনো ভুল নয় বরং একটি সচেতন সিদ্ধান্ত। ড্যাশ চিহ্নটি থাকলে, systemd কোনো ফাইল খুঁজে না পেলে তা উপেক্ষা করে এবং MinIO চালু করে দেয়, যার ফলে ফাইল মুছে গেলে বা পাথের বানান ভুল থাকলে সার্ভারটি নীরবে minioadmin:minioadmin-এ চলতে থাকে। ড্যাশ না থাকলে, কোনো ফাইল অনুপস্থিত থাকলে MinIO চালু হওয়ার আগেই ইউনিটটি ব্যর্থ হয় এবং journalctl -u minio-এ Failed to load environment files: No such file or directory প্রদর্শিত হয়। সার্ভার নীরবে ডিফল্ট পাসওয়ার্ড গ্রহণ করার চেয়ে একটি ইউনিট চালু হতে অস্বীকার করলে তা শনাক্ত করা অনেক সহজ।
$MINIO_VOLUMES এবং $MINIO_OPTS ইচ্ছাকৃতভাবে উদ্ধৃতি চিহ্ন (quote) ছাড়া রাখা হয়েছে, কারণ systemd উদ্ধৃতিহীন ভেরিয়েবলগুলোকে হোয়াইটস্পেস অনুযায়ী আলাদা আলাদা আর্গুমেন্টে বিভক্ত করে। এভাবেই MINIO_OPTS-এর চারটি শব্দ minio server-এর চারটি আর্গুমেন্টে পরিণত হয়। LimitNOFILE=65536 ফাইল ডেসক্রিপটর লিমিট বৃদ্ধি করে, কারণ প্রতিটি খোলা সংযোগ এবং প্রতিটি খোলা ডেটা ফাইলের জন্য একটি করে ডেসক্রিপটর প্রয়োজন হয় এবং লোড বাড়লে ডিফল্ট 1024 লিমিট দ্রুত শেষ হয়ে যায়।
sudo systemctl daemon-reload
sudo systemctl enable --now minio
systemctl is-active minio
curl -fsS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:9000/minio/health/liveis-active-এর আউটপুট active হওয়া উচিত এবং হেলথ এন্ডপয়েন্ট থেকে 200 উত্তর আসা উচিত। journalctl -u minio -n 20 --no-pager কমান্ডটি সেই API অ্যাড্রেস দেখায় যেখানে সার্ভারটি লিসেন করছে। যদি ইউনিটটি বারবার রিস্টার্ট হতে থাকে, তবে systemd হাল ছেড়ে দেয় এবং Start request repeated too quickly লগ করে, যার অর্থ হলো MinIO প্রতিটি প্রচেষ্টাতেই বন্ধ হয়ে যাচ্ছে: এর কারণ ওই বার্তার উপরের লাইনগুলোতে লেখা থাকে, তাই উপরের দিকে পড়ুন।
আরও বেশি আইসোলেশনের জন্য, [Service] সেকশনে ProtectSystem=full এবং ProtectHome=true যোগ করুন। উভয়টির জন্যই হোস্ট কার্নেল থেকে মাউন্ট নেমস্পেস প্রয়োজন। OpenVZ বা LXC-এর মতো কন্টেইনার ভার্চুয়ালাইজেশন, যা হোস্ট কার্নেল শেয়ার করে, সেখানে এগুলো ব্যর্থ হতে পারে এবং তখন ইউনিটটি status=226/NAMESPACE রিপোর্ট করে। এই দুটি লাইন মুছে ফেললে এটি চালু হবে। ইউনিটটি একটি সাধারণ ইউনিট এবং VPS-এ systemd সার্ভিস এবং টাইমার বাকি ডিরেক্টিভগুলো নিয়ে আলোচনা করে।
mc ইনস্টল করা এবং একটি রাউন্ড ট্রিপ যাচাই করা
MinIO client হলো mc। এটিকে apt install mc দিয়ে ইনস্টল করবেন না। সেই প্যাকেজটি হলো Midnight Commander, যা একটি ফাইল ম্যানেজার এবং MinIO-এর সাথে এর কোনো সম্পর্ক নেই।
dl.min.io এখনো একটি mc বাইনারি প্রদান করে, কিন্তু সেটি কমিউনিটি সংস্করণ নয়। পুরনো কমিউনিটি পাথ, https://dl.min.io/client/mc/release/linux-amd64/mc, 410 Gone উত্তর দেয়। MinIO এখন সেখানে যা অফার করছে তা হলো https://dl.min.io/aistor/mc/release/linux-amd64/mc-এ অবস্থিত AIStor Client, যা তাদের AIStor CLI রেফারেন্সে উল্লেখ করা হয়েছে এবং লাইসেন্সপ্রাপ্ত AIStor Server ডেপ্লয়মেন্টের জন্য এক্সক্লুসিভ কার্যকারিতা সম্পন্ন হিসেবে বর্ণনা করা হয়েছে। সেই রেফারেন্সে কমিউনিটি সার্ভারের সাথে এটি ব্যবহারের বিষয়ে কিছু বলা নেই, তাই এই নির্দেশিকাটি কমিউনিটি ক্লায়েন্টের সাথেই সীমাবদ্ধ থাকছে। minio/mc রিপোজিটরিটি জুলাই 2026 থেকে আর্কাইভ করা হয়েছে, তাই এর সর্বশেষ রিলিজ, RELEASE.2025-08-13T08-35-41Z, একই Go টুলচেইন দিয়ে বিল্ড করুন। চেকসাম ডেটাবেস এই ডাউনলোডটিও কভার করে।
go install github.com/minio/mc@RELEASE.2025-08-13T08-35-41Z
sudo install -o root -g root -m 755 ~/go/bin/mc /usr/local/bin/mcসার্ভারটিকে একটি alias হিসেবে রেজিস্টার করুন, তারপর এর মাধ্যমে একটি অবজেক্ট স্থানান্তর করুন।
MINIO_PASS=$(sudo sed -n 's/^MINIO_ROOT_PASSWORD=//p' /etc/default/minio)
mc alias set local http://127.0.0.1:9000 minio-root "$MINIO_PASS"
mc mb local/backups
echo "hello object storage" > /tmp/hello.txt
mc cp /tmp/hello.txt local/backups/hello.txt
mc ls local/backups
mc cat local/backups/hello.txtmc ls কমান্ডটি hello.txt-কে তার সাইজসহ তালিকাভুক্ত করবে এবং mc cat কমান্ডটি hello object storage প্রিন্ট করবে। এই রাউন্ড ট্রিপটিই সার্ভার কাজ করার প্রকৃত প্রমাণ, কারণ এটি অন্যান্য ক্লায়েন্টের মতোই সাইন করা S3 রিকোয়েস্ট পাঠায়। আপনি যদি দ্বিতীয় কোনো মতামত চান, তবে mc admin info local কমান্ডটি সার্ভারের স্ট্যাটাস প্রিন্ট করবে।
সার্ভারটি খালি থাকা অবস্থায় এখন আরও একটি চেক চালান।
mc alias set defaultcheck http://127.0.0.1:9000 minioadmin minioadminএই কমান্ডটি অবশ্যই ব্যর্থ হতে হবে। যদি এটি সফল হয়, তবে এনভায়রনমেন্ট ফাইলটি প্রসেসে পৌঁছায়নি এবং আপনার সার্ভার ডিফল্ট ক্রেডেনশিয়াল দিয়ে চলছে। মেশিনে অন্য কিছু করার আগে এটি ঠিক করুন।
mc কমান্ডটি alias-গুলোকে ~/.mc/config.json ফাইলে প্লেইন টেক্সটে সংরক্ষণ করে, তাই সেই ক্রেডেনশিয়ালগুলো যে ব্যবহারকারী কমান্ডটি চালিয়েছেন তার হোম ডিরেক্টরিতে থাকে। sudo ব্যবহারকারীর অধীনে mc চালালে রুট ক্রেডেনশিয়ালগুলো /root/.mc/config.json-এ জমা হয়। রুট alias-টিকে একটি অ্যাডমিনিস্ট্রেটর অ্যাকাউন্টে রাখুন এবং প্রতিটি অ্যাপ্লিকেশনের জন্য আলাদা কি (key) প্রদান করুন।
একটি presigned URL-এর মাধ্যমে একটি অবজেক্ট শেয়ার করা
একটি presigned URL হলো একটি সাধারণ HTTPS লিঙ্ক, যার সাথে একটি সিগনেচার এবং মেয়াদ উত্তীর্ণের সময় যুক্ত থাকে। এই লিঙ্কটি যার কাছে থাকবে, তিনি কোনো অ্যাকাউন্ট বা ক্লায়েন্ট ছাড়াই সেই নির্দিষ্ট অবজেক্টটি ডাউনলোড করতে পারবেন।
mc share download --expire 12h local/backups/hello.txtআউটপুটটিতে কোয়েরি স্ট্রিং হিসেবে X-Amz-Signature এবং X-Amz-Expires থাকে। এটি নিয়ে দুটি বিষয় ব্যবহারকারীদের অবাক করে। লিঙ্কটি আপনার ব্যবহৃত alias-এর endpoint থেকে তৈরি হয়, তাই 127.0.0.1-এ থাকা কোনো alias থেকে তৈরি লিঙ্ক শুধুমাত্র সেই মেশিন থেকেই খোলা সম্ভব: আপনি যে লিঙ্কগুলো অন্যদের পাঠাতে চান, সেগুলোর জন্য আপনার public hostname-এ একটি দ্বিতীয় alias তৈরি করুন। এছাড়া, প্রতিটি লিঙ্কের জন্য আলাদা কোনো revoke বা বাতিল করার বাটন নেই। সিগনেচারটি মেয়াদ শেষ না হওয়া পর্যন্ত কার্যকর থাকে, অথবা যে কি (key) দিয়ে এটি সাইন করা হয়েছে তা মুছে ফেলা বা পরিবর্তন না করা পর্যন্ত এটি সচল থাকে। রুট ক্রেডেনশিয়াল দিয়ে সাইন করা লিঙ্কের ক্ষেত্রে এর অর্থ হলো ক্রেডেনশিয়াল রোটেশন করা, তাই স্বল্পমেয়াদী মেয়াদ নির্ধারণ করাই হলো এর কার্যকর নিয়ন্ত্রণ ব্যবস্থা। S3 সিগনেচার ফরম্যাট অনুযায়ী সর্বোচ্চ সাত দিন পর্যন্ত মেয়াদ রাখা সম্ভব।
restic-এর জন্য নিজস্ব কি এবং বাকেট তৈরি করুন
root ক্রেডেনশিয়াল দিয়ে প্রতিটি বাকেট পড়া এবং মুছে ফেলা যায়, তাই ব্যাকআপ জবের কাছে এই ক্রেডেনশিয়াল থাকা উচিত নয়। একটি বাকেট তৈরি করুন, সেই বাকেটের জন্য একটি পলিসি নির্ধারণ করুন এবং এমন একজন ইউজার তৈরি করুন যার অন্য কোনো অ্যাক্সেস নেই।
mc mb local/restic
cat > /tmp/restic-rw.json <<'EOF'
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket", "s3:GetBucketLocation"],
"Resource": ["arn:aws:s3:::restic"]
},
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
"Resource": ["arn:aws:s3:::restic/*"]
}
]
}
EOF
RESTIC_KEY=$(openssl rand -base64 24)
mc admin policy create local restic-rw /tmp/restic-rw.json
mc admin user add local restic-backup "$RESTIC_KEY"
mc admin policy attach local restic-rw --user restic-backupMinIO-তে একটি বিল্ট-ইন readwrite পলিসি থাকে যা দিয়ে কাজ কিছুটা সহজ হতো, কিন্তু সেটি সার্ভারের প্রতিটি বাকেটে পূর্ণ অ্যাক্সেস প্রদান করে। উপরের পলিসিতে বাকেটের নাম দুইবার উল্লেখ করা হয়েছে: একবার arn:aws:s3:::restic হিসেবে যাতে বাকেট লিস্ট করা যায় এবং একবার arn:aws:s3:::restic/* হিসেবে যাতে এর ভেতরের অবজেক্টগুলো অ্যাক্সেস করা যায়। S3-তে একটি বাকেট এবং এর ভেতরের অবজেক্টগুলো আলাদা রিসোর্স হিসেবে গণ্য হয়, তাই পলিসিতে যদি কেবল একটির নাম থাকে তবে তা কাজ করবে না এবং মনে হবে ক্লায়েন্টটি নষ্ট হয়ে গেছে।
নির্ভর করার আগে সীমাবদ্ধতা পরীক্ষা করে নিন।
mc alias set resticuser http://127.0.0.1:9000 restic-backup "$RESTIC_KEY"
mc ls resticuser/restic
mc ls resticuser/backupsপ্রথম ls কমান্ডটি সফল হবে এবং দ্বিতীয়টি Access Denied এর কারণে ব্যর্থ হবে। যে পলিসি আপনি পরীক্ষা করেননি, সেটি কেবল একটি অনুমান।
এখন restic-কে বাকেটের দিকে নির্দেশ করুন। restic স্ট্যান্ডার্ড AWS এনভায়রনমেন্ট ভেরিয়েবল থেকে S3 ক্রেডেনশিয়াল পড়ে, তাই এখানে restic-এর নিজস্ব কোনো ক্রেডেনশিয়াল ফাইলের প্রয়োজন নেই।
sudo apt install -y restic
export AWS_ACCESS_KEY_ID=restic-backup
export AWS_SECRET_ACCESS_KEY="$RESTIC_KEY"
restic -r s3:http://127.0.0.1:9000/restic init
restic -r s3:http://127.0.0.1:9000/restic backup /etc
restic -r s3:http://127.0.0.1:9000/restic snapshotsrestic init একটি রিপোজিটরি পাসওয়ার্ড চাইবে। এই পাসওয়ার্ড দিয়ে রিপোজিটরি এনক্রিপ্ট করা হয়, তাই MinIO শুধুমাত্র সাইফারটেক্সট সংরক্ষণ করে। পাসওয়ার্ড হারিয়ে ফেললে ব্যাকআপও হারিয়ে যাবে। systemd টাইমার দিয়ে শুরু করা কোনো প্রসেসে টাইপ করার জন্য টার্মিনাল থাকে না, তাই শিডিউল করা ব্যাকআপের জন্য RESTIC_PASSWORD_FILE কে মোড 600 ফাইলে সেট করুন।
উপরের যেকোনো কমান্ডের চেয়ে একটি প্লেসমেন্ট রুল বেশি গুরুত্বপূর্ণ। যে ডেটা আপনি রক্ষা করছেন, সেই একই VPS-এ restic রিপোজিটরি রাখলে তা কেবল একটি ভুল rm থেকে আপনাকে বাঁচাতে পারে, অন্য কিছু থেকে নয়। MinIO নোডটি অবশ্যই ভিন্ন একটি মেশিন হতে হবে, আদর্শগতভাবে ভিন্ন কোনো অঞ্চলে। VPS-এ restic ব্যাকআপ অংশে এর পাশাপাশি শিডিউলিং এবং রিটেনশন নিয়ে আলোচনা করা হয়েছে।
nginx দিয়ে TLS টার্মিনেট করা
MinIO লোকালহোস্টে থাকে, তাই nginx হলো পাবলিক ইন্টারফেস। প্রথমে certbot এবং nginx দিয়ে Let's Encrypt সার্টিফিকেট-এ বর্ণিত পদ্ধতি অনুযায়ী সার্টিফিকেট ইস্যু করুন, তারপর এই সার্ভার ব্লকটি ব্যবহার করুন।
server {
listen 443 ssl;
server_name s3.example.com;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://127.0.0.1:9000;
}
}এই লাইনগুলোর মধ্যে কয়েকটি অত্যন্ত গুরুত্বপূর্ণ। client_max_body_size 0 ডিফল্ট 1 MB বডি লিমিট সরিয়ে ফেলে, অন্যথায় MinIO অনুরোধটি পাওয়ার আগেই 413 Request Entity Too Large এর মাধ্যমে বড় আকারের আপলোড প্রত্যাখ্যান করে। proxy_request_buffering off আপলোড সরাসরি স্ট্রিম করে, কারণ ডিফল্ট কনফিগারেশনে পুরো অনুরোধটি প্রথমে একটি টেম্পোরারি ফাইলে জমা হয় এবং বড় অবজেক্টের ক্ষেত্রে দ্বিগুণ ডিস্ক স্পেসের প্রয়োজন হয়। proxy_set_header Host $http_host একটি সূক্ষ্ম বিষয়: একটি S3 সিগনেচার Host হেডারকে কভার করে, তাই কোনো প্রক্সি যদি এটি পরিবর্তন করে তবে প্রতিটি অনুরোধ SignatureDoesNotMatch এর মাধ্যমে ব্যর্থ হয়, যদিও এক্সেস লগে অনুরোধটি স্বাভাবিকভাবে আসার তথ্য দেখা যায়।
MinIO-কে তার পাবলিক নামটিও জানিয়ে দিন, যাতে এটি যে লিঙ্কগুলো তৈরি করে তা লোকালহোস্টের পরিবর্তে প্রক্সিকে নির্দেশ করে।
echo 'MINIO_SERVER_URL=https://s3.example.com' | sudo tee -a /etc/default/minio
sudo systemctl restart minioফায়ারওয়াল ছোট রাখুন। SSH এবং HTTPS-এর অনুমতি দিন, এবং 9000 ও 9001 পোর্টগুলোর জন্য কোনো রুল সেট করবেন না, কারণ 127.0.0.1-এ বাইন্ড করা অ্যাড্রেস ফায়ারওয়াল যাই বলুক না কেন, অন্য কোনো মেশিন থেকে অ্যাক্সেস করা সম্ভব নয়। VPS-এ ufw ফায়ারওয়ালের মৌলিক বিষয়সমূহ-এ কমান্ডগুলো দেওয়া আছে।
কখন সিঙ্গেল-নোড MinIO যথেষ্ট এবং কখন আপনার প্রকৃত S3 প্রয়োজন
এখানে সিঙ্গেল-নোড বলতে একটি ড্রাইভ বোঝানো হয়েছে, তাই এতে কোনো প্যারিটি বা ডেপ্লয়মেন্টের ভেতরে দ্বিতীয় কোনো কপি থাকে না। প্রতিটি অবজেক্টের স্থায়িত্ব নির্ভর করে একটি VPS ডিস্কের স্থায়িত্বের ওপর। MinIO-এর নিজস্ব ডকুমেন্টেশন, যা অক্টোবর 2025-এ কমিউনিটি ডক্স সরিয়ে নেওয়ার পর থেকে শুধুমাত্র minio/docs রিপোজিটরিতে সোর্স হিসেবে রয়েছে, সেখানে স্ট্যান্ডঅ্যালোন ডেপ্লয়মেন্টকে প্রাথমিক ডেভেলপমেন্ট এবং মূল্যায়নের জন্য উপযুক্ত বলা হয়েছে। MinIO এটি প্রোডাকশনে ব্যবহারের পরামর্শ দেয় না। একটি বাকেটের জন্য অবজেক্ট লকিং চালু করা সম্ভব, কিন্তু একটি VPS-এ এটি শুধুমাত্র S3 API-এর মাধ্যমে ডিলিট করা বন্ধ করে। মেশিনে root অ্যাক্সেস থাকা যেকোনো ব্যক্তি ডিস্ক থেকে ফাইলগুলো মুছে ফেলতে পারে, তাই এই সেটআপে কাউকে অপরিবর্তনীয় রিটেনশন পলিসির নিশ্চয়তা দেবেন না।
এটি অন্য কোনো অঞ্চলে অবস্থিত দ্বিতীয় একটি VPS-এ restic টার্গেট হিসেবে এবং ডেভেলপমেন্ট বা CI আর্টিফ্যাক্টের জন্য S3 এন্ডপয়েন্ট হিসেবে ভালো কাজ করে, যেখানে একটি বাকেট হারিয়ে গেলে শুধুমাত্র পুনরায় বিল্ড করার প্রয়োজন হয়। ছোট অ্যাপ্লিকেশনের ক্ষেত্রে ব্যবহারকারীর আপলোডের জন্য এটি যুক্তিসঙ্গত, যদি আপনার কাছে রিকভারি প্ল্যান থাকে এবং আপনি বাস্তবে তা পরীক্ষা করে থাকেন।
যখন কোনো চুক্তি বা নিয়ন্ত্রক সংস্থা অবজেক্ট লক বা মাল্টি-রিজিয়ন স্থায়িত্ব দাবি করে, অথবা যখন আপনি চান না যে ডিস্ক পূর্ণ হয়ে যাওয়ার কারণে রাত 3টায় আপনাকে কল করা হোক, তখন ম্যানেজড S3 বেছে নিন। ফ্রিজড কোড আরেকটি বাস্তব কারণ। 20 অক্টোবর 2026 অনুযায়ী কমিউনিটি এডিশনটি আর্কাইভ করা হয়েছে এবং এর রক্ষণাবেক্ষণ বন্ধ হয়ে গেছে। এর সর্বশেষ রিলিজ RELEASE.2025-10-15T17-29-55Z-ই এই গাইডে সংকলিত হয়েছে। এর পরের কোনো কিছুরই আর সমাধান করা হবে না, তাই এটি ব্যবহার করার অর্থ হলো এই সীমাবদ্ধতা মেনে নেওয়া, অথবা MinIO-এর বাণিজ্যিক AIStor লাইন বা অন্য কোনো সেলফ-হোস্টেড স্টোরেজে চলে যাওয়া, যা সেলফ-হোস্টেড MinIO বিকল্পসমূহ-এ তুলনা করা হয়েছে।
একটি সীমানা উল্লেখ করা প্রয়োজন কারণ এটি প্রায়ই সামনে আসে। অবজেক্ট স্টোরেজ কোনো ডাটাবেস নয়। স্ট্যান্ডার্ড বাকেটে প্রতিটি রাইট অপারেশন একটি সম্পূর্ণ অবজেক্টকে প্রতিস্থাপন করে। এমনকি Amazon যে append কল S3 Express One Zone-এর জন্য যোগ করেছে, তা শুধুমাত্র শেষে ডাটা যুক্ত করে। তাই S3 বাকেটে সরাসরি SQL ফাইল রাখা ধীরগতির এবং অনিরাপদ। ডাটাবেস লোকাল ডিস্কে রাখুন এবং সেটির ব্যাকআপ বাকেটে নিন: VPS-এ প্রোডাকশনে SQLite চালানো নিবন্ধে এই বিভাজনটি বর্ণনা করা হয়েছে।
ব্যর্থতার ধরন এবং যে বার্তাগুলো আপনি দেখবেন
ইউনিটটি systemctl enable --now-এর ঠিক পরেই ব্যর্থ হয়। journalctl -u minio -n 30 --no-pager পড়ুন। Failed to load environment files: No such file or directory এর অর্থ হলো /etc/default/minio অনুপস্থিত অথবা ইউনিটে এর পাথ ভুলভাবে লেখা হয়েছে। permission denied দিয়ে শেষ হওয়া কোনো বার্তার অর্থ হলো সার্ভিস অ্যাকাউন্টের কাছে ডেটা ডিরেক্টরি লেখার অনুমতি নেই, তাই নিশ্চিত করুন যে stat -c '%U' /var/lib/minio/data কমান্ডটি minio-user আউটপুট দিচ্ছে।
minioadmin:minioadmin এখনও লগইন করতে দিচ্ছে। এনভায়রনমেন্ট ফাইলটি প্রসেসের কাছে পৌঁছায়নি। নিশ্চিত করুন যে ইউনিটে EnvironmentFile=/etc/default/minio অন্তর্ভুক্ত আছে, sudo systemctl daemon-reload চালান এবং তারপর সার্ভিসটি রিস্টার্ট করুন। MinIO স্টার্টআপের সময় একবারই রুট ক্রেডেনশিয়াল পড়ে, তাই রিস্টার্ট না করে ফাইলটি পরিবর্তন করলে কোনো কাজ হবে না।
স্টার্টআপের সময় Address already in use। অন্য কোনো প্রসেস 9000 পোর্টটি দখল করে রেখেছে। MinIO-এর পোর্ট পরিবর্তন করার আগে sudo ss -ltnp | grep :9000 ব্যবহার করে সেই প্রসেসটি খুঁজে বের করুন।
প্রক্সির মাধ্যমে 1 এমবি-এর বেশি ফাইল আপলোড ব্যর্থ হচ্ছে। nginx 413 Request Entity Too Large উত্তর দিয়েছে এবং MinIO অনুরোধটি পায়নি। সার্ভার ব্লকে client_max_body_size 0 সেট করুন।
SignatureDoesNotMatch। হয় সিক্রেট কি ভুল, অথবা ক্লায়েন্ট এবং MinIO-এর মধ্যবর্তী কোনো কিছু Host হেডারটি পরিবর্তন করেছে, যা সিগনেচারের অন্তর্ভুক্ত।
RequestTimeTooSkewed। ক্লায়েন্ট বা সার্ভারের ঘড়ির সময় ভুল। প্রতিটি সাইন করা S3 অনুরোধে একটি টাইমস্ট্যাম্প থাকে এবং MinIO, অ্যামাজন S3-এর মতোই, এমন হেডার-সাইন করা অনুরোধ প্রত্যাখ্যান করে যার টাইমস্ট্যাম্প তার নিজস্ব ঘড়ির সময়ের চেয়ে 15 মিনিটের বেশি ব্যবধানে থাকে। প্রিসাইন করা লিঙ্কগুলো তাদের মেয়াদোত্তীর্ণের সময়ের সাথে যাচাই করা হয়। timedatectl পরীক্ষা করুন এবং নিশ্চিত করুন যে টাইম সিনক্রোনাইজেশন সক্রিয় আছে।
আপনার জানা কোনো বাকেটের ক্ষেত্রে Access Denied। কি (key) টি অন্য কোনো বাকেটের জন্য নির্ধারিত। mc admin policy info local restic-rw ব্যবহার করে পলিসিটি আসলে কী অনুমতি দিচ্ছে তা প্রিন্ট করুন এবং রিসোর্স লাইনে বাকেটের নামের সাথে মিলিয়ে দেখুন।
FAQ
সিঙ্গেল-নোড MinIO কি প্রকৃত ব্যাকআপের জন্য যথেষ্ট?
এটি একটি আলাদা মেশিনে restic-এর টার্গেট হিসেবে ব্যবহারের জন্য যথেষ্ট, যদি সেই মেশিনটি মূল ডেটা থেকে আলাদা হয়। তবে এটি আপনার একমাত্র কপি হিসেবে যথেষ্ট নয়। একটি সিঙ্গেল-ড্রাইভ ডেপ্লয়মেন্টে কোনো প্যারিটি (parity) থাকে না, তাই MinIO-এর ভেতরে কোনো দ্বিতীয় কপি থাকে না। যদি সেই VPS-এর ডিস্কের ডেটা নষ্ট হয়ে যায়, তবে অবজেক্টগুলো চিরতরে হারিয়ে যাবে। সবসময় অন্য কোথাও একটি দ্বিতীয় টার্গেট রাখুন এবং অন্তত একবার সেখান থেকে রিস্টোর করে দেখুন যে প্রক্রিয়াটি সঠিকভাবে কাজ করছে কি না।
MinIO-এর চেকসাম ফাইলে sha256sum -c কেন ব্যর্থ হয়?
আপনি এই ফাইলটি কেবল আগে সেভ করা কোনো কপির ক্ষেত্রেই পাবেন, কারণ dl.min.io 20 অক্টোবর 2026 তারিখে চেক করার সময় প্রতিটি কমিউনিটি বাইনারি এবং চেকসাম ফাইলের জন্য 410 Gone নিশ্চিত করেছে। সেই ফাইলের ভেতরে হ্যাশের পরের লেবেলটি রিলিজের নাম নির্দেশ করে, যেমন minio.RELEASE.2025-09-07T16-13-09Z, অথচ ডাউনলোড করা ফাইলটির নাম সাধারণত minio হয়। sha256sum -c চেকসাম ফাইলের ভেতরে লেখা নামের ফাইলটি খোঁজে, সেটি না পেয়ে No such file or directory এবং WARNING: 1 listed file could not be read রিপোর্ট করে। ডাউনলোডটি সঠিক আছে। সরাসরি হ্যাশ স্ট্রিংগুলো তুলনা করুন এবং লেবেলটি উপেক্ষা করুন, কারণ এর কোনো নিরাপত্তা সংক্রান্ত গুরুত্ব নেই।
MinIO অ্যাডমিন ওয়েব কনসোল কোথায় গেল?
MinIO মে 2025 সালে কমিউনিটি এডিশন কনসোল থেকে অ্যাডমিনিস্ট্রেশন ফিচারগুলো সরিয়ে নিয়েছে, এখন ওয়েব ইন্টারফেসে কেবল একটি অবজেক্ট ব্রাউজার থাকে। বাকেট এবং ইউজার এখন mc ক্লায়েন্টের মাধ্যমে পরিচালনা করতে হয়, যেখানে mc admin user add এবং mc admin policy attach-এর মতো কমান্ড ব্যবহার করা হয়। কমিউনিটি এডিশনে এটিই নির্ধারিত পদ্ধতি, কোনো বিকল্প সমাধান নয়; আর এই কারণেই এই গাইডে সবকিছু কমান্ড লাইন থেকে করা হয়েছে।
S3 ব্যাকএন্ড হিসেবে restic-কে MinIO-এর দিকে কীভাবে নির্দেশ করব?
AWS_ACCESS_KEY_ID এবং AWS_SECRET_ACCESS_KEY-কে MinIO অ্যাক্সেস কি এবং সিক্রেট হিসেবে সেট করুন। এরপর s3:https://s3.example.com/restic ফরম্যাটের একটি রিপোজিটরি স্ট্রিং ব্যবহার করুন, যেখানে শেষ অংশটি হলো বাকেটের নাম। প্রথমে mc mb দিয়ে বাকেটটি তৈরি করে নিন, কারণ একটি নির্দিষ্ট বাকেটের জন্য সীমাবদ্ধ কি (key)-এর বাকেট তৈরির অনুমতি থাকে না। আপলোডের আগে restic তার নিজস্ব রিপোজিটরি পাসওয়ার্ড দিয়ে সবকিছু এনক্রিপ্ট করে, তাই MinIO কেবল সাইফারটেক্সট জমা রাখে এবং আপনার ফাইলগুলো দেখতে পায় না।
আমাকে কি nginx-এর পেছনে MinIO চালাতে হবে?
যখন ক্লায়েন্ট একই মেশিনে থাকে না, তখন আপনার TLS (transport layer security) প্রয়োজন। কারণ এটি ছাড়া প্রতিটি অবজেক্ট, অ্যাক্সেস কি আইডি এবং রিকোয়েস্ট সিগনেচার নেটওয়ার্ক দিয়ে প্লেইন টেক্সট হিসেবে আদান-প্রদান হয়। সিক্রেট কি কখনোই ক্লায়েন্ট থেকে বাইরে যায় না, কারণ S3 সাইনিং কেবল লোকালি সিগনেচার তৈরির জন্য এটি ব্যবহার করে। তবে নেটওয়ার্কের মাঝে থাকা যে কেউ আপনার ডেটা পড়তে পারে এবং টাইমস্ট্যাম্প বৈধ থাকা অবস্থায় ক্যাপচার করা রিকোয়েস্টটি পুনরায় পাঠাতে (replay) পারে। certbot থেকে পাওয়া সার্টিফিকেটসহ পোর্ট 443-এ একটি প্রক্সি ব্যবহার করা TLS পাওয়ার সবচেয়ে সহজ উপায় এবং এটি সার্টিফিকেট রিনিউয়াল প্রক্রিয়াকে MinIO থেকে আলাদা রাখে। MinIO নিজেও TLS টার্মিনেট করতে পারে যদি আপনি --certs-dir-কে public.crt এবং private.key ধারণকারী ডিরেক্টরির দিকে নির্দেশ করেন। তবে সেক্ষেত্রে সার্ভিস অ্যাকাউন্টের রিনিউ করা প্রাইভেট কি পড়ার অনুমতি থাকতে হয়, যা একই ফলাফল পাওয়ার জন্য বাড়তি কাজ।