This commit is contained in:
2026-03-18 16:06:29 +07:00
parent fa98e42349
commit ab3d27a4f1
6 changed files with 436 additions and 20 deletions

269
VPS-DEPLOYMENT.md Normal file
View File

@@ -0,0 +1,269 @@
# 🚀 Развертывание на 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**