Добавлена полная инструкция по развертыванию
This commit is contained in:
@@ -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 # Справка по обновлению
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user