nakama/setup-minio-nginx.sh

160 lines
4.7 KiB
Bash
Raw Normal View History

2025-11-21 01:44:54 +00:00
#!/bin/bash
# Скрипт для настройки Nginx + SSL для MinIO
set -e
echo "🔧 Настройка Nginx для MinIO"
echo "======================================"
# Проверка root прав
if [[ $EUID -ne 0 ]]; then
echo "❌ Этот скрипт должен быть запущен с правами root (sudo)"
exit 1
fi
# Переменные
DOMAIN="minio.glpshchn.ru"
CONSOLE_DOMAIN="admin.minio.glpshchn.ru"
EMAIL="your-email@example.com" # Измените на ваш email для Let's Encrypt
echo ""
echo "Настройка для доменов:"
echo " API: https://$DOMAIN"
echo " Console: https://$CONSOLE_DOMAIN"
echo ""
# Установка Nginx (если не установлен)
if ! command -v nginx &> /dev/null; then
echo "📦 Установка Nginx..."
apt update
apt install -y nginx
fi
# Установка Certbot (если не установлен)
if ! command -v certbot &> /dev/null; then
echo "📦 Установка Certbot..."
apt install -y certbot python3-certbot-nginx
fi
# Создание директории для certbot
mkdir -p /var/www/certbot
# Временный конфиг для получения сертификатов
echo "📝 Создание временного конфига для получения SSL..."
cat > /etc/nginx/sites-available/minio-temp << 'EOF'
server {
listen 80;
server_name minio.glpshchn.ru admin.minio.glpshchn.ru;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 200 "MinIO setup in progress...";
add_header Content-Type text/plain;
}
}
EOF
# Активация временного конфига
ln -sf /etc/nginx/sites-available/minio-temp /etc/nginx/sites-enabled/minio-temp
# Удаление дефолтного конфига
rm -f /etc/nginx/sites-enabled/default
# Проверка конфигурации
echo "🔍 Проверка конфигурации Nginx..."
nginx -t
# Перезагрузка Nginx
echo "🔄 Перезагрузка Nginx..."
systemctl reload nginx
# Получение SSL сертификатов
echo ""
echo "🔒 Получение SSL сертификатов от Let's Encrypt..."
echo ""
certbot certonly --webroot \
-w /var/www/certbot \
-d $DOMAIN \
-d $CONSOLE_DOMAIN \
--email $EMAIL \
--agree-tos \
--non-interactive
if [ $? -ne 0 ]; then
echo "❌ Ошибка получения SSL сертификата"
echo "Проверьте:"
echo " 1. DNS записи A для $DOMAIN и $CONSOLE_DOMAIN указывают на этот сервер"
echo " 2. Порт 80 открыт в firewall"
echo " 3. Домены доступны из интернета"
exit 1
fi
echo ""
echo "✅ SSL сертификаты получены!"
# Копирование основного конфига
echo "📝 Установка основного конфига..."
cp nginx-minio.conf /etc/nginx/sites-available/minio.glpshchn.ru
# Активация конфига
ln -sf /etc/nginx/sites-available/minio.glpshchn.ru /etc/nginx/sites-enabled/minio.glpshchn.ru
# Удаление временного конфига
rm -f /etc/nginx/sites-enabled/minio-temp
# Проверка конфигурации
echo "🔍 Проверка финальной конфигурации..."
nginx -t
if [ $? -ne 0 ]; then
echo "❌ Ошибка в конфигурации Nginx"
exit 1
fi
# Перезагрузка Nginx
echo "🔄 Перезагрузка Nginx с новой конфигурацией..."
systemctl reload nginx
# Настройка автообновления сертификатов
echo "⏰ Настройка автообновления SSL сертификатов..."
systemctl enable certbot.timer
systemctl start certbot.timer
# Открытие портов в firewall (если используется ufw)
if command -v ufw &> /dev/null; then
echo "🔥 Настройка firewall..."
ufw allow 'Nginx Full'
ufw allow 443/tcp
ufw allow 80/tcp
fi
echo ""
echo "======================================"
echo "✅ Настройка завершена!"
echo ""
echo "MinIO API доступен по адресу:"
echo " https://$DOMAIN"
echo ""
echo "MinIO Console доступен по адресу:"
echo " https://$CONSOLE_DOMAIN"
echo ""
echo "Проверка:"
echo " curl https://$DOMAIN/minio/health/live"
echo ""
echo "Обновите .env в Nakama:"
echo " MINIO_ENDPOINT=$DOMAIN"
echo " MINIO_PORT=443"
echo " MINIO_USE_SSL=true"
echo " MINIO_PUBLIC_URL=https://$DOMAIN"
echo ""
echo "Перезапустите backend:"
echo " docker-compose restart backend"
echo "======================================"