- Покупка домена
- Покупка хостинга и его настройка
- Деплой на PaaS
- Деплой на Render.com
- Github Actions
- Выводы
После того как сайт написан, его нужно выложить в интернет. Стандартный путь включает три пункта:
- Покупка домена
- Покупка хостинга и его настройка
- Деплой
В этом уроке мы рассмотрим эти пункты более подробно.
Покупка домена
Чтобы приобрести домен, необходимо обратиться в компании-регистраторы. Домен оплачивается раз в год и закрепляется за определенным человеком или компанией.
Иногда хостер и регистратор — одна и та же компания. Тогда домен и сервер связываются одновременно. Иначе нужно производить определенные настройки на стороне сервера и подтверждать свое право владения доменом.
Покупка хостинга и его настройка
Хостинг — это ресурсы для размещения и обслуживания сайта в интернете. Хостинг бывает разным. Это может быть:
- Уже полностью готовая среда, в которую заливается код сайта
- Просто железные серверы, которыми можно и нужно управлять самостоятельно
Обычно работа с хостингом выглядит так:
- Регистрируемся на сайте хостинга
- Выбираем тариф и вид хостинга (On-Prem, IaaS, PaaS, SaaS), привязываем банковскую карту
- Получаем доступ к ресурсам — к IP-адресу и паре «логин/пароль» для доступа по SSH и FTP
- При необходимости настраиваем хостинг и деплоим проект
Деплой на PaaS
Деплой — это выкладка новой версии сайта на сервер. Этот процесс может быть довольно сложным и зависит от используемых технологий. Во время деплоя могут выполняться следующие задачи:
- Скачиваем код проекта на сервер (обычно через клонирование Git)
- Ставим все необходимые зависимости
- Выполняем сборку приложения
- Выполняем миграции — SQL-скрипты, которые изменяют структуру базы данных
- Запускаем новую версию кода
Большинство PaaS-хостеров имеют бесплатные планы, достаточные для выкладки учебных проектов. Их достоинство в том, что нам не придется покупать адрес — домен третьего уровня предоставляется бесплатно.
Для деплоя учебных проектов можно использовать PaaS Render. Этот сервис поддерживает деплой GitHub-репозиториев. Попробуем задеплоить на него проект Гостевая книга.
Деплой на Render.com
Зарегистрируйтесь в сервисе Render. После регистрации на вкладке Dashboard
сможем добавлять новые приложения — веб-сервисы и базы данных.
Так как наше приложение использует базу данных, сначала нужно ее создать. Создайте базу данных PostgreSQL (New → PostgreSQL
), дайте ей имя, которое будет отображаться в панели. Нажмите кнопку Create database
.
После того, как создадим базу данных, нам станут доступны сведения о подключении к БД (Connections). Нам потребуется Internal Database URL, эта строка подключения к БД потребуется нам позднее.
Теперь можно приступать к созданию нового приложения. Создайте новое веб-приложение (New → Web Service
). Подключите свой GitHub-репозиторий или вставьте его URL, после чего нажмите Connect.
Заполните поля с настройками приложения.
- Name - задайте имя для своего приложения.
- Language выберите Ruby в качестве среды выполнения проекта, а
- Root Directory оставьте пустым, тк у нас приложение в корне репозитория
- Region — ближайший к вам регион. Обратите внимание, что веб-сервис и база данных должны находиться в одном регионе.
- Build Command - команда сборки приложения. Сюда нужно разместить установку зависимостей, сборку ассетов, миграцию БД.
- Start Command - команда запуска сервера. При запуске сервер должен запускаться на динамическом порту, который указан в переменной окружения
PORT
.
Для Ruby on Rails сервис Render предоставляет предзаполненные команды сборки и запуска приложения. Их необходимо заменить на свои. Например для приложения Гостевой книги команды сборки определены в Makefile и называются render-build
и render-start
соответственно.
Далее необходимо указать тип инстанса (тариф). Для тестового проекта или демонстрации достаточно бесплатного (Free).
Переменные окружения
Для корректной работы приложения нужно задать значение для переменных окружения, которые зависят от настроек нашего приложения. В любом случае, нам понадобится передать приложению параметры для подключения к базе данных. Это делается с помощью переменных окружения.
Добавим переменные необходимые переменные:
DATABASE_URL
: строка подключения к БД взятая в Internal Database URL. Она записывается в форматеpostgres://<username>:<password>@<host>:<port>/<database_name>
SECRET_KEY_BASE
: строка для шифрования важных данных, например токенов. Можно сгенерировать строку самим с помощью командыbin/rails secret
локально и скопироватьRAILS_ENV
: устанавливаем значениеproduction
, чтобы приложение использовало окружение готовое для эксплуатации.
После этого надо будет нажать на кнопку Deploy web service. Наше приложение будет клонировано из репозитория, собрано и запущено. После завершения процесса оно станет доступно по определенному адресу, который автоматически сформируется.
Во время сборки и деплоя мы можем следить за процессом. Если что-то пойдет не так, Render сообщит об этом. Если что-то пошло не так, всегда можно посмотреть логи на вкладке Logs
. Они помогут разобраться с ошибкой.
Деплой на Render может производиться в автоматическом режиме по пушу и в ручном. Проблема автоматического деплоя в том, что непроверенные изменения могут попасть к пользователям. Чтобы это решить, можно воспользоваться ручным деплоем по хуку. Например после выполнения тестов в Github Actions.
Рассмотрим ниже воркфлоу Github Actions с деплоем после проверки кода тестами
Github Actions
Для настройки автоматического деплоя на Render с использованием GitHub Actions и ручного деплоя по хуку после успешного выполнения тестов, нужно нужно создать файл воркфлоу. В нем определим шаги, которые будут выполняться при каждом пуше в репозиторий.
---
name: Render
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'
bundler-cache: true
- run: |
make setup
make test
deploy:
needs: build
runs-on: ubuntu-latest
if: ${{ github.event_name == 'push' }}
steps:
- uses: actions/checkout@v4
- name: Deploy
run: |
curl ${{ secrets.RENDER_DEPLOY_HOOK_URL }}
Воркфлоу описывает автоматическое выполнение двух основных задач: сборки и деплоя. Сборка запускается при создании pull request в ветку main или при пуше в ветку. В процессе сборки выполняется установка необходимых зависимостей, запуск тестов, что позволяет убедиться в корректности кода перед его развертыванием.
После успешного завершения сборки, если событие является пушем, запускается задача деплоя. Эта задача выполняет команду, которая инициирует процесс развертывания на платформе Render, используя секретный URL, хранящийся в переменных окружения.
Выводы
- Процесс публикации сайта включает три ключевых этапа: покупка домена, выбор и настройка хостинга, а также деплой приложения на сервер.
- Выбор хостинга зависит от потребностей проекта: можно использовать готовые решения (PaaS) или управлять собственными серверами (IaaS).
- Деплой на PaaS упрощает процесс развертывания, предоставляя бесплатные планы и автоматизацию, что особенно полезно для учебных проектов.
- Автоматизация с помощью GitHub Actions позволяет интегрировать тестирование и деплой, обеспечивая надежность и контроль над изменениями перед их публикацией.
Самостоятельная работа
- Форкните проект rails-guestbook и запустите локально
- Задеплойтое проект на Render.com
В результате вы должны получить работающее приложение на Render.com и доступное из сети.
Дополнительные материалы
- Гайд - Что такое деплой?
- Hexlet CV
- Пример приложения для деплоя на Render.com
- Документация render.com
- Документация render.com - Deploying Ruby on Rails on Render
- Приложение двенадцати факторов
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.