# Накодил (nakodil.net) > Инженерный дневник про AI-разработку, которая доезжает до продакшна: > инфраструктура, деплой, секреты, эксплуатация, сдача клиенту. > Пишется по-русски, на основе реальных проектов. Публикуются и неудачи. Материалов всего: 13. ## Грабли Симптом, причина, решение. Короткие заметки о том, на чём наступил. - [Четырнадцать бэкапов на той же машине, что и данные](https://nakodil.net/grabli/bekapy-na-toy-zhe-mashine-eto-ne-bekapy/): Ротация настроена, копии снимаются по расписанию, восстановление проверено. И всё это исчезнет одним движением вместе с виртуалкой. - [docker compose restart не перечитывает .env](https://nakodil.net/grabli/docker-compose-restart-ne-chitaet-env/): Поменяли переменную, перезапустили контейнер — работает по-старому. Restart не пересоздаёт контейнер, а переменные окружения задаются только при создании. - [nginx в контейнере не видит правку конфига, хотя файл смонтирован](https://nakodil.net/grabli/nginx-reload-ne-vidit-pravku-v-bind-mount/): reload перечитывает конфиг, но не всегда тот, который вы правили. Разбор, почему bind-mount ведёт себя не так, как ожидается. - [npm из портативного Node падает с MODULE_NOT_FOUND](https://nakodil.net/grabli/portable-node-bez-node-modules/): Дистрибутив Node распакован без node_modules: обёртки npm и npx на месте, кода за ними нет. Лечится за минуту, ищется полчаса. - [Правка PHP не видна на сервере, и дело не в opcache](https://nakodil.net/grabli/pravka-php-ne-vidna-delo-ne-v-opcache/): Первое подозрение всегда падает на кэш байткода. В половине случаев виноват владелец файла, и лечится это не перезапуском. - [Sandbox-ключ в production отвергается намеренно, а выглядит как поломка](https://nakodil.net/grabli/sandbox-klyuch-v-production-otvergaetsya-namerenno/): Интеграция авторизуется в тесте и не авторизуется на стенде с production-настройкой. Это не баг конфигурации, а защита, которая работает как задумано. - [События телефонии приходят не в том порядке, в каком случились](https://nakodil.net/grabli/sobytiya-telefonii-prihodyat-vne-poryadka/): Звонок завершился раньше, чем начался. Вебхуки идут параллельно и обгоняют друг друга, а состояние в CRM собирается по последнему пришедшему. - [Три часовых пояса в одном звонке](https://nakodil.net/grabli/tri-chasovyh-poyasa-v-odnom-zvonke/): Провайдер отдаёт UTC, сервер живёт в своём поясе, клиент смотрит из третьего. Сходится это только если хранить одно, а конвертировать на выводе. - [VM не стартует из официального образа: он UEFI, а машина на SeaBIOS](https://nakodil.net/grabli/vm-ne-startuet-uefi-obraz-na-seabios/): Готовый qcow2 от вендора загружается в пустоту или уходит в UEFI Shell. Причина не в образе и не в диске — в типе прошивки виртуальной машины. - [CRM качает запись разговора без авторизации — и молча кладёт битый файл](https://nakodil.net/grabli/zapis-zvonka-ne-privyazyvaetsya-record-url/): Ссылка на запись есть, файл прикрепился, слушать нечего. CRM ходит за файлом сама, своим клиентом, и токен провайдера ей никто не передал. ## Дев-лог Хроника проектов: что делали, что сломалось, чем кончилось. - [Накодил, часть 1: каркас за вечер и две мины по дороге](https://nakodil.net/devlog/nakodil-01-karkas/): Собираю сайт, на котором вы это читаете. Astro 7, Tailwind 4, Pagefind. По пути — битый Node и несовместимый TypeScript. ## Гайды Длинные разборы, которые не устаревают через месяц. - [Как устроен этот сайт](https://nakodil.net/guides/kak-ustroen-etot-sait/): Статика на Astro, контент в git, поиск без бэкенда, раздача с собственного сервера. Разбор решений и того, чем за них платим. - [Отката нет — значит выкат не готов](https://nakodil.net/guides/otkat-kotorogo-net/): Разбор того, почему план отката пишется до выката, а не после аварии, и как отличить настоящий откат от воображаемого.