#!/usr/bin/env bash
set -eu

# Скрипт установки MinIO Community на Debian 13
# Запускать от root (sudo)

MINIO_USER="minio-user"
MINIO_BIN="/usr/local/bin/minio"
DATA_DIR="/mnt/s3data"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="admin123"
MINIO_SERVICE="/etc/systemd/system/minio.service"
MINIO_DOWNLOAD_URL_LINUX_AMD64="https://dl.min.io/server/minio/release/linux-amd64/minio"

echo "=== Установка зависимостей ==="
apt update
apt install -y wget ca-certificates gnupg2

echo "=== Создаём пользователя и директорию данных ==="
if ! id -u "${MINIO_USER}" >/dev/null 2>&1; then
  useradd -r -s /sbin/nologin -M "${MINIO_USER}"
  echo "Создан пользователь ${MINIO_USER}"
else
  echo "Пользователь ${MINIO_USER} уже существует"
fi

mkdir -p "${DATA_DIR}"
chown -R ${MINIO_USER}:${MINIO_USER} "${DATA_DIR}"
chmod 750 "${DATA_DIR}"
echo "Директория ${DATA_DIR} подготовлена и принадлежит ${MINIO_USER}"

echo "=== Скачиваем minio binary ==="
# Попытаемся скачать для amd64; если нужна arm64 — замените ссылку
if [ -f "${MINIO_BIN}" ]; then
  echo "${MINIO_BIN} уже существует — делаем резервную копию"
  mv "${MINIO_BIN}" "${MINIO_BIN}.bak.$(date +%s)" || true
fi

wget -qO "${MINIO_BIN}" "${MINIO_DOWNLOAD_URL_LINUX_AMD64}"
chmod +x "${MINIO_BIN}"
chown root:root "${MINIO_BIN}"
echo "MinIO загружен в ${MINIO_BIN}"

echo "=== Создаём systemd unit ==="
cat > "${MINIO_SERVICE}" <<EOF
[Unit]
Description=MinIO
Documentation=https://min.io
Wants=network-online.target
After=network-online.target

[Service]
User=${MINIO_USER}
Group=${MINIO_USER}
Environment="MINIO_ROOT_USER=${MINIO_ROOT_USER}"
Environment="MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}"
# Если хотите убрать консоль или поменять адреса — отредактируйте ExecStart
ExecStart=${MINIO_BIN} server ${DATA_DIR} --console-address ":9009"
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now minio

echo "=== Настройка firewall (если установлен ufw) ==="
if command -v ufw >/dev/null 2>&1; then
  echo "Разрешаем порты 9000 и 9009 в ufw"
  ufw allow 9000/tcp
  ufw allow 9009/tcp
fi

echo
echo "=== Установка завершена ==="
echo "MinIO запущен как systemd сервис 'minio'."
echo "S3 API:  http://<server-ip>:9000"
echo "Console: http://<server-ip>:9009"
echo "Логин: ${MINIO_ROOT_USER}  Пароль: ${MINIO_ROOT_PASSWORD}"
echo
echo "Проверить статус: sudo systemctl status minio"
echo "Просмотр логов: sudo journalctl -u minio -f"
