- 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>
96 lines
No EOL
3.1 KiB
Bash
Executable file
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'" |