Как развернуть тестовое окружение для WordPress

Docker-compose

Устанавливаем два контейнера — php с wp и mysql так:

Структура файлов такая:

./
  wp-db/
  wp-files/
  docker-compose.yml
  • wp-db это папка для хранения контейнера mysql
  • wp-files это папка для хранения php файлов WordPress.
  • docker-compose.yml это файл описывающий как нужно постоить docker окружение.

Содержание файла docker-compose.yml (добавлена команда для установки xdebugger`а):

version: "3.9"

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    ports:
      - "3306:3306"

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DEBUG: 'true'
    command: >
      bash -c "
      cd /tmp/ &&
      curl -o xdebug.tgz https://xdebug.org/files/xdebug-3.1.3.tgz &&
      tar -xvzf xdebug.tgz &&
      cd xdebug-3.1.3 &&
      phpize &&
      ./configure &&
      make &&
      cp modules/xdebug.so /usr/local/lib/php/extensions/no-debug-non-zts-20190902 &&
      echo 'zend_extension = xdebug' >> /usr/local/etc/php/conf.d/99-xdebug.ini  &&
      echo 'zend_extension = xdebug' >> /usr/local/etc/php/php.ini &&
      echo 'xdebug.mode = debug' >> /usr/local/etc/php/php.ini &&
      echo 'xdebug.start_with_request = yes' >> /usr/local/etc/php/php.ini &&
      cd /var/www/html &&
      docker-entrypoint.sh apache2-foreground
      "

volumes:
  wordpress_data:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: './wp-files/'
  db_data:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: './wp-db/'

Запускаем в папке с файлом docker-compose.yml командой:

docker-compose up -d

Эта команда создаст окружение (volume, images, сеть итд) и запустит контейнеры в режиме сервиса.

Проверить статус запущеных контейнеров можно командой:

docker-compose ps

В Vscode устанавливаем расширение

Расширение называется xdebug.php-debug. Его просто надо найти и установить по имени внутри vscode.

Принцип работы

Дальше можно приступать к работе с WordPress через браузер localhost:8000.

В папках wp-db/ и wp-files/ будут находится, смонтированные к контейнерам, файлы которые можно будет поизучать/менять и тд.

Работа с контейнером напрямую через VScode(очень удобно!)

В vscode слева выбрать удаленный обозреватель (иконка — монитор с диском).

id расширения: ms-vscode-remote.remote-containers

Далее ПКМ по контейнеру (docker-wordpress)- Attach to Container.

Папку для работы вибыраем /var/www/html

Бывает что происходит отключение, лучше всего нажимать сразу кнопку "Перегрузить окно"

SSH внутрь контейнеров

src: https://phase2.github.io/devtools/common-tasks/ssh-into-a-container/

Через docker

  docker exec -it docker-wordpress_db_1 /bin/bash

Внутри контейнера пишем (согласно настройкам выше):

  mysql --user=wordpress --password=wordpress wordpress

Для примера

Внутри mysql:

SHOW TABLES;

INSERT INTO wp_users (user_login, user_nicename , user_registered) VALUES('uu','bb', CURRENT_TIMESTAMP);

Теперь, если зайти в админку, там появится новый пльзователь.

!Настоятельно не рекомендуется менять чтолибо в базе данных напрямую. Лучше всего использовать для этого /wp-admin , либо использовать терминальную утилиту wp-cli.

Ну или можно ещё сделать так:

update wp_users set user_email = 'tri@tra.ru';

VSCode хорошее расширение для подключения к БД.

Имя: MySQL
Идентификатор: cweijan.vscode-mysql-client2
Описание: Database manager for MySQL/MariaDB, PostgreSQL, SQLite, Redis and ElasticSearch.
Версия: 4.8.5
Издатель: cweijan
Ссылка на Visual Studio Marketplace: https://marketplace.visualstudio.com/items?itemName=cweijan.vscode-mysql-client2

WP-CLI

Чтобы установить WP-CLI нужно

#connect to docker node
docker exec -it docker-wordpress_wordpress_1 /bin/bash

и далее следуем этой инструкции
следовать этой иструкции https://wp-cli.org/#installing .

НО! Тк в докере испльзуются права root, то команда wp будет постоянно просить ввести ключ —allow-root
Чтобы этого не делать постоянно нужно просто создать alias.
Ссылка на источник:
https://github.com/wp-cli/wp-cli/issues/1838#issuecomment-219641029

echo 'alias wp="wp --allow-root"' >>  ~/.bashrc

Выставляем права для папки с WP

  find . -type d -exec chmod 755 {} \; 
  find . -type f -exec chmod 644 {} \;