Files
pg-adx/VPS-DEPLOYMENT.md
2026-03-18 16:06:29 +07:00

6.9 KiB
Raw Blame History

🚀 Развертывание на VPS

Инструкция по запуску pg-admin на VPS (Ubuntu 24.04, другие версии похожи).

Быстрый старт (3 шага)

1 Подключись к VPS и клонируй репозиторий

ssh root@YOUR_VPS_IP
cd ~
git clone git@your-repo-url:your-org/pg-admin.git
cd pg-admin

2 Генерируй безопасные пароли

bash scripts/generate-secrets.sh

Скопируй выходные значения.

3 Создай и настрой .env

cp .env.example .env
nano .env

Замени в .env:

  • CHANGE_ME_TO_STRONG_PASSWORD → Пароль из generate-secrets.sh
  • CHANGE_ME_TO_STRONG_RANDOM_SECRET → JWT_SECRET из generate-secrets.sh
  • your-domain.com → Твой реальный доменName (или IP на тест)
  • FRONTEND_API_URLhttp://ТВЙ_ДОМЕН/api
  • CORS_ORIGINhttp://ТВЙ_ДОМЕН (пока HTTP)

Сохрани (Ctrl+X, Y, Enter в nano).

4 Запусти инициализацию

bash scripts/setup-vps.sh

Скрипт установит Docker, настроит контейнеры и запустит приложение.

5 Проверь статус

docker compose ps
docker compose logs -f

Приложение готово на http://YOUR_VPS_IP:80 🎉


📋 Требования

  • OS: Ubuntu 20.04+ (или другой Linux с Docker)
  • RAM: Минимум 2GB (рекомендуется 4GB)
  • CPU: 2 ядра (рекомендуется 4+)
  • Диск: 20GB свободного места (SSD лучше)
  • Порты: 80/TCP открыты в файрволе

🔒 Безопасность на VPS

Сделано в docker-compose.yml:

  • БД не открыта наружу (только для контейнеров)
  • Redis не открыт наружу (только для контейнеров)
  • API не открыт напрямую (только через Nginx)
  • Nginx проксирует запросы безопасно
  • Ограничение ресурсов на контейнеры
  • Health checks для отказоустойчивости

⚠️ Нужно сделать вручную:

1. Настрой файрвол (UFW)

# Разреши только необходимые порты
sudo ufw enable
sudo ufw allow 22/tcp      # SSH (для удаленного доступа)
sudo ufw allow 80/tcp      # HTTP
sudo ufw allow 443/tcp     # HTTPS (когда добавишь SSL)
sudo ufw status

2. Добавь SSH ключи (вместо пароля)

# На локальной машине генерируй ключ если нет
ssh-keygen -t ed25519 -C "your-email@example.com"

# Скопируй публичный ключ на VPS
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@YOUR_VPS_IP

# Отключи вход по пароеи в sshd_config
sudo nano /etc/ssh/sshd_config
# Найди и измени на:
# PasswordAuthentication no
# PubkeyAuthentication yes

sudo systemctl reload ssh

3. Установи Let's Encrypt SSL/HTTPS

Позже, когда будешь готов:

sudo apt-get install certbot python3-certbot-nginx
sudo certbot certonly --standalone -d your-domain.com -d www.your-domain.com

Затем обнови nginx.conf и docker-compose.yml для HTTPS.

4. Настрой резервное копирование БД

# Создай backup скрипт
mkdir -p backups
cat > backups/backup-db.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="./backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
docker exec pg-admin-db pg_dump -U postgres pg_admin | gzip > $BACKUP_DIR/backup_$TIMESTAMP.sql.gz
echo "✅ Backup завершен: backup_$TIMESTAMP.sql.gz"
EOF

chmod +x backups/backup-db.sh

# Настрой cron для ежедневного backup (21:00 UTC)
crontab -e
# Добавь строку:
# 0 21 * * * cd /root/pg-admin && bash backups/backup-db.sh

5. Мониторинг логов

# Просмотри логи всех контейнеров
docker compose logs -f

# Или конкретного контейнера
docker compose logs -f pg-admin-api

# Проверь дисковое пространство
df -h

# Проверь использование памяти
docker stats

🛠️ Частые команды

# Посмотри статус контейнеров
docker compose ps

# Перезагрузи приложение
docker compose restart

# Обнови код и перестрой
git pull origin main
docker compose up -d --build

# Посмотри логи
docker compose logs -f

# Останови все
docker compose down

# Полная переустановка (опасно - удалит данные!)
docker compose down -v
docker compose up -d --build

🔄 Pipeline для development → production

  1. Делай коммиты в git
  2. Пуш на main/master
  3. На VPS: git pull origin main
  4. На VPS: docker compose up -d --build
  5. Проверь: docker compose logs -f

📊 Проверка здоровья приложения

# Проверь доступность
curl -I http://YOUR_VPS_IP:80/

# Посмотри статус контейнеров
docker compose ps

# Проверь память и CPU
docker stats

# Посмотри логи ошибок
docker compose logs | grep -i error

🚨 Troubleshooting

Контейнер крашится при старте

# Посмотри логи
docker compose logs pg-admin-api

# Перестрой с чистого листа
docker compose down -v
docker compose up -d --build

БД не подключается

# Проверь что БД запущена
docker compose ps

# Проверь логи БД
docker compose logs pg-admin-db

# Проверь переменные окружения
docker compose exec pg-admin-api env | grep DB

Порт уже занят

# Найди процесс на порту 80
sudo lsof -i :80

# Убей процесс (замени PID)
sudo kill -9 PID

# Или смени порт в .env:
NGINX_PORT=8080
docker compose up -d

No space left on device

# Очисти Docker образы
docker image prune -a

# Очисти volumes (ОСТОРОЖНО!)
docker volume prune

# Посмотри место на диске
df -h

📞 Поддержка

Если что-то не работает:

  1. Проверь логи: docker compose logs -f
  2. Проверь конфигурацию .env
  3. Посмотри порты: sudo netstat -tlnp | grep LISTEN
  4. Перезагрузи: docker compose restart

Создано для pg-admin | VPS Deployment Guide v1.0