160 lines
4.7 KiB
Bash
160 lines
4.7 KiB
Bash
#!/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 "======================================"
|
||
|