Главный вывод: развёртывание SmartSlim Server через Docker состоит из четырёх шагов — собрать образ, написать docker-compose.yml, запустить сервис, проверить health check. Размер образа около 450 МБ, минимальные требования — 2 ядра CPU и 4 ГБ ОЗУ, после запуска health check проходит за 5 секунд. В рабочей среде требуется настроить тома для постоянного хранения данных, обратный прокси Nginx, сбор логов и регулярное резервное копирование. В этой статье — полный файл docker-compose.yml, таблица переменных окружения и подробное описание шагов развёртывания. Ниже — обзор архитектуры и пошаговое выполнение промышленного развёртывания.
Если вам нужно понять, как вызывать API сжатия после развёртывания в Docker, рекомендуется сначала прочитать Практическое руководство по вызову API сжатия: подробная документация RESTful-интерфейса.
1. Архитектура развёртывания Docker
Развёртывание SmartSlim Server через Docker использует архитектуру с одним контейнером, внутри которого работает FastAPI-приложение; файлы и конфигурации сохраняются через Docker-тома, сервис предоставляется наружу через проброс портов. В рабочей среде добавляется слой обратного прокси Nginx для терминирования TLS и балансировки нагрузки.
| Компонент | Технология | Назначение | Порт |
|---|---|---|---|
| Контейнер SmartSlim | Python 3.9 + FastAPI | Ядро сервиса сжатия | 8000 (внутр.) |
| Контейнер Nginx | Nginx 1.25 | Обратный прокси / TLS | 80/443 (внешн.) |
| Том data | Docker Volume | Хранение сжатых файлов | — |
| Том logs | Docker Volume | Файлы журналов | — |
| Том config | Docker Volume | Конфигурация и лицензия | — |
Перед развёртыванием убедитесь, что сервер соответствует минимальным требованиям. В таблице ниже — рекомендации по конфигурации для разной нагрузки.
| Масштаб | CPU | Память | Диск | Параллелизм | Сценарий |
|---|---|---|---|---|---|
| Минимальный | 2 ядра | 4 ГБ | 20 ГБ | 4 | Тест / небольшая команда |
| Рекомендуемый | 4 ядра | 8 ГБ | 50 ГБ | 8 | Средняя компания |
| Высокая нагрузка | 8 ядер | 16 ГБ | 100 ГБ | 16 | Крупное предприятие |
| Кластер | 4 ядра × 3 узла | 8 ГБ × 3 | Общее хранилище | 24+ | Промышленная высокая доступность |
2. Подробности конфигурации docker-compose.yml
Ниже — ключевая часть docker-compose.yml для рабочей среды, включая сервис SmartSlim, обратный прокси Nginx, тома и сеть.
| Параметр | Описание | Пример |
|---|---|---|
| image | Имя образа | uglypear/smartslim-server:latest |
| restart | Политика перезапуска | always (для прода) |
| ports | Проброс портов | 8000:8000 |
| volumes | Монтирование томов | ./data:/app/data |
| environment | Переменные окружения | SMARTSLIM_LICENSE=xxx |
| healthcheck | Проверка здоровья | curl -f http://localhost:8000/health |
| depends_on | Зависимости | nginx |
| deploy.resources | Лимиты ресурсов | cpus:4, memory:8G |
3. Таблица переменных окружения
SmartSlim Server настраивается через переменные окружения; в таблице ниже перечислены все доступные параметры.
| Переменная | Обяз. | По умолчанию | Описание |
|---|---|---|---|
| SMARTSLIM_LICENSE | Да | — | Лицензионный ключ |
| SMARTSLIM_HOST | Нет | 0.0.0.0 | Адрес прослушивания |
| SMARTSLIM_PORT | Нет | 8000 | Порт прослушивания |
| SMARTSLIM_WORKERS | Нет | 4 | Количество рабочих процессов |
| SMARTSLIM_MAX_FILE_SIZE | Нет | 1073741824 | Макс. размер одного файла (1 ГБ) |
| SMARTSLIM_SECURITY_LEVEL | Нет | MEDIUM | Уровень безопасности |
| SMARTSLIM_RATE_LIMIT | Нет | 60 | Лимит запросов в минуту |
| SMARTSLIM_LOG_LEVEL | Нет | INFO | Уровень логирования |
| SMARTSLIM_TEMP_DIR | Нет | /app/data/tmp | Каталог временных файлов |
4. Пошаговое развёртывание
Развёртывание в Docker состоит из четырёх шагов: сборка, запуск, проверка, мониторинг. В таблице ниже — операции и методы проверки для каждого шага.
| Шаг | Действие | Команда | Проверка |
|---|---|---|---|
| 1. Сборка образа | Собрать образ SmartSlim | docker build -t smartslim-server . | docker images |
| 2. Конфигурация | Написать docker-compose.yml | Редактировать yml-файл | docker-compose config |
| 3. Запуск | Запустить все контейнеры | docker-compose up -d | docker-compose ps |
| 4. Health check | Проверить доступность | curl http://localhost:8000/health | Возврат {"status":"ok"} |
| 5. Настройка Nginx | Настроить обратный прокси | Редактировать nginx.conf | curl https://домен/health |
| 6. Мониторинг | Настроить логи и мониторинг | Настроить сбор логов | docker logs |
5. Лучшие практики для рабочей среды
При развёртывании в рабочей среде необходимо уделить внимание четырём аспектам: health check, сбор логов, резервное копирование данных и усиление безопасности. В таблице ниже — рекомендации по лучшим практикам.
| Практика | Рекомендация | Частота | Инструмент |
|---|---|---|---|
| Health check | interval:30s, timeout:10s, retries:3 | Реальное время | Docker healthcheck |
| Сбор логов | драйвер json-file, max-size:100m, max-file:5 | Реальное время | Docker logging |
| Резервное копирование | Ежедневно копировать том data | Ежедневно | cron + docker run |
| Безопасность | Запуск от non-root, ФС только для чтения | При развёртывании | Docker security |
| Лимиты ресурсов | cpus:4, memory:8G, порог алерта 80% | Реальное время | Docker stats |
| Обновление образов | Регулярный pull и rolling update | Ежемесячно | docker-compose pull |
Пример полной конфигурации health check: interval = 30 секунд (проверка каждые 30 секунд), timeout = 10 секунд (при таймауте — сбой), retries = 3 (три неудачи подряд → статус unhealthy), start_period = 10 секунд (проверки начинаются через 10 секунд после старта). При такой конфигурации контейнер с аномалией будет обнаружен за 90 секунд и автоматически перезапущен.
| Метрика | Норма | Алерт | Команда |
|---|---|---|---|
| Загрузка CPU | 0–60% | >80% | docker stats |
| Загрузка памяти | 0–70% | >85% | docker stats |
| Загрузка диска | 0–70% | >85% | df -h |
| Время ответа API | 0–2 с | >5 с | curl -w |
| Длина очереди сжатия | 0–20 | >50 | API status |
| Доля ошибок | 0–0,1% | >1% | Анализ логов |
Если хотите понять базовую архитектуру очереди задач сжатия, см. Проектирование очереди задач сжатия. Если предпочитаете локальную интеграцию через SDK вместо серверного развёртывания, см. Руководство по интеграции SDK сжатия.
6. Часто задаваемые вопросы (FAQ)
В1: Какие требования для развёртывания сервиса сжатия в Docker?
Минимальные требования для развёртывания SmartSlim Server в Docker: 2 ядра CPU, 4 ГБ ОЗУ, 20 ГБ диска; рекомендуемые — 4 ядра CPU, 8 ГБ ОЗУ, 50 ГБ диска. На ОС должен быть установлен Docker 20.10+ и Docker Compose 2.0+. Поддерживаются архитектуры x86_64 и ARM64, размер образа около 450 МБ. В рабочей среде рекомендуется оставить дополнительное место на диске под временные файлы сжатия.
В2: Как обновлять сервис сжатия, развёрнутый в Docker?
Процесс обновления состоит из трёх шагов: 1) docker-compose pull — загрузить свежий образ; 2) docker-compose up -d — перезапустить контейнеры (данные в томах сохраняются); 3) проверить эндпоинт health check и убедиться в нормальной работе. Перед обновлением рекомендуется сделать резервную копию тома (docker run --volumes-from для бэкапа). В среде Kubernetes возможно скользящее обновление без простоя. Совместимость между версиями хорошая, перед мажорным обновлением загляните в changelog.
В3: Как обеспечить постоянное хранение данных в сервисе Docker?
Постоянство данных обеспечивается через тома Docker. Нужно смонтировать три каталога: /app/data (сжатые файлы), /app/logs (журналы), /app/config (конфигурация и лицензионные ключи). В docker-compose.yml сопоставление хост↔контейнер описывается в поле volumes. Удаление контейнера не удаляет том — данные в безопасности. В рабочей среде рекомендуется выносить тома на отдельный диск или NAS для удобства резервного копирования и масштабирования.
В4: Поддерживает ли сервис сжатия в Docker развёртывание с высокой доступностью?
Серверная версия SmartSlim поддерживает развёртывание на одном узле в Docker, а сетевая версия — мультисервисный Docker Compose и Kubernetes для высокой доступности. В Kubernetes с помощью HPA (Horizontal Pod Autoscaler) реализуется эластичное масштабирование от 3 до 10 реплик, а общее хранилище (MinIO) и общая база данных (MySQL) обеспечивают stateless-архитектуру. На одиночном узле можно получить простую высокую доступность через Nginx-балансировку и несколько инстансов, но для продакшн рекомендуется сетевая версия со схемой K8s.
Итог
Развёртывание SmartSlim Server в Docker укладывается в четыре шага: собрать образ, написать docker-compose.yml, запустить сервис, проверить health check. Образ 450 МБ, минимум 2 ядра и 4 ГБ, health check проходит за 5 секунд после старта. 9 переменных окружения покрывают лицензирование, параллелизм, безопасность и лимиты запросов. Для рабочей среды — шесть лучших практик: health check каждые 30 секунд, ротация логов по 100 МБ, ежедневный бэкап данных, запуск от non-root, лимиты ресурсов 4 ядра / 8 ГБ, ежемесячное обновление образа.
Запомните три момента: во-первых, обязательно смонтируйте три тома (data/logs/config) — удаление контейнера не уничтожит данные; во-вторых, настройте health check с interval:30s и retries:3 — аномалия будет обнаружена за 90 секунд с автоперезапуском; в-третьих, в рабочей среде используйте Nginx как обратный прокси для терминирования TLS, не выставляйте порт 8000 напрямую. После развёртывания связка API сжатия и очереди задач образует полноценный сервис сжатия.
Похожие материалы
Нужно сжать файлы? Попробуйте SmartSlim
Собственный движок сжатия на Rust, поддержка PDF / изображений / видео / Office / OFD — более 40 форматов в 10 категориях, локальное сжатие — данные не покидают домен.