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