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

Последний раз я устанавливал WordPress лет 6-7 назад. Но вот наконец то решил вернуться к ведению блога, и решал настроить старый добрый вордпресс.

Исходные данные

У меня уже есть VPS на котором крутятся мои пет проекты. Поэтому wordpress я буду ставить на нее. Что бы не конфликтовать с другими проектами естественно я хочу все запустить через докер.

Установка WordPress через докер

Подготоваливаем архитектуру папок

Сначала создаем архитектуру проекта

cd ~/wordpress 
mkdir -p nginx/ 
mkdir -p php/ 
mkdir -p data/mysql/

nginx — здесь будут лежать настройки для nginx
php — здесь будут лежать настройки для php
data/mysql — здесь будут лежать данные базы данных
app — здесь лежит wordpress

Теперь скачиваем последний WordPress. Я скачивал отсюда по ссылке 

Выполним следующие команды что бы скачать и распаковать wordpress, переименовать папку wordpress в app для унификации всех проектов
wget https://wordpress.org/latest.zip
unzip latest.zip
mv wordpress app
rm latest.zip

Теперь в папке ~/wordpress/app/ у нас лежит сайт, а уровнем выше настройки для контейнера.

Настраиваем Docker

Теперь гуглим докер образ для вордпресс и выбираем подходящий тег. Мне нужно что бы образ имел все необходимые расширения и библиотеки для вордпресса, поэтому я выбираю последний на момент написания статьи образ php8.3-fpm-alpine
Я люблю работать с докером через docker-compose.yaml, собственно давайте его настроим.

Если docker compose у вас не установлен, необходимо установить его по официальной документации

vim docker-compose.yml

Важно!!! Используйте свои пароли, имена пользователей и названия баз данных

version: '3.3'  
services:  
    nginx:  
        image: nginx:latest  
        volumes:  
            - ./nginx:/etc/nginx/conf.d  
            - ./php:/usr/local/etc/php/conf.d/ 
            - ./app:/var/www/  
        ports:  
            - 80:80  
        links:  
            - wordpress  
        networks:  
            - blog  
    wordpress:  
        depends_on:  
            - db  
        image: wordpress:php8.3-fpm-alpine  
        ports:  
            - 9001:9000  
        volumes:  
            - ./app:/var/www/  
        environment:  
            WORDPRESS_DB_HOST:  db:3306  
            WORDPRESS_DB_USER: admin  
            WORDPRESS_DB_PASSWORD: test_password  # !!!используйте свой пароль 
            WORDPRESS_DB_NAME: wordpress  
        networks:  
            - blog  
    db:  
        image: mariadb:10.5.8  
        volumes:  
            - ./data/mysql:/var/lib/mysql  
        environment:  
            MYSQL_ROOT_PASSWORD: test_password_root  #  !!!используйте свой пароль
            MYSQL_DATABASE: wordpress  
            MYSQL_USER: admin  
            MYSQL_PASSWORD: test_password  #  !!!используйте свой пароль
        networks:  
            - blog  
networks:  
    blog:  
        driver: bridge

Здесь:

  • nginx — HTTP-сервер который будет заниматься статикой и роутингом запросов
  • wordpress — PHP сервис который отвечает за работу сайта
  • db — база данных
  • blog — обьеденяющая наши контейнеры сеть

Конфигурируем Nginx

Теперь нужно создать файл настроек nginx

vim nginx nginx.conf

И настроим конфигурацию

 
server { 
    listen 80 default_server; 
    server_name _; 

    root /var/www; 
    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:9001; 
        fastcgi_index index.php; 
        include fastcgi_params; 
        fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name; # /var/www/ это папка внутри докера в которой лежит проект согласно правилу ./app:/var/www/ 
        fastcgi_param PATH_INFO $fastcgi_path_info; 
    } 

    # что бы статику отдавал nginx
    location ~ \.(js|woff2|wolff|ttf|jpeg|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar) {
       try_files $uri =404;
       expires max;
    }
}

Вообще nginx для вордпресса можно настроить гораздо лучше, но это тема для отдельной статьи Вот и все, теперь просто запускаем докер


docker-compose up -d

Или так


 docker compose up -d 

В зависимости от вашей версии докер композера.

Когда докер соберется и поднимется, то в браузере переходим по URL http://localhost, и далее следуем инструкции от wordpress, указываем доступы к базе данных, те же что указали в docker-compose.yml

В качестве Database Host нужно указать db (название секции в файле docker-compose.yml)

Установка на сервере

Если nginx у вас уже установлен на вашем сервере, то нужно просто удалить из docker-compose.yml раздел nginx, и добавить правило в конфигурацию основного nginx.
Вместо

fastcgi_pass wordpress:9001;

  нужно

fastcgi_pass localhost:9001;

На этом все 🙂 Наслаждайтесь