Введение
Minio — популярный сервер хранения объектов с открытым исходным кодом, совместимый с сервисом облачного хранения Amazon S3. Приложения, которые были настроены для связи с Amazon S3, также могут быть настроены для связи с Minio, что позволяет Minio стать жизнеспособной альтернативой S3, если вам нужен больший контроль над сервером хранилища объектов. Служба хранит неструктурированные данные, такие как фотографии, видео, файлы журналов, резервные копии и образы контейнеров/ВМ, и даже может предоставить единый сервер хранения объектов, который группирует несколько дисков, разбросанных по множеству серверов.
Minio написан на Go, поставляется с клиентом командной строки и интерфейсом браузера и поддерживает простую службу очередей для таких сервисов, как Advanced Message Queuing Protocol (AMQP), Elasticsearch, Redis, NATS и PostgreSQL. По всем этим причинам изучение того, как настроить сервер Minio Object Storage, может сделать ваш проект более гибким и полезным.
В этом уроке вам нужно будет:
- Установите сервер Minio на свой сервер Ubuntu 18.04.
- Настройте сертификат SSL/TLS с помощью Let’s Encrypt для защиты связи между сервером и клиентом.
- Доступ к интерфейсу браузера Minio через HTTPS для использования и администрирования сервера.
Предпосылки
Для выполнения этого урока вам понадобятся:
- Сервер Ubuntu 18.04, настроенный с пользователем sudo без полномочий root и брандмауэром.
- Полностью зарегистрированное доменное имя. В этом руководстве ваш домен будет представлен как
your_domain
.
Если вы хотите установить Minio на удаленный сервер, продолжайте читать, в противном случае, если вы хотите установить Minio на локальный компьютер, пропустите первый абзац «Подключение к серверу» и читайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:
ssh root@IP_DEL_SERVER
Далее вам нужно будет ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:
ssh nome_utente@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Шаг 1. Установите и настройте сервер Minio.
Вы можете установить сервер Minio, скомпилировав исходный код или используя двоичный файл. Чтобы установить его из исходного кода, в вашей системе должен быть установлен как минимум Go 1.12.
На этом этапе вы установите сервер с помощью предварительно скомпилированного двоичного файла, а затем настроите сервер Minio.
Если вы недавно не обновляли базу данных пакетов, обновите ее сейчас:
sudo apt update
Затем загрузите бинарный файл сервера Minio с официального сайта:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
Вы получите вывод, аналогичный следующему:
--2020-03-17 22:21:52-- 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: 47321088 (45M) [application/octet-stream]
Saving to: 'minio'
minio 100%[=================================================================================================================>] 45.13M 13.8MB/s in 4.0s
2020-03-17 22:21:57 (11.2 MB/s) - 'minio' saved [47321088/47321088]
Когда загрузка будет завершена, в вашем рабочем каталоге появится файл с именем minio
. Используйте следующую команду, чтобы сделать его исполняемым:
sudo chmod +x minio
Теперь переместите файл в каталог /usr/local/bin
, где скрипт запуска systemd
Minio ожидает его найти:
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
, поэтому создайте файл конфигурации Minio там:
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
сообщает Minio IP-адрес и порт для привязки. Если IP-адрес не указан, Minio будет привязываться ко всем адресам, настроенным на сервере, включаяlocalhost
и все IP-адреса, связанные с Docker, поэтому рекомендуется указать IP-адрес прямо здесь. При желании порт по умолчанию9000
можно изменить.
Наконец, сохраните и закройте файл среды, когда вы закончите вносить изменения.
Вы установили Minio и установили некоторые важные переменные среды. Далее вы настроите сервер для работы в качестве системной службы.
Шаг 2. Установите сценарий запуска Minio Systemd.
На этом шаге вы настроите сервер Minio для управления в качестве службы systemd
.
Сначала загрузите официальный файл дескриптора службы Minio, используя следующую команду:
curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
Вы получите вывод, аналогичный следующему:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 835 100 835 0 0 4133 0 --:--:-- --:--:-- --:--:-- 4133
Когда загрузка будет завершена, в рабочем каталоге появится файл с именем 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
, поэтому переместите файл minio.service
в эту папку с помощью команды mv:
sudo mv minio.service /etc/systemd/system
Затем выполните следующую команду, чтобы перезагрузить все диски systemd:
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.
Теперь, когда скрипт systemd установлен и настроен, пришло время запустить сервер.
Шаг 3: Запустите сервер Minio
На этом шаге вы запустите сервер и измените брандмауэр, чтобы разрешить доступ через интерфейс браузера.
Сначала запустите сервер Minio:
sudo systemctl start minio
Затем проверьте состояние Minio, IP-адрес, с которым он связан, использование памяти и многое другое, выполнив эту команду:
sudo systemctl status minio
Вы получите следующий вывод:
● minio.service - MinIO
Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-03-17 22:04:34 CET; 4s ago
Docs: https://docs.min.io
Process: 2176 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/SUCCESS)
Main PID: 2180 (minio)
Tasks: 8 (limit: 2298)
CGroup: /system.slice/minio.service
└─2180 /usr/local/bin/minio server -C /etc/minio --address YOUR_ADDRESS:9000 /usr/local/share/minio/
Затем разрешите доступ через брандмауэр к серверу Minio на настроенном порту. В этом руководстве используется порт 9000
.
Сначала добавьте правило:
sudo ufw allow 9000
Затем включите брандмауэр:
sudo ufw enable
Появится следующее приглашение:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Нажмите y
и ENTER
для подтверждения. Затем вы получите следующий вывод:
Firewall is active and enabled on system startup
Теперь Minio готов принимать трафик, но перед подключением к серверу вы обезопасите свои коммуникации, установив SSL/TLS-сертификат.
Шаг 4: Защита доступа к серверу Minio с помощью сертификата TLS
На этом этапе вы защитите доступ к своему серверу Minio с помощью закрытого ключа и открытого сертификата, полученного от центра сертификации (ЦС), в данном случае Let's Encrypt. Чтобы получить бесплатный SSL-сертификат, вы будете использовать Certbot.
Во-первых, разрешите доступ HTTP и HTTPS через брандмауэр. Для этого откройте порт 80
, который является портом для HTTP:
sudo ufw allow 80
Затем откройте порт 443
для HTTPS:
sudo ufw allow 443
После добавления этих правил проверьте состояние вашего брандмауэра с помощью следующей команды:
sudo ufw status verbose
Вы получите вывод, аналогичный следующему:
Status: 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
Вы получите следующий вывод:
This 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
означает, что этот сертификат предназначен для встроенного автономного веб-сервера.
Вы получите следующий вывод:
Saving 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:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
. Используйте команду cp, чтобы скопировать 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 действительны только в течение девяноста дней. Это должно побудить пользователей автоматизировать процесс обновления сертификата. Установленный вами пакет Certbot автоматически добавляет сценарий обновления в /etc/cron.d
. Этот скрипт запускается два раза в день и автоматически продлевает любой сертификат в течение тридцати дней после истечения срока его действия.
Благодаря этому соединение Minio теперь защищено, а сертификат TLS SSL будет автоматически обновляться для вас. На следующем шаге вы подключитесь к Minio через браузер, чтобы использовать сервер.
Шаг 5. Безопасно подключитесь к веб-интерфейсу Minio через HTTPS.
На этом шаге вы безопасно подключитесь к веб-интерфейсу Minio через HTTPS, затем создадите bukects и загрузите в них объекты.
Получите доступ к веб-интерфейсу, указав в браузере на. https://minio-server.your_domain:9000
Вы увидите экран входа в сервер Minio.
Теперь войдите в основной интерфейс, введя свои учетные данные. Для Ключа доступа введите значение MINIO_ACCESS_KEY
, установленное в файле среды /etc/default/minio
на шаге 1. Для Секретного ключа введите значение, установленное в поле MINIO_SECRET_KEY
того же файла. После ввода учетных данных нажмите кнопку непосредственно под полями ввода.
Затем вам будет представлен пользовательский интерфейс Minio. Чтобы создать новую корзину, в которой можно хранить объекты, нажмите кнопку в правом нижнем углу основного интерфейса, чтобы отобразить две дополнительные желтые кнопки.
Нажмите среднюю желтую кнопку и введите имя нового сегмента в подсказке, нажав ENTER
, чтобы сохранить ответ. Теперь ваше новое ведро готово к использованию в качестве хранилища.
Примечание.
Если вы хотите добавить объекты в корзину, нажмите ту же светло-красную кнопку, что и раньше, а затем нажмите желтую кнопку вверху, чтобы открыть запрос на загрузку файла.
Вывод
Теперь у вас есть собственный сервер хранения объектов Minio, к которому вы можете безопасно подключиться через веб-интерфейс с помощью сертификата Let's Encrypt SSL/TLS. При желании вы можете рассмотреть настольный клиент Minio для FreeBSD, Linux, Mac и Windows в качестве альтернативного способа использования и администрирования вашего сервера хранилища объектов.
Подробнее о Minio можно узнать на сайте документации проекта.