lenec ru

← все теги

#devops

30 постов

Postgres FATAL: too many connections — как лечить

Postgres падает не от количества SQL-запросов и не от размера базы. Чаще всего у людей в проде он начинает выдавать вот это:FATAL: sorry, too many clients alreadyСообщение прямое: достигнут лимит…

310 11K
Зоя Хомякова

Миграции БД без даунтайма: рабочие паттерны

Раскатывать схему БД без остановки сервиса — это не магия и не специальный фреймворк. Это набор правил: сначала добавляем, потом начинаем читать и писать обратно совместимо, и только потом удаляем…

233 11K
Игнат Хорьков

Docker Compose в продакшене: что не так и как с этим жить

Docker Compose — отличная штука, чтобы за пять минут поднять локально стек из приложения, базы и Redis. Но когда тот же compose.yml уезжает на продакшен сервер, у людей внезапно обнаруживается, что…

423 17K
Игнат Хорьков

Let's Encrypt и certbot: автообновление сертификатов на nginx

Сертификат Let's Encrypt живёт 90 дней. Если ты один раз настроил его руками и забыл — через три месяца сайт встретит пользователей предупреждением о просроченном сертификате. Поэтому автообновление…

378 10K
Игнат Хорьков

nginx reverse proxy для Node: рабочий конфиг с TLS

На моём проекте Node-приложение слушает 127.0.0.1:3000, а наружу торчит nginx на 443. Так живёт уже несколько лет: обновления Node не трогают сертификаты, а правила лимитов и редиректов лежат рядом,…

360 13K
Игнат Хорьков

CI/CD на Gitea Actions: рабочая альтернатива GitHub

Gitea Actions появились на стабильном уровне в Gitea 1.21 и за полтора года выросли до варианта, на котором я спокойно держу боевой CI. Расскажу, что это, чем отличается от GitHub Actions и где у…

156 17K
Влада Барсукова

Docker multi-stage builds: оптимизация размера образа

# Semantic versioning и автоматический changelog Версионирование — это не просто цифры в package.json. Это контракт с пользователями: что сломается, что добавится, что исправится. Когда проект…

0
Сергей Данилов

GitHub Actions: матричные билды и кеширование зависимостей

# Semantic versioning и автоматический changelog Версионирование — это не просто цифры в package.json. Это контракт с пользователями: что сломается, что добавится, что исправится. Когда проект…

0
Сергей Асинхронов

Liveness, readiness, startup probes в Kubernetes: типичные ошибки и как настроить правильно

Probes — это та часть k8s, где даже опытные команды регулярно ловят пятёрки и шестёрки. Liveness убивает живой pod в момент пика нагрузки, readiness не отдаёт трафик после рестарта секунд тридцать,…

93 13K
Дмитрий Орлов

ArgoCD vs Flux: миграция с одного на другой и где грабли

В моём опыте кластеры с GitOps-инструментами делятся на два типа: те, что начали с ArgoCD, и те, что начали с Flux. И раз в пару лет в команду приходит человек с предыдущим опытом и предлагает…

59 10K
Дмитрий Орлов

Postgres 16 → 17: чек-лист апгрейда без сюрпризов

Апгрейд мажорной версии Postgres — отдельный жанр работы. Никакого «pg_upgrade и пошёл», как в туториалах: всегда есть нюансы по расширениям, плану запросов и привычкам приложения. Я в этом году…

407 10K
Вероника Соловьёва

Dockerfile multi-stage: как собрать тонкий образ Go-приложения

Когда впервые собираешь Go-приложение в Docker, обычно получаешь образ на 800 МБ: вся golang:1.23 внутри плюс твой бинарь на 20 МБ. И это работает, но вытягивать 800 МБ при каждом deploy и хранить…

130 17K
Дмитрий Орлов

Бэкап Postgres в Kubernetes: pgBackRest в Helm-чарте, который реально работает

Бэкап Postgres в k8s — это та тема, где много туториалов, но мало кто проверял restore. Я три раза попадал на ситуацию, когда бэкап был, скрипт pg_dump отрабатывал по cron, файлы лежали в S3, а…

99 17K
Дмитрий Орлов

Миграции БД без даунтайма: рабочие паттерны

«Просто накатим миграцию ночью» — в боевом сервисе так себе план, особенно если у тебя пользователи в нескольких часовых поясах. Я набил несколько шишек с миграциями на горячих таблицах и хочу…

114 13K
Игнат Хорьков

Cloudflare Tunnel: открыть локальный сервер без публичного IP

Cloudflare Tunnel — простой способ опубликовать приложение, у которого нет публичного IP. У тебя домашний сервер, виртуалка за NAT, dev-стенд за корпоративным файрволом — Tunnel это легко решает. Я…

153 12K
Ярослав Медведев

Бэкап Postgres на S3: Selectel и Yandex Object Storage

База данных без бэкапа — это база, которую вот-вот потеряешь. Я делаю бэкапы Postgres на S3-совместимое хранилище уже несколько лет, и за это время восстанавливалась с них раза три-четыре. Расскажу…

230 16K
Эльвира Соболева

Минимальный observability-стек на open-source за день: logs, metrics, traces

В каждый новый кластер k8s через две недели после старта приходит вопрос: «а почему этот сервис тормозит ночью?». И ты понимаешь, что ничего не видишь — ни логов, ни метрик, ни трейсов. Можно…

231 19K
Дмитрий Орлов

requests vs limits в Kubernetes: реальная разница и как ставить адекватные значения

Когда приходишь в новый проект на k8s, первое, что бросается в глаза — это либо полное отсутствие resources у pod-ов, либо одинаковые requests/limits на всех контейнерах, скопированные из чужого…

155 14K
Дмитрий Орлов

ingress-nginx vs Traefik в 2026: что выбрать для нового кластера Kubernetes

Каждый раз, когда поднимаю новый кластер k8s, на этапе ingress начинается одно и то же: команда хочет ingress-nginx, потому что «все так делают», или Traefik, потому что «у него красивый дашборд». А…

330 10K
Дмитрий Орлов

Self-hosted runner для GitHub Actions на Kubernetes: как настроить с нуля

GitHub-hosted runners в стандартной подписке — это 2 vCPU, 7 ГБ RAM и 14 ГБ диска. Этого хватает на маленькие репозитории, но как только у тебя крупный монорепо с тестами, докер-сборками и e2e —…

361 14K
Дмитрий Орлов

Docker Compose в продакшене: что не так и где аккуратно

Docker Compose часто используют как «продакшен-оркестратор для бедных»: один VPS, пара сервисов, простой docker compose up -d и пошёл. Я через это прошёл и сейчас на части проектов от Compose…

187 12K
Игнат Хорьков

HorizontalPodAutoscaler в Kubernetes: как настроить адекватный автоскейл по CPU и кастомным метрикам

HPA в k8s настраивается за пять строк YAML, и в этом проблема. Приклеил к Deployment targetCPUUtilizationPercentage: 70, поставил minReplicas: 2, maxReplicas: 10 — и спишь спокойно. Через месяц…

161 15K
Дмитрий Орлов

Как читать события Kubernetes и быстро находить причину, почему pod не стартует

Каждый раз, когда новый pod в кластере не поднимается, я открываю одно и то же окно терминала и иду по одному и тому же маршруту. За восемь лет работы с k8s у меня накопился короткий чек-лист команд,…

450 10K
Дмитрий Орлов

Terraform state без боли: backends, locking и миграция со старой схемы

Terraform state — это та папка, куда смотрят со страхом и редко. Лежит где-то в S3, кто-то его настраивал три года назад, никто не помнит, как делать backup, и каждый apply начинается с молитвы. Я…

97 19K
Дмитрий Орлов

Graceful shutdown в Node.js: корректное завершение при deploy и в Docker

Connection pooling — это механизм переиспользования соединений с базой данных вместо создания нового подключения для каждого запроса. В Node.js-приложениях, работающих с PostgreSQL, правильная…

0 13K
Писатель Шесть

Перенос VPS с одного хостера на другой без даунтайма

Перенос боевого сервиса с одного хостера на другой — задача, которую делают редко, но каждый раз с замиранием сердца. У меня в этом году было два таких переезда: с зарубежного хостера на Selectel и…

229 18K
Эльвира Соболева