Коротко
Почему «работает у меня на ноутбуке» - это не продукт?
Типичная история непрограммиста, который собрал что-то полезное: бот отвечает, отчёт собирается, напоминания приходят. Всё честно работает, пока ноутбук открыт и подключён к сети.
Дальше начинается быт. Ты уехал, крышка закрылась, машина ушла в сон. Обновление системы перезагрузило компьютер, и терминал с запущенным сервисом закрылся. Ты подключился к чужому вайфаю, и внешний сервис перестал достукиваться.
Для тебя это мелочи, для пользователя - отказ. Причём тихий: никто не пришлёт уведомление о том, что бот умер.
Похожий путь я проходил на собственном боте, который стал пультом управления делами: пока он жил на ноутбуке, им пользовался только я. Как он устроен, разбирал в материале про этот кейс.
Есть и вторая причина, менее приятная. Сервис на личном ноутбуке невозможно передать. Ни коллеге, ни подрядчику, ни клиенту. Он существует только вместе с твоим компьютером.
Четыре части переезда
| Что переносим | Где живёт после переезда | Что будет, если забыть |
|---|---|---|
| Код продукта | папка на сервере или образ приложения | сервис просто не запустится |
| Секреты: токены, ключи, пароли | отдельный файл на сервере с закрытым доступом | либо не запустится, либо утекут ключи |
| Данные: база, файлы пользователей | база на сервере плюс резервная копия | потеряешь всё при первой аварии |
| Присмотр: автозапуск и оповещение | настройка сервера и алерт в мессенджер | сервис упадёт и будет лежать сутками |
На обучениях я показываю эту таблицу целиком, потому что первые два пункта делают все, третий часть, а четвёртый почти никто. Отсюда классическая ситуация «месяц назад всё работало, а сейчас, оказывается, не работает уже две недели».
Токены и ключи не должны лежать в тех же файлах, что и код, и тем более уезжать в облачное хранилище кода. На сервере им место в отдельном файле с закрытыми правами доступа. Это пять минут работы и единственная защита от того, что твой ключ найдут по поиску.
Три варианта размещения
Арендованный сервер. Обычная виртуальная машина за небольшие деньги в месяц. Ты полностью управляешь тем, что на ней происходит. Подходит для ботов, которые должны быть на связи круглосуточно, и для всего, где важно, чтобы данные лежали в известной юрисдикции.
Платформа с автоматическим развёртыванием. Ты подключаешь хранилище кода, платформа сама собирает и запускает приложение при каждом обновлении. Удобно для сайтов и веб-сервисов, дороже в мелочах, зато почти без администрирования.
Запуск по расписанию. Если сервис не должен работать постоянно, а обязан просыпаться раз в час или раз в сутки, отдельная машина не нужна: достаточно запланированной задачи, которая выполняет скрипт и засыпает.
| Вариант | Кому подходит | Что требует от тебя |
|---|---|---|
| Свой сервер | боты, круглосуточные сервисы, чувствительные данные | базовые команды и настройка автозапуска |
| Платформа развёртывания | сайты, веб-приложения, прототипы для людей | подключить репозиторий и переменные |
| Задача по расписанию | отчёты, рассылки, сборы данных | описать расписание и хранить результат |
Про то, где вообще проходит граница между «поиграться» и «отдать людям», подробно писал в материале про то, что доезжает до продакшена.
Что ломается при переезде?
Пути к файлам. На твоём компьютере файл лежал на рабочем столе, на сервере такого места нет вовсе. Всё, что сервис читает и пишет, должно жить внутри его папки, а не «где-то рядом».
Время. Сервер почти всегда живёт по всемирному времени, а ты думаешь по своему. Классическая авария: отчёт, который должен уходить в девять утра, приходит в полночь. Правило простое: договорись с собой, в каком поясе считает сервис, и запиши это в его настройках.
Доступы. Ключ, который работал с твоего домашнего адреса, может не работать с адреса сервера: часть сервисов ограничивает доступ по стране или требует подтверждения нового устройства. Проверять это надо до переезда, а не в момент запуска.
К этому добавляется четвёртая, менее очевидная вещь: на сервере нет твоего окружения. Программы, которые ты когда-то поставил себе и забыл, там придётся ставить заново. Поэтому переезд лучше делать не копированием файлов, а сборкой с нуля по описанию - тогда список нужного становится явным.
Кто перезапустит сервис, когда он упадёт?
На своём боте-расшифровщике я сформулировал это правило так: сервис обязан подниматься сам после любого падения и после перезагрузки машины, без моего участия.
Настраивается это один раз:
Включи автоматический перезапуск
Стандартная настройка запуска: если процесс завершился, поднять заново. Одна строчка в конфигурации.
Включи автостарт при загрузке сервера
Сервер иногда перезагружается: обновления, сбои у хостера. После перезагрузки сервис должен подняться сам.
Ограничь аппетит
Задай потолок памяти. Тогда при пике умрёт один сервис, а не всё, что живёт на машине.
Сделай проверку живости
Простой скрипт или запрос, который отвечает «я жив». По нему видно состояние без захода на сервер.
Настрой оповещение
Сообщение в мессенджер при падении и при недоступности. Это заменяет ежедневную ручную проверку.
Отдельно скажу про разделение. Если сервисов несколько, полезно держать их отдельными процессами: тяжёлый компонент, который долго стартует, и лёгкий, который часто обновляется. Тогда обновление одного не роняет второй.
Что нельзя выставлять наружу?
Самая частая дыра у самодельных сервисов - открытый порт базы данных или служебного компонента. Открыли для удобства отладки, забыли закрыть, и через неделю в базе появились чужие записи.
Правила, которых достаточно на старте:
- Наружу только то, что нужно пользователю. Остальное слушает только внутреннюю сеть.
- Доступ к серверу по ключу, а не по паролю.
- Шифрование для всего, что открыто наружу. Бесплатные сертификаты выдаются автоматически, отговорок нет.
- Резервная копия базы по расписанию и проверка, что она восстанавливается.
- Отдельное решение по персональным данным. Если сервис обрабатывает данные людей, требования закона распространяются и на твой маленький бот тоже. Разбирал это в материале про деплой прототипа и 152-ФЗ.
Если сервис работает с голосовыми сообщениями, перепиской или документами сотрудников, это уже чужие персональные данные. Такой сервис не публикуют наружу вовсе: он должен быть доступен только тем, кому положено, и по списку.
Переезд по шагам
- Попроси агента описать, что нужно для запуска. Список программ, версий, файлов и переменных. Это же станет инструкцией для сервера.
- Арендуй сервер и подготовь его. Обновления, пользователь, доступ по ключу, закрытая сеть.
- Перенеси код и секреты раздельно. Код через хранилище кода, секреты руками в закрытый файл.
- Перенеси данные и настрой резервную копию. До первого запуска, а не после.
- Запусти и проверь по своему сценарию. Не «стартовало без ошибок», а «прошёл путь пользователя целиком».
- Включи автозапуск и оповещения.
- Выключи свой компьютер и проверь ещё раз. Это финальный экзамен: если что-то работало через твою машину, вскроется здесь.
Последний шаг звучит смешно, но именно он ловит самые обидные зависимости вроде «сервис ходил в файл, который лежит у меня в облачной папке».
Частые вопросы
Частые вопросы
Главный вывод
Соберу в одну мысль. Пока продукт запускается только у тебя, он не существует для остальных. Как только он живёт на сервере и поднимается сам, им можно пользоваться, его можно передать и на нём можно строить дальше.
Хорошая новость: вайбкодинг дошёл до того, что весь переезд делается вместе с агентом по шагам, и от тебя требуется понимать смысл шагов, а не помнить команды.
Самый простой тест: закрой ноутбук на час и посмотри, что перестало работать. Этот список и есть твой план переезда.
Источники
- Docker - официальная документация: автоматический перезапуск контейнеров и автостарт после перезагрузки
- systemd - система управления службами, которая поднимает сервисы при старте машины
- Telegram Bot API - официальная документация по ботам
- Let's Encrypt - бесплатные сертификаты для шифрования соединения
- Федеральный закон № 152-ФЗ «О персональных данных» - текст на КонсультантПлюс
- PostgreSQL - документация о резервном копировании базы данных
