270 lines
6.9 KiB
Markdown
270 lines
6.9 KiB
Markdown
# 🚀 Развертывание на 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**
|