SSD Nodes Learn 8GB RAM — $66/год
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-01

MinIO на VPS: собственное S3-хранилище для restic

Настройте MinIO на Ubuntu 24.04: проверьте бинарный файл, создайте модуль systemd, подключите mc и restic, а также используйте presigned URLs без облачного S3.

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

Что дает вам самостоятельно размещаемое объектное хранилище с MinIO

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

S3 (simple storage service) — это HTTP API, а не файловая система. Вы выполняете PUT объекта в bucket по ключу, а затем получаете его с помощью GET. Частичная запись и переименование не поддерживаются. Такая модель удобна для средств резервного копирования: объект либо записан полностью, либо не записан.

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

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

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

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

Этот факт определяет остальную часть руководства. Поэтому MinIO здесь принимает соединения на 127.0.0.1 и получает доступ к интернету только через прокси, который вы контролируете. Если вам нужно отслеживать исправления, соберите MinIO из исходного кода. В 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 завершает работу при запуске с ошибкой о недопустимых учетных данных, поскольку ключ доступа должен содержать не менее 3 символов, а секретный ключ — не менее 8.

MINIO_VOLUMES — это путь к данным, а MINIO_OPTS содержит флаги. Привязка к 127.0.0.1 означает, что доступ к S3 API извне этой VPS пока невозможен. Это правильное значение по умолчанию. Позже доступ открывается намеренно через прокси с сертификатом.

Создайте модуль 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, а конечная точка проверки работоспособности должна ответить 200. journalctl -u minio -n 20 --no-pager показывает адрес API, на котором сервер принимает соединения. Если модуль продолжает перезапускаться, systemd прекращает попытки и записывает Start request repeated too quickly. Это означает, что MinIO завершается при каждом запуске. Причина указана в строках выше этого сообщения, поэтому просмотрите журнал вверх.

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

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

Клиент MinIO называется 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

Зарегистрируйте сервер как псевдоним, затем переместите через него объект.

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 в учетной записи одного администратора и выдавайте каждому приложению собственный ключ.

Передача одного объекта с помощью подписанного URL

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

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

В строке запроса содержатся X-Amz-Signature и X-Amz-Expires. Здесь есть два момента, которые часто вызывают вопросы. Ссылка создается на основе конечной точки из использованного псевдонима. Поэтому псевдоним для 127.0.0.1 создает ссылку, которую может открыть только этот компьютер. Создайте второй псевдоним для общедоступного имени узла, если ссылки будут передаваться другим пользователям. Кнопки отзыва нет. Подпись остается действительной до истечения срока действия. Поэтому единственный доступный вам способ управления — задать короткий срок действия. Формат подписи S3 допускает срок не более 7 дней.

Выделите для restic отдельный ключ и bucket

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

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. С ней потребовалась бы на одна команда меньше, но она предоставляет полный доступ ко всем bucket на сервере. В приведенной выше политике bucket намеренно указан дважды: один раз как arn:aws:s3:::restic, чтобы работало перечисление bucket, и один раз как arn:aws:s3:::restic/* для объектов внутри него. В S3 bucket и его объекты являются отдельными ресурсами, поэтому политика, в которой указан только один из них, завершается ошибкой, похожей на неисправность клиента.

Проверьте ограничение до того, как начнете ему доверять.

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. Непроверенная политика остается предположением.

Теперь укажите bucket для 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 хранит только ciphertext. При утрате пароля резервная копия становится недоступной. Задание, запущенное таймером systemd, не имеет терминала для ввода пароля, поэтому задайте RESTIC_PASSWORD_FILE как файл с режимом 600 для запланированных резервных копирований.

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

Завершение TLS на nginx

MinIO работает на localhost, поэтому nginx является внешней точкой доступа. Сначала выпустите сертификат, как описано в разделе Сертификаты Let's Encrypt с certbot и nginx, затем используйте этот блок конфигурации сервера.

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. Иначе любой более крупный файл отклоняется с ошибкой 413 Request Entity Too Large ещё до того, как запрос поступит в MinIO. proxy_request_buffering off передаёт загрузку напрямую, поскольку при значении по умолчанию весь запрос сначала сохраняется во временный файл. Поэтому для крупного объекта требуется вдвое больше дискового пространства. proxy_set_header Host $http_host имеет особенно важное значение: подпись S3 включает заголовок Host. Если прокси изменяет этот заголовок, каждый запрос завершается ошибкой SignatureDoesNotMatch, хотя в журнале доступа отображается обычный входящий запрос.

Также укажите MinIO его публичное имя. Тогда создаваемые им ссылки будут указывать на прокси, а не на localhost.

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

Правила межсетевого экрана остаются минимальными. Разрешите SSH и HTTPS. Для портов 9000 и 9001 не создавайте правил, поскольку адрес, привязанный к 127.0.0.1, недоступен с другого компьютера независимо от настроек межсетевого экрана. Команды приведены в разделе Основы настройки ufw на VPS.

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

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

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

Выбирайте управляемый S3, если контракт или регулятор требует блокировки объектов или надежности хранения в нескольких регионах. Это также разумный выбор, если вы не хотите получать уведомление в 03:00 из-за заполненного диска. Замороженная сборка — еще одна объективная причина. По состоянию на July 2026 предварительно скомпилированный community binary датирован September 2025 и не получает исправлений. Его запуск означает принятие этого ограничения. Другой вариант — собрать MinIO из исходного кода и самостоятельно следить за проектом.

Важно обозначить одно ограничение, поскольку этот вопрос возникает часто. Объектное хранилище не является базой данных. При каждой записи полностью заменяется объект, поэтому размещать рабочий файл SQL в S3-бакете медленно и небезопасно. Храните базу данных на локальном диске, а резервную копию помещайте в бакет: в материале запуск SQLite в production на VPS описано такое разделение.

Режимы отказа и сообщения, которые вы увидите

Служба завершается сразу после systemctl enable --now. Прочитайте journalctl -u minio -n 30 --no-pager. Failed to load environment files: No such file or directory означает, что /etc/default/minio отсутствует или его путь указан с ошибкой в unit-файле. Сообщение, заканчивающееся на permission denied, означает, что учетная запись службы не может записывать в каталог данных. Проверьте, что stat -c '%U' /var/lib/minio/data выводит minio-user.

minioadmin:minioadmin по-прежнему выполняет вход. Файл окружения не был передан процессу. Убедитесь, что unit-файл содержит EnvironmentFile=/etc/default/minio, выполните sudo systemctl daemon-reload, затем перезапустите службу. MinIO считывает учетные данные root один раз при запуске. Поэтому изменения в этом файле без перезапуска ничего не меняют.

Address already in use при запуске. Другой процесс использует порт 9000. Найдите его с помощью sudo ss -ltnp | grep :9000, прежде чем изменять порт MinIO.

Загрузка файлов размером более 1 MB через прокси завершается ошибкой. nginx вернул 413 Request Entity Too Large, и MinIO не получил запрос. Установите client_max_body_size 0 в блоке сервера.

SignatureDoesNotMatch. Секретный ключ указан неправильно, либо компонент между клиентом и MinIO изменил заголовок Host, который учитывается при формировании подписи.

RequestTimeTooSkewed. Часы на клиенте или сервере показывают неправильное время. Каждый запрос S3 содержит временную метку. Запрос отклоняется, если отклонение превышает 15 минут. Проверьте timedatectl и убедитесь, что синхронизация времени активна.

Access Denied для bucket, существование которого подтверждено. Ключ имеет область действия для другого bucket. Выведите разрешения политики с помощью mc admin policy info local restic-rw и сравните имя bucket в строках ресурса.

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 (защита транспортного уровня) требуется, если клиент находится на другой машине. Учетные данные S3 и данные объектов передаются внутри запроса. Прокси на порту 443 с сертификатом от certbot — самый простой способ настроить такую схему. При этом продление сертификата не зависит от MinIO. MinIO также может самостоятельно завершать TLS-соединения, если указать в --certs-dir каталог, содержащий public.crt и private.key. Однако тогда учетной записи службы потребуется доступ на чтение обновленного закрытого ключа. Это создает дополнительную работу при том же результате.

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