Как разместить сайт с Caddy на CentOS 7

Вступление

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

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

Caddy тесно интегрируется с Let’s Encrypt, центром сертификации, который предоставляет бесплатный TLS / SSL-сертификаты и автоматически получает и обновляет сертификаты при необходимости. Другими словами, каждый веб-сайт, который обслуживает Caddy, может автоматически обслуживаться через защищенное соединение без дополнительных настроек или действий.

В этом уроке вы установите и настроите Caddy. После прочтения этого урока у вас будет простой работающий веб-сайт, работающий по протоколу HTTP / 2 и защищенное соединение TLS.

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

  • Один сервер CentOS 7, настроенный с помощью this первоначальное руководство по настройке сервера, включая пользователя без полномочий root.

  • Доменное имя настроено так, чтобы оно указывало на ваш сервер. Это необходимо для того, чтобы Caddy получил сертификат SSL для веб-сайта; без использования правильного доменного имени, веб-сайт не будет безопасно обслуживаться с шифрованием TLS. Вы можете узнать, как указать домены на дроплеты DigitalOcean, следуя How для настройки Имя хоста с помощью DigitalOcean.

  • При желании, текстовый редактор + nano + устанавливается с помощью + sudo yum install nano +. CentOS поставляется с текстовым редактором + vi + по умолчанию, но + nano + может быть более удобным для пользователя.

Шаг 1 - Установка бинарных файлов Caddy

Проект Caddy предоставляет сценарий установки, который извлекает и устанавливает двоичные файлы сервера Caddy. Чтобы выполнить его, введите:

curl -s https://getcaddy.com | bash

Вы можете просмотреть скрипт, посетив + https: // getcaddy.com + в вашем браузере или загрузив файл с помощью + wget или` + curl` перед его выполнением.

Во время установки скрипт будет использовать + sudo + для получения административных привилегий, чтобы поместить файлы Caddy в общесистемные каталоги, поэтому он может запросить у вас пароль.

Вывод команды будет выглядеть так:

Caddy installation script outputDownloading Caddy for linux/amd64...
https://caddyserver.com/download/linux/amd64?plugins=
Extracting...
Putting caddy in /usr/local/bin (may require password)
[sudo] password for sammy:
Caddy 0.10.2
Successfully installed

После завершения сценария двоичные файлы Caddy устанавливаются на сервер и готовы к использованию. Вы можете проверить, что двоичные файлы Caddy установлены, используя + which +, чтобы проверить их местоположение.

which caddy

Вывод команды скажет, что двоичный файл Caddy находится в + / usr / local / bin / caddy +.

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

Шаг 2 - Создание пользователя и группы для Caddy

В то время как Apache и Nginx, два самых популярных HTTP-сервера, создают своих непривилегированных пользователей во время установки из системных пакетов, Caddy этого не делает. По соображениям безопасности его также не следует запускать с использованием учетной записи суперпользователя + root +. На этом этапе мы создадим специального пользователя с именем + caddy, который будет использоваться исключительно для запуска Caddy и доступа к его файлам.

Чтобы создать пользователя с именем + caddy +, давайте наберем:

sudo adduser -r -d /var/www -s /sbin/nologin

Переключатель + -r + делает вновь созданную учетную запись так называемой системной учетной записью, переключатель + -d + обозначает домашний каталог для этого пользователя, в нашем случае это будет + / var / www +, который мы создадим позже. Непривилегированный пользователь не должен иметь возможности войти в систему и получить доступ к системной оболочке, в чем мы убедились с помощью переключателя + -s +, устанавливающего желаемую оболочку в + / sbin / nologin +, системная команда, запрещающая вход в систему. Последний параметр - это имя пользователя - в нашем случае это ++.

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

Шаг 3 - Настройка необходимых каталогов

Автоматическая поддержка TLS Caddy и файл модуля (который мы установим на следующем шаге) ожидают, что определенные каталоги и файлы будут существовать с определенными разрешениями. Мы создадим их всех на этом этапе.

Сначала создайте каталог, в котором будет размещен основной + Caddyfile +, который является файлом конфигурации, который сообщает Caddy, каким веб-сайтам он должен служить и как.

sudo mkdir /etc/caddy

Измените владельца этого каталога на пользователя * root * и его группу на * www-data *, чтобы Caddy мог его прочитать.

sudo chown -R root:caddy /etc/caddy

В этом каталоге создайте пустой + Caddyfile +, который мы отредактируем позже.

sudo touch /etc/caddy/Caddyfile

Создайте другой каталог в + / etc / ssl. Это нужно Caddy для хранения закрытых ключей SSL и сертификатов, которые он автоматически получает от Let’s Encrypt.

sudo mkdir /etc/ssl/caddy

Caddy должен иметь возможность писать в этот каталог, когда он получает сертификат, поэтому сделайте его владельцем * caddy *. Вы можете оставить группу как * root * без изменений по умолчанию:

sudo chown -R caddy:root /etc/ssl/caddy

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

sudo chmod 0770 /etc/ssl/caddy

Последний каталог, который нам нужно создать, это тот, где будет опубликован сам сайт. Мы будем использовать + / var / www +, который является обычным, а также путь по умолчанию при использовании других веб-серверов, таких как Apache или Nginx.

sudo mkdir /var/www

Этот каталог должен полностью принадлежать * caddy *.

sudo chown caddy:caddy /var/www

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

Шаг 4 - Установка Caddy в качестве системной службы

Хотя Caddy не устанавливает себя как сервис, проект предоставляет официальный https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files [+ systemd + unit file]. Этот файл предполагает структуру каталогов, которую мы создали на предыдущем шаге, поэтому убедитесь, что ваша конфигурация соответствует.

Загрузите файл из официального репозитория Caddy. Дополнительный параметр + -o + к команде + curl + сохранит файл в каталоге + / etc / systemd / system / + и сделает его видимым для + systemd +.

sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service

Прежде чем мы сможем двигаться дальше, нам нужно немного изменить файл, чтобы он использовал нашего непривилегированного пользователя + caddy + для запуска сервера.

Давайте откроем файл с помощью + vi + или вашего любимого текстового редактора (вот https://www.digitalocean.com/community/tutorials/install-and-using-the-vim-text-editor-on-a-cloud -server # modal-edit [краткое введение в + vi +])

sudo vi /etc/systemd/system/caddy.service

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

/etc/systemd/system/caddy.service

; User and group the process will run as.
User=
Group=

Измените оба значения на + caddy + следующим образом:

/etc/systemd/system/caddy.service

; User and group the process will run as.
User=
Group=

Сохраните и закройте файл для выхода. Сервисный файл теперь готов к использованию с нашей установкой. Сделать + systemd + осведомленным о новом файле сервиса.

sudo systemctl daemon-reload

Затем включите Caddy для загрузки.

sudo systemctl enable caddy.service

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

sudo systemctl status caddy.service

Вывод должен выглядеть следующим образом:

Caddy service status output● caddy.service - Caddy HTTP/2 web server
  Loaded:  (/etc/systemd/system/caddy.service; ; vendor preset: disabled)
  Active: inactive (dead)
    Docs: https://caddyserver.com/docs

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

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

Шаг 5 - Разрешение соединений HTTP и HTTPS (необязательно)

Если вы следовали Additional Рекомендуемые шаги для новых серверов CentOS 7, а также используете брандмауэр, мы должны вручную добавить правила брандмауэра для прохождения интернет-трафика в Caddy.

Caddy обслуживает веб-сайты с использованием протоколов HTTP и HTTPS, поэтому нам нужно разрешить доступ к соответствующим портам, чтобы сделать Caddy доступным из Интернета.

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

Все три команды при запуске выдают следующее сообщение об успешном завершении:

firewall-cmd outputsuccess

Это позволит Caddy свободно обслуживать сайты для посетителей. На следующем шаге мы создадим образец веб-страницы и обновим + Caddyfile +, чтобы обслужить ее, чтобы протестировать установку Caddy.

Шаг 6 - Создание тестовой веб-страницы и Caddyfile

Давайте начнем с создания очень простой HTML-страницы, которая будет отображать простое сообщение * Hello World! *. Эта команда создаст файл + index.html + в каталоге веб-сайта, который мы создали ранее, только с одной строкой текста + <h1> Hello World! </ H1> + внутри.

echo '<h1>Hello World!</h1>' | sudo tee /var/www/index.html

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

Адрес определения указывается в виде +: //: +. Caddy примет некоторые значения по умолчанию самостоятельно, если вы оставите некоторые поля пустыми. Например, если вы укажете протокол, но не порт, последний будет получен автоматически (т.е. порт + 80 + предполагается для HTTP, а порт + 443 + предполагается для HTTPS). Правила, регулирующие формат адреса, подробно описаны в the официальной документации Caddyfile.

Откройте + Caddyfile +, который вы создали на шаге 2, используя + vi + или ваш любимый текстовый редактор.

sudo vi /etc/caddy/Caddyfile

Вставьте следующее содержимое:

/ И т.д. / кэдди / Caddyfile

http:// {
   root /var/www
   gzip
}

Затем сохраните файл и выйдите. Давайте объясним, что делает этот конкретный + Caddyfile +.

Здесь мы используем +: // + для определения адреса. Это говорит Caddy, что он должен связываться с портом + 80 + и обслуживать все запросы, используя простой протокол HTTP (без шифрования TLS), независимо от имени домена, используемого для подключения к серверу. Это позволит вам получить доступ к веб-сайтам, которые Caddy размещает, используя IP-адрес вашего сервера.

Внутри фигурных скобок нашего серверного блока есть две директивы:

  • Директива + root + сообщает Caddy, где находятся файлы сайта. В нашем примере это + / var / www +, где мы создали тестовую страницу.

  • Директива + gzip + говорит Caddy использовать сжатие Gzip для ускорения работы сайта. Не требует дополнительной настройки.

Как только файл конфигурации будет готов, запустите службу Caddy.

sudo systemctl start caddy

Теперь мы можем проверить, работает ли веб-сайт. Для этого вы используете публичный IP-адрес вашего сервера. Если вы не знаете IP-адрес вашего сервера, вы можете получить его с помощью + curl -4 icanhazip.com +. Как только он у вас появится, зайдите в ваш любимый браузер + http: // +, чтобы увидеть сайт * Hello World! *.

Это означает, что ваша установка Caddy работает правильно. На следующем шаге вы включите безопасное подключение к своему веб-сайту с автоматической поддержкой TLS в Caddy.

Шаг 7 - Настройка автоматического TLS

Одна из главных особенностей, которая отличает Caddy от других веб-серверов, - это возможность автоматически запрашивать и обновлять сертификаты TLS из бесплатного центра сертификации (CA) Let’s Encrypt. Кроме того, настройка Caddy на автоматическое обслуживание веб-сайтов через безопасное соединение требует только одной строки в + Caddyfile +.

Caddy позаботится о том, чтобы обеспечить безопасное соединение HTTPS для всех сконфигурированных серверных блоков и автоматически получать необходимые сертификаты, при условии, что конфигурация блоков сервера удовлетворяет некоторым требованиям.

Для работы TLS должны быть выполнены следующие требования:

  • Caddy должен иметь возможность связываться с портом + 443 + для HTTPS, и этот же порт должен быть доступен из Интернета.

  • Протокол не должен быть установлен на HTTP, порт не должен быть установлен на «+ 80 », и TLS не должен быть явно отключен или переопределен другими настройками (например, с директивой ` tls +` в блоке сервера).

  • Имя хоста должно быть допустимым доменным именем; он не должен быть пустым или иметь значение + localhost + или IP-адрес. Это необходимо, потому что Let Encrypt может выдавать сертификаты только для допустимых доменных имен.

  • Caddy должен знать адрес электронной почты, который можно использовать для восстановления ключей с помощью Let’s Encrypt.

Если вы следовали этому руководству, первое требование уже выполнено. Однако текущий адрес блока сервера настраивается просто как +: // +, определяя простую схему HTTP без шифрования и без имени домена. Мы также не предоставили Caddy адрес электронной почты, который требуется Let Encrypt при запросе сертификата. Если адрес не указан в конфигурации, Caddy запрашивает его во время запуска. Тем не менее, поскольку Caddy установлен как системная служба, он не может задавать вопросы во время запуска и в результате он вообще не запустится должным образом.

Чтобы это исправить, снова откройте + Caddyfile + для редактирования.

sudo vi /etc/caddy/Caddyfile

Сначала замените определение адреса + http: // + на свой домен. Это удаляет небезопасное соединение, вызванное HTTP, и предоставляет имя домена для сертификата TLS. Во-вторых, предоставьте Caddy адрес электронной почты, используя директиву + tls + внутри блока сервера.

Модифицированный + Caddyfile + должен выглядеть следующим образом, с заменой вашего домена и адреса электронной почты:

/ И т.д. / кэдди / Caddyfile

{
   root /var/www
   gzip

}

Сохраните файл и выйдите из редактора. Чтобы применить изменения, перезапустите Caddy.

sudo systemctl restart caddy

Теперь направьте ваш браузер на + https: // +, чтобы проверить, были ли изменения применены правильно. Если это так, вы должны снова увидеть страницу * Hello World! *. На этот раз вы можете проверить, что веб-сайт обслуживается по протоколу HTTPS, просмотрев URL-адрес или символ блокировки в строке URL-адреса.

Заключение

Теперь вы настроили Caddy для правильного обслуживания вашего сайта через безопасное соединение TLS. Он будет автоматически получать и обновлять сертификаты от Let’s Encrypt, обслуживать ваш сайт по защищенному соединению с использованием более нового протокола HTTP / 2 и сокращать время загрузки с помощью сжатия gzip.

Это простой пример для начала работы с Caddy. Вы можете прочитать больше об уникальных функциях и директивах Caddy для + Caddyfile + в official документации Caddy.

Related