3 сервиса в проде

Бэкенд,
который
не падает

PHP, Symfony, Laravel, Docker, Vue.js. Довожу сервисы от идеи до продакшена — и слежу, чтобы они там жили.

С 2022
пишу бэкенд
3
сервиса в проде
PHP · Docker
основной стек
amirjon@srv-01 — zsh

Проекты

Сервисы, которые я спроектировал, написал и развернул сам.

billing-api

работает2024

Биллинг подписок для SaaS

Задача
Счета вели в таблицах. Как только появились тарифы, перерасчёты и возвраты, каждый месяц заканчивался ручной сверкой и ошибками, которые доходили до клиентов.
Моя роль
Единственный бэкенд-разработчик: модель предметной области, REST API, вебхуки платёжных провайдеров, контейнеризация и деплой.
Сложность
Вебхуки платёжек приходят не по порядку и по нескольку раз — наивный обработчик списывает дважды. Сделал идемпотентный журнал событий с ключом дедупликации и очередью ретраев на RabbitMQ: повторный колбэк фиксируется, но повторно не списывает.
  • PHP 8.4
  • Symfony
  • PostgreSQL
  • Docker
  • RabbitMQ
Демо скороИсходники ↗

crm-lite

работает2023

CRM для небольших команд

Задача
Отдел продаж вёл сделки в переписке и заметках. Ничего не искалось, никто не видел, какие сделки заглохли, а при передаче между людьми терялся контекст.
Моя роль
Fullstack: API и админка на Laravel, интерфейс на Vue 3, модель ролей, сборка в Docker Compose для локальной работы и продакшена.
Сложность
Список сделок вырос до тысяч строк со связанными контактами, задачами и этапами — классический N+1, страница открывалась секундами. Жадная загрузка плюс материализованная таблица сводки увели время под 100 мс и удержали его при росте данных.
  • PHP 8.3
  • Laravel
  • Vue 3
  • MySQL
  • Docker
Демо скороИсходники ↗

tg-notifier

работает2023

Шина уведомлений на RabbitMQ

Задача
Несколько сервисов слали свои сообщения в Telegram каждый сам по себе. Упирались в лимиты, неудачные отправки пропадали молча, а каждый новый сервис дублировал один и тот же код.
Моя роль
Спроектировал и написал сервис: контракт сообщений, топология очередей, шаблоны, ретраи и мониторинг.
Сложность
Telegram ограничивает частоту отправки и возвращает ошибки, которые нужно различать: часть имеет смысл повторить, часть — нет. Добавил экспоненциальные задержки и dead-letter очередь, чтобы сломанное сообщение не съедало очередь и не блокировало всё, что стоит за ним.
  • PHP 8.3
  • Symfony
  • RabbitMQ
  • Redis
  • Docker
Демо скороИсходники ↗

Стек

То, чем пользуюсь каждый день, а не то, о чём когда-то читал.

Языки
PHP 8.4JavaScriptTypeScriptSQLBash
Фреймворки
SymfonyLaravelVue 3Nuxt
Данные и очереди
PostgreSQLMySQLRedisRabbitMQ
Инфраструктура
DockerDocker ComposeNginxGitLab CIGitHub ActionsLinux
Качество кода
PHPUnitPHPStanPHP CS FixerXdebug

Обо мне

Я Амирджон, бэкенд-разработчик из Узбекистана. Начал писать на PHP в 2022 и остался в нём: Symfony там, где важна предметная область, Laravel там, где важнее скорость выпуска.

Больше всего мне нравится то, что начинается после написания кода — упаковать сервис в контейнер, дать ему пайплайн, метрики и бэкапы и смотреть, как он работает, никого не поднимая ночью.

Сейчас ищу команду, где смогу вести сервисы целиком: от модели данных до деплоя, который их выкатывает.

Путь

Как я сюда пришёл.

  1. 2022

    Первая строка на PHP

    Перешёл от скриптов к настоящим приложениям: MVC, базы, HTTP. Учился, пересобирая уже существующие вещи, пока они не начинали работать так же.

  2. 2023

    Laravel на практике

    Первые сданные проекты: админки, API, интеграции. Понял, что большая часть работы — не написать код, а сделать так, чтобы он читался через полгода.

  3. 2024

    Symfony и Docker

    Перешёл к более строгой архитектуре и контейнерам. Тесты, статический анализ, CI-пайплайны, выкладка без простоя.

  4. Сейчас

    Ищу команду

    Открыт к позициям backend / DevOps — удалённо или с релокацией.

Давайте поговорим

Открыт к позициям backend и DevOps, удалённо или с релокацией. Быстрее всего отвечаю в Telegram.