Вступление
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 +