<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Все кейсы | Портфолио on DevOps-инженер &amp; CloudAdmin</title><link>https://ru-admin.github.io/ru/posts/</link><description>Recent content in Все кейсы | Портфолио on DevOps-инженер &amp; CloudAdmin</description><generator>Hugo -- gohugo.io</generator><language>ru-RU</language><atom:link href="https://ru-admin.github.io/ru/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>CI/CD и инфраструктура для Dating-сервиса</title><link>https://ru-admin.github.io/ru/posts/cicd/ci-cd-dating/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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 с GitLab + Kubernetes: деплой за 10 минут</title><link>https://ru-admin.github.io/ru/posts/cicd/ci-cd-gitlab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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>Project Management: реанимация и запуск мультивендорного маркетплейса</title><link>https://ru-admin.github.io/ru/posts/pm/marketplace/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ru-admin.github.io/ru/posts/pm/marketplace/</guid><description>&lt;h2 id="управление-разработкой-мультивендорного-e-commerce-проекта"&gt;Управление разработкой мультивендорного e-commerce проекта&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;Маркетплейс находился в глубокой заморозке около 2 лет. До заморозки в проекте пытались реализовать собственный кастомный шаблон, который остался недописанным. Моя первоначальная задача, как Tech Lead / Project Manager, заключалась в реанимации проекта, найме и координации распределенной команды (1С-разработчики, программисты, SEO-подрядчики, маркетологи), а также доведении продукта до рабочего состояния: от витрины до кассы.&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;/li&gt;
&lt;li&gt;Выявлено, что шаблон устарел, вызывает конфликты с ядром CS-Cart (включая модификации самого ядра предыдущей командой) и не поддерживает необходимые плагины.&lt;/li&gt;
&lt;li&gt;Принято и согласовано с бизнесом волевое решение: отказаться от багажа legacy-кода, установить чистую версию CS-Cart и приобрести современную готовую тему. Это сэкономило значительную часть бюджета на разработку.&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-формирование-команды-и-управление-подрядчиками"&gt;2. Формирование команды и управление подрядчиками&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Наняты недостающие web-программисты, проведено онбординг-тестирование, распределены доступы к инфраструктуре (GitLab, хостинг, серверы).&lt;/li&gt;
&lt;li&gt;Выстроена работа со сторонними подрядчиками: SEO-агентством, маркетологами, бизнес-аналитиками.&lt;/li&gt;
&lt;li&gt;Внедрен процесс постановок задач (Issue в системах трекинга), code review, приемки работ и тестирования на выделенном dev-стенде перед сливом в production.&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-управление-фичами-и-продуктом-product-management"&gt;3. Управление фичами и продуктом (Product Management)&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Токенизация и безопасность:&lt;/strong&gt; внедрена обязательная регистрация по SMS для исключения фейковых аккаунтов. Чтобы минимизировать расходы на SMS-шлюз из-за ботов, инициирована интеграция спам-защиты (Cloudflare Turnstile).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UX/UI Маркетплейса:&lt;/strong&gt; инициирована разработка плагина динамической подгрузки товаров (Ajax) на страницах каталога, поскольку стандартный функционал шаблона этого не поддерживал. Контролировал полный цикл: составление ТЗ → разработка → дебаг → деплой.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Интеграция с 1С и логистика:&lt;/strong&gt; работа в связке с 1С-программистом. Инициировано создание тестовой базы 1С поставщика (ИП) для реалистичных тестов отгрузки и работы вендоров на маркетплейсе, не смешивая потоки с основной бухгалтерской базой (ООО). Контроль настройки логистического обмена со СДЭК и Почтой РФ.&lt;/li&gt;
&lt;li&gt;Решение по миграции с шаред-хостинга в облако с контейнеризацией — снижение TCO и упрощение деплоя&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="4-документация-и-регламенты"&gt;4. Документация и регламенты&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Для агрегации знаний проекта создан выделенный поддомен с легковесным Wiki-движком. Утвердил регламент документирования доработок, инфраструктуры и бизнес-процессов магазина.&lt;/li&gt;
&lt;li&gt;Разработаны подробные регламенты и инструкции для маркетологов и контент-менеджеров.&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="5-тз-и-контроль-качества"&gt;5. ТЗ и контроль качества&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Подготовка ТЗ по ключевым блокам: SMS-регистрация, AJAX-каталог, чекаут, обмен 1С, UX/UI-модуль, SEO&lt;/li&gt;
&lt;li&gt;Приёмка работ по этапам, ревью кода, тестирование на dev-стенде, заливка в репозиторий&lt;/li&gt;
&lt;li&gt;Тестовые сквозные сценарии: регистрация → заказ → оплата → доставка → статус в 1С&lt;/li&gt;
&lt;li&gt;Множественные циклы «бэкап — обновление — дебаг — восстановление» при апгрейдах&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="6-работа-с-поставщиками-и-сервисами"&gt;6. Работа с поставщиками и сервисами&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Переписка и закупки: коммерческая тема, модули поиска, SEO, UX/UI, ИИ-описаний, обмен 1С&lt;/li&gt;
&lt;li&gt;Счета, оплаты, документы, лицензии — сопровождение всего цикла&lt;/li&gt;
&lt;li&gt;Работа с тех. поддержкой хостинга, CMS, темы, СДЭК, sms.ru, Cloudflare, Yandex Cloud&lt;/li&gt;
&lt;li&gt;Закупка офисного оборудования: NAS Synology, перенос между офисами, первоначальная настройка&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="7-маркетинг-и-seo"&gt;7. Маркетинг и SEO&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Координация SEO-агентства: ТЗ, регистрация Яндекс.Метрики, передача доступов, контроль рекомендаций&lt;/li&gt;
&lt;li&gt;Запуск рекламной кампании в Яндекс.Директе: брифы, видеовстречи, передача доступов маркетологам&lt;/li&gt;
&lt;li&gt;Контентный план: блог через API, генерация описаний и картинок через n8n + ChatGPT API&lt;/li&gt;
&lt;li&gt;Согласование комплексного плана работ и коммерческого предложения от маркетологов&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="8-коммуникации"&gt;8. Коммуникации&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Регулярные оперативки в офисе с владельцем и 1С-специалистом&lt;/li&gt;
&lt;li&gt;Онлайн-конференции с подрядчиками, SEO, маркетологами, поставщиками модулей&lt;/li&gt;
&lt;li&gt;Кросс-функциональные ТЗ: бухгалтерия ↔ 1С ↔ сайт ↔ доставка&lt;/li&gt;
&lt;li&gt;Документирование решений на корпоративной вики&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="9-завершающий-этап-и-консервация"&gt;9. Завершающий этап и консервация&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Доведение площадки до боевого состояния: новая тема, доставка, продажи, касса, обмен 1С&lt;/li&gt;
&lt;li&gt;По решению владельца — повторная заморозка проекта&lt;/li&gt;
&lt;li&gt;Закупка офисного NAS, развёртывание self-hosted git (Forgejo), миграция всех артефактов&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://ru-admin.github.io/icons/computer-svgrepo-com.svg" alt="Tech Lead"&gt;&lt;div&gt;Tech Lead&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://ru-admin.github.io/icons/forgejo-original.svg" alt="Trackers"&gt;&lt;div&gt;Трекеры&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://ru-admin.github.io/icons/gitlab-original.svg" alt="GitLab"&gt;&lt;div&gt;Code Review&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://ru-admin.github.io/icons/grafana-original.svg" alt="Metrics"&gt;&lt;div&gt;Метрики&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://ru-admin.github.io/icons/linux-original.svg" alt="Infra"&gt;&lt;div&gt;Инфраструктура&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://ru-admin.github.io/icons/sun-svgrepo-com.svg" alt="People"&gt;&lt;div&gt;Команда&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; собран рабочий контур из 6+ подрядчиков по разным зонам ответственности&lt;br&gt;
✅ &lt;strong&gt;Платформа:&lt;/strong&gt; уход от правленого ядра к чистой CMS + покупная тема, снижение стоимости поддержки&lt;br&gt;
✅ &lt;strong&gt;Запуск:&lt;/strong&gt; боевой маркетплейс с продажами, кассой, доставкой, обменом 1С&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;/p&gt;</description></item><item><title>Self-Hosted проект-менеджмент Plane.so</title><link>https://ru-admin.github.io/ru/posts/self-hosted/plane-so/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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>VPN для доступа к зарубежным сервисам</title><link>https://ru-admin.github.io/ru/posts/network-security/vpn-services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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>Интернет-радио на AzuraCast</title><link>https://ru-admin.github.io/ru/posts/self-hosted/azuracast/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ru-admin.github.io/ru/posts/self-hosted/azuracast/</guid><description>&lt;h2 id="восстановление-и-развёртывание-интернет-радио-с-нуля"&gt;Восстановление и развёртывание интернет-радио с нуля&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;После потери арендованного VPS (вместе с действующей конфигурацией, сайтом и историей вещания) потребовалось полностью восстановить вещание двух интернет-радиостанций. На входе — только набор mp3-файлов. Требовалось развернуть новый сервер, настроить платформу автоматизированного вещания, воссоздать сайт-визитку с встроенным плеером и обеспечить стабильную работу 24/7.&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 и установка &lt;strong&gt;Hestia Control Panel&lt;/strong&gt; как базового слоя управления сервером&lt;/li&gt;
&lt;li&gt;Hestia обеспечивала: базовую защиту (fail2ban, firewall), автоматическое получение и обновление &lt;strong&gt;Let&amp;rsquo;s Encrypt&lt;/strong&gt; сертификатов, управление доменами и резервное копирование веб-сайта&lt;/li&gt;
&lt;li&gt;Создан отдельный домен в Hestia для AzuraCast — для получения SSL-сертификата; домен настроен как &lt;strong&gt;reverse proxy&lt;/strong&gt; на порт AzuraCast&lt;/li&gt;
&lt;li&gt;Nginx в составе Hestia выступал фронтенд-прокси: терминировал TLS и передавал трафик во внутренний сервис&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-azuracast--платформа-вещания"&gt;2. AzuraCast — платформа вещания&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Установка &lt;strong&gt;AzuraCast&lt;/strong&gt; (self-hosted, Docker-вариант) с нуля на подготовленный сервер&lt;/li&gt;
&lt;li&gt;Развёрнуты две независимые радиостанции в рамках одной инсталляции:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Станция 1&lt;/strong&gt; — медитативная и этническая музыка, длинные композиции (в том числе треки продолжительностью до 30 минут)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Станция 2&lt;/strong&gt; — авторская музыка частных исполнителей сообщества&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Настроен стек вещания: &lt;strong&gt;Liquidsoap&lt;/strong&gt; (автоматизация и ротация) + &lt;strong&gt;Icecast&lt;/strong&gt; (стриминг-сервер для слушателей)&lt;/li&gt;
&lt;li&gt;Загружена и каталогизирована вся медиатека из предоставленных mp3-файлов&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-ротация-и-расписание-вещания"&gt;3. Ротация и расписание вещания&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Настроена &lt;strong&gt;умная ротация&lt;/strong&gt; с учётом хронометража треков: длинные композиции (20–30 минут) вынесены в ночное расписание, чтобы не нарушать дневной listening experience&lt;/li&gt;
&lt;li&gt;Дневной эфир составлен из коротких и средних треков с комфортным ритмом&lt;/li&gt;
&lt;li&gt;Добавлены &lt;strong&gt;джинглы (отбивки)&lt;/strong&gt; с интервалом каждые 30 минут — для создания радийного ощущения и брендинга станций&lt;/li&gt;
&lt;li&gt;Настроены плейлисты с разными режимами ротации (sequential, shuffled, scheduled)&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="4-статистика-и-мониторинг"&gt;4. Статистика и мониторинг&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Активирован встроенный модуль статистики AzuraCast (&lt;strong&gt;AzuraCast Analytics&lt;/strong&gt;) на базе &lt;strong&gt;InfluxDB&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Сбор данных: количество слушателей в реальном времени, история подключений, geography listeners, популярные треки, пиковые нагрузки&lt;/li&gt;
&lt;li&gt;Данные позволили подтвердить аудиторию: 20–30 уникальных слушателей ежедневно, сессии по несколько часов, пик до 50 одновременных подключений&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="5-форматы-и-потоки-вещания"&gt;5. Форматы и потоки вещания&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Настроено несколько &lt;strong&gt;Mount Points&lt;/strong&gt; для каждой станции с разными битрейтами:
&lt;ul&gt;
&lt;li&gt;Высокое качество: &lt;strong&gt;MP3 320 kbps&lt;/strong&gt; для десктопных клиентов&lt;/li&gt;
&lt;li&gt;Среднее качество: &lt;strong&gt;MP3 128 kbps&lt;/strong&gt; для мобильных устройств и встроенного плеера в приложении&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AAC / OGG&lt;/strong&gt; как альтернативные форматы&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Настроены метаданные потока: название станции, текущий трек, обложка — всё транслируется в ICY metadata&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="6-сайт-визитка-на-joomla"&gt;6. Сайт-визитка на Joomla&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;На том же сервере (отдельный домен через Hestia) развёрнута &lt;strong&gt;Joomla CMS&lt;/strong&gt; с двуязычной конфигурацией (ru / en)&lt;/li&gt;
&lt;li&gt;В качестве фреймворка использован &lt;strong&gt;Helix3 Ultimate Framework&lt;/strong&gt; + конструктор страниц &lt;strong&gt;SP Page Builder&lt;/strong&gt; — позволили собрать лендинг без написания вёрстки вручную&lt;/li&gt;
&lt;li&gt;Структура сайта: главная с описанием сообщества и радиостанций, встроенный &lt;strong&gt;HTML5-плеер от AzuraCast&lt;/strong&gt; (iframe embed) для обеих станций, контактная информация&lt;/li&gt;
&lt;li&gt;Сайт доступен по прямым ссылкам и служит точкой входа для слушателей вне мобильного приложения&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="7-резервное-копирование"&gt;7. Резервное копирование&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Резервное копирование AzuraCast&lt;/strong&gt; настроено по расписанию средствами встроенного скрипта: полный бэкап (конфигурация, база данных, медиатека) сохраняется локально&lt;/li&gt;
&lt;li&gt;Настроена &lt;strong&gt;репликация бэкапов по SSH&lt;/strong&gt; на удалённый сервер — для защиты от потери данных при отказе основного хоста (именно такой сценарий уже случался ранее)&lt;/li&gt;
&lt;li&gt;Резервное копирование веб-сайта (Joomla) — через встроенный механизм &lt;strong&gt;Hestia&lt;/strong&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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/icons/joomla.svg" alt="Joomla"&gt;&lt;div&gt;Joomla&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://ru-admin.github.io/icons/lets-encrypt.svg" alt="Let's Encrypt"&gt;&lt;div&gt;Let's Encrypt&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; вещание возобновлено с нуля по единственным исходным данным — набору mp3-файлов&lt;br&gt;
✅ &lt;strong&gt;Две станции:&lt;/strong&gt; независимые эфиры с разными форматами и расписаниями ротации&lt;br&gt;
✅ &lt;strong&gt;Аудитория:&lt;/strong&gt; 20–30 ежедневных слушателей, сессии по несколько часов, пики до 50 одновременных подключений&lt;br&gt;
✅ &lt;strong&gt;Надёжность:&lt;/strong&gt; работа 24/7, многоуровневое резервное копирование (локально + remote SSH)&lt;br&gt;
✅ &lt;strong&gt;Безопасность:&lt;/strong&gt; SSL/TLS для всех точек входа, fail2ban, изолированные домены&lt;br&gt;
✅ &lt;strong&gt;Сопровождение:&lt;/strong&gt; техническая поддержка в течение ~2 лет — обновления, добавление треков, правки сайта&lt;/p&gt;</description></item><item><title>Корпоративное облачное хранилище Nextcloud</title><link>https://ru-admin.github.io/ru/posts/self-hosted/nextcloud/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/ru/posts/self-hosted/matrix-messenger/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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>Миграция AWS → Yandex Cloud</title><link>https://ru-admin.github.io/ru/posts/clouds/migration-from-aws/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ru-admin.github.io/ru/posts/clouds/migration-from-aws/</guid><description>&lt;h2 id="перенос-инфраструктуры-компании-из-aws-в-yandex-cloud-в-рамках-импортозамещения"&gt;Перенос инфраструктуры компании из AWS в Yandex Cloud в рамках импортозамещения&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;Компания столкнулась с необходимостью срочной миграции из AWS в российское облако из-за санкционных рисков. Требовалось перенести всю инфраструктуру с минимальным простоем и без потери функциональности.&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;Инвентаризация всех ресурсов AWS (EC2, RDS, S3, VPC)&lt;/li&gt;
&lt;li&gt;Маппинг сервисов AWS → Yandex Cloud&lt;/li&gt;
&lt;li&gt;Разработка поэтапного плана миграции&lt;/li&gt;
&lt;li&gt;Подготовка rollback стратегии&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="2-подготовка-инфраструктуры"&gt;2. Подготовка инфраструктуры&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Terraform для IaC в Yandex Cloud&lt;/li&gt;
&lt;li&gt;Настройка VPC, подсетей, security groups&lt;/li&gt;
&lt;li&gt;Развертывание Managed PostgreSQL и Redis&lt;/li&gt;
&lt;li&gt;Настройка Object Storage (аналог S3)&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="3-миграция-данных"&gt;3. Миграция данных&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Репликация баз данных через DMS&lt;/li&gt;
&lt;li&gt;Синхронизация S3 → Object Storage&lt;/li&gt;
&lt;li&gt;Перенос Docker образов в Container Registry&lt;/li&gt;
&lt;li&gt;Тестирование на staging окружении&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="4-переключение-production"&gt;4. Переключение production&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;DNS failover для постепенного переключения&lt;/li&gt;
&lt;li&gt;Мониторинг метрик в реальном времени&lt;/li&gt;
&lt;li&gt;Откат на AWS в случае критических проблем&lt;/li&gt;
&lt;li&gt;Финальное переключение за 2 часа&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://ru-admin.github.io/icons/aws.svg" alt="AWS"&gt;&lt;div&gt;AWS&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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/icons/gitlab-original.svg" alt="GitLab CI"&gt;&lt;div&gt;GitLab CI&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; снижение на 40% (с $15k до $9k/месяц)&lt;br&gt;
✅ &lt;strong&gt;Downtime:&lt;/strong&gt; всего 2 часа вместо планируемых 8&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; соответствие 152-ФЗ&lt;/p&gt;</description></item><item><title>Миграция и DevOps для маркетплейса на CS-Cart</title><link>https://ru-admin.github.io/ru/posts/clouds/cscart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/ru/posts/sre-observability/monitoring-prometheus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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://ru-admin.github.io/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>