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 "================================================"
|
|||
|
|
|