# Как выложить Gradio-приложение в интернет без Hugging Face Spaces

https://netrun.io/blog/gradio-prilozhenie

_5 октября 2026 г. · 6 мин чтения_

> Gradio-приложение можно выложить на любой хостинг, который постоянно запускает Python: нужен файл requirements.txt с gradio и запуск на адресе 0.0.0.0 вместо 127.0.0.1. Ссылка share=True для этого не подходит — она временная и ведёт через серверы Gradio. В Netrun встроенная сборка сама узнаёт Gradio и запускает его на нужном адресе и порту, поэтому обычно ничего настраивать не нужно. Видеокарт в Netrun нет, поэтому большие модели лучше вызывать по API, а на сервере держать лёгкие.

- По умолчанию Gradio слушает только адрес 127.0.0.1 и порт 7860, поэтому снаружи такое приложение недоступно.
- Адрес и порт Gradio задаются переменными окружения GRADIO_SERVER_NAME и GRADIO_SERVER_PORT, а явные аргументы launch() их перекрывают.
- Публичная ссылка от share=True ведёт через серверы Gradio и перестаёт работать через неделю.
- По умолчанию Gradio обрабатывает одно обращение к функции за раз, а остальные ждут в очереди.
- Новые Gradio-приложения в Hugging Face Spaces требуют платного плана, кроме двух приложений на ZeroGPU для бесплатных личных аккаунтов.

Gradio любят за то, что интерфейс к модели собирается в десяток строк: поле ввода, кнопка, результат. Дальше демо хочется показать заказчику, преподавателю или подписчикам, и тут выясняется, что локальный адрес 127.0.0.1:7860 никому, кроме вас, не откроется, а ссылка от share=True через неделю перестаёт работать. Привычный ответ — Hugging Face Spaces, но новые Gradio-приложения там теперь требуют платного плана, кроме ограниченного бесплатного варианта на ZeroGPU.

Хорошая новость в том, что Gradio — это обычное веб-приложение на Python, и запустить его можно на любом хостинге, который держит Python постоянно. Ниже — как подготовить проект, что делать с адресом и портом и как не упереться в память. Если вы уже выкладывали дашборд, многое будет знакомо по инструкции про [Streamlit](https://netrun.io/blog/streamlit-prilozhenie).

**Где разместить Gradio-приложение**

| Критерий | Hugging Face Spaces | Netrun | Свой сервер |
| --- | --- | --- | --- |
| Как попадает код | Через git-репозиторий Space, пересборка на каждый коммит | Архивом, папкой, из GitHub или из редактора с ИИ | Как настроите сами |
| Видеокарта | Есть платные GPU и ZeroGPU с ограничениями | Нет, только процессор | Если арендуете машину с GPU |
| Запуск Gradio | Платформа сделана под Gradio | Сборка находит Gradio и запускает его на нужном адресе и порту | Вручную: адрес, порт, автозапуск, прокси, сертификат |
| Сон без посетителей | Бесплатное оборудование засыпает примерно через 48 часов без использования | На бесплатном тарифе засыпает и просыпается при открытии, на Pro не засыпает | Не засыпает |
| Сохранность файлов | Диск Space по умолчанию не постоянный | Папка /data переживает обновление кода и перезапуски | Всё на вашем диске |
| Подходит для | Публичных демо в сообществе Hugging Face и моделей, которым нужна видеокарта | Демо на процессоре и приложений, которые вызывают модели по API | Полного контроля и собственных видеокарт |

## 1. Соберите зависимости в requirements.txt

Положите рядом с главным файлом, обычно app.py, файл requirements.txt со списком библиотек — вместе с самим gradio. По нему хостинг поставит зависимости, а Netrun ещё и поймёт, что перед ним Gradio-приложение. Если вы используете torch, а видеокарты на сервере нет, ставьте сборку для процессора: она заметно меньше и быстрее устанавливается.

## 2. Не прописывайте адрес и порт в launch()

Gradio берёт адрес и порт из переменных окружения GRADIO_SERVER_NAME и GRADIO_SERVER_PORT, но явные аргументы server_name и server_port в launch() их перекрывают. В Netrun встроенная сборка сама запускает Gradio на 0.0.0.0 и порту 8080, поэтому достаточно вызвать demo.launch() без аргументов. Если в коде стоит server_name="127.0.0.1" или server_port=7860, уберите их, иначе ссылка не откроется. В собственном Dockerfile задайте server_name="0.0.0.0" и порт из переменной PORT.

## 3. Уберите share=True

Параметр share=True создаёт временную публичную ссылку через серверы Gradio, и через неделю она перестаёт работать. На хостинге он не нужен: у приложения и так есть собственный адрес с HTTPS. Кроме того, такая ссылка ведёт к приложению через чужие серверы, а не напрямую.

## 4. Оцените, сколько памяти нужно модели

Модель обычно загружается в оперативную память целиком, и большие модели легко превышают лимит тарифа — тогда система останавливает процесс, а в логах появляется Killed. Видеокарт в Netrun нет, всё считается на процессоре, поэтому языковые модели и генерация картинок будут медленными или не поместятся вовсе. Лёгкие модели вроде классификаторов и небольших моделей для текста работают нормально, а тяжёлые лучше вызывать по API у сервиса, который их запускает.

## 5. Храните скачанные модели в постоянной папке

Если приложение скачивает модель при старте, без постоянной папки оно будет качать её заново после каждой публикации. Укажите переменную окружения HF_HOME со значением /data/huggingface — в Netrun это делается во вкладке «Секреты». Тогда кэш библиотек Hugging Face окажется в постоянной папке /data и переживёт обновление кода. Помните, что модель занимает место на диске тарифа.

## 6. Опубликуйте и отправьте ссылку

Загрузите проект архивом, папкой или из GitHub, ключи внешних сервисов укажите в «Секретах» и дождитесь сборки. Netrun поставит зависимости, запустит приложение и выдаст ссылку с HTTPS, а живые логи покажут ошибку загрузки модели сразу. Если много людей пользуются демо одновременно, учтите очередь Gradio: по умолчанию функция обрабатывает одно обращение за раз.

Hugging Face Spaces по-прежнему хорош для публичных демо и моделей, которым нужна видеокарта. Если же демо работает на процессоре или вызывает модели по API, его проще держать на обычном хостинге: в Netrun Gradio запускается из кода без настройки адреса и порта, ключи лежат в секретах, а модели в /data не скачиваются заново. На бесплатном тарифе приложение засыпает без посетителей и просыпается при открытии ссылки, первое открытие после паузы занимает несколько секунд. Для демо, которое показывают вживую, подойдёт Pro. [Попробовать Netrun](https://netrun.io/).

Похожие инструкции: [как выложить Streamlit-приложение](https://netrun.io/blog/streamlit-prilozhenie), [приложение падает с Killed](https://netrun.io/blog/prilozhenie-padaet-killed-pamyat), [бот с нейросетью](https://netrun.io/blog/bot-s-neyrosetyu), [хостинг для дашборда](https://netrun.io/blog/hosting-dlya-dashborda).

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

### Почему Gradio-приложение не открывается на сервере?

Чаще всего оно слушает 127.0.0.1, как Gradio делает по умолчанию, или в launch() прописан порт 7860, а хостинг ждёт другой. Уберите server_name и server_port из launch() или задайте адрес 0.0.0.0 и порт из переменной PORT. Точная причина обычно видна в логах при запуске.

### Можно ли оставить share=True вместо хостинга?

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

### Потянет ли сервер без видеокарты большую модель?

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

### Почему приложение падает с ошибкой Killed?

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

### Чем Gradio отличается от Streamlit при публикации?

Оба — веб-приложения на Python, и публикуются они одинаково: файл requirements.txt, главный файл с кодом и запуск на 0.0.0.0. Gradio удобнее для интерфейса к одной модели с входом и выходом, Streamlit — для дашбордов и отчётов. В Netrun оба фреймворка распознаются автоматически.

### Можно ли запустить проект на Python — Django, Flask или FastAPI?

Да. Положите зависимости в requirements.txt — Netrun определит Python и соберёт проект сам. Django, Flask и FastAPI поддерживаются; приложение должно слушать порт из переменной окружения, а ключи и доступ к базе задаются как секреты, а не в коде.

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

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

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

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