#!/bin/bash # Скрипт деплоя приложения click-counter на VPS # Использование: ./deploy.sh [VPS_IP] [SSH_USER] set -e VPS_IP=${1:-"YOUR_VPS_IP"} SSH_USER=${2:-"root"} APP_NAME="click-counter" REMOTE_PATH="/opt/$APP_NAME" echo "🚀 Начинаем деплой $APP_NAME на VPS: $VPS_IP" # Проверяем что переданы параметры if [ "$VPS_IP" = "YOUR_VPS_IP" ]; then echo "❌ Ошибка: Укажите IP VPS" echo "Использование: ./deploy.sh [VPS_IP] [SSH_USER]" exit 1 fi # Создаем архив проекта echo "📦 Создаем архив проекта..." tar --exclude='.git' \ --exclude='node_modules' \ --exclude='*.log' \ --exclude='.DS_Store' \ --exclude='saas-*' \ --exclude='*.tar.gz' \ -czf ${APP_NAME}-deploy.tar.gz \ Dockerfile \ docker-compose.yml \ .dockerignore \ package.json \ package-lock.json \ server.js \ public/ echo "✅ Архив создан: ${APP_NAME}-deploy.tar.gz" # Загружаем на VPS echo "⬆️ Загружаем на VPS..." scp ${APP_NAME}-deploy.tar.gz ${SSH_USER}@${VPS_IP}:/tmp/ # Выполняем команды на VPS echo "🔧 Настраиваем на VPS..." ssh ${SSH_USER}@${VPS_IP} << EOF set -e # Создаем директорию приложения mkdir -p $REMOTE_PATH cd $REMOTE_PATH # Останавливаем старый контейнер если есть if docker ps -q -f name=$APP_NAME > /dev/null; then echo "🛑 Останавливаем старый контейнер..." docker-compose down || true fi # Распаковываем новую версию echo "📂 Распаковываем приложение..." tar -xzf /tmp/${APP_NAME}-deploy.tar.gz -C $REMOTE_PATH # Собираем и запускаем echo "🏗️ Собираем Docker образ..." docker-compose build --no-cache echo "🚀 Запускаем приложение..." docker-compose up -d # Проверяем статус sleep 5 if docker-compose ps | grep -q "Up"; then echo "✅ Приложение успешно запущено!" echo "🌐 Доступно по адресу: http://$VPS_IP:3000" else echo "❌ Ошибка запуска! Проверьте логи:" docker-compose logs exit 1 fi # Очищаем временные файлы rm -f /tmp/${APP_NAME}-deploy.tar.gz echo "🧹 Очищаем старые Docker образы..." docker image prune -f || true EOF # Очищаем локальный архив rm -f ${APP_NAME}-deploy.tar.gz echo "" echo "🎉 Деплой завершен успешно!" echo "🌐 Приложение доступно: http://$VPS_IP:3000" echo "📊 Проверить статус: ssh $SSH_USER@$VPS_IP 'cd $REMOTE_PATH && docker-compose ps'" echo "📋 Посмотреть логи: ssh $SSH_USER@$VPS_IP 'cd $REMOTE_PATH && docker-compose logs -f'"