NetrunНа главную

Сайты и приложения

Как выложить приложение на Rust в интернет

· 5 мин чтения

Коротко

Чтобы выложить приложение на Rust в интернет, нужен сервер, который соберёт проект из исходников и будет держать его запущенным. Проще всего загрузить папку с кодом в Netrun: платформа увидит Cargo.toml, сама соберёт проект и выдаст публичную ссылку с HTTPS. От кода требуется одно — читать порт из переменной окружения PORT и слушать адрес 0.0.0.0. Первая сборка идёт долго, дольше, чем у проекта на Python или Node.js: компилятор собирает все зависимости с нуля, дальше публикации проходят быстрее.

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

В Netrun этот слой исчезает: вы загружаете исходный код, платформа видит Cargo.toml, сама собирает проект и выдаёт публичную ссылку с HTTPS (защищённое соединение, замочек в браузере). Ни сервера, ни nginx, ни ручного сертификата. Ниже о том, что стоит поправить в коде перед публикацией и чего ждать от первой сборки, потому что у Rust она заметно дольше, чем у остальных языков.

  1. Проверьте, что Cargo.toml лежит в корне проекта#

    Файл Cargo.toml перечисляет зависимости и говорит платформе, что перед ней проект на Rust. Именно по нему мы собираем проект: тулчейн и библиотеки подтягиваются на нашей стороне, ставить Rust у себя не нужно. Кладите в архив содержимое папки проекта, чтобы Cargo.toml оказался на верхнем уровне, а не внутри лишней обёртки.

  2. Уберите папку target из архива#

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

  3. Читайте порт из переменной окружения и слушайте 0.0.0.0#

    Веб-приложение должно слушать порт, который платформа задаёт в переменной окружения PORT, а не число, прописанное в коде намертво. В Rust это std::env::var("PORT"), а адрес для прослушивания — 0.0.0.0, а не 127.0.0.1: иначе приложение отвечает только внутри контейнера и ссылка остаётся пустой. В Axum это адрес в TcpListener::bind, в Actix Web — аргумент bind, а в Rocket настройки проще собрать прямо в коде из PORT, чем держать их в файле Rocket.toml.

  4. Вынесите ключи и токены в секреты#

    Ключи API, токен бота и строку подключения к базе читайте из переменных окружения через std::env::var, а не из констант в коде. При настройке проекта Netrun спросит эти значения, подставит их в переменные окружения и будет хранить зашифрованными, поэтому в архиве и в репозитории на GitHub они лежать не будут. Файл .env в архив класть не нужно.

  5. Загрузите код и дождитесь первой сборки#

    Принесите проект ZIP-архивом или импортом репозитория с GitHub, в том числе приватного. Дальше честное предупреждение: первая сборка Rust-проекта идёт долго, дольше, чем у проекта на Python или Node.js, потому что компилятор собирает с нуля не только ваш код, но и все зависимости. Это нормально, а не признак поломки: статус и живые логи в кабинете показывают, что работа идёт.

  6. Заберите ссылку и обновляйте код из кабинета#

    Когда сборка закончится, вы получите публичный адрес с HTTPS — его можно открывать и отправлять кому угодно. Новая версия выкладывается тем же способом: загрузите свежий архив или обновите проект из GitHub, ссылка при этом останется прежней. Повторные публикации, как правило, проходят быстрее первой.

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

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

Почему первая публикация Rust-проекта идёт так долго?

Компилятор собирает не только ваш код, но и все зависимости с нуля, причём с оптимизациями, поэтому сборка занимает больше времени, чем у проекта на Python или Node.js. Это ожидаемо и не значит, что что-то сломалось: прогресс видно в логах в кабинете. Повторные публикации, как правило, проходят заметно быстрее.

Нужно ли собирать бинарь у себя и загружать готовый файл?

Нет, загружайте исходники: Cargo.toml, папку src и остальные файлы проекта. Сборка происходит на нашей стороне, ставить Rust и настраивать тулчейн у себя не требуется. Бинарь, собранный на macOS или Windows, на сервере всё равно не запустился бы.

Работают ли Axum, Actix Web и Rocket?

Да, фреймворк может быть любым: проект опознаётся по Cargo.toml, а не по названию библиотеки. Требование ко всем одинаковое — слушать адрес 0.0.0.0 и порт из переменной окружения PORT. Для Rocket это удобнее всего сделать, собрав конфигурацию в коде, а не в файле Rocket.toml.

Что делать, если в проекте несколько исполняемых файлов?

Укажите основной в Cargo.toml через default-run, чтобы было однозначно понятно, что запускать. То же касается проекта из нескольких пакетов: сделайте так, чтобы точка входа была одна. Иначе при сборке может быть выбран не тот бинарь, который вы имели в виду.

Ссылка не открывается, хотя сборка прошла — что проверить?

Сначала порт и адрес: приложение должно слушать 0.0.0.0 и порт из переменной PORT, а не 127.0.0.1 и число из кода. Вторая частая причина — приложение упало сразу после старта, например из-за отсутствующего ключа или недоступной базы. И то и другое видно в логах в кабинете: там есть и текст ошибки, и момент, когда процесс остановился.

Какие языки и технологии поддерживаются?

Python, Node.js, Go, Rust, Ruby, PHP, Java, .NET, Deno, Bun, Elixir, статические сайты и bash-скрипты. Можно принести свой Dockerfile или docker-compose, но чаще стек определяется по коду автоматически.

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

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

Нужно ли уметь работать с Docker?

Нет. Netrun сам определяет язык проекта и собирает его. Если у вас уже есть Dockerfile или docker-compose, мы их поддержим, но писать их специально не требуется.

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

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

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

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

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