Как разместить сайт с Caddy на Ubuntu 16.04

_ Предыдущая версия этого руководства была написана Mateusz Papiernik ._

Автор выбрал Wikimedia Foundation, чтобы получить пожертвование в размере 200 долларов США в рамках Write for DOnations program.

Вступление

Caddy - это веб-сервер, разработанный с учетом простоты и безопасности, который поставляется с рядом функций, полезных для размещения веб-сайтов. Например, он может автоматически получать и управлять сертификатами TLS из Let’s Encrypt, чтобы включить HTTPS, и включает поддержку HTTP / 2. HTTPS - это система для обеспечения безопасности трафика между вашими пользователями и вашим сервером, и она быстро становится основным ожиданием любого веб-сайта, работающего в рабочем состоянии - без него Chrome и Firefox будут предупреждать, что ваш веб-сайт «небезопасен», если пользователи пытаются отправить логин Информация.

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

В этом руководстве вы создадите Caddy из исходного кода и будете использовать его для размещения веб-сайта, защищенного с помощью HTTPS. Затем вы конфигурируете Caddy с помощью + Caddyfile +, устанавливаете плагины Caddy и узнаете, как обновить вашу установку после выпуска новой версии.

Предпосылки

Перед началом работы с этим руководством вам необходимо иметь следующее:

  • Сервер Ubuntu 16.04, настроенный в соответствии с нашим Initial Руководством по установке сервера. Вы должны иметь возможность подключаться к серверу по SSH, входить в систему как пользователь без полномочий root с правами sudo и иметь работающий межсетевой экран, настроенный с использованием UFW.

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

  • Запись «A», указывающая с вашего домена на ваш сервер, и, необязательно, запись «AAAA», если вы хотите включить IPv6. Наше руководство на Setting Up Host Name with DigitalOcean объясняет, как сделай это.

  • Набор инструментов Go language установлен на вашем сервере. Следуйте нашему руководству на Как установить Go 1.6, чтобы настроить Go. Вы также должны иметь некоторое представление о том, как скомпилировать код Go и как работает инструмент командной строки + go +. Чтобы узнать об этом, следуйте нашему руководству на Building Go Executables ,

Шаг 1 - Сборка Кэдди

На этом этапе вы получите исходный код Caddy и убедитесь, что сможете его скомпилировать. Caddy написан на Go, поэтому используйте инструмент командной строки + go get, чтобы получить исходный код Caddy из GitHub и сохранить его в` + $ GOPATH / src / github.com / mholt / caddy`:

go get github.com/mholt/caddy/caddy

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

Чтобы просмотреть все предыдущие версии, сначала перейдите в каталог, в котором вы сохранили исходный код Caddy:

cd $GOPATH/src/github.com/mholt/caddy

Затем просмотрите все предыдущие выпуски Caddy с помощью команды + git tag +:

git tag

Вы увидите вывод, похожий на следующий:

Outputv0.10.0
v0.10.1
v0.10.10
v0.10.11
v0.10.12
v0.10.2
v0.10.3
v0.10.4
v0.10.5
. . .

Всякий раз, когда выпускается стабильная версия Caddy, авторы сообщают об этом в Git, добавляя тег. Вы можете использовать Git, чтобы вернуть код к тому, каким он был во время последнего стабильного выпуска. Найти самый большой номер версии в выходных данных; на момент написания, это + v0.10.12 +.

Поскольку позже вы будете изменять исходный код для установки некоторых плагинов, создайте новый branch для хранения ваших изменений. В Git ветки - это способы работы над разными версиями кода одновременно. Они позволяют вам переключаться между версией кода с вашими личными изменениями и «официальной» версией кода. Чтобы создать новую ветку, используйте команду + git checkout +, которая переключает ветви. Опция + -b + даст Git команду создать новую ветку с именем ` из версии `. Замените ` на то, что вы хотите назвать веткой, а ` - последней стабильной версией, которую вы определили ранее:

git checkout -b "" ""

Это вернет вашу версию исходного кода Caddy обратно к последней стабильной версии, и вы попадете в новую ветку, где сможете сохранить свои изменения в коде. Когда вы обновите Caddy в будущем, вы объедините изменения в эту новую ветку.

На этом этапе вы готовы к сборке Caddy с помощью инструмента + go install для компиляции исходного кода в двоичный файл. Хотя синтаксис команды может показаться, что он устанавливает Caddy с веб-сайта (github.com), на самом деле это относится к локальному пути на сервере, на котором мы только что работали с репозиторием Git (`+ $ GOPATH / src / github). .com / mholt / кэдди + `):

go install github.com/mholt/caddy/caddy

После компиляции исходного кода выполните команду + caddy +, чтобы запустить сервер. Обратите внимание, что для того, чтобы это работало правильно, ваш путь Go должен быть установлен в + $ GOPATH / bin +, как описано в предварительных требованиях:

caddy

Эта команда выдаст следующий вывод:

OutputActivating privacy features... done.
http://:2015
WARNING: File descriptor limit 1024 is too low for production servers. At least 8192 is recommended. Fix with "ulimit -n 8192".

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

Чтобы продемонстрировать, что Caddy создается из вашего исходного кода, добавьте строку в исходный код Caddy для печати некоторого текста при запуске Caddy. Используйте + nano + или предпочитаемый вами редактор, чтобы открыть + $ GOPATH / src / github.com / mholt / caddy / caddy / caddymain / run.go + .:

nano $GOPATH/src/github.com/mholt/caddy/caddy/caddymain/run.go

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

Найдите функцию + Run () + и добавьте выделенный текст в качестве первой строки в фигурных скобках. Это напечатает текст «Hello from Caddy!» Перед запуском сервера:

$ GOPATH / SRC / github.com / mholt / Кэдди / Кэдди / caddymain / run.go

. . .
// Run is Caddy's main() function.
func Run() {


       flag.Parse()

       caddy.AppName = appName
       . . .
}

Нажмите + CTRL + X +, + Y +, затем + ENTER +, чтобы сохранить и закрыть файл. Если вы снова запустите команды + go install + и + caddy +, вы увидите сообщение, которое вы добавили к функции + Run () + в верхней части вывода:

go install github.com/mholt/caddy/caddy
caddy
Output
Activating privacy features... done.
http://:2015
WARNING: File descriptor limit 1024 is too low for production servers. At least 8192 is recommended. Fix with "ulimit -n 8192".

С этим вы успешно создали Caddy из исходного кода. Вы можете удалить добавленную строку из + $ GOPATH / src / github.com / mholt / caddy / caddy / caddymain / run.go +, если хотите, но если вы это сделаете, вам придется перекомпилировать код. На следующем шаге вы установите Caddy в качестве службы, чтобы она автоматически запускалась при загрузке, а затем изменили параметры ее владельца и прав доступа, чтобы обеспечить безопасность сервера.

Шаг 2 - Установка Caddy

Теперь, когда вы убедились, что можете создать Caddy, пришло время configure systemd service, чтобы Caddy мог запускаться автоматически при запуске системы. Systemd - это комплексное решение для управления процессами в Linux. Caddy поставляется с файлом + caddy.service ie, который системы могут использовать для управления службой Caddy. Этот служебный файл содержит некоторые предположения относительно среды, в которой будет работать Caddy, поэтому есть несколько вещей, которые вы, вероятно, захотите изменить перед установкой.

Для начала скопируйте двоичный файл Caddy в + / usr / local / bin +, стандартное расположение для двоичных файлов, которые не управляются менеджером пакетов Ubuntu и не являются ключом к работе системы:

sudo cp $GOPATH/bin/caddy /usr/local/bin/

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

sudo chown root:root /usr/local/bin/caddy

Затем установите разрешения для файла для двоичного файла + 755 + - это дает * root * полные права на чтение / запись / выполнение для файла, в то время как другие пользователи смогут только читать и выполнять его:

sudo chmod 755 /usr/local/bin/caddy

Поскольку процесс Caddy не будет запускаться с правами * root *, Linux предотвратит его привязку к портам +: 80 + или +: 443 + (стандартные порты для HTTP и HTTPS соответственно), так как они являются привилегированные операции. Для просмотра в Интернете Caddy должен быть связан с одним из этих портов. В противном случае пользователям потребуется добавить определенный номер порта к URL-адресу сервера в своем браузере, чтобы просмотреть контент, который он будет обслуживать.

Использование команды + setcap + может позволить процессу Caddy связываться с низкими портами без запуска с правами * root *. + setcap + полезен для разрешения процессу выполнять определенную привилегированную операцию без предоставления ему полных прав суперпользователя. + cap_net_bind_service = + ep + указывает, что вы хотите дать процессу разрешения + CAP_NET_BIND_SERVICE +, который включает привязку к привилегированным портам:

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

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

sudo mkdir /etc/caddy

Установите владельца этого каталога на * root *, а его группу на * www-data *. * www-data * - это стандартная учетная запись пользователя для запуска веб-серверов, а также учетная запись, в которой будет работать Caddy. Установка владельца таким образом гарантирует, что у вас есть доступ на чтение и запись к двоичному файлу (через учетную запись * root *), и процесс Caddy может также выполнять чтение и запись в него (поскольку он будет работать как * www-data *), но другие пользователи не будут иметь к нему доступ. При использовании с + chown + флаг + -R + меняет владельца всех подкаталогов и файлов в каталоге + / etc / caddy +, а не только на сам каталог:

sudo chown -R root:www-data /etc/caddy

На более позднем этапе в этом руководстве будет рассказано, как включить автоматический TLS с помощью Let Encrypt. Готовясь к этому, создайте каталог для хранения любых сертификатов TLS, которые получит Caddy, и задайте для него те же правила владения, что и для каталога + + etc / caddy +:

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

Caddy должен иметь возможность записывать сертификаты в этот каталог и читать из него, чтобы шифровать запросы. По этой причине измените разрешения для каталога + / etc / ssl / caddy + так, чтобы он был доступен только для * root * и * www-data *:

sudo chmod 0770 /etc/ssl/caddy

Затем создайте каталог для хранения файлов, которые будет размещать Caddy. + / var / www / + является де-факто стандартным местом для хранения файлов, обслуживаемых по HTTP:

sudo mkdir /var/www

Затем установите владельца и группу каталога на * www-data *, пользователя по умолчанию для операций веб-сервера в Ubuntu:

sudo chown www-data:www-data /var/www

Caddy настраивается через файл с именем + Caddyfile +; может быть полезно думать об этом как о + httpd.conf + в Apache или каталоге конфигурации Nginx + sites-available +. Служба systemd для Caddy будет ожидать, что этот файл будет храниться в + / etc / caddy, поэтому создайте` + Caddyfile` с помощью + touch +:

sudo touch /etc/caddy/Caddyfile

Чтобы установить службу Caddy, скопируйте файл модуля systemd из исходного кода Caddy в + / etc / systemd / system +, расположение для служб systemd. Это даст systemd возможность обнаруживать и контролировать сервис Caddy:

sudo cp $GOPATH/src/github.com/mholt/caddy/dist/init/linux-systemd/caddy.service /etc/systemd/system/

Измените права доступа к файлу службы, чтобы его мог изменять только его владелец, * root *:

sudo chmod 644 /etc/systemd/system/caddy.service

Затем используйте инструмент командной строки + systemctl + для перезагрузки systemd. Это заставит systemd обнаруживать службу Caddy, хотя мы пока не будем ее запускать:

sudo systemctl daemon-reload

Проверьте, обнаружил ли systemd службу Caddy, запустив + systemctl status +:

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

Если вы видите этот же вывод, то Caddy был правильно обнаружен systemd.

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

Используйте инструмент командной строки + ufw +, чтобы отключить брандмауэр для портов +: 80 + и +: 443 +, что позволит Caddy взаимодействовать через HTTP и HTTPS соответственно:

sudo ufw allow 80
sudo ufw allow 443

Используйте + ufw status +, чтобы проверить, сработали ли ваши изменения:

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

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

Шаг 3 - Настройка Caddy

Чтобы ваша установка Caddy использовалась в качестве функционального веб-сервера, необходимо изменить несколько параметров. Выполняя эти изменения, мы рассмотрим синтаксис конфигурации + Caddyfile +, исследуем несколько сценариев конфигурации и предоставим страницу-заполнитель по HTTP.

Чтобы начать настройку Caddy, создайте базовый файл HTML для его обслуживания. HTML - это язык, который описывает содержимое веб-страниц, и этот файл будет функционировать в качестве заполнителя для демонстрации размещения веб-сайта с Caddy. Если вы решите использовать Caddy для размещения своего собственного веб-сайта, вы замените этот файл тем содержимым, которое хотите разместить. Поместите этот файл в каталог + / var / www / +, который вы установили ранее. Имя + index.html + является значимым, поскольку для большинства веб-серверов это относится к странице «по умолчанию», и пользователям, которые переходят на ваш домен, в первую очередь будет предоставлен этот файл:

sudo touch /var/www/index.html

Откройте новый файл в выбранном вами редакторе:

sudo nano /var/www/index.html

Добавьте следующее содержимое в файл:

/var/www/index.html

<!DOCTYPE html>
<html>
 <head>
   <title>Hello from Caddy!</title>
 </head>
 <body>
   <h1 style="font-family: sans-serif">This page is being served via Caddy</h1>
 </body>
</html>

Появится заголовок с текстом «* Эта страница обслуживается через Caddy *».

Сохраните и закройте файл, затем откройте файл конфигурации + Caddyfile +, который вы создали ранее:

sudo nano /etc/caddy/Caddyfile

Измените файл, включив в него следующее содержимое:

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

:80 {
   root /var/www
}

В первой строке +: 80 + устанавливает имя хоста сервера - в Caddy это называется label. Имя хоста - это доменное имя, где Caddy будет отвечать на запросы. В этом случае установите значение +: 80 +, что означает порт +: 80 + сервера. Это пока не позволяет серверу работать по HTTPS, поскольку Caddy попытается включить это автоматически, но мы хотим сделать это с помощью плагина.

По умолчанию Caddy пытается извлечь SSL-сертификат из Let Encrypt, сделав ресурс доступным по HTTP, например, разместив файл. Однако, если вы хотите запустить внутреннюю службу с использованием Caddy, вы можете не захотеть выставлять сервер в общедоступном Интернете. Использование плагина позволяет вам использовать задачу Let Encrypt DNS. Это подразумевает, что Caddy создает запись DNS «TXT», чтобы доказать контроль над сервером, и позволяет извлекать сертификаты без необходимости принимать внешние HTTP-запросы. Это оставляет вам больше возможностей для запуска Caddy в будущем.

После +: 80 + - блок конфигурации, заключенный в фигурные скобки, в который будут идти конфигурации для сайта. На следующей строке мы видим + root + directive. Директивы - это фактические параметры конфигурации Caddy, и их добавление изменяет поведение Caddy при обслуживании веб-сайта. Директивы могут иметь arguments, которые являются параметрами того, как директива должна вступить в силу. В этом случае директива + root + имеет один аргумент: + / var / www +. Эта директива устанавливает каталог, в котором находятся файлы, которые должен обслуживать Caddy. Тем не менее, директивы не обязаны иметь аргументы. Например, вы можете добавить директиву + gzip + без аргументов для сжатия веб-страниц перед их отправкой клиенту, что ускоряет их загрузку.

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

:80 {
   root /var/www

}

Директивы могут быть сконфигурированы с подкаталогами, которые обеспечивают дополнительную функциональность. Они помещаются в свои собственные блоки конфигурации, опять же с использованием фигурных скобок. Например, хотя директива + gzip + работает сама по себе, мы можем использовать подкаталог + ext +, чтобы сжимать только определенные типы файлов, или подкаталог + level +, чтобы контролировать, какой уровень сжатия будет происходить (1 является самый низкий и 9 самый высокий).

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

:80 {
   root /var/www
   gzip



}

Caddy имеет огромное количество различных директив для многих случаев использования. Например, директива https://caddyserver.com/docs/fastcgi [+ fastcgi +] может быть полезна для включения PHP. Директива https://caddyserver.com/docs/markdown [+ markdown +] может использоваться для автоматического преобразования файлов Markdown в HTML перед их обслуживанием, что может быть полезно для создания простого блога.

Сохраните и закройте + Caddyfile + и проверьте, что все работает правильно. Используйте + systemctl для запуска службы Caddy:

sudo systemctl start caddy

Затем запустите + systemctl status +, чтобы найти информацию о состоянии службы Caddy:

sudo systemctl status caddy

Вы увидите следующее:

Output● caddy.service - Caddy HTTP/2 web server
  Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: enabled)
  Active:  (running) since Sat 2018-01-27 11:37:06 UTC; 7min ago
    Docs: https://caddyserver.com/docs
Main PID: 2973 (caddy)
   Tasks: 6
  Memory: 3.2M
     CPU: 24ms
  CGroup: /system.slice/caddy.service
          └─2973 /usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp

Jan 27 11:37:06 caddy-tutorial-testing-0 systemd[1]: Started Caddy HTTP/2 web server.
Jan 27 11:37:06 caddy-tutorial-testing-0 caddy[2973]: Activating privacy features... done.
Jan 27 11:37:06 caddy-tutorial-testing-0 caddy[2973]: http://
Jan 27 11:37:06 caddy-tutorial-testing-0 caddy[2973]: 2018/01/27 11:37:06 http://

Если вы переходите к своему домену, вы должны увидеть, что Caddy работает, и должна появиться ваша примерная веб-страница. После подтверждения этого используйте + systemctl +, чтобы остановить службу Caddy, поскольку все еще необходимо внести некоторые изменения:

sudo systemctl stop caddy

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

Шаг 4 - Использование плагинов

Плагины - это способ изменить поведение Caddy. Как правило, это небольшие фрагменты кода, которые мы можем вставить в Caddy, чтобы добавить дополнительные директивы для конкретных случаев использования. Самый простой способ понять плагины - это сразу подключиться и попробовать один из них, поэтому мы установим плагин «+ minify +». Этот плагин удаляет лишние пробелы и избыточный код из некоторых файлов, уменьшая размер каждого файла, и снова, помогая ускорить время загрузки.

Начните с возврата туда, где Go сохранил исходный код Caddy, так как вам нужно изменить это, чтобы установить плагин:

cd $GOPATH/src/github.com/mholt/caddy

Снова откройте файл Caddy + run.go +. Как мы уже говорили ранее, это одна из первых частей Caddy, которая запускается, и это место, где установлены плагины.

nano caddy/caddymain/run.go

В этом файле вы увидите объявление + import, которое выглядит так:

$ GOPATH / SRC / github.com / mholt / Кэдди / Кэдди / caddymain / run.go

. . .
import (
   "errors"
   "flag"
   "fmt"
   "io/ioutil"
   "log"
   "os"
   "runtime"
   "strconv"
   "strings"

   "gopkg.in/natefinch/lumberjack.v2"

   "github.com/xenolf/lego/acmev2"

   "github.com/mholt/caddy"
   // plug in the HTTP server type
   _ "github.com/mholt/caddy/caddyhttp"

   "github.com/mholt/caddy/caddytls"
   // This is where other plugins get plugged in (imported)
)
. . .

Чтобы установить плагин, добавьте + _" github.com/path/to/plugin "+ к этой директиве + import +. Для некоторых плагинов могут потребоваться небольшие изменения в конфигурации, поэтому обязательно прочитайте документацию, которую вы устанавливаете. Вы можете найти список популярных плагинов на левой панели Caddy документации, в разделе * Плагины *.

Репозиторий плагина + minify + GitHub находится по адресу hacdias/caddy-minify, поэтому добавьте следующее внизу объявления импорта:

$ GOPATH / github.com / mholt / Кэдди / Кэдди / caddymain / run.go

. . .
import (
   . . .
   "github.com/mholt/caddy/caddytls"
   // This is where other plugins get plugged in (imported)


)

Вам необходимо зафиксировать свой код, когда вы вносите в него изменения, чтобы при объединении любых новых обновлений эти изменения не терялись. Если вы ранее не фиксировали код на этом сервере, вам нужно будет указать имя и адрес электронной почты, чтобы Git мог идентифицировать вас в журналах. Команда + git config позволяет вам установить эти параметры, а флаг` + - global` применяет их для любых репозиториев, с которыми вы можете работать в будущем. Если вы не отправите код в общедоступный репозиторий, такой как GitHub, эти детали не будут опубликованы.

git config --global user.email ""
git config --global user.name ""

Теперь, когда вы установили свое имя пользователя и адрес электронной почты, добавьте все файлы, которые вы изменили, в stage Git (кеш, используемый для хранения состояния кода перед фиксацией), выполнив следующее:

git add -A .

Теперь запустите + git commit +, чтобы сохранить изменения в текущей ветке. Опция + -m + позволяет вам установить сообщение фиксации, чтобы вы могли записать, что вы изменили. Это сообщение можно найти, просмотрев журналы Git:

git commit -m "Added minify plugin"

Теперь у вас есть путь к плагину в вашем коде, но вам все равно нужно скачать плагин локально, чтобы Go мог на самом деле получить к нему доступ. Эта команда автоматически выберет все зависимости Caddy при запуске из каталога + $ GOPATH / src / github.com / mholt / caddy +:

go get ./...

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

Используйте команду + go install для компиляции Caddy:

go install github.com/mholt/caddy/caddy

Если Caddy был успешно построен, эта команда завершится без вывода. Скопируйте сгенерированный двоичный файл в + / usr / local / bin + и настройте разрешения для двоичного файла, как вы делали ранее - вы должны выполнять эти шаги каждый раз, когда вы перестраиваете Caddy, чтобы обеспечить его функциональность и безопасность.

sudo cp $GOPATH/bin/caddy /usr/local/bin/
sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

Чтобы продемонстрировать, что плагин был успешно установлен, откройте ваш + Caddyfile +.

sudo nano /etc/caddy/Caddyfile

Включите плагин, добавив следующую строку в блок конфигурации:

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

:80 {
   root /var/www
   gzip

}

Теперь запустите ваш сервер, используя + systemctl +:

sudo systemctl start caddy

Caddy теперь работает и минимизирует все файлы, которые он обслуживает, включая файл + index.html +, который вы создали ранее. Вы можете наблюдать за «минимизацией» в работе, используя cURL, инструмент командной строки для создания веб-запросов. Запуск + curl + без параметров или флагов извлечет содержимое веб-страницы и отобразит его в терминале. Выполните следующую команду, чтобы запросить файл + index.html + у Caddy, заменив ++ вашим доменом.

curl http://

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

Output<!doctype html><title>Hello from Caddy!</title><h1 style=font-family:sans-serif>This page is being served via Caddy</h1>

Этот же метод установки будет работать для других плагинов Caddy. Вы сможете еще больше попрактиковаться в добавлении плагинов, установив плагин + tls.dns.digitalocean + для автоматического включения защищенного HTTPS-трафика.

Шаг 5 - Включение автоматического TLS с Let’s Encrypt

Caddy по умолчанию включает HTTPS с помощью Let Encrypt, что полезно, так как легко получить неверные сведения о HTTPS. Подход Caddy к HTTPS безопасен и не заставляет вас углубляться в конфигурацию для шифрования вашего трафика. Однако Caddy по умолчанию использует метод + HTTP-01 + для проверки с помощью Let’s Encrypt того, что вы действительно являетесь владельцем своего домена. Этот метод включает размещение специального файла (содержащего ответ на вызов, отправленный Let’s Encrypt) в определенное место на веб-сайте. Хотя этот метод работает, он требует, чтобы ваш сайт был общедоступным. Это может быть проблемой для определенных конфигураций брандмауэра или если вы используете Caddy в качестве внутренней службы для вашего бизнеса.

В качестве альтернативы вы можете установить плагин Caddy + tls.dns.digitalocean +, который вместо этого будет использовать метод проверки + DNS-01 +. Этот плагин аутентифицируется с помощью Let Encrypt, добавляя новую DNS-запись «TXT» для вашего домена, которая не повлияет на работу вашего веб-сайта. Он использует API-интерфейс DigitalOcean для управления DNS, что дает вам возможность извлекать сертификат, даже если ваш сервер недоступен для общественности. Для получения дополнительной информации о различных типах записей DNS, прочитайте наш https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean#txt-records[Introduction в DigitalOcean DNS.

Способ установки плагина Caddy + tls.dns.digitalocean + практически идентичен тому, как вы установили плагин + minify +. Для начала откройте + $ GOPATH / src / github.com / mholt / caddy / caddy / caddymain / run.go +:

nano $GOPATH/src/github.com/mholt/caddy/caddy/caddymain/run.go

Добавьте местоположение плагина:

$ GOPATH / github.com / mholt / Кэдди / Кэдди / caddymain / run.go

. . .
import (
   . . .
   "github.com/mholt/caddy/caddytls"
   // This is where other plugins get plugged in (imported)

   _ "github.com/hacdias/caddy-minify"

)

Чтобы обновить Caddy, перейдите в исходный репозиторий Caddy и передайте изменения в Git:

cd $GOPATH/src/github.com/mholt/caddy
git add -A .
git commit -m "Add DigitalOcean DNS provider"

Затем установите все зависимости и соберите Caddy, как вы это делали ранее:

go get ./...
go install github.com/mholt/caddy/caddy

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

sudo systemctl stop caddy
sudo cp $GOPATH/bin/caddy /usr/local/bin/
sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

Затем настройте Caddy для работы с API DigitalOcean для установки записей DNS. Перейдите на The вкладка API в вашей учетной записи DigitalOcean и выберите * Создать новый токен *:

изображение: https: //assets.digitalocean.com/articles/securely_deploy_caddy_ubuntu_16_04/caddy_spaces_api.png [Страница приложений и API DigitalOcean]

Дайте вашему токену описательное имя (например, ++) и убедитесь, что выбран * Write (необязательно) *. Затем нажмите * Создать токен *:

изображение: https: //assets.digitalocean.com/articles/securely_deploy_caddy_ubuntu_16_04/caddy_personal_token.png [Создание токена личного доступа]

Нажмите на сгенерированный токен, чтобы скопировать его, и запишите его там, где вы его не потеряете. Caddy должен получить доступ к этому токену в качестве переменной среды для настройки DNS DigitalOcean. Служебные файлы systemd позволяют вам определять переменные среды, которые будут включены в среду процесса. Отредактируйте файл службы Caddy в каталоге + / etc / systemd / system / +, а не в версии в репозитории Caddy Git. Добавьте свой ключ API к версии файла вне репозитория Git, чтобы избежать случайной фиксации приватного токена в общедоступном репозитории Caddy:

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

Найдите строку, начинающуюся с + Environment = + в разделе + [Service] +. Эта строка определяет переменные среды, которые должны быть переданы процессу Caddy. Добавьте пробел в конце этой строки, затем добавьте переменную + DO_AUTH_TOKEN +, за которой следует только что созданный токен:

/etc/systemd/system/caddy.service

[Service]
Restart=on-abnormal

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

; Letsencrypt-issued certificates will be written to this directory.
Environment=CADDYPATH=/etc/ssl/caddy

Сохраните и закройте этот файл, затем перезагрузите демон systemd, как вы делали это ранее, чтобы убедиться, что конфигурация обновлена:

sudo systemctl daemon-reload

Запустите + systemctl status +, чтобы проверить, что ваши изменения конфигурации были в порядке:

sudo systemctl status caddy

Это произведет вывод, подобный следующему. Обратите особое внимание на начало строки + Loaded: +. Статус +loaded + указывает, что ваши изменения в конфигурации службы были успешными. Если при настройке службы systemd возникает ошибка, вместо этой строки будет отображаться состояние «+ error » вместе с объяснением, почему systemd не может интерпретировать файл службы. Следующая строка, начинающаяся с ` Active: `, указывает, работает ли служба. Поскольку вы остановили Caddy ранее на этом шаге, на экране отобразится ` inactive `. Когда папа запущен, это покажет ` enabled` или` + running`.

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

Вам нужно внести пару небольших изменений в ваш + Caddyfile +, поэтому откройте его для редактирования:

sudo nano /etc/caddy/Caddyfile

Добавьте выделенные строки в + Caddyfile +, обязательно заменив ++ своим доменом. Использование домена, а не просто порта для имени хоста, приведет к тому, что Caddy будет обслуживать запросы по HTTPS. Директива + tls + настраивает поведение Caddy при использовании + TLS +, а подкаталог + dns + указывает, что Caddy должен использовать систему + DNS-01 +, а не + HTTP-01 +:

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

{
   root /var/www
   gzip
   minify



}

Ваш сайт готов к развертыванию. Сначала запустите сервер с помощью + systemctl +, а затем + enable + it. Это настроит Caddy для запуска при загрузке:

sudo systemctl start caddy
sudo systemctl enable caddy

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

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

Шаг 6 - Обновление вашей установки Caddy

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

Мы будем использовать Git для обновления состояния нашего исходного кода. Сначала перейдите в исходный каталог + caddy +:

cd $GOPATH/src/github.com/mholt/caddy

Убедитесь, что вы находитесь на ветке, созданной на шаге 1, с помощью + git checkout +:

git checkout

Затем используйте + git fetch +, чтобы извлечь изменения из удаленного репозитория. Когда Git клонирует репозиторий Caddy, он будет поддерживать ссылку на _ upstream репозиторий _ - центральное место, где происходят изменения. Git ссылается на вышестоящий репозиторий с именем + origin +, поэтому вам нужно извлечь из origin:

git fetch origin

Изменения в хранилище теперь присутствуют в вашей системе и хранятся в другой ветке. Используйте + git tag +, чтобы увидеть самый последний выпуск, поскольку вы все равно должны использовать выпущенные версии Caddy, а не код между выпусками:

git tag

Как и прежде, просматривайте список, пока не найдете самую последнюю версию. Git включает в себя инструмент для слияния двух разных веток кода - + git merge. Введите следующее, чтобы объединить изменения из последней версии в вашу рабочую ветку. Обязательно замените ++ на имя вашей ветви и номер версии на последнюю, которую вы только что определили:

git merge

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

Предполагая, что нет конфликтов слияния, переустановите Caddy с помощью того же процесса, который вы выполняли в этом руководстве. Во-первых, используйте + go install для восстановления двоичного файла:

go install github.com/mholt/caddy/caddy

Затем остановите службу Caddy и скопируйте новый двоичный файл:

sudo systemctl stop caddy
sudo cp $GOPATH/bin/caddy /usr/local/bin/

Установите разрешения для двоичного файла:

sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

Наконец, используйте + systemctl +, чтобы снова запустить службу Caddy:

sudo systemctl start caddy

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

Заключение

Следуя этому руководству, вы успешно развернули веб-сайт с помощью Caddy. Хорошим следующим шагом было бы найти способ получать уведомления о выходе новых версий Caddy. Например, вы можете использовать канал Atom для выпусков Caddy или специальный сервис, такой как Sibbell. Было бы неплохо создать скрипт для автоматизации процесса обновления сервера - вы могли бы даже объединить их и создать инструмент сборки, который автоматически перестраивает Caddy при выходе новой версии. В противном случае вы можете изучить Caddy’s document и узнать, как лучше настроить его в соответствии с вашими потребностями.

Related