Поиск по сайту:

Как установить и настроить S3-совместимый сервер хранения объектов с помощью Minio в Ubuntu 20.04


На этой странице

  1. Предпосылки
  2. Шаг 1. Установите сервер Minio
  3. Шаг 2. Подготовка диска объектного хранилища
  4. Шаг 3. Настройка Minio
  5. Шаг 4. Установите службу Minio
  6. Шаг 5. Запустите сервер Minio
  7. Шаг 6. Защитите Minio с помощью SSL
  8. Шаг 7. Подключитесь к Minio и настройте сегменты
  9. Шаг 8. Установите клиент Minio и получите доступ к файлам
  10. Заключение

Хранилище объектов — это хранилище и извлечение неструктурированных больших двоичных объектов данных и метаданных с использованием HTTP API. Вместо того, чтобы хранить файлы обычным способом, разбивая их на блоки для хранения на диске с помощью файловой системы, мы имеем дело с целыми объектами, хранящимися в сети. Эти объекты могут быть изображением, видео, журналами, HTML-файлами, резервными копиями, изображениями контейнеров или любым автономным блоком байтов. Они неструктурированы, поскольку не следуют какой-либо конкретной схеме или формату.

Minio — это популярный самостоятельный сервер хранения объектов с открытым исходным кодом, совместимый с Amazon S3. Minio написан на Go, поставляется с независимыми от ОС клиентами и интерфейсом браузера. В этом руководстве вы установите сервер Minio на сервер Ubuntu 20.04, защитите его с помощью SSL-сертификата от Lets Encrypt и получите к нему доступ с помощью клиента командной строки.

Предпосылки

  • An Ubuntu 20.04 server with a non-root user with sudo privileges.
  • A fully registered domain name, minio.example.com.
  • An Ubuntu 20.04 machine to act as a client.
  • The system is updated.

    $ sudo apt update
    
  • Few packages that your system needs.

    $ sudo apt install wget curl nano ufw software-properties-common apt-transport-https ca-certificates -y
    

    Some of these packages may already be installed on your system.

Шаг 1 — Установите сервер Minio

Minio, написанный на Go, поставляется в виде простого двоичного файла. Загрузите бинарный файл с официального сайта Minios.

$ wget https://dl.min.io/server/minio/release/linux-amd64/minio

Сделайте файл исполняемым.

$ chmod +x minio

Переместите двоичный файл в каталог /usr/local/bin.

$ sudo mv minio /usr/local/bin

Проверьте установку.

$ minio --version
minio version RELEASE.2022-01-28T02-28-16Z

Шаг 2. Подготовьте диск объектного хранилища

Нам нужно подготовить выделенное блочное устройство для хранения объектов. Путь к хранилищу может быть либо на вашем диске, либо на втором диске, подключенном к вашему серверу. Для нашего урока мы используем дополнительный диск.

$ lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda      8:0    0  50G  0 disk
??sda1   8:1    0  50G  0 part /
sdb      8:16   0  50G  0 disk

Установите приложение parted для создания и изменения разделов диска.

$ sudo apt install parted

Выполните следующие команды, чтобы смонтировать дополнительный диск в каталог /data.

$ sudo parted -s -a optimal -- /dev/sdb mklabel gpt
$ sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
$ sudo parted -s -- /dev/sdb align-check optimal 1
$ sudo mkfs.ext4 /dev/sdb1
$ echo "/dev/sdb1 /data ext4 defaults 0 0" | sudo tee -a /etc/fstab
$ sudo mkdir /data
$ sudo mount -a

Шаг 3 — Настройте Минио

Сервер Minio никогда не должен запускаться от имени пользователя root во избежание каких-либо повреждений. Поэтому мы создадим пользователя и группу с именем minio-user.

$ sudo useradd -r minio-user -s /sbin/nologin

Флаг -s устанавливает оболочку для учетной записи пользователя на /sbin/nologin, что не позволяет пользователю войти в систему.

Измените владельца двоичного файла Minio.

$ sudo chown minio-user:minio-user /usr/local/bin/minio

Передайте право собственности на каталог /data minio-user.

$ sudo chown minio-user:minio-user /data -R

Следующим шагом будет создание файла конфигурации для Minio. Создайте каталог для хранения файла конфигурации.

$ sudo mkdir /etc/minio

Передайте право собственности на каталог пользователю minio-user.

$ sudo chown minio-user:minio-user /etc/minio

Создайте файл среды для хранения конфигурации по умолчанию. Этот файл должен храниться в каталоге /etc/default.

$ sudo nano /etc/default/minio

Вставьте следующий код с переменными среды, чтобы определить Minio.

MINIO_ROOT_USER="minio"
MINIO_VOLUMES="/data"
MINIO_OPTS="-C /etc/minio --address your_server_ip:9000 --console-address :9001"
MINIO_ROOT_PASSWORD="miniostorage"

Давайте проверим все переменные и то, что они делают.

  • MINIO_ROOT_USER: устанавливает ключ доступа/пользователя для доступа к пользовательскому интерфейсу Minio. Длина должна быть не менее 3 символов.
  • MINIO_VOLUMES: указывает каталог для хранения данных.
  • MINIO_OPTS: устанавливает различные параметры для сервера Minio. Флаг -C указывает каталог конфигурации, созданный ранее. Флаг --address указывает IP-адрес и порт для привязки. Если вы не укажете IP-адрес, Minio будет привязываться к каждому IP-адресу на сервере, включая локальный хост или любые IP-адреса, связанные с Docker. Порт по умолчанию — 9000. Флаг --console-address устанавливает порт 9001 для веб-консоли Minio.
  • MINIO_ROOT_PASSWORD: устанавливает закрытый ключ/пароль для доступа к интерфейсу Minio. Длина должна быть не менее 8 символов. Выберите надежный и сложный секретный ключ.

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Шаг 4 — Установите службу Minio

Загрузите служебный файл Minio из официального репозитория Github.

$ curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service

Откройте файл в редакторе Nano.

$ nano minio.service

Вы найдете следующий код.

[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local/

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=1048576

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

Эта служба запускает Minio с помощью пользователя minio-user, которого мы создали ранее. Он использует /etc/default/minio в качестве файла среды, который мы настроили на шаге 3. После этого закройте файл, нажав Ctrl + X и введя Y при появлении запроса.

Переместите служебный файл в каталог /etc/systemd/system.

$ sudo mv minio.service /etc/systemd/system

Перезагрузите сервисный демон.

$ sudo systemctl daemon-reload

Включите службу Minio.

$ sudo systemctl enable minio
Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.

Шаг 5 — Запустите сервер Minio

Запустите Минио-сервер.

$ sudo systemctl start minio

Проверьте статус.

$ sudo systemctl status minio
? minio.service - MinIO
     Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-02-01 13:30:44 UTC; 5s ago
       Docs: https://docs.min.io
    Process: 26068 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exi>
   Main PID: 26076 (minio)
      Tasks: 6
     Memory: 55.3M
     CGroup: /system.slice/minio.service
             ??26076 /usr/local/bin/minio server -C /etc/minio --address 209.208.26.129:9000 --console-address :9001 /data

Разрешите порты 9000 и 9001 с помощью простого брандмауэра (UFW).

$ sudo ufw allow 9000
$ sudo ufw allow 9001

Включите брандмауэр.

$ sudo ufw enable

Откройте URL-адрес http://your_server_ip:9001 в браузере, и вы увидите следующий экран.

Шаг 6. Защитите Minio с помощью SSL

Мы будем использовать Lets Encrypt для защиты Minio. Чтобы получить бесплатный SSL-сертификат, нам нужно скачать инструмент Certbot. Для этого мы будем использовать установщик пакета Snapd.

Установите установщик снапа.

$ sudo apt install snapd

Убедитесь, что ваша версия Snapd обновлена.

$ sudo snap install core 
$ sudo snap refresh core

Установите Сертбот.

$ sudo snap install --classic certbot

Используйте следующую команду, чтобы убедиться, что команда Certbot выполняется, создав символическую ссылку на каталог /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Создайте SSL-сертификат.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d minio.example.com

Приведенная выше команда загрузит сертификат в каталог /etc/letsencrypt/live/minio.example.com на вашем сервере.

Скопируйте файлы privkey.pem и fullchain.pem в каталог certs в папке конфигурации Minios.

$ sudo cp /etc/letsencrypt/live/minio.example.com/privkey.pem /etc/minio/certs/private.key
$ sudo cp /etc/letsencrypt/live/minio.example.com/fullchain.pem /etc/minio/certs/public.crt

Измените владельца скопированных сертификатов.

$ sudo chown minio-user:minio-user /etc/minio/certs/private.key
$ sudo chown minio-user:minio-user /etc/minio/certs/public.crt

Разрешить порты HTTP и HTTPS через брандмауэр.

$ sudo ufw allow 80
$ sudo ufw allow 443

Откройте файл конфигурации Minio.

$ sudo nano /etc/default/minio

Добавьте следующую строку внизу.

MINIO_SERVER_URL="https://minio.example.com:9000"

Хотя доступ к консоли осуществляется через порт 9001, URL-адрес сервера SSL использует порт 9000 для доступа к API Minio.

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Перезапустите Минио-сервер.

$ sudo systemctl restart minio

Вы можете получить доступ к консоли Minio через URL-адрес https://minio.example.com:9001 в своем браузере.

Шаг 7. Подключитесь к Minio и настройте Buckets

Войдите в консоль Minio, используя имя пользователя и пароль, установленные ранее, для доступа к панели управления Minio.

Нажмите кнопку «Создать корзину», чтобы создать свою первую корзину.

Поскольку мы устанавливаем Minio на один сервер/диск, некоторые функции отключены. Введите имя сегмента и нажмите кнопку «Создать сегмент», чтобы продолжить. После завершения вы получите следующий экран.

Чтобы загрузить файлы, нажмите кнопку «Обзор», и появится следующая страница.

Нажмите кнопку «Загрузить файлы» и снова выберите «Загрузить файлы», чтобы открыть браузер файлов на вашем ПК. Вы можете выбрать сразу несколько файлов для загрузки.

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

Это все. Вы создали свою первую корзину и загрузили несколько файлов. Далее мы будем подключаться к серверу с помощью клиента, доступ к этому ведру. и управлять им.

Шаг 8. Установите клиент Minio и получите доступ к файлам.

Для нашей цели мы установим клиент командной строки Minios на другой компьютер с Ubuntu 20.04. Вы также можете загрузить настольные клиенты с официальной страницы загрузки Minios.

Загрузите официальный бинарный файл Minio.

$ wget https://dl.min.io/client/mc/release/linux-amd64/mc

Сделайте бинарный файл исполняемым.

$ chmod +x mc

Переместите двоичный файл в каталог /usr/local/bin.

$ sudo mv mc /usr/local/bin

Проверьте установку.

$ mc --version
mc version RELEASE.2022-02-02T02-03-24Z

Установите псевдоним для вашего сервера Minio, чтобы вы могли получить к нему доступ, используя легко идентифицируемое имя. Замените minio и miniostorage выбранными вами именем пользователя и паролем для сервера.

$ mc alias set howtoforge https://minio.example.com:9000 minio miniostorage
mc: Configuration written to `/home/<user>/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/home/<user>/.mc/share`.
mc: Initialized share uploads `/home/<user>/.mc/share/uploads.json` file.
mc: Initialized share downloads `/home/<user>/.mc/share/downloads.json` file.
Added `howtoforge` successfully.

Клиент Minio хранит все конфигурации в каталоге /home/user/.mc.

Получите информацию о сервере Minio. Для этого мы используем подкоманду admin.

$ mc admin info howtoforge
?  minio.example.com:9000
   Uptime: 2 minutes
   Version: 2022-01-28T02:28:16Z
   Network: 1/1 OK

9.6 MiB Used, 1 Bucket, 5 Objects

Чтобы вывести список всех сегментов вашего сервера Minio, используйте следующую команду.

$ mc ls howtoforge
[2022-02-01 16:59:46 UTC]     0B howtoforge/

Чтобы вывести список всех объектов/файлов в данном сегменте, используйте следующую команду.

$ mc ls howtoforge/howtoforge
[2022-02-02 05:32:28 UTC] 2.9MiB STANDARD IMG_20160717_184947_HDR.jpg
[2022-02-02 05:32:00 UTC] 2.2MiB STANDARD IMG_20160903_220639_HDR.jpg
[2022-02-02 05:28:25 UTC] 2.4MiB STANDARD IMG_20161006_213936_HDR.jpg
[2022-02-02 05:28:07 UTC] 2.2MiB STANDARD IMG_20161015_194409_HDR.jpg
[2022-02-02 03:33:28 UTC]  25KiB STANDARD quarantine.jpg

Вы можете создать новое ведро, используя следующую команду.

$ mc mb howtoforge/bucket2
Bucket created successfully `howtoforge/bucket2`.

Давайте создадим новый файл, который будет скопирован в это ведро.

$ touch test.txt

Чтобы скопировать файл во вновь созданную корзину, используйте следующую команду.

$ mc cp test.txt howtoforge/bucket2
/home/nspeaks/test.txt:    0 B / ? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????

Перечислите вновь скопированный файл.

$ mc ls howtoforge/bucket2
[2022-02-02 07:06:44 UTC]     0B STANDARD test.txt

Вы можете проверить все команды, используя аргумент --help.

$ mc --help
NAME:
  mc - MinIO Client for cloud storage and filesystems.

USAGE:
  mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]

COMMANDS:
  alias      set, remove and list aliases in configuration file
  ls         list buckets and objects
  mb         make a bucket
  rb         remove a bucket
  cp         copy objects
  mirror     synchronize object(s) to a remote site
  cat        display object contents
  head       display first 'n' lines of an object
  pipe       stream STDIN to an object
  share      generate URL for temporary access to an object
  find       search for objects
  sql        run sql queries on objects
  stat       show object metadata
  mv         move objects
  tree       list buckets and objects in a tree format
  du         summarize disk usage recursively
  retention  set retention for object(s)
  legalhold  manage legal hold for object(s)
  diff       list differences in object name, size, and date between two buckets
  rm         remove object(s)
  version    manage bucket versioning
  ilm        manage bucket lifecycle
  encrypt    manage bucket encryption config
  event      manage object notifications
  watch      listen for object notification events
  undo       undo PUT/DELETE operations
  anonymous  manage anonymous access to buckets and objects
  tag        manage tags for bucket and object(s)
  replicate  configure server side bucket replication
  admin      manage MinIO servers
  update     update mc to latest release
  support    Support related commands

GLOBAL FLAGS:
  --autocompletion              install auto-completion for your shell
  --config-dir value, -C value  path to configuration folder (default: "/home/<user>/.mc")
  --quiet, -q                   disable progress bar display
  --no-color                    disable color theme
  --json                        enable JSON lines formatted output
  --debug                       enable debug output
  --insecure                    disable SSL certificate verification
  --help, -h                    show help
  --version, -v                 print the version

TIP:
  Use 'mc --autocompletion' to enable shell autocompletion

VERSION:
  RELEASE.2022-02-02T02-03-24Z

Заключение

На этом мы завершаем наше руководство, в котором вы установили сервер хранения объектов Minio на сервер на базе Ubuntu 20.04. Он доступен через веб-консоль, защищенную SSL-сертификатом Lets Encrypt. Вы также установили клиент командной строки Minio на другом компьютере с Ubuntu для управления сервером Minio и доступа к нему.

Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.