Автор выбрал фонд Open Internet/Free Speech для получения пожертвования в рамках программы Write for DOnations.
От облачных решений для резервного копирования данных до обеспечивающих бесперебойную работу сетей доставки контента (CDN), возможность хранения неструктурированных больших бинарных объектов (blob) с возможностью доступа к этим объектам через HTTP API, известное как хранилище объектов, являются неотъемлемой частью современной технологической среды.
Minio — это популярный сервер хранения объектов с открытым исходным кодом, совместимый с облачным хранилищем Amazon S3. Приложения, которые были настроены для связи с Amazon S3, могут также быть настроены для связи с Minio, что позволяет Minio служить жизнеспособной альтернативой S3, если вам потребуется более эффективный контроль сервера хранилища объектов. Служба может хранить неструктурированные данные, такие как фото, видео, файлы журнала, резервные копии и образы контейнеров/виртуальных машин, и даже может предоставить один сервер хранения объектов, объединяющий в пул множество дисков, размещенных на разных серверах.
Minio написана на языке Go, имеет клиент командной строки и интерфейс браузера и поддерживает простую службу очереди для расширенного протокола организации очереди сообщений (AMQP), Elasticsearch, Redis, NATS, и PostgreSQL. По всем этим причинам знакомство с настройкой сервера хранения объектов Minio может обеспечить большую гибкость и практическую пользу для вашего проекта.
В этом обучающем руководстве вы:
Установите сервер Minio на вашем сервере Ubuntu 18.04 и настроите службу systemd
.
Настроите сертификат SSL/TLS с помощью Let’s Encrypt для безопасной коммуникации между сервером и клиентом.
Получите доступ к интерфейсу браузера Minio через HTTPS для использования и администрирования сервера.
Для данного обучающего руководства вам потребуется следующее:
Один сервер Ubuntu 18.04, настроенный в соответствии с руководством по начальной настройке сервера Ubuntu 18.04, включая пользователя sudo без прав root и брандмауэр.
Зарегистрированное полное доменное имя. Вы можете приобрести его на Namecheap или получить бесплатно на Freenom. В этом обучающем руководстве ваш домен будет представлен как your_domain
.
Следующие записи DNS, настроенные для вашего сервера Minio. Вы можете воспользоваться нашей документацией для записей DNS, чтобы узнать, как добавлять их в дроплет DigitalOcean.
Запись A с именем вашего сервера (например, minio-server.your_domain
), которая указывает на IPv4-адрес вашего сервера объектов.
(Опционально) Если вы хотите, чтобы ваш сервер был доступен через IPv6, вам потребуется запись AAAA с именем вашего сервера, указывающая на IPv6-адреса сервера объектов.
Вы можете установить сервер Minio, скомпилировав исходный код или использовав бинарный файл. Чтобы выполнить установку с помощью исходного кода, вам потребуется наличие установленного Go 1.12 в вашей системе.
На этом шаге вы выполните установку сервера с помощью предварительно скомпилированного бинарного файла, а затем настроите сервер Minio.
Во-первых, выполните вход на ваш сервер, заменив sammy
на ваше имя пользователя и your_server_ip
на IP-адрес вашего сервера Ubuntu 18.04:
- ssh sammy@your_server_ip
Если вы не обновляли базу данных пакетов за последнее время, обновите ее:
- sudo apt update
Затем загрузите бинарный файл сервера Minio с официального веб-сайта:
- wget https://dl.min.io/server/minio/release/linux-amd64/minio
Вы получите примерно следующий результат:
Output--2019-08-27 15:08:49-- https://dl.min.io/server/minio/release/linux-amd64/minio
Resolving dl.min.io (dl.min.io)... 178.128.69.202
Connecting to dl.min.io (dl.min.io)|178.128.69.202|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 44511616 (42M) [application/octet-stream]
Saving to: ‘minio’
minio 100%[===================>] 42.45M 21.9MB/s in 1.9s
2019-08-27 15:08:51 (21.9 MB/s) - ‘minio’ saved [44511616/44511616]
После завершения загрузки файл с именем minio
будет находиться в вашей рабочей директории. Используйте следующую команду, чтобы получить исполняемый файл:
- sudo chmod +x minio
Теперь переместите файл в каталог /usr/local/bin
, где скрипт запуска Minio systemd
ожидает его найти:
- sudo mv minio /usr/local/bin
Это позволит нам записать юнит-файл службы на следующих шагах данного обучающего модуля, чтобы обеспечить автоматический запуск Minio при загрузке системы.
По соображениям безопасности рекомендуется избегать запуска сервера Minio с правами root. Это позволит ограничить ущерб, который может быть нанесен системе при нарушении безопасности. Поскольку скрипт systemd
, который вы будете использовать в шаге 2, ищет учетную запись и группу с именем minio-user
, создайте нового пользователя с этим именем:
- sudo useradd -r minio-user -s /sbin/nologin
В этой команде вы использовали флаг -s
для настройки /sbin/nologin
в качестве оболочки для minio-user
. Это оболочка, которая не позволяет пользователю выполнять вход, в чем нет необходимости для minio-user
.
Далее передайте право владения для двоичного файла Minio пользователю minio-user
:
- sudo chown minio-user:minio-user /usr/local/bin/minio
Затем вам необходимо создать директорию, в которой Minio будет хранить файлы. Это место будет местом хранения бакетов, которые вы будете использовать позднее для организации объектов, которые вы храните на вашем сервере Minio. В этом обучающем модуле будет использоваться имя каталога minio
:
- sudo mkdir /usr/local/share/minio
Передайте пользователю minio-user
право владения этим каталогом:
- sudo chown minio-user:minio-user /usr/local/share/minio
Большинство файлов конфигурации сервера хранятся в каталоге /etc
, поэтому именно здесь необходимо создать ваш файл конфигурации:
- sudo mkdir /etc/minio
Передайте пользователю minio-user
право владения этим каталогом:
- sudo chown minio-user:minio-user /etc/minio
Используйте Nano или ваш любимый текстовый редактор для создания файла среды, необходимого для изменения конфигурации по умолчанию:
- sudo nano /etc/default/minio
После открытия файла добавьте следующие строки, чтобы задать несколько важных переменных среды в файле среды:
MINIO_ACCESS_KEY="minio"
MINIO_VOLUMES="/usr/local/share/minio/"
MINIO_OPTS="-C /etc/minio --address your_server_ip:9000"
MINIO_SECRET_KEY="miniostorage"
Давайте рассмотрим эти переменные и значения, которые вы задали:
MINIO_ACCESS_KEY
: данная переменная задает ключ доступа, который вы будете использовать для доступа к пользовательскому интерфейсу браузера Minio.MINIO_SECRET_KEY
: данная переменная задает закрытый ключ, который вы будете использовать для передачи учетных данных для входа в интерфейс Minio. В этом обучающем модуле мы будем использовать значение miniostorage
, но мы рекомендуем выбрать другой, более сложный пароль для обеспечения безопасности вашего сервера.MINIO_VOLUMES
: данная переменная определяет директорию хранения, которую вы создали для ваших бакетов.MINIO_OPTS
: эта переменная определяет, где и как сервер обслуживает данные. Флаг -C
указывает Minio каталог конфигурации, который следует использовать, а флаг --address
указывает IP-адрес и порт для привязки. Если IP-адрес не указан, Minio будет привязываться к любому адресу, заданному на сервере, включая localhost
и любые связанные с Docker IP-адреса, поэтому мы рекомендуем напрямую указать IP-адрес здесь. Если хотите, вы можете изменить используемый по умолчанию порт 9000
.Сохраните и закройте файл среды после внесения изменений.
Вы установили Minio и задали значения для ряда важных переменные среды. Далее вам нужно настроить запуск сервера в качестве системной услуги.
На этом шаге вы настроите сервер Minio для управления им в качестве службы systemd
.
Во-первых, загрузите официальный файл дескриптора службы Minio с помощью следующей команды:
- curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
Вы получите примерно следующий результат:
Output
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 835 100 835 0 0 6139 0 --:--:-- --:--:-- --:--:-- 6139
После завершения загрузки файл с именем minio.service
будет находиться в вашей рабочей директории.
Чтобы проверить содержимое файла minio.service
перед применением, откройте его в текстовом редакторе:
- 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
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=65536
# 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
, которого вы создали ранее. Также он имплементирует переменные среды, которые вы задали на последнем шаге, и настраивает автоматический запуск сервера. Дополнительную информацию о юнит-файлах systemd
можно найти в нашем руководстве Знакомство с юнитами Systemd и юнит-файлами.
После изучения содержания скрипта закройте текстовый редактор.
Systemd требует, чтобы юнит-файлы хранились в каталоге конфигурации systemd
, поэтому нужно переместить файл minio.service
в этот каталог:
- sudo mv minio.service /etc/systemd/system
Затем запустите следующую команду, чтобы перезагрузить все юниты systemd:
- sudo systemctl daemon-reload
Затем активируйте запуск Minio при загрузке:
- sudo systemctl enable minio
Результат будет выглядеть следующим образом:
OutputCreated symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.
Теперь, когда скрипт systemd установлен и настроен, пришло время для запуска сервера.
На этом шаге вы запустите сервер и измените настройки брандмауэра, чтобы разрешить доступ через интерфейс браузера.
Запустите сервер Minio:
- sudo systemctl start minio
Затем проверьте статус Minio, IP-адрес, к которому он привязан, использование памяти и многое другое, воспользовавшись следующей командой:
- sudo systemctl status minio
Результат будет выглядеть следующим образом:
Output● minio.service - MinIO
Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-12-09 21:54:02 UTC; 46s ago
Docs: https://docs.min.io
Process: 3405 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exit 1; fi (code=exited, status=0/SUCCES
Main PID: 3407 (minio)
Tasks: 7 (limit: 1152)
CGroup: /system.slice/minio.service
└─3407 /usr/local/bin/minio server -C /etc/minio --address your_server_IP:9000 /usr/local/share/minio/
Dec 09 21:54:02 cart-Minion-Object-1804-1 systemd[1]: Started MinIO.
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Endpoint: http://your_server_IP:9000
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Browser Access:
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: http://your_server_IP:9000
...
Затем активируйте доступ через брандмауэр для сервера Minio на указанном порту. В этом обучающем модуле мы используем порт 9000
.
Добавьте правило:
- sudo ufw allow 9000
Затем активируйте брандмауэр:
- sudo ufw enable
Результат будет выглядеть следующим образом:
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)?
Нажмите y
и ENTER
для подтверждения. Вы получите следующий результат:
OutputFirewall is active and enabled on system startup
Теперь Minio готов принимать трафик, но перед подключением к серверу вам нужно защитить коммуникации, установив сертификат SSL/TLS.
На этом шаге вы обеспечите безопасность доступа к серверу Minio с помощью закрытого ключа и публичного сертификата, полученного от центра сертификации (CA), в нашем случае это будет Let’s Encrypt. Для получения бесплатного сертификата SSL вы будете использовать Certbot.
Во-первых, разрешите доступ HTTP и HTTPS через брандмауэр. Для этого откройте порт 80
, используемый для HTTP:
- sudo ufw allow 80
Затем откройте порт 443
для HTTPS:
- sudo ufw allow 443
После добавления этих правил проверьте статус брандмауэра с помощью следующей команды:
- sudo ufw status verbose
Вы получите примерно следующий результат:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
9000 ALLOW IN Anywhere
443 ALLOW IN Anywhere
80 ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
9000 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)
Команда подтверждает, что порты 80
и 443
открыты, и гарантирует, что ваш сервер принимает запросы из Интернета.
Далее вам нужно установить Certbot. Поскольку Certbot использует отдельный репозиторий PPA, вам нужно будет добавить его в список репозиториев перед установкой Certbot, как показано ниже:
В рамках подготовки к добавлению репозитория PPA необходимо сначала установить software-properties-common
, пакет для управления PPA:
- sudo apt install software-properties-common
Этот пакет предоставляет ряд полезных скриптов для добавления и удаления PPA, чтобы избежать необходимости делать это вручную.
Теперь добавьте репозиторий Universe:
- sudo add-apt-repository universe
Этот репозиторий содержит бесплатное программное обеспечение с открытым исходным кодом, поддерживаемое сообществом Ubuntu, но официально не поддерживаемое Canonical, разработчиками Ubuntu. Здесь мы найдем репозиторий Certbot.
Затем необходимо добавить репозиторий Certbot:
- sudo add-apt-repository ppa:certbot/certbot
Результат будет выглядеть следующим образом:
OutputThis is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu(s).
More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot
Press [ENTER] to continue or ctrl-c to cancel adding it
Нажмите ENTER
, чтобы продолжить.
Затем обновите список пакетов:
- sudo apt update
Установите certbot
:
- sudo apt install certbot
Теперь вы можете использовать certbot
для получения нового сертификата SSL.
Поскольку Ubuntu 18.04 еще не поддерживает автоматическую установку, вам придется использовать команду certonly
и --standalone
для получения сертификата:
- sudo certbot certonly --standalone -d minio-server.your_domain
--standalone
означает, что этот сертификат используется для встроенного автономного веб-сервера. Дополнительную информацию по этому вопросу можно найти в нашем руководстве Использование автономного режима Certbot для получения SSL-сертификатов Let’s Encrypt в Ubuntu 18.04.
Результат будет выглядеть следующим образом:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):
Добавьте адрес электронной почты и нажмите ENTER
.
После этого Certbot попросит вас зарегистрироваться с помощью Let’s Encrypt:
Output- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel:
Введите A
и нажмите ENTER
, чтобы согласиться.
Теперь вам нужно ответить, хотите ли вы поделиться своим адресом электронной почты с Electronic Frontier Foundation:
Output- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
После того как вы ответите Y
или N
, ваши открытый и закрытый ключи будут сгенерированы и сохранены в каталоге /etc/letsencrypt/live/minio-server.your_domain_name
.
Затем скопируйте эти два файла (privkey.pem
и fullchain.pem
) в каталог certs
в папке конфигурации сервера Minio. В этом обучающем модуле данная папка имеет адрес /etc/minio
. Используйте следующую команду для копирования privkey.pem
и переименования файла private.key
:
- sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/privkey.pem /etc/minio/certs/private.key
Выполните те же действия для fullchain.pem
, указав для результата имя public.crt
.
- sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/fullchain.pem /etc/minio/certs/public.crt
Теперь измените права владения файлов на minio-user
. Сначала сделайте это для private.key
:
- sudo chown minio-user:minio-user /etc/minio/certs/private.key
А затем для public.crt
:
- sudo chown minio-user:minio-user /etc/minio/certs/public.crt
Перезапустите сервер Minio, чтобы он узнал о сертификате и начал использовать HTTPS:
- sudo systemctl restart minio
Сертификаты Let’s Encrypt действительны только 90 дней. Это сделано для стимулирования пользователей к автоматизации процесса обновления сертификатов. Пакет Certbot, установленный автоматически, добавляет скрипт обновления в директорию /etc/cron.d
. Этот скрипт запускается дважды в день и будет автоматически запускать любой сертификат, до истечения срока которого осталось менее 30 дней.
После этого подключение Minio можно считать защищенным, а ваш сертификат SSL/TLS будет автоматически обновляться. На следующем шаге вы подключитесь к Minio через браузер для использования сервера.
На этом шаге вы сможете безопасно подключиться к веб-интерфейсу Minio через HTTPS, а затем создать бакеты и загрузить в них объекты.
Получите доступ к веб-интерфейсу, указав в адресной строке браузера https://minio-server.your_domain:9000
.
Вы увидите экран входа на сервер Minio:
Теперь выполните вход в главный интерфейс, введя свои учетные данные. Для Access Key введите MINIO_ACCESS_KEY
из файла среды /etc/default/minio
в шаге 1. Для Secret Key введите MINIO_SECRET_KEY
из того же файла. После ввода учетных данных нажмите круглую кнопку со стрелкой непосредственно под полями для ввода.
После этого вы попадете в пользовательский интерфейс Minio. Для создания нового бакета, в котором вы будете хранить объекты, нажмите светло-красную кнопку + в правом нижнем углу интерфейса, чтобы отобразить две дополнительные желтые кнопки.
Нажмите среднюю желтую кнопку и введите имя вашего нового бакета в окне запроса и нажмите ENTER
, чтобы сохранить ваш ответ. Ваш новый бакет готов к использования в качестве хранилища.
Примечание: когда вы будете называть ваш бакет, убедитесь, что имя содержит только строчные буквы, числа или дефис. Minio ограничивает соглашения по именованию бакетов для соответствия стандартам AWS S3.
Когда вы захотите добавить объекты в бакет, нажмите ту же светло-красную кнопку, как и ранее, а затем нажмите верхнюю желтую кнопку для открытия диалога для загрузки файла.
К данному моменту вы получили общее представление о базовом веб-интерфейсе для создания бакетов и загрузки объектов.
Теперь у вас есть собственный сервер для хранения объектов Minio, к которому вы можете безопасно подключиться через веб-интерфейс, используя сертификат Let’s Encrypt SSL/TLS. Также вы можете рассмотреть настольные клиенты Minio для FreeBSD, Linux, Mac и Windows в качестве альтернативного способа использования и администрирования вашего сервера для хранения объектов.
Если вы хотите увеличить объем хранилища Minio сверх объема дисков вашего сервера, вы можете использовать службу блочного хранилища DigitalOcean для добавления к серверу тома, за счет чего размер хранилища увеличивается (максимум до 80 ТБ).
Дополнительную информацию о Minio можно найти на сайте с документацией проекта. Если вы хотите узнать больше о хранении объектов, ознакомьтесь с нашими обучающими модулями по хранению объектов.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!