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

https://netrun.io/blog/proekt-s-bazoy-dannyh

_2 августа 2026 г. · 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](https://netrun.io/).

Похожие инструкции: [сайт на Django](https://netrun.io/blog/sayt-na-django), [сайт на Laravel](https://netrun.io/blog/sayt-na-laravel), [n8n без своего сервера](https://netrun.io/blog/n8n-bez-servera).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Да, если данные лежат в постоянном хранилище. У обычного проекта это папка /data: все, что приложение туда сохранило, остается при обновлении кода и перезапуске, а посмотреть и скачать файлы можно на вкладке «Данные». Если вы описали сервисы сами в docker-compose, постоянное хранилище — это именованные тома из вашего файла, и папки /data у такого проекта нет. Файлы, записанные мимо хранилища, при следующей публикации создаются заново. Ссылка проекта в любом случае остается прежней.

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

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