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

# Обновление системы
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 Подготовка проекта

# Перейдите в директорию проекта
cd /path/to/global_it24_landing

# Создайте .env файл
cp .env.example .env
nano .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 Проверка сетевой доступности

# Узнайте IP текущего хоста
hostname -I

# С хоста Traefik (192.168.50.59) должен быть доступ к этому IP:3000
# Проверьте после запуска контейнера

Шаг 2: Запуск приложения

2.1 Сборка и запуск контейнера

# Автоматическое развертывание
./deploy.sh

# Или вручную:
docker compose build --no-cache
docker compose up -d

2.2 Проверка работы контейнера

# Проверка статуса
./status.sh
# или
docker compose ps

# Просмотр логов
./logs.sh
# или
docker compose logs -f

# Проверка доступности локально
curl http://localhost:3000

2.3 Проверка доступности из сети

# С хоста 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:

# Перейдите в директорию конфигурации Traefik
cd /path/to/traefik/config

# Создайте файл конфигурации
nano global-it24.yml

Скопируйте содержимое из traefik-config-example.yml, заменив:

  • 192.168.50.X на реальный IP сервера с приложением

3.2 Пример конфигурации

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

# На хосте Traefik
docker restart traefik
# или
docker compose restart traefik

# Проверка логов Traefik
docker logs traefik -f

Шаг 4: Проверка работы

  1. Локальная проверка:
curl -v http://localhost:3000
  1. Проверка через Traefik:
curl -v http://video.mscsrv.ru
curl -v https://video.mscsrv.ru
  1. Проверка в браузере:
    • Откройте https://video.mscsrv.ru
    • Проверьте мобильную версию
    • Проверьте SSL сертификат

Команды для управления

# На сервере приложения:

# Перезапуск контейнера
./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

Оптимизация и безопасность

Файрвол на сервере приложения

# Установка 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

Мониторинг

# Использование ресурсов
docker stats global-it24-landing

# Проверка здоровья
docker inspect --format='{{.State.Health.Status}}' global-it24-landing

# Системные ресурсы
htop

Автоматический перезапуск при сбое

Docker Compose уже настроен с restart: unless-stopped, контейнер будет автоматически перезапускаться.

Логирование

# Ротация логов Docker
sudo nano /etc/docker/daemon.json

Добавьте:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Перезапустите Docker:

sudo systemctl restart docker
docker compose up -d

Обновление приложения

Быстрое обновление (без изменения кода)

./update.sh

Полное обновление (с пересборкой)

# Остановка
docker compose down

# Обновление кода (git pull или копирование файлов)

# Пересборка и запуск
./deploy.sh

Резервное копирование

Автоматическое резервное копирование

# Создание резервной копии
./backup.sh

# Настройка автоматического бэкапа (cron)
crontab -e

Добавьте:

# Резервное копирование каждый день в 3:00
0 3 * * * cd /path/to/global_it24_landing && ./backup.sh >> /var/log/backup-global-it24.log 2>&1

Восстановление из резервной копии

# Остановка текущего контейнера
docker compose down

# Восстановление из архива
cd /path/to/restore
tar -xzf backup_YYYYMMDD_HHMMSS.tar.gz

# Запуск
cd global_it24_landing
./deploy.sh

Устранение неполадок

Контейнер не запускается

# Просмотр логов
docker compose logs global-it24-web

# Проверка конфигурации
docker compose config

# Пересборка с нуля
docker compose down
docker system prune -a
./deploy.sh

Сайт недоступен через Traefik

  1. Проверка доступности приложения локально:
curl http://localhost:3000
  1. Проверка доступности из сети Traefik:
# На хосте Traefik (192.168.50.59)
curl http://192.168.50.X:3000
  1. Проверка логов Traefik:
# На хосте Traefik
docker logs traefik -f
  1. Проверка файрвола:
sudo ufw status
# Убедитесь, что порт 3000 открыт для 192.168.50.59
  1. Проверка конфигурации Traefik:
# Проверьте файл global-it24.yml
# Убедитесь, что IP адрес правильный

Проблемы с SSL

Проверьте на хосте Traefik:

# Логи Traefik
docker logs traefik | grep -i error

# Проверка сертификатов
ls -la /path/to/acme.json

Высокое использование ресурсов

# Ограничение ресурсов в 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 (опционально)

sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Производительность

Рекомендации:

  1. Используйте SSD диски
  2. Минимум 2GB RAM для сервера
  3. Настройте swap если RAM < 4GB
  4. Регулярно очищайте неиспользуемые Docker образы:
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/

Description
Landing page for Global-IT24 video surveillance installation service
Readme 8.6 MiB
Languages
TypeScript 86.5%
Shell 10.3%
Dockerfile 1.5%
JavaScript 0.8%
CSS 0.8%