HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>После того как сайт написан, его нужно выложить в интернет. Стандартный путь включает три пункта:</p>
1 <p>После того как сайт написан, его нужно выложить в интернет. Стандартный путь включает три пункта:</p>
2 <ol><li>Покупка домена</li>
2 <ol><li>Покупка домена</li>
3 <li>Покупка хостинга и его настройка</li>
3 <li>Покупка хостинга и его настройка</li>
4 <li>Деплой</li>
4 <li>Деплой</li>
5 </ol><p>В этом уроке мы рассмотрим эти пункты более подробно.</p>
5 </ol><p>В этом уроке мы рассмотрим эти пункты более подробно.</p>
6 <h2>Покупка домена</h2>
6 <h2>Покупка домена</h2>
7 <p>Чтобы приобрести домен, необходимо обратиться в компании-регистраторы. Домен оплачивается раз в год и закрепляется за определенным человеком или компанией.</p>
7 <p>Чтобы приобрести домен, необходимо обратиться в компании-регистраторы. Домен оплачивается раз в год и закрепляется за определенным человеком или компанией.</p>
8 <p>Иногда хостер и регистратор - одна и та же компания. Тогда домен и сервер связываются одновременно. Иначе нужно производить определенные настройки на стороне сервера и подтверждать свое право владения доменом.</p>
8 <p>Иногда хостер и регистратор - одна и та же компания. Тогда домен и сервер связываются одновременно. Иначе нужно производить определенные настройки на стороне сервера и подтверждать свое право владения доменом.</p>
9 <h2>Покупка хостинга и его настройка</h2>
9 <h2>Покупка хостинга и его настройка</h2>
10 <p>Хостинг - это ресурсы для размещения и обслуживания сайта в интернете. Хостинг бывает разным. Это может быть:</p>
10 <p>Хостинг - это ресурсы для размещения и обслуживания сайта в интернете. Хостинг бывает разным. Это может быть:</p>
11 <ul><li>Уже полностью готовая среда, в которую заливается код сайта</li>
11 <ul><li>Уже полностью готовая среда, в которую заливается код сайта</li>
12 <li>Просто железные серверы, которыми можно и нужно управлять самостоятельно</li>
12 <li>Просто железные серверы, которыми можно и нужно управлять самостоятельно</li>
13 </ul><p>Обычно работа с хостингом выглядит так:</p>
13 </ul><p>Обычно работа с хостингом выглядит так:</p>
14 <ol><li>Регистрируемся на сайте хостинга</li>
14 <ol><li>Регистрируемся на сайте хостинга</li>
15 <li>Выбираем тариф и вид хостинга (On-Prem, IaaS, PaaS, SaaS), привязываем банковскую карту</li>
15 <li>Выбираем тариф и вид хостинга (On-Prem, IaaS, PaaS, SaaS), привязываем банковскую карту</li>
16 <li>Получаем доступ к ресурсам - к IP-адресу и паре "логин/пароль" для доступа по SSH и FTP</li>
16 <li>Получаем доступ к ресурсам - к IP-адресу и паре "логин/пароль" для доступа по SSH и FTP</li>
17 <li>При необходимости настраиваем хостинг и деплоим проект</li>
17 <li>При необходимости настраиваем хостинг и деплоим проект</li>
18 </ol><h2>Деплой на PaaS</h2>
18 </ol><h2>Деплой на PaaS</h2>
19 <p><strong>Деплой</strong>- это выкладка новой версии сайта на сервер. Этот процесс может быть довольно сложным и зависит от используемых технологий. Во время деплоя могут выполняться следующие задачи:</p>
19 <p><strong>Деплой</strong>- это выкладка новой версии сайта на сервер. Этот процесс может быть довольно сложным и зависит от используемых технологий. Во время деплоя могут выполняться следующие задачи:</p>
20 <ol><li>Скачиваем код проекта на сервер (обычно через клонирование Git)</li>
20 <ol><li>Скачиваем код проекта на сервер (обычно через клонирование Git)</li>
21 <li>Ставим все необходимые зависимости</li>
21 <li>Ставим все необходимые зависимости</li>
22 <li>Выполняем сборку приложения</li>
22 <li>Выполняем сборку приложения</li>
23 <li>Выполняем<strong>миграции</strong>- SQL-скрипты, которые изменяют структуру базы данных</li>
23 <li>Выполняем<strong>миграции</strong>- SQL-скрипты, которые изменяют структуру базы данных</li>
24 <li>Запускаем новую версию кода</li>
24 <li>Запускаем новую версию кода</li>
25 </ol><p>Большинство PaaS-хостеров имеют бесплатные планы, достаточные для выкладки учебных проектов. Их достоинство в том, что нам не придется покупать адрес - домен третьего уровня предоставляется бесплатно.</p>
25 </ol><p>Большинство PaaS-хостеров имеют бесплатные планы, достаточные для выкладки учебных проектов. Их достоинство в том, что нам не придется покупать адрес - домен третьего уровня предоставляется бесплатно.</p>
26 <p>Для деплоя учебных проектов можно использовать PaaS<a>Render</a>. Этот сервис поддерживает деплой GitHub-репозиториев. Попробуем задеплоить на него проект<a>Гостевая книга</a>.</p>
26 <p>Для деплоя учебных проектов можно использовать PaaS<a>Render</a>. Этот сервис поддерживает деплой GitHub-репозиториев. Попробуем задеплоить на него проект<a>Гостевая книга</a>.</p>
27 <h2>Деплой на Render.com</h2>
27 <h2>Деплой на Render.com</h2>
28 <p>Зарегистрируйтесь в сервисе<a>Render</a>. После регистрации на вкладке Dashboard сможем добавлять новые приложения - веб-сервисы и базы данных.</p>
28 <p>Зарегистрируйтесь в сервисе<a>Render</a>. После регистрации на вкладке Dashboard сможем добавлять новые приложения - веб-сервисы и базы данных.</p>
29 <p>Так как наше приложение использует базу данных, сначала нужно ее создать. Создайте базу данных<a>PostgreSQL</a>(New → PostgreSQL), дайте ей имя, которое будет отображаться в панели. Нажмите кнопку Create database.</p>
29 <p>Так как наше приложение использует базу данных, сначала нужно ее создать. Создайте базу данных<a>PostgreSQL</a>(New → PostgreSQL), дайте ей имя, которое будет отображаться в панели. Нажмите кнопку Create database.</p>
30 <p>После того, как создадим базу данных, нам станут доступны сведения о подключении к БД (Connections). Нам потребуется<strong>Internal Database URL</strong>, эта строка подключения к БД потребуется нам позднее.</p>
30 <p>После того, как создадим базу данных, нам станут доступны сведения о подключении к БД (Connections). Нам потребуется<strong>Internal Database URL</strong>, эта строка подключения к БД потребуется нам позднее.</p>
31 <p>Теперь можно приступать к созданию нового приложения. Создайте новое веб-приложение (New → Web Service). Подключите свой GitHub-репозиторий или вставьте его URL, после чего нажмите Connect.</p>
31 <p>Теперь можно приступать к созданию нового приложения. Создайте новое веб-приложение (New → Web Service). Подключите свой GitHub-репозиторий или вставьте его URL, после чего нажмите Connect.</p>
32 <p>Заполните поля с настройками приложения.</p>
32 <p>Заполните поля с настройками приложения.</p>
33 <ul><li><em>Name</em>- задайте имя для своего приложения.</li>
33 <ul><li><em>Name</em>- задайте имя для своего приложения.</li>
34 <li><em>Language</em>выберите<strong>Ruby</strong>в качестве среды выполнения проекта, а</li>
34 <li><em>Language</em>выберите<strong>Ruby</strong>в качестве среды выполнения проекта, а</li>
35 <li><em>Root Directory</em>оставьте пустым, тк у нас приложение в корне репозитория</li>
35 <li><em>Root Directory</em>оставьте пустым, тк у нас приложение в корне репозитория</li>
36 <li><em>Region</em>- ближайший к вам регион. Обратите внимание, что веб-сервис и база данных должны находиться в одном регионе.</li>
36 <li><em>Region</em>- ближайший к вам регион. Обратите внимание, что веб-сервис и база данных должны находиться в одном регионе.</li>
37 <li><em>Build Command</em>- команда сборки приложения. Сюда нужно разместить установку зависимостей, сборку ассетов, миграцию БД.</li>
37 <li><em>Build Command</em>- команда сборки приложения. Сюда нужно разместить установку зависимостей, сборку ассетов, миграцию БД.</li>
38 <li><em>Start Command</em>- команда запуска сервера. При запуске сервер должен запускаться на динамическом порту, который указан в переменной окружения PORT.</li>
38 <li><em>Start Command</em>- команда запуска сервера. При запуске сервер должен запускаться на динамическом порту, который указан в переменной окружения PORT.</li>
39 </ul><p>Для Ruby on Rails сервис Render предоставляет предзаполненные команды сборки и запуска приложения. Их необходимо заменить на свои. Например для приложения<a>Гостевой книги</a>команды сборки определены в Makefile и называются render-build и render-start соответственно.</p>
39 </ul><p>Для Ruby on Rails сервис Render предоставляет предзаполненные команды сборки и запуска приложения. Их необходимо заменить на свои. Например для приложения<a>Гостевой книги</a>команды сборки определены в Makefile и называются render-build и render-start соответственно.</p>
40 <p>Далее необходимо указать тип инстанса (тариф). Для тестового проекта или демонстрации достаточно бесплатного (<em>Free</em>).</p>
40 <p>Далее необходимо указать тип инстанса (тариф). Для тестового проекта или демонстрации достаточно бесплатного (<em>Free</em>).</p>
41 <h3>Переменные окружения</h3>
41 <h3>Переменные окружения</h3>
42 <p>Для корректной работы приложения нужно задать значение для переменных окружения, которые зависят от настроек нашего приложения. В любом случае, нам понадобится передать приложению параметры для подключения к базе данных. Это делается с помощью переменных окружения.</p>
42 <p>Для корректной работы приложения нужно задать значение для переменных окружения, которые зависят от настроек нашего приложения. В любом случае, нам понадобится передать приложению параметры для подключения к базе данных. Это делается с помощью переменных окружения.</p>
43 <p>Добавим переменные необходимые переменные:</p>
43 <p>Добавим переменные необходимые переменные:</p>
44 <ul><li>DATABASE_URL: строка подключения к БД взятая в<strong>Internal Database URL</strong>. Она записывается в формате postgres://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:&lt;port&gt;/&lt;database_name&gt;</li>
44 <ul><li>DATABASE_URL: строка подключения к БД взятая в<strong>Internal Database URL</strong>. Она записывается в формате postgres://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:&lt;port&gt;/&lt;database_name&gt;</li>
45 <li>SECRET_KEY_BASE: строка для шифрования важных данных, например токенов. Можно сгенерировать строку самим с помощью команды bin/rails secret локально и скопировать</li>
45 <li>SECRET_KEY_BASE: строка для шифрования важных данных, например токенов. Можно сгенерировать строку самим с помощью команды bin/rails secret локально и скопировать</li>
46 <li>RAILS_ENV: устанавливаем значение production, чтобы приложение использовало окружение готовое для эксплуатации.</li>
46 <li>RAILS_ENV: устанавливаем значение production, чтобы приложение использовало окружение готовое для эксплуатации.</li>
47 </ul><p>После этого надо будет нажать на кнопку<em>Deploy web service</em>. Наше приложение будет клонировано из репозитория, собрано и запущено. После завершения процесса оно станет доступно по определенному адресу, который автоматически сформируется.</p>
47 </ul><p>После этого надо будет нажать на кнопку<em>Deploy web service</em>. Наше приложение будет клонировано из репозитория, собрано и запущено. После завершения процесса оно станет доступно по определенному адресу, который автоматически сформируется.</p>
48 <p>Во время сборки и деплоя мы можем следить за процессом. Если что-то пойдет не так, Render сообщит об этом. Если что-то пошло не так, всегда можно посмотреть логи на вкладке Logs. Они помогут разобраться с ошибкой.</p>
48 <p>Во время сборки и деплоя мы можем следить за процессом. Если что-то пойдет не так, Render сообщит об этом. Если что-то пошло не так, всегда можно посмотреть логи на вкладке Logs. Они помогут разобраться с ошибкой.</p>
49 <p>Деплой на Render может производиться в автоматическом режиме по пушу и в ручном. Проблема автоматического деплоя в том, что непроверенные изменения могут попасть к пользователям. Чтобы это решить, можно воспользоваться ручным деплоем по хуку. Например после выполнения тестов в Github Actions.</p>
49 <p>Деплой на Render может производиться в автоматическом режиме по пушу и в ручном. Проблема автоматического деплоя в том, что непроверенные изменения могут попасть к пользователям. Чтобы это решить, можно воспользоваться ручным деплоем по хуку. Например после выполнения тестов в Github Actions.</p>
50 <p>Рассмотрим ниже воркфлоу Github Actions с деплоем после проверки кода тестами</p>
50 <p>Рассмотрим ниже воркфлоу Github Actions с деплоем после проверки кода тестами</p>
51 <h2>Github Actions</h2>
51 <h2>Github Actions</h2>
52 <p>Для настройки автоматического деплоя на Render с использованием GitHub Actions и ручного деплоя по хуку после успешного выполнения тестов, нужно нужно создать файл воркфлоу. В нем определим шаги, которые будут выполняться при каждом пуше в репозиторий.</p>
52 <p>Для настройки автоматического деплоя на Render с использованием GitHub Actions и ручного деплоя по хуку после успешного выполнения тестов, нужно нужно создать файл воркфлоу. В нем определим шаги, которые будут выполняться при каждом пуше в репозиторий.</p>
53 <p>Воркфлоу описывает автоматическое выполнение двух основных задач: сборки и деплоя. Сборка запускается при создании pull request в ветку main или при пуше в ветку. В процессе сборки выполняется установка необходимых зависимостей, запуск тестов, что позволяет убедиться в корректности кода перед его развертыванием.</p>
53 <p>Воркфлоу описывает автоматическое выполнение двух основных задач: сборки и деплоя. Сборка запускается при создании pull request в ветку main или при пуше в ветку. В процессе сборки выполняется установка необходимых зависимостей, запуск тестов, что позволяет убедиться в корректности кода перед его развертыванием.</p>
54 <p>После успешного завершения сборки, если событие является пушем, запускается задача деплоя. Эта задача выполняет команду, которая инициирует процесс развертывания на платформе Render, используя секретный URL, хранящийся в переменных окружения.</p>
54 <p>После успешного завершения сборки, если событие является пушем, запускается задача деплоя. Эта задача выполняет команду, которая инициирует процесс развертывания на платформе Render, используя секретный URL, хранящийся в переменных окружения.</p>
55 <h2>Выводы</h2>
55 <h2>Выводы</h2>
56 <ul><li>Процесс публикации сайта включает три ключевых этапа: покупка домена, выбор и настройка хостинга, а также деплой приложения на сервер.</li>
56 <ul><li>Процесс публикации сайта включает три ключевых этапа: покупка домена, выбор и настройка хостинга, а также деплой приложения на сервер.</li>
57 <li>Выбор хостинга зависит от потребностей проекта: можно использовать готовые решения (PaaS) или управлять собственными серверами (IaaS).</li>
57 <li>Выбор хостинга зависит от потребностей проекта: можно использовать готовые решения (PaaS) или управлять собственными серверами (IaaS).</li>
58 <li>Деплой на PaaS упрощает процесс развертывания, предоставляя бесплатные планы и автоматизацию, что особенно полезно для учебных проектов.</li>
58 <li>Деплой на PaaS упрощает процесс развертывания, предоставляя бесплатные планы и автоматизацию, что особенно полезно для учебных проектов.</li>
59 <li>Автоматизация с помощью GitHub Actions позволяет интегрировать тестирование и деплой, обеспечивая надежность и контроль над изменениями перед их публикацией.</li>
59 <li>Автоматизация с помощью GitHub Actions позволяет интегрировать тестирование и деплой, обеспечивая надежность и контроль над изменениями перед их публикацией.</li>
60 </ul>
60 </ul>