SaaS/deploy.sh
Claude Code bfbb2c7fa5 Initial commit: Click Counter SaaS Application
- Express.js server with static file serving
- Click counter frontend with localStorage persistence
- Optimized Docker setup with multi-stage build
- Production-ready configuration with health checks
- Automated deployment script for VPS
- Comprehensive deployment documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 10:25:12 +01:00

96 lines
No EOL
3.1 KiB
Bash
Executable file

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