Установка Min.io с подключением ssl сертификата и вывод как сайт через nginx на ubuntu 18.04

Установка Min.io

Обновляем пакеты 

sudo apt update

Грузим бинарный файл сервера Minio с официального веб-сайта:

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

После завершения загрузки файл с именем minio будет находиться в вашей рабочей директории. Получаем исполняемый файл:

sudo chmod +x minio

Перемещаем файл в каталог /usr/local/bin, где скрипт запуска Minio systemd ожидает его найти:

sudo mv minio /usr/local/bin

Делаем пользователя для запуска min.io

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

Передаем право владения для двоичного файла Minio пользователю minio-user​​​:

sudo chown minio-user:minio-user /usr/local/bin/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

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

редактируем конфигурационный файл

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"

ставим свои значения в поля key, opts (ip сервера), secret

загружаем официальный файл дескриптора службы Minio с помощью следующей команды

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

копируем в systemd

sudo mv minio.service /etc/systemd/system

перезагружаем юниты

sudo systemctl daemon-reload

активируем запуск minio при загрузке

sudo systemctl enable minio

запускаем сервис minio

sudo systemctl start minio

проверяем состояние

sudo systemctl status minio

правим брендмауер добавлением правил для 9000 порта minio

sudo ufw allow 9000

активируем брендмауер (если он был неактивен, добавляем необходимые порты 80, 443, 21, 22

sudo ufw allow 80

sudo ufw allow 443

sudo ufw allow 21

sudo ufw allow 22 и потом активируем)

настройка nginx по 80 порту

в конфигурационные nginx добавляем файл например minio 

nano /etc/nginx/sites-available/minio

server { listen 80;

server_name minio.dev;

location / {

proxy_set_header

Host $http_host;

proxy_pass http://localhost:9000;

 }   }

где minio.dev — имя сайта, который привязали по А записи 

в некоторых случаях срабатывает при изменении localhost на 127.0.0.1, либо IP сервера.

Создаем симлинк на созданный конфигурационный файл

sudo ln -s /etc/nginx/sites-available/minio /etc/nginx/sites-enabled/

проверяем корректность конфигурационного файла

nginx -t

перезапускаем nginx

service nginx restart

Выпуск сертификата Let’s Encrypt и привязка к домену

Сначала установим утилиту Certbot, позволяющую автоматически настроить https и в дальнейшем запрашивать обновление сертификата при истечении по расписанию (на данный момент сертификат Let’s Encrypt нужно перевыпускать каждые 3 месяца). Для установки запустим команду

sudo apt install certbot

После установки Certbot, создайте файл для Let’s Encrypt для валидации домена ${webroot-path}/.well-known/acme-challenge директории. Создадим директорию и дадим Nginx права на нее

sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp www-data /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt

Далее создаем файл с конфигурацией

sudo nano /etc/nginx/snippets/well-known

Копируем содержание в файл

location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}

Добавляем в файл конфигурации /etc/nginx/sites-available/minio строку

include snippets/well-known;

Получим сертификат

sudo certbot certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d minio.dev -d www.minio.dev

Если все корректно с А-записью получаем сообщение

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2019-08-18. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:
   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Подключаем сертификат. Сначала генерируем 2048 битный сертификат.

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Редактируем конфигурационный файл

sudo nano /etc/nginx/sites-available/minio

server {
listen 80;
server_name minio.dev;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl http2;
server_name minio.dev;
access_log /var/log/nginx/minio.dev-ssl-access.log;
error_log /var/log/nginx/minio.dev-ssl-error.log;

ssl on;
ssl_certificate /etc/letsencrypt/live/minio.dev/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/minio.dev/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers ‘EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH’;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;

include snippets/well-known;
# To allow special characters in headers ignore_invalid_headers off;
# Allow any size file to be uploaded. Set to a value such as 1000m; to
# restrict file size to a specific value
client_max_body_size 8192M;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
# To disable buffering
proxy_buffering off;

location / {
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_set_header Host $http_host;
proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection «»;
chunked_transfer_encoding off;
proxy_pass http://localhost:9000;
# If you are using docker-compose this would be the hostname i.e. minio
# Health Check endpoint might go here. See
# https://www.nginx.com/resources/wiki/modules/healthcheck/
# /minio/health/live;
}

}

проверяем nginx

nginx -t

Перезапускаем службу service nginx restart

при необходимости проверяя конфигурацию и делаем перевыпуск сертификата по расписанию в час ночи 1 числа каждого месяца.

sudo crontab -e
0 1 1 * * /usr/bin/certbot renew & > /dev/null
Пролистать наверх