56
This commit is contained in:
269
VPS-DEPLOYMENT.md
Normal file
269
VPS-DEPLOYMENT.md
Normal 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**
|
||||
Reference in New Issue
Block a user