Paano mag-install ng MinIO sa Ubuntu 24.04 VPS
Matutunan ang pag-setup ng MinIO bilang self-hosted S3 storage sa iyong VPS. Kasama sa guide ang verified binary install, systemd configuration, at restic backup setup.
Ano ang maibibigay sa iyo ng self-hosted object storage na MinIO
Ang MinIO ay isang self-hosted object storage na gumagamit ng Amazon S3 API. Ituro ang restic o anumang S3 SDK sa sarili mong server, baguhin ang isang endpoint setting, at hindi malalaman ng client ang pagkakaiba. Ang gabay na ito ay bumubuo ng single node sa Ubuntu 24.04: isang verified binary, isang dedicated system user, isang systemd unit na nagtatago ng root credentials sa labas ng unit file, at isang bucket kung saan nagba-back up ang restic.
Ang S3 (simple storage service) ay isang HTTP API at hindi isang filesystem. Naglalagay (PUT) ka ng object sa isang bucket sa ilalim ng isang key at kinukuha (GET) mo ito pabalik; walang partial write at walang rename. Gusto ng mga backup tool ang modelong ito dahil ang isang object ay dumating nang buo o hindi dumating.
Ang isang node ay nagtataglay ng isang kopya ng iyong data. Iyan ang trade-off na ginagawa mo. Makakakuha ka ng S3 endpoint na kontrolado mo sa halaga ng isang VPS, at mamanahin mo rin ang lahat ng trabahong ginagawa dati ng cloud provider, mula sa pagpapalit ng sirang disk hanggang sa pag-patch ng server software. Ang seksyon malapit sa dulo ay malinaw na nagsasabi kung kailan sulit ang trade-off na ito.
Ang estado ng MinIO community edition noong Hulyo 2026
Basahin ang bahaging ito bago ka mag-build base rito, dahil nagbago ito kamakailan. Noong Mayo 2025, tinanggal ng MinIO ang mga administration feature mula sa web console sa community edition. Ang natira na lamang sa browser ay isang object browser, kaya ang mga bucket at access key ay pinamamahalaan na gamit ang mc command line client.
Noong huling bahagi ng 2025, itinigil ng MinIO ang pag-publish ng mga pre-compiled community binary. Nakasaad na ngayon sa README ng proyekto na ang community edition ay ipinamamahagi bilang source code lamang. Gumagana pa rin ang mga lumang download URL: simula Hulyo 2026, ang mga ito ay nagbibigay ng server build RELEASE.2025-09-07T16-13-09Z at client build RELEASE.2025-08-13T08-35-41Z, at wala nang mas bagong community build ang lumabas. Kaya ang binary sa ibaba ay totoo at gumagana, at ito ay frozen. Ang mga security fix na inilathala pagkatapos ng Setyembre 2025 ay wala rito.
Ang katotohanang iyon ang humuhubog sa natitirang bahagi ng gabay na ito. Ito ang dahilan kung bakit ang MinIO rito ay nakikinig sa 127.0.0.1 at umaabot lamang sa internet sa pamamagitan ng proxy na kontrolado mo. Kung mas gusto mong subaybayan ang mga fix, mag-build mula sa source. Ang README ng vendor ay nagbibigay ng isang command, go install github.com/minio/minio@latest, na nangangailangan ng Go toolchain at nagsusulat ng binary sa ~/go/bin/minio. I-install ang binary na iyon sa /usr/local/bin/minio at ang bawat iba pang hakbang dito ay mananatiling hindi nagbabago.
I-install ang MinIO binary at i-verify ang download
I-download ang pinned release at ang published checksum nito. Ang -f flag ay nagiging sanhi ng pag-fail ng curl kapag may HTTP error sa halip na i-save ang error page gamit ang pangalang ibinigay mo; ito ang dahilan kung bakit may mga taong nakakapag-install ng 404 page at nagtataka kung bakit hindi ito ma-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.sha256sumIpaghambing ang dalawang hash, at ang mga hash lang ang dapat paghambingin.
published=$(awk '{print $1}' minio.sha256sum)
downloaded=$(sha256sum minio | awk '{print $1}')
[ "$published" = "$downloaded" ] && echo "checksum ok"Huwag gumamit ng sha256sum -c minio.sha256sum dito. Ang label na nakasulat pagkatapos ng hash sa loob ng file na iyon ay minio.RELEASE.2025-09-07T16-13-09Z, at na-save natin ang download bilang minio, kaya naghahanap ang -c ng file na wala naman. Maglalabas ito ng No such file or directory at pagkatapos ay WARNING: 1 listed file could not be read, na magmumulang corrupted download kahit hindi naman. Ang label ay pangalan lamang. Ang hash ang bahaging nagbibigay ng garantiya.
Maging malinaw sa kung ano ang pinapatunayan ng check na ito. Ang binary at ang hash ay nanggaling sa iisang vendor sa iisang koneksyon, kaya ang match ay nagpapatunay na kumpleto ang download at hindi ito nasira o nabago habang ipinapadala. Hindi nito pinapatunayan na mapagkakatiwalaan ang vendor. Ibang problema iyon at walang sha256sum command ang makakalutas nito.
sudo install -o root -g root -m 755 minio /usr/local/bin/minio
minio --versionAng minio --version ay nagpi-print ng minio version RELEASE.2025-09-07T16-13-09Z na sinusundan ng ilang build lines. Ang Permission denied dito ay nangangahulugang mali ang mode, at ang command not found ay nangangahulugang wala ang /usr/local/bin sa iyong PATH.
Gumawa ng system user at data directory
Tumatanggap ang MinIO ng mga upload mula sa network, kaya hindi ito dapat tumakbo bilang root. Bigyan ito ng account na walang home directory at walang 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/minioAng -r ay gumagawa ng system account na may UID na mababa sa 1000, na nagpapanatili rito sa labas ng range na ginagamit para sa mga tao. Nilalaktawan ng -M ang home directory, dahil ang account na hindi kailanman nag-lo-login ay walang dapat itago sa loob nito. Suriin ang resulta gamit ang id minio-user, at gamit ang stat -c '%U %a' /var/lib/minio, na dapat mag-print ng minio-user 750.
Ang data directory ay dapat na writable ng user na iyon, hindi lang readable. Sa unang pag-start, gumagawa ang MinIO ng .minio.sys directory sa loob ng volume para hawakan ang sarili nitong configuration, kaya ang directory na pagmamay-ari ng root ay magiging sanhi ng pag-exit ng MinIO habang nag-i-startup na may mensaheng nagtatapos sa permission denied. Ang parehong tuntunin ay nalalapat sa bawat serbisyong pinapatakbo mo sa ganitong paraan, at ang least-privilege service users on a VPS ay tumatalakay dito nang maayos.
Ilagay ang root credentials sa isang environment file
Ang root credentials ay nagbibigay ng access sa lahat ng bucket, kaya hindi dapat ito ilagay sa unit file na nababasa ng kahit sino. Gawin ang file gamit ang tamang mode bago ito sulatan, para hindi man lang magkaroon ng pagkakataon na mabasa ang password sa isang file.
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/minioAng tee ay pinuputol (truncate) ang isang existing file sa halip na gumawa ng bago, kaya ang mode ay mananatiling 600 at ang may-ari ay mananatiling root. Sinadya ito. Binabasa ng systemd ang EnvironmentFile bilang root bago nito ibaba ang privileges sa User=, na nangangahulugang hindi na kailangang basahin ng service account ang sarili nitong credentials. Kapag tumatakbo na ang service, i-verify ito gamit ang sudo -u minio-user cat /etc/default/minio. Ang command na iyon ay dapat mag-print ng Permission denied.
May dalawang behavior ang MinIO na dapat mong malaman bago ito simulan. Kung walang MINIO_ROOT_USER at walang MINIO_ROOT_PASSWORD sa environment nito, hindi tatanggi ang MinIO na mag-start. Mag-i-start ito gamit ang default credentials na minioadmin:minioadmin, na siyang unang sinusubukan ng anumang scanner, at magmumukha itong maayos habang ginagawa iyon. Ang password na kulang sa 8 characters ay tatanggihan sa halip: mag-e-exit ang MinIO sa startup na may error na nagsasabing invalid ang credentials, dahil ang access key ay nangangailangan ng hindi bababa sa 3 characters at ang secret key ay hindi bababa sa 8.
Ang MINIO_VOLUMES ang path ng data at ang MINIO_OPTS ang naglalaman ng mga flag. Ang pag-bind sa 127.0.0.1 ay nangangahulugang wala pang makaka-reach sa S3 API mula sa labas ng VPS na ito, na siyang tamang default. Bubuksan mo ito nang kusa sa susunod, sa pamamagitan ng isang proxy na may hawak na certificate.
Isulat ang systemd unit
Gumawa ng /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.targetWalang leading - sa EnvironmentFile, at ito ay isang desisyon at hindi typo. Gamit ang dash, binabalewala ng systemd ang nawawalang file at pinapatakbo pa rin ang MinIO, kaya ang deleted file o maling path ay tahimik na magpapatakbo ng server sa minioadmin:minioadmin. Kung walang dash, ang nawawalang file ay magdudulot ng failure sa unit bago pa man tumakbo ang MinIO, at ipapakita ng journalctl -u minio ang Failed to load environment files: No such file or directory. Mas madaling mapansin ang unit na tumatangging mag-start kaysa sa server na tahimik na tumatanggap ng default password.
Ang $MINIO_VOLUMES at $MINIO_OPTS ay sadyang hindi naka-quote, dahil hinahati ng systemd ang mga unquoted variable base sa whitespace para maging magkakahiwalay na argument. Ganito nagiging apat na argument para sa minio server ang apat na salita sa MINIO_OPTS. Itinataas ng LimitNOFILE=65536 ang file descriptor limit, dahil ang bawat open connection at bawat open data file ay kumakain ng isang descriptor, at ang default na 1024 ay nauubos kapag mataas ang load.
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/liveDapat mag-print ang is-active ng active, at dapat sumagot ang health endpoint ng 200. Ipinapakita ng journalctl -u minio -n 20 --no-pager ang API address kung saan nakikinig ang server. Kung patuloy na nag-re-restart ang unit, susuko ang systemd at ilo-log ang Start request repeated too quickly, na nangangahulugang nag-e-exit ang MinIO sa bawat pagtatangka: ang dahilan ay nakasulat sa mga linya sa itaas ng mensaheng iyon, kaya basahin ang mga ito pataas.
Para sa mas mataas na isolation, idagdag ang ProtectSystem=full at ProtectHome=true sa section na [Service]. Parehong nangangailangan ang mga ito ng mount namespaces mula sa host kernel. Sa container virtualization na nagbabahagi ng host kernel, gaya ng OpenVZ o LXC, maaari itong mag-fail, at mag-uulat ang unit ng status=226/NAMESPACE. Alisin ang dalawang linyang iyon at mag-i-start na ito. Ang unit mismo ay isang ordinaryong unit, at ang systemd services and timers sa isang VPS ang sumasaklaw sa iba pang mga directive.
I-install ang mc at patunayan ang round trip
Ang MinIO client ay mc. Huwag itong i-install gamit ang apt install mc. Ang package na iyon ay Midnight Commander, isang file manager na walang kinalaman sa 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/mcI-register ang server bilang isang alias, pagkatapos ay maglipat ng object sa pamamagitan nito.
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.txtDapat ilista ng mc ls ang hello.txt kasama ang laki nito, at dapat i-print ng mc cat ang hello object storage. Ang round trip na iyon ang tunay na patunay na gumagana ang server, dahil ginagawa nito ang parehong signed S3 requests na gagawin ng iba pang client. Ipi-print ng mc admin info local ang status ng server kung kailangan mo ng pangalawang opinyon.
Magpatakbo ng isa pang check ngayon, habang wala pang laman ang box.
mc alias set defaultcheck http://127.0.0.1:9000 minioadmin minioadminDapat mag-fail ang command na ito. Kung magtagumpay ito, hindi nakarating ang environment file sa process at tumatakbo ang iyong server gamit ang default credentials. Ayusin ito bago pa may ibang humawak sa machine.
Iniimbak ng mc ang mga alias sa ~/.mc/config.json sa plain text, kaya ang mga credential na iyon ay nakalagay sa home directory ng kung sino man ang nagpatakbo ng command. Ang pagtakbo ng mc sa ilalim ng sudo ay naglalagay ng root credentials sa /root/.mc/config.json. Panatilihin ang root alias sa isang administrator account at bigyan ang bawat application ng sarili nitong key.
Pagbibigay ng isang object gamit ang presigned URL
Ang presigned URL ay isang ordinaryong HTTPS link na may kalakip na signature at expiry. Sinumang may hawak ng link ay makakakuha ng partikular na object na iyon nang hindi nangangailangan ng account o client.
mc share download --expire 12h local/backups/hello.txtAng output ay naglalaman ng X-Amz-Signature at X-Amz-Expires sa query string. Dalawang bagay ang nakakagulat sa mga user tungkol dito. Ang link ay binuo mula sa endpoint sa alias na ginamit mo, kaya ang alias sa 127.0.0.1 ay gagawa ng link na ang machine na ito lang ang makakabukas: gumawa ng pangalawang alias sa iyong public hostname para sa mga link na balak mong ipadala. At wala ring revoke button. Ang signature ay mananatiling valid hanggang sa mag-expire ito, kaya ang maikling expiry lang ang tanging kontrol na mayroon ka. Pitong araw ang maximum na pinapayagan ng S3 signature format.
Bigyan ang restic ng sarili nitong key at bucket
Ang root credentials ay may kakayahang magbasa at magbura ng kahit anong bucket, kaya hindi dapat hawak ng isang backup job ang mga ito. Gumawa ng bucket, isang policy na limitado lamang sa bucket na iyon, at isang user na walang ibang access.
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-backupAng MinIO ay may built-in na readwrite policy na mas mabilis i-setup, ngunit nagbibigay ito ng full access sa lahat ng bucket sa server. Ang policy sa itaas ay sadyang binanggit ang bucket nang dalawang beses: una bilang arn:aws:s3:::restic para gumana ang pag-list ng bucket, at pangalawa bilang arn:aws:s3:::restic/* para sa mga object sa loob nito. Sa S3, ang bucket at ang mga object nito ay magkahiwalay na resource, kaya ang policy na nagpapangalan lamang sa isa sa mga ito ay magdudulot ng error na mukhang sira ang client.
I-test ang limitasyon bago mo ito pagkatiwalaan.
mc alias set resticuser http://127.0.0.1:9000 restic-backup "$RESTIC_KEY"
mc ls resticuser/restic
mc ls resticuser/backupsAng unang ls ay magtatagumpay at ang pangalawa ay mabibigo na may Access Denied. Ang policy na hindi mo pa na-test ay isa lamang hula.
Ngayon, ituro ang restic sa bucket. Binabasa ng restic ang S3 credentials mula sa standard AWS environment variables, kaya walang file na partikular sa restic ang kailangan.
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 snapshotsAng restic init ay hihingi ng repository password. Ang password na iyon ang nag-e-encrypt sa repository, kaya ciphertext lang ang iniimbak ng MinIO, at ang pagkawala ng password ay nangangahulugan ng pagkawala ng backup. Ang run na sinimulan ng isang systemd timer ay walang terminal na mapag-ta-type-an, kaya i-set ang RESTIC_PASSWORD_FILE sa isang mode 600 na file para sa mga naka-schedule na backup.
Isang placement rule ang mas mahalaga kaysa sa kahit anong command sa itaas. Ang restic repository na nasa parehong VPS ng data na pinoprotektahan nito ay makakatulong lamang laban sa maling rm at wala nang iba pa. Ang MinIO node ay dapat nasa ibang machine, mas mainam kung nasa ibang region. Ang restic backups sa isang VPS ay tumatalakay sa scheduling at retention bukod pa rito.
I-terminate ang TLS gamit ang nginx
Ang MinIO ay tumatakbo sa localhost, kaya ang nginx ang nagsisilbing public surface. I-issue muna ang certificate, gaya ng inilarawan sa Let's Encrypt certificates gamit ang certbot at nginx, pagkatapos ay gamitin ang server block na ito.
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;
}
}Ang ilan sa mga linyang iyan ay kritikal. Ang client_max_body_size 0 ay nagtatanggal ng default na 1 MB body limit, na kung hindi ay magreresulta sa pag-reject ng anumang mas malaking upload na may 413 Request Entity Too Large bago pa man makita ng MinIO ang request. Ang proxy_request_buffering off ay nag-i-stream ng upload nang direkta, dahil ang default ay ini-spool muna ang buong request sa isang temporary file, at ang malalaking object ay mangangailangan ng doble na disk space. Ang proxy_set_header Host $http_host ang mapanlinlang: ang S3 signature ay sumasaklaw sa Host header, kaya ang proxy na nag-re-rewrite nito ay magdudulot ng failure sa bawat request na may SignatureDoesNotMatch, habang ang access log ay nagpapakita ng normal na request na dumarating.
Ipaalam din sa MinIO ang public name nito, para ang mga link na ginagawa nito ay tumuturo sa proxy sa halip na sa localhost.
echo 'MINIO_SERVER_URL=https://s3.example.com' | sudo tee -a /etc/default/minio
sudo systemctl restart minioMananatiling maliit ang firewall. Payagan ang SSH at HTTPS, at huwag lagyan ng anumang rule ang port 9000 at 9001, dahil ang address na naka-bind sa 127.0.0.1 ay hindi maaabot mula sa ibang machine anuman ang sabihin ng firewall. Ang ufw firewall basics sa isang VPS ay naglalaman ng mga command.
Kailan sapat ang single-node MinIO, at kailan mo kailangan ng totoong S3
Ang single node rito ay nangangahulugang isang drive na walang parity. Ayon sa dokumentasyon mismo ng MinIO, ang layout na ito ay angkop lamang para sa testing at maliliit na workload na walang requirement para sa availability. Walang pangalawang kopya sa loob ng deployment, kaya ang durability ng bawat object ay nakadepende lamang sa durability ng isang VPS disk. Ang mga feature na umaasa sa distributed erasure-coded backend, gaya ng bucket replication at object locking, ay para sa mga multi-drive deployment; kaya huwag mangako ng immutable retention policy sa setup na ito.
Mainam itong gamitin bilang restic target sa pangalawang VPS sa ibang region, at bilang S3 endpoint para sa development work at CI artifacts, kung saan ang mawala man ang isang bucket ay rebuild lang ang katapat. Makatwiran din ito para sa user uploads sa maliliit na application, basta't hawak mo ang recovery plan at nasubukan mo na ang pag-restore.
Piliin ang managed S3 kung hinihingi ng kontrata o regulator ang object lock o multi-region durability, o kung ayaw mong ikaw ang tawagan ng 03:00 dahil napuno ang disk. Ang frozen build ay isa pang tapat na dahilan. Simula noong July 2026, ang pre-compiled community binary ay mula pa noong September 2025 at wala nang natatanggap na mga fix, kaya ang pagtakbo nito ay nangangahulugang tinatanggap mo ang limitasyong ito, o kailangan mong mag-build mula sa source at ikaw mismo ang sumubaybay sa project.
May isang hangganan na dapat linawin dahil madalas itong lumabas. Ang object storage ay hindi database. Ang bawat write ay nagpapalit ng buong object, kaya ang live SQL file sa isang S3 bucket ay mabagal at hindi ligtas. Panatilihin ang database sa local disk at i-back up ito sa bucket sa halip: ang pagtakbo ng SQLite sa production sa isang VPS ay naglalarawan ng ganitong paghihiwalay.
Mga mode ng pagkabigo at ang mga mensaheng makikita mo
Nabigo ang unit pagkatapos mismo ng systemctl enable --now. Basahin ang journalctl -u minio -n 30 --no-pager. Ang Failed to load environment files: No such file or directory ay nangangahulugang nawawala ang /etc/default/minio o mali ang pagkakasulat ng path nito sa unit. Ang mensaheng nagtatapos sa permission denied ay nangangahulugang hindi writable ng service account ang data directory, kaya tiyaking ang stat -c '%U' /var/lib/minio/data ay naglalabas ng minio-user.
Naka-log in pa rin ang minioadmin:minioadmin. Hindi nakarating ang environment file sa proseso. Kumpirmahin na ang unit ay naglalaman ng EnvironmentFile=/etc/default/minio, patakbuhin ang sudo systemctl daemon-reload, at i-restart ang service. Binabasa ng MinIO ang root credentials nito nang isang beses sa startup, kaya ang pag-edit sa file na iyon nang walang restart ay walang binabago.
Address already in use sa startup. May ibang prosesong gumagamit sa port 9000. Hanapin ito gamit ang sudo ss -ltnp | grep :9000 bago mo baguhin ang port ng MinIO.
Nabibigo ang mga upload na higit sa 1 MB sa pamamagitan ng proxy. Sumagot ang nginx ng 413 Request Entity Too Large at hindi nakita ng MinIO ang request. I-set ang client_max_body_size 0 sa server block.
SignatureDoesNotMatch. Alinman sa mali ang secret key, o may nagbago sa Host header sa pagitan ng client at MinIO, na sakop ng signature.
RequestTimeTooSkewed. Maling oras ang nakatakda sa client o sa server. Ang bawat S3 request ay may dalang timestamp at nare-reject kung lagpas sa 15 minutong window. Suriin ang timedatectl at kumpirmahing aktibo ang time synchronisation.
Access Denied sa isang bucket na alam mong umiiral. Ang key ay naka-scope sa ibang bucket. I-print ang aktwal na pinapayagan ng policy gamit ang mc admin policy info local restic-rw at ikumpara ang pangalan ng bucket sa mga resource line.
FAQ
Sapat na ba ang single-node MinIO para sa totoong backups?
Sapat na ito bilang restic target na tumatakbo sa hiwalay na machine mula sa data na pinoprotektahan nito. Hindi ito sapat kung ito lang ang tanging kopya mo. Ang deployment na may iisang drive ay walang parity, kaya walang pangalawang kopya sa loob ng MinIO. Kung mawalan ng data ang disk ng VPS, mawawala rin ang mga object. Magpanatili ng pangalawang target sa ibang lokasyon at mag-restore mula sa parehong target nang kahit isang beses para masiguradong gumagana ang proseso.
Bakit nagfe-fail ang sha256sum -c sa checksum file ng MinIO?
Dahil ang label pagkatapos ng hash sa loob ng file na iyon ay tumutukoy sa release na minio.RELEASE.2025-09-07T16-13-09Z, habang ang na-download mong file ay karaniwang tinatawag na minio. Naghahanap ang sha256sum -c ng file na may pangalang nakasulat sa loob ng checksum file, hindi ito mahanap, at nag-uulat ng No such file or directory at WARNING: 1 listed file could not be read. Maayos ang download. I-compare nang direkta ang mga hash string at huwag pansinin ang label, dahil wala itong kinalaman sa seguridad.
Saan napunta ang MinIO admin web console?
Inalis ng MinIO ang mga administration feature mula sa community edition console noong May 2025, at nag-iwan na lang ng object browser sa web interface. Ang mga bucket at user ay mina-manage na ngayon gamit ang mc client, sa pamamagitan ng mga command gaya ng mc admin user add at mc admin policy attach. Iyan ang suportadong paraan sa community edition sa halip na isang workaround, kaya ginagawa ng gabay na ito ang lahat sa command line.
Paano ko ituturo ang restic sa MinIO bilang S3 backend?
I-set ang AWS_ACCESS_KEY_ID at AWS_SECRET_ACCESS_KEY sa isang MinIO access key at secret nito, pagkatapos ay gamitin ang repository string na may format na s3:https://s3.example.com/restic, kung saan ang huling bahagi ng path ay ang pangalan ng bucket. I-create muna ang bucket gamit ang mc mb, dahil ang key na naka-scope sa isang bucket ay walang permission na mag-create ng mga bucket. Ine-encrypt ng restic ang lahat gamit ang sarili nitong repository password bago i-upload, kaya ciphertext ang iniimbak ng MinIO at hindi nito nakikita ang iyong mga file.
Kailangan ko bang patakbuhin ang MinIO sa likod ng nginx?
Kailangan mo ng TLS (transport layer security) tuwing ang client ay wala sa parehong machine, dahil ang S3 credentials at object data ay parehong dumadaan sa loob ng request. Ang proxy sa port 443 na may certificate mula sa certbot ang pinakamadaling paraan para makuha ito, at inilalayo nito ang certificate renewal mula sa MinIO. Maaari ring mag-terminate ng TLS ang MinIO mismo kung ituturo mo ang --certs-dir sa isang directory na naglalaman ng public.crt at private.key, pero kailangan ng service account ng read access sa na-renew na private key, na dagdag na trabaho para sa parehong resulta.