nakama/minio-setup-public.sh

175 lines
5.9 KiB
Bash
Raw Normal View History

2025-11-21 01:14:56 +00:00
#!/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 "================================================"