Установка WordPress с помощью Docker

    Команда Simple-Server
    03.06.2026
    13 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    1. Установка компонентов Docker

    Стоит упомянуть, что у нас есть отдельная подробная инструкция об инсталляции Docker на Ubuntu .

    Шаг 1. Прежде всего рекомендуется предварительно обновить список существующих пакетов на вашей серверной машине:

    Шаг 2. Для гарантии корректного выполнения процесса установки, нам потребуются несколько ключевых пакетов для обеспечения работоспособности HTTPS-соединения:

    sudo apt install apt-transport-https ca-certificates curl software-properties-common

    Шаг 3. Для предотвращения возможных проблем, стоит проверить, установлена ли в вашей системе одна из старых версий Docker (docker-engine и docker.io, которые считаются устаревшими, в отличие от docker-ce и docker-ee). Если она присутствует, рекомендуется удалить ее:

    sudo apt autoremove docker docker-engine docker.io docker-ce

    Шаг 4. Теперь можно взять ключ GPG от официального репозитория Docker и внести его в систему:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

    А после включить в список пакетов и сам репозиторий:

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

    Шаг 5. Давайте еще раз обновим перечень пакетов, которые можно установить:

    Все! Теперь можно загрузить сам Docker:

    sudo apt install docker-ce docker-ce-cli docker-compose-plugin

    Для проверки наличия установленного Docker-а можно воспользоваться простой командой, которая выведет версию в терминал:

    Docker Compose — это инструмент, позволяющий автоматизировать процесс управления контейнерами за счет использования специального файла-инструкции формата YAML.

    В какой-то степени он похож на package.json в Node, но работает несколько шире — вы определяете службы, их зависимости, дисковые пространства и переменные окружения. А Docker Compose, следуя описаниям, выполняет автоматическое развертывание. В общем, именно это и обеспечивает переносимость разрабатываемых проектов.

    Обратите внимание, что отдельная установка Docker Compose не требуется, если вы используете последние версии Docker. Вместо отдельного Compose V1 пакетом Docker CLI поставляется Compose V2 , написанный на Go.

    В этом случае вместо привычной команды docker-compose используется docker compose. Если по каким-то причинам вам требуется старая версия Compose V1, тогда инструкция ниже для вас.

    Шаг 6. Из официального репозитория GitHub загрузим сначала исполняемый файл с новейшей версией docker-compose:

    Шаг 7. Далее установим соответствующие права на использование этого файла:

    sudo chmod +x /usr/local/bin/docker-compose

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

    Шаг 8. Для обеспечения дополнительной надежности рекомендуем попробовать запустить файл, чтобы получить информацию о версии:

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

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

    Шаг 1. Давайте создадим в домашней директории отдельный каталог для нашего приложения и сразу перейдем в него:

    mkdir -p ~/wordpress cd ~/wordpress

    Здесь же создадим дополнительные подкаталоги внутри которых будут распределены данные Nginx, MySQL и WordPress.

    mkdir -p nginx/ mkdir -p logs/ mkdir -p logs/nginx mkdir -p data/ mkdir -p data/html mkdir -p data/mysql

    У нас имеется директория, предназначенная специально для хранения Nginx, а также отдельная папка, где будут сохраняться лог-файлы сервера. В каталоге с названием data будут размещены основные файлы CMS и базы данных.

    Шаг 2. Теперь мы создадим конфигурационный файл для Nginx в ранее созданной директории, предназначенной для него:

    nano ~/wordpress/nginx/nginx.conf

    Шаг 3. Добавим минимальное описание в файл — исключительно под поставленные в этой инструкции задачи. В дальнейшем вы сможете расширять ее по мере роста сложности ваших проектов:

    server { listen 80 default_server; server_name  _; root /var/www/html; index index.php; access_log /var/log/nginx/site-access.log; error_log /var/log/nginx/site-error.log; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass wordpress:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }

    Прослушиваемый порт — стандартный 80-й. При этом, директива default_server и настройка _ в server_name предписывает Nginx обрабатывать любые (с любым значением host в HTTP-заголовках) запросы на 80 порту.

    Корневой каталог с файлами, которые будет отдавать сервер, находится по адресу /var/www/html, при этом среди них есть index.php — своего рода entry point (входная точка) в WordPress.

    Далее указаны пути до файлов с логами — лог с запросами и лог с ошибками.

    Стандартный route направляет пользователя во входную точку index.php, передавая также все аргументы (query string) из адреса. Соответственно, все запросы на php-файлы передаются непосредственно в контейнер PHP по протоколу FastCGI.

    3. Описание необходимых образов и контейнеров

    Нормальное функционирование WordPress подразумевает совместную работу 3 основных компонентов из ранее описанного тех-стека — сервер Nginx, сам WordPress и база данных MySQL.

    При этом MySQL является основополагающим компонентом (сервер может быть любым, например Apache) приложения, т.к. все данные, которыми оперирует WordPress, располагаются именно там.

    Поэтому потребуется дисковое пространство как для MySQL, так и для файлов тем оформления и плагинов, которые являются неотъемлемой частью CMS.

    Именно по той причине, что WordPress является многокомпонентным приложением, для переносимого развертывания его структуры нам и понадобится docker-compose.

    Шаг 1. Описание всех зависимостей мы разместим в специальном файле docker-compose.yml — создадим его:

    sudo nano docker-compose.yml

    Шаг 2. Сам файл наполним следующим содержимым:

    version: '3.3' services: nginx: image: nginx:latest volumes: - ./nginx:/etc/nginx/conf.d - ./data/html:/var/www/html - ./logs/nginx:/var/log/nginx ports: - "8080:80" links: - wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - ./data/html:/var/www/html ports: - "80:80" restart: always environment: WORDPRESS_DB_HOST:  db:3306 WORDPRESS_DB_USER: *имя пользователя от MySQL* WORDPRESS_DB_PASSWORD: *пароль от MySQL* WORDPRESS_DB_NAME: wordpress db: image: mysql:5.7 volumes: - ./data/mysql:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: *root-пароль от MySQL* MYSQL_DATABASE: wordpress MYSQL_USER: *имя пользователя от MySQL* MYSQL_PASSWORD: *пароль от MySQL*

    Тонкости написания yml-файлов находятся за пределами этой статьи — это отдельная обширная тема, о которой можно почитать в официальной справке. Пройдемся лишь по основным пунктам.

    • В данном случае мы сначала объявляем Nginx, WordPress и MySQL в качестве ключевых служб (контейнеров) приложения, при этом обязательно указываем их взаимосвязи. Например, для работы WordPress однозначно необходимо наличие базы данных.
    • Для WordPress и Nginx мы используем самые актуальные версии контейнеров. По умолчанию мы связываем их, резервируя 80-й порт для веб-трафика.
    • Когда вы вводите URL-адрес в браузер, контейнеры Nginx и WordPress работают совместно, последовательно обрабатывая запросы и возвращая пользователю сгенерированные веб-страницы в качестве ответа.
    • Служба базы данных представляет собой образ MySQL версии 5.7. Соответственно, мы не забываем указать переменные среды с необходимыми учетными данными для коммуникации контейнеров между собой.
    • Внутри каждой службы в параметре volumes объявляется дисковое пространство — каталоги, в которых хранятся рабочие файлы Nginx, WordPress и MySQL. Кстати, во время использования CMS в реальном проекте важно регулярно делать резервную копию (бекап) этих каталогов.

    Стоит упомянуть, что опционально вы можете включить в yml-файл образ phpMyAdmin:

    ... phpmyadmin: image: phpmyadmin/phpmyadmin restart: always links: - db:mysql ports: - "8081:80" environment: MYSQL_ROOT_PASSWORD: *пароль от MySQL* ...

    Это веб-интерфейс, который является своего рода дополнением к MySQL — он позволяет управлять базой данных не через терминал и SQL-запросы, а визуально в окне браузера.

    В нашем случае phpMyAdmin не является обязательным компонентом, но в более сложных проектах такой функционал может оказаться полезен.

    Шаг 3. Теперь можно запустить этот файл — Docker Compose сформирует из всех описанных образов рабочие контейнеры и соответствующим образом сконфигурирует их:

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

    Если Docker Hub недоступен, можно использовать наш бесплатный прокси, который возобновляет этот доступ.

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

    Если все корректно, то в терминале появится список работающих контейнеров, названия которых будут соответствовать описаниям в файле docker-compose.yml.

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

    docker compose restart nginx

    Однако, предстоит еще один этап. Сразу после завершения загрузки и запуска контейнеров появится возможность открыть веб-интерфейс WordPress — через него будет выполняться дальнейшая конфигурация CMS.

    4. Завершение установки WordPress через веб-интерфейс

    Шаг 1. В адресной строке веб-браузера нужно ввести адрес вашего сервера, после чего появится экран установки WordPress.

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

    Шаг 2. Далее жмем «Продолжить». Откроется страница с основными настройками WordPress: название сайта, имя пользователя, пароль пользователя (либо сгенерировать автоматически) и email-адрес.

    Есть еще особый пункт внизу, Search Engine Visibility , запрещающий поисковым системам индексировать ваш сайт. Если ваш сайт не является приватным порталом, индексацию стоит оставить, чтобы пользователи могли попасть на ваш сайт из поисковой выдачи. Кстати, в качестве имени пользователя лучше не использовать такие распространенные имена, как «admin» или «root» — они упростят задачу взлома злоумышленникам.

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

    Шаг 3. Если все поля заполнены корректно, кнопка «Установить WordPress» перекинет вас на страницу авторизации. После входа в систему вы окажетесь в панели администратора. В ней много различных пунктов, но ее нельзя назвать сложной.

    Дальнейшее использование WordPress заключается именно в оперировании множеством настроек внутри панели администратора. Исключением можно считать случай, когда PHP-переменные вручную проставляются в разметке страницы, тем самым превращая сырую HTML-верстку в полноценную тему WordPress, которую сможет установить любой желающий.

    Если вы все таки установили phyMyAdmin, то его веб-интерфейс будет доступен по адресу вашего сервера, но на 8081 порту.


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490₽

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190₽

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны