NetrunНа главную

Сервисы и скрипты

Хостинг для дашборда: куда выложить, чтобы открыли коллеги

· 5 мин чтения

Коротко

Чтобы дашбордом пользовались коллеги, ему нужен хостинг с публичным адресом: локальная ссылка вида localhost открывается только на вашем компьютере, а VPN или проброс портов ради пары графиков никто настраивать не станет. Хостинг для дашборда на Streamlit, Dash, Plotly или Gradio выглядит так: вы загружаете код в Netrun, платформа сама собирает проект, запускает его и выдаёт ссылку с HTTPS, которую можно отправить в рабочий чат. Единственное требование к коду: приложение должно слушать порт из переменной окружения PORT и адрес 0.0.0.0, а не значения, прописанные в коде.

Дашборд обычно доживает до состояния «работает у меня» за один вечер, а дальше начинается самое неприятное. Хостинг для дашборда упирается не в язык и не в библиотеку графиков: локальный адрес коллеге не откроется, отправлять скриншоты в чат стыдно, а классические обходные пути — пустить всех в корпоративный VPN, пробросить порт наружу или оставить включённым свой ноутбук — либо не согласует служба безопасности, либо перестанет работать в тот момент, когда вы закроете крышку.

В Netrun путь короче: вы загружаете папку с кодом, платформа сама определяет, что перед ней приложение с веб-интерфейсом, ставит зависимости, запускает его и выдаёт публичную ссылку с HTTPS. Принцип одинаковый для Streamlit, Dash и Plotly, Gradio и просто веб-приложения с графиками, которое вы написали сами, — меняется только то, какие файлы лежат в проекте.

  1. Уберите из кода фиксированный порт и адрес#

    Порт, на котором работает дашборд, задаёт платформа через переменную окружения PORT — читайте его оттуда, а не прописывайте числом в коде или в файле настроек фреймворка. Слушать нужно адрес 0.0.0.0, а не localhost: приложение, которое слушает localhost, доступно только само себе, и ссылка останется пустой. Порт, вписанный числом прямо в код, — причина номер один, по которой дашборд собирается, но не открывается.

  2. Решите, откуда дашборд берёт данные#

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

  3. Сохраняйте то, что дашборд пишет сам, в постоянную папку#

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

  4. Закройте дашборд паролем внутри приложения#

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

  5. Загрузите код и отправьте ссылку коллегам#

    Принесите проект архивом (ZIP, RAR, 7z, tar) или импортом репозитория с GitHub, в том числе приватного. Зависимости и собранные папки вроде venv или node_modules класть в архив не нужно — они ставятся при сборке. Дальше платформа соберёт проект, запустит его и выдаст адрес с HTTPS; логи и статус публикации видны в кабинете в реальном времени, поэтому ошибку видно сразу, а не по белой странице.

  6. Выберите режим работы под то, как вы показываете дашборд#

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

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

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

Подойдёт ли это для Dash, Plotly или Gradio?

Да. Платформа не привязана к одному фреймворку: подходит любое приложение с веб-интерфейсом, которое слушает порт из переменной окружения PORT. Стек определяется по файлам проекта — например, по requirements.txt для Python или package.json для Node.js, — и нужная команда запуска подбирается автоматически.

Как сделать, чтобы цифры на дашборде обновлялись сами?

Обновление должно происходить внутри приложения: дашборд каждый раз читает свежие данные из базы или из внешнего источника, а не из файла, загруженного вместе с кодом. Отдельного планировщика по расписанию на платформе нет, поэтому периодический пересчёт делают в самом коде — циклом с паузой или библиотекой расписаний вроде schedule и APScheduler в Python, node-cron в Node.js. Результат пересчёта складывайте в /data или в базу, чтобы он не пропал при следующей публикации.

Можно ли сделать дашборд доступным только своим?

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

Почему дашборд собрался, но по ссылке ничего не открывается?

Чаще всего приложение слушает не тот адрес: в коде остался фиксированный порт или localhost вместо 0.0.0.0. Уберите свои значения и читайте порт из переменной окружения PORT. Вторая по частоте причина — ошибка при старте, например не хватает библиотеки или файла с данными; её видно в логах в кабинете в реальном времени.

Можно ли выложить готовую BI-платформу вроде Metabase или Superset?

Да, если у проекта есть свой Dockerfile или docker-compose — платформа их использует и поднимет связку сервисов, до пяти штук в одном проекте, например BI-приложение и базу рядом с ним. В таком проекте постоянное хранилище описывается именованными томами прямо в вашем файле compose: папки /data там нет. Такая связка заметно тяжелее небольшого дашборда на Streamlit, поэтому сверьтесь с актуальными лимитами тарифа в кабинете.

Нужен ли свой сервер или VPS?

Нет. Netrun разворачивает проект на своих серверах. Не нужно арендовать VPS, настраивать systemd и nginx или продлевать сертификаты — всё это работает за вас.

Почему мой сайт иногда засыпает?

На бесплатном тарифе сайты засыпают после простоя и просыпаются за пару секунд при первом запросе. На тарифе Pro проект работает без сна.

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

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

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

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

Запустите свой проект

Загрузите код, ответьте на пару вопросов — и получите рабочую ссылку. Есть бесплатный тариф

Попробовать Netrun
Все статьи блога