<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Docker on DevOps-инженер &amp; CloudAdmin</title><link>https://ruadmin.root.sx/ru/tags/docker/</link><description>Recent content in Docker on DevOps-инженер &amp; CloudAdmin</description><generator>Hugo -- gohugo.io</generator><language>ru-RU</language><atom:link href="https://ruadmin.root.sx/ru/tags/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>CI/CD и инфраструктура для Dating-сервиса</title><link>https://ruadmin.root.sx/ru/posts/cicd/ci-cd-dating/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruadmin.root.sx/ru/posts/cicd/ci-cd-dating/</guid><description>&lt;h2 id="инфраструктура-и-cicd-для-продакшен-запуска-dating-сервиса"&gt;Инфраструктура и CI/CD для продакшен запуска Dating-сервиса&lt;/h2&gt;
&lt;hr&gt;
&lt;h4 id="клиент"&gt;Клиент&lt;/h4&gt;
&lt;p&gt;Dating-сервис Puzzle Master&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="задача"&gt;Задача&lt;/h4&gt;
&lt;p&gt;Стартап разработал бэкенд на Nest.js + фронтенд на Angular и был готов к запуску, но не имел никакой инфраструктуры: деплой был ручным, не было CI/CD, мониторинга, бэкапов и разделения dev/prod окружений. Требовалось выстроить полный DevOps-стек с нуля под продакшен.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="решение"&gt;Решение&lt;/h4&gt;
&lt;h6 id="1-контейнеризация-приложения"&gt;1. Контейнеризация приложения&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Multi-stage Dockerfile для backend (Nest.js + Prisma, non-root пользователь)&lt;/li&gt;
&lt;li&gt;Multi-stage Dockerfile для frontend (Angular 12, legacy OpenSSL, Nginx для статики)&lt;/li&gt;
&lt;li&gt;Docker Compose с полным стеком: PostgreSQL 15, Redis 7, imgproxy, Nginx&lt;/li&gt;
&lt;li&gt;Healthchecks и &lt;code&gt;depends_on&lt;/code&gt; для правильного порядка запуска&lt;/li&gt;
&lt;li&gt;Раздельные окружения dev и prod в &lt;code&gt;/opt/dev&lt;/code&gt; и &lt;code&gt;/opt/prod&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-gitlab-cicd"&gt;2. GitLab CI/CD&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Миграция репозиториев с Bitbucket на GitLab&lt;/li&gt;
&lt;li&gt;Пайплайны для backend и frontend: build → push → deploy&lt;/li&gt;
&lt;li&gt;GitLab Container Registry для хранения Docker образов&lt;/li&gt;
&lt;li&gt;Автоматический деплой в dev, ручной trigger для prod&lt;/li&gt;
&lt;li&gt;SSH деплой на VPS через &lt;code&gt;SSH_PRIVATE_KEY&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-nginx-reverse-proxy"&gt;3. Nginx Reverse Proxy&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Универсальный конфиг через &lt;code&gt;envsubst&lt;/code&gt; для dev/prod&lt;/li&gt;
&lt;li&gt;SSL/TLS (TLSv1.2, TLSv1.3) с сертификатами Cloudflare&lt;/li&gt;
&lt;li&gt;Проксирование &lt;code&gt;/api/*&lt;/code&gt; → backend:4000, &lt;code&gt;/*&lt;/code&gt; → frontend:80&lt;/li&gt;
&lt;li&gt;Редирект www → основной домен (301)&lt;/li&gt;
&lt;li&gt;Отдельный стек imgproxy с SSL терминацией&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="4-безопасность-ansible"&gt;4. Безопасность (Ansible)&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Настройка сервера через Ansible: SSH только по ключам, отключён root&lt;/li&gt;
&lt;li&gt;UFW Firewall: открыты только порты 80, 443, кастомный SSH&lt;/li&gt;
&lt;li&gt;Доступ к БД только через SSH Tunnel (Beekeeper Studio)&lt;/li&gt;
&lt;li&gt;Секреты в переменных GitLab CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="5-мониторинг"&gt;5. Мониторинг&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Prometheus + Grafana с автоматическим провижинингом дашбордов&lt;/li&gt;
&lt;li&gt;Exporters: Node, cAdvisor, Postgres, Redis, Nginx, Blackbox&lt;/li&gt;
&lt;li&gt;5 Grafana дашбордов: сервер, Docker контейнеры, PostgreSQL, Redis, Nginx&lt;/li&gt;
&lt;li&gt;Alertmanager с интеграцией в Telegram, алерты на CPU/RAM/Disk/API/SSL&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="6-бэкапы-бд"&gt;6. Бэкапы БД&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Автоматический &lt;code&gt;pg_dump&lt;/code&gt; каждый час&lt;/li&gt;
&lt;li&gt;Сжатие gzip и загрузка в Cloudflare R2 (S3-compatible)&lt;/li&gt;
&lt;li&gt;Prometheus метрики бэкапов: успех, размер, timestamp&lt;/li&gt;
&lt;li&gt;Алерты: &lt;code&gt;DatabaseBackupMissing&lt;/code&gt;, &lt;code&gt;DatabaseBackupFailed&lt;/code&gt;, DatabaseBackupSize`Anomaly&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="технологии"&gt;Технологии&lt;/h4&gt;
&lt;div class="row"&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/gitlab-original.svg" alt="GitLab"&gt;&lt;div&gt;GitLab CI&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/docker-original.svg" alt="Docker"&gt;&lt;div&gt;Docker&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/ansible-original.svg" alt="Ansible"&gt;&lt;div&gt;Ansible&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/prometheus-original.svg" alt="Prometheus"&gt;&lt;div&gt;Prometheus&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/nginx.svg" alt="Nginx"&gt;&lt;div&gt;Nginx&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/postgresql.svg" alt="PostgreSQL"&gt;&lt;div&gt;PostgreSQL&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="результаты"&gt;Результаты&lt;/h4&gt;
&lt;p&gt;✅ &lt;strong&gt;Деплой:&lt;/strong&gt; git push в main → автоматическая сборка и деплой на сервер&lt;br&gt;
✅ &lt;strong&gt;Окружения:&lt;/strong&gt; полное разделение dev и prod на одном VPS&lt;br&gt;
✅ &lt;strong&gt;Мониторинг:&lt;/strong&gt; 5 дашбордов, алерты в Telegram по 6 категориям&lt;br&gt;
✅ &lt;strong&gt;Бэкапы:&lt;/strong&gt; автоматический &lt;code&gt;pg_dump&lt;/code&gt; каждый час в Cloudflare R2&lt;br&gt;
✅ &lt;strong&gt;Безопасность:&lt;/strong&gt; UFW, SSH по ключам, БД закрыта извне&lt;br&gt;
✅ &lt;strong&gt;Масштабируемость:&lt;/strong&gt; архитектура готова к выносу БД на отдельный сервер&lt;/p&gt;</description></item><item><title>CI/CD и инфраструктура для веб-приложения</title><link>https://ruadmin.root.sx/ru/posts/cicd/ci-cd-js/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruadmin.root.sx/ru/posts/cicd/ci-cd-js/</guid><description>&lt;h2 id="инфраструктура-и-cicd-для-сайта-компании"&gt;Инфраструктура и CI/CD для сайта компании&lt;/h2&gt;
&lt;hr&gt;
&lt;h4 id="клиент"&gt;Клиент&lt;/h4&gt;
&lt;p&gt;Компания-производитель фирменных исследовательских продуктов, которой требовался сайт для публикации каталога продукции&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="задача"&gt;Задача&lt;/h4&gt;
&lt;p&gt;Разработчики написали код обычного веб-приложения (backend NestJS + frontend Next.js), но инфраструктура полностью отсутствовала: деплой выполнялся вручную, не было CI/CD, настроенного сервера, мониторинга, бэкапов и разделения тестового и боевого окружений. Требовалось выстроить полный DevOps-стек с нуля: GitLab CI/CD, собственный сервер, два изолированных контура, HTTPS, мониторинг, оповещения и автоматические бэкапы.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="решение"&gt;Решение&lt;/h4&gt;
&lt;h6 id="1-подготовка-сервера-и-безопасность"&gt;1. Подготовка сервера и безопасность&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;VPS на Ubuntu 24.04: 4 vCPU, 6 ГБ RAM, 120 ГБ диск&lt;/li&gt;
&lt;li&gt;SSH только по ключам, отключён root, выделенный деплой-пользователь (sudo + docker)&lt;/li&gt;
&lt;li&gt;UFW Firewall: открыты только порты 80, 443, 22 и SFTP (2222/2223)&lt;/li&gt;
&lt;li&gt;Автоматические обновления безопасности (unattended-upgrades)&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-gitlab-cicd"&gt;2. GitLab CI/CD&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Self-hosted GitLab с групповым Container Registry&lt;/li&gt;
&lt;li&gt;Пайплайны для backend и frontend: build → push → deploy&lt;/li&gt;
&lt;li&gt;Привязка веток: &lt;code&gt;test&lt;/code&gt; → образ &lt;code&gt;:test&lt;/code&gt; → контур test; &lt;code&gt;master&lt;/code&gt; → образ &lt;code&gt;:latest&lt;/code&gt; → контур prod; теги &lt;code&gt;v*&lt;/code&gt; → релизные сборки; &lt;code&gt;dev&lt;/code&gt; → только сборка&lt;/li&gt;
&lt;li&gt;SSH-деплой на сервер через &lt;code&gt;SSH_PRIVATE_KEY&lt;/code&gt;, секреты в Protected CI-переменных&lt;/li&gt;
&lt;li&gt;Инфраструктурный репозиторий &lt;code&gt;server-devops&lt;/code&gt; с джобой &lt;code&gt;deploy-all&lt;/code&gt;: жёсткий сброс к origin + &lt;code&gt;docker compose up -d --pull always&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-docker-compose-и-контуры"&gt;3. Docker Compose и контуры&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Три compose-файла: &lt;code&gt;app/&lt;/code&gt; (test), &lt;code&gt;app-prod/&lt;/code&gt; (prod), &lt;code&gt;monitoring/&lt;/code&gt; на общей Docker-сети&lt;/li&gt;
&lt;li&gt;Сервисы каждого контура: backend NestJS, frontend Next.js, PostgreSQL 16, pgAdmin, SFTP&lt;/li&gt;
&lt;li&gt;Политика рестарта &lt;code&gt;on-failure:10&lt;/code&gt; для всех контейнеров приложений&lt;/li&gt;
&lt;li&gt;Все конфиги, дашборды и правила — в git, применяются пайплайном&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="4-reverse-proxy-и-https"&gt;4. Reverse Proxy и HTTPS&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Единый reverse proxy &lt;code&gt;nginx-proxy&lt;/code&gt; + &lt;code&gt;acme-companion&lt;/code&gt; на портах 80/443&lt;/li&gt;
&lt;li&gt;Автоматические сертификаты Let&amp;rsquo;s Encrypt с автопродлением&lt;/li&gt;
&lt;li&gt;Все точки входа только по HTTPS: основной сайт, тестовый контур, панель управления БД, мониторинг&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="5-мониторинг-и-алерты"&gt;5. Мониторинг и алерты&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Prometheus + Grafana с автоматическим провижинингом дашбордов из git (4 дашборда: cAdvisor, Node Exporter, Logs/App, PostgreSQL)&lt;/li&gt;
&lt;li&gt;Exporters: node, cAdvisor, postgres, nginx (stub_status + access-лог: RPS, 4xx/5xx, время ответа/апстримов), HTTP-пробы blackbox для frontend/backend&lt;/li&gt;
&lt;li&gt;Alertmanager с интеграцией в Telegram — один бот, отдельные чаты на каждый контур (test / prod)&lt;/li&gt;
&lt;li&gt;Правила алертов: падение сервисов, высокая нагрузка CPU/RAM/диск (&amp;gt;80%), циклы рестартов, ошибки 5xx backend&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="6-логирование-и-бэкапы"&gt;6. Логирование и бэкапы&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Loki + Promtail: логи всех контейнеров собираются и доступны в Grafana (Logs Drilldown)&lt;/li&gt;
&lt;li&gt;Автоматический скрипт бэкапа: &lt;code&gt;pg_dump&lt;/code&gt; БД prod + tar-стрим тома загрузок prod в единый архив&lt;/li&gt;
&lt;li&gt;Ротация 30 дней, ежедневный cron в 03:00, процедура восстановления проверена и задокументирована&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="технологии"&gt;Технологии&lt;/h4&gt;
&lt;div class="row"&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/gitlab-original.svg" alt="GitLab"&gt;&lt;div&gt;GitLab CI&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/docker-original.svg" alt="Docker"&gt;&lt;div&gt;Docker&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/prometheus-original.svg" alt="Prometheus"&gt;&lt;div&gt;Prometheus&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/grafana-original.svg" alt="Grafana"&gt;&lt;div&gt;Grafana&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/nginx.svg" alt="Nginx"&gt;&lt;div&gt;Nginx&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/postgresql.svg" alt="PostgreSQL"&gt;&lt;div&gt;PostgreSQL&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="результаты"&gt;Результаты&lt;/h4&gt;
&lt;p&gt;✅ &lt;strong&gt;Деплой:&lt;/strong&gt; merge в master → автоматическая сборка, публикация и деплой на сервер&lt;br&gt;
✅ &lt;strong&gt;Окружения:&lt;/strong&gt; полное разделение test и prod на одном VPS через общую Docker-сеть&lt;br&gt;
✅ &lt;strong&gt;HTTPS:&lt;/strong&gt; все сервисы только по HTTPS с автоматическими сертификатами Let&amp;rsquo;s Encrypt&lt;br&gt;
✅ &lt;strong&gt;Мониторинг:&lt;/strong&gt; 4 дашборда, пробы доступности, алерты в Telegram (отдельные чаты на контур)&lt;br&gt;
✅ &lt;strong&gt;Бэкапы:&lt;/strong&gt; ежедневный бэкап БД prod + тома загрузок, ротация 30 дней, восстановление проверено&lt;br&gt;
✅ &lt;strong&gt;Безопасность:&lt;/strong&gt; SSH по ключам, отключён root, UFW, секреты в Protected CI-переменных&lt;/p&gt;</description></item><item><title>CI/CD с GitLab + Kubernetes: деплой за 10 минут</title><link>https://ruadmin.root.sx/ru/posts/cicd/ci-cd-gitlab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruadmin.root.sx/ru/posts/cicd/ci-cd-gitlab/</guid><description>&lt;h2 id="автоматизация-cicd-от-2-часов-до-10-минут-деплоя"&gt;Автоматизация CI/CD: от 2 часов до 10 минут деплоя&lt;/h2&gt;
&lt;hr&gt;
&lt;h4 id="клиент"&gt;Клиент&lt;/h4&gt;
&lt;p&gt;Стартап в сфере e-commerce, команда разработки 5 человек&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="задача"&gt;Задача&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Ручной деплой занимал 2 часа&lt;/li&gt;
&lt;li&gt;Частые ошибки при развертывании&lt;/li&gt;
&lt;li&gt;Невозможность быстро откатить изменения&lt;/li&gt;
&lt;li&gt;Требовалось: автоматизация CI/CD, GitOps, быстрый откат&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="решение"&gt;Решение&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Self-hosted GitLab&lt;/li&gt;
&lt;li&gt;GitLab CI пайплайн (Build → Test → Deploy)&lt;/li&gt;
&lt;li&gt;Managed Kubernetes в Yandex Cloud&lt;/li&gt;
&lt;li&gt;Flux CD для GitOps&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h4 id="технологии"&gt;Технологии&lt;/h4&gt;
&lt;div class="row"&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/gitlab-original.svg" alt="GitLab"&gt;&lt;div&gt;GitLab&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/docker-original.svg" alt="Docker"&gt;&lt;div&gt;Docker&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/kubernetes-plain.svg" alt="Kubernetes"&gt;&lt;div&gt;Kubernetes&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/helm-original.svg" alt="Helm"&gt;&lt;div&gt;Helm&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/flux-cd.svg" alt="Flux CD"&gt;&lt;div&gt;Flux CD&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="результаты"&gt;Результаты&lt;/h4&gt;
&lt;p&gt;✅ &lt;strong&gt;Время деплоя:&lt;/strong&gt; с 2 часов до 10 минут (12x)&lt;br&gt;
✅ &lt;strong&gt;Ошибки:&lt;/strong&gt; −90%&lt;br&gt;
✅ &lt;strong&gt;Частота деплоя:&lt;/strong&gt; с 1/неделя до 10+/день&lt;br&gt;
✅ &lt;strong&gt;Время отката:&lt;/strong&gt; с 1 часа до 2 минут&lt;/p&gt;</description></item><item><title>Observability и Telemetry для .NET Backend</title><link>https://ruadmin.root.sx/ru/posts/sre-observability/dotnet-telemetry-observability/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruadmin.root.sx/ru/posts/sre-observability/dotnet-telemetry-observability/</guid><description>&lt;h2 id="observability-для-net-backend-интеграция-телеметрии-и-оптимизация-производительности"&gt;Observability для .NET Backend: интеграция телеметрии и оптимизация производительности&lt;/h2&gt;
&lt;hr&gt;
&lt;h4 id="клиент"&gt;Клиент&lt;/h4&gt;
&lt;p&gt;E-commerce платформа с высоконагруженным .NET 8 бэкендом&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="задача"&gt;Задача&lt;/h4&gt;
&lt;p&gt;У .NET бэкенда не было наблюдаемости — никакого распределённого трассинга, централизованных метрик, структурированного логирования. Поиск медленных запросов требовал ручного разбора логов. Команда нуждалась в полном внедрении OpenTelemetry: проброс трейсов от Ingress через .NET к downstream-сервисам (PostgreSQL, Redis, RabbitMQ, HTTP upstreams), автоматическое обнаружение медленных запросов и путь к оптимизации P99 latency.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="решение"&gt;Решение&lt;/h4&gt;
&lt;h6 id="1-интеграция-opentelemetry-в-net-8"&gt;1. Интеграция OpenTelemetry в .NET 8&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Подключены NuGet-пакеты: &lt;code&gt;OpenTelemetry.Extensions.Hosting&lt;/code&gt;, &lt;code&gt;Instrumentation.AspNetCore&lt;/code&gt;, &lt;code&gt;Instrumentation.Http&lt;/code&gt;, &lt;code&gt;Instrumentation.EntityFrameworkCore&lt;/code&gt;, &lt;code&gt;Instrumentation.StackExchangeRedis&lt;/code&gt;, &lt;code&gt;Instrumentation.Runtime&lt;/code&gt;, &lt;code&gt;Instrumentation.Process&lt;/code&gt;, &lt;code&gt;Exporter.OpenTelemetryProtocol&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Настроен &lt;code&gt;ActivitySource&lt;/code&gt; с инструментацией AspNetCore, HttpClient, EF Core, Redis&lt;/li&gt;
&lt;li&gt;Включён проброс W3C &lt;code&gt;traceparent&lt;/code&gt;; добавлен middleware для возврата &lt;code&gt;X-Trace-Id&lt;/code&gt; в заголовках ответа&lt;/li&gt;
&lt;li&gt;Экспорт через OTLP/gRPC в OTel Collector (&lt;code&gt;:4317&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-инфраструктурный-слой-kubernetes--nginx--otel-collector"&gt;2. Инфраструктурный слой (Kubernetes / Nginx / OTel Collector)&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nginx/Ingress&lt;/strong&gt;: инъекция заголовков &lt;code&gt;traceparent&lt;/code&gt;/&lt;code&gt;tracestate&lt;/code&gt; для проброса W3C контекста&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;K8s Deployment&lt;/strong&gt;: переменные окружения &lt;code&gt;OTEL_SERVICE_NAME&lt;/code&gt;, &lt;code&gt;OTEL_EXPORTER_OTLP_ENDPOINT&lt;/code&gt;, конфиг семплирования (&lt;code&gt;parentbased_traceidratio&lt;/code&gt; 20%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OTel Collector&lt;/strong&gt;: Tail-based sampling процессор — всегда захватываем ошибки (status_code: ERROR), медленные запросы (&amp;gt;1с latency), вероятностные 5% остальных; дропаем health checks&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-методология-поиска-медленных-запросов"&gt;3. Методология поиска медленных запросов&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Top-N Slow Endpoints (P95/P99)&lt;/strong&gt;: Grafana дашборды с &lt;code&gt;histogram_quantile(0.99, sum(rate(http_server_request_duration_seconds_bucket[5m])) by (le, http_route))&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flame Graphs &amp;amp; Span Waterfall&lt;/strong&gt;: Анализ разбивки трейса — Middleware → Controller → EF Core → Downstream API → Serialization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runtime Metrics&lt;/strong&gt;: Мониторинг длины очереди ThreadPool, частоты Gen 2 GC, аллокаций для детекта sync-over-async блокировок&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Live Profiling&lt;/strong&gt;: &lt;code&gt;dotnet-trace&lt;/code&gt; + Speedscope/PerfView для CPU сэмплинга на проде под нагрузкой&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="4-чек-лист-оптимизаций"&gt;4. Чек-лист оптимизаций&lt;/h6&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Категория&lt;/th&gt;
&lt;th&gt;Применённые фиксы&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;База данных&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Добавлены недостающие индексы (EXPLAIN ANALYZE), устранено N+1 через &lt;code&gt;.Include()&lt;/code&gt;/&lt;code&gt;.Select()&lt;/code&gt;, &lt;code&gt;.AsNoTracking()&lt;/code&gt; для read-only, настроен connection pooling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;I/O &amp;amp; Сеть&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Полный перевод на async/await с CancellationToken, убраны &lt;code&gt;.Result&lt;/code&gt;/&lt;code&gt;.Wait()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Аллокации и GC&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ArrayPool&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;Memory&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;ReadOnlySpan&amp;lt;T&amp;gt;&lt;/code&gt;, стриминг JSON в &lt;code&gt;Response.BodyWriter&lt;/code&gt;, включён Server GC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Кэширование&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Redis distributed cache (FusionCache), OutputCaching для HTTP-ответов&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HTTP Clients&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IHttpClientFactory&lt;/code&gt; / singleton &lt;code&gt;SocketsHttpHandler&lt;/code&gt; с &lt;code&gt;PooledConnectionLifetime=15m&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h4 id="технологии"&gt;Технологии&lt;/h4&gt;
&lt;div class="row"&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/dotnet.svg" alt=".NET"&gt;&lt;div&gt;.NET 8&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/opentelemetry.svg" alt="OpenTelemetry"&gt;&lt;div&gt;OpenTelemetry&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/kubernetes-plain.svg" alt="Kubernetes"&gt;&lt;div&gt;Kubernetes&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/prometheus-original.svg" alt="Prometheus"&gt;&lt;div&gt;Prometheus&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/grafana-original.svg" alt="Grafana"&gt;&lt;div&gt;Grafana&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/jaeger.svg" alt="Jaeger"&gt;&lt;div&gt;Jaeger&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/postgresql.svg" alt="PostgreSQL"&gt;&lt;div&gt;PostgreSQL&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/redis.svg" alt="Redis"&gt;&lt;div&gt;Redis&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/rabbitmq.svg" alt="RabbitMQ"&gt;&lt;div&gt;RabbitMQ&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/helm-original.svg" alt="Helm"&gt;&lt;div&gt;Helm&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="результаты"&gt;Результаты&lt;/h4&gt;
&lt;p&gt;✅ &lt;strong&gt;Полное покрытие трейсами:&lt;/strong&gt; 100% запросов имеют &lt;code&gt;traceparent&lt;/code&gt;, &lt;code&gt;X-Trace-Id&lt;/code&gt; возвращается клиентам&lt;br&gt;
✅ &lt;strong&gt;P99 latency снижен:&lt;/strong&gt; с 2.3с до 420мс (улучшение 82%) после оптимизации топ-5 эндпоинтов&lt;br&gt;
✅ &lt;strong&gt;Обнаружение ошибок:&lt;/strong&gt; Tail-sampling захватывает 100% 5xx ошибок и запросов &amp;gt;1с даже при 20% sample rate&lt;br&gt;
✅ &lt;strong&gt;Проактивный алертинг:&lt;/strong&gt; Настроены алерты на P99 &amp;gt; SLA и скачки error-rate в Grafana/Alertmanager&lt;br&gt;
✅ &lt;strong&gt;Оптимизация БД:&lt;/strong&gt; N+1 устранено, индексы добавлены, пул соединений настроен — EF Core спалы снизились на 65%&lt;br&gt;
✅ &lt;strong&gt;ThreadPool здоров:&lt;/strong&gt; Длина очереди около нуля под пиковой нагрузкой; sync-over-async устранён&lt;br&gt;
✅ &lt;strong&gt;Нагрузочное тестирование:&lt;/strong&gt; k6 soak-тест подтверждает стабильный P99 под 2x ожидаемого RPS&lt;/p&gt;</description></item><item><title>Self-Hosted проект-менеджмент Plane.so</title><link>https://ruadmin.root.sx/ru/posts/self-hosted/plane-so/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruadmin.root.sx/ru/posts/self-hosted/plane-so/</guid><description>&lt;h2 id="self-hosted-проект-менеджмент-planeso"&gt;Self-Hosted проект-менеджмент Plane.so&lt;/h2&gt;
&lt;hr&gt;
&lt;h4 id="клиент"&gt;Клиент&lt;/h4&gt;
&lt;p&gt;Компания с потребностью в собственном инструменте управления проектами, размещённом на офисной инфраструктуре&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="задача"&gt;Задача&lt;/h4&gt;
&lt;p&gt;Клиент хотел получить open-source альтернативу Jira/Linear для управления проектами и задачами, развёрнутую на собственном сервере в существующем окружении Coolify. Требовалось: установить последнюю версию Plane.so CE, обеспечить корректную работу за Traefik reverse proxy, вынести базу данных как отдельный сервис Coolify для удобного архивирования, а также настроить регулярные бэкапы всех данных.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="решение"&gt;Решение&lt;/h4&gt;
&lt;h6 id="1-подготовка-инфраструктуры"&gt;1. Подготовка инфраструктуры&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Анализ существующего окружения &lt;strong&gt;Coolify&lt;/strong&gt; и конфигурации &lt;strong&gt;Traefik&lt;/strong&gt; на сервере клиента&lt;/li&gt;
&lt;li&gt;Выбор последней open-source версии &lt;strong&gt;Plane.so CE&lt;/strong&gt; из &lt;a href="https://github.com/makeplane/plane" target="_blank" rel="noopener"&gt;официального репозитория&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Изучение &lt;a href="https://developers.plane.so/self-hosting/methods/docker-compose" target="_blank" rel="noopener"&gt;документации по self-hosting&lt;/a&gt; для формирования базовой конфигурации&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-кастомный-docker-compose"&gt;2. Кастомный Docker Compose&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;На основе официального docker-compose создан &lt;strong&gt;уникальный Docker Compose&lt;/strong&gt;, адаптированный под Coolify&lt;/li&gt;
&lt;li&gt;Сервисы Plane (web, space, api, worker, beat-worker) настроены для работы за &lt;strong&gt;Traefik&lt;/strong&gt; — корректные labels, сети и маршрутизация&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt; вынесен как отдельный сервис Coolify — это позволяет управлять базой данных независимо и использовать встроенный механизм архивирования Coolify&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redis&lt;/strong&gt; для кэширования и очередей задач&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MinIO&lt;/strong&gt; как S3-совместимое объектное хранилище для вложений и ассетов&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-интеграция-с-traefik"&gt;3. Интеграция с Traefik&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Настроены &lt;strong&gt;Traefik labels&lt;/strong&gt; для автоматической маршрутизации трафика к сервисам Plane&lt;/li&gt;
&lt;li&gt;Автоматическое получение и обновление &lt;strong&gt;SSL/TLS&lt;/strong&gt; сертификатов через Traefik&lt;/li&gt;
&lt;li&gt;Корректная проброска заголовков (X-Forwarded-For, Host) для правильной работы приложения за reverse proxy&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="4-резервное-копирование"&gt;4. Резервное копирование&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt; — регулярные бэкапы средствами Coolify с выгрузкой на &lt;strong&gt;AWS S3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MinIO&lt;/strong&gt; — регулярная синхронизация объектного хранилища на отдельный бакет &lt;strong&gt;AWS S3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Все бэкапы выполняются автоматически по расписанию без вмешательства&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="технологии"&gt;Технологии&lt;/h4&gt;
&lt;div class="row"&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/docker-original.svg" alt="Docker"&gt;&lt;div&gt;Docker&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/postgresql.svg" alt="PostgreSQL"&gt;&lt;div&gt;PostgreSQL&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/aws.svg" alt="AWS S3"&gt;&lt;div&gt;AWS S3&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/linux-original.svg" alt="Linux"&gt;&lt;div&gt;Linux&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/bash.svg" alt="Bash"&gt;&lt;div&gt;Bash&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="результаты"&gt;Результаты&lt;/h4&gt;
&lt;p&gt;✅ &lt;strong&gt;Проект-менеджмент:&lt;/strong&gt; мощный self-hosted инструмент управления проектами, не уступающий коммерческим аналогам&lt;br&gt;
✅ &lt;strong&gt;Интеграция:&lt;/strong&gt; Plane надёжно интегрирован в Coolify и работает за Traefik без конфликтов&lt;br&gt;
✅ &lt;strong&gt;Независимость БД:&lt;/strong&gt; PostgreSQL как отдельный сервис Coolify — удобное управление и архивирование&lt;br&gt;
✅ &lt;strong&gt;Бэкапы:&lt;/strong&gt; все данные (БД + MinIO) регулярно копируются на AWS S3 автоматически&lt;br&gt;
✅ &lt;strong&gt;Контроль данных:&lt;/strong&gt; все данные проектов хранятся на собственном сервере клиента&lt;/p&gt;</description></item><item><title>Self-Hosted удалённый доступ с RustDesk</title><link>https://ruadmin.root.sx/ru/posts/self-hosted/rustdesk-remote-desktop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruadmin.root.sx/ru/posts/self-hosted/rustdesk-remote-desktop/</guid><description>&lt;h2 id="self-hosted-удалённый-доступ-с-rustdesk"&gt;Self-Hosted удалённый доступ с RustDesk&lt;/h2&gt;
&lt;hr&gt;
&lt;h4 id="клиент"&gt;Клиент&lt;/h4&gt;
&lt;p&gt;Компания, оказывающая поддержку и сопровождение платформы 1С&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="задача"&gt;Задача&lt;/h4&gt;
&lt;p&gt;Клиенту требовалось безопасное self-hosted решение для удалённого доступа, чтобы инженеры поддержки могли подключаться к рабочим станциям и серверам клиентов. Необходимы были: полный контроль над данными, отсутствие зависимости от сторонних облачных сервисов, надёжная работа в корпоративных сетях.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="решение"&gt;Решение&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Развёрнут &lt;strong&gt;RustDesk OSS&lt;/strong&gt; (open-source) сервер через Docker Compose&lt;/li&gt;
&lt;li&gt;Настроены компоненты &lt;strong&gt;hbbs&lt;/strong&gt; (ID/relay-сервер) и &lt;strong&gt;hbbr&lt;/strong&gt; (relay-сервер)&lt;/li&gt;
&lt;li&gt;Настроены правила файрвола и сетевой доступ для безопасных подключений&lt;/li&gt;
&lt;li&gt;Подготовлены конфигурационные файлы клиента для быстрого развёртывания у команды поддержки&lt;/li&gt;
&lt;li&gt;Описана процедура обслуживания и стратегия бэкапов&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="технологии"&gt;Технологии&lt;/h4&gt;
&lt;div class="row"&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/rustdesk.svg" alt="RustDesk"&gt;&lt;div&gt;RustDesk&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/docker-original.svg" alt="Docker"&gt;&lt;div&gt;Docker&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/linux-original.svg" alt="Linux"&gt;&lt;div&gt;Linux&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/bash.svg" alt="Bash"&gt;&lt;div&gt;Bash&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="результаты"&gt;Результаты&lt;/h4&gt;
&lt;p&gt;✅ &lt;strong&gt;Полный суверенитет данных&lt;/strong&gt; — все метаданные соединений и релейный трафик остаются на инфраструктуре клиента&lt;br&gt;
✅ &lt;strong&gt;Нет лицензионных затрат&lt;/strong&gt; — open-source RustDesk исключает плату за рабочие места&lt;br&gt;
✅ &lt;strong&gt;Надёжное подключение&lt;/strong&gt; — инженеры получают доступ к машинам клиентов из любой точки&lt;br&gt;
✅ &lt;strong&gt;Простой roll-out клиента&lt;/strong&gt; — готовые конфиги для быстрого онбординга команды&lt;br&gt;
✅ &lt;strong&gt;Дружелюбно к корпоративным сетям&lt;/strong&gt; — работает через NAT/файрволы благодаря relay-серверам&lt;/p&gt;</description></item><item><title>VPN для доступа к зарубежным сервисам</title><link>https://ruadmin.root.sx/ru/posts/network-security/vpn-services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruadmin.root.sx/ru/posts/network-security/vpn-services/</guid><description>&lt;h2 id="vpn-для-доступа-к-зарубежным-сервисам"&gt;VPN для доступа к зарубежным сервисам&lt;/h2&gt;
&lt;hr&gt;
&lt;h4 id="задача"&gt;Задача&lt;/h4&gt;
&lt;p&gt;После блокировки зарубежных IT-сервисов команда разработчиков потеряла доступ к критически важным инструментам: OpenAI API, GitHub Copilot, различным CDN и документации. Требовалось быстро развернуть надежное VPN-решение с высокой скоростью и стабильностью.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="решение"&gt;Решение&lt;/h4&gt;
&lt;h6 id="1-выбор-технологии"&gt;1. Выбор технологии&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Анализ протоколов: OpenVPN, WireGuard, Outline&lt;/li&gt;
&lt;li&gt;Выбор WireGuard за скорость и простоту&lt;/li&gt;
&lt;li&gt;Docker для изоляции и портативности&lt;/li&gt;
&lt;li&gt;Ansible для автоматизации развертывания&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-инфраструктура"&gt;2. Инфраструктура&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;VPS в нейтральной юрисдикции (Нидерланды)&lt;/li&gt;
&lt;li&gt;Docker Compose для оркестрации&lt;/li&gt;
&lt;li&gt;WireGuard в контейнере&lt;/li&gt;
&lt;li&gt;Nginx для веб-панели управления&lt;/li&gt;
&lt;li&gt;Prometheus + Grafana для мониторинга&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-автоматизация"&gt;3. Автоматизация&lt;/h6&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Ansible playbook для развертывания&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Deploy WireGuard VPN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hosts&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;vpn_servers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;roles&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;wireguard&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;monitoring&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;backup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h6 id="4-безопасность"&gt;4. Безопасность&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Автоматическая ротация ключей&lt;/li&gt;
&lt;li&gt;Firewall правила (UFW)&lt;/li&gt;
&lt;li&gt;Fail2ban для защиты от брутфорса&lt;/li&gt;
&lt;li&gt;Шифрование трафика ChaCha20-Poly1305&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="5-мониторинг"&gt;5. Мониторинг&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Метрики пропускной способности&lt;/li&gt;
&lt;li&gt;Алерты при недоступности&lt;/li&gt;
&lt;li&gt;Логирование подключений&lt;/li&gt;
&lt;li&gt;Автоматический перезапуск при сбоях&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="технологии"&gt;Технологии&lt;/h4&gt;
&lt;div class="row"&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/wireguard.svg" alt="WireGuard"&gt;&lt;div&gt;WireGuard&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/docker-original.svg" alt="Docker"&gt;&lt;div&gt;Docker&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/ansible-original.svg" alt="Ansible"&gt;&lt;div&gt;Ansible&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/prometheus-original.svg" alt="Prometheus"&gt;&lt;div&gt;Prometheus&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="результаты"&gt;Результаты&lt;/h4&gt;
&lt;p&gt;✅ Uptime: 99.8% за 6+ месяцев работы&lt;br&gt;
✅ Скорость: стабильные 100+ Мбит/с&lt;br&gt;
✅ Доступ: OpenAI API, ChatGPT, GitHub Copilot, npm registry&lt;br&gt;
✅ Развертывание: 20 минут на новый сервер&lt;br&gt;
✅ Пользователи: 15+ разработчиков без проблем&lt;/p&gt;</description></item><item><title>Корпоративное облачное хранилище Nextcloud</title><link>https://ruadmin.root.sx/ru/posts/self-hosted/nextcloud/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruadmin.root.sx/ru/posts/self-hosted/nextcloud/</guid><description>&lt;h2 id="self-hosted-корпоративное-облако"&gt;Self-Hosted корпоративное облако&lt;/h2&gt;
&lt;hr&gt;
&lt;h4 id="клиент"&gt;Клиент&lt;/h4&gt;
&lt;p&gt;Средний бизнес с требованиями к конфиденциальности и хранению данных внутри компании&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="задача"&gt;Задача&lt;/h4&gt;
&lt;p&gt;Компания использовала сторонние облачные сервисы для хранения рабочих файлов, что создавало риски утечки данных и зависимость от внешних провайдеров. Требовалось self-hosted решение с возможностью редактирования офисных документов прямо в браузере, корзиной удалённых файлов, историей правок и дополнительными инструментами для совместной работы: календарём, заметками и почтой.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="решение"&gt;Решение&lt;/h4&gt;
&lt;h6 id="1-развёртывание-nextcloud-aio"&gt;1. Развёртывание Nextcloud AIO&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nextcloud All-in-One&lt;/strong&gt; — официальный Docker-образ с полным стеком из коробки&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt; для хранения данных приложения&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redis&lt;/strong&gt; для кэширования и очередей фоновых задач&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nginx&lt;/strong&gt; как reverse proxy с автоматическим SSL/TLS&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-редактирование-документов-в-браузере"&gt;2. Редактирование документов в браузере&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nextcloud Office&lt;/strong&gt; (Collabora Online) — встроенный офисный редактор&lt;/li&gt;
&lt;li&gt;Поддержка форматов .docx, .xlsx, .pptx и ODF&lt;/li&gt;
&lt;li&gt;Совместное редактирование в реальном времени&lt;/li&gt;
&lt;li&gt;Без необходимости устанавливать локальное ПО&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-управление-файлами"&gt;3. Управление файлами&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Корзина удалённых файлов с настраиваемым сроком хранения&lt;/li&gt;
&lt;li&gt;История версий файлов — возможность откатиться к любой правке&lt;/li&gt;
&lt;li&gt;Гранулированный контроль доступа: папки, ссылки, пароли&lt;/li&gt;
&lt;li&gt;Мобильные и десктопные клиенты для синхронизации&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="4-дополнительные-инструменты"&gt;4. Дополнительные инструменты&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Календарь&lt;/strong&gt; (CalDAV) — корпоративное расписание и события&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Заметки&lt;/strong&gt; — личные и командные заметки с поддержкой Markdown&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Почта&lt;/strong&gt; — встроенный веб-клиент для корпоративной почты (IMAP/SMTP)&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="5-резервное-копирование"&gt;5. Резервное копирование&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Borg Backup&lt;/strong&gt; — встроенный в Nextcloud AIO инкрементальный бэкап&lt;/li&gt;
&lt;li&gt;Дедупликация и сжатие данных&lt;/li&gt;
&lt;li&gt;Автоматический запуск по расписанию&lt;/li&gt;
&lt;li&gt;Хранение бэкапов на удалённом хранилище (S3-compatible / SFTP)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="технологии"&gt;Технологии&lt;/h4&gt;
&lt;div class="row"&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/nextcloud.svg" alt="Nextcloud"&gt;&lt;div&gt;Nextcloud&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/docker-original.svg" alt="Docker"&gt;&lt;div&gt;Docker&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/postgresql.svg" alt="PostgreSQL"&gt;&lt;div&gt;PostgreSQL&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/nginx.svg" alt="Nginx"&gt;&lt;div&gt;Nginx&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/linux-original.svg" alt="Linux"&gt;&lt;div&gt;Linux&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="результаты"&gt;Результаты&lt;/h4&gt;
&lt;p&gt;✅ &lt;strong&gt;Независимость:&lt;/strong&gt; данные хранятся на серверах компании, без сторонних провайдеров&lt;br&gt;
✅ &lt;strong&gt;Редактирование:&lt;/strong&gt; офисные документы открываются и редактируются прямо в браузере&lt;br&gt;
✅ &lt;strong&gt;Безопасность:&lt;/strong&gt; история версий и корзина защищают от случайной потери данных&lt;br&gt;
✅ &lt;strong&gt;Инструменты:&lt;/strong&gt; единая платформа для файлов, календаря, заметок и почты&lt;br&gt;
✅ &lt;strong&gt;Бэкапы:&lt;/strong&gt; автоматическое инкрементальное резервное копирование через Borg Backup&lt;/p&gt;</description></item><item><title>Корпоративный мессенджер Matrix</title><link>https://ruadmin.root.sx/ru/posts/self-hosted/matrix-messenger/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruadmin.root.sx/ru/posts/self-hosted/matrix-messenger/</guid><description>&lt;h2 id="альтернатива-telegram-для-корпоративных-коммуникаций"&gt;Альтернатива Telegram для корпоративных коммуникаций&lt;/h2&gt;
&lt;hr&gt;
&lt;h4 id="клиент"&gt;Клиент&lt;/h4&gt;
&lt;p&gt;Средний бизнес с требованиями к безопасности данных&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="задача"&gt;Задача&lt;/h4&gt;
&lt;p&gt;Компания нуждалась в собственном защищенном мессенджере из-за требований безопасности и необходимости полного контроля над корпоративными коммуникациями. Требовалось решение с шифрованием, видеозвонками и интеграцией с корпоративной инфраструктурой.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="решение"&gt;Решение&lt;/h4&gt;
&lt;h6 id="1-серверная-часть"&gt;1. Серверная часть&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Matrix Synapse&lt;/strong&gt; как основной сервер&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PostgreSQL 16&lt;/strong&gt; для хранения данных&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caddy&lt;/strong&gt; как reverse proxy с автоматическим SSL&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker Compose&lt;/strong&gt; для оркестрации всех сервисов&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-клиентские-приложения"&gt;2. Клиентские приложения&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Element Web&lt;/strong&gt; для браузера&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Element Desktop&lt;/strong&gt; для Windows/macOS/Linux&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Element Mobile&lt;/strong&gt; для iOS/Android&lt;/li&gt;
&lt;li&gt;Единый интерфейс на всех платформах&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-видеозвонки"&gt;3. Видеозвонки&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Coturn&lt;/strong&gt; (TURN/STUN сервер) для NAT traversal&lt;/li&gt;
&lt;li&gt;Поддержка групповых видеозвонков&lt;/li&gt;
&lt;li&gt;UDP порты 49160-49200 для медиа-трафика&lt;/li&gt;
&lt;li&gt;Автоматическая конфигурация через переменные окружения&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="4-администрирование"&gt;4. Администрирование&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Synapse Admin&lt;/strong&gt; - веб-интерфейс управления&lt;/li&gt;
&lt;li&gt;Управление пользователями и комнатами&lt;/li&gt;
&lt;li&gt;Статистика и мониторинг&lt;/li&gt;
&lt;li&gt;Доступ через отдельный порт 8888&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="5-безопасность"&gt;5. Безопасность&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;End-to-end шифрование сообщений&lt;/li&gt;
&lt;li&gt;Автоматические SSL/TLS сертификаты через Caddy&lt;/li&gt;
&lt;li&gt;Отключена публичная регистрация&lt;/li&gt;
&lt;li&gt;Федерация с другими Matrix серверами&lt;/li&gt;
&lt;li&gt;Healthcheck для всех сервисов&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="6-автоматизация"&gt;6. Автоматизация&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Bash скрипт для полной инициализации&lt;/li&gt;
&lt;li&gt;Автоматическая генерация конфигурации Synapse&lt;/li&gt;
&lt;li&gt;Автоматическое создание admin пользователя через expect&lt;/li&gt;
&lt;li&gt;Docker Compose с зависимостями и healthchecks&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="технологии"&gt;Технологии&lt;/h4&gt;
&lt;div class="row"&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/docker-original.svg" alt="Docker"&gt;&lt;div&gt;Docker&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/postgresql.svg" alt="PostgreSQL"&gt;&lt;div&gt;PostgreSQL&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/caddy.svg" alt="Caddy"&gt;&lt;div&gt;Caddy&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/bash.svg" alt="Bash"&gt;&lt;div&gt;Bash&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/linux-original.svg" alt="Linux"&gt;&lt;div&gt;Linux&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/element.svg" alt="Element"&gt;&lt;div&gt;Element + Matrix + Synapse&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="результаты"&gt;Результаты&lt;/h4&gt;
&lt;p&gt;✅ &lt;strong&gt;Независимость:&lt;/strong&gt; полный контроль над данными и коммуникациями&lt;br&gt;
✅ &lt;strong&gt;Масштаб:&lt;/strong&gt; 100+ пользователей одновременно&lt;br&gt;
✅ &lt;strong&gt;Функциональность:&lt;/strong&gt; текст, голос, видео, файлы до 1.5GB, шифрование&lt;br&gt;
✅ &lt;strong&gt;Скорость:&lt;/strong&gt; развертывание за 5 минут одним скриптом&lt;br&gt;
✅ &lt;strong&gt;Надежность:&lt;/strong&gt; автоматические SSL сертификаты, healthchecks, auto-restart&lt;/p&gt;</description></item><item><title>Миграция и DevOps для маркетплейса на CS-Cart</title><link>https://ruadmin.root.sx/ru/posts/clouds/cscart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruadmin.root.sx/ru/posts/clouds/cscart/</guid><description>&lt;h2 id="инфраструктура-и-развёртывание-мультивендорного-маркетплейса-на-cs-cart"&gt;Инфраструктура и развёртывание мультивендорного маркетплейса на CS-Cart&lt;/h2&gt;
&lt;hr&gt;
&lt;h4 id="клиент"&gt;Клиент&lt;/h4&gt;
&lt;p&gt;Мультивендорный маркетплейс&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="задача"&gt;Задача&lt;/h4&gt;
&lt;p&gt;Реанимировать старый проект маркетплейса, перенести его с обычного хостинга в современное облако. Обеспечить отказоустойчивость, развернуть CI/CD инфраструктуру, настроить тестовые стенды, интегрировать внешние сервисы доставки и автоматизировать рутину с помощью нейросетей. По завершению проекта — подготовить on-premise сервер (NAS) на стороне клиента для &amp;ldquo;холодного&amp;rdquo; хранения репозиториев.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="решение"&gt;Решение&lt;/h4&gt;
&lt;h6 id="1-инфраструктура-в-yandex-cloud-terraform"&gt;1. Инфраструктура в Yandex Cloud (Terraform)&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Написана IaC-конфигурация (Terraform) для создания Yandex Cloud инфраструктуры (виртуальные сети, ВМ).&lt;/li&gt;
&lt;li&gt;Настроены отдельные виртуальные машины для production и development контуров.&lt;/li&gt;
&lt;li&gt;Подключены и размечены дополнительные диски, развернута система автоматического бэкапирования баз данных и файлов в Yandex Object Storage (S3).&lt;/li&gt;
&lt;li&gt;Использован Yandex Cloud Postbox для гарантированной доставки электронной почты сервиса (настроен домен, SPF, DKIM).&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-контейнеризация-и-микросервисы"&gt;2. Контейнеризация и микросервисы&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Маркетплейс перенесен с классического хостинга в Docker среду на VPS.&lt;/li&gt;
&lt;li&gt;Написан кастомный &lt;code&gt;Dockerfile&lt;/code&gt; для CS-Cart, а также &lt;code&gt;docker-compose&lt;/code&gt; с микросервисной архитектурой стека веб-сервера.&lt;/li&gt;
&lt;li&gt;Организованы полноценные dev и prod окружения.&lt;/li&gt;
&lt;li&gt;Настроены пайплайны развертывания через локальный Git-сервер (Forgejo).&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-платформа-маркетплейса-cs-cart"&gt;3. Платформа маркетплейса (CS-Cart)&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Обновление ядра CS-Cart, оптимизация и очистка БД от старых неиспользуемых плагинов.&lt;/li&gt;
&lt;li&gt;Развернута чистая инсталляция платформы с новой коммерческой темой.&lt;/li&gt;
&lt;li&gt;Настройка логики многовендорности: разделение прав, кабинеты продавцов.&lt;/li&gt;
&lt;li&gt;Интеграция и конфигурация модулей: динамическая подгрузка товаров, ИИ-возможности, умный живой поиск, модуль SEO.&lt;/li&gt;
&lt;li&gt;Интеграция систем доставки (СДЭК) и оплаты. Запуск автоматических обменов с системами учета 1С.&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="4-автоматизация-и-n8n"&gt;4. Автоматизация и n8n&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Развернута система оркестрации процессов n8n.&lt;/li&gt;
&lt;li&gt;Подключено API ChatGPT для автоматизации рутинных задач, вроде генерации и нормализации контента.&lt;/li&gt;
&lt;li&gt;Настроены воркеры и триггеры для бизнес-логики магазина.&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="5-безопасность-и-cloudflare"&gt;5. Безопасность и Cloudflare&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Настроен Cloudflare Proxy-DNS.&lt;/li&gt;
&lt;li&gt;Внедрен Cloudflare Turnstile (капча) для борьбы со спамом при реєстрации и заказах.&lt;/li&gt;
&lt;li&gt;Защита от ботов: закрытие прямых регистраций, настройка strict-кэширования, обрезка мусорного трафика.&lt;/li&gt;
&lt;li&gt;Установлены SSL сертификаты и настроены правильные редиректы.&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="6-on-premise-инфраструктура-и-документация"&gt;6. On-Premise инфраструктура и документация&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Настроен выделенный поддомен с Wiki-движком для технической и пользовательской документации.&lt;/li&gt;
&lt;li&gt;Реализована локальная инфраструктура на базе NAS Synology в офисе заказчика: установлен Docker, S3-бакеты, резервное копирование.&lt;/li&gt;
&lt;li&gt;Развернут локальный Git-сервер (Forgejo) с CI/CD runner для версионирования кода и &amp;ldquo;консервации&amp;rdquo; накопленных наработок.&lt;/li&gt;
&lt;li&gt;Стянут полный бэкап всех Terraform-стейтов, паролей, кодовых баз и конфигураций.&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="7-консервация-и-репозитории"&gt;7. Консервация и репозитории&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Перенос боевого сайта на резервный хостинг под консервацию, отключение синхронизаций&lt;/li&gt;
&lt;li&gt;Закупка и настройка NAS Synology в офис: внешний доступ, Docker, S3-бакеты&lt;/li&gt;
&lt;li&gt;Развёрнут Forgejo с раннером под доменом &lt;code&gt;git.*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Репозитории: исходники сайта, тема и аддоны, документация, n8n-воркфлоу, Telegram-боты, БД-бэкапы, terraform-yandex, terraform-cloudflare, хранилище паролей&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="технологии"&gt;Технологии&lt;/h4&gt;
&lt;div class="row"&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/docker-original.svg" alt="Docker"&gt;&lt;div&gt;Docker&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/terraform-original.svg" alt="Terraform"&gt;&lt;div&gt;Terraform&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/yandex.svg" alt="Yandex Cloud"&gt;&lt;div&gt;Yandex Cloud&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/nginx.svg" alt="Nginx"&gt;&lt;div&gt;Nginx&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/forgejo-original.svg" alt="Forgejo"&gt;&lt;div&gt;Forgejo&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/linux-original.svg" alt="Linux"&gt;&lt;div&gt;Linux&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="результаты"&gt;Результаты&lt;/h4&gt;
&lt;p&gt;✅ &lt;strong&gt;Инфраструктура:&lt;/strong&gt; шаред-хостинг → VPS в Yandex Cloud через Terraform, всё в Docker&lt;br&gt;
✅ &lt;strong&gt;Платформа:&lt;/strong&gt; чистая установка CS-Cart Multi-Vendor вместо правленого ядра&lt;br&gt;
✅ &lt;strong&gt;Тема и модули:&lt;/strong&gt; покупная тема, живой поиск, UX/UI, SMS-авторизация, AJAX-каталог&lt;br&gt;
✅ &lt;strong&gt;Интеграции:&lt;/strong&gt; СДЭК, Боксбери, Почта России, СБП, обмен с 1С по двум контурам&lt;br&gt;
✅ &lt;strong&gt;Документация:&lt;/strong&gt; вики на поддомене &lt;code&gt;docs.*&lt;/code&gt; с наполненной структурой&lt;br&gt;
✅ &lt;strong&gt;Автоматизация:&lt;/strong&gt; n8n + ChatGPT API для рутинных задач&lt;br&gt;
✅ &lt;strong&gt;Бэкапы:&lt;/strong&gt; Yandex Object Storage + дубль на офисный NAS Synology&lt;br&gt;
✅ &lt;strong&gt;Git:&lt;/strong&gt; self-hosted Forgejo на NAS с раннером и репозиториями всего проекта&lt;br&gt;
✅ &lt;strong&gt;Консервация:&lt;/strong&gt; проект полностью передан клиенту на локальный on-premise NAS Synology, запущен собственный Git-сервер (Forgejo).&lt;/p&gt;</description></item><item><title>Мониторинг Prometheus + Grafana</title><link>https://ruadmin.root.sx/ru/posts/sre-observability/monitoring-prometheus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruadmin.root.sx/ru/posts/sre-observability/monitoring-prometheus/</guid><description>&lt;h2 id="observability-стек-для-микросервисной-архитектуры"&gt;Observability стек для микросервисной архитектуры&lt;/h2&gt;
&lt;hr&gt;
&lt;h4 id="клиент"&gt;Клиент&lt;/h4&gt;
&lt;p&gt;Начинающий стартап&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="задача"&gt;Задача&lt;/h4&gt;
&lt;p&gt;Компания перешла на микросервисную архитектуру (15+ сервисов), но не имела централизованного мониторинга. Проблемы обнаруживались только по жалобам пользователей через 30+ минут. Требовалось внедрить полноценный observability стек для быстрого выявления и диагностики проблем.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="решение"&gt;Решение&lt;/h4&gt;
&lt;h6 id="1-архитектура-мониторинга"&gt;1. Архитектура мониторинга&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prometheus&lt;/strong&gt; для сбора метрик&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grafana&lt;/strong&gt; для визуализации&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loki&lt;/strong&gt; для централизованных логов&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jaeger&lt;/strong&gt; для distributed tracing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alertmanager&lt;/strong&gt; для уведомлений&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-сбор-метрик"&gt;2. Сбор метрик&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Автоматическое обнаружение сервисов в Kubernetes&lt;/li&gt;
&lt;li&gt;Метрики приложений (custom metrics)&lt;/li&gt;
&lt;li&gt;Системные метрики (node-exporter)&lt;/li&gt;
&lt;li&gt;Метрики БД (postgres-exporter, redis-exporter)&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-визуализация-в-grafana"&gt;3. Визуализация в Grafana&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Дашборды для каждого микросервиса&lt;/li&gt;
&lt;li&gt;Общий дашборд инфраструктуры&lt;/li&gt;
&lt;li&gt;SLA/SLO метрики&lt;/li&gt;
&lt;li&gt;Business метрики (RPS, конверсия)&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="4-централизованные-логи-loki"&gt;4. Централизованные логи (Loki)&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Агрегация логов всех сервисов&lt;/li&gt;
&lt;li&gt;Поиск по логам через Grafana&lt;/li&gt;
&lt;li&gt;Корреляция логов с метриками&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="5-distributed-tracing-jaeger"&gt;5. Distributed Tracing (Jaeger)&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Трейсинг HTTP запросов между сервисами&lt;/li&gt;
&lt;li&gt;Визуализация цепочек вызовов&lt;/li&gt;
&lt;li&gt;Поиск узких мест (bottlenecks)&lt;/li&gt;
&lt;li&gt;Анализ latency по сервисам&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="6-алертинг"&gt;6. Алертинг&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Алерты в Telegram&lt;/li&gt;
&lt;li&gt;Эскалация критичных проблем&lt;/li&gt;
&lt;li&gt;On-call ротация&lt;/li&gt;
&lt;li&gt;Автоматическое создание инцидентов&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="технологии"&gt;Технологии&lt;/h4&gt;
&lt;div class="row"&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/prometheus-original.svg" alt="Prometheus"&gt;&lt;div&gt;Prometheus&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/grafana-original.svg" alt="Grafana"&gt;&lt;div&gt;Grafana&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/kubernetes-plain.svg" alt="Kubernetes"&gt;&lt;div&gt;Kubernetes&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/docker-original.svg" alt="Docker"&gt;&lt;div&gt;Docker&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/helm-original.svg" alt="Helm"&gt;&lt;div&gt;Helm&lt;/div&gt;&lt;/div&gt;
&lt;div class="col-4 col-lg-2 pt-2" style="text-align: center;"&gt;&lt;img src="https://ruadmin.root.sx/icons/linux-original.svg" alt="Linux"&gt;&lt;div&gt;Linux&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="результаты"&gt;Результаты&lt;/h4&gt;
&lt;p&gt;✅ &lt;strong&gt;MTTD:&lt;/strong&gt; обнаружение проблем с 30 минут до 1 минуты&lt;br&gt;
✅ &lt;strong&gt;MTTR:&lt;/strong&gt; время восстановления сократилось на 60%&lt;br&gt;
✅ &lt;strong&gt;Алерты:&lt;/strong&gt; автоматические уведомления в Telegram&lt;br&gt;
✅ &lt;strong&gt;Visibility:&lt;/strong&gt; полная прозрачность работы всех сервисов&lt;br&gt;
✅ &lt;strong&gt;Capacity planning:&lt;/strong&gt; данные для планирования ресурсов&lt;/p&gt;</description></item></channel></rss>