Неограниченный масштаб и бесплатный веб-хостинг с GitHub Pages и Cloudflare

Опубликовано: 2022-03-11

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

Секрет: я делаю их сайт статическим. Затем я храню и размещаю его на GitHub, а также использую Cloudflare для обслуживания через HTTPS и ускорения работы. Мои клиенты платят только за свое доменное имя, но получают гораздо больше, чем рассчитывали.

Почему статический контент?

Статические сайты удивительно быстры, так как не требуют времени обработки сервером. Кроме того, при фиксации базы кода статических ресурсов в репозитории git откат изменений просто становится вопросом возврата к предыдущей фиксации. Резервные копии — это git push , и вы, по сути, обслуживаете весь свой веб-сайт из кеша, а это означает, что вашему серверу почти никогда не придется снова обрабатывать запрос.

Создаете сложный пользовательский интерфейс?

С появлением интерфейсных фреймворков, таких как React и ему подобных, вы можете создавать волшебные возможности, используя только HTML/CSS и JavaScript. Однако вам придется отделить внутреннюю логику от внешней, но даже Ruby on Rails теперь поставляется с режимом API.

Всякий раз, когда я получаю контракт на создание веб-сайта, я думаю, достаточно ли статического сайта для удовлетворения потребностей моего клиента, и во многих случаях это так.

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

Веб-сайты с рекламными проспектами

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

Статические HTML-шаблоны значительно дешевле, чем их аналоги CMS, и их легче настраивать в будущем. От разработчиков, которых просят обновить такие сайты, не требуются специальные знания о той или иной CMS. Как правило, я всегда делаю статические сайты для сайтов-брошюр.

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

Одностраничные приложения

Вы хвастаетесь замечательным, классным новым приложением, основанным на современных интерфейсных фреймворках?

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

Ваше приложение будет доступно в любое время.

Блоги

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

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

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

Этот рабочий процесс особенно полезен, поскольку страницы GitHub поддерживают сборки Jekyll. Внезапно сообщения в блогах можно размещать с помощью запросов на включение, и весь ваш контент хранится в системе контроля версий. Пользователи, не являющиеся разработчиками, по-прежнему могут публиковать сообщения в Markdown, публикуя свои сообщения через Stackedit.

На самом деле, я использую Stackedit, чтобы написать этот пост прямо сейчас!

Кроме того, если вам нужны комментарии к вашим сообщениям в блоге, Disqus предоставляет вам мощную систему комментариев, вставляя фрагмент кода JavaScript.

Эта страница, которую вы читаете, также использует Disqus.

Страницы GitHub

GitHub Pages — это ответ GitHub на страницы проекта, который позволяет вам обслуживать любой статический веб-сайт прямо из вашего репозитория. Поскольку страницы GitHub поддерживают пользовательские домены, вы можете бесплатно разместить статический веб-сайт на страницах GitHub с развертыванием прямо из Git.

Развертывание на страницах GitHub.

Хватит болтовни, давайте посмотрим на это в действии!

Я пошел дальше и сделал одностраничное приложение React, которое извлекает и отображает текущий обменный курс пакистанской рупии из общедоступного API. Давайте развернем это на GitHub Pages.

Во-первых, давайте создадим новый репозиторий GitHub.

Скриншот экрана создания нового репозитория GitHub с полями «Владелец» и «Имя репозитория». В последнем заполнено название «прайс-чек».

Страницы GitHub обслуживаются из ветки gh-pages , поэтому давайте создадим ее для моего проекта.

 $ git checkout -b gh-pages Switched to a new branch 'gh-pages'

И давайте подтолкнем сайт вверх:

 $ git remote add origin [email protected]:amingilani/price-check.git $ git push -u origin gh-pages Counting objects: 27, done. Delta compression using up to 8 threads. Compressing objects: 100% (25/25), done. Writing objects: 100% (27/27), 28.67 KiB | 0 bytes/s, done. Total 27 (delta 3), reused 0 (delta 0) remote: Resolving deltas: 100% (3/3), done. To github.com:amingilani/price-check.git * [new branch] gh-pages -> gh-pages

И мы закончили! На этом этапе веб-сайт будет доступен по адресу https://amingilani.github.io/price-check с бесплатным SSL:

Страница «Добро пожаловать на проверку цен» сайта, размещенного на страницах GitHub, с меткой «Защищено» рядом с полем URL-адреса браузера.

Важно отметить:

  • Страницы GitHub обслуживают файл index.html в ветке gh-pages вашего проекта.
  • Веб-сайт обслуживается по адресу USERNAME.github.io/REPOSITORY-NAME .

Настройка доменного имени.

Обслуживание сайта за пределами GitHub — это нормально, но любому приличному веб-сайту требуется собственное доменное имя. К счастью, GitHub позволяет вам принести свой собственный домен на вечеринку!

Для начала создадим специальный файл CNAME и разместим в нем наше доменное имя. Это позволит GitHub узнать, какое доменное имя следует направить в репозиторий.

 $ echo 'pricecheck.gilani.me' > CNAME $ git add . $ git commit -m 'Add a custom domain' ... $ git push ...

Во-вторых, давайте укажем CNAME для нашего поддомена на DNS GitHub по адресу USERNAME.github.io :

Снимок экрана, показывающий раскрывающийся список с выбранным CNAME, именем «pricecheck», введенным в среднем поле, и доменом «amingilani.github.io», введенным в правом поле.

Внимание: НЕ используйте это для домена вершины! Добавление записи CNAME в корень вашего домена отключит ваши записи MX и TXT . Используйте это только для своего поддомена. Домены Apex обсуждаются позже.

На этом этапе наш веб-сайт должен работать на нашем собственном домене по HTTP:

Та же страница проверки цен в браузере, но теперь доступ к ней осуществляется через pricecheck.gilani.me. На этот раз метка Secure отсутствует.

Важно отметить:

  • Домен *.github.io по умолчанию обслуживается через HTTPS.
  • Наше пользовательское доменное имя обслуживается через небезопасный HTTP.
  • НЕ используйте запись CNAME в своем домене вершины, если вы не хотите убить свои электронные письма.

Ограничения страниц GitHub:

  • Размер файла репозитория не должен превышать 1 ГБ.
  • Размер файла веб-сайта не должен превышать 1 ГБ.
  • Ежемесячный лимит пропускной способности составляет 100 ГБ. Мы обойдем это позже.

Использование домена apex в качестве личного домена

Самый простой способ обойти это ограничение — использовать www в качестве поддомена и перенаправить весь HTTP-трафик с вершины на www . В моем примере я бы перенаправил gilani.me на www.gilani.me , который указывает на мой статический сайт, но я не люблю делать все по-простому.

Если вы действительно хотите использовать домен вершины, проверьте, позволяет ли ваш провайдер DNS устанавливать записи ANAME . Они находятся (упрощенно) на полпути между записями CNAME , поскольку они позволяют указывать на домены и записи A , поскольку они не аннулируют другие записи в той же зоне.

Нет ANAME ? Последний вариант — перейти на поставщика DNS, который поддерживает это: введите Cloudflare. Cloudflare обеспечивает выравнивание CNAME на доменах вершины, что эквивалентно записи ANAME . Лучше всего переключиться прямо сейчас, так как мы рассмотрим Cloudflare в следующем разделе.

TLDR : переключитесь на бесплатный DNS Cloudflare и установите CNAME в своем домене вершины. Они делают что-то особенное со своим CNAME , что заставляет его работать.

SSL и CloudFlare

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

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

Дошло до того, что Google Chrome помечает простые веб-сайты HTTPS как небезопасные, а Google Search начинает более выгодно отдавать предпочтение веб-сайтам HTTPS в своем рейтинге. Позже мы обсудим еще больше стратегий обеспечения безопасности внешнего интерфейса, а пока рассмотрим только SSL.

К счастью, теперь у нас есть Let’s Encrypt.

Это некоммерческий и полностью автоматизированный центр сертификации (ЦС), который позволяет вам программно выпускать краткосрочные 90-дневные SSL-сертификаты для любых доменов, которыми вы управляете. Это легкий ветерок в использовании; это с открытым исходным кодом; и проект поддерживается множеством компаний, включая Mozilla и Electronic Frontier Foundation.

Использование Cloudflare с пользой

Cloudflare — это служба защиты DNS, CDN и DDoS.

Он кэширует ваш веб-сайт и обслуживает его для пользователей с географически близких серверов, что делает ваш веб-сайт быстрее. Дополнительным преимуществом является то, что вы не выходите за пределы пропускной способности GitHub в 100 ГБ, потому что даже если ваш веб-сайт станет безумно популярным, большинство запросов попадут в кеш и никогда не достигнут сервера.

Вдобавок к этому Cloudflare предлагает услугу под названием Universal SSL, где они выдают вам бесплатный SSL-сертификат от своих партнеров CA, поэтому вы получаете HTTPS бесплатно… навсегда.

Почему Cloudflare?

Я знаю, о чем вы думаете: Гилани, вы только что рассказали мне, какой классный Let’s Encrypt. Почему вы говорите о Cloudflare? Что ж, все сводится к простоте.

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

Это приводит к тому, что ваш веб-сайт обслуживается через SSL, даже если исходный сервер не имеет SSL-сертификата, хотя Cloudflare предоставляет вам специальные самозаверяющие сертификаты, которые вы можете поместить на свой исходный сервер для защиты соединения с серверами Cloudflare. Это то, что Cloudflare дает вам с бесплатным планом, и вам даже не нужно продлевать свой сертификат каждые 90 дней.

Как фрилансер, я получаю клиентов, которые хотят, чтобы сайт работал как можно быстрее. Они не понимают и не заботятся о проблемах безопасности, проблемах современной сети или шифровании во время передачи. Некоторым клиентам трудно понять идею доменных имен, и их раздражает, когда им приходится платить 15 долларов в год «только для того, чтобы мой сайт работал». Так что попробуйте объяснить им, почему они должны платить за кластер обратных прокси, защищающий их сайт, который работает на бесплатном хостинге.

Настройка Cloudflare SSL

Давайте снова запачкаем руки. Первое, что нужно сделать, переключиться на маршрутизацию всего вашего трафика через Cloudflare:

Снимок экрана конфигурации Cloudflare, показывающий четыре копии пары строк CNAME, чтобы можно было видеть всплывающие подсказки над значком конфигурации каждой строки, а также окончательную желаемую конфигурацию. В паре есть «амин» над «ценой», и в обеих строках написано «это псевдоним амингилана ...» и «Автоматический» посередине. Сначала в верхней строке отображается значок «DNS и HTTP-прокси», а в нижней строке отображается значок «Только DNS». Щелчком по значку нижняя строка становится такой же, как и верхняя, в результате чего нижняя строка становится зеленой, а маленький значок «i» рядом с «CNAME» исчезает.

Затем в разделе Crypto установите для уровня SSL значение «Полный».

Снимок экрана с разделом SSL, в раскрывающемся списке которого установлено значение «Выкл.». Другими вариантами являются «Гибкий», «Полный» и «Полный (строгий)». Если выбран вариант «Полный», под раскрывающимся списком появляется зеленая метка «АКТИВНЫЙ СЕРТИФИКАТ».

Принудительно «Автоматическая перезапись HTTPS», чтобы отключить предупреждения о смешанном содержимом.

Снимок экрана раздела «Автоматическая перезапись HTTPS», показывающий, что переключатель перемещается из положения «Выкл.» в положение «Вкл.».

На этом этапе наш веб-сайт будет работать как через HTTP, так и через HTTPS. Давайте настроим HTTPS для всего в нашем домене.

Скриншот диалогового окна «Создать правило страницы для gilani.me». Поле «Если URL-адрес соответствует» заполнено «http://*gilani.me/*». В разделе «Тогда настройки» в раскрывающемся поле установлено значение «Всегда использовать HTTPS».

Все сделано. Наш веб-сайт всегда должен загружаться через HTTPS с зеленым рейтингом «Безопасно» в Chrome.

Та же страница проверки цен в браузере, что и раньше, доступ к которой снова осуществляется через pricecheck.gilani.me, но на этот раз снова присутствует метка «Безопасно».

Заключительные слова и соображения безопасности

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

Проницательные среди вас укажут, что в этой настройке есть несколько вопиющих проблем с безопасностью, а именно отсутствие безопасных заголовков HTTP, таких как:

  • Content-Security-Policy : загружает скрипты и активы из белого списка хостов и может запрещать встроенные js.
  • X-Frame-Options : отключает загрузку вашего веб-сайта в iframe.

И ты прав. Страницы GitHub и даже Cloudflare не позволяют настраивать заголовки HTTP . Однако вы можете установить CSP с помощью meta HTML.

Просто вставьте это на свою веб-страницу:

 <meta http-equiv="Content-Security-Policy" content="default-src https:">

Однако на данный момент нет практического способа установить заголовок X-Frame-Options на страницах GitHub, а это означает, что злоумышленник может загрузить вашу веб-страницу в специально созданный iframe и осуществить XSS-атаку. Однако, если вы посвящены, вы можете обойти эту проблему, попросив пользователей подтвердить свой пароль или токен 2FA при каждом конфиденциальном действии или передав токен CSRF при каждом аутентифицированном запросе.

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

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

Масштабирование, неограниченное масштабирование

Идеи, представленные в этой статье, не ограничиваются бесплатным веб-хостингом небольших приложений.

Вы можете создать интерфейсный уровень на основе современной инфраструктуры JavaScript, подключить его к крупномасштабной облачной платформе Backend-as-a-Service (BaaS), такой как Firebase, и создавать сложные приложения, не беспокоясь о серверах, времени безотказной работы, или любой другой вопрос, связанный с инфраструктурой.

Делаем новую захватывающую веб-игру?! Проверьте GameSparks, и все готово.

Использование Github Pages в качестве «стандартной» службы хостинга, которая, как ожидается, будет обрабатывать веб-сайты с высокой пропускной способностью, не рекомендуется и не должно использоваться. Добавление Cloudflare CDN поверх GitHub Pages позволяет этому решению работать. Cloudflare — это гораздо больше, чем бесплатный SSL-сервис. Это компания с глобальной CDN, которая защищает ваш сайт от перегрузок и минимизирует нагрузку на страницы GitHub.

Резюме, признание и ссылки

В этой статье я сделал так, как будто я вручную опубликовал свое приложение React на gh-pages . Я ничего подобного не делал. Я работал над master , и когда пришло время развертывания, я запустил npm run deploy , который запустил скрипт сборки и отправил сборку на gh-pages . Пожалуйста, посмотрите master ветку моего репозитория, чтобы увидеть, как это работает.

Выводы

Плюсы:

  • Мгновенное развертывание
  • Простое сотрудничество
  • Безопасная среда хостинга

Предостережения:

  • Нет доступа к заголовкам HTTP
  • Легко скачать копию сайта
  • Требуется знание GitHub
  • Зависит от поставщиков технологий

Ссылки:

  • Вы найдете исходный код моего приложения по адресу amingilani/price-check.
  • Это приложение доступно по адресу pricecheck.gilani.me и должно быть доступно в течение неопределенного времени.