Иногда бывает необходимость быстро запустить статический веб-сайт, и все, что он него нужно – это чтобы он работал и работал как можно быстрее, будь то реальный веб-сайт или базовая целевая страница.
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. Полный список плагинов можно найти здесь. Также вам может пригодиться документация.