Как выложить приложение на Streamlit в интернет
Streamlit ценят за то, что дашборд или демо модели собирается за вечер и открывается прямо на своей машине. Проблема появляется на следующем шаге: показать это коллеге, заказчику или преподавателю. Локальный адрес чужому человеку не откроется, а классический путь — арендовать сервер, поставить туда Python, запустить приложение фоновым процессом, поставить перед ним прокси и получить сертификат.
Netrun убирает эту часть: вы загружаете код, платформа видит, что перед ней Streamlit, ставит зависимости, запускает приложение с нужными настройками и выдаёт публичную ссылку с HTTPS. Дальше её можно просто отправить в чат.
Соберите зависимости в requirements.txt
Положите рядом с приложением файл requirements.txt со списком библиотек — обязательно вместе с самим streamlit. По этому файлу мы поймём, что перед нами Streamlit-приложение, и подберём правильную команду запуска. Виртуальное окружение в архив класть не нужно.
Не прописывайте порт и адрес в коде
Порт и адрес, на которых слушать, задаёт платформа — их не нужно фиксировать в коде или в файле настроек Streamlit. Если вы раньше запускали приложение с явно указанным портом, уберите это: иначе приложение будет слушать не там, где его ждут, и ссылка не откроется.
Вынесите ключи в секреты
Если дашборд ходит в базу, в чужой сервис или к платной модели, ключи и строку подключения читайте из переменных окружения. При настройке проекта Netrun спросит эти значения и подставит их в зашифрованном виде — в архиве и репозитории они лежать не будут.
Подумайте, где лежат данные
Небольшой CSV можно положить рядом с кодом и читать из файла. Если данных много или они обновляются, лучше ходить за ними во внешнее хранилище или в базу: файлы, которые приложение пишет само, живут внутри контейнера и пересоздаются при обновлении кода.
Загрузите код и отправьте ссылку
Загрузите папку ZIP-архивом или импортируйте репозиторий из GitHub, в том числе приватный. Netrun поставит зависимости, запустит приложение и выдаст публичный адрес с HTTPS. Логи видны в кабинете в реальном времени, поэтому ошибку в коде видно сразу, а не по пустой странице.
Дашборд открывается по обычной ссылке, которую можно отправить кому угодно, без сервера и настройки прокси. На бесплатном тарифе приложение засыпает, когда им долго не пользуются, и просыпается по открытой ссылке — первый заход после паузы чуть медленнее. Если демо показывают вживую и задержка не нужна, подойдёт тариф Pro. Попробовать Netrun.
Частые вопросы
Нужно ли указывать команду запуска?
Нет. Если streamlit есть в requirements.txt, платформа сама определит, что это Streamlit-приложение, и запустит его правильной командой на нужном порту.
Почему приложение не открывается по ссылке?
Самая частая причина — порт или адрес, жёстко прописанные в коде либо в файле настроек Streamlit. Их задаёт платформа, поэтому свои значения нужно убрать. Вторая по частоте причина — ошибка при старте: её видно в логах в кабинете.
Сохранятся ли файлы, которые пишет приложение?
Нет, если они лежат просто рядом с кодом: при обновлении кода контейнер пересоздаётся. Данные, которые должны сохраняться, держите во внешнем хранилище или в базе — базу можно поднять рядом в том же проекте.
Будет ли дашборд засыпать на бесплатном тарифе?
Да. Если приложением долго никто не пользуется, оно засыпает и просыпается, когда кто-то открывает ссылку. Первый заход после паузы занимает на несколько секунд больше. На тарифе Pro простоев нет.
Можно ли закрыть дашборд паролем?
Ссылка публичная, поэтому проверку доступа делайте в самом приложении: Streamlit позволяет спрашивать пароль перед показом содержимого. Сам пароль храните в секретах, а не в коде.
Можно ли запустить проект на Python — Django, Flask или FastAPI?
Да. Положите зависимости в requirements.txt — Netrun определит Python и соберёт проект сам. Django, Flask и FastAPI поддерживаются; приложение должно слушать порт из переменной окружения, а ключи и доступ к базе задаются как секреты, а не в коде.
Почему мой сайт иногда засыпает?
На бесплатном тарифе сайты засыпают после простоя и просыпаются за пару секунд при первом запросе. На тарифе Pro проект работает без сна.
Где указать токены и другие секретные значения?
В настройках проекта есть раздел для значений из кода — например, токена от BotFather. Мы храним их в зашифрованном виде.