Главная
|
Услуги и цены
VDS
Выделенные серверы
Размещение сервера
|
F.A.Q
|
О компании
|

Установка и настройка MinIO на Ubuntu: S3-совместимое хранилище

Содержание:

  • Требования
  • Шаг 1. Обновляем систему
  • Шаг 2. Создаём системного пользователя
  • Шаг 3. Создаём директорию для данных
  • Шаг 4. Скачиваем MinIO
  • Шаг 5. Создаём файл конфигурации
  • Шаг 6. Создаём systemd-сервис
  • Шаг 7. Открываем порты в файрволе
  • Шаг 8. Веб-консоль MinIO
  • Шаг 9. Подключаемся из приложения
  • Настройка HTTPS (опционально, но рекомендуется)
  • Полезные команды
  • Итог

Если вам требуется хранить загрузки пользователей, бэкапы, медиа и при этом не хотите платить за AWS S3 или зависеть от стороннего сервиса, MinIO решает именно эту задачу. Это самостоятельное S3-совместимое хранилище, которое разворачивается на вашем VDS за 10 минут и работает с любым кодом, написанным под Amazon S3.

Любая библиотека, которая умеет работать с AWS S3 (boto3 в Python, aws-sdk в Node.js, S3Client в Java), будет работать с MinIO без изменений в коде.

Требования

  • Ubuntu 20.04 / 22.04 / 24.04
  • Минимум 1 ГБ RAM
  • Права sudo
  • Желательно отдельный диск или раздел для хранения данных

MinIO не требует много ресурсов для старта

Note

Если вы только купили сервер:

Подключитесь к серверу

Шаг 1. Обновляем систему

sudo apt update && sudo apt upgrade -y

Шаг 2. Создаём системного пользователя

С MinIO не рекомендуется работать от root. Создаём отдельного пользователя:

sudo useradd --no-create-home --shell /bin/false minio-user

Шаг 3. Создаём директорию для данных

sudo mkdir -p /var/lib/minio/data

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

Назначаем владельца:

sudo chown -R minio-user:minio-user /var/lib/minio

Шаг 4. Скачиваем MinIO

Скачиваем последний стабильный бинарник напрямую с официального сайта:

cd /tmp
curl -LO https://dl.min.io/server/minio/release/linux-amd64/minio

Копируем в /usr/local/bin и делаем исполняемым:

sudo cp minio /usr/local/bin/
sudo chmod +x /usr/local/bin/minio
sudo chown minio-user:minio-user /usr/local/bin/minio

Проверяем, что бинарник работает:

minio --version

Должна вернуться строка с версией.

Проверка версии MinIO

Шаг 5. Создаём файл конфигурации

Вместо того чтобы передавать все параметры через аргументы командной строки, вынесем их в отдельный файл. Так удобнее управлять настройками и не светить пароль в списке процессов.

sudo nano /etc/default/minio

Вставляем:

# Директория для хранения данных
MINIO_VOLUMES="/var/lib/minio/data"

# Адрес и порт API (S3-совместимый интерфейс)
MINIO_OPTS="--address :9000 --console-address :9001"

# Логин и пароль администратора
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=ВашНадёжныйПароль

MINIO_VOLUMES — путь к данным. Можно указать несколько директорий через пробел для распределённого режима, но для одного сервера одной директории достаточно.

--address :9000 — порт S3 API. Именно его указывают в коде приложений как endpoint.

--console-address :9001 — порт веб-консоли. Через неё управляете хранилищем через браузер.

MINIO_ROOT_USER / MINIO_ROOT_PASSWORD — замените на свои. Пароль должен быть не короче 8 символов, иначе MinIO откажется запускаться.

Закрываем файл и ставим правильные права — пароль не должен быть виден другим пользователям:

sudo chmod 600 /etc/default/minio
sudo chown minio-user:minio-user /etc/default/minio

Шаг 6. Создаём systemd-сервис

sudo nano /etc/systemd/system/minio.service

Вставляем:

[Unit]
Description=MinIO Object Storage
Documentation=https://docs.min.io
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_OPTS $MINIO_VOLUMES
Restart=always
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

LimitNOFILE=65536 — увеличиваем лимит открытых файлов.

Запускаем и добавляем в автозагрузку:

sudo systemctl daemon-reload
sudo systemctl start minio
sudo systemctl enable minio

Проверяем статус:

sudo systemctl status minio

Проверка статуса MinIO

Ищем Active: active (running). Если что-то пошло не так — смотрим логи:

sudo journalctl -u minio -n 50

Чаще всего проблема в правах на директорию или слишком коротком пароле.

Шаг 7. Открываем порты в файрволе

sudo ufw allow 9000/tcp
sudo ufw allow 9001/tcp

Порт 9000 — для приложений (S3 API).

Порт 9001 — для веб-консоли.

Совет: если MinIO используется только вашим приложением на том же сервере, порт 9000 наружу открывать не нужно, приложение подключится через localhost:9000. Наружу достаточно открыть только 9001 для управления, и то лучше ограничить по IP.

Шаг 8. Веб-консоль MinIO

Открываем в браузере: http://ваш_ip:9001

Вводим логин и пароль из файла конфигурации. Попадаем в веб-интерфейс.

Веб-консоль MinIO

Здесь можно:

  • Создавать и удалять bucket (корзины — аналог папок верхнего уровня в S3)
  • Загружать и скачивать файлы
  • Управлять правами доступа
  • Создавать дополнительных пользователей и сервисные аккаунты
  • Смотреть статистику использования

Создаём первый bucket

  1. В левом меню нажмите Buckets
  2. Нажмите Create Bucket
  3. Укажите имя, например, uploads
  4. Нажмите Create Bucket

Bucket создан. Теперь можно загружать файлы через интерфейс или через API.

Создание bucket в MinIO

Настройка bucket в MinIO

Шаг 9. Подключаемся из приложения

Это главное преимущество MinIO, стандартный S3 API. Покажем, как подключиться из Python и Node.js

Python (boto3)

pip install boto3
import boto3

s3 = boto3.client(
    's3',
    endpoint_url='http://ваш_ip:9000',
    aws_access_key_id='minioadmin',
    aws_secret_access_key='ВашНадёжныйПароль',
    region_name='us-east-1'  # MinIO не использует регионы, но boto3 требует значение
)

# Загружаем файл
s3.upload_file('local_file.txt', 'uploads', 'remote_file.txt')

# Скачиваем файл
s3.download_file('uploads', 'remote_file.txt', 'downloaded_file.txt')

# Список файлов в bucket
response = s3.list_objects_v2(Bucket='uploads')
for obj in response.get('Contents', []):
    print(obj['Key'])

Node.js (AWS SDK v3)

npm install @aws-sdk/client-s3
import { S3Client, PutObjectCommand, ListObjectsV2Command } from '@aws-sdk/client-s3';
import { readFileSync } from 'fs';

const client = new S3Client({
    endpoint: 'http://ваш_ip:9000',
    region: 'us-east-1',
    credentials: {
        accessKeyId: 'minioadmin',
        secretAccessKey: 'ВашНадёжныйПароль',
    },
    forcePathStyle: true, // Обязательно для MinIO
});

// Загружаем файл
await client.send(new PutObjectCommand({
    Bucket: 'uploads',
    Key: 'remote_file.txt',
    Body: readFileSync('local_file.txt'),
}));

Важно: параметр forcePathStyle: true обязателен при работе с MinIO в Node.js SDK. Без него SDK будет формировать URL в формате bucket.ваш_ip, что не работает с MinIO по умолчанию.

Настройка HTTPS (опционально, но рекомендуется)

Если MinIO доступен извне, то проще всего поставить Nginx как обратный прокси и выпустить SSL-сертификат через Let's Encrypt.

Устанавливаем Nginx и Certbot:

sudo apt install -y nginx certbot python3-certbot-nginx

Создаём конфиг Nginx для MinIO API:

sudo nano /etc/nginx/sites-available/minio
server {
    listen 80;
    server_name minio.ваш_домен.ru;

    location / {
        proxy_pass http://localhost:9000;
        proxy_set_header Host $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;

        # Для загрузки больших файлов
        client_max_body_size 1000m;
        proxy_request_buffering off;
    }
}

server {
    listen 80;
    server_name console.ваш_домен.ru;

    location / {
        proxy_pass http://localhost:9001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Активируем конфиг:

sudo ln -s /etc/nginx/sites-available/minio /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Выпускаем SSL-сертификаты:

sudo certbot --nginx -d minio.ваш_домен.ru -d console.ваш_домен.ru

После этого API будет доступен по https://minio.ваш_домен.ru, консоль — по https://console.ваш_домен.ru.

Полезные команды

Установить MinIO Client (mc), утилиту для управления MinIO из командной строки:

curl -LO https://dl.min.io/client/mc/release/linux-amd64/mc
sudo cp mc /usr/local/bin/
sudo chmod +x /usr/local/bin/mc

Добавить MinIO в mc:

mc alias set local http://localhost:9000 minioadmin ВашНадёжныйПароль

Список всех bucket:

mc ls local

Создать bucket:

mc mb local/my-bucket

Загрузить файл:

mc cp local_file.txt local/my-bucket/

Зеркалировать папку в bucket (удобно для бэкапов):

mc mirror /var/backups/ local/backups/

Посмотреть статистику использования:

mc du local/my-bucket

Работа с MinIO Client

Итог

MinIO подходит когда нужно S3-хранилище без зависимости от облачных провайдеров. Разворачивается быстро, работает надёжно, совместим со всем экосистемой AWS S3.

logo
© 2022 62yun
Все права защищены
vk.com/62yuncom
support@62yun.ru
logo
vk.com/62yuncom
support@62yun.ru
Услуги
VDS Выделенные серверы
Полезное
F.A.Q О компании Политика конфиденциальности Оферта
Способы оплаты
wechatpay visa mastercard
MirAccept
Партнеры
25port
© 2022 62yun Все права защищены
ВВЕРХ