Ubuntu 24.04-ல் MinIO object storage நிறுவுவது எப்படி?
Ubuntu 24.04 VPS-ல் MinIO-வை நிறுவி சொந்த S3 API-ஐ உருவாக்குவது எப்படி என அறியுங்கள். binary install, systemd unit, mc basics மற்றும் restic backup முறைகளை இதில் காணலாம்.
MinIO மூலம் நீங்கள் பெறும் self-hosted object storage-ன் நன்மைகள்
MinIO என்பது Amazon S3 API-ஐ ஆதரிக்கும் ஒரு self-hosted object storage ஆகும். restic அல்லது ஏதேனும் ஒரு S3 SDK-வை உங்கள் சொந்த server-ஐ நோக்கி திருப்பி, endpoint அமைப்பை மட்டும் மாற்றினால் போதும்; client-க்கு எந்த மாற்றமும் தெரியாது. இந்த வழிகாட்டி Ubuntu 24.04-ல் ஒரு single node-ஐ உருவாக்குகிறது: சரிபார்க்கப்பட்ட binary, இதற்கென ஒதுக்கப்பட்ட system user, root credentials-ஐ unit file-க்குள் வைக்காத systemd unit, மற்றும் restic backup செய்யும் ஒரு bucket ஆகியவற்றை இது உள்ளடக்கியது.
S3 (simple storage service) என்பது ஒரு filesystem அல்ல, அது ஒரு HTTP API. நீங்கள் ஒரு bucket-க்குள் key மூலம் ஒரு object-ஐ PUT செய்கிறீர்கள், அதை மீண்டும் GET செய்கிறீர்கள்; இதில் partial write அல்லது rename வசதி கிடையாது. Backup கருவிகள் இந்த மாதிரியை விரும்புகின்றன, ஏனெனில் ஒரு object முழுமையாக வந்து சேர்ந்திருக்கும் அல்லது வந்திருக்காது.
ஒரு node உங்கள் தரவின் ஒரு நகலை மட்டுமே வைத்திருக்கும். இது நீங்கள் செய்யும் சமரசம். ஒரு VPS விலையில் நீங்கள் கட்டுப்படுத்தும் S3 endpoint-ஐப் பெறுகிறீர்கள், அதே சமயம் cloud provider செய்து வந்த அனைத்து வேலைகளையும் நீங்களே செய்ய வேண்டியிருக்கும்; பழுதடைந்த disk-ஐ மாற்றுவது முதல் server software-ஐ patch செய்வது வரை அனைத்தும் இதில் அடங்கும். இந்த சமரசம் எப்போது பயனுள்ளது என்பதை இறுதிப் பகுதியில் தெளிவாகக் காணலாம்.
ஜூலை 2026-ல் MinIO community edition-ன் நிலை
இதன் அடிப்படையில் நீங்கள் கட்டமைப்பை உருவாக்கும் முன் இந்தப் பகுதியை வாசிக்கவும், ஏனெனில் இதில் சமீபத்தில் மாற்றங்கள் செய்யப்பட்டுள்ளன. மே 2025-ல், MinIO தனது community edition-ன் web console-லிருந்து நிர்வாக அம்சங்களை நீக்கிவிட்டது. உலாவியில் தற்போது object browser மட்டுமே உள்ளது, எனவே buckets மற்றும் access keys ஆகியவற்றை நிர்வகிக்க mc command line client-ஐப் பயன்படுத்த வேண்டும்.
2025-ன் பிற்பகுதியில், MinIO தனது community binaries-ஐ முன்கூட்டியே தொகுத்து (pre-compiled) வெளியிடுவதை நிறுத்திவிட்டது. தற்போதைய project README-ன் படி, community edition source code-ஆக மட்டுமே விநியோகிக்கப்படுகிறது. பழைய download URLs இன்னும் வேலை செய்கின்றன: ஜூலை 2026 நிலவரப்படி, அவை server build RELEASE.2025-09-07T16-13-09Z மற்றும் client build RELEASE.2025-08-13T08-35-41Z ஆகியவற்றை வழங்குகின்றன, மேலும் புதிய community build எதுவும் வெளியாகவில்லை. எனவே, கீழே உள்ள binary உண்மையானது மற்றும் இயங்கக்கூடியது, ஆனால் அது மாற்றங்களுக்கு உட்படுத்தப்படாத நிலையில் (frozen) உள்ளது. செப்டம்பர் 2025-க்கு பிறகு வெளியிடப்பட்ட பாதுகாப்புத் திருத்தங்கள் (security fixes) இதில் இல்லை.
இந்த ஒரு உண்மைதான் இந்த வழிகாட்டியின் பிற பகுதிகளைத் தீர்மானிக்கிறது. இதனால்தான் MinIO இங்கே 127.0.0.1-ல் listen செய்கிறது மற்றும் நீங்கள் கட்டுப்படுத்தும் proxy வழியாக மட்டுமே இணையத்தை அடைகிறது. நீங்கள் பாதுகாப்புத் திருத்தங்களைப் பெற விரும்பினால், source-லிருந்து build செய்யவும். vendor README ஒரு கட்டளையை வழங்குகிறது, go install github.com/minio/minio@latest, இதற்கு Go toolchain தேவைப்படுகிறது மற்றும் இது binary-ஐ ~/go/bin/minio-ல் எழுதும். அந்த binary-ஐ /usr/local/bin/minio-ல் நிறுவுங்கள், மற்ற அனைத்து படிகளும் மாறாமல் அப்படியே இருக்கும்.
MinIO binary-ஐ நிறுவி பதிவிறக்கத்தைச் சரிபார்த்தல்
குறிப்பிட்ட release மற்றும் அதன் checksum-ஐப் பதிவிறக்கவும். -f flag-ஐப் பயன்படுத்தினால், HTTP error ஏற்படும்போது curl அதைத் தவிர்க்கும். இல்லையெனில், error page-ஐ நீங்கள் குறிப்பிட்ட பெயரிலேயே சேமித்துவிடும்; இதனால் பயனர்கள் 404 page-ஐ நிறுவிவிட்டு, அது ஏன் இயங்கவில்லை என்று குழப்பமடைவார்கள்.
cd /tmp
REL=RELEASE.2025-09-07T16-13-09Z
curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/archive/minio.$REL" -o minio
curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/archive/minio.$REL.sha256sum" -o minio.sha256sumஇரண்டு hashes-ஐயும் ஒப்பிடவும், hashes-ஐ மட்டும் ஒப்பிடவும்.
published=$(awk '{print $1}' minio.sha256sum)
downloaded=$(sha256sum minio | awk '{print $1}')
[ "$published" = "$downloaded" ] && echo "checksum ok"இங்கே sha256sum -c minio.sha256sum-ஐப் பயன்படுத்த வேண்டாம். அந்த file-க்குள் hash-க்கு அடுத்துள்ள label minio.RELEASE.2025-09-07T16-13-09Z ஆகும், ஆனால் நாம் பதிவிறக்கத்தை minio என்று சேமித்துள்ளோம். எனவே, -c இல்லாத ஒரு file-ஐத் தேடும். அது No such file or directory என்று காட்டிவிட்டு, பின் WARNING: 1 listed file could not be read என்று முடிக்கும்; இது பதிவிறக்கம் சிதைந்ததாகத் தோன்றும், ஆனால் உண்மையில் அது சிதையவில்லை. label என்பது ஒரு பெயர் மட்டுமே. hash என்பதுதான் உத்தரவாதத்தை வழங்கும் பகுதி.
இந்தச் சரிபார்ப்பு எதை உறுதிப்படுத்துகிறது என்பதில் தெளிவாக இருக்கவும். binary மற்றும் hash ஆகிய இரண்டும் ஒரே vendor-விடமிருந்து ஒரே connection வழியாக வருவதால், பதிவிறக்கம் முழுமையாக உள்ளது என்பதையும், இடையில் அது சேதமடையவோ அல்லது மாற்றப்படவோ இல்லை என்பதையும் மட்டுமே இந்த ஒப்பீடு உறுதிப்படுத்துகிறது. vendor நம்பகமானவரா என்பதை இது உறுதிப்படுத்தாது. அது வேறு ஒரு சிக்கல், அதை எந்த sha256sum command-உம் தீர்க்காது.
sudo install -o root -g root -m 755 minio /usr/local/bin/minio
minio --versionminio --version கட்டளையானது minio version RELEASE.2025-09-07T16-13-09Z மற்றும் சில build வரிகளை வெளியிடும். இங்கே Permission denied என்பது file mode தவறாக இருப்பதைக் குறிக்கும், command not found என்பது /usr/local/bin உங்கள் PATH-ல் இல்லை என்பதைக் குறிக்கும்.
System user மற்றும் data directory-ஐ உருவாக்குதல்
MinIO நெட்வொர்க்கிலிருந்து கோப்புகளைப் பெறுவதால், அதை root பயனர் மூலம் இயக்கக்கூடாது. எனவே, home directory மற்றும் login shell இல்லாத ஒரு பிரத்யேக கணக்கை அதற்கு உருவாக்கவும்.
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 கொண்ட ஒரு system account-ஐ உருவாக்குகிறது; இது சாதாரண பயனர்களுக்கான வரம்பிற்குள் வராது. -M கொடியானது home directory-ஐ உருவாக்காது, ஏனெனில் உள்நுழையாத கணக்கிற்கு அங்கே கோப்புகளைச் சேமிக்க வேண்டிய அவசியம் இல்லை. இதன் முடிவை id minio-user மூலம் சரிபார்க்கவும், மேலும் stat -c '%U %a' /var/lib/minio கட்டளையை இயக்கினால் minio-user 750 என்று திரையில் காட்ட வேண்டும்.
Data directory-க்கு அந்த பயனருக்கு வாசிக்கும் உரிமை (read) மட்டுமல்லாமல், எழுதும் உரிமையும் (write) இருக்க வேண்டும். MinIO முதல்முறை தொடங்கும்போது, தனது configuration-ஐச் சேமிக்க volume-க்குள் .minio.sys என்ற directory-ஐ உருவாக்கும். எனவே, root உரிமையில் உள்ள directory-ஐப் பயன்படுத்தினால், MinIO தொடங்கும்போதே பிழையுடன் நின்றுவிடும், அந்தச் செய்தியின் இறுதியில் permission denied என்று இருக்கும். இதே விதி நீங்கள் இயக்கும் அனைத்து சேவைகளுக்கும் பொருந்தும். இது குறித்து VPS-ல் குறைந்தபட்ச அதிகாரமுள்ள சேவை பயனர்கள் என்ற பகுதியில் விரிவாகக் காணலாம்.
root credentials-ஐ environment file-ல் சேமித்தல்
root credentials அனைத்து bucket-களையும் அணுக அனுமதிக்கும் என்பதால், அவற்றை unit file-ல் வைக்கக்கூடாது; ஏனெனில் unit file-ஐ அனைவரும் வாசிக்க முடியும். முதலில் சரியான mode-உடன் கோப்பை உருவாக்கி, பின் அதில் தகவலை எழுதவும். இதனால் கடவுச்சொல் எக்காலத்திலும் வாசிக்கக்கூடிய கோப்பில் இருக்காது.
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 ஏற்கனவே உள்ள கோப்பை மீண்டும் உருவாக்குவதற்குப் பதிலாக, அதன் உள்ளடக்கத்தை நீக்குகிறது. எனவே, mode 600-ஆகவும், உரிமையாளர் root-ஆகவும் அப்படியே இருக்கும். இது திட்டமிட்டே செய்யப்படுகிறது. systemd, User=-க்கு உரிமைகளை (privileges) குறைப்பதற்கு முன்பே EnvironmentFile-ஐ root-ஆக வாசிக்கிறது. இதன் பொருள், service account தனது சொந்த credentials-ஐ வாசிக்க வேண்டிய அவசியமில்லை என்பதாகும். service இயங்கத் தொடங்கியதும், sudo -u minio-user cat /etc/default/minio மூலம் அதை உறுதிப்படுத்தவும். அந்தக் கட்டளை Permission denied-ஐ அச்சிட வேண்டும்.
MinIO-வை தொடங்குவதற்கு முன் அதன் இரண்டு செயல்பாடுகளைத் தெரிந்துகொள்வது அவசியம். அதன் environment-ல் MINIO_ROOT_USER மற்றும் MINIO_ROOT_PASSWORD இல்லையென்றால், MinIO தொடங்குவதை மறுக்காது. அது ஆவணப்படுத்தப்பட்ட default credentials minioadmin:minioadmin-உடன் தொடங்கும். இதுவே எந்தவொரு scanner-உம் முதலில் முயற்சிக்கும் இணையாகும், மேலும் அவ்வாறு இயங்கும்போது அது முழுமையாகச் சரியாக இயங்குவது போலத் தோன்றும். 8 எழுத்துகளுக்குக் குறைவான கடவுச்சொல் நிராகரிக்கப்படும்: credentials செல்லாதவை என்ற பிழையுடன் MinIO தொடக்கத்திலேயே நின்றுவிடும், ஏனெனில் access key-க்கு குறைந்தபட்சம் 3 எழுத்துகளும், secret key-க்கு குறைந்தபட்சம் 8 எழுத்துகளும் தேவை.
MINIO_VOLUMES என்பது தரவுப் பாதை (data path) மற்றும் MINIO_OPTS என்பது flags-ஐக் கொண்டிருக்கும். 127.0.0.1-ல் பிணைப்பது (binding) என்றால், இந்த VPS-க்கு வெளியே உள்ள எவராலும் S3 API-ஐ இன்னும் அணுக முடியாது என்று பொருள், இதுவே சரியான default ஆகும். பின்னர், certificate-ஐக் கொண்ட proxy வழியாக நீங்கள் அதைத் திட்டமிட்டுத் திறந்து கொள்ளலாம்.
systemd unit-ஐ உருவாக்குதல்
/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-ல் - முன்னொட்டு இல்லை; இது தட்டச்சுப் பிழை அல்ல, ஒரு திட்டமிட்ட முடிவாகும். அந்த dash குறியீடு இருந்தால், கோப்பு விடுபட்டாலும் systemd அதை அலட்சியப்படுத்தி MinIO-ஐத் தொடங்கும். இதனால் கோப்பு நீக்கப்பட்டாலோ அல்லது பாதையில் பிழை இருந்தாலோ, server அமைதியாக minioadmin:minioadmin-ல் இயங்கத் தொடங்கும். dash இல்லையென்றால், கோப்பு விடுபடும்போது MinIO தொடங்குவதற்கு முன்பே unit தோல்வியடையும், மேலும் journalctl -u minio-ல் Failed to load environment files: No such file or directory என்று காட்டும். இயல்புநிலை கடவுச்சொல்லை (default password) அமைதியாக ஏற்கும் server-ஐ விட, தொடங்க மறுக்கும் unit-ஐக் கண்டறிவது மிகவும் எளிது.
$MINIO_VOLUMES மற்றும் $MINIO_OPTS ஆகியவற்றில் மேற்கோள் குறிகள் (quotes) இடப்படவில்லை; ஏனெனில் systemd, மேற்கோள் குறி இல்லாத மாறிகளை whitespace அடிப்படையில் பிரித்து தனித்தனி arguments-ஆக மாற்றும். இதுவே MINIO_OPTS-ல் உள்ள நான்கு சொற்களை minio server-க்கான நான்கு arguments-ஆக மாற்றுகிறது. LimitNOFILE=65536 கோப்பு விளக்கிகளின் (file descriptor) வரம்பை உயர்த்துகிறது; ஏனெனில் ஒவ்வொரு திறந்த இணைப்பும் மற்றும் தரவுக் கோப்பும் ஒரு descriptor-ஐப் பயன்படுத்தும், மேலும் சுமை அதிகரிக்கும்போது 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 என்பதை அச்சிட வேண்டும், மேலும் health endpoint 200 என்று பதிலளிக்க வேண்டும். journalctl -u minio -n 20 --no-pager கட்டளை server எந்த API முகவரியில் listening நிலையில் உள்ளது என்பதைக் காட்டும். unit தொடர்ந்து restart ஆகிக்கொண்டே இருந்தால், systemd முயற்சியைக் கைவிட்டு Start request repeated too quickly என்று log செய்யும்; அதாவது ஒவ்வொரு முயற்சியிலும் MinIO வெளியேறுகிறது என்று பொருள்: இதற்கான காரணம் அந்தச் செய்திக்கு மேலே உள்ள வரிகளில் இருக்கும், எனவே மேலே வாசிக்கவும்.
கூடுதல் பாதுகாப்பு மற்றும் தனிமைப்படுத்தலுக்கு (isolation), [Service] பகுதியில் ProtectSystem=full மற்றும் ProtectHome=true ஆகியவற்றைச் சேர்க்கவும். இவை இரண்டுக்கும் host kernel-லிருந்து mount namespaces தேவைப்படும். OpenVZ அல்லது LXC போன்ற host kernel-ஐப் பகிரும் container virtualisation-ல் இவை தோல்வியடையலாம், அப்போது unit status=226/NAMESPACE என்று பிழையைக் காட்டும். அந்த இரண்டு வரிகளையும் நீக்கினால் அது இயங்கும். இந்த unit ஒரு சாதாரணமானதே, மேலும் VPS-ல் systemd services மற்றும் timers பகுதியில் மற்ற directives பற்றிய தகவல்கள் உள்ளன.
Install mc and prove a round trip
The MinIO client is mc. Do not install it with apt install mc. That package is Midnight Commander, a file manager unrelated to MinIO.
cd /tmp
curl -fsSL https://dl.min.io/client/mc/release/linux-amd64/mc -o mc
curl -fsSL https://dl.min.io/client/mc/release/linux-amd64/mc.sha256sum -o mc.sha256sum
[ "$(awk '{print $1}' mc.sha256sum)" = "$(sha256sum mc | awk '{print $1}')" ] && echo "checksum ok"
sudo install -o root -g root -m 755 mc /usr/local/bin/mcRegister the server as an alias, then move an object through it.
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 should list hello.txt with its size, and mc cat should print hello object storage. That round trip is the real proof the server works, because it makes the same signed S3 requests every other client will make. mc admin info local prints the server status if you want a second opinion.
Run one more check now, while the box is still empty.
mc alias set defaultcheck http://127.0.0.1:9000 minioadmin minioadminThis command must fail. If it succeeds, the environment file never reached the process and your server is running on the default credentials. Fix that before anything else touches the machine.
mc stores aliases in ~/.mc/config.json in plain text, so those credentials sit in the home directory of whoever ran the command. Running mc under sudo puts the root credentials in /root/.mc/config.json. Keep the root alias on one administrator account and give every application its own key.
ஒரு பொருளை presigned URL மூலம் பகிர்தல்
Presigned URL என்பது signature மற்றும் காலாவதி நேரம் இணைக்கப்பட்ட ஒரு சாதாரண HTTPS இணைப்பு ஆகும். இந்த இணைப்பை வைத்திருக்கும் எவரும், கணக்கு அல்லது client தேவையின்றி அந்த ஒரு பொருளைப் பதிவிறக்கம் செய்ய முடியும்.
mc share download --expire 12h local/backups/hello.txtஇதன் வெளியீட்டில் query string-ல் X-Amz-Signature மற்றும் X-Amz-Expires ஆகியவை இடம்பெறும். இதில் இரண்டு விஷயங்கள் பயனர்களை ஆச்சரியப்படுத்தலாம். நீங்கள் பயன்படுத்திய alias-ல் உள்ள endpoint-ஐக் கொண்டே இந்த இணைப்பு உருவாக்கப்படுகிறது; எனவே 127.0.0.1-ல் உள்ள ஒரு alias, அந்த இயந்திரத்தால் மட்டுமே திறக்கக்கூடிய இணைப்பை உருவாக்கும். நீங்கள் பிறருக்கு அனுப்ப விரும்பும் இணைப்புகளுக்கு உங்கள் public hostname-ல் இரண்டாவது alias-ஐ உருவாக்கவும். மேலும், இதில் revoke பொத்தான் கிடையாது. Signature காலாவதியாகும் வரை அது செல்லுபடியாகும் என்பதால், குறுகிய காலாவதி நேரத்தை அமைப்பதே நீங்கள் கட்டுப்படுத்தக்கூடிய ஒரே வழியாகும். S3 signature format அனுமதிக்கும் அதிகபட்ச கால அளவு ஏழு நாட்கள் மட்டுமே.
restic-க்கு தனிப்பட்ட key மற்றும் bucket-ஐ ஒதுக்குதல்
root credentials மூலம் அனைத்து bucket-களையும் படிக்கவும் நீக்கவும் முடியும் என்பதால், backup job-க்கு அவற்றை வழங்கக்கூடாது. ஒரு bucket-ஐ உருவாக்கி, அந்த bucket-க்கு மட்டும் கட்டுப்படுத்தப்பட்ட policy-ஐ அமைத்து, அதற்குரிய user-ஐ உருவாக்கவும்.
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 policy-ஐப் பயன்படுத்தினால் ஒரு command-ஐக் குறைக்கலாம், ஆனால் அது server-ல் உள்ள அனைத்து bucket-களுக்கும் முழு அணுகலை வழங்கிவிடும். மேலே உள்ள policy-ல் bucket-ன் பெயர் இரண்டு முறை குறிப்பிடப்பட்டுள்ளது: arn:aws:s3:::restic என்பது bucket-ஐப் பட்டியலிடவும், arn:aws:s3:::restic/* என்பது அதற்குள் உள்ள object-களுக்காகவும் பயன்படுத்தப்படுகிறது. S3-ல் bucket மற்றும் அதன் object-கள் தனித்தனி வளங்கள் (resources) என்பதால், ஏதேனும் ஒன்றை மட்டும் குறிப்பிடும் policy சரியாகச் செயல்படாது; இது client-ல் கோளாறு இருப்பது போன்ற பிழையைக் காட்டும்.
அணுகல் வரம்பை நம்பும் முன் அதைச் சோதிக்கவும்.
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 பிழையுடன் தோல்வியடையும். சோதிக்கப்படாத policy என்பது வெறும் யூகமே.
இப்போது restic-ஐ அந்த bucket-க்குச் சுட்டிக்காட்டவும். restic தனது S3 credentials-ஐ நிலையான AWS environment variables-லிருந்து பெற்றுக்கொள்ளும், எனவே restic-க்கெனத் தனி credential file தேவையில்லை.
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 கட்டளை repository password-ஐக் கேட்கும். அந்த password repository-ஐ encrypt செய்வதால், MinIO-வில் ciphertext மட்டுமே சேமிக்கப்படும்; password-ஐத் தொலைத்தால் backup-ஐ மீட்க முடியாது. systemd timer மூலம் இயங்கும் backup-க்கு password உள்ளிட terminal இருக்காது, எனவே திட்டமிடப்பட்ட backup-களுக்கு RESTIC_PASSWORD_FILE-ஐ mode 600 கொண்ட file-ஆக அமைக்கவும்.
மேலே உள்ள எந்தக் கட்டளையை விடவும், இந்த ஒரு placement விதி முக்கியமானது. தரவுகள் இருக்கும் அதே VPS-ல் restic repository-ஐ வைத்திருப்பது, ஒரு மோசமான rm-லிருந்து மட்டுமே உங்களைக் காக்கும், வேறு எதற்கும் உதவாது. MinIO node வேறொரு machine-ல் இருக்க வேண்டும், முடிந்தால் வேறொரு region-ல் இருப்பது சிறந்தது. restic backups on a VPS பகுதி, இதற்கான scheduling மற்றும் retention முறைகளை விளக்குகிறது.
Nginx மூலம் TLS termination செய்தல்
MinIO localhost-ல் இயங்குவதால், Nginx பொது முகப்பாக (public surface) செயல்படுகிறது. certbot மற்றும் nginx மூலம் Let's Encrypt certificates பெறுதல் பகுதியில் விவரிக்கப்பட்டுள்ளபடி முதலில் certificate-ஐப் பெறவும், பின்னர் இந்த server block-ஐப் பயன்படுத்தவும்.
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 body வரம்பை நீக்குகிறது; இல்லையெனில், MinIO கோரிக்கையைப் பெறுவதற்கு முன்பே 413 Request Entity Too Large பிழையுடன் பெரிய uploads நிராகரிக்கப்படும். proxy_request_buffering off பதிவேற்றங்களை நேரடியாகச் செலுத்துகிறது (stream), ஏனெனில் இயல்பான நிலையில் முழு கோரிக்கையும் தற்காலிகக் கோப்பில் சேமிக்கப்படும், இதனால் பெரிய object-களுக்கு இருமடங்கு disk இடம் தேவைப்படும். proxy_set_header Host $http_host நுணுக்கமானது: S3 signature என்பது Host header-ஐ உள்ளடக்கியது, எனவே அதை மாற்றியமைக்கும் proxy, ஒவ்வொரு கோரிக்கையையும் SignatureDoesNotMatch பிழையுடன் தோல்வியடையச் செய்யும், அதே சமயம் access log-ல் கோரிக்கை சரியாக வருவது போலத் தெரியும்.
MinIO-விடம் அதன் பொதுப் பெயரைத் தெரிவிக்கவும், அப்போதுதான் அது உருவாக்கும் இணைப்புகள் localhost-க்கு பதிலாக proxy-ஐச் சுட்டிக்காட்டும்.
echo 'MINIO_SERVER_URL=https://s3.example.com' | sudo tee -a /etc/default/minio
sudo systemctl restart minioFirewall-ஐ எளிமையாக வைத்திருக்கவும். SSH மற்றும் HTTPS-ஐ மட்டும் அனுமதிக்கவும், 9000 மற்றும் 9001 ports-களுக்கு எந்த விதியையும் (rule) சேர்க்க வேண்டாம். ஏனெனில் 127.0.0.1-ல் பிணைக்கப்பட்ட (bound) முகவரி, firewall விதியைப் பொருட்படுத்தாமல் மற்ற கணினிகளிலிருந்து அணுக முடியாததாக இருக்கும். VPS-ல் ufw firewall அடிப்படைகள் பகுதியில் இதற்கான கட்டளைகள் உள்ளன.
ஒற்றை-node MinIO எப்போது போதுமானது, எப்போது உண்மையான S3 தேவை
இங்கு ஒற்றை-node என்பது parity இல்லாத ஒரு drive-ஐக் குறிக்கிறது. MinIO-வின் சொந்த ஆவணங்கள், இந்த அமைப்பை சோதனை செய்வதற்கும், அதிகாரம் சார்ந்த தேவை இல்லாத சிறிய வேலைகளுக்கும் (workloads) ஏற்றது என்று குறிப்பிடுகின்றன. இந்த deployment-ல் இரண்டாவது நகல் (copy) இல்லை, எனவே ஒவ்வொரு object-ன் நீடித்து நிலைக்கும் தன்மை (durability) என்பது ஒரு VPS disk-ன் நீடித்து நிலைக்கும் தன்மையே ஆகும். Distributed erasure-coded backend-ஐ அடிப்படையாகக் கொண்ட அம்சங்களான bucket replication மற்றும் object locking போன்றவை பல-drive கொண்ட deployment-களுக்கே உரியவை; எனவே இந்த அமைப்பில் மாறாத retention policy-ஐ யாருக்கும் உறுதி அளிக்காதீர்கள்.
மற்றொரு பகுதியில் உள்ள இரண்டாவது VPS-ல் restic target-ஆகவும், மேம்பாட்டுப் பணிகள் மற்றும் CI artifacts-க்கான S3 endpoint-ஆகவும் இது சிறப்பாகச் செயல்படும்; இதில் ஒரு bucket-ஐ இழந்தால், அதை மீண்டும் உருவாக்குவதைத் தவிர வேறு பாதிப்பு இருக்காது. சிறிய application-களில் பயனர் பதிவேற்றங்களுக்கும் இது பொருத்தமானது, ஆனால் உங்களிடம் முறையான மீட்புத் திட்டம் (recovery plan) இருக்க வேண்டும் மற்றும் அதை நீங்கள் ஏற்கனவே சோதனை செய்திருக்க வேண்டும்.
ஒரு ஒப்பந்தம் அல்லது ஒழுங்குமுறை ஆணையம் object lock அல்லது பல-பிராந்திய நீடித்து நிலைக்கும் தன்மையைக் (multi-region durability) கோரும்போது, அல்லது disk நிறைந்ததால் அதிகாலை 03:00 மணிக்கு உங்களுக்கு அழைப்பு (page) வருவதை நீங்கள் விரும்பவில்லை என்றால், நிர்வகிக்கப்படும் (managed) S3-ஐத் தேர்ந்தெடுக்கவும். Frozen build என்பது மற்றொரு உண்மையான காரணம். ஜூலை 2026 நிலவரப்படி, முன்-தொகுக்கப்பட்ட (pre-compiled) community binary செப்டம்பர் 2025-ல் இருந்து புதுப்பிக்கப்படவில்லை மற்றும் அதற்கு எந்தத் திருத்தங்களும் வழங்கப்படுவதில்லை; எனவே அதை இயக்குவது என்றால், அந்த நிலையை ஏற்றுக்கொள்வது அல்லது source-லிருந்து நீங்களே build செய்து திட்டத்தைப் பராமரிப்பது என்று அர்த்தம்.
ஒரு எல்லையைத் தெளிவாகக் குறிப்பிடுவது அவசியம், ஏனெனில் இது அடிக்கடி எழுகிறது. Object storage என்பது ஒரு database அல்ல. ஒவ்வொரு எழுதும் செயலும் (write) முழு object-ஐயும் மாற்றீடு செய்கிறது, எனவே S3 bucket-ல் உள்ள ஒரு live SQL file மெதுவாகவும் பாதுகாப்பற்றதாகவும் இருக்கும். Database-ஐ local disk-ல் வைத்துக்கொண்டு, அதை bucket-க்குள் backup எடுங்கள்: VPS-ல் SQLite-ஐ production-ல் இயக்குதல் அந்தப் பிரிப்பைப் பற்றி விவரிக்கிறது.
தோல்வி முறைகளும் நீங்கள் காணும் செய்திகளும்
systemctl enable --now-க்கு பிறகு unit தோல்வியடைகிறது. journalctl -u minio -n 30 --no-pager-ஐ வாசிக்கவும். Failed to load environment files: No such file or directory என்பது /etc/default/minio விடுபட்டுள்ளது அல்லது அதன் பாதை unit-ல் தவறாகக் குறிப்பிடப்பட்டுள்ளது என்று பொருள். permission denied என முடியும் செய்தி, service account-ஆல் தரவு அடைவை (data directory) எழுத முடியவில்லை என்று பொருள், எனவே stat -c '%U' /var/lib/minio/data கட்டளை minio-user-ஐ வெளியிடுகிறதா என்று சரிபார்க்கவும்.
minioadmin:minioadmin இன்னும் உள்நுழைகிறது. environment file செயல்முறைக்கு (process) சென்றடையவில்லை. unit-ல் EnvironmentFile=/etc/default/minio உள்ளதா என்பதை உறுதிப்படுத்தவும், sudo systemctl daemon-reload-ஐ இயக்கவும், பின் service-ஐ மறுதொடக்கம் செய்யவும். MinIO அதன் root நற்சான்றிதழ்களை (credentials) தொடக்கத்தின்போது ஒருமுறை மட்டுமே வாசிக்கும், எனவே மறுதொடக்கம் செய்யாமல் அந்த கோப்பைத் திருத்துவதால் எந்த மாற்றமும் ஏற்படாது.
தொடக்கத்தின்போது Address already in use. வேறொரு செயல்முறை 9000 port-ஐப் பிடித்துள்ளது. MinIO-வின் port-ஐ மாற்றுவதற்கு முன் sudo ss -ltnp | grep :9000 மூலம் அதைத் தேடிக் கண்டறியவும்.
proxy வழியாக 1 MB-க்கு மேலான பதிவேற்றங்கள் தோல்வியடைகின்றன. nginx 413 Request Entity Too Large என்று பதிலளித்துள்ளது, MinIO கோரிக்கையைப் பெறவே இல்லை. server block-ல் client_max_body_size 0-ஐ அமைக்கவும்.
SignatureDoesNotMatch. secret key தவறாக இருக்கலாம், அல்லது client-க்கும் MinIO-வுக்கும் இடையில் ஏதோ ஒன்று Host header-ஐ மாற்றியிருக்கலாம், இது கையொப்பத்தால் (signature) பாதுகாக்கப்படுகிறது.
RequestTimeTooSkewed. client அல்லது server-ல் உள்ள கடிகார நேரம் தவறாக உள்ளது. ஒவ்வொரு S3 கோரிக்கையும் ஒரு நேர முத்திரையைக் (timestamp) கொண்டிருக்கும், 15 நிமிட கால இடைவெளிக்கு வெளியே இருந்தால் அது நிராகரிக்கப்படும். timedatectl-ஐச் சரிபார்த்து, நேர ஒத்திசைவு (time synchronisation) செயல்பாட்டில் உள்ளதா என்பதை உறுதிப்படுத்தவும்.
உங்களுக்குத் தெரிந்த bucket-ல் Access Denied. key வேறொரு bucket-க்கு ஒதுக்கப்பட்டுள்ளது. mc admin policy info local restic-rw மூலம் கொள்கை (policy) உண்மையில் எதை அனுமதிக்கிறது என்பதை அச்சிட்டு, resource வரிகளில் உள்ள bucket பெயருடன் ஒப்பிட்டுப் பார்க்கவும்.
FAQ
ஒற்றை-node MinIO உண்மையான பேக்கப்களுக்கு போதுமானதா?
நீங்கள் பாதுகாக்கும் தரவுகள் இருக்கும் machine-க்கு வெளியே, வேறொரு machine-ல் restic target-ஆக இயங்கினால் இது போதுமானது. இதுவே உங்கள் ஒரே நகல் என்றால், இது போதுமானதல்ல. ஒற்றை-drive deployment-ல் parity கிடையாது, எனவே MinIO-க்குள் இரண்டாவது நகல் இருக்காது. அந்த VPS disk-ல் தரவு இழப்பு ஏற்பட்டால், objects அனைத்தும் அழிந்துவிடும். வேறொரு இடத்தில் இரண்டாவது target-ஐ வைத்திருங்கள். செயல்முறை சரியாக வேலை செய்கிறதா என்பதை உறுதிப்படுத்த, இரண்டிலிருந்தும் குறைந்தது ஒருமுறை restore செய்து பாருங்கள்.
MinIO-வின் checksum கோப்பில் sha256sum -c ஏன் தோல்வியடைகிறது?
ஏனெனில், அந்த கோப்பிற்குள் இருக்கும் hash-க்கு பின்னால் உள்ள label, minio.RELEASE.2025-09-07T16-13-09Z என்ற release-ஐக் குறிக்கிறது. ஆனால் நீங்கள் தரவிறக்கம் செய்த கோப்பு பொதுவாக minio என்று அழைக்கப்படுகிறது. sha256sum -c, checksum கோப்பிற்குள் குறிப்பிடப்பட்டுள்ள பெயரைக் கொண்ட கோப்பைத் தேடுகிறது. அது கிடைக்காததால், No such file or directory மற்றும் WARNING: 1 listed file could not be read பிழைகளைத் தெரிவிக்கிறது. தரவிறக்கம் சரியாகத்தான் உள்ளது. hash strings-ஐ நேரடியாக ஒப்பிட்டுப் பாருங்கள்; அந்த label-ஐப் புறக்கணித்துவிடுங்கள், அதற்கு பாதுகாப்பு முக்கியத்துவம் ஏதுமில்லை.
MinIO admin web console எங்கே போனது?
MinIO, மே 2025-ல் community edition console-லிருந்து நிர்வாக அம்சங்களை நீக்கிவிட்டது. இப்போது web interface-ல் object browser மட்டுமே உள்ளது. Buckets மற்றும் users இப்போது mc client மூலம், mc admin user add மற்றும் mc admin policy attach போன்ற கட்டளைகளைப் பயன்படுத்தி நிர்வகிக்கப்படுகின்றன. இதுவே community edition-ல் ஆதரிக்கப்படும் முறையாகும், தற்காலிகத் தீர்வு அல்ல. இதனால்தான் இந்த வழிகாட்டி அனைத்தையும் command line மூலமே செய்கிறது.
restic-ஐ S3 backend-ஆக MinIO-வுடன் எவ்வாறு இணைப்பது?
AWS_ACCESS_KEY_ID மற்றும் AWS_SECRET_ACCESS_KEY ஆகியவற்றை MinIO access key மற்றும் அதன் secret-க்கு அமைக்கவும். பின், s3:https://s3.example.com/restic என்ற வடிவத்தில் repository string-ஐப் பயன்படுத்தவும். இதில் கடைசிப் பகுதி bucket-ன் பெயராக இருக்க வேண்டும். முதலில் mc mb மூலம் bucket-ஐ உருவாக்கவும், ஏனெனில் ஒரு குறிப்பிட்ட bucket-க்கு மட்டும் அனுமதி கொண்ட key-ஆல் புதிய bucket-களை உருவாக்க முடியாது. restic பதிவேற்றுவதற்கு முன்பே தனது சொந்த repository password மூலம் அனைத்தையும் encrypt செய்கிறது. எனவே, MinIO ciphertext-ஐ மட்டுமே சேமிக்கிறது, உங்கள் கோப்புகளை அது பார்க்க முடியாது.
MinIO-வை nginx-க்கு பின்னால் இயக்க வேண்டுமா?
Client ஒரே machine-ல் இல்லாதபோது உங்களுக்கு TLS (transport layer security) தேவை. ஏனெனில் S3 credentials மற்றும் object தரவுகள் இரண்டும் request-க்குள் பயணிக்கின்றன. certbot-லிருந்து பெறப்பட்ட certificate-உடன் port 443-ல் ஒரு proxy-ஐப் பயன்படுத்துவது இதற்கான எளிமையான வழியாகும். இது certificate புதுப்பித்தலை MinIO-விடமிருந்து தனித்து வைக்கிறது. --certs-dir-ஐ public.crt மற்றும் private.key இருக்கும் directory-க்கு சுட்டிக்காட்டினால், MinIO-வே TLS-ஐக் கையாள முடியும். ஆனால், புதுப்பிக்கப்பட்ட private key-ஐ வாசிக்க service account-க்கு அனுமதி வழங்க வேண்டும். இது அதே முடிவைப் பெற கூடுதல் வேலைப்பளுவாகும்.