Netlify как хостинг статических сайтов

12 March 2017 #vps #static

Много был наслышан про Netlify, но только сегодня дошли руки попробовать его в работе. Netlify это сервис для публикации и размещения статических сайтов, с довольно большими возможностями. Здесь есть и dns-хостинг и настройки редиректов и заголовков для определенных файлов, автоматическая минификация js/css файлов и автоматическая встройка js-скриптов на страницы опубликованного сайта.

Для регистрации и последующего логина можно использовать свой логин в Github/Gitlab. И для деплоя сайта есть несколько возможностей:

  1. Использование CI Netlify при комите в репозиторий
  2. Ручная загрузка файлов сайта через веб-интерфейс
  3. Использование node-приложения для публикации сайта
  4. Использование API-сайта

Самое простое – это привязать свой репозиторий к Netlify, указать в настройках результирующую директорию и команду для генерации. Все остальное будет проходить автоматически. Но тут есть ряд ограничений, как например нет возможности использования сторонних пакетов для генерации. И к примеру, включить для jekyll сайта lsi в данном варианте будет невозможно.

Про остальные варианты информация довольно подробно предоставлена в документации сервиса.

Сервис живет за счет привлечения денег со всех проектов, которым требуются дополнительные возможности и которые не являются Open Source. Так как мой сайт является Open Source проектом, и его код доступен всем желающим в репозитории juev.org, провел апргейд своего аккаунта до уровня Open Source, и тем самым получил все возможности сервиса. Но так как Continuous Integration не поддерживает установку сторонних пакетов, пришлось отключить Related Pages после каждой статьи.

Сборка и публикация сайта теперь проходит от 20 до 30 секунд. Что более чем в 4 раза быстрее, чем при использовании Travis.

Хотелось немного поподробнее остановиться на возможности задавать редиректы и веб-заголовки файлов. Для этого используются два дополнительных файла: _redirects и _headers, в которых прописывается требуемая конфигурация. В _headers я определил:

/*
  Cache-Control: max-age=0
  X-UA-Compatible: IE=Edge
/favicon.ico
  Cache-Control: max-age=31536000

А в _redirects:

/rss/ /atom.xml 301

Но как показала практика, для моего сайта этого недостаточно. Указанные файлы должны попадать в корень директории, что используется при публикации. А в jekyll все файлы, начинающиеся с подчеркивания не включаются в деплой. Потребовалось добавить в _config.yaml сайта дополнительный параметр:

include:      ["_redirects", "_headers"]

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

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

Еще один сервис в копилку бесплатных хостингов.