Files
global_it24_landing/README.deployment.md

492 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Инструкция по развертыванию 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
# Установка зависимостей
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
nano .env
```
Отредактируйте `.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 Проверка сетевой доступности
```bash
# Узнайте IP текущего хоста
hostname -I
# С хоста Traefik (192.168.50.59) должен быть доступ к этому IP:3000
# Проверьте после запуска контейнера
```
## Шаг 2: Запуск приложения
### 2.1 Сборка и запуск контейнера
```bash
# Автоматическое развертывание
./deploy.sh
# Или вручную:
docker compose build --no-cache
docker compose up -d
```
### 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
```
## Обновление приложения
### Быстрое обновление (без изменения кода)
```bash
./update.sh
```
### Полное обновление (с пересборкой)
```bash
# Остановка
docker compose down
# Обновление кода (git pull или копирование файлов)
# Пересборка и запуск
./deploy.sh
```
## Резервное копирование
### Автоматическое резервное копирование
```bash
# Создание резервной копии
./backup.sh
# Настройка автоматического бэкапа (cron)
crontab -e
```
Добавьте:
```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
```
## Устранение неполадок
### Контейнер не запускается
```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
```
2. **Проверка доступности из сети Traefik:**
```bash
# На хосте Traefik (192.168.50.59)
curl http://192.168.50.X:3000
```
3. **Проверка логов Traefik:**
```bash
# На хосте Traefik
docker logs traefik -f
```
4. **Проверка файрвола:**
```bash
sudo ufw status
# Убедитесь, что порт 3000 открыт для 192.168.50.59
```
5. **Проверка конфигурации Traefik:**
```bash
# Проверьте файл global-it24.yml
# Убедитесь, что IP адрес правильный
```
### Проблемы с SSL
Проверьте на хосте Traefik:
```bash
# Логи Traefik
docker logs traefik | grep -i error
# Проверка сертификатов
ls -la /path/to/acme.json
```
### Высокое использование ресурсов
```bash
# Ограничение ресурсов в docker-compose.yml
# Добавьте в сервис global-it24-web:
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
```
## Сетевая диаграмма
```
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
```
## Производительность
### Рекомендации:
1. Используйте SSD диски
2. Минимум 2GB RAM для сервера
3. Настройте swap если RAM < 4GB
4. Регулярно очищайте неиспользуемые Docker образы:
```bash
docker system prune -a
```
## Контакты для поддержки
При возникновении проблем:
1. Проверьте логи контейнера: `./logs.sh`
2. Проверьте статус: `./status.sh`
3. Проверьте доступность из сети
4. Проверьте конфигурацию Traefik
5. Проверьте файрвол и сетевую связность
Документация Traefik: https://doc.traefik.io/traefik/
Документация Docker: https://docs.docker.com/