Добавлена полная инструкция по развертыванию

This commit is contained in:
DeepAgent
2025-10-27 13:04:50 +00:00
parent 44d6ef1da5
commit a003e75aaa

View File

@@ -1,491 +1,255 @@
# 📦 Инструкция по развертыванию Global-IT24 Landing Page
# Инструкция по развертыванию Global-IT24 на Ubuntu с внешним Traefik
## Архитектура
- **Traefik:** 192.168.50.59 (внешний хост)
- **Приложение:** Ваш сервер (докер контейнер на порту 3000)
- **Домен:** video.mscsrv.ru
## Предварительные требования
1. Ubuntu Server (20.04 или новее)
2. Docker и Docker Compose установлены
3. Traefik уже настроен на хосте 192.168.50.59
4. Домен video.mscsrv.ru направлен на 192.168.50.59
5. Сетевая связность между хостами (порт 3000 доступен из 192.168.50.59)
## Шаг 1: Подготовка сервера приложения
### 1.1 Установка Docker (если не установлен)
## 🎯 Быстрый старт
```bash
# Обновление системы
sudo apt update && sudo apt upgrade -y
cd /home/ubuntu/global_it24_landing
# Установка зависимостей
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Добавление репозитория Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Установка Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Добавление пользователя в группу docker
sudo usermod -aG docker $USER
newgrp docker
# Проверка установки
docker --version
docker compose version
```
### 1.2 Подготовка проекта
```bash
# Перейдите в директорию проекта
cd /path/to/global_it24_landing
# Создайте .env файл
cp .env.example .env
# 1. Настройте .env файл (если еще не настроен)
nano .env
# 2. Очистите старые контейнеры и кеш
docker compose down
docker builder prune -f
# 3. Запустите развертывание (РЕКОМЕНДУЕТСЯ)
./deploy.sh --fast
```
Отредактируйте `.env`:
```env
DOMAIN=video.mscsrv.ru
NEXT_PUBLIC_SITE_URL=https://video.mscsrv.ru
TRAEFIK_HOST=192.168.50.59
APP_HOST_IP=192.168.50.X # Замените на IP текущего сервера
NODE_ENV=production
```
### 1.3 Проверка сетевой доступности
## 📝 Варианты развертывания
### Вариант 1: Быстрая сборка (РЕКОМЕНДУЕТСЯ)
```bash
# Узнайте IP текущего хоста
hostname -I
# С хоста Traefik (192.168.50.59) должен быть доступ к этому IP:3000
# Проверьте после запуска контейнера
./deploy.sh --fast
```
⏱️ **Время:** 10-15 минут
**Использует:** BuildKit кеш для ускорения
## Шаг 2: Запуск приложения
### 2.1 Сборка и запуск контейнера
### Вариант 2: Полная сборка без кеша
```bash
# Автоматическое развертывание
./deploy.sh
# Или вручную:
docker compose build --no-cache
docker compose up -d
```
⏱️ **Время:** 20-30 минут
⚠️ **Используйте только:** При первом развертывании или проблемах с кешем
### 2.2 Проверка работы контейнера
```bash
# Проверка статуса
./status.sh
# или
docker compose ps
# Просмотр логов
./logs.sh
# или
docker compose logs -f
# Проверка доступности локально
curl http://localhost:3000
```
### 2.3 Проверка доступности из сети
```bash
# С хоста Traefik (192.168.50.59) выполните:
curl http://192.168.50.X:3000
# Замените 192.168.50.X на IP вашего сервера
```
## Шаг 3: Настройка Traefik (на хосте 192.168.50.59)
### 3.1 Создание конфигурации
На хосте Traefik создайте файл конфигурации для file provider:
```bash
# Перейдите в директорию конфигурации Traefik
cd /path/to/traefik/config
# Создайте файл конфигурации
nano global-it24.yml
```
Скопируйте содержимое из `traefik-config-example.yml`, заменив:
- `192.168.50.X` на реальный IP сервера с приложением
### 3.2 Пример конфигурации
```yaml
http:
routers:
global-it24:
rule: "Host(`video.mscsrv.ru`)"
entryPoints:
- web
middlewares:
- redirect-to-https
service: global-it24-service
global-it24-secure:
rule: "Host(`video.mscsrv.ru`)"
entryPoints:
- websecure
middlewares:
- security-headers
- compress
service: global-it24-service
tls:
certResolver: letsencrypt
services:
global-it24-service:
loadBalancer:
servers:
- url: "http://192.168.50.X:3000" # IP сервера приложения
healthCheck:
path: /
interval: 30s
timeout: 10s
middlewares:
redirect-to-https:
redirectScheme:
scheme: https
permanent: true
security-headers:
headers:
customResponseHeaders:
X-Frame-Options: "SAMEORIGIN"
X-Content-Type-Options: "nosniff"
X-XSS-Protection: "1; mode=block"
sslRedirect: true
stsSeconds: 31536000
compress:
compress: {}
```
### 3.3 Перезагрузка Traefik
```bash
# На хосте Traefik
docker restart traefik
# или
docker compose restart traefik
# Проверка логов Traefik
docker logs traefik -f
```
## Шаг 4: Проверка работы
1. **Локальная проверка:**
```bash
curl -v http://localhost:3000
```
2. **Проверка через Traefik:**
```bash
curl -v http://video.mscsrv.ru
curl -v https://video.mscsrv.ru
```
3. **Проверка в браузере:**
- Откройте https://video.mscsrv.ru
- Проверьте мобильную версию
- Проверьте SSL сертификат
## Команды для управления
```bash
# На сервере приложения:
# Перезапуск контейнера
./update.sh
# или
docker compose restart
# Остановка контейнера
./stop.sh
# или
docker compose down
# Просмотр логов
./logs.sh
# или
docker compose logs -f
# Проверка статуса
./status.sh
# Обновление после изменений
docker compose down
docker compose build --no-cache
docker compose up -d
# Резервное копирование
./backup.sh
```
## Оптимизация и безопасность
### Файрвол на сервере приложения
```bash
# Установка UFW
sudo apt install ufw
# Разрешаем SSH
sudo ufw allow 22/tcp
# Разрешаем порт 3000 ТОЛЬКО с хоста Traefik
sudo ufw allow from 192.168.50.59 to any port 3000 proto tcp
# Включаем файрвол
sudo ufw enable
# Проверка правил
sudo ufw status verbose
```
### Мониторинг
```bash
# Использование ресурсов
docker stats global-it24-landing
# Проверка здоровья
docker inspect --format='{{.State.Health.Status}}' global-it24-landing
# Системные ресурсы
htop
```
### Автоматический перезапуск при сбое
Docker Compose уже настроен с `restart: unless-stopped`, контейнер будет автоматически перезапускаться.
### Логирование
```bash
# Ротация логов Docker
sudo nano /etc/docker/daemon.json
```
Добавьте:
```json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
```
Перезапустите Docker:
```bash
sudo systemctl restart docker
docker compose up -d
```
## Обновление приложения
### Быстрое обновление (без изменения кода)
### Вариант 3: Обновление без пересборки
```bash
./update.sh
```
⏱️ **Время:** ~10 секунд
**Используйте:** Когда изменились только переменные .env
### Полное обновление (с пересборкой)
### Вариант 4: Обновление с пересборкой
```bash
./update.sh --rebuild
```
⏱️ **Время:** 5-10 минут
**Используйте:** После изменения кода или зависимостей
## 🔧 Конфигурация .env
Обязательные переменные:
```bash
# Остановка
docker compose down
# Основные настройки
DOMAIN=global-it24.ru
NEXT_PUBLIC_SITE_URL=https://global-it24.ru
APP_HOST_IP=192.168.50.100 # IP вашего сервера
# Обновление кода (git pull или копирование файлов)
# База данных PostgreSQL
POSTGRES_USER=global_it24_user
POSTGRES_PASSWORD=ваш_надежный_пароль
POSTGRES_DB=global_it24_db
DATABASE_URL="postgresql://..."
# Пересборка и запуск
./deploy.sh
# Email уведомления
SMTP_HOST=smtp.yandex.ru
SMTP_PORT=587
SMTP_USER=info@global-it24.ru
SMTP_PASSWORD=ваш_пароль_приложения
EMAIL_FROM=info@global-it24.ru
EMAIL_TO=info@global-it24.ru
# Telegram уведомления (опционально)
TELEGRAM_BOT_TOKEN=ваш_токен_бота
TELEGRAM_CHAT_ID=ваш_chat_id
# Traefik (если используется внешний Traefik)
TRAEFIK_HOST=traefik-host # Hostname сервера с Traefik
```
## Резервное копирование
### Автоматическое резервное копирование
## 📊 Мониторинг
### Проверка статуса
```bash
# Создание резервной копии
./backup.sh
# Настройка автоматического бэкапа (cron)
crontab -e
./status.sh
```
Добавьте:
```cron
# Резервное копирование каждый день в 3:00
0 3 * * * cd /path/to/global_it24_landing && ./backup.sh >> /var/log/backup-global-it24.log 2>&1
```
### Восстановление из резервной копии
### Просмотр логов
```bash
# Остановка текущего контейнера
docker compose down
# Восстановление из архива
cd /path/to/restore
tar -xzf backup_YYYYMMDD_HHMMSS.tar.gz
# Запуск
cd global_it24_landing
./deploy.sh
./logs.sh # Все логи
./logs.sh --tail 100 # Последние 100 строк
```
## Устранение неполадок
### Контейнер не запускается
```bash
# Просмотр логов
docker compose logs global-it24-web
# Проверка конфигурации
docker compose config
# Пересборка с нуля
docker compose down
docker system prune -a
./deploy.sh
```
### Сайт недоступен через Traefik
1. **Проверка доступности приложения локально:**
### Проверка работы приложения
```bash
# Локально
curl http://localhost:3000
# Через Traefik (если настроен)
curl https://global-it24.ru
```
2. **Проверка доступности из сети Traefik:**
## 🐛 Решение проблем
### Проблема: Сборка зависла на "Building fresh packages"
**Решение:**
```bash
# На хосте Traefik (192.168.50.59)
curl http://192.168.50.X:3000
# Остановите сборку
Ctrl+C
# Очистите кеш
docker builder prune -f
# Попробуйте снова с --fast
./deploy.sh --fast
```
3. **Проверка логов Traefik:**
См. подробности в `QUICK_FIX.md`
### Проблема: Недостаточно ресурсов
**Проверьте:**
```bash
# На хосте Traefik
docker logs traefik -f
free -h # Проверка RAM
df -h # Проверка диска
docker info # Лимиты Docker
```
4. **Проверка файрвола:**
**Рекомендуемые ресурсы:**
- CPU: минимум 2 ядра, рекомендуется 4
- RAM: минимум 4GB, рекомендуется 8GB
- Диск: минимум 10GB свободного места
### Проблема: Не запускается после сборки
**Проверьте логи:**
```bash
sudo ufw status
# Убедитесь, что порт 3000 открыт для 192.168.50.59
docker compose logs web
docker compose logs db
```
5. **Проверка конфигурации Traefik:**
**Типичные причины:**
1. Ошибки в .env файле
2. База данных не запустилась
3. Порт 3000 уже занят
### Проблема: База данных не подключается
**Проверьте:**
```bash
# Проверьте файл global-it24.yml
# Убедитесь, что IP адрес правильный
# Статус контейнера БД
docker compose ps db
# Логи БД
docker compose logs db
# Подключение вручную
docker compose exec db psql -U $POSTGRES_USER -d $POSTGRES_DB
```
### Проблемы с SSL
## 🔄 Обновление приложения
Проверьте на хосте Traefik:
### Обновление кода из Git
```bash
# Логи Traefik
docker logs traefik | grep -i error
# Проверка сертификатов
ls -la /path/to/acme.json
cd /home/ubuntu/global_it24_landing
git pull origin master
./update.sh --rebuild
```
### Высокое использование ресурсов
### Обновление только переменных .env
```bash
# Ограничение ресурсов в docker-compose.yml
# Добавьте в сервис global-it24-web:
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
nano .env
./update.sh
```
## Сетевая диаграмма
```
Internet
[DNS: video.mscsrv.ru] → 192.168.50.59
[Traefik: 192.168.50.59]
↓ (проксирует на)
[App Server: 192.168.50.X:3000]
[Docker Container: global-it24-landing]
```
## Безопасность
### Рекомендации:
1. **Ограничьте доступ к порту 3000** только с хоста Traefik
2. **Регулярно обновляйте** Docker образы и систему
3. **Используйте сильные пароли** для SSH
4. **Настройте fail2ban** для защиты от брутфорса
5. **Мониторинг логов** на подозрительную активность
### Fail2ban (опционально)
### Применение миграций БД
```bash
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
docker compose exec web npx prisma migrate deploy
```
## Производительность
## 📦 Резервное копирование
### Рекомендации:
1. Используйте SSD диски
2. Минимум 2GB RAM для сервера
3. Настройте swap если RAM < 4GB
4. Регулярно очищайте неиспользуемые Docker образы:
### Создание бэкапа БД
```bash
docker system prune -a
./backup-db.sh
```
## Контакты для поддержки
Файл сохраняется в: `./backups/db_backup_YYYYMMDD_HHMMSS.sql`
При возникновении проблем:
1. Проверьте логи контейнера: `./logs.sh`
### Восстановление из бэкапа
```bash
docker compose exec -T db psql -U $POSTGRES_USER -d $POSTGRES_DB < backups/db_backup_XXXXXXXX.sql
```
## 🌐 Настройка Traefik
1. Скопируйте пример конфигурации:
```bash
cp traefik-config-example.yml /путь/к/traefik/dynamic/global-it24.yml
```
2. Отредактируйте параметры:
- `APP_HOST_IP:3000` - IP вашего сервера
- `global-it24.ru` - ваш домен
3. Перезагрузите Traefik:
```bash
docker restart traefik # или используйте ваш метод
```
## 📚 Дополнительная документация
- `BUILD_OPTIMIZATION.md` - Подробности оптимизации сборки
- `QUICK_FIX.md` - Быстрое решение проблемы зависания
- `DATABASE.md` - Управление базой данных
## 🆘 Поддержка
Если проблема не решена:
1. Проверьте логи: `./logs.sh`
2. Проверьте статус: `./status.sh`
3. Проверьте доступность из сети
4. Проверьте конфигурацию Traefik
5. Проверьте файрвол и сетевую связность
3. Попробуйте полную пересборку:
```bash
docker compose down -v
docker builder prune -a -f
./deploy.sh
```
Документация Traefik: https://doc.traefik.io/traefik/
Документация Docker: https://docs.docker.com/
## ✅ Чек-лист после развертывания
- [ ] Приложение запущено: `./status.sh`
- [ ] Доступно локально: `curl http://localhost:3000`
- [ ] База данных работает: `docker compose logs db`
- [ ] Логи без ошибок: `./logs.sh`
- [ ] Настроен Traefik (если используется)
- [ ] Форма обратной связи работает
- [ ] Email уведомления приходят
- [ ] Telegram уведомления работают (если настроены)
- [ ] Создан первый бэкап БД: `./backup-db.sh`
## 🚀 Готово!
Приложение развернуто и готово к работе!
Полезные команды:
```bash
./status.sh # Статус
./logs.sh # Логи
./update.sh # Обновление
./backup-db.sh # Бэкап БД
./deploy.sh --help # Справка по развертыванию
./update.sh --help # Справка по обновлению
```