# Инструкция по развертыванию 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/