Docker и DevOps 12 мин чтения 2026-10-09

Автономный инструментарий сисадмина и веб-разработчика: развертывание IT-Tools на VDS в Docker Compose с защитой авторизацией

Практическое руководство по развертыванию набора веб-утилит IT-Tools на сервере с Docker Compose: безопасная обработка токенов и данных без внешних сервисов, Nginx Reverse Proxy, защита через HTTP Basic Auth и минимальное потребление 20 МБ RAM.

Инженерная редакция SysKit Проверено инженерами SysKit.ru

В ежедневной работе вебмастера, сисадмина и бэкенд-разработчика постоянно возникают микрозадачи: декодировать JWT-токен и проверить его payload, сгенерировать хэш bcrypt или sha256 для пароля, распарсить расписание crontab, рассчитать маску подсети CIDR, перевести JSON в YAML или сгенерировать случайный UUID v4. Большинство специалистов по привычке открывают первые попавшиеся в поисковике бесплатные сайты-конвертеры. Однако отправка чувствительных данных на непроверенные публичные веб-ресурсы сопряжена с серьезными рисками утечки.

Решением проблемы становится IT-Tools — опенсорсный автономный комбайн, объединяющий более 70 практических утилит в едином интерфейсе. В этом руководстве мы разберем архитектуру решения, запустим IT-Tools на VDS в контейнере Docker Compose с лимитами ресурсов, настроим Nginx Reverse Proxy с бесплатным Let's Encrypt SSL и защитим панель надежной HTTP Basic-аутентификацией.

1. Риски публичных конвертеров: почему разработчикам и сисадминам нужен приватный контур

Когда вы вставляете строку авторизационного Bearer-токена, приватный SSH-ключ, фрагмент дампа базы данных или хеш секрета в сторонний онлайн-сервис, вы полностью теряете контроль над судьбой этих данных. Даже если на сайте написано «We do not store your data», существует несколько критических уязвимостей сторонних платформ:

  • Логирование HTTP-запросов на стороне сервера: Если утилита отправляет данные на бэкенд через AJAX/POST, тело запроса с высокой вероятностью оседает в access-логах веб-сервера, балансировщика нагрузки или прокси Cloudflare владельца сайта.
  • Аналитические трекеры и системы записи сессий: Скрипты Яндекс.Метрики, Google Analytics, Hotjar или Clarity могут регистрировать содержимое полей ввода формы (Input Keystrokes) и отправлять их на сторонние сервера для построения тепловых карт.
  • Вредоносные расширения и компрометация домена: Популярные сайты-конвертеры нередко меняют владельцев, после чего на них внедряются JS-снифферы для перехвата паролей, приватных ключей и токенов доступа к API.

⚠️ Важное предупреждение по безопасности

Никогда не вставляйте токены от боевых учетных записей, приватные сертификаты и конфигурационные файлы с паролями в публичные конвертеры в интернете. Развертывание собственного изолированного экземпляра утилит на доверенном VDS полностью закрывает риск компрометации данных.

2. Архитектура IT-Tools: клиентский рендеринг, стек и потребление памяти

В отличие от тяжелых систем с базами данных и микросервисами, IT-Tools (проект французского разработчика Corentin Thomasset) спроектирован с упором на максимальную автономность и экономию ресурсов:

  • Чистый клиентский рендеринг (SPA): Приложение собрано на базе Vue 3, Vite и TypeScript. Все вычисления (генерация хэшей, шифрование, парсинг синтаксиса, математические расчеты) происходят исключительно внутри движка браузера на стороне клиента.
  • Нулевой бэкенд: У контейнера нет базы данных (MySQL/PostgreSQL), Redis или сервера очередей. Никакие введенные пользователем строки не передаются на сервер по сети после загрузки статических файлов интерфейса.
  • Легковесный базовый образ: В продакшене контейнер использует легковесный веб-сервер nginx:stable-alpine, отдающий скомпилированные HTML, CSS и JS. Потребление оперативной памяти контейнером составляет всего 15–20 МБ RAM.
Параметр Значение Техническое описание
Образ Docker corentinth/it-tools:latest Официальный образ с Docker Hub и GitHub Packages (ghcr.io)
Потребление RAM 15–25 МБ Минимальная нагрузка, помещается даже на самом бюджетном тарифе VDS
Внутренний порт 80/tcp Стандартный порт HTTP внутри контейнера (проксируется на 127.0.0.1:8080)
Обработка данных Client-side WebAssembly/JS Данные не покидают память браузера клиента при расчетах

3. Каталог утилит: что умеет IT-Tools (Crypto, Web, DevOps, Network)

Коллекция утилит IT-Tools разбита на логические категории, закрывающие практически все повседневные потребности вебмастера и инженера инфраструктуры:

  • Криптография и безопасность (Crypto): Генератор надежных токенов и паролей, калькулятор хэшей (MD5, SHA1, SHA256, SHA512, bcrypt), генератор случайных ключей UUID v4 / ULID, генератор пар RSA-ключей, валидатор стойкости паролей, вычисление HMAC и генератор парольных фраз BIP39.
  • Конвертеры форматов (Converters): Двунаправленный конвертер форматов данных JSON ↔ YAML ↔ TOML ↔ XML, кодирование и декодирование Base64 (включая конвертацию файлов и картинок в data-URI), перевод временных меток UNIX Timestamp в читаемые даты и обратно, конвертер цветовых палитр (HEX, RGB, HSL).
  • Веб и сетевые инструменты (Web & Network): Калькулятор IPv4 и IPv6 подсетей (CIDR), поиск и валидация MAC-адресов, парсер строк User-Agent, энкодер и парсер URL-параметров, справочник HTTP-статусов, конструктор Open Graph мета-тегов для SEO.
  • Разработка и DevOps (Development): Визуальный генератор и парсер расписания Crontab на человеческом языке, конвертер однострочников docker run в формат docker-compose.yml, калькулятор прав доступа Linux chmod (числовой и символьный виды), интерактивный отладчик регулярных выражений RegEx, форматирование SQL и JSON Diff.

💡 Совет инженера

Для регулярных внешних проверок инфраструктуры из глобального интернета (проверка доступности внешних портов, срока действия SSL-сертификатов доменов или DNS-записей) используйте специализированные чекеры SysKit, такие как Сканер портов и Проверка SSL-сертификата. Внутренний же IT-Tools на VDS закрывает задачи по обработке приватных строк и конфигураций.

4. Развертывание IT-Tools в Docker Compose с жесткими лимитами ресурсов

Для стабильной работы изолируем сервис в отдельной рабочей директории и зададим явные ограничения по оперативной памяти и ядрам процессора, чтобы контейнер не создал рисков для остальных служб на сервере.

Создадим рабочую папку и перейдем в нее:

sudo mkdir -p /opt/it-tools
cd /opt/it-tools

Создадим файл манифеста docker-compose.yml:

services:
  it-tools:
    image: corentinth/it-tools:latest
    container_name: it-tools
    restart: unless-stopped
    # Привязка порта строго к локальной петле 127.0.0.1
    # Это предотвращает обход файрвола UFW демоном Docker
    ports:
      - "127.0.0.1:8080:80"
    # Актуальный стандарт Compose Specification: лимиты ресурсов cgroups
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 64M
        reservations:
          memory: 16M
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://127.0.0.1/ || exit 1"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 5s
    security_opt:
      - no-new-privileges:true
    read_only: false

В актуальной спецификации Docker Compose Specification (Compose v2) верхнеуровневый атрибут version признан устаревшим и не требуется. Управление ресурсами унифицировано в блоке deploy.resources.limits, который в современных версиях Docker применяется напрямую локальным демоном cgroups v2 без необходимости режима Swarm (в устаревших сборках Compose v1 для тех же целей использовались корневые параметры mem_limit: 64m и cpus: 0.50).

Обратите особое внимание на параметр ports: "127.0.0.1:8080:80". Если указать просто "8080:80", Docker применит правила iptables и откроет порт 8080 для всего интернета в обход системного брандмауэра UFW. Локальная привязка к 127.0.0.1 гарантирует, что доступ к приложению возможен исключительно через локальный Nginx с авторизацией.

Запустим контейнер в фоновом режиме:

sudo docker compose up -d

Проверим статус запуска и успешность прохождения healthcheck:

sudo docker compose ps

Вывод должен подтверждать статус Up (healthy). Проверим локальный ответ веб-сервера через curl:

curl -I http://127.0.0.1:8080

Сервер должен вернуть заголовок HTTP/1.1 200 OK.

5. Требования к серверу VDS для self-hosted стека

Благодаря чистому клиентскому рендерингу и статической сборке на базе Nginx Alpine, IT-Tools практически невесом для серверного железа. Контейнеру требуется всего 15–25 МБ оперативной памяти и минимальная доля процессорного времени (только для отдачи статических файлов gzip/brotli при первоначальной загрузке страницы).

Это делает IT-Tools идеальным соседом для уже работающих на вашем VDS проектов: его можно спокойно разместить на одном сервере вместе с WordPress, Node.js-приложениями, PostgreSQL или панелями мониторинга без риска вызвать срабатывание Linux OOM Killer.

Если же вы разворачиваете выделенный служебный сервер под инструменты сисадмина и внутренние devops-утилиты (IT-Tools, Uptime Kuma, Nginx Proxy Manager, дашборд Homepage), базовой конфигурации сервера будет более чем достаточно:

  • Процессор (vCPU): 1 виртуальное ядро с базовой частотой от 2.5–3.3 ГГц для быстрой компрессии и отдачи трафика.
  • Оперативная память (RAM): 1 ГБ (хватит для операционной системы Ubuntu 24.04 LTS, Docker, Nginx и целой связки из 5–7 служебных контейнеров).
  • Накопитель (NVMe): 10–15 ГБ быстрого дискового пространства под системные логи и образы Docker.
  • Сеть: Стабильный публичный IPv4-адрес и пропускная способность канала от 100 Мбит/с до 1 Гбит/с без лимита трафика.

Рекомендуемые VDS-провайдеры

Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с

Выбор редакции
⚡

Timeweb Cloud — Быстрые NVMe VDS

Высокочастотные процессоры 3.3+ ГГц, быстрые NVMe-диски и надежная сеть для бесперебойной работы Docker-сервисов и статических веб-панелей.

Конфигурация
1 vCPU 3.3 ГГц • 1 ГБ RAM • 15 ГБ NVMe • Трафик без лимита
Премиум Tier III
🔷

Selectel — Надежные облачные серверы

Дата-центры уровня Tier III, гарантированные ресурсы vCPU и гибкое управление приватными сетями для изолированных контуров.

Конфигурация
2 vCPU • 2 ГБ RAM • 30 ГБ NVMe • Дата-центры Tier III
Простота и стабильность
🟠

Beget — Простота для веб-разработчиков

Быстрый запуск Docker в один клик, удобный терминал в панели управления, бесплатные автобэкапы и техническая поддержка 24/7.

Конфигурация
1 vCPU • 1 ГБ RAM • 15 ГБ NVMe • Бесплатные бэкапы

6. Настройка Nginx Reverse Proxy, Let's Encrypt и защита через HTTP Basic Auth

Поскольку контейнер IT-Tools слушает локальный сокет 127.0.0.1:8080 и не содержит собственного механизма разграничения прав доступа, организацию безопасного входа и шифрование трафика берет на себя внешний веб-сервер Nginx.

Для генерации файла с паролями установим пакет утилит веб-сервера:

sudo apt update && sudo apt install -y apache2-utils nginx certbot python3-certbot-nginx

Создадим файл учетных записей .htpasswd. Обязательно используйте современный и криптостойкий алгоритм хеширования bcrypt (флаг -B), так как устаревший стандартный алгоритм MD5 (флаг -m) подвержен быстрому перебору на GPU:

# Генерация надежного пароля возможна через утилиту https://syskit.ru/password-generator
sudo htpasswd -B -c /etc/nginx/.htpasswd admin

Утилита запросит ввод и подтверждение пароля. Проверьте права на созданный файл: читать его должен только пользователь веб-сервера:

sudo chown www-data:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd

Чтобы избежать ошибки «chicken-and-egg» (когда Nginx не может запуститься из-за отсутствующих файлов сертификатов), настройку выполняем в два чистых шага. Сначала создадим базовый конфигурационный файл для порта 80 в /etc/nginx/sites-available/it-tools.conf:

server {
    listen 80;
    listen [::]:80;
    server_name tools.yourdomain.ru;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Активируем конфигурацию через симлинк и перезагрузим веб-сервер:

sudo ln -sf /etc/nginx/sites-available/it-tools.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Теперь выпустим бесплатный SSL-сертификат Let's Encrypt с автоматической настройкой 301-редиректа на HTTPS:

sudo certbot --nginx -d tools.yourdomain.ru --redirect --non-interactive --agree-tos -m admin@yourdomain.ru

После успешного получения сертификата отредактируем итоговый файл /etc/nginx/sites-available/it-tools.conf, добавив директивы базовой аутентификации auth_basic и кэширование статических файлов:

server {
    listen 80;
    listen [::]:80;
    server_name tools.yourdomain.ru;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name tools.yourdomain.ru;

    ssl_certificate /etc/letsencrypt/live/tools.yourdomain.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tools.yourdomain.ru/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Защита всей панели через HTTP Basic Auth
    auth_basic "Restricted IT Tools Area";
    auth_basic_user_file /etc/nginx/.htpasswd;

    # Заголовки безопасности
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # Кэширование статических ресурсов SPA
    location ~* .(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        expires 14d;
        add_header Cache-Control "public, no-transform";
    }
}

Проверим корректность синтаксиса и применим изменения:

sudo nginx -t && sudo systemctl reload nginx

Теперь при переходе по адресу https://tools.yourdomain.ru браузер откроет нативное модальное окно авторизации с запросом логина и пароля. Без успешного ввода учетных данных злоумышленники или автоматические интернет-сканеры не смогут даже загрузить JavaScript-код интерфейса.

7. Альтернативные методы защиты: Caddy 2 и интеграция с Authelia SSO

Если в вашей инфраструктуре в качестве основного веб-сервера используется Caddy 2, настройка базовой защиты и автоматического выпуска SSL-сертификатов становится еще компактнее. Сгенерируйте bcrypt-хеш пароля встроенной командой Caddy:

caddy hash-password --plaintext "ваш_надежный_пароль"

Добавьте блок в файл /etc/caddy/Caddyfile:

tools.yourdomain.ru {
    basicauth {
        admin $2a$14$Z...хеш_пароля_из_вывода_команды...
    }
    reverse_proxy 127.0.0.1:8080
}

Для командной работы в рамках корпоративного контура базовый пароль неудобен — гораздо практичнее использовать единую точку входа SSO с двухфакторной аутентификацией. При наличии развернутой Authelia достаточно подключить стандартный блок forward_auth в Nginx. Подробный разбор архитектуры и развертывания SSO рассмотрен в нашей статье по настройке связки Authelia и Nginx Forward Auth.

8. Обновление контейнера, резервное копирование и добавление в Homepage

Поскольку IT-Tools не хранит постоянного состояния в базах данных (stateless), процедура резервного копирования сводится к сохранению конфигурационных файлов:

  • Файла манифеста /opt/it-tools/docker-compose.yml;
  • Файла учетных записей /etc/nginx/.htpasswd;
  • Конфигурационного файла виртуального хоста Nginx /etc/nginx/sites-available/it-tools.conf.

Обновление сервиса до свежего релиза выполняется стандартными командами Compose:

cd /opt/it-tools
sudo docker compose pull
sudo docker compose up -d
sudo docker image prune -f

Если вы используете единую панель управления сервисами VDS, добавьте карточку IT-Tools в файл конфигурации services.yaml вашего дашборда (подробнее читайте в руководстве по развертыванию Homepage в Docker Compose):

- DevOps Tools:
    - IT-Tools:
        icon: it-tools.png
        href: "https://tools.yourdomain.ru"
        description: "Швейцарский нож утилит сисадмина и разработчика"
        ping: "http://127.0.0.1:8080"

9. Диагностика частых проблем и траблшутинг

В процессе запуска и эксплуатации могут возникать типичные инфраструктурные сбои:

  • Ошибка 502 Bad Gateway в браузере: Nginx не может установить TCP-соединение с upstream. Проверьте статус контейнера командой sudo docker compose ps. Если контейнер находится в состоянии Restarting или Exited, изучите последние логи: sudo docker compose logs --tail=50 it-tools. Убедитесь, что порт 8080 на сервере не занят другим процессом.
  • Ошибка 401 Unauthorized не исчезает после ввода логина: Проверьте права на чтение файла .htpasswd. Веб-сервер Nginx работает от системного пользователя www-data. Если права на файл установлены как chmod 600 с владельцем root, Nginx не сможет прочитать хеш и будет отклонять любые учетные данные.
  • Ошибка «Port is already allocated»: Порт 8080 уже используется другой службой на хосте. Замените в файле docker-compose.yml и конфиге Nginx левую часть привязки порта на свободный локальный порт (например, 127.0.0.1:8088:80).

📋 Чек-лист проверки перед запуском в работу

  • Порт контейнера привязан строго к 127.0.0.1:8080:80, а внешний порт 8080 закрыт от сканирования.
  • Для сервиса заданы лимиты ресурсов cgroups в блоке deploy.resources.limits (память до 64 МБ, CPU до 0.5 ядра).
  • Файл .htpasswd зашифрован с использованием надежного алгоритма bcrypt (htpasswd -B).
  • Выпущен SSL-сертификат Let's Encrypt и настроен автоматический редирект с HTTP на HTTPS.
  • При обращении по доменному имени запрашивается авторизация и корректно открывается веб-интерфейс.

Вопросы и ответы (FAQ)

Популярные вопросы вебмастеров и сисадминов по данной теме

Безопасно ли передавать конфиденциальные JWT-токены и хэши в IT-Tools?
Да. В отличие от большинства бесплатных сайтов-конвертеров в интернете, IT-Tools выполняет все расчеты, кодирование и парсинг локально на стороне клиента (Client-Side) в JavaScript-движке браузера. После первоначальной загрузки статических файлов на сервер не отправляется никаких сетевых запросов с введенными данными.
Можно ли развернуть IT-Tools на сервере с 512 МБ оперативной памяти?
Да, контейнер IT-Tools потребляет в среднем всего 15–20 МБ RAM, так как представляет собой скомпилированный SPA, который отдает легковесный Nginx Alpine. Сервис стабильно работает даже на самых бюджетных VDS с 512 МБ RAM или в качестве соседа для уже нагруженных баз данных.
Как предоставить доступ к IT-Tools нескольким коллегам по команде?
Вы можете добавить дополнительных пользователей в файл .htpasswd с помощью команды sudo htpasswd -B /etc/nginx/.htpasswd new_user (без флага -c, чтобы не перезаписать файл). Альтернативный вариант для корпоративных команд — интеграция с единым сервисом авторизации Authelia через Nginx Forward Auth.

Читайте также в блоге SysKit

Смежные руководства и полезные технические статьи