#wordpress #w3-total-cache #wp-cli
#wordpress #w3-total-cache #wp-cli
Вопрос:
Я пытаюсь установить плагин w3-total-cache в образ wordpress docker с помощью wp-cli
, но, похоже, он пытается подключиться к базе данных, даже если я не пытаюсь его активировать. В Dockerfile я устанавливаю другие темы / плагины с помощью composer, и все кажется прекрасным, но единственный пакет, который я нашел для w3tc
плагина, это https://packagist.org/packages/finaldream/w3-total-cache это не является официальным и также не кажется актуальным (версия 0.9.4.6
, в то время как w3tc является версией 0.14.4
).
Я могу установить его с wp-cli
на компьютере в конечной среде, потому что у него есть база данных, но, похоже, я не могу установить в среде CI для создания образа docker с предустановленными плагинами, и я не нашел других вопросов и решений по этому поводу.
Есть ли способ установить плагин в среде CI без базы данных? (в конечной среде, будь то dev, staging или production, я бы вызывал только wp-cli
для активации плагинов, как я уже делаю для плагинов, установленных с composer).
Ответ №1:
В итоге я решил, что лучшим вариантом в этом случае является curl
zip-файл из WordPress (потому что в конечном итоге плагины WordPress — это в основном каталоги внутри plugins
папки).
Я добавил следующие инструкции в файл dockerfile:
ENV W3TC_VERSION 0.14.4
RUN mkdir -p /var/www/html/web/app/plugins
amp;amp; curl -L https://downloads.wordpress.org/plugin/w3-total-cache.${W3TC_VERSION}.zip
-o /tmp/w3-total-cache.zip
amp;amp; unzip /tmp/w3-total-cache.zip -d /var/www/html/web/app/plugins
amp;amp; rm /tmp/w3-total-cache.zip
amp;amp; chown -R www-data:www-data /var/www/html/web/app/plugins
amp;amp; cp /var/www/html/web/app/plugins/w3-total-cache/wp-content/advanced-cache.php
/var/www/html/web/app/advanced-cache.php
amp;amp; chown www-data:www-data /var/www/html/web/app/advanced-cache.php
amp;amp; mkdir -p /var/www/html/web/app/cache
amp;amp; chown www-data:www-data /var/www/html/web/app/cache
amp;amp; mkdir -p /var/www/html/web/app/w3tc-config
amp;amp; chown www-data:www-data /var/www/html/web/app/w3tc-config
Обновление (2020-08-20)
Я поступил так, как предложил leymannx в комментариях, и включил инструкцию после установки в composer.json
файл для вызова сценария оболочки со следующими командами:
#!/bin/bash
set -eou pipefail
echo "$(date ' %F %X') Custom install - Start"
W3TC_VERSION=0.14.4
APP_DIR=/var/www/html/web/app
PLUGINS_DIR="$APP_DIR/plugins"
W3TC_URL="https://downloads.wordpress.org/plugin/w3-total-cache.${W3TC_VERSION}.zip"
if [ ! -d "$PLUGINS_DIR/w3-total-cache" ]; then
mkdir -p "$PLUGINS_DIR"
curl -L "$W3TC_URL" -o /tmp/w3-total-cache.zip
unzip /tmp/w3-total-cache.zip -d "$PLUGINS_DIR"
rm /tmp/w3-total-cache.zip
chown -R www-data:www-data "$PLUGINS_DIR"
cp "$PLUGINS_DIR"/w3-total-cache/wp-content/advanced-cache.php
"$APP_DIR"/advanced-cache.php
chown www-data:www-data "$APP_DIR"/advanced-cache.php
mkdir -p "$APP_DIR"/cache
chown www-data:www-data "$APP_DIR"/cache
mkdir -p "$APP_DIR"/w3tc-config
chown www-data:www-data "$APP_DIR"/w3tc-config
fi
echo "$(date ' %F %X') Custom install - End"
(Я также удалил эти команды из Dockerfile
)
Это позволило сделать весь процесс более прозрачным для тех, кто использует эту среду WordPress.
Комментарии:
1. Разве вы не можете каким-то образом использовать репозиторий напрямую с Composer? Я имею в виду, что вы уже управляете своим проектом с помощью Composer. В противном случае, может быть, поместить это как некоторую команду post install в composer.json? Это просто: как ваши коллеги, которые git клонируют проект в первый раз, узнали об этом модуле и как его загрузить?
2. Но какой репозиторий мы бы использовали с composer? Тот, который я упомянул в вопросе, кажется устаревшим и не является официальным, и это единственный, который я нашел. Загруженный плагин, с другой стороны, является официальным. При разработке мы использовали бы тот же образ docker, но поскольку мы бы сопоставили папку WordPress с нашим репозиторием, это сделало бы плагин недоступным, поэтому я подумываю о копировании
w3tc
папки плагина в изображении docker (в конце концов, это просто загружаемая папка плагина) вplugins
папки на компьютере в скрипте установки.3. Тем не менее, я рассмотрю возможность включения его в команду post install в
composer.json
, чтобы сделать весь процесс более простым.