Как развернуть веб-приложение Rust с помощью DigitalOcean

Большинству пользователей Rust в конечном итоге нравятся такие его характеристики, как производительность, надежность и продуктивность. Начать изучать его нелегко, но есть хорошие сообщества, которые помогут вам в этом.

Вы можете связаться со мной в telegram, если вам нужно нанять Blockchain Full Stack разработчика.

Вы также можете присоединиться к моей группе в Telegram, где вы можете познакомиться с другими разработчиками blockchain, а также рекрутерами, менеджерами проектов, задать вопросы и наладить связи.

Кроме того, есть достойные инструменты управления, такие как cargo, cargo-edit и т.д. Язык программирования, а также пакеты (crates) развиваются.

Разработчики языка также тратят время на улучшение интеграции Webassembly, чтобы привлечь больше фронтенд-разработчиков и сделать веб-приложения быстрее.

Однако было трудно найти реальные примеры интеграции фронтенда в Rust и последующего развертывания в Интернете.

Я не был уверен, смогу ли я загрузить свой сайт в Интернет с помощью Rust, но в итоге я сделал это и хотел поделиться с вами процессом.

Если у вас уже есть опыт развертывания на других языках, вы поймете, что развертывание на Rust не сильно отличается от развертывания на Node или Python.

  1. Купите услугу VPS, подобную той, что вы можете найти на DigitalOcean, которая предлагает вам ту же операционную систему, которую вы используете на своей локальной машине.

  2. Повторите то, что вы делали в своей среде разработки на виртуальной машине, которую они предлагают.

  3. Настройте Apache или Nginx и systemd service worker для работы в качестве прокси-сервера.

  4. Запустите свой проект внутри службы host и запустите сервер с вашим доменом.

Вы можете читать дальше или просто применить прайсы для Rust или другого фреймворка, который вы используете.

[Пререквизиты]

  1. Как установить Rust?
  2. Веб-сайт Rust
  3. DigitalOcean
  4. SSH
  5. Как использовать Vim
  6. Развертывание Rocket с помощью Nginx и LetsEncrypt
  7. Команды Bash
  8. Linux

Надеюсь, у вас на машине установлен Rust и готово веб-приложение.

В этом посте я собираюсь использовать DigitalOcean в качестве примера. Сначала я сомневался, что это будет работать с Rust, но потом понял, насколько это просто, если у вас уже есть некоторые знания команд терминала Linux. Потому что то, что они дают вам, это просто виртуальная машина Linux, и вы можете повторить то, что делали на своей локальной машине.

Результат можно увидеть на сайте Steadylearner.

За невысокую стоимость он работает очень хорошо, и у него есть двухмесячная бесплатная пробная версия. Вам не понадобится так много времени, чтобы начать работу, если вы будете следовать инструкциям, приведенным в этом посте.

Будет намного проще, если вы уже знакомы с Vim, CLI, Linux и т.д.

Вам также следует поискать информацию о Nginx. Он отлично работает с конфигурацией по умолчанию, но я надеюсь, что вы найдете больше информации о нем, чтобы вы могли настроить его в соответствии со своими потребностями.

Если у вас еще нет ключей SSH на вашей машине, пожалуйста, следуйте документации DigitalOcean, которую я дал вам ранее.

Для этого введите ssh-keygen и следуйте инструкциям на вашем компьютере.

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

Я также надеюсь, что вы уже знаете, что такое tld (top-level-domain).

Подробнее об этом можно узнать после развертывания приложения в этом посте.

Оглавление

  1. Конфигурация DigitalOcean.
  2. Установите зависимости для виртуальной машины.
  3. Настройте Nginx в качестве обратного прокси-сервера.
  4. Сохраните проект в виртуальной машине.
  5. Создайте службу Systemd для обслуживания веб-приложения.
  6. HTTPS для веб-сайта.
  7. Заключение.

Вы можете пропустить часть настройки DigitalOcean, если не хотите его использовать.

Вам не понадобится устанавливать зависимости на виртуальную машину Linux, если вы уже знаете, как настроить среду разработки.

Просто повторите то, что вы сделали на своей виртуальной машине после приобретения услуги [DigtialOcean] VPS или любой другой, которую вы выбрали.

Если у вас возникли проблемы с выполнением этого поста, пожалуйста, свяжитесь со мной через Twitter или LinkedIn, и я смогу вам помочь.

1. Конфигурация DigitalOcean

Я не буду подробно рассказывать о том, как использовать DigitalOcean, поскольку для новичков есть много документации.

Используйте Ubuntu 16.04 или Ubuntu 18.04. или любую другую версию, которую вы предпочитаете, и самую низкую цену, следуя этой статье.

Вы можете использовать это в качестве примера, надеюсь, вы уже создали учетную запись.

Вы можете использовать любой вариант, но я считаю, что экономия ресурсов очень важна.

Используйте самый дешевый вариант, так как его будет достаточно для тестирования вашего проекта.

Мы будем использовать Ubuntu 16.04 в качестве нашего выбора.

Ваша машина должна быть подключена к виртуальной машине, предоставляющей услугу SSH, как показано на следующем изображении, с помощью следующей команды.

При выполнении команды $ssh yoursite@xxx.xxx.x.xx будет выведено следующее сообщение.

Теперь вы увидите имя пользователя username@project:~$ в ядре Linux.

Теперь у нас готов DigitalOcean, и мы можем написать код для развертывания нашего веб-приложения Rust с помощью Nginx.

Ваша виртуальная машина linux почти пуста, легко подумать, что вам придется начинать с нуля.

У вас уже установлен Git, чтобы легко загрузить проект, Vim для редактирования файлов Nginx и Rust. Как их использовать, мы увидим позже.

Если вы забыли домен вашего сайта, вы можете использовать эту команду.

$host www.steadylearner.com
Войдите в полноэкранный режим Выход из полноэкранного режима

Попробуйте сделать это с помощью $host yourwebsite.

2. Установите зависимости для вашей виртуальной машины.

Это утомительная часть, если у вас много зависимостей.

Поскольку наша машина – это просто пустая виртуальная машина, необходимо установить Rust Compiler, Cargo, Node, Nginx и т.д., чтобы подготовиться к развертыванию.

Если вы знакомы с Docker, вы можете использовать его для экономии времени.

Важно установить Rust для завершения вашего [App made with Rust] и Nginx для работы в качестве обратного прокси-сервера.

Чтобы двигаться дальше, необходимо убедиться в наличии минимальных требований с помощью следующей команды.

$sudo nginx -h

$rustup

$load

Теперь мы готовы написать фактический код для развертывания сайта.

В этом посте мы будем использовать фреймворк Rust Rocket, но вы можете использовать Actix или любой другой фреймворк по вашему желанию.

Они будут работать, потому что в этом посте вы узнаете, как использовать Nginx в качестве прокси-сервера для вашего веб-приложения на POSIX-системе.

3. Настройте Nginx в качестве обратного прокси-сервера.

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

Но я думаю, что продолжение чтения этого поста сэкономит ваше время, я надеюсь, что вы ничего не изменили и все осталось на своих значениях по умолчанию.

Вы увидите, что это просто копирование и вставка, когда у вас есть реальный пример.

Используйте следующий фрагмент для Nginx и сохраните его в /etc/nginx/sites-available/ как your-domain.tld.conf

your-domain.tld в моем случае будет steadylearner.com

Вместо этого используйте свой.

server {
    #listen 80; # Only if sysctl net.ipv6.bindv6only = 1
    listen 80;
    listen [::]:80;

    server_name yourdomain.tld www.yourdomain.tld; # 1.

    location / {
        # Forward requests to rocket v4.0 production port
        proxy_pass http://0.0.0.0:8000; # 2.
        proxy_buffering off; # Single Page App work faster with it
        proxy_set_header X-Real-IP $remote_addr;
    }
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Пример довольно простой, но есть две вещи, которые вам необходимо знать.

1. Вам необходимо включить www в DigitalOcean в качестве префикса к имени вашего сайта.

Вы можете прочитать how-to-manage-records, using-cname-for-www.

Вы можете ориентироваться на изображение ниже.

Здесь используется CNAME, но вы можете использовать A или AAAA в качестве www-записи, если вы хотите включить HTTPS позже в этом посте.

2. Веб-фреймворк Rust, который мы будем использовать, – Rocket, а порт для production – http://0.0.0.0:8000. Нам нужно помочь nginx проксировать запрос к вашему веб-приложению Rust.

Вы можете использовать другой порт и конфигурацию, если вы используете другой фреймворк, например Actix или другие языки.

Каждый раз, когда мы редактируем основные файлы nginx, мы можем проверить их с помощью функции
$sudo nginx -t и он покажет нам сообщения, похожие на это.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Войдите в полноэкранный режим Выход из полноэкранного режима

Если проверка прошла успешно, мы можем использовать make sym link для файла your-domain.tld.conf, который мы создали ранее.

cd /etc/nginx/sites-enabled && sudo ln -s ../sites-available/your-domain.tld.conf
Войдите в полноэкранный режим Выход из полноэкранного режима

Надеюсь, вы дошли до этого момента.

После развертывания сайта вы увидите несколько команд nginx.

Скопируйте и вставьте их в файл ~/.bashrc с помощью $vim ~/.bashrc и используйте $source ~/.bashrc для их использования, если хотите.

Вам не нужно запоминать детали, если вы знаете, что делаете.

#nginx
alias startn="sudo systemctl start nginx"
alias stopn="sudo systemctl stop nginx"
alias restartn="sudo systemctl restart nginx"
alias reloadn="sudo systemctl reload nginx"
alias statusn="service nginx status"
alias testn="sudo nginx -t"
alias foldern="cd /etc/nginx"
Войдите в полноэкранный режим Выход из полноэкранного режима

До сих пор я не думаю, что были какие-либо сложные моменты, и не было необходимости редактировать файл nginx.conf.

Если вы хотите обслуживать gzip-файл вашего приложения Rust Rocket или любого веб-приложения, вы должны включить следующий код и протестировать его.

#inside nginx.conf(/etc/nginx/nginx.conf)

##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

gzip_vary on;
gzip_proxied any;
gzip_comp_level 5; # it is better not to be larger than 5
gzip_buffers 16 8k;
gzip_http_version 1.1;

# write what you want to be served as gzip compressed file when use requested it.

gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
Войдите в полноэкранный режим Выход из полноэкранного режима

Давайте проверим, что это работает.

$curl http://yourdomain.com --silent --write-out "%{size_download}n" --output /dev/null

$curl http://yourdomain.com --silent -H "Accept-Encoding: gzip, other things" --write-out "%{size_download}n" --output /dev/null
Войдите в полноэкранный режим Выход из полноэкранного режима

И результат должен быть намного лучше и проще, чем если бы вы делали это без Nginx.

Если вам удалось самостоятельно обслуживать gzip-файлы с помощью Rust или любого другого языка, который вы решили использовать, вы можете использовать

$find . | gzip *.ext
$find . | gzip -d *.gz
Войдите в полноэкранный режим Выход из полноэкранного режима

Для сжатия и распаковки файлов в папке.

Для этого не нужно использовать Webpack или какой-либо другой компрессор.

4. Сохраните проект в виртуальной машине

Ваша виртуальная машина почти пуста, но вы можете редактировать и сохранять файлы с помощью Vim.

Вы также можете использовать git для загрузки файлов, чтобы они уже были предустановлены.

Если вы хотите загрузить файлы проекта из репозитория Github, вы можете сделать это с помощью следующей команды.

$git clone https://github.com/steadylearner/Rust-Web-App.git.
Войдите в полноэкранный режим Выход из полноэкранного режима

Для сохранения файлов на виртуальной машине вы можете использовать любой удобный для вас способ.

Возможно, вы захотите сделать это в своем домашнем каталоге. Для этого воспользуемся $cd ~ && mkdir yourwebsite и сохраним там файлы вашего проекта.

Вы лучше всех знаете, что делаете. Это просто повторение того же самого, что вы сделали для создания проекта. Единственное различие заключается в путях для обслуживания и связывания файлов и каталогов.

Если вы используете Rust Rocket для этого примера,

  1. Загрузите файлы в виртуальную машину.

  2. Сначала используйте $cargo check, чтобы убедиться, что все работает правильно.

  3. Чтобы создать производственные файлы в папке назначения внутри виртуальной машины, используйте $cargo run –release.

  4. Затем мы будем использовать службу systemd для автоматизации процесса в следующей части.

Хотите загрузить файлы после развертывания сайта?

  1. Вы должны повторять эту команду $cargo run –release каждый раз, когда вы изменяете файлы Rust.

  2. Для статических сайтов, таких как HTML, CSS, JS, изображения или другие простые файлы, просто замените их, чтобы все заработало.

Разница в том, что Rust – компилируемый язык, а остальные – нет.

5. Создайте службу systemd для обслуживания веб-приложения

Мы почти у цели. Мы будем ориентироваться на сайт Rocket для среды разработки, чтобы использовать его в файлах systemd.

Они объясняют, что есть среда разработки, staging и production, и она будет похожа на другие фреймворки.

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

Когда мы используем Rocket, он поставляется с собственной конфигурацией по умолчанию, и нам не придется много редактировать.

Если вы прочитаете их документацию, то обнаружите, что эти части лучше описаны в службе systemd.

Если вы хотите узнать больше о том, что означает услуга в данном контексте, вы можете прочитать следующее

“Блок службы” описывает, как управлять службой или приложением на сервере. Здесь будет указано, как запустить или остановить службу, при каких обстоятельствах она должна запускаться автоматически, а также информация о зависимостях и заказ сопутствующего программного обеспечения”.

Отсюда.

затем создайте /etc/systemd/system/your-domain.tld.service и напишите содержимое, подобное этому.

[Unit]
Description=Web Application Example from steadylearner

[Service]
User=www-data
Group=www-data
WorkingDirectory=/home/yourname/yourwebsite/yourproject/
Environment="ROCKET_ENV=prod"
Environment="ROCKET_ADDRESS=0.0.0.0"
Environment="ROCKET_PORT=8000"
Environment="ROCKET_LOG=critical"
ExecStart=/home/yourname/yourwebsite/yourproject/target/release/yourproject

[Install]
WantedBy=multi-user.target
Войдите в полноэкранный режим Выход из полноэкранного режима

Вы должны найти правильный путь для своего проекта, и все будет готово.

Теперь попробуйте сделать это в консоли вашей виртуальной машины с помощью команды

$sudo systemctl start your-domain.tld.service.
Войдите в полноэкранный режим Выход из полноэкранного режима

Это происходит до тех пор, пока ваш Rocket или любой фреймворк, который вы используете, не скомпилирует производственные файлы и не передаст их в порт для вас.

Теперь посетите сайт your-domain.tld.

Если вы хотите, вы можете сохранить команду, подобную этой

alias verifywebsite="curl https://www.steadylearner.com"
Войдите в полноэкранный режим Выход из полноэкранного режима

В файле ~/.bashrc или в случае, если вы знакомы с командами Linux, вы можете использовать $ping.

Результатом будет ответ от Nginx или вашего сайта предсказаний в случае, если у вас все работает.

Вы можете посмотреть реальный пример на Steadylearner.

Надеюсь, вы все правильно поняли.

Вы можете написать больше псевдонимов в вашем файле ~/.bashrc, например, такие

# ufw firewall(install ufw first)
alias allownginx="sudo ufw allow 'Nginx Full'"
alias reloadufw="sudo ufw reload"

# systemd service
alias start="sudo systemctl start yourdomain.tld.service"
alias stop="sudo systemctl stop yourdomain.tld.service"
alias status="sudo systemctl status yourdomain.tld.service"
alias reload="sudo systemctl daemon-reload"
# It works automatically for every reboot, use it just once.
alias autoreload="sudo systemctl enable yourdomain.tld.service"
Войдите в полноэкранный режим Выход из полноэкранного режима

Это все для развертывания приложения Rust в Интернете с помощью Nginx и службы systemd на виртуальной машине Linux.

Вы можете захотеть использовать другой фреймворк, вам просто нужно будет отредактировать пути и изменить конфигурацию.

Если вы хотите включить HTTPS на сайте, читайте дальше.

6. HTTPS для веб-сайта

Для включения https на сайте нам потребуется всего несколько командных строк.

$sudo certbot --nginx # 1.
$sudo certbot renew --dry-run # 2.
Войдите в полноэкранный режим Выход из полноэкранного режима
  1. Вы можете использовать официальную документацию cerbot.

  2. Прочитайте документацию DigitalOcean о команде renew –dry -run.

Начиная с первого процесса с $sudo certbot –nginx, вы увидите процессы, похожие на

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

Нам просто нужно использовать $sudo certbot renew –dry-run.

В описании видно, что он просто имитирует процесс обновления.

Теперь вы можете зайти на свой сайт с включенным https.

7. Заключение

Я заранее знаю, что этот пост было нелегко выполнять.

Если вы добились успеха, то вы сможете достичь всего, что задумали.

Вы можете развернуть веб-приложение heacha с помощью Rust.

Я считаю, что нет ничего особенного в использовании Rust для веб-разработки с Nginx и Linux.

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

Мы узнали, как использовать Nginx и Systemd для любого фреймворка, написанного на любом языке программирования.

Это был набор постов, которые я уже писал ранее.

Если у вас возникли проблемы с этим постом, вы можете поискать “Как развернуть с помощью Rust”.

Следите за мной, если хотите больше постов о Rust, React, Node, Python, Haskell, Solidity, Polkadot и т.д.
Следите за мной, если хотите больше постов о Rust, React, Node, Python, Haskell, Solidity, Polkadot и т.д.

Если вам нужен разработчик, свяжитесь со мной.

Спасибо и, пожалуйста, поделитесь этим сообщением с другими.

Оцените статью
Procodings.ru
Добавить комментарий