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

270 lines
6.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚀 Развертывание на VPS
Инструкция по запуску pg-admin на VPS (Ubuntu 24.04, другие версии похожи).
## Быстрый старт (3 шага)
### 1⃣ Подключись к VPS и клонируй репозиторий
```bash
ssh root@YOUR_VPS_IP
cd ~
git clone git@your-repo-url:your-org/pg-admin.git
cd pg-admin
```
### 2⃣ Генерируй безопасные пароли
```bash
bash scripts/generate-secrets.sh
```
Скопируй выходные значения.
### 3⃣ Создай и настрой .env
```bash
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_URL``http://ТВЙ_ДОМЕН/api`
- `CORS_ORIGIN``http://ТВЙ_ДОМЕН` (пока HTTP)
Сохрани (Ctrl+X, Y, Enter в nano).
### 4⃣ Запусти инициализацию
```bash
bash scripts/setup-vps.sh
```
Скрипт установит Docker, настроит контейнеры и запустит приложение.
### 5⃣ Проверь статус
```bash
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)
```bash
# Разреши только необходимые порты
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 ключи (вместо пароля)
```bash
# На локальной машине генерируй ключ если нет
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
Позже, когда будешь готов:
```bash
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. Настрой резервное копирование БД
```bash
# Создай 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. Мониторинг логов
```bash
# Просмотри логи всех контейнеров
docker compose logs -f
# Или конкретного контейнера
docker compose logs -f pg-admin-api
# Проверь дисковое пространство
df -h
# Проверь использование памяти
docker stats
```
---
## 🛠️ Частые команды
```bash
# Посмотри статус контейнеров
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`
---
## 📊 Проверка здоровья приложения
```bash
# Проверь доступность
curl -I http://YOUR_VPS_IP:80/
# Посмотри статус контейнеров
docker compose ps
# Проверь память и CPU
docker stats
# Посмотри логи ошибок
docker compose logs | grep -i error
```
---
## 🚨 Troubleshooting
### Контейнер крашится при старте
```bash
# Посмотри логи
docker compose logs pg-admin-api
# Перестрой с чистого листа
docker compose down -v
docker compose up -d --build
```
### БД не подключается
```bash
# Проверь что БД запущена
docker compose ps
# Проверь логи БД
docker compose logs pg-admin-db
# Проверь переменные окружения
docker compose exec pg-admin-api env | grep DB
```
### Порт уже занят
```bash
# Найди процесс на порту 80
sudo lsof -i :80
# Убей процесс (замени PID)
sudo kill -9 PID
# Или смени порт в .env:
NGINX_PORT=8080
docker compose up -d
```
### No space left on device
```bash
# Очисти 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**