20a62b5f2daafc5e16b013abdebee61c9fad14db
Инструкция по развертыванию Global-IT24 на Ubuntu с внешним Traefik
Архитектура
- Traefik: 192.168.50.59 (внешний хост)
- Приложение: Ваш сервер (докер контейнер на порту 3000)
- Домен: video.mscsrv.ru
Предварительные требования
- Ubuntu Server (20.04 или новее)
- Docker и Docker Compose установлены
- Traefik уже настроен на хосте 192.168.50.59
- Домен video.mscsrv.ru направлен на 192.168.50.59
- Сетевая связность между хостами (порт 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: Проверка работы
- Локальная проверка:
curl -v http://localhost:3000
- Проверка через Traefik:
curl -v http://video.mscsrv.ru
curl -v https://video.mscsrv.ru
- Проверка в браузере:
- Откройте 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
- Проверка доступности приложения локально:
curl http://localhost:3000
- Проверка доступности из сети Traefik:
# На хосте Traefik (192.168.50.59)
curl http://192.168.50.X:3000
- Проверка логов Traefik:
# На хосте Traefik
docker logs traefik -f
- Проверка файрвола:
sudo ufw status
# Убедитесь, что порт 3000 открыт для 192.168.50.59
- Проверка конфигурации 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]
Безопасность
Рекомендации:
- Ограничьте доступ к порту 3000 только с хоста Traefik
- Регулярно обновляйте Docker образы и систему
- Используйте сильные пароли для SSH
- Настройте fail2ban для защиты от брутфорса
- Мониторинг логов на подозрительную активность
Fail2ban (опционально)
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Производительность
Рекомендации:
- Используйте SSD диски
- Минимум 2GB RAM для сервера
- Настройте swap если RAM < 4GB
- Регулярно очищайте неиспользуемые Docker образы:
docker system prune -a
Контакты для поддержки
При возникновении проблем:
- Проверьте логи контейнера:
./logs.sh - Проверьте статус:
./status.sh - Проверьте доступность из сети
- Проверьте конфигурацию Traefik
- Проверьте файрвол и сетевую связность
Документация Traefik: https://doc.traefik.io/traefik/ Документация Docker: https://docs.docker.com/
Description
Languages
TypeScript
86.5%
Shell
10.3%
Dockerfile
1.5%
JavaScript
0.8%
CSS
0.8%