#!/bin/bash # Скрипт для настройки публичного доступа к MinIO bucket echo "🗄️ Настройка публичного доступа к MinIO bucket" echo "================================================" # Цвета RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Читаем конфигурацию из .env if [ -f .env ]; then echo "✅ Найден файл .env" export $(grep -v '^#' .env | xargs) else echo -e "${RED}❌ Файл .env не найден!${NC}" exit 1 fi # Проверяем переменные if [ -z "$MINIO_ENDPOINT" ] || [ -z "$MINIO_PORT" ]; then echo -e "${RED}❌ MINIO_ENDPOINT или MINIO_PORT не установлены в .env${NC}" exit 1 fi if [ -z "$MINIO_ACCESS_KEY" ] || [ -z "$MINIO_SECRET_KEY" ]; then echo -e "${RED}❌ MINIO_ACCESS_KEY или MINIO_SECRET_KEY не установлены в .env${NC}" exit 1 fi BUCKET=${MINIO_BUCKET:-nakama-media} MINIO_URL="http://${MINIO_ENDPOINT}:${MINIO_PORT}" echo "" echo "Конфигурация:" echo " Endpoint: $MINIO_URL" echo " Bucket: $BUCKET" echo "" # Проверяем доступность MinIO echo "🔍 Проверка доступности MinIO..." if curl -s --connect-timeout 5 "$MINIO_URL/minio/health/live" > /dev/null 2>&1; then echo -e "${GREEN}✅ MinIO доступен${NC}" else echo -e "${RED}❌ MinIO недоступен по адресу $MINIO_URL${NC}" echo "" echo "Проверьте:" echo " 1. MinIO запущен?" echo " 2. Порт $MINIO_PORT открыт?" echo " 3. Endpoint правильный?" exit 1 fi # Проверяем наличие mc (MinIO Client) if ! command -v mc &> /dev/null; then echo "" echo -e "${YELLOW}⚠️ MinIO Client (mc) не установлен${NC}" echo "" echo "Установка mc..." if [[ "$OSTYPE" == "linux-gnu"* ]]; then wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /tmp/mc chmod +x /tmp/mc sudo mv /tmp/mc /usr/local/bin/mc elif [[ "$OSTYPE" == "darwin"* ]]; then brew install minio/stable/mc || { echo "Устанавливаем вручную..." curl https://dl.min.io/client/mc/release/darwin-amd64/mc -o /tmp/mc chmod +x /tmp/mc sudo mv /tmp/mc /usr/local/bin/mc } else echo -e "${RED}❌ Неподдерживаемая ОС. Установите mc вручную: https://min.io/docs/minio/linux/reference/minio-mc.html${NC}" exit 1 fi echo -e "${GREEN}✅ mc установлен${NC}" fi echo "" echo "📝 Настройка mc alias..." # Настраиваем alias для mc mc alias set nakama-minio "$MINIO_URL" "$MINIO_ACCESS_KEY" "$MINIO_SECRET_KEY" --api S3v4 if [ $? -eq 0 ]; then echo -e "${GREEN}✅ Alias настроен${NC}" else echo -e "${RED}❌ Ошибка настройки alias${NC}" echo "Проверьте MINIO_ACCESS_KEY и MINIO_SECRET_KEY" exit 1 fi echo "" echo "🗂️ Проверка bucket..." # Проверяем существование bucket if mc ls nakama-minio/$BUCKET > /dev/null 2>&1; then echo -e "${GREEN}✅ Bucket '$BUCKET' существует${NC}" else echo -e "${YELLOW}⚠️ Bucket '$BUCKET' не найден${NC}" echo "Создание bucket..." mc mb nakama-minio/$BUCKET if [ $? -eq 0 ]; then echo -e "${GREEN}✅ Bucket создан${NC}" else echo -e "${RED}❌ Ошибка создания bucket${NC}" exit 1 fi fi echo "" echo "🔓 Установка публичной политики..." # Устанавливаем публичный доступ mc anonymous set download nakama-minio/$BUCKET if [ $? -eq 0 ]; then echo -e "${GREEN}✅ Bucket теперь публичный (download)${NC}" else echo -e "${RED}❌ Ошибка установки политики${NC}" exit 1 fi echo "" echo "🧪 Тестирование..." # Создаем тестовый файл echo "Test file from Nakama setup" > /tmp/nakama-test.txt # Загружаем тестовый файл mc cp /tmp/nakama-test.txt nakama-minio/$BUCKET/test/nakama-test.txt if [ $? -eq 0 ]; then echo -e "${GREEN}✅ Тестовый файл загружен${NC}" # Проверяем доступность TEST_URL="$MINIO_URL/$BUCKET/test/nakama-test.txt" echo "Проверка доступности: $TEST_URL" HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$TEST_URL") if [ "$HTTP_CODE" == "200" ]; then echo -e "${GREEN}✅ Файл доступен публично!${NC}" echo "" echo -e "${GREEN}🎉 Всё настроено правильно!${NC}" # Удаляем тестовый файл mc rm nakama-minio/$BUCKET/test/nakama-test.txt > /dev/null 2>&1 rm /tmp/nakama-test.txt else echo -e "${RED}❌ Файл недоступен (HTTP $HTTP_CODE)${NC}" echo "" echo "Попробуйте настроить политику вручную:" echo "1. Откройте MinIO Console: http://$MINIO_ENDPOINT:9001/" echo "2. Buckets → $BUCKET → Manage → Access Policy" echo "3. Выберите 'Public' или добавьте JSON политику" fi else echo -e "${RED}❌ Ошибка загрузки тестового файла${NC}" fi echo "" echo "================================================" echo "Готово! Теперь:" echo "1. Убедитесь что в .env установлено: MINIO_PUBLIC_BUCKET=true" echo "2. Перезапустите Docker: docker-compose restart backend" echo "3. Создайте пост с картинкой в приложении" echo "================================================"