VPSలో MinIOతో స్వయంగా నిర్వహించే S3 object storage
Ubuntu 24.04లో ఒక VPSపై MinIOను అమలు చేయండి: ధృవీకరించిన binary, systemd unit, mc ప్రాథమికాలు, presigned URLs, restic backup targetను ఈ guide చూపిస్తుంది.
MinIOతో స్వయంగా నిర్వహించే object storage మీకు అందించేవి
MinIO అనేది Amazon S3 APIకు అనుకూలంగా పనిచేసే, స్వయంగా నిర్వహించే object storage. restic లేదా ఏదైనా S3 SDKను మీ స్వంత server వైపు చూపించి, ఒక endpoint settingను మార్చండి. అప్పుడు clientకు తేడా తెలియదు. ఈ guide Ubuntu 24.04పై ఒకే 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 toolsకు ఈ నమూనా అనుకూలంగా ఉంటుంది. ఎందుకంటే object పూర్తిగా చేరుతుంది లేదా అసలు చేరదు.
ఒక node మీ data యొక్క ఒక copyని మాత్రమే ఉంచుతుంది. మీరు చేసే మార్పిడి ఇదే. VPS ఖర్చుతో మీరు నియంత్రించే S3 endpointను పొందుతారు. అదే సమయంలో cloud provider ఇంతకు ముందు నిర్వహించిన ప్రతి పనినీ మీరు స్వయంగా నిర్వహించాలి. విఫలమైన diskను భర్తీ చేయడం నుంచి server softwareను patch చేయడం వరకు ఇవన్నీ ఇందులో ఉంటాయి. ఈ మార్పిడి ఎప్పుడు సముచితమో చివర్లోని విభాగం స్పష్టంగా వివరిస్తుంది.
2026 జూలైలో MinIO కమ్యూనిటీ ఎడిషన్ స్థితి
దీనిపై ఆధారపడి నిర్మాణం ప్రారంభించే ముందు ఈ భాగాన్ని చదవండి, ఎందుకంటే ఇది ఇటీవల మారింది. 2025 మేలో MinIO కమ్యూనిటీ ఎడిషన్లోని వెబ్ కన్సోల్ నుంచి పరిపాలనా ఫీచర్లను తొలగించింది. బ్రౌజర్లో ఇప్పుడు మిగిలింది object browser మాత్రమే. అందువల్ల buckets మరియు access keys ను mc command line client తో నిర్వహించాలి.
2025లో తర్వాతి కాలంలో MinIO ముందుగా కంపైల్ చేసిన కమ్యూనిటీ binaries ను ప్రచురించడం నిలిపివేసింది. ఇప్పుడు ప్రాజెక్ట్ README ప్రకారం, కమ్యూనిటీ ఎడిషన్ source code రూపంలో మాత్రమే పంపిణీ అవుతుంది. పాత download URLs ఇప్పటికీ పనిచేస్తున్నాయి. 2026 జూలై నాటికి అవి server build RELEASE.2025-09-07T16-13-09Z మరియు client build RELEASE.2025-08-13T08-35-41Z ను అందిస్తున్నాయి. కొత్త కమ్యూనిటీ build ఏదీ విడుదల కాలేదు. కాబట్టి దిగువ binary వాస్తవమైనదే, అది పనిచేస్తుంది, కానీ అది frozen. 2025 సెప్టెంబర్ తర్వాత ప్రచురించిన security fixes అందులో లేవు.
ఈ ఒక్క విషయం ఈ guide లోని మిగిలిన భాగాన్ని నిర్ణయిస్తుంది. అందుకే ఇక్కడ MinIO 127.0.0.1 పై మాత్రమే listening చేస్తుంది. మీరు నియంత్రించే proxy ద్వారా మాత్రమే internet ను చేరుతుంది. మీరు fixes ను అనుసరించాలనుకుంటే source code నుంచి build చేయండి. Vendor README లో go install github.com/minio/minio@latest అనే ఒకే command ఉంది. దీనికి Go toolchain అవసరం. ఇది binary ను ~/go/bin/minio లో రాస్తుంది. ఆ binary ను /usr/local/bin/minio కు install చేయండి. ఇక్కడి మిగిలిన ప్రతి దశలో మార్పు ఉండదు.
MinIO binaryని ఇన్స్టాల్ చేసి, డౌన్లోడ్ను ధృవీకరించండి
స్థిరపరచిన release మరియు దానికి ప్రచురించిన checksumను డౌన్లోడ్ చేయండి. -f flag, HTTP లోపం వచ్చినప్పుడు curl విఫలమయ్యేలా చేస్తుంది. దాంతో, మీరు అడిగిన పేరుతో error page సేవ్ కాదు. లేకపోతే కొందరు 404 pageను ఇన్స్టాల్ చేసి, అది ఎందుకు execute కావడం లేదో ఆశ్చర్యపడుతుంటారు.
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రెండు hashలను పోల్చండి. Hashలను మాత్రమే పోల్చండి.
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 కేవలం ఒక పేరు మాత్రమే. హాష్నే హామీని అందించే భాగం.
ఈ తనిఖీ ఏమి నిరూపిస్తుందో స్పష్టంగా తెలుసుకోండి. 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 linesను చూపిస్తుంది. ఇక్కడ Permission denied అంటే mode తప్పుగా ఉందని అర్థం. command not found అంటే /usr/local/bin మీ PATHలో లేదని అర్థం.
సిస్టమ్ వినియోగదారుని మరియు డేటా డైరెక్టరీని సృష్టించండి
MinIO నెట్వర్క్ నుంచి అప్లోడ్లను స్వీకరిస్తుంది. అందువల్ల దీన్ని rootగా అమలు చేయకూడదు. home directory మరియు login shell లేని accountను దీనికి కేటాయించండి.
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ని దాటవేస్తుంది. ఎందుకంటే ఎప్పుడూ login చేయని accountకు home directoryలో ఉంచాల్సినది ఏమీ ఉండదు. ఫలితాన్ని id minio-userతో తనిఖీ చేయండి. అలాగే stat -c '%U %a' /var/lib/minioతోనూ తనిఖీ చేయండి. అది minio-user 750ని ప్రింట్ చేయాలి.
డేటా డైరెక్టరీని ఆ వినియోగదారు రాయగలగాలి. చదవడం మాత్రమే సాధ్యమైతే సరిపోదు. మొదటి ప్రారంభ సమయంలో MinIO తన configurationను ఉంచడానికి volumeలో .minio.sys directoryని సృష్టిస్తుంది. అందువల్ల root యాజమాన్యంలోని directory ఉంటే, startup సమయంలో MinIO నిష్క్రమిస్తుంది. సందేశం permission deniedతో ముగుస్తుంది. ఈ విధానంలో మీరు అమలు చేసే ప్రతి serviceకు ఇదే నియమం వర్తిస్తుంది. VPSలో కనిష్ఠ-అధికార service వినియోగదారులు దీన్ని సమగ్రంగా వివరిస్తుంది.
root ఆధారాలను environment ఫైల్లో ఉంచండి
root ఆధారాలతో ప్రతి bucketను తెరవవచ్చు. అందువల్ల అవి అందరికీ చదవగలిగే unit fileలో ఉండకూడదు. ముందుగా సరైన modeతో ఫైల్ను సృష్టించండి. తర్వాత అందులో విషయాన్ని రాయండి. ఇలా చేస్తే password ఒక్క క్షణం కూడా చదవగలిగే ఫైల్లో ఉండదు.
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 చేస్తుంది. అందువల్ల mode 600గా, owner rootగా అలాగే ఉంటాయి. ఇది ఉద్దేశపూర్వకమే. privilegesను User=కు తగ్గించే ముందు systemd, EnvironmentFileను rootగా చదువుతుంది. కాబట్టి service accountకు తన ఆధారాలను తానే చదవాల్సిన అవసరం ఉండదు. service నడుస్తున్న తర్వాత, sudo -u minio-user cat /etc/default/minioతో దీనిని నిర్ధారించండి. ఆ command తప్పనిసరిగా Permission deniedను ప్రింట్ చేయాలి.
MinIOను ప్రారంభించే ముందు దాని రెండు ప్రవర్తనలను తెలుసుకోవాలి. దాని environmentలో MINIO_ROOT_USER మరియు MINIO_ROOT_PASSWORD ఏవీ లేకపోయినా, MinIO ప్రారంభించడాన్ని నిరాకరించదు. ఇది documentationలో పేర్కొన్న default credentials minioadmin:minioadminతో ప్రారంభమవుతుంది. ఏ scanner అయినా ముందుగా ప్రయత్నించే మొదటి జత ఇదే. అలా పనిచేస్తున్నప్పటికీ ఇది పూర్తిగా ఆరోగ్యంగా ఉన్నట్లు కనిపిస్తుంది. అయితే 8 characters కంటే తక్కువ passwordను ఇది తిరస్కరిస్తుంది. credentials చెల్లవని errorతో MinIO startup సమయంలోనే exit అవుతుంది. access keyకి కనీసం 3 characters, secret keyకి కనీసం 8 characters అవసరం.
MINIO_VOLUMES data path. MINIO_OPTS flagsను కలిగి ఉంటుంది. 127.0.0.1కు bind చేయడం వల్ల ఈ VPS వెలుపల ఏదీ ఇంకా S3 APIను చేరుకోలేరు. ఇది సరైన default. తర్వాత certificate కలిగి ఉన్న proxy ద్వారా మాత్రమే దీన్ని ఉద్దేశపూర్వకంగా తెరవండి.
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 పై ప్రారంభంలో - లేదు. ఇది టైపో కాదు, ఉద్దేశపూర్వక నిర్ణయం. dash ఉంటే, systemd కనిపించని ఫైల్ను పట్టించుకోకుండా MinIO ను ప్రారంభిస్తుంది. అందువల్ల తొలగించబడిన ఫైల్ లేదా తప్పుగా వ్రాసిన path వల్ల minioadmin:minioadmin పై నడుస్తున్న server మీకు తెలియకుండానే ప్రారంభమవుతుంది. dash లేకపోతే, MinIO అమలయ్యే ముందే కనిపించని file కారణంగా unit విఫలమవుతుంది. అప్పుడు journalctl -u minio, Failed to load environment files: No such file or directory ను చూపిస్తుంది. నిశ్శబ్దంగా default password ను అంగీకరించే server కంటే, ప్రారంభించడానికి నిరాకరించే unit ను గుర్తించడం చాలా సులభం.
$MINIO_VOLUMES మరియు $MINIO_OPTS ఉద్దేశపూర్వకంగా quotes లేకుండా ఉన్నాయి. ఎందుకంటే systemd quotes లేని variables ను whitespace ఆధారంగా వేర్వేరు arguments గా విభజిస్తుంది. అందువల్ల MINIO_OPTS లోని నాలుగు పదాలు minio server కు నాలుగు arguments గా మారతాయి. LimitNOFILE=65536 file descriptor పరిమితిని పెంచుతుంది. ప్రతి తెరిచిన connection మరియు ప్రతి తెరిచిన data file కు ఒక descriptor అవసరం. Load సమయంలో default పరిమితి 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 కు సమాధానం ఇవ్వాలి. Server ఏ API address పై listen చేస్తుందో journalctl -u minio -n 20 --no-pager చూపిస్తుంది. Unit పదేపదే restart అవుతుంటే, systemd ప్రయత్నాలను ఆపి Start request repeated too quickly ను log చేస్తుంది. అంటే ప్రతి ప్రయత్నంలోనూ MinIO exit అవుతోంది. కారణం ఆ సందేశానికి ముందు ఉన్న lines లో కనిపిస్తుంది, కాబట్టి పైకి చదవండి.
మరింత isolation కోసం [Service] section కు ProtectSystem=full మరియు ProtectHome=true ను జోడించండి. రెండింటికీ host kernel నుంచి mount namespaces అవసరం. OpenVZ లేదా LXC వంటి host kernel ను share చేసే container virtualisation లో అవి విఫలమవుతాయి. అప్పుడు unit status=226/NAMESPACE ను చూపిస్తుంది. ఆ రెండు lines ను తొలగిస్తే unit ప్రారంభమవుతుంది. ఈ unit సాధారణ unit మాత్రమే. మిగిలిన directives కోసం VPS లో systemd services మరియు timers చూడండి.
mcని ఇన్స్టాల్ చేసి, రౌండ్ ట్రిప్ను నిర్ధారించండి
MinIO client పేరు mc. దీన్ని apt install mcతో ఇన్స్టాల్ చేయవద్దు. ఆ ప్యాకేజీ MinIOకు సంబంధం లేని ఫైల్ మేనేజర్ అయిన Midnight Commander.
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/mcసర్వర్ను aliasగా నమోదు చేసి, ఆపై ఒక objectను దాని ద్వారా తరలించండి.
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ను ముద్రించాలి. ఈ రౌండ్ ట్రిప్ సర్వర్ సరిగ్గా పనిచేస్తోందనడానికి నిజమైన నిర్ధారణ. ఎందుకంటే ప్రతి ఇతర client చేసే signed S3 requestsనే ఇది చేస్తుంది. రెండోసారి నిర్ధారించాలనుకుంటే, mc admin info local సర్వర్ స్థితిని ముద్రిస్తుంది.
ఇప్పుడు, ఈ box ఇంకా ఖాళీగా ఉన్నప్పుడే మరో తనిఖీ చేయండి.
mc alias set defaultcheck http://127.0.0.1:9000 minioadmin minioadminఈ command విఫలమవ్వాలి. ఇది విజయవంతమైతే, environment file processకు చేరలేదు. అందువల్ల మీ సర్వర్ default credentialsతో నడుస్తోంది. మరే ఇతర పని ఈ machineపై ప్రారంభమయ్యే ముందు దీన్ని సరిచేయండి.
mc aliasesను ~/.mc/config.jsonలో plain textగా నిల్వ చేస్తుంది. అందువల్ల ఆ credentials commandను అమలు చేసిన వ్యక్తి home directoryలో ఉంటాయి. sudo కింద mcను అమలు చేస్తే, root credentials /root/.mc/config.jsonలో నిల్వ అవుతాయి. root aliasను ఒక administrator accountలో మాత్రమే ఉంచండి. ప్రతి applicationకు దాని స్వంత key ఇవ్వండి.
presigned URLతో ఒక objectను అందించండి
presigned URL అనేది signature మరియు expiry జతచేయబడిన సాధారణ HTTPS link. ఈ link ఉన్న ఎవరైనా account లేదా client లేకుండానే ఆ ఒక్క objectను పొందవచ్చు.
mc share download --expire 12h local/backups/hello.txtOutputలో query stringలో X-Amz-Signature మరియు X-Amz-Expires ఉంటాయి. దీనిలోని రెండు విషయాలు చాలామందికి ఆశ్చర్యం కలిగిస్తాయి. Link మీరు ఉపయోగించిన aliasలోని endpoint ఆధారంగా రూపొందుతుంది. అందువల్ల 127.0.0.1 పై ఉన్న alias, ఈ machine మాత్రమే తెరవగల linkను ఉత్పత్తి చేస్తుంది. మీరు పంపించాలనుకునే links కోసం మీ public hostnameపై రెండవ aliasను సృష్టించండి. దీనికి revoke button ఉండదు. Signature expiry వచ్చే వరకు చెల్లుబాటులో ఉంటుంది. అందువల్ల మీ వద్ద ఉన్న ఏకైక నియంత్రణ short expiry మాత్రమే. S3 signature format అనుమతించే గరిష్ఠ వ్యవధి 7 days.
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 పేరు ఉద్దేశపూర్వకంగా రెండుసార్లు ఉంది: bucketను list చేయడానికి arn:aws:s3:::resticగా ఒకసారి, అందులోని objects కోసం arn:aws:s3:::restic/*గా మరోసారి. S3లో bucket మరియు దాని objects వేర్వేరు 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 ప్రామాణిక AWS environment variables నుంచి S3 credentialsను చదువుతుంది. అందువల్ల restic-specific 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 ప్రారంభించే runకు టైప్ చేయడానికి terminal ఉండదు. అందువల్ల scheduled backups కోసం RESTIC_PASSWORD_FILEను mode 600 ఉన్న fileకు సెట్ చేయండి.
పై commands అన్నింటికంటే ఒక placement rule ముఖ్యమైనది. రక్షించే data ఉన్న అదే VPSలో restic repository ఉంటే, అది ఒక చెడు rm నుంచి మాత్రమే రక్షిస్తుంది. మరేదాని నుంచి రక్షించదు. MinIO node వేరే machineలో ఉండాలి. సాధ్యమైతే వేరే regionలో ఉండాలి. VPSలో restic backups దీనిపై scheduling మరియు retention వివరాలను అందిస్తుంది.
nginxతో TLSను ముగించడం
MinIO localhostలో మాత్రమే నడుస్తుంది. కాబట్టి బాహ్యంగా కనిపించే భాగం nginx. ముందుగా certbot మరియు nginxతో Let's Encrypt సర్టిఫికెట్లులో వివరించిన విధంగా సర్టిఫికెట్ను జారీ చేయండి. తర్వాత ఈ 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 అభ్యర్థనను చూడకముందే, పెద్ద uploadలను 413 Request Entity Too Largeతో తిరస్కరిస్తుంది. proxy_request_buffering off uploadను నేరుగా ముందుకు పంపుతుంది. డిఫాల్ట్ విధానం మొత్తం requestను ముందుగా తాత్కాలిక ఫైల్లో నిల్వ చేస్తుంది. అందువల్ల పెద్ద objectకు disk space రెండింతలు అవసరమవుతుంది. proxy_set_header Host $http_hostలోని విషయం కొంత సూక్ష్మమైనది. S3 signatureలో Host header కూడా ఉంటుంది. కాబట్టి proxy దాన్ని తిరిగి వ్రాస్తే ప్రతి request SignatureDoesNotMatchతో విఫలమవుతుంది. అయితే access logలో సాధారణ request వచ్చినట్లు కనిపిస్తుంది.
MinIOకు దాని బాహ్య పేరును కూడా తెలియజేయండి. అప్పుడు అది రూపొందించే links 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కు bind చేసిన addressను firewall ఏం చెబుతున్నా మరో machine నుంచి చేరుకోలేరు. ఆ commands కోసం VPSలో ufw firewall ప్రాథమికాలు చూడండి.
single-node MinIO సరిపడే సందర్భాలు, నిజమైన S3 అవసరమయ్యే సందర్భాలు
ఇక్కడ single node అంటే parity లేకుండా ఒకే drive ఉండటం. ఈ layout పరీక్షలకు, availability అవసరం లేని చిన్న workloadsకు అనుకూలమని MinIO స్వయంగా తన documentationలో చెబుతుంది. ఈ deploymentలో రెండో copy ఉండదు. అందువల్ల ప్రతి object యొక్క durability ఒకే VPS disk యొక్క durabilityపై ఆధారపడి ఉంటుంది. Distributed erasure-coded backendను ఆశ్రయించే features, వాటిలో bucket replication మరియు object locking కూడా ఉన్నాయి, multi-drive deploymentsకు చెందుతాయి. కాబట్టి ఈ setupపై immutable retention policyని ఎవరికీ హామీ ఇవ్వకండి.
మరో regionలోని రెండో VPSలో restic targetగా ఇది అనుకూలంగా ఉంటుంది. Development work మరియు CI artifacts కోసం S3 endpointగానూ ఇది సరిపోతుంది. Bucket పోతే rebuild చేయడం తప్ప మరే నష్టం లేని సందర్భాల్లో ఇది ఉపయోగకరం. చిన్న applicationలో user uploads కోసం కూడా ఇది సమంజసం. అయితే recovery plan మీ వద్ద ఉండాలి. Restoreను వాస్తవంగా పరీక్షించి ఉండాలి.
Contract లేదా regulator object lock లేదా multi-region durability కోరితే managed S3ను ఎంచుకోండి. Disk నిండిపోయినందుకు 03:00కు alert అందుకుని దాన్ని పరిష్కరించాల్సిన వ్యక్తిగా ఉండకూడదనుకుంటే కూడా managed S3ను ఎంచుకోండి. Frozen build కూడా పరిగణించాల్సిన నిజమైన కారణమే. July 2026 నాటికి pre-compiled community binary September 2025 నాటిది, దీనికి fixes అందడం లేదు. అందువల్ల దీన్ని run చేయడం అంటే ఆ పరిమితిని అంగీకరించడం. మరో మార్గం source నుంచి build చేసి, project updatesను మీరే అనుసరించడం.
తరచుగా ఎదురయ్యే ఒక పరిమితిని స్పష్టంగా చెప్పాలి. Object storage database కాదు. ప్రతి write మొత్తం objectను replace చేస్తుంది. అందువల్ల S3 bucketలో live SQL file ఉంచడం slow మరియు unsafe. Databaseను local diskలో ఉంచి, బదులుగా దాని backupను bucketలోకి పంపండి: VPSలో productionలో SQLiteను run చేయడం ఈ విభజనను వివరిస్తుంది.
వైఫల్య పరిస్థితులు మరియు మీరు చూసే సందేశాలు
systemctl enable --now తర్వాత యూనిట్ వెంటనే విఫలమవుతుంది. journalctl -u minio -n 30 --no-pager చదవండి. Failed to load environment files: No such file or directory అంటే యూనిట్లో /etc/default/minio లేదు లేదా దాని path తప్పుగా పేర్కొనబడింది. permission deniedతో ముగిసే సందేశం అంటే service accountకు data directoryలో రాయడానికి అనుమతి లేదు. అందువల్ల stat -c '%U' /var/lib/minio/data, minio-userను ముద్రిస్తుందో తనిఖీ చేయండి.
minioadmin:minioadmin ఇప్పటికీ login అవుతోంది. environment file processకు చేరలేదు. యూనిట్లో EnvironmentFile=/etc/default/minio ఉందో నిర్ధారించండి, sudo systemctl daemon-reload అమలు చేసి, ఆ తర్వాత serviceను restart చేయండి. MinIO startup సమయంలో root credentialsను ఒక్కసారి మాత్రమే చదువుతుంది. కాబట్టి restart లేకుండా ఆ fileను సవరించినా ఎలాంటి మార్పు ఉండదు.
Startup సమయంలో Address already in use. మరో process port 9000ను ఆక్రమించింది. MinIO portను మార్చే ముందు sudo ss -ltnp | grep :9000తో దాన్ని కనుగొనండి.
Proxy ద్వారా 1 MB కంటే పెద్ద uploads విఫలమవుతున్నాయి. nginx 413 Request Entity Too Largeకు సమాధానం ఇచ్చింది, MinIOకి request చేరలేదు. server blockలో client_max_body_size 0ను సెట్ చేయండి.
SignatureDoesNotMatch. secret key తప్పుగా ఉండవచ్చు. లేదా client మరియు MinIO మధ్యలోని ఏదైనా భాగం signatureలో భాగమైన Host headerను మార్చి ఉండవచ్చు.
RequestTimeTooSkewed. client లేదా serverలోని clock తప్పుగా ఉంది. ప్రతి S3 requestలో timestamp ఉంటుంది. 15 నిమిషాల window వెలుపల ఉన్న request తిరస్కరించబడుతుంది. timedatectlను తనిఖీ చేసి, time synchronisation సక్రియంగా ఉందని నిర్ధారించండి.
ఉందని మీకు తెలిసిన bucketపై Access Denied. key వేరే bucketకు పరిమితం చేయబడింది. policy వాస్తవంగా ఏవాటికి అనుమతిస్తుందో mc admin policy info local restic-rwతో ముద్రించి, resource linesలోని bucket పేరుతో పోల్చండి.
FAQ
నిజమైన బ్యాకప్లకు single-node MinIO సరిపోతుందా?
దాని ద్వారా రక్షించే డేటా ఉన్న యంత్రానికి వేరుగా ఉన్న మరో యంత్రంపై restic targetగా ఉపయోగిస్తే ఇది సరిపోతుంది. అయితే ఇది మీ ఏకైక కాపీగా సరిపోదు. single-drive deploymentలో parity ఉండదు. అందువల్ల MinIOలో రెండో కాపీ ఉండదు. ఆ VPS diskలో డేటా పోతే objects కూడా పోతాయి. మరో ప్రదేశంలో రెండో target ఉంచండి. ప్రక్రియ సక్రమంగా పనిచేస్తుందని నిర్ధారించుకోవడానికి కనీసం ఒకసారి రెండు targets నుంచీ restore చేయండి.
MinIO checksum fileలో sha256sum -c ఎందుకు విఫలమవుతుంది?
ఆ fileలో hash తర్వాత ఉన్న label release పేరైన minio.RELEASE.2025-09-07T16-13-09Zను సూచిస్తుంది. అయితే మీరు download చేసిన fileకు సాధారణంగా minio అనే పేరు ఉంటుంది. sha256sum -c checksum fileలో వ్రాయబడిన పేరున్న file కోసం చూస్తుంది. అది దొరకకపోవడంతో No such file or directory మరియు WARNING: 1 listed file could not be readను చూపిస్తుంది. Download సరిగ్గానే ఉంది. Hash stringsను నేరుగా సరిపోల్చండి. ఎటువంటి security అర్థం లేని labelను పట్టించుకోకండి.
MinIO admin web console ఎక్కడికి వెళ్లింది?
May 2025లో MinIO community edition console నుంచి administration featuresను తొలగించింది. Web interfaceలో object browser మాత్రమే మిగిలింది. ఇప్పుడు buckets మరియు usersను mc clientతో నిర్వహించాలి. ఇందుకోసం mc admin user add మరియు mc admin policy attach వంటి commandsను ఉపయోగించండి. Community editionలో ఇదే supported path; ఇది workaround కాదు. అందుకే ఈ guideలోని అన్ని పనులను command line నుంచే నిర్వహిస్తాము.
MinIOను S3 backendగా resticకు ఎలా చూపించాలి?
AWS_ACCESS_KEY_ID మరియు AWS_SECRET_ACCESS_KEYను MinIO access key, దానికి సంబంధించిన secretతో సెట్ చేయండి. ఆ తర్వాత s3:https://s3.example.com/restic రూపంలోని repository stringను ఉపయోగించండి. ఇందులో చివరి path element bucket పేరు. ముందుగా mc mbతో bucketను సృష్టించండి. ఒక bucketకు పరిమితం చేసిన keyకు bucketsను సృష్టించే permission ఉండదు. Uploadకు ముందు restic తన repository passwordతో ప్రతిదాన్ని encrypt చేస్తుంది. అందువల్ల MinIOలో ciphertext మాత్రమే నిల్వ ఉంటుంది. మీ filesను MinIO ఎప్పుడూ చూడదు.
MinIOను nginx వెనుక తప్పనిసరిగా నడపాలా?
Client అదే machineపై లేకపోతే TLS (transport layer security) అవసరం. ఎందుకంటే S3 credentials, object data రెండూ requestలో ప్రయాణిస్తాయి. port 443పై certbot certificateతో proxyను ఉపయోగించడం దీనికి సరళమైన మార్గం. Certificate renewalను MinIO నుంచి వేరుగా నిర్వహించవచ్చు. --certs-dirను public.crt మరియు private.key ఉన్న directoryకి చూపిస్తే MinIO స్వయంగా TLSను terminate చేయగలదు. అయితే renewed private keyను చదవడానికి service accountకు read access ఇవ్వాలి. అదే ఫలితానికి ఇది అదనపు పని.