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 "======================================"
|
|||
|
|
|