- 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>
3.5 KiB
3.5 KiB
🚀 Деплой Click Counter на VPS
Подготовка VPS
Убедитесь что на VPS установлены:
# Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Автоматический деплой
Простой способ
./deploy.sh YOUR_VPS_IP root
С пользователем
./deploy.sh 192.168.1.100 ubuntu
Ручной деплой
1. Создание архива
tar --exclude='.git' --exclude='node_modules' --exclude='*.log' --exclude='.DS_Store' --exclude='saas-*' --exclude='*.tar.gz' -czf click-counter-deploy.tar.gz Dockerfile docker-compose.yml .dockerignore package.json package-lock.json server.js public/
2. Загрузка на VPS
scp click-counter-deploy.tar.gz root@YOUR_VPS_IP:/tmp/
3. Деплой на VPS
ssh root@YOUR_VPS_IP
mkdir -p /opt/click-counter
cd /opt/click-counter
tar -xzf /tmp/click-counter-deploy.tar.gz
docker-compose down || true
docker-compose build --no-cache
docker-compose up -d
Управление приложением
Проверить статус
ssh root@YOUR_VPS_IP 'cd /opt/click-counter && docker-compose ps'
Посмотреть логи
ssh root@YOUR_VPS_IP 'cd /opt/click-counter && docker-compose logs -f'
Перезапустить
ssh root@YOUR_VPS_IP 'cd /opt/click-counter && docker-compose restart'
Остановить
ssh root@YOUR_VPS_IP 'cd /opt/click-counter && docker-compose down'
Обновить приложение
./deploy.sh YOUR_VPS_IP root
Мониторинг
Health check
curl http://YOUR_VPS_IP:3000/health
Использование ресурсов
ssh root@YOUR_VPS_IP 'docker stats click-counter --no-stream'
Настройки
Изменить порт
В docker-compose.yml измените:
ports:
- "8080:3000" # Вместо 3000:3000
Ограничения памяти
В docker-compose.yml настройте:
deploy:
resources:
limits:
memory: 256M # Увеличить лимит
Размер образа
Оптимизации для минимального размера:
- ✅ Alpine Linux (базовый образ ~5MB)
- ✅ Multi-stage build
- ✅ Минификация статики
- ✅ .dockerignore
- ✅ Очистка кэша npm
Ожидаемый размер итогового образа: ~50-70MB
Безопасность
- ✅ Непривилегированный пользователь
- ✅ Read-only файловая система где возможно
- ✅ Ограничения ресурсов
- ✅ Health checks
- ✅ Логирование с ротацией
Troubleshooting
Контейнер не запускается
ssh root@YOUR_VPS_IP 'cd /opt/click-counter && docker-compose logs'
Порт занят
ssh root@YOUR_VPS_IP 'netstat -tlnp | grep :3000'
Мало места
ssh root@YOUR_VPS_IP 'docker system prune -af'
Проблемы с Docker
ssh root@YOUR_VPS_IP 'systemctl status docker'
ssh root@YOUR_VPS_IP 'systemctl restart docker'