Русский

Блог · Гайды по деплою

Как задеплоить приложение на Streamlit в 2026: одна команда, HTTPS и Dockerfile, который остается у вас

Команда Pethost · · 10 мин чтения

У вас есть приложение на Streamlit, которое на ноутбуке запускается через streamlit run, и вы хотите выложить его по адресу с HTTPS для людей, у которых нет Python. На Pethost это одна команда, pethost deploy, в папке, где лежит requirements.txt. Она пишет Dockerfile, собирает приложение на вашей машине Pethost и печатает его адрес. Приложение с первых страниц документации Streamlit оказалось в сети через 52 секунды, а следующее изменение его кода — через 3.

Коротко
  • Одна команда: pethost deploy в папке с requirements.txt. Ни файла конфигурации, ни порта, который надо открыть, ни Docker на ноутбуке.
  • Что она делает: пишет Dockerfile, который ставит ваши пакеты и запускает streamlit run streamlit_app.py, и направляет адрес на порт 8501.
  • Виджеты работают: WebSocket Streamlit проходит через прокси Pethost, настраивать ничего не нужно.
  • API-ключи лежат в .env, который первый деплой берет с собой; позже ключ меняет pethost env set.
  • Цена: 9,99 € в месяц за 2 vCPU, 3 GB и 30 GB — для всех ваших проектов. Бесплатного тарифа нет.

Что нужно, чтобы задеплоить приложение на Streamlit в 2026 году

Три вещи: само приложение, команда pethost и аккаунт Pethost.

Приложение здесь — то, с которого начинает документация Streamlit. Ее руководство по установке создает виртуальное окружение в папке проекта и ставит в него Streamlit:

$ cd my-app
$ python -m venv .venv
$ source .venv/bin/activate
$ pip install streamlit

Затем streamlit_app.py со слайдером из первого урока Streamlit:

import streamlit as st

st.title("My app")

x = st.slider("x")  # 👈 this is a widget
st.write(x, "squared is", x * x)

И requirements.txt, список того, что ставит приложение, с одной строкой: streamlit.

Команда — одна программа, которая ставится одной строкой. Все ее команды есть в справочнике CLI.

curl -fsSL https://pethost.dev/install.sh | sh      # macOS, Linux
irm https://pethost.dev/install.ps1 | iex           # Windows, in PowerShell

Аккаунту нужен тариф. Если вы не вошли, pethost deploy откроет браузер, чтобы вы вошли. Если тарифа еще нет, она покажет, где его выбрать, и подождет.

Деплой приложения на Streamlit одной командой

Перейдите в папку, где лежит requirements.txt, и запустите pethost deploy. Вот весь экран:

$ pethost deploy
Name it [my-app]:                it will live at https://my-app.sam.pethost.app
✓ Packed 2 files, 131 B   (left out .venv)
✓ Uploaded straight to your machine
✗ /compose.yaml: the project directory has no compose.yaml at its root: add one
✓ Streamlit app detected, wrote Dockerfile and .dockerignore.
✓ Packed 4 files, 601 B   (left out .venv)
✓ Uploaded straight to your machine
✓ Built and started in 52 s
  · wrote compose.yaml for the Dockerfile: the service app, reading .env, port 8501
✓ app listens on 8501 → https://my-app.sam.pethost.app
  It answers 200.

https://my-app.sam.pethost.app

Wrote .pethost (commit it). Next:   pethost logs -f   ·   pethost open
  1. Она спрашивает одно Имя проекта, первое слово его адреса. Enter берет имя папки.
  2. Она не берет виртуальное окружение В .venv было 450 MB пакетов, а машина ставит их сама.
  3. Машина не находит, что запускать Строка с крестиком: в папке пока нет ни Dockerfile, ни Compose-файла.
  4. pethost пишет Dockerfile В requirements.txt указан streamlit, поэтому pethost пишет Dockerfile для Streamlit и загружает папку еще раз.
  5. Машина собирает и запускает его Она видит, что приложение слушает 8501, направляет туда адрес с HTTPS, а pethost печатает ответ: 200.

Файл .pethost говорит, какой проект в этой папке. Закоммитьте его вместе с Dockerfile, и следующий деплой ничего не спросит.

Откройте приложение: виджеты и WebSocket

Страница Streamlit связывается с приложением по WebSocket, /_stcore/stream: по нему уходит каждое движение виджета, и скрипт заново выполняется на машине. Если это не работает, страница бесконечно показывает заглушку загрузки; база знаний Streamlit винит в этом CORS или прокси, который срезает заголовки WebSocket.

На Pethost для этого ничего не настраивали. В браузере приложение отрисовалось меньше чем за секунду, через wss://my-app.sam.pethost.app/_stcore/stream: «0 squared is 0», а со слайдером на 10 — «10 squared is 100». Хелсчек Streamlit тоже отвечает:

$ curl https://my-app.sam.pethost.app/_stcore/health
ok

pethost logs -f показывает поток того, что печатает приложение. «External URL», который там печатает Streamlit, никому не открыт: адрес приложения — тот, что с HTTPS.

Dockerfile, который pethost пишет для Streamlit

Вот файл целиком, каким он был записан в папку:

# Written by pethost deploy for this Streamlit app: Python 3.14 (no .python-version
# names another), pip installs it (requirements.txt), streamlit_app.py is what it starts
# with.
# It is yours now: change it as you like. pethost does not write it again.

FROM python:3.14
WORKDIR /app

COPY . .

RUN --mount=type=cache,target=/root/.cache/pip \
    pip install -r requirements.txt

ENV PYTHONUNBUFFERED=1
EXPOSE 8501
CMD ["streamlit", "run", "streamlit_app.py"]

Его первые строки говорят, что pethost нашел в вашей папке:

В requirements.txt должен быть указан streamlit. Приложение, сделанное для Streamlit Community Cloud, может его не указывать, ведь Community Cloud ставит Streamlit сам; тогда pethost не пишет Dockerfile. С добавленной строкой такое приложение оказалось в сети через 30 секунд.

Измените код и задеплойте снова за 3 секунды

Отредактируйте приложение и запустите ту же команду. В первый раз это заняло 42 секунды: файл копирует папку до pip install, так что из-за одной измененной строки пакеты ставятся заново. Dockerfile ваш, поэтому сначала скопируйте requirements.txt:

COPY requirements.txt .
RUN --mount=type=cache,target=/root/.cache/pip \
    pip install -r requirements.txt

COPY . .

Деплой, который изменил файл, занял 34 секунды. После него изменение кода пропускает установку:

$ pethost deploy
my-app (.pethost)
✓ Packed 5 files · uploaded · built and started in 3 s
…
  It answers 200.
https://my-app.sam.pethost.app

Чтобы вместо этого деплоить каждый пуш, один раз подключите репозиторий: pethost github sam/my-app. pethost rollback возвращает предыдущую версию. ИИ-агент может сделать все это через MCP-сервер Pethost: как агент деплоит проект и следит за ним.

Деплой приложения на Streamlit, которое читает CSV

Большинство приложений на Streamlit показывают данные, часто из файла рядом с кодом. Это приложение один раз читает таблицу Palmer penguins, хранит ее через st.cache_data и строит график по острову, выбранному в выпадающем списке:

@st.cache_data
def load_data():
    return pd.read_csv("data/penguins.csv")

С streamlit и pandas в requirements.txt та же команда упаковала 3 файла, 15 KB, и приложение оказалось в сети через 27 секунд. CSV уехал вместе с папкой, и путь, который работает на ноутбуке, работает и на машине. В браузере выбор острова Dream перерисовал число, график и таблицу.

Машина всегда включена, поэтому то, что хранит st.cache_data, остается готовым для следующего посетителя, и никто не ждет, пока приложение проснется. Файл, который приложение пишет во время работы, пропадает, когда деплой создает новый контейнер. То, что должно сохраниться, держите в базе данных: Postgres создается в один клик, без доплаты.

Храните API-ключ в .env, а не в коде

API-ключу не место ни в коде, ни в Git. Это приложение спрашивает у API NASA, какие астероиды пролетают мимо Земли в день, выбранный в поле даты. На ноутбуке ключ из .env читает python-dotenv:

load_dotenv()  # the .env beside this file, when you run it on your laptop
…
answer = requests.get(
    "https://api.nasa.gov/neo/rest/v1/feed",
    params={"start_date": day, "end_date": day, "api_key": os.environ["NASA_API_KEY"]},
)

В .env одна строка, NASA_API_KEY=DEMO_KEY — ключ NASA, чтобы попробовать API (свой ключ api.nasa.gov выдает за имя и email). Первый деплой берет .env с собой:

$ pethost deploy
Name it [asteroids]:          it will live at https://asteroids.sam.pethost.app
✓ Packed 4 files, 863 B   (took .env from this folder)
…
✓ app listens on 8501 → https://asteroids.sam.pethost.app
  It answers 200.

Страница показала, что 20 октября 2026 года мимо Земли пролетает 8 астероидов, а после смены даты на 21 октября — 10. С этого момента .env проекта живет на машине, а изменение файла на ноутбуке остается на ноутбуке. Следующий деплой так и говорит:

$ pethost deploy
asteroids (.pethost)
✓ Packed 6 files · uploaded · built and started in 38 s
  · kept the project's .env in place of the version's own: after the first deploy the project's is kept
…
To send this folder's .env:  pethost env push

pethost env set меняет одну переменную и сразу деплоит. Если указать только имя, pethost env set NASA_API_KEY, команда спросит значение, не показывая его. Streamlit тоже читает свои настройки из переменных:

$ pethost env set STREAMLIT_BROWSER_GATHER_USAGE_STATS=false
asteroids (.pethost)
✓ /.env has STREAMLIT_BROWSER_GATHER_USAGE_STATS now. Deployed in 39 s.

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

st.secrets читает .streamlit/secrets.toml, а не окружение. Папка, задеплоенная через pethost deploy, берет этот файл с собой, и st.secrets на машине работал. В репозитории этому файлу не место, поэтому приложение, задеплоенное из GitHub, держит ключи в .env.

Деплой Dockerfile из туториала Streamlit по Docker

Если вы прошли туториал Streamlit «Деплой Streamlit с помощью Docker», в вашей папке уже есть его Dockerfile. Оставьте его: pethost деплоит собственный Dockerfile папки как есть. Вот Dockerfile из туториала, с COPY . . вместо его git clone, как туториал и советует для кода, который лежит рядом с Dockerfile:

FROM python:3.12-slim

WORKDIR /app

RUN apt-get update && apt-get install -y …

COPY . .

RUN pip3 install -r requirements.txt

EXPOSE 8501

HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health

ENTRYPOINT ["streamlit", "run", "streamlit_app.py", "--server.port=8501", "--server.address=0.0.0.0"]
$ pethost deploy
Name it [spiral]:                it will live at https://spiral.sam.pethost.app
✓ Packed 3 files, 2 KB
✓ Uploaded straight to your machine
✓ Built and started in 1 min 25 s
  · wrote compose.yaml for the Dockerfile: the service app, reading .env, port 8501
✓ app listens on 8501 → https://spiral.sam.pethost.app
  It answers 200.

Спираль из туториала перерисовывала график, когда двигались слайдеры. Его docker run -p 8501:8501 здесь не нужен: машина сама находит порт и не открывает ничего, кроме HTTPS. HEALTHCHECK выполняется, и Docker назвал контейнер здоровым.

Свой домен для приложения на Streamlit

Любое имя в домене вашего аккаунта работает сразу, с HTTPS. Свой домен — одна команда, pethost domain add dashboard.example.com, и она печатает CNAME-запись, которую нужно создать; сертификат появляется, как только имя начинает указывать на машину.

Что вы получаете за эту цену

Pethost стоит 9,99 € в месяц за все, что вы хостите, на 2 vCPU, 3 GB памяти и 30 GB диска. Дашборд редко бывает один: задача, которая наполняет его данными, его база данных и ваше следующее приложение работают рядом с ним, без платы за проект.

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

Каждый проект подписан. Семь проектов на одной машине Starter: приложения с адресами и запросами за последние сутки, базы данных с приложениями, которые их используют.
Первая страница панели Pethost: CPU, память и диск машины и ее проекты в виде карточек.

Pethost — лучший выбор для

  • Аналитиков данных с приложением на Streamlit, которое нужно показать коллегам или клиентам по собственному адресу
  • Разработчиков-одиночек с несколькими дашбордами, ботами и личными проектами и одним счетом к оплате
  • Людей, за которых деплоит агент: Claude Code или Codex выкладывает приложение и читает его логи
  • Стартапов на ранней стадии, которым нужны фиксированные расходы в месяц, пока продукт небольшой

Ищите другое, если

  • Вашему приложению нужны несколько регионов или автомасштабирование

Вопросы

Как задеплоить приложение на Streamlit без Dockerfile?

Запустите pethost deploy в папке с requirements.txt. Она пишет Dockerfile, который запускает streamlit run, и деплоит его; файл остается в вашей папке, и вы можете его менять.

Почему задеплоенное приложение Streamlit бесконечно загружается?

Страница связывается с приложением по WebSocket на /_stcore/stream, и если это не удается, бесконечно показывает заглушку загрузки. На Pethost WebSocket проходит через прокси, и настраивать ничего не нужно.

Какой порт использует приложение на Streamlit на Pethost?

Собственный порт Streamlit, 8501. Машина находит порт, который слушает приложение, и направляет туда адрес с HTTPS: открывать вам ничего не нужно.

Где хранить API-ключи задеплоенного приложения на Streamlit?

В .env проекта, который первый деплой берет из вашей папки; pethost env set NAME меняет ключ, не показывая его, а приложение читает os.environ. st.secrets работает у папки, задеплоенной вместе со своим secrets.toml.

Сколько стоит хостинг приложения на Streamlit на Pethost?

9,99 € в месяц за Starter: 2 vCPU, 3 GB и 30 GB без платы за проект, так что там же работают ваши другие приложения и базы данных. Бесплатного тарифа нет. Цены без НДС.

На экранах — деплои на нашей тестовой машине с pethost 0.2.4, Streamlit 1.66.1 и Python 3.14.9 (3.12.15 в Dockerfile из туториала). my-app задеплоили первым; приложения с CSV и API-ключом нашли образ Python 3.14 уже на машине. Аккаунт на них — пример, sam.

  1. Streamlit: установка Streamlit из командной строки
  2. Streamlit: основные понятия
  3. Streamlit: деплой Streamlit с помощью Docker
  4. Streamlit: приложение не загружается при удаленном запуске
  5. Streamlit: управление секретами
  6. Streamlit: зависимости приложения в Community Cloud
  7. NASA: открытые API
  8. Palmer penguins: данные
  9. pethost, командная строка Pethost

Запустите свои проекты уже сегодня

Деплойте приложения, ботов и базы данных из агента, с GitHub или в браузере, сколько поместится, по одной фиксированной цене. Ничего по счётчику, ничего сверху.

Разместить проекты за 9,99 €/мес