🧩 Свой сервис на сервере, где уже живёт чужое
Ставить что-то новое на сервер, где работает боевой сайт с базой, — обычная ситуация. Отдельный сервер под каждую мелочь никто не покупает.
Правило тут одно: после установки сервер должен выглядеть так же, как до неё. Четыре решения, которые это обеспечивают.
📦 Программа кладётся в папку проекта, а не в систему. Не через пакетный менеджер, а бинарником в свой каталог. Пакетная база сервера не меняется, конфликтов версий с чужими зависимостями не возникает, удаление — это удаление папки.
🔒 Служба слушает только 127.0.0.1. Если внешний доступ не нужен — его не должно быть. Открытый наружу порт находят сканеры за часы, и дальше это уже не твой сервис. Заодно не занимается порт, который завтра понадобится соседнему проекту.
🚧 Общесистемное не трогается. Ни правил файрвола, ни маршрутов, ни настроек nginx, ни доверенных сертификатов на уровне системы. Всё, что нужно только моему процессу, настраивается только моему процессу. Соседний сайт не просил менять ему картину мира.
🪪 У службы забраны лишние права. Средствами systemd: запись разрешена только в свою папку, доступ к домашним каталогам закрыт, привилегии не наследуются. Даже при ошибке в коде дотянуться до чужого не выйдет.
Что было бы, если сделать проще.
Поставить пакетом — однажды обновление потянет за собой библиотеку, от которой зависит чужое приложение. Слушать наружу — рано или поздно найдут. Поменять общесистемную настройку — сломается то, что работало год, и связь с твоей установкой обнаружится не сразу.
Каждое из четырёх решений в момент принятия выглядит как лишняя возня. Все вместе они дают результат, который проверяется одной командой: список служб, портов, конфигурация веб-сервера, отклик базы и сайта — всё как было.
Проверять это надо сразу после установки, а не когда что-то отвалится. Тогда же стоит записать, что считается нормой: через полгода без такой записи невозможно понять, было это так изначально или сломалось на прошлой неделе.