Развертывание автоматизированного сайта на основе Git за 5 минут

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

Caddy – это современный веб-сервер, ориентированный на простоту и безопасность работы. Он включает встроенную поддержку Git и Let’s Encrypt благодаря своей архитектуре, основанной на плагинах.

Caddy очень прост в использовании. В этом мануале вы узнаете, как развернуть на удалённом сервере статический веб-сайт, синхронизированный с репозиторием Git, менее чем за 5 минут.

Требования

  • Для работы вам понадобится сервер Ubuntu 16.04, настроенный по этому мануалу.
  • Доменное имя.

1: Установка Caddy

Caddy предоставляет готовые бинарные  файлы на своем веб-сайте. Загрузите Caddy на свой сервер:

wget -O caddy.tar.gz "https://caddyserver.com/download/linux/amd64?plugins=http.git&license=personal"

Эта команда загрузит бинарный файл Caddy со следующими параметрами:

Platform: Linux 64-bit
Plugins: http.git
License: Personal

Имейте в виду: личная лицензия доступна только для некоммерческого использования.

Извлеките загруженный архив в новый каталог и перейдите в него:

mkdir caddy
tar vxf caddy.tar.gz -C caddy
cd caddy

Архив содержит бинарный файл Caddy и служебный файл Systemd. Мы будем использовать оба эти файла в этом руководстве. Сначала установите бинарный файл:

sudo cp caddy /usr/local/bin
sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy

Поскольку Caddy будет служить веб-сервером на фронт-енде, он должен иметь возможность прослушивать порты 80 и 443. Linux требует, чтобы бинарные файлы запускались с правами root для прослушивания на любом порту ниже 1024. Однако некоторым бинарным файлам можно позволить делать это без полных привилегий root:

sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

Затем создайте конфигурационные каталоги Caddy и установите соответствующие разрешения:

sudo mkdir /etc/caddy
sudo chown -R root:www-data /etc/caddy
sudo mkdir /etc/ssl/caddy
sudo chown -R www-data:root /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy

Затем установите файл сервиса Systemd:

sudo cp init/linux-systemd/caddy.service /etc/systemd/system/
sudo chown root:root /etc/systemd/system/caddy.service
sudo chmod 644 /etc/systemd/system/caddy.service
sudo systemctl daemon-reload

2: Настройка DNS

Перед настройкой и запуском Caddy нужно настроить DNS, чтобы Caddy мог выдавать SSL-сертификаты от Let’s Encrypt.

Добавьте свое доменное имя в настройки вашего сервера. Мы создадим две записи DNS, указывающие на удаленный сервер: для IPv4 и для IPv6.

Первая запись будет типа А. В качестве имени хоста введите @. Выберите свой сервер в поле Will Direct To и добавьте запись. Вторая запись будет типа AAAA и должна иметь те же настройки.

3: Настройка Caddy

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

Файл конфигурации Caddy будет находиться в /etc/caddy/Caddyfile. Откройте файл в текстовом редакторе (nano или vim) и введите в него:

example.com {
tls you@example.com
internal /.git
git https://github.com/kamaln7/basic-static-website.git {
interval 300
}
gzip
redir 301 {
if {scheme} is http
/  https://{host}{uri}
}
}

Замените example.com вашим доменным именем, а you@example.com – вашим адресом электронной почты. Этот адрес будет использоваться для выдачи сертификатов Let’s Encrypt для вашего домена, поэтому обязательно введите действительный адрес, к которому у вас есть доступ.

Этот файл содержит основные значения по умолчанию: сжатие gzip будет использоваться по необходимости, весь HTTP-трафик будет перенаправлен на HTTPS.

Основной частью этой конфигурации является блок git. Он настраивает Caddy на использование содержимого репозитория Git в качестве файлов веб-сайта, проверяя наличие обновлений каждые 5 минут.

4: Запуск Caddy

Запустите Caddy и включите сервис (чтобы добавить его в автозагрузку):

sudo systemctl start caddy
sudo systemctl enable caddy

Веб-серверу Caddy может потребоваться несколько секунд, чтобы получить сертификат от Let’s Encrypt и клонировать репозиторий, но теперь вы сможете найти свое доменное имя и увидеть свой веб-сайт.

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

5: Настройка веб-хуков (опционально)

Включить мгновенное развертывание с помощью веб-хуков

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

В Caddy настроить веб-хуки очень просто. Для этого потребуется секретный ключ – вы можете использовать все, что захотите. Программа uuidgen – это удобный инструмент, который позволяет легко генерировать случайную и сложную строку символов. Просто запустите uuidgen и скопируйте его вывод.

Отредактируйте Caddyfile и добавьте следующую строку в блок Git, заменив секретный ключ своим значением:

hook /github_hook secret

Перезапустите Caddy, чтобы применить изменения:

sudo systemctl restart caddy

Затем настройте Github для использования новой конечной точки веб-хука: перейдите на страницу настроек вашего репозитория и нажмите Webhooks. Добавьте новый веб-хук и установите в Payload URL значение https://domain.com/github_hook. Установите в Content type значение application/json, введите свой секретный ключ и нажмите Add Webhook.

Теперь все изменения, сделанные в вашем Git-репозитории, будут отображаться на вашем сайте в считанные секунды. Например, если вы используете этот образец веб-сайта, вы можете попробовать изменить цвет выделения на синий, заменив b—gold на b—blue. Отправьте коммит, перезагрузите страницу, и вы увидите ваше изменение на сайте.

Заключение

Теперь вы умеете быстро запускать простой сайт на основе вашего репозитория Git с помощью Caddy. Сайт поддерживает сертификаты от Let’s Encrypt. Caddy – это многозадачный веб-сервер, который поддерживает много полезных функций и обработку Markdown. Полный список плагинов можно найти здесь. Также вам может пригодиться документация.

Tags: , ,