status: up Мой музей
it широкого профиля

Сайт не падает.
Остальное — детали.

Не занимаюсь синергией, цифровой трансформацией и продвижением ценностей. Настраиваю серверы и пишу код так, чтобы он работал — и продолжал работать, когда вы об этом давно забыли. FreeBSD, Perl, PostgreSQL, ZFS (или ваш стек здесь — и понимание, какие слои необходимы, а какие лишние.

философия кратко
без костылей
бэкапы
zfs, проверены
$ stack --status

Чем занимаюсь, когда не пишу пафосные тексты

ОС
FreeBSD и Linux в работе ежедневно. Если очень нужно — SunOS. Да, такие задачи бывают, и да, я не убегаю. FreeBSD, если что, начинал на СМ-4М, ДЕМОС&МНОС 2, адаптация 3.2BSD.
Языки
Perl, C, Python, JS — на этом пишу продакшн. PHP, Java, Rust — тоже умею, если задача того требует. Haskell не предлагать. В целом — если язык существует, я его читаю и могу что-то в нём исправить. Это не преувеличение, это опыт.
Контейнеры
cbsd/bhyve, docker + docker-compose. Умею готовить докер так, что он остаётся прозрачным и управляемым — а не слоем костылей на резиночках, в который страшно заглянуть через полгода.
Базы данных
PostgreSQL (люблю) + pgbouncer, TimescaleDB. MySQL — умею, обоснованно не люблю. Остальные базы тоже понятны — четверть века работы с инфраструктурой не проходят бесследно.
Бэкапы
ZFS-based снапшоты. Пятнадцать лет ни одного прокола — не потому что повезло, а потому что это просто работает, если делать по уму.
Вёрстка
HTML/CSS на техническом уровне — там, где нужна вёрстка, а не дизайн-эксперимент. Эта страница, например.
$ cat philosophy.txt

Рабочая философия

Self-hosted инфраструктура — не мода, а способ понимать каждый компонент своего стека. Если что-то падает, я хочу знать, почему, а не открывать тикет в чужую техподдержку.

Self-hosted это еще и защита от политических неожиданностей. Типа ракеты, попавшей в ДЦ в стране, о которой раньше не слышал. Я точно знаю, где вся моя инфрастрктура. Я сам делаю свои бэкапы. Я всегда точно знаю, что у меня происходит.

Но понимаю, зачем арендуют VPS и зачем работают в облаках.

$ cat cases.list

Кейсы

«Инфотел» биллинг, бэкапы, три года до и после
было стало
выставление счёта 1–2 дня, максимальная вовлеченность всех сотрудников от админа до директора. Ручные правки данных админом обязательны. 2–3 часа, менеджер без помощи админа + документооборот через Diadoc. "Отправить счет и УПД диадоком" — одна кнопка.
правка формы счёта-фактуры 3 дня 30–60 минут
резервное копирование было когда-то r/o доступ к данным мгновенно, без восстановления

Инфраструктура изначально была размазана по разным серверам без единой логики. SunOS, спагетти из Perl+HTML+SQL. Cтарый Oracle. Дела переданы в формате "вот тебе пароли от чего вспомнил". Биллинг переписан с сохранением всех исторических данных — миграция шла без простоя выставления счетов. Правда, несколкьо нервно: старый сервер приходил в необратимое состояние на глазах.

«К***о» mysql → postgres, баг на физическом сервере
было стало
репликация рвётся ~2 раза в неделю стабильна
база mysql, тормозит postgres, 2.6k rpm — норма
нагрузочный тест не удалось положить сайт
база для разработчиков частичная копия (без ПД и больших таблиц) по клику, TeamCity → потом Gitlab CI

Причина регулярных разрывов репликации оказалась не в базе и не в конфигурации — а в физическом сервере VMware, на котором всё это крутилось. Перешли на PostgreSQL и параллельно решили проблему на уровне железа.

$ skill --on-request

Делал дашборды на Prometheus/Grafana для оценки производительности и статуса проекта из YouTrack. Если у вас документированная система тикетов — могу собрать такое же.

$ skill --on-request --continue

Настраивал Asterisk — в том числе колл-центры и голосовое меню, диагностировал одностороннюю слышимость, писал кастомные интерфейсы поверх него. Кастом — не для красоты: он быстрее, понятнее и в нём невозможно сломать что-то за пределами интерфейса. FreePBX не люблю — для любой задачи сложнее «один входящий, два внутренних» он на практике оказывается сложнее ручной конфигурации. И позволяет случайно сделать такое, что потом не вдруг распутаешь.

$ skill --on-request --continue

За три дня с нуля в Rust написал рабочий код для проверки и обработки блокчейн-транзакций. Блокчейн не предлагаю куда попало — но если задача реально требует, умею с ним работать.

$ skill -oc

Отбивал DDoS-атаки. "Школьные", разумеется, но сайты клали и они. Обычно "школьные" атаки выделяются визуально по паттернам. Потом простой tail -f access.log | script и файрвол. Или, как вариант, сайт 99% ориентирован на Россию – жестко режем нероссийские IP средствами nginx.

Настоящий DDoS, который кладет хостинг-провайдера, своими силами не отбивается. Даже пытаться не стоит, сразу идти к тем, у кого защитная инфраструктура.

$ skill -oc

Вот, например, сайт карты переписи воробьев на Postgres+postgis с кластеризацией на сервере и соответственно отличной производительностью на клиенте.

«Книга.ру» процессы из прошлого века → git, redmine, один телефонный номер

На старте — практики прошлого века: один список рассылки, куда валится всё подряд (ТЗ, отчёты, рабочая переписка), который никто толком не читает; разработчики толкаются локтями; почтовик не вылезает из спама; колл-центр держится на трёх номерах.

Уговорами и немного пинками внедрил git + Redmine (это примерно 2014–2015 год): нет коммита и закрытия задачи — задача не сделана и не закрыта, одна задача — одна ветка. Благодарили и менеджер, и разработчики. Убедил гендира сменить политику сбора email-адресов с «нам нужно как можно больше» на «нам нужны только рабочие» — отбой по спаму упал до 1–2%. Настроил Asterisk на колл-центр с одним номером и возможностью операторам работать со своего мобильника, сделал простой инструмент для прослушивания записей разговоров с клиентами.

«Энергодата» серверы, asterisk, три года тишины

Настроил серверную инфраструктуру, сделал кастомный интерфейс для Астериска. Через какое-то время был уволен — формулировка «за безделье». После увольнения ещё три года продолжали приходить диагностические письма от серверов: «всё в порядке, никто ничего не трогает». В какой-то момент попросил отключить рассылку. Что происходит с серверами сейчас — не знаю.

$ grep "не делаю" services.list

Чем не занимаюсь

деланьем чего-нибудь (например, перезапустим какой-нибудь сервис)
синергией
цифровой трансформацией
продвижением ценностей
сторителлингом бренда
agile-коучингом
обещаниями про блокчейн
игрой в корпоративные подсиделки
$ cat others.list

Что еще может быть интересно

Объясняю
Умею простыми словами объяснить сложные вещи. Без примитивизации. Не упуская существенного. Не перегружая слушателя.

Если сайт упал — или ещё не падал, но вы переживаете

Пишите. Отвечаю по делу, без коммерческих предложений в ответ и без созвонов на час про то, что можно сказать в одном письме.

15 минут консультации бесплатно — этого хватит, чтобы понять, подходим ли мы друг к другу