Показаны сообщения с ярлыком wordpress. Показать все сообщения
Показаны сообщения с ярлыком wordpress. Показать все сообщения

воскресенье, 18 августа 2019 г.

Сборка плагинов и тем Wordpress в deb-пакеты

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

Например, плагины и темы на официальном сайте wordpress располагаются по ссылкам вполне предсказуемого формата. Благодаря этому, возможно обобщить скрипт сборки deb-пакетов с плагинами и темами для Wordpress. Получившийся скрипт оказывается способен собирать deb-пакеты с любыми плагинами и темами, имеющимися на официальном сайте:
#!/bin/sh

build()
{
TYPE="$1"
NAME="$2"
VERSION="$3"
DEPENDS="$4" || ""

if [ -n "$DEPENDS" ]
then
  DEPENDS=", $DEPENDS"
fi

case "$TYPE" in
  plugin)
    PACKAGE="wordpress-$NAME"
    ;;

  theme)
    PACKAGE="wordpress-theme-$NAME"
    ;;

  *)
    echo "$TYPE $NAME $VERSION: Unknown type"
    return 2
    ;;
esac

DIR="${PACKAGE}_${VERSION}"

wget --quiet https://downloads.wordpress.org/$TYPE/$NAME.$VERSION.zip 2>/dev/null \
  || wget --quiet https://downloads.wordpress.org/$TYPE/$NAME.zip 2>/dev/null \
  || (echo "$TYPE $NAME $VERSION: Failed to download ZIP-file" >/dev/stderr && return 1)

unzip -q $NAME.$VERSION.zip 2>/dev/null \
  || unzip -q $NAME.zip 2>/dev/null \
  || (echo "$TYPE $NAME $VERSION: Failed to unpack ZIP-file" > /dev/stderr && return 1)

rm $NAME.$VERSION.zip 2>/dev/null || rm $NAME.zip

mkdir -p $DIR/DEBIAN

# Формируем описание пакета
cat - > $DIR/DEBIAN/control <<END
Package: $PACKAGE
Version: $VERSION
Architecture: all
Depends: wordpress$DEPENDS
Maintainer: Vladimir Stupin <vladimir@stupin.su>
Description: $NAME $TYPE for Wordpress
 $NAME $TYPE for Wordpress
 Homepage: https://wordpress.org/${TYPE}s/$NAME/
END

chmod 755 $DIR/DEBIAN/control

cat - > $DIR/DEBIAN/postinst <<END
#!/bin/sh
# postinst script for Wordpress $TYPE $NAME

set -e

# summary of how this script can be called:
#        * <postinst> \`configure' <most-recently-configured-version>
#        * <old-postinst> \`abort-upgrade' <new version>
#        * <conflictor's-postinst> \`abort-remove' \`in-favour' <package>
#          <new-version>
#        * <deconfigured's-postinst> \`abort-deconfigure' \`in-favour'
#          <failed-install-package> <version> \`removing'
#          <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package

case "\$1" in
  configure)
        # Change permissions to application files
        if ! dpkg-statoverride --list /usr/share/wordpress/wp-content/${TYPE}s/$NAME >/dev/null; then
                chown -R root:root /usr/share/wordpress/wp-content/${TYPE}s/$NAME
                chmod 755 /usr/share/wordpress/wp-content/${TYPE}s/$NAME
                find /usr/share/wordpress/wp-content/${TYPE}s/$NAME -type d | xargs chmod 755
                find /usr/share/wordpress/wp-content/${TYPE}s/$NAME -type f | xargs chmod 644
        fi
  ;;
  abort-upgrade|abort-remove|abort-deconfigure)
  ;;
  *)
    echo "postinst called with unknown argument \\\`\$1'" >&2
    exit 1
  ;;
esac
END

chmod 0755 $DIR/DEBIAN/postinst

# Формируем содержимое пакета
mkdir -p $DIR/usr/share/wordpress/wp-content/${TYPE}s/
cp -R $NAME $DIR/usr/share/wordpress/wp-content/${TYPE}s/
rm -R $NAME

FILE=${PACKAGE}_${VERSION}_all.deb

# Формируем пакет
dpkg-deb -b $DIR $FILE >/dev/null 2>&1
rm -R $DIR

echo "$TYPE $NAME $VERSION: OK"
return 0
}

build plugin simple-ldap-login 1.6.0 php-ldap
build theme period 1.270
build plugin the-events-calendar 4.2.7
build plugin wise-chat 2.7
build plugin site-sticky-notes 1.1.0
build plugin so-widgets-bundle 1.9.10
Скрипт состоит из одной функции, которая собственно и занимается сборкой пакета, и вызовов этой функции для сборки нескольких плагинов и тем. Скрипт использует для работы утилиты wget, unzip и dpkg-deb. При отсутствии в системе wget или unzip, их можно установить из одноимённых пакетов.

В скрипте выше указаны версии плагинов, работающие с Wordpress версии 3.6. У плагина simple-ldap-login указана также дополнительная зависимость - пакет php-ldap. Вы можете указать в скрипте свой список плагинов и тем, указав их версии и дополнительные зависимости. При необходимости указать несколько зависимостей, нужно перечислить их через запятую и заключить в кавычки.

воскресенье, 9 августа 2015 г.

Перенос сайта Wordpress на другой домен

Не так давно возникла задача перенести блог на Wordpress на другой домен. Имелись только резервная копия базы данных и файлов. Задача тривиальная, за исключением нескольких моментов: 1. в базе данных имеется много ссылок на старый домен, 2. перенос осуществлялся с Apache на nginx + php-fpm, поэтому нужно было правильно настроить веб-сервер, 3. на старом хостинге отправлять письма можно было без аутентификации, на новом - только с аутентификацией.

На всякий случай, пройдусь полностью по всей процедуре восстановления.

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

Установим пакеты, необходимые для работы Wordpress:
# apt-get install nginx mysql-server php5-fpm php5-gd php5-mysql libphp-phpmailer
Возможно понадобится что-то ещё, но мне хватило этого.

2. Восстановление базы данных

Подключимся к только что установленному серверу MySQL:
# mysql -uroot -p mysql
Создадим базу данных blog, в которую будем восстанавливать резервную копию:
mysql> CREATE DATABASE blog CHARSET utf8;
Восстановим резервную копию:
mysql> use blog
mysql> source backup.sql
Теперь создадим пользователя, от имени которого Wordpress будет работать с базой данных:
mysql> use mysql
mysql> INSERT INTO user(user, password, host) VALUES('blog', PASSWORD('blog_password'), 'localhost');
mysql> FLUSH PRIVILEGES;
mysql> GRANT ALL ON blog.* TO blog@localhost;
mysql> FLUSH PRIVILEGES;
Теперь исправим содержимое базы данных так, чтобы все ссылки указывали на новый домен (domain.old - старый домен, domain.new - новый домен):
mysql> UPDATE wp_options SET option_value = REPLACE(option_value, 'domain.old', 'domain.new') WHERE option_name IN ('home', 'siteurl');
mysql> UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://domain.old', 'http://domain.new');
mysql> UPDATE wp_posts SET guid = REPLACE(guid, 'http://domain.old', 'http://domain.new');
mysql> UPDATE wp_posts SET pinged = REPLACE(pinged, 'domain.old', 'domain.new');
mysql> UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'domain.old', 'domain.new');
mysql> UPDATE wp_comments SET comment_author_url = REPLACE(comment_author_url, 'domain.old', 'domain.new');
Выйдем из клиента mysql:
mysql> \q
3. Настройка php5-fpm

Создадим новый или отредактируем имеющийся файл /etc/php5/fpm/pool.d/default.conf:
[default]

# Блог будет работать с правами пользователя www-data и группы www-data
user = www-data
group = www-data

# Этот пул php5-fpm будет ждать соединений на указанном UNIX-сокете
listen = /var/run/default.sock

# Права доступа к UNIX-сокету
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

# Динамическое количество процессов в пуле
pm = dynamic
# Максимальное количество процессов в пуле - 6
pm.max_children = 6
# При запуске php5-fpm создаётся 2 процесса в пуле
pm.start_servers = 2
# Если все процессы заняты, значит ожидается увеличение нагрузки, нужно создать ещё один процесс
pm.min_spare_servers = 1
# Если свободно больше 4 процессов, завершаем лишние
pm.max_spare_servers = 4
 
# Журнал запросов, обработанных php5-fpm
access.log = /var/log/php5-fpm.access.log

# Журнал для отладки, сюда попадают сообщения об ошибках
php_value[log_errors] = On
php_value[error_log] = /var/log/php5-fpm.error.log

# Отключаем возможность использовать URL'ы вида file.php/section/page/1
php_value[cgi.fix_pathinfo] = 0

# Страница может генерироваться максимум 30 секунд
php_value[max_execution_time] = 30
# Максимальный объём POST-запроса - 16 мегабайт
php_value[post_max_size] = 16M
# Максимальный размер вложений в POST-запросе - 8 мегабайт
php_value[upload_max_filesize] = 8M
# Выставляем местный часовой пояс
php_value[date.timezone] = Asia/Yekaterinburg
Теперь запустим php5-fpm:
# systemctl start php5-fpm.service
4. Подготовка файлов сайта

После распаковки файлов из резервной копии нужно положить их туда, где с ними будут работать nginx и php5-fpm (в нашем случае это путь /home/www01/domain.new) и выставить правильные права доступа:
# cd /home/www01/domain.new/
# chown www-data:www-data -R *
# find . -type d -exec chmod u=rwx,g=rx,o= \{\} \;
# find . -type f -exec chmod u=rw,g=r,o= \{\} \;
5. Настройка nginx

Пропишем в файл /etc/nginx/sites-available/default такие настройки:
server {
  listen 80;

  server_name domain.new;

  root /home/www01/domain.new/;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_pass unix:/var/run/default.sock;
  }
}
Включим использование этого файла веб-сервером:
# cd /etc/nginx/sites-enabled/
# ln /etc/nginx/sites-available/default .
И запустим сам веб-сервер:
# systemctl nginx start
6. Правка шаблонов Wordpress

Если шаблоны для сайта были разработаны или доработаны специально, нужно поискать и заменить в шаблонах возможно имеющиеся в них ссылки на старый домен. Поиск можно осуществить, например, так:
# cd /home/www/domain.new/
# grep -R domain.old *
Будут выведены имена всех файлов, в которых встречается старый домен и строчки, в которых этот домен встретился. Далее нужно последовательно открыть каждый файл и исправить в нём домен на новый.

По идее, уже сейчас сайт должен работать правильно. Однако, стоит открыть сайт в веб-браузере с активированной функцией отладки и посмотреть, не происходит ли обращений по старому адресу. Если такие обращения происходят, то скорее всего нужно исправить настройки используемой темы или какого-либо плагина Wordpress.

7. Перенаправление со старого домена

Может случиться так, что старый домен проплачен и будет работать ещё некоторое время. Чтобы не терять посетителей, пришедших на старый домен, можно перенастроить его DNS-серверы так, чтобы они указывали на новый хостинг. В таком случае в конфигурацию nginx можно внести небольшое дополнение, которое будет перенаправлять посетителей со старого адреса на новый:
server {
  listen 80;

  server_name domain.old;

  return 301 http://domain.new$request_uri;
}
Можно ещё немного подкорректировать этот фрагмент конфигурации. У многих интернет-пользователей старой закалки сложился стереотип, что имя любого сайта обязано начинаться с www. Чтобы не терять и таких посетителей, поменяем предыдущий фрагмент файла конфигурации следующим образом:
server {
  listen 80;

  server_name domain.old www.domain.old www.domain.new;

  return 301 http://domain.new$request_uri;
}
Чтобы новые настройки вступили в силу, перезагрузим веб-сервер:
# systemctl nginx reload
8. Настройка аутентификации при отправке почты

Как я уже говорил, на старом хостинге почта отправлялась без аутентификации, а на новом требуется аутентификация. Как вариант, на новом хостинге вообще может быть не настроен почтовый сервер. В таком случае всё-же можно отправлять почту, но для этого придётся аутентифицироваться на каком-либо стороннем сервере (gmail.com, yandex.ru, mail.ru и т.п.).

Для решения этой проблемы можно воспользоваться плагином для Wordpress, который называется WP SMTP. Ставим плагин и настраиваем почтовый ящик, который будет использоваться для отправки уведомлений:



На этом поставленные цели достигнуты, задача решена.

воскресенье, 2 марта 2014 г.

Установка и настройка Wordpress

Пока не о чем писать, достану из закромов немного тривиальщины.

1. Установка

Wordpress будет работать под управлением веб-сервера Lighttpd и будет использовать базу данных в MySQL. Сам Wordpress написан на PHP. Перед тем как устанавливать сам Wordpress, установим необходимые пакеты, если они ещё не были установлены:
# apt-get install mysql-server mysql-client lighttpd php5-cgi
Ставим пакет с wordpress и пакет с локализациями:
# apt-get install wordpress wordpress-l10n
Смотрим, что есть полезного в пакете wordpress, что может помочь в настройке сервера:
$ dpkg -L wordpress
Я отметил три момента:
  • Файлы Wordpress располагаются в каталоге /usr/share/wordpress
  • Есть пример настройки Apache в файле /usr/share/doc/wordpress/examples/apache.conf
  • Есть пример настройки самого Wordpress в файле /usr/share/wordpress/wp-config-sample.php
2. Настройка Lighttpd

Меня заинтересовал вариант настройки "defined Virtual host" и я подготовил файл /etc/lighttpd/conf-enabled/50-wordpress.conf с таким содержанием:
$HTTP["host"] == "blog.domain.tld" {
  server.document-root = "/usr/share/wordpress"
  alias.url += ( "/wp-content" => "/var/lib/wordpress/wp-content" )
  $HTTP["url"] =~ "^/" {
    server.follow-symlink = "enable"
  }
}
Осталось включить модули fastcgi, fastcgi-php, новоиспечённый нами "модуль" wordpress и перезапустить веб-сервер:
# lighty-enable-mod fastcgi fastcgi-php wordpress
# /etc/init.d/lighttpd restart
На данный момент уже можно зайти в блог, однако будет выведено сообщение, что он ещё не настроен.

3. Настройка Wordpress

Для настройки блога скопируем заготовку настроек в файл /etc/wordpress/config-blog.domain.tld.php:
# cp /usr/share/wordpress/wp-config-sample.php /etc/wordpress/config-blog.domain.tld.php
Зададим настройки подключения к базе данных:
define('DB_NAME', 'database');
define('DB_USER', 'user');
define('DB_PASSWORD', 'blog_password');
Обычно для пользователей, которые не будут вводить пароль вручную, я генерирую случайный пароль длиной 16 символов при помощи программы pwgen, которую можно установить из одноимённого пакета:
$ pwgen 16
Сгенерированный пароль можно использовать вместо blog_password в примере выше.

Укажем, что таблицы блога blog.domain.tld должны иметь префикс blog_:
$table_prefix  = 'blog_';
Пропишем русский язык в настройки блога:
define('WPLANG', 'ru_RU');
Посмотреть, какие языки поддерживаются можно в пакете wordpress-l10n такой командой:
$ dpkg -L wordpress-l10n
Если там есть файл с расширением mo, то его имя можно прописать в настройки.

4. Настройка базы данных

Осталось создать базу данных и пользователя. Для этого подключаемся к базе данных с правами администратора:
$ mysql -uroot -p mysql
Создадим базу данных:
CREATE DATABASE blog CHARSET UTF8;
Создадим пользователя, от имени которого движок блога будет подключаться к базе данных, а вместо blog_password подставим сгенерированный пароль:
INSERT INTO user(user, password, host) VALUES('blog', PASSWORD('blog_password'), 'localhost');
FLUSH PRIVILEGES;
Дадим новому пользователю права на полный доступ к базе данных:
GRANT ALL ON blog.* TO blog@localhost;
FLUSH PRIVILEGES;
5. Настройка блога

Для окончательной настройки блога нужно перейти по ссылке http://blog.domain.tld/wp-admin/install.php и заполнить форму с информацией о блоге и учётными данными его администратора:

После отправки данных откроется страница следующего вида:

На этом настройка блога почти закончена. Осталось лишь выбрать и установить подходящую тему и, при необходимости, установить полезные плагины.

6. Темы и плагины

Я подготовил несколько deb-пакетов с темами и плагинами к Wordpress и поместил их в собственный репозиторий.

Чтобы подключить репозиторий, можно добавить его в файл /etc/apt/sources.list:
deb http://deb.stupin.su/ wheezy main
Обновим список пакетов в репозиториях:
# apt-get update
Теперь можно установить из репозитория любой из имеющихся пакетов:
  • Тема Fluid Blue - wordpress-theme-fluid-blue
  • Тема F2 - wordpress-theme-f2 - наследник темы Fluid Blue, пришедший ей на смену
  • Тема Indicator - wordpress-theme-indicator
  • Тема Restaurateur - wordpress-theme-restaurateur
  • Тема Rundown - wordpress-theme-rundown
  • Плагин Blogger Importer - wordpress-blogger-importer - импорт заметок из блогов на blogger.com в Wordpress
  • Плагин Categories to Tags Converter - wordpress-wpcat2tag-importer - позволяет превратить категорию в тег и наоборт
На этом пока всё.

воскресенье, 7 июня 2009 г.

deb-пакеты с плагинами и темой для Wordpress

Тем же способом, который был описан в статье deb-пакет: тема arctic для dokuwiki собрал два deb-пакета с плагинами и один deb-пакет с темой для WordPress:
wordpress-plugin-fckeditor-2.5.0_all.deb - редактор FCKEditor, без которого не будет работать следующий плагин,
wordpress-plugin-multilingual-1.3.4.15_all.deb - локализация Wordpress для 14 языков, в том числе для русского,
wordpress-theme-fluid-blue-1.7.1ru_all.deb - приятная "резиновая" тема.