first commit
This commit is contained in:
93
scripts/check-sms-config.mjs
Normal file
93
scripts/check-sms-config.mjs
Normal file
@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import { readFileSync } from 'fs'
|
||||
import { join } from 'path'
|
||||
|
||||
// Функция для загрузки .env файла
|
||||
function loadEnv() {
|
||||
try {
|
||||
const envPath = join(process.cwd(), '.env')
|
||||
const envContent = readFileSync(envPath, 'utf8')
|
||||
|
||||
envContent.split('\n').forEach(line => {
|
||||
line = line.trim()
|
||||
if (line && !line.startsWith('#')) {
|
||||
const [key, ...valueParts] = line.split('=')
|
||||
const value = valueParts.join('=').replace(/^["']|["']$/g, '')
|
||||
if (key && value) {
|
||||
process.env[key] = value
|
||||
}
|
||||
}
|
||||
})
|
||||
} catch (error) {
|
||||
console.warn('⚠️ Не удалось загрузить .env файл, используем переменные окружения')
|
||||
}
|
||||
}
|
||||
|
||||
// Загружаем переменные окружения
|
||||
loadEnv()
|
||||
|
||||
console.log('🔍 Проверка конфигурации SMS API...')
|
||||
|
||||
const requiredSmsVars = [
|
||||
'BEELINE_SMS_USER',
|
||||
'BEELINE_SMS_PASS'
|
||||
]
|
||||
|
||||
const optionalSmsVars = [
|
||||
'BEELINE_SMS_SENDER'
|
||||
]
|
||||
|
||||
let hasErrors = false
|
||||
|
||||
// Проверяем обязательные переменные
|
||||
requiredSmsVars.forEach(varName => {
|
||||
if (!process.env[varName]) {
|
||||
console.error(`❌ Отсутствует обязательная переменная: ${varName}`)
|
||||
hasErrors = true
|
||||
} else {
|
||||
console.log(`✅ ${varName}: настроен`)
|
||||
}
|
||||
})
|
||||
|
||||
// Проверяем опциональные переменные
|
||||
optionalSmsVars.forEach(varName => {
|
||||
if (!process.env[varName]) {
|
||||
console.warn(`⚠️ Опциональная переменная отсутствует: ${varName} (будет использовано значение по умолчанию)`)
|
||||
} else {
|
||||
console.log(`✅ ${varName}: ${process.env[varName]}`)
|
||||
}
|
||||
})
|
||||
|
||||
// Проверяем формат логина (должен быть числовым)
|
||||
const smsUser = process.env.BEELINE_SMS_USER
|
||||
if (smsUser && !/^\d+$/.test(smsUser)) {
|
||||
console.error(`❌ BEELINE_SMS_USER должен быть числовым: ${smsUser}`)
|
||||
hasErrors = true
|
||||
}
|
||||
|
||||
// Проверяем длину пароля
|
||||
const smsPass = process.env.BEELINE_SMS_PASS
|
||||
if (smsPass && smsPass.length < 6) {
|
||||
console.error(`❌ BEELINE_SMS_PASS слишком короткий (минимум 6 символов)`)
|
||||
hasErrors = true
|
||||
}
|
||||
|
||||
// Проверяем, находимся ли мы в Docker окружении
|
||||
const isDocker = process.env.DOCKER_BUILD === 'true' ||
|
||||
process.env.CI === 'true' ||
|
||||
!process.env.BEELINE_SMS_USER
|
||||
|
||||
if (hasErrors) {
|
||||
if (isDocker) {
|
||||
console.warn('\n⚠️ SMS переменные не настроены во время сборки')
|
||||
console.warn('📝 Убедитесь, что они будут доступны во время выполнения')
|
||||
process.exit(0) // Не блокируем сборку
|
||||
} else {
|
||||
console.error('\n❌ Обнаружены ошибки в конфигурации SMS API')
|
||||
process.exit(1)
|
||||
}
|
||||
} else {
|
||||
console.log('\n✅ Конфигурация SMS API корректна')
|
||||
process.exit(0)
|
||||
}
|
84
scripts/deploy.sh
Executable file
84
scripts/deploy.sh
Executable file
@ -0,0 +1,84 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт деплоя ProtekAuto CMS с SMS интеграцией
|
||||
set -e
|
||||
|
||||
echo "🚀 Начало деплоя ProtekAuto CMS..."
|
||||
|
||||
# Проверяем, что мы в правильной директории
|
||||
if [ ! -f "package.json" ]; then
|
||||
echo "❌ Ошибка: запустите скрипт из корневой директории проекта"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Останавливаем старые контейнеры
|
||||
echo "🛑 Остановка старых контейнеров..."
|
||||
docker-compose down --remove-orphans
|
||||
|
||||
# Проверяем переменные окружения
|
||||
echo "🔍 Проверка переменных окружения..."
|
||||
if [ ! -f "stack.env" ]; then
|
||||
echo "❌ Файл stack.env не найден"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем SMS конфигурацию
|
||||
echo "📱 Проверка SMS конфигурации..."
|
||||
source stack.env
|
||||
export $(cut -d= -f1 stack.env | grep -v '^#')
|
||||
|
||||
# Проверяем обязательные переменные для SMS
|
||||
if [ -z "$BEELINE_SMS_USER" ] || [ -z "$BEELINE_SMS_PASS" ]; then
|
||||
echo "⚠️ SMS переменные не настроены. SMS функции будут недоступны."
|
||||
echo " Для настройки SMS добавьте в stack.env:"
|
||||
echo " BEELINE_SMS_USER=ваш_логин"
|
||||
echo " BEELINE_SMS_PASS=ваш_пароль"
|
||||
echo " BEELINE_SMS_SENDER=Protekauto"
|
||||
echo ""
|
||||
read -p "Продолжить деплой без SMS? (y/n): " -n 1 -r
|
||||
echo ""
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "✅ SMS API настроен (пользователь: $BEELINE_SMS_USER)"
|
||||
fi
|
||||
|
||||
# Собираем новый образ
|
||||
echo "🔨 Сборка Docker образа..."
|
||||
docker-compose build --no-cache
|
||||
|
||||
# Запускаем новые контейнеры
|
||||
echo "🚀 Запуск новых контейнеров..."
|
||||
docker-compose up -d
|
||||
|
||||
# Ждем запуска
|
||||
echo "⏳ Ожидание запуска сервиса..."
|
||||
sleep 30
|
||||
|
||||
# Проверяем статус
|
||||
echo "🔍 Проверка статуса сервиса..."
|
||||
if docker-compose ps | grep -q "Up"; then
|
||||
echo "✅ Сервис успешно запущен!"
|
||||
|
||||
# Проверяем SMS API если настроен
|
||||
if [ ! -z "$BEELINE_SMS_USER" ] && [ ! -z "$BEELINE_SMS_PASS" ]; then
|
||||
echo "📱 Проверка SMS API..."
|
||||
sleep 5
|
||||
if curl -s -f "http://localhost:3000/api/sms/status" > /dev/null; then
|
||||
echo "✅ SMS API работает"
|
||||
else
|
||||
echo "⚠️ SMS API может быть недоступен"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🎉 Деплой завершен успешно!"
|
||||
echo "🌐 CMS доступна по адресу: http://localhost:3000"
|
||||
echo "📊 Мониторинг SMS: http://localhost:3000/api/sms/status"
|
||||
else
|
||||
echo "❌ Ошибка при запуске сервиса"
|
||||
echo "Логи:"
|
||||
docker-compose logs
|
||||
exit 1
|
||||
fi
|
84
scripts/startup.mjs
Normal file
84
scripts/startup.mjs
Normal file
@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import { spawn } from 'child_process'
|
||||
|
||||
console.log('🚀 Запуск ProtekAuto CMS...')
|
||||
|
||||
// Функция для запуска команды
|
||||
function runCommand(command, args = []) {
|
||||
return new Promise((resolve, reject) => {
|
||||
console.log(`📋 Выполняется команда: ${command} ${args.join(' ')}`)
|
||||
|
||||
const process = spawn(command, args, {
|
||||
stdio: 'inherit',
|
||||
shell: true
|
||||
})
|
||||
|
||||
process.on('close', (code) => {
|
||||
if (code === 0) {
|
||||
resolve()
|
||||
} else {
|
||||
reject(new Error(`Команда завершилась с кодом ${code}`))
|
||||
}
|
||||
})
|
||||
|
||||
process.on('error', (error) => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function startup() {
|
||||
try {
|
||||
console.log('🔄 Проверка переменных окружения...')
|
||||
|
||||
const requiredEnvVars = [
|
||||
'DATABASE_URL',
|
||||
'NEXTAUTH_SECRET',
|
||||
'AWS_ACCESS_KEY_ID',
|
||||
'AWS_SECRET_ACCESS_KEY',
|
||||
'AWS_S3_BUCKET',
|
||||
'S3_ENDPOINT'
|
||||
]
|
||||
|
||||
const optionalEnvVars = [
|
||||
'BEELINE_SMS_USER',
|
||||
'BEELINE_SMS_PASS',
|
||||
'BEELINE_SMS_SENDER'
|
||||
]
|
||||
|
||||
const missingVars = requiredEnvVars.filter(varName => !process.env[varName])
|
||||
|
||||
if (missingVars.length > 0) {
|
||||
console.error('❌ Отсутствуют обязательные переменные окружения:')
|
||||
missingVars.forEach(varName => console.error(` - ${varName}`))
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log('✅ Все обязательные переменные окружения установлены')
|
||||
|
||||
// Проверяем опциональные переменные SMS
|
||||
const missingSmsVars = optionalEnvVars.filter(varName => !process.env[varName])
|
||||
if (missingSmsVars.length > 0) {
|
||||
console.warn('⚠️ Отсутствуют переменные для SMS API (SMS функции будут недоступны):')
|
||||
missingSmsVars.forEach(varName => console.warn(` - ${varName}`))
|
||||
} else {
|
||||
console.log('✅ SMS API настроен')
|
||||
}
|
||||
|
||||
console.log('🔄 Выполнение миграций базы данных...')
|
||||
await runCommand('npx', ['prisma', 'migrate', 'deploy'])
|
||||
|
||||
console.log('🔄 Генерация Prisma клиента...')
|
||||
await runCommand('npx', ['prisma', 'generate'])
|
||||
|
||||
console.log('🚀 Запуск сервера...')
|
||||
await runCommand('npm', ['start'])
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Ошибка при запуске:', error.message)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
startup()
|
22
scripts/update-container.sh
Executable file
22
scripts/update-container.sh
Executable file
@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🚀 Обновление контейнера CMS с новыми переменными PartsAPI..."
|
||||
|
||||
# Остановка контейнера
|
||||
echo "⏹️ Остановка контейнера..."
|
||||
docker-compose down
|
||||
|
||||
# Пересборка с новыми переменными
|
||||
echo "🔨 Пересборка образа..."
|
||||
docker-compose build --no-cache
|
||||
|
||||
# Запуск с обновленными переменными
|
||||
echo "▶️ Запуск обновленного контейнера..."
|
||||
docker-compose up -d
|
||||
|
||||
# Проверка статуса
|
||||
echo "📊 Проверка статуса контейнера..."
|
||||
docker-compose ps
|
||||
|
||||
echo "✅ Обновление завершено!"
|
||||
echo "📝 Проверьте логи командой: docker-compose logs -f"
|
90
scripts/update-env.sh
Executable file
90
scripts/update-env.sh
Executable file
@ -0,0 +1,90 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для обновления переменных окружения без пересборки образа
|
||||
set -e
|
||||
|
||||
echo "🔄 Обновление переменных окружения..."
|
||||
|
||||
# Проверяем, что мы в правильной директории
|
||||
if [ ! -f "package.json" ]; then
|
||||
echo "❌ Ошибка: запустите скрипт из корневой директории проекта"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем файл stack.env
|
||||
if [ ! -f "stack.env" ]; then
|
||||
echo "❌ Файл stack.env не найден"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Загружаем новые переменные
|
||||
echo "📂 Загрузка переменных из stack.env..."
|
||||
source stack.env
|
||||
export $(cut -d= -f1 stack.env | grep -v '^#')
|
||||
|
||||
# Проверяем SMS конфигурацию
|
||||
echo "📱 Проверка SMS конфигурации..."
|
||||
if [ -z "$BEELINE_SMS_USER" ] || [ -z "$BEELINE_SMS_PASS" ]; then
|
||||
echo "⚠️ SMS переменные не настроены"
|
||||
else
|
||||
echo "✅ SMS API настроен (пользователь: $BEELINE_SMS_USER)"
|
||||
echo " Отправитель: ${BEELINE_SMS_SENDER:-Protekauto}"
|
||||
fi
|
||||
|
||||
# Перезапускаем контейнеры с новыми переменными
|
||||
echo "🔄 Перезапуск контейнеров с новой конфигурацией..."
|
||||
docker-compose down
|
||||
docker-compose up -d
|
||||
|
||||
# Ждем запуска
|
||||
echo "⏳ Ожидание запуска сервиса..."
|
||||
sleep 15
|
||||
|
||||
# Проверяем статус
|
||||
echo "🔍 Проверка статуса..."
|
||||
if docker-compose ps | grep -q "Up"; then
|
||||
echo "✅ Сервис успешно перезапущен!"
|
||||
|
||||
# Проверяем SMS API если настроен
|
||||
if [ ! -z "$BEELINE_SMS_USER" ] && [ ! -z "$BEELINE_SMS_PASS" ]; then
|
||||
echo "📱 Проверка SMS API..."
|
||||
sleep 5
|
||||
if curl -s -f "http://localhost:3000/api/sms/status" > /dev/null; then
|
||||
echo "✅ SMS API работает"
|
||||
else
|
||||
echo "⚠️ SMS API может быть недоступен"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🎉 Обновление завершено!"
|
||||
echo "🌐 CMS: http://localhost:3000"
|
||||
echo "📊 SMS статус: http://localhost:3000/api/sms/status"
|
||||
else
|
||||
echo "❌ Ошибка при перезапуске"
|
||||
docker-compose logs --tail=50
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🔧 Обновление переменных окружения PartsAPI..."
|
||||
|
||||
# Проверяем, есть ли уже переменные PartsAPI
|
||||
if docker exec protekauto-cms-protekauto-cms-1 printenv | grep -q "PARTSAPI_"; then
|
||||
echo "⚠️ Переменные PartsAPI уже существуют в контейнере"
|
||||
docker exec protekauto-cms-protekauto-cms-1 printenv | grep "PARTSAPI_"
|
||||
else
|
||||
echo "❌ Переменные PartsAPI отсутствуют в контейнере!"
|
||||
echo ""
|
||||
echo "🔑 Нужно добавить следующие переменные в файл переменных окружения вашего сервера:"
|
||||
echo ""
|
||||
echo "PARTSAPI_CATEGORIES_KEY=8260834d954cf000b9d61cc31ff0655d"
|
||||
echo "PARTSAPI_ARTICLES_KEY=a516f2b87c4f98c078f5e758d6d44a91"
|
||||
echo "PARTSAPI_MEDIA_KEY=230d8c7118a36cc6d36d72681b76982b"
|
||||
echo ""
|
||||
echo "📝 После добавления переменных, перезапустите контейнер:"
|
||||
echo "docker-compose down && docker-compose up -d"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🔍 Текущие переменные окружения в контейнере:"
|
||||
docker exec protekauto-cms-protekauto-cms-1 printenv | grep -E "(PARTSAPI_|LAXIMO_|AUTOEURO_)" || echo "Переменные API не найдены"
|
Reference in New Issue
Block a user