nakama/minio-setup-public.sh

175 lines
5.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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