Add deployment script with password authentication
- Created deploy-with-password.sh for VPS deployment - Includes automatic Docker & Docker Compose installation - Supports password-based SSH authentication via sshpass - Successfully deployed to production VPS: 128.140.8.206:3000 - Application is live and health checks are passing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
58e079b08f
commit
f9ced4507f
1 changed files with 142 additions and 0 deletions
142
deploy-with-password.sh
Executable file
142
deploy-with-password.sh
Executable file
|
|
@ -0,0 +1,142 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Скрипт деплоя приложения click-counter на VPS с использованием пароля
|
||||
# Использование: ./deploy-with-password.sh [VPS_IP] [SSH_USER] [SSH_PASSWORD]
|
||||
|
||||
set -e
|
||||
|
||||
VPS_IP=${1:-"YOUR_VPS_IP"}
|
||||
SSH_USER=${2:-"root"}
|
||||
SSH_PASSWORD=${3:-"acXCmaT3sFhV"}
|
||||
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-with-password.sh [VPS_IP] [SSH_USER] [SSH_PASSWORD]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем наличие sshpass
|
||||
if ! command -v sshpass &> /dev/null; then
|
||||
echo "📦 Установка sshpass..."
|
||||
if command -v brew &> /dev/null; then
|
||||
brew install sshpass
|
||||
elif command -v apt-get &> /dev/null; then
|
||||
sudo apt-get update && sudo apt-get install -y sshpass
|
||||
elif command -v yum &> /dev/null; then
|
||||
sudo yum install -y sshpass
|
||||
else
|
||||
echo "❌ Не удалось установить sshpass. Установите его вручную."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Создаем архив проекта
|
||||
echo "📦 Создаем архив проекта..."
|
||||
tar --exclude='.git' \
|
||||
--exclude='node_modules' \
|
||||
--exclude='*.log' \
|
||||
--exclude='.DS_Store' \
|
||||
--exclude='saas-*' \
|
||||
--exclude='*.tar.gz' \
|
||||
--exclude='frontend' \
|
||||
--exclude='backend' \
|
||||
--exclude='postgres_data' \
|
||||
-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..."
|
||||
sshpass -p "$SSH_PASSWORD" scp -o StrictHostKeyChecking=no ${APP_NAME}-deploy.tar.gz ${SSH_USER}@${VPS_IP}:/tmp/
|
||||
|
||||
# Выполняем команды на VPS
|
||||
echo "🔧 Настраиваем на VPS..."
|
||||
sshpass -p "$SSH_PASSWORD" ssh -o StrictHostKeyChecking=no ${SSH_USER}@${VPS_IP} << EOF
|
||||
set -e
|
||||
|
||||
# Проверяем и устанавливаем Docker если нужно
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "📦 Установка Docker..."
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sh get-docker.sh
|
||||
systemctl enable docker
|
||||
systemctl start docker
|
||||
fi
|
||||
|
||||
# Проверяем и устанавливаем Docker Compose если нужно
|
||||
if ! command -v docker-compose &> /dev/null; then
|
||||
echo "📦 Установка Docker Compose..."
|
||||
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-\$(uname -s)-\$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
chmod +x /usr/local/bin/docker-compose
|
||||
fi
|
||||
|
||||
# Создаем директорию приложения
|
||||
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 10
|
||||
if docker-compose ps | grep -q "Up"; then
|
||||
echo "✅ Приложение успешно запущено!"
|
||||
echo "🌐 Доступно по адресу: http://$VPS_IP:3000"
|
||||
|
||||
# Проверяем health endpoint
|
||||
if command -v curl &> /dev/null; then
|
||||
sleep 5
|
||||
if curl -f -s http://localhost:3000/health > /dev/null; then
|
||||
echo "✅ Health check прошел успешно"
|
||||
else
|
||||
echo "⚠️ Health check не прошел, но контейнер запущен"
|
||||
fi
|
||||
fi
|
||||
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 "🔍 Проверить health: curl http://$VPS_IP:3000/health"
|
||||
echo "📊 Проверить статус: sshpass -p '$SSH_PASSWORD' ssh -o StrictHostKeyChecking=no $SSH_USER@$VPS_IP 'cd $REMOTE_PATH && docker-compose ps'"
|
||||
echo "📋 Посмотреть логи: sshpass -p '$SSH_PASSWORD' ssh -o StrictHostKeyChecking=no $SSH_USER@$VPS_IP 'cd $REMOTE_PATH && docker-compose logs -f'"
|
||||
Loading…
Add table
Reference in a new issue