175 lines
5.9 KiB
Bash
175 lines
5.9 KiB
Bash
#!/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 "================================================"
|
||
|