Как установить WordPress с помощью Docker Compose

Вступление

WordPress является бесплатным и открытым исходным кодом Content Система управления (CMS) построен на базе MySQL с обработкой PHP. Благодаря своей расширяемой архитектуре плагинов и системе шаблонов, а также тому факту, что большая часть его администрирования может осуществляться через веб-интерфейс, WordPress является популярным выбором при создании веб-сайтов различных типов, от блогов до страниц продуктов и сайтов электронной коммерции.

Запуск WordPress обычно включает установку LAMP (Linux, Apache, MySQL и PHP) или https://www.digitalocean.com / community / tutorials / digitalocean-community-glossary # lemp Стек [LEMP] (Linux, Nginx, MySQL и PHP), который может занимать много времени. Однако с помощью таких инструментов, как Docker и Docker Compose, вы можете упростить процесс настройки предпочитаемого стека и установки WordPress. Вместо ручной установки отдельных компонентов вы можете использовать images, которые стандартизируют такие вещи, как библиотеки, файлы конфигурации и переменные среды, и запускать эти образы в containers, изолированных процессах, которые выполняются в общей операционной системе. Кроме того, с помощью Compose вы можете координировать работу нескольких контейнеров - например, приложения и базы данных - для связи друг с другом.

В этом уроке вы создадите мультиконтейнерную установку WordPress. Ваши контейнеры будут включать базу данных MySQL, веб-сервер Nginx и сам WordPress. Вы также обезопасите свою установку, получив сертификаты TLS / SSL с Let’s Encrypt для домена, который вы хотите связать с вашим сайтом. Наконец, вы создадите https://www.digitalocean.com/community/tutorials/how-to-schedule-routine-tasks-with-cron-and-anacron-on-a-vps [+ cron +] работа по продлению ваших сертификатов, чтобы ваш домен оставался в безопасности.

Предпосылки

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

  • Сервер под управлением Ubuntu 18.04 вместе с пользователем без полномочий root с привилегиями + sudo + и активным брандмауэром. Инструкции по их настройке см. В этом Initial руководстве по установке сервера.

  • Docker установлен на вашем сервере, следуя шагам 1 и 2 из Как установить и Используйте Docker в Ubuntu 18.04.

  • Docker Compose установлен на вашем сервере, следуя шагу 1 из Как установить Docker Compose в Ubuntu 18,04.

  • Зарегистрированное доменное имя. В этом руководстве будет использоваться * example.com *. Вы можете получить его бесплатно по адресу Freenom или использовать регистратор домена по вашему выбору.

  • Обе следующие записи DNS настроены для вашего сервера. Вы можете следовать this вводной части в DigitalOcean DNS для получения подробной информации о том, как добавить их в учетную запись DigitalOcean, если это то, что вы ' повторное использование:

  • Запись A с ++, указывающая на публичный IP-адрес вашего сервера.

  • Запись A с + www. +, Указывающая на публичный IP-адрес вашего сервера.

Шаг 1 - Определение конфигурации веб-сервера

Перед запуском каких-либо контейнеров нашим первым шагом будет определение конфигурации нашего веб-сервера Nginx. Наш конфигурационный файл будет включать в себя некоторые специфичные для WordPress блоки местоположения, а также блок местоположения для направления запросов проверки Let Encrypt на клиент Certbot для автоматического обновления сертификатов.

Сначала создайте каталог проекта для вашей установки WordPress с именем ++ и перейдите к нему:

mkdir  && cd

Затем создайте каталог для файла конфигурации:

mkdir nginx-conf

Откройте файл с помощью + nano + или вашего любимого редактора:

nano nginx-conf/nginx.conf

В этом файле мы добавим блок сервера с директивами для нашего имени сервера и корня документа, а также блоки местоположения для направления запроса клиента Certbot на сертификаты, обработку PHP и запросы статических активов.

Вставьте следующий код в файл. Обязательно замените ++ на ваше собственное доменное имя:

~ / WordPress / Nginx-конф / nginx.conf

server {
       listen 80;
       listen [::]:80;

       server_name  www.;

       index  index.html index.htm;

       root /var/www/html;

       location ~ /.well-known/acme-challenge {
               allow all;
               root /var/www/html;
       }

       location / {
               try_files $uri $uri/ /index.php$is_args$args;
       }

       location ~ \.php$ {
               try_files $uri =404;
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
               fastcgi_pass :9000;
               fastcgi_index index.php;
               include fastcgi_params;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               fastcgi_param PATH_INFO $fastcgi_path_info;
       }

       location ~ /\.ht {
               deny all;
       }

       location = /favicon.ico {
               log_not_found off; access_log off;
       }
       location = /robots.txt {
               log_not_found off; access_log off; allow all;
       }
       location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
               expires max;
               log_not_found off;
       }
}

Наш серверный блок содержит следующую информацию:

  • Директива: *

  • + listen +: Это говорит Nginx прослушивать порт + 80 +, что позволит нам использовать https://certbot.eff.org/docs/using.html#webroot[webroot плагин Certbot для наших запросов на сертификат , Обратите внимание, что мы не еще не включили порт + 443 + - мы обновим нашу конфигурацию, чтобы включить SSL, как только мы успешно получим наши сертификаты.

  • + server_name +: определяет имя вашего сервера и блок сервера, который должен использоваться для запросов к вашему серверу. Обязательно замените ++ в этой строке на ваше собственное доменное имя.

  • + index +: директива + index + определяет файлы, которые будут использоваться в качестве индексов при обработке запросов к вашему серверу. Здесь мы изменили порядок приоритета по умолчанию, переместив + index.php + перед + index.html +, чтобы Nginx располагал по приоритетам файлы с именем + index.php +, когда это возможно.

  • + root +: наша директива + root + называет корневой каталог для запросов к нашему серверу. Этот каталог, + / var / www / html +, является cirectID создан как точка монтирования во время сборки, следуя инструкциям в нашем WordPress[WordPress Dockerfile. Эти инструкции Dockerfile также гарантируют, что файлы из выпуска WordPress подключены к этому тому.

  • Расположение блоков: *

  • + location ~ / .well-known / acme-challenge +: этот блок местоположения будет обрабатывать запросы к каталогу + .well-known +, где Certbot разместит временный файл для проверки того, что DNS для нашего домена разрешается в наш сервер. С этой конфигурацией мы сможем использовать плагин Cerrobot webroot для получения сертификатов для нашего домена.

  • + location / +: в этом блоке местоположения мы будем использовать директиву + try_files + для проверки файлов, которые соответствуют отдельным запросам URI. Однако вместо возврата статуса 404 + Not Found + по умолчанию мы передадим управление файлу WordPress + index.php + с аргументами запроса.

  • + location ~ \ .php $ +: Этот блок местоположения будет обрабатывать обработку PHP и передавать эти запросы в наш контейнер + wordpress +. Поскольку наш образ WordPress Docker будет основан на https://github.com/docker-library/php/blob/e63194a0006848edb13b7eff5a7f9d790d679428/7.2/alpine3.9/fpm/Dockerfile [+ php: fpm + image], мы также будем включите в этот блок параметры конфигурации, относящиеся к протоколу FastCGI. Nginx требует независимого процессора PHP для запросов PHP: в нашем случае эти запросы будут обрабатываться процессором + php-fpm +, включенным в изображение + php: fpm +. Кроме того, этот блок размещения включает в себя специфичные для FastCGI директивы, переменные и параметры, которые будут прокси-запросы к приложению WordPress, работающему в нашем контейнере + wordpress +, устанавливают предпочтительный индекс для проанализированного URI запроса и анализируют запросы URI.

  • + location ~ / \. ht +: этот блок будет обрабатывать файлы + .htaccess +, поскольку Nginx их не обслуживает. Директива + deny_all + гарантирует, что файлы + .htaccess + никогда не будут предоставляться пользователям.

  • + location = / favicon.ico,` + location = / robots.txt + : эти блоки гарантируют, что запросы к + / favicon.ico` и + / robots.txt + не будут регистрироваться.

  • + location ~ * \. (css | gif | ico | jpeg | jpg | js | png) $ +: Этот блок отключает ведение журнала для запросов статических активов и обеспечивает высокую кеширование этих активов, поскольку они обычно дороги для обслуживать.

Для получения дополнительной информации о прокси FastCGI см. Https://www.digitalocean.com/community/tutorials/understanding-and-implementing-fastcgi-proxying-in-nginx[Understanding и реализация прокси FastCGI в Nginx]. Для получения информации о сервере и блоках местоположения см. Https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms[Understanding Nginx Алгоритмы выбора блоков и блоков местоположения].

Сохраните и закройте файл, когда вы закончите редактирование. Если вы использовали + nano +, сделайте это, нажав + CTRL + X +, + Y +, затем + ENTER +.

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

Шаг 2 - Определение переменных среды

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

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

В главном каталоге вашего проекта + ~ / + откройте файл с именем + .env +:

nano .env

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

Добавьте следующие имена переменных и значения в файл. Не забудьте указать * свои собственные значения * здесь для каждой переменной:

~ / WordPress / .env

MYSQL_ROOT_PASSWORD=
MYSQL_USER=
MYSQL_PASSWORD=

Мы включили пароль для учетной записи администратора * root *, а также предпочтительное имя пользователя и пароль для нашей базы данных приложения.

Сохраните и закройте файл, когда вы закончите редактирование.

Поскольку ваш файл + .env + содержит конфиденциальную информацию, вы должны убедиться, что он включен в файлы вашего проекта + .gitignore + и + .dockerignore +, которые сообщают https://www.digitalocean.com/community. / tutorials / how-to-use-git-a-reference-guide [Git] и Docker, какие файлы * not * для копирования в ваши репозитории Git и образы Docker, соответственно.

Если вы планируете работать с Git для контроля версий, initialize your current рабочий каталог в качестве хранилища с помощью + git init +:

git init

Затем откройте файл + .gitignore +:

nano .gitignore

Добавьте + .env + в файл:

~ / WordPress / .gitignore

.env

Сохраните и закройте файл, когда вы закончите редактирование.

Аналогично, это хорошая мера предосторожности - добавить + .env + в файл + .dockerignore +, чтобы он не попадал в ваши контейнеры, когда вы используете этот каталог в качестве контекста сборки.

Откройте файл:

nano .dockerignore

Добавьте + .env + в файл:

~ / WordPress / .dockerignore

.env

Ниже вы можете при желании добавить файлы и каталоги, связанные с разработкой вашего приложения:

~ / WordPress / .dockerignore

.env
.git
docker-compose.yml
.dockerignore

Сохраните и закройте файл, когда вы закончите.

Имея конфиденциальную информацию, вы можете перейти к определению ваших служб в файле + docker-compose.yml.

Шаг 3 - Определение сервисов с помощью Docker Compose

Ваш файл + docker-compose.yml + будет содержать определения сервисов для вашей установки. Service в Compose - это работающий контейнер, а определения служб определяют информацию о том, как будет работать каждый контейнер.

Используя Compose, вы можете определить различные сервисы для запуска мультиконтейнерных приложений, поскольку Compose позволяет связывать эти сервисы вместе с общими сетями и томами. Это будет полезно для нашей текущей настройки, поскольку мы будем создавать различные контейнеры для нашей базы данных, приложения WordPress и веб-сервера. Мы также создадим контейнер для запуска клиента Certbot, чтобы получить сертификаты для нашего веб-сервера.

Для начала откройте файл + docker-compose.yml +:

nano docker-compose.yml

Добавьте следующий код, чтобы определить версию файла Compose и службу базы данных + db +:

~ / WordPress / Докер-compose.yml

version: '3'

services:
 db:
   image: mysql:
   container_name: db
   restart: unless-stopped
   env_file: .env
   environment:
     - MYSQL_DATABASE=
   volumes:
     - dbdata:/var/lib/mysql
   command: '--default-authentication-plugin=mysql_native_password'
   networks:
     - app-network

Определение сервиса + db + содержит следующие параметры:

  • + image +: сообщает Compose, какое изображение вытащить для создания контейнера. Мы прикрепляем https://github.com/docker-library/mysql/blob/130bd8e46a3da1adfc1732a08c70673e20aa5977/8.0/Dockerfile [+ mysql: + image] здесь, чтобы избежать будущих конфликтов, так как изображение + mysql: latest + продолжает быть обновленным. Для получения дополнительной информации о закреплении версий и избежании конфликтов зависимостей см. Документацию Docker по адресу Dockerfile лучшие практики.

  • + container_name +: указывает имя контейнера.

  • + restart +: определяет политику перезапуска контейнера. По умолчанию это + no +, но мы установили перезапуск контейнера, если он не был остановлен вручную.

  • + env_file +: эта опция говорит Compose, что мы хотели бы добавить переменные окружения из файла с именем + .env +, расположенного в нашем контексте сборки. В этом случае контекст сборки является нашим текущим каталогом.

  • + environment +: эта опция позволяет вам добавлять дополнительные переменные окружения, помимо тех, которые определены в вашем файле + .env +. Мы установим переменную + MYSQL_DATABASE + равной ++, чтобы предоставить имя для нашей базы данных приложения. Поскольку это не конфиденциальная информация, мы можем включить ее непосредственно в файл + docker-compose.yml +.

  • + volume +: здесь мы монтируем с именем volume с именем + dbdata + каталог + / var / lib / mysql + контейнера. , Это стандартный каталог данных для MySQL в большинстве дистрибутивов.

  • + command +: эта опция указывает команду для переопределения по умолчанию CMD инструкция для изображения. В нашем случае мы добавим опцию в стандартный образ образа Docker https://dev.mysql.com/doc/refman/8.0/en/mysqld.html [+ mysqld + command], которая запускает сервер MySQL на контейнер. Эта опция + - default-authentication-plugin = mysql_native_password + устанавливает системную переменную + - default-authentication-plugin + в + mysql_native_password +, указывая, какой механизм аутентификации должен управлять новыми запросами аутентификации на сервере. Начиная с PHP и, следовательно, наше изображение WordPress аутентификация-плагин-соображения / [более новая аутентификация MySQL по умолчанию], мы должны сделать эту настройку для аутентификации пользователя нашей базы данных приложения.

  • + network +: указывает, что ваша прикладная служба присоединится к сети + app-network +, которую мы определим в нижней части файла.

Далее, под определением вашего сервиса + db +, добавьте определение для вашего сервисного приложения + wordpress +:

~ / WordPress / Докер-compose.yml

...
 wordpress:
   depends_on:
     - db
   image: wordpress:-fpm-alpine
   container_name: wordpress
   restart: unless-stopped
   env_file: .env
   environment:
     - WORDPRESS_DB_HOST=db:3306
     - WORDPRESS_DB_USER=$MYSQL_USER
     - WORDPRESS_DB_PASSWORD=$MYSQL_PASSWORD
     - WORDPRESS_DB_NAME=
   volumes:
     - wordpress:/var/www/html
   networks:
     - app-network

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

  • + disabled_on +: эта опция гарантирует, что наши контейнеры будут запускаться в порядке зависимости, с контейнером + wordpress +, начинающимся после контейнера + db +. Наше приложение WordPress основано на существовании нашей базы данных приложения и пользователя, поэтому выражение этого порядка зависимостей позволит нашему приложению правильно запускаться.

  • + image +: для этой настройки мы используем https://github.com/docker-library/wordpress/blob/07958d19ed465fb7fe50626be740d88a2c2260a7/php7.2/fpm-alpine/Dockerfile [+ -fpm-alpine + WordPress image ]. Как обсуждено в https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-docker-compose#step-1-%E2%80%94-defining-the-web-server- Конфигурация [Шаг 1], использование этого образа гарантирует, что наше приложение будет иметь процессор + php-fpm +, который необходим Nginx для обработки PHP. Это также изображение + alpine +, полученное из проекта Alpine Linux, которое поможет уменьшить общий размер изображения. Для получения дополнительной информации о преимуществах и недостатках использования изображений + alpine + и о том, имеет ли это смысл для вашего приложения, см. Полное обсуждение в разделе * Варианты изображений * на https://hub.docker.com/_ / wordpress [Страница изображения WordPress в Docker Hub].

  • + env_file +: Опять же, мы указываем, что хотим извлечь значения из нашего файла + .env +, поскольку именно здесь мы определили пользователя и пароль нашей базы данных приложения.

  • + environment +: здесь мы используем значения, которые мы определили в нашем файле + .env +, но мы присваиваем их именам переменных, которых ожидает образ WordPress: + WORDPRESS_DB_USER + и + WORDPRESS_DB_PASSWORD +. Мы также определяем + WORDPRESS_DB_HOST +, который будет сервером MySQL, работающим в контейнере + db +, который доступен через порт MySQL по умолчанию, + 3306 +. Наше + WORDPRESS_DB_NAME + будет таким же значением, которое мы указали в определении сервиса MySQL для нашего + MYSQL_DATABASE +: ++.

  • + volume +: мы монтируем именованный том с именем + wordpress + к точке монтирования + / var / www / html + https://github.com/docker-library/wordpress/blob/07958d19ed465fb7fe50626be740d88a2c2260a7/php7.2/ fpm-alpine / Dockerfile # L53 [создан из образа WordPress]. Использование именованного тома таким образом позволит нам делиться кодом нашего приложения с другими контейнерами.

  • + network +: мы также добавляли контейнер + wordpress в сеть` + app-network + `.

Далее, ниже определения службы приложения + wordpress +, добавьте следующее определение для службы + webserver + Nginx:

~ / WordPress / Докер-compose.yml

...
 webserver:
   depends_on:
     - wordpress
   image: nginx:-alpine
   container_name: webserver
   restart: unless-stopped
   ports:
     - "80:80"
   volumes:
     - wordpress:/var/www/html
     - ./nginx-conf:/etc/nginx/conf.d
     - certbot-etc:/etc/letsencrypt
   networks:
     - app-network

Опять же, мы называем наш контейнер и делаем его зависимым от контейнера + wordpress + в порядке запуска. Мы также используем изображение + alpine + - https://github.com/nginxinc/docker-nginx/blob/e5123eea0d29c8d13df17d782f15679458ff899e/mainline/stretch/Dockerfile [+ -alpine + Nginx image].

Это определение сервиса также включает следующие опции:

  • + ports +: Это открывает порт + 80 + для включения параметров конфигурации, которые мы определили в нашем файле + nginx.conf + в ссылке: [Шаг 1].

  • + volume +: здесь мы определяем комбинацию именованных томов и bind mounts:

  • + wordpress: / var / www / html +: это смонтирует код нашего приложения WordPress в каталог + / var / www / html +, каталог, который мы указали как + root + в нашем блоке сервера Nginx.

  • +. / nginx-conf: / etc / nginx / conf.d +: Это свяжет монтирование каталога конфигурации Nginx на хосте с соответствующим каталогом на контейнере, гарантируя, что любые изменения, которые мы вносим в файлы на хосте, будут отражено в контейнере.

  • + certbot-etc: / etc / letsencrypt +: это смонтирует соответствующие сертификаты и ключи Let’s Encrypt для нашего домена в соответствующий каталог на контейнере.

И снова мы добавили этот контейнер в сеть + app-network +.

Наконец, под вашим определением + webserver + добавьте последнее определение службы для службы + certbot +. Обязательно замените адрес электронной почты и доменные имена, перечисленные здесь, своей собственной информацией:

~ / WordPress / Докер-compose.yml

 certbot:
   depends_on:
     - webserver
   image: certbot/certbot
   container_name: certbot
   volumes:
     - certbot-etc:/etc/letsencrypt
     - wordpress:/var/www/html
   command: certonly --webroot --webroot-path=/var/www/html --email  --agree-tos --no-eff-email --staging -d  -d www.

Это определение говорит Compose, чтобы извлечь https://hub.docker.com/r/certbot/certbot/ [+ certbot / certbot + image] из Docker Hub. Он также использует именованные тома для совместного использования ресурсов с контейнером Nginx, включая сертификаты домена и ключ в + certbot-etc + и код приложения в + wordpress +.

Опять же, мы использовали + disabled_on +, чтобы указать, что контейнер + certbot + должен запускаться после запуска службы + webserver +.

Мы также включили опцию + command +, которая задает подкоманду для запуска с командой контейнера по умолчанию + certbot +. Https://certbot.eff.org/docs/using.html#certbot-command-line-options [+ certonly + subcommand] получит сертификат со следующими параметрами:

  • + - webroot +: Это говорит Certbot использовать плагин webroot для помещения файлов в папку webroot для аутентификации. Этот плагин зависит от метода проверки HTTP-01, который использует HTTP-запрос, чтобы доказать, что Certbot может получить доступ к ресурсам. с сервера, который отвечает на данное доменное имя.

  • + - webroot-path +: указывает путь к каталогу webroot.

  • + - email +: предпочитаемый вами адрес электронной почты для регистрации и восстановления.

  • + - accept-tos +: это означает, что вы соглашаетесь с ACME Абонентское соглашение с подписчиком.

  • + - no-eff-email +: это говорит Certbot, что вы не хотите делиться своей электронной почтой с Electronic Frontier Foundation (EFF). Не стесняйтесь опускать это, если вы предпочитаете.

  • + - staging +: это говорит Certbot, что вы хотели бы использовать промежуточную среду Let’s Encrypt для получения тестовых сертификатов. Использование этого параметра позволяет протестировать параметры конфигурации и избежать возможных ограничений на количество запросов домена. Для получения дополнительной информации об этих ограничениях см. Https://letsencrypt.org/docs/rate-limits/[rate предельные документы Let’s Encrypt].

  • + -d +: позволяет указать доменные имена, которые вы хотите применить к вашему запросу. В этом случае мы включили ++ и + www. +. Обязательно замените их своим собственным доменом.

Ниже определения сервиса + certbot + добавьте определения вашей сети и тома:

~ / WordPress / Докер-compose.yml

...
volumes:
 certbot-etc:
 wordpress:
 dbdata:

networks:
 app-network:
   driver: bridge

Наш ключ + volume + верхнего уровня определяет тома + certbot-etc +, + wordpress + и + dbdata +. Когда Docker создает тома, содержимое тома сохраняется в каталоге в файловой системе хоста, + / var / lib / docker / volume / +, который управляется Docker. Содержимое каждого тома затем монтируется из этого каталога в любой контейнер, использующий том. Таким образом, можно обмениваться кодом и данными между контейнерами.

Пользовательская мостовая сеть + app-network + обеспечивает связь между нашими контейнерами, поскольку они находятся на одном хосте демона Docker. Это оптимизирует трафик и обмен данными внутри приложения, поскольку оно открывает все порты между контейнерами в одной и той же мостовой сети, не открывая никаких портов для внешнего мира. Таким образом, наши контейнеры + db +, + wordpress + и + webserver + могут взаимодействовать друг с другом, и нам нужно только предоставить порт + 80 + для внешнего доступа к приложению.

Готовый файл + docker-compose.yml + будет выглядеть так:

~ / WordPress / Докер-compose.yml

version: '3'

services:
 db:
   image: mysql:
   container_name: db
   restart: unless-stopped
   env_file: .env
   environment:
     - MYSQL_DATABASE=
   volumes:
     - dbdata:/var/lib/mysql
   command: '--default-authentication-plugin=mysql_native_password'
   networks:
     - app-network

 wordpress:
   depends_on:
     - db
   image: wordpress:-fpm-alpine
   container_name: wordpress
   restart: unless-stopped
   env_file: .env
   environment:
     - WORDPRESS_DB_HOST=db:3306
     - WORDPRESS_DB_USER=$MYSQL_USER
     - WORDPRESS_DB_PASSWORD=$MYSQL_PASSWORD
     - WORDPRESS_DB_NAME=
   volumes:
     - wordpress:/var/www/html
   networks:
     - app-network

 webserver:
   depends_on:
     - wordpress
   image: nginx:-alpine
   container_name: webserver
   restart: unless-stopped
   ports:
     - "80:80"
   volumes:
     - wordpress:/var/www/html
     - ./nginx-conf:/etc/nginx/conf.d
     - certbot-etc:/etc/letsencrypt
   networks:
     - app-network

 certbot:
   depends_on:
     - webserver
   image: certbot/certbot
   container_name: certbot
   volumes:
     - certbot-etc:/etc/letsencrypt
     - wordpress:/var/www/html
   command: certonly --webroot --webroot-path=/var/www/html --email  --agree-tos --no-eff-email --staging -d  -d www.

volumes:
 certbot-etc:
 wordpress:
 dbdata:

networks:
 app-network:
   driver: bridge

Сохраните и закройте файл, когда вы закончите редактирование.

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

Шаг 4 - Получение SSL-сертификатов и учетных данных

Мы можем запустить наши контейнеры с помощью команды +docker-compose up + `, которая будет создавать и запускать наши контейнеры в указанном нами порядке. Если наши запросы к домену будут успешными, мы увидим правильный статус выхода в наших выходных данных и правильные сертификаты, смонтированные в папке `+ / etc / letsencrypt / live +

Related