#!/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 "======================================"