SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-07

Установка MinIO на Ubuntu 24.04: пошаговое руководство

Разверните собственное S3-хранилище на VPS с помощью MinIO. В статье описана настройка systemd-юнита, создание бакета для restic и использование mc для управления данными.

Verified Every command ran end-to-end on a fresh Ubuntu 24.04 server, July 30, 2026.

Что дает self-hosted объектное хранилище на базе MinIO

MinIO — это self-hosted объектное хранилище, поддерживающее API Amazon S3. Направьте restic или любой S3 SDK на ваш сервер, измените один параметр endpoint, и клиент не заметит разницы. В этом руководстве описывается развертывание одноузловой конфигурации на Ubuntu 24.04: использование проверенного бинарного файла, создание выделенного системного пользователя, настройка systemd-юнита, который не хранит учетные данные root в файле конфигурации, и создание бакета для резервных копий restic.

S3 (Simple Storage Service) — это HTTP API, а не файловая система. Вы отправляете объект в бакет по ключу (PUT) и получаете его обратно (GET); здесь нет частичной записи или переименования. Инструменты резервного копирования предпочитают такую модель, так как объект либо доставляется целиком, либо не доставляется вовсе.

Один узел хранит одну копию ваших данных. Это компромисс, на который вы идете. Вы получаете S3-endpoint под своим контролем по цене VPS, но берете на себя все задачи, которые раньше выполнял облачный провайдер: от замены вышедшего из строя диска до обновления серверного ПО. В разделе ближе к концу прямо указано, когда такой компромисс оправдан.

Состояние MinIO Community Edition в июле 2026 года

Ознакомьтесь с этим разделом перед началом работы, так как недавно произошли изменения. В мае 2025 года MinIO удалила функции администрирования из веб-консоли в Community Edition. В браузере остался только файловый менеджер объектов, поэтому управление бакетами и ключами доступа теперь осуществляется через клиент командной строки mc.

Позднее в 2025 году MinIO прекратила публикацию предварительно скомпилированных бинарных файлов для сообщества. В файле README проекта теперь указано, что Community Edition распространяется только в исходном коде. Старые URL для загрузки всё ещё работают: по состоянию на июль 2026 года они предоставляют сборку сервера RELEASE.2025-09-07T16-13-09Z и сборку клиента RELEASE.2025-08-13T08-35-41Z, а более новых сборок для сообщества не появлялось. Таким образом, приведённый ниже бинарный файл является актуальным, работоспособным и «замороженным». Исправления безопасности, выпущенные после сентября 2025 года, в него не включены.

Этот факт определяет содержание остальной части руководства. Именно поэтому MinIO здесь ожидает соединений на 127.0.0.1 и выходит в интернет только через контролируемый вами прокси-сервер. Если вы предпочитаете отслеживать исправления, выполняйте сборку из исходного кода. В README от поставщика приведена одна команда go install github.com/minio/minio@latest, для которой требуется набор инструментов Go; она записывает бинарный файл в ~/go/bin/minio. Установите этот файл в /usr/local/bin/minio, и все остальные шаги в данном руководстве останутся без изменений.

Установка бинарного файла MinIO и проверка загрузки

Загрузите зафиксированный релиз и его опубликованную контрольную сумму. Флаг -f заставляет curl завершаться с ошибкой при возникновении HTTP-ошибки, вместо того чтобы сохранять страницу с ошибкой под указанным вами именем. Именно из-за этого пользователи часто устанавливают 404-страницу и не понимают, почему она не исполняется.

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

Сравните два хеша, и сравнивайте только хеши.

published=$(awk '{print $1}' minio.sha256sum)
downloaded=$(sha256sum minio | awk '{print $1}')
[ "$published" = "$downloaded" ] && echo "checksum ok"

Не используйте здесь sha256sum -c minio.sha256sum. Метка, записанная после хеша внутри этого файла, — minio.RELEASE.2025-09-07T16-13-09Z, а мы сохранили загруженный файл как minio, поэтому -c ищет файл, которого не существует. Утилита сообщает No such file or directory, а затем WARNING: 1 listed file could not be read, что выглядит как поврежденный файл, хотя это не так. Метка — это просто имя. Хеш — это часть, которая дает гарантию.

Четко понимайте, что доказывает эта проверка. Бинарный файл и хеш поступают от одного поставщика по одному и тому же соединению, поэтому совпадение доказывает, что загрузка завершена и файл не был поврежден или изменен при передаче. Это не доказывает, что поставщик заслуживает доверия. Это другая проблема, и никакая команда sha256sum её не решает.

sudo install -o root -g root -m 755 minio /usr/local/bin/minio
minio --version

minio --version выводит minio version RELEASE.2025-09-07T16-13-09Z, а затем несколько строк сборки. Permission denied в данном случае означает, что права доступа установлены неверно, а command not found означает, что /usr/local/bin отсутствует в вашем PATH.

Создание системного пользователя и каталога данных

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 создает системную учетную запись с UID менее 1000, что исключает её из диапазона, используемого для обычных пользователей. Флаг -M отключает создание домашнего каталога, так как учетной записи, которая никогда не используется для входа, он не требуется. Проверьте результат с помощью id minio-user, а также stat -c '%U %a' /var/lib/minio, которая должна вывести minio-user 750.

Каталог данных должен быть доступен для записи этому пользователю, а не только для чтения. При первом запуске MinIO создает каталог .minio.sys внутри тома для хранения собственной конфигурации, поэтому, если владельцем каталога является root, MinIO завершит работу при запуске с сообщением, заканчивающимся на permission denied. Это же правило применимо к любому сервису, который вы запускаете таким образом, а в статье использование сервисных пользователей с минимальными привилегиями на VPS этот процесс описан подробно.

Размещение учетных данных root в файле переменных окружения

Учетные данные root открывают доступ ко всем бакетам, поэтому их нельзя хранить в unit-файле, который доступен для чтения всем пользователям. Сначала создайте файл с нужными правами доступа, а затем запишите в него данные — так пароль не окажется в файле, доступном для чтения, даже на мгновение.

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/minio

tee усекает существующий файл, а не создает его заново, поэтому права доступа остаются 600, а владельцем остается root. Это сделано намеренно. systemd считывает EnvironmentFile от имени root до того, как понижает привилегии до User=, что означает, что сервисной учетной записи не нужно иметь права на чтение собственных учетных данных. После запуска сервиса проверьте его работу с помощью sudo -u minio-user cat /etc/default/minio. Эта команда должна вывести Permission denied.

Перед запуском MinIO полезно знать о двух особенностях его поведения. Если в окружении отсутствуют MINIO_ROOT_USER и MINIO_ROOT_PASSWORD, MinIO не отказывается запускаться. Он стартует с учетными данными по умолчанию minioadmin:minioadmin — это первая пара, которую пробует любой сканер, при этом сервис выглядит полностью работоспособным. Пароль короче 8 символов, напротив, отклоняется: MinIO завершает работу при запуске с ошибкой о неверных учетных данных, так как access key должен содержать не менее 3 символов, а secret key — не менее 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.target

Отсутствие символа тире перед - в EnvironmentFile — это намеренное решение, а не опечатка. С тире systemd игнорирует отсутствие файла и запускает MinIO в любом случае, поэтому удаленный файл или ошибка в пути приведут к тому, что сервер молча запустится с учетными данными по умолчанию на minioadmin:minioadmin. Без тире отсутствие файла приведет к ошибке юнита до запуска MinIO, а journalctl -u minio покажет Failed to load environment files: No such file or directory. Юнит, который отказывается запускаться, заметить гораздо проще, чем сервер, который тихо принял пароль по умолчанию.

Переменные $MINIO_VOLUMES и $MINIO_OPTS намеренно не взяты в кавычки, так как 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/live

Команда is-active должна вывести active, а health-эндпоинт должен вернуть 200. journalctl -u minio -n 20 --no-pager показывает API-адрес, на котором сервер ожидает подключения. Если юнит постоянно перезапускается, systemd прекращает попытки и записывает в лог Start request repeated too quickly, что означает завершение работы MinIO при каждой попытке: причина указана в строках выше этого сообщения, поэтому просматривайте лог вверх.

Для большей изоляции добавьте ProtectSystem=full и ProtectHome=true в секцию [Service]. Оба параметра требуют поддержки пространств имен монтирования (mount namespaces) от ядра хоста. В контейнерной виртуализации, использующей общее ядро хоста, например OpenVZ или LXC, они могут вызвать сбой, и юнит сообщит об ошибке status=226/NAMESPACE. Удалите эти две строки, и сервис запустится. Сам юнит является стандартным, а в systemd-сервисы и таймеры на VPS описаны остальные директивы.

Установка mc и проверка цикла передачи данных

MinIO client — это mc. Не устанавливайте его с помощью apt install mc. Этот пакет является Midnight Commander, файловым менеджером, не имеющим отношения к 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/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.txt

mc 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 хранит псевдонимы в ~/.mc/config.json в виде открытого текста, поэтому эти учетные данные находятся в домашнем каталоге того, кто выполнил команду. Запуск mc от имени sudo помещает учетные данные root в /root/.mc/config.json. Храните псевдоним root только на одной учетной записи администратора и предоставляйте каждому приложению собственный ключ.

Предоставление доступа к объекту через presigned URL

Presigned URL — это обычная HTTPS-ссылка, содержащая подпись и срок действия. Любой, у кого есть эта ссылка, может получить объект без учетной записи и без использования клиента.

mc share download --expire 12h local/backups/hello.txt

Результат содержит X-Amz-Signature и X-Amz-Expires в строке запроса. Два аспекта часто вызывают удивление. Ссылка формируется на основе endpoint из псевдонима (alias), который вы использовали, поэтому псевдоним на 127.0.0.1 создает ссылку, которую может открыть только эта машина: создайте второй псевдоним для вашего публичного имени хоста, если планируете отправлять ссылки внешним пользователям. Также отсутствует кнопка отзыва доступа. Подпись остается действительной до истечения срока, поэтому единственный способ контроля — это установка короткого времени жизни. Семь дней — это максимальный срок, допустимый форматом подписи 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-backup

В MinIO есть встроенная политика 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 считывает учетные данные S3 из стандартных переменных окружения AWS, поэтому отдельный файл учетных данных для 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 snapshots

Команда restic init запрашивает пароль репозитория. Этот пароль шифрует репозиторий, поэтому MinIO хранит только зашифрованные данные, и потеря пароля означает потерю резервной копии. Задача, запущенная через systemd timer, не имеет терминала для ввода пароля, поэтому установите RESTIC_PASSWORD_FILE в файл с правами доступа 600 для автоматизированного резервного копирования.

Одно правило размещения важнее всех приведенных выше команд. Репозиторий restic на том же VPS, что и защищаемые данные, спасает только от случайного удаления rm и ни от чего больше. Узел MinIO должен находиться на другом сервере, желательно в другом регионе. Статья резервное копирование restic на VPS описывает планирование и хранение копий поверх этого решения.

Terminate TLS with nginx

MinIO sits on localhost, so nginx is the public surface. Issue the certificate first, as described in Let's Encrypt certificates with certbot and nginx, then use this 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;
    }
}

Several of those lines are load-bearing. client_max_body_size 0 removes the default 1 MB body limit, which otherwise rejects any larger upload with 413 Request Entity Too Large before MinIO sees the request at all. proxy_request_buffering off streams the upload straight through, because the default spools the whole request into a temporary file first, and a large object then needs disk space twice over. proxy_set_header Host $http_host is the subtle one: an S3 signature covers the Host header, so a proxy that rewrites it makes every request fail with SignatureDoesNotMatch while the access log shows a normal request arriving.

Tell MinIO its public name as well, so the links it generates point at the proxy rather than at localhost.

echo 'MINIO_SERVER_URL=https://s3.example.com' | sudo tee -a /etc/default/minio
sudo systemctl restart minio

The firewall stays small. Allow SSH and HTTPS, and leave ports 9000 and 9001 with no rule at all, because an address bound to 127.0.0.1 is unreachable from another machine whatever the firewall says. ufw firewall basics on a VPS has the commands.

Когда достаточно одноузлового MinIO и когда нужен полноценный S3

Под одноузловым развертыванием здесь понимается один диск без избыточности. В документации MinIO такая конфигурация описывается как подходящая для тестирования и небольших рабочих нагрузок, не требующих высокой доступности. Внутри развертывания нет второй копии данных, поэтому долговечность каждого объекта ограничена надежностью одного диска VPS. Функции, требующие распределенного хранилища с кодированием стирания (erasure coding), включая репликацию бакетов и блокировку объектов, доступны только в многодисковых конфигурациях, поэтому не стоит гарантировать неизменяемость данных (immutable retention policy) на такой установке.

Это решение хорошо подходит в качестве цели для restic на втором VPS в другом регионе, а также как S3-endpoint для разработки и артефактов CI, где потеря бакета означает лишь необходимость повторной сборки. Оно также приемлемо для пользовательских загрузок в небольшом приложении, если у вас есть план восстановления и вы его протестировали.

Выбирайте управляемый S3, если контракт или регулятор требуют блокировки объектов (object lock) или мультирегиональной доступности, или если вы не хотите быть тем, кому звонят в 03:00 из-за того, что диск переполнился. Еще одна веская причина — замороженная сборка. По состоянию на июль 2026 года предварительно скомпилированный бинарный файл сообщества датируется сентябрем 2025 года и не получает исправлений, поэтому его использование означает либо принятие этого факта, либо самостоятельную сборку из исходного кода и отслеживание обновлений проекта.

Стоит обозначить одну границу, так как вопрос возникает часто. Объектное хранилище — это не база данных. Каждая операция записи заменяет объект целиком, поэтому работа с активным файлом SQL прямо в бакете S3 будет медленной и небезопасной. Храните базу данных на локальном диске, а в бакет делайте резервные копии: в статье запуск SQLite в продакшене на VPS описано, как организовать такое разделение.

Failure modes and the messages you will see

The unit fails right after systemctl enable --now. Read journalctl -u minio -n 30 --no-pager. Failed to load environment files: No such file or directory means /etc/default/minio is missing or its path is misspelled in the unit. A message ending in permission denied means the data directory is not writable by the service account, so check that stat -c '%U' /var/lib/minio/data prints minio-user.

minioadmin:minioadmin still logs in. The environment file never reached the process. Confirm the unit contains EnvironmentFile=/etc/default/minio, run sudo systemctl daemon-reload, then restart the service. MinIO reads its root credentials once at startup, so editing that file without a restart changes nothing.

Address already in use at startup. Another process holds port 9000. Find it with sudo ss -ltnp | grep :9000 before you change MinIO's port.

Uploads over 1 MB fail through the proxy. nginx answered 413 Request Entity Too Large and MinIO never saw the request. Set client_max_body_size 0 in the server block.

SignatureDoesNotMatch. Either the secret key is wrong, or something between the client and MinIO rewrote the Host header, which the signature covers.

RequestTimeTooSkewed. The clock on the client or the server is wrong. Every S3 request carries a timestamp and is rejected outside a 15 minute window. Check timedatectl and confirm that time synchronisation is active.

Access Denied on a bucket you know exists. The key is scoped to a different bucket. Print what the policy actually allows with mc admin policy info local restic-rw and compare the bucket name in the resource lines.

FAQ

Достаточно ли MinIO на одном узле для реальных резервных копий?

Этого достаточно в качестве цели для restic, если он запущен на отдельной машине, отличной от той, где хранятся защищаемые данные. Этого недостаточно, если такая копия — единственная. Развертывание на одном диске не обеспечивает избыточности, поэтому внутри MinIO нет второй копии, и при выходе из строя диска VPS объекты будут потеряны. Храните вторую копию в другом месте и выполните восстановление из обоих источников хотя бы один раз, чтобы убедиться в работоспособности процесса.

Почему sha256sum -c выдает ошибку при проверке файла контрольных сумм MinIO?

Потому что метка после хеша внутри этого файла указывает на релиз minio.RELEASE.2025-09-07T16-13-09Z, в то время как ваш скачанный файл обычно называется minio. sha256sum -c ищет файл с именем, указанным внутри файла контрольных сумм, не находит его и сообщает о No such file or directory и WARNING: 1 listed file could not be read. Сам файл скачан корректно. Сравните строки хешей напрямую и игнорируйте метку, так как она не несет никакой функции безопасности.

Куда делась веб-консоль администратора MinIO?

В мае 2025 года MinIO удалила функции администрирования из консоли Community Edition, оставив в веб-интерфейсе только браузер объектов. Управление бакетами и пользователями теперь осуществляется с помощью клиента mc с использованием команд, таких как mc admin user add и mc admin policy attach. Это поддерживаемый способ работы в Community Edition, а не обходное решение, поэтому данное руководство выполняет все действия через командную строку.

Как указать restic использовать MinIO в качестве S3-бэкенда?

Установите AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY в значения ключа доступа MinIO и его секретного ключа, затем используйте строку репозитория вида s3:https://s3.example.com/restic, где последний элемент пути — это имя бакета. Сначала создайте бакет с помощью mc mb, так как ключ, ограниченный одним бакетом, не имеет прав на создание новых бакетов. restic шифрует все данные собственным паролем репозитория перед отправкой, поэтому MinIO хранит только зашифрованный текст и не видит ваши файлы.

Обязательно ли запускать MinIO за nginx?

Вам необходим TLS (transport layer security) в любом случае, когда клиент находится не на той же машине, так как учетные данные S3 и данные объектов передаются внутри запроса. Прокси на 443 порту с сертификатом от certbot — самый простой способ добиться этого, к тому же это избавляет от необходимости настраивать обновление сертификатов внутри MinIO. MinIO также может самостоятельно завершать TLS, если указать --certs-dir на директорию, содержащую public.crt и private.key, но тогда сервисной учетной записи потребуется доступ на чтение к обновленному приватному ключу, что требует дополнительных усилий для достижения того же результата.

#minio#s3#object-storage#self-hosted#vps