В ежедневной работе вебмастера, сисадмина и бэкенд-разработчика постоянно возникают микрозадачи: декодировать 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, калькулятор прав доступа Linuxchmod(числовой и символьный виды), интерактивный отладчик регулярных выражений 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-сервисов и статических веб-панелей.
Selectel — Надежные облачные серверы
Дата-центры уровня Tier III, гарантированные ресурсы vCPU и гибкое управление приватными сетями для изолированных контуров.
Beget — Простота для веб-разработчиков
Быстрый запуск Docker в один клик, удобный терминал в панели управления, бесплатные автобэкапы и техническая поддержка 24/7.
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.
- При обращении по доменному имени запрашивается авторизация и корректно открывается веб-интерфейс.