NetrunНа главную

Как выложить проект с базой данных

· 5 мин чтения

Пока проект живёт на вашем компьютере, база рядом с ним ставится в одну команду. Как только дело доходит до публикации, начинается отдельная история: где база будет жить, как к ней подключиться из приложения, куда девать пароль, что будет с данными при следующем обновлении кода. Классический путь — арендовать сервер, поставить туда базу, настроить доступ и не забыть про бэкапы.

Приложение с базой можно вынести целиком, одним проектом. Netrun поднимает связанные сервисы по файлу docker-compose: приложение и базу рядом, до пяти сервисов в проекте. Данные лежат в постоянном хранилище и переживают обновление кода. Ниже — как это собрать.

  1. Опишите приложение и базу в одном файле

    Положите в корень проекта файл docker-compose.yml и опишите в нём два сервиса: ваше приложение и базу — PostgreSQL, MySQL, MongoDB или Redis, готовым официальным образом. Приложение мы соберём из вашего кода, база возьмётся из образа: ставить и настраивать её вручную не нужно.

  2. Подключите базе постоянное хранилище

    Это главный шаг, который нельзя пропускать. Добавьте базе именованный том и подключите его к папке, где база хранит файлы. Без тома данные лежат внутри контейнера и очистятся при первом же обновлении кода. С томом они переживают перезапуск и повторную публикацию — мы удаляем такие данные, только когда вы сами удаляете проект.

  3. Соедините сервисы по имени, а не по адресу

    Внутри проекта сервисы видят друг друга по имени из файла описания. Если база названа db, приложение подключается к хосту db на стандартном порту базы — прописывать IP-адреса не нужно и не следует, они меняются при перезапуске. Наружу база при этом не торчит: публичный адрес получает только приложение, а база доступна лишь соседнему сервису.

  4. Вынесите пароль базы в секреты

    Пароль базы, имя пользователя и строку подключения не пишите в файле описания и не оставляйте в коде — читайте их из переменных окружения. При настройке проекта Netrun спросит эти значения и подставит в окружение в зашифрованном виде, поэтому в архиве и в репозитории пароля не будет.

  5. Загрузите проект и накатите схему

    Загрузите папку ZIP-архивом или импортируйте репозиторий из GitHub. Netrun увидит описание сервисов, поднимет базу и приложение и выдаст публичный адрес с HTTPS. Создание таблиц оставьте на стороне приложения — миграции при старте или встроенный механизм фреймворка. Тогда при первом запуске схема появится сама, а при следующих обновлениях данные останутся на месте.

Итог: приложение и база живут одним проектом, подключение настроено, пароль лежит в секретах, а данные не пропадают при обновлении кода. Сервера, ручной установки базы и настройки доступа при этом не потребовалось. Попробовать Netrun.

Частые вопросы

Пропадут ли данные при обновлении кода?

Нет, если базе подключён именованный том. Тогда при обновлении кода пересобирается только приложение, а файлы базы остаются на месте. Без тома данные лежат внутри контейнера и очищаются при первой же повторной публикации, поэтому этот шаг обязателен.

Какие базы данных можно поднять?

Любые, у которых есть готовый образ: PostgreSQL, MySQL, MariaDB, MongoDB, Redis и другие. Достаточно описать сервис в файле docker-compose — ставить и настраивать базу вручную не нужно.

Как приложение подключается к базе?

По имени сервиса из файла описания. Если база названа db, в строке подключения указывается хост db и стандартный порт базы. IP-адреса прописывать не нужно: они меняются при перезапуске, а имя остаётся прежним.

Будет ли база доступна из интернета?

Нет. Публичный адрес получает только приложение, а база видна лишь соседним сервисам внутри проекта. Это правильное поведение: открытая наружу база — самый частый способ потерять данные.

Сколько сервисов помещается в один проект?

До пяти. Обычно этого хватает: приложение, база, кэш и, например, фоновый обработчик задач.

Можно ли запустить несколько сервисов сразу?

Да. Через docker-compose можно поднять до пяти связанных сервисов в одном проекте — например, приложение вместе с базой данных.

Сохранятся ли данные при обновлении кода?

Да. База данных и файлы проекта переживают обновление кода и перезапуск, ссылка проекта тоже остаётся прежней.

Где указать токены и другие секретные значения?

В настройках проекта есть раздел для значений из кода — например, токена от BotFather. Мы храним их в зашифрованном виде.