amarao (amarao_san) wrote,
amarao
amarao_san

миграция с фри на дебиан (wordpress)

Итак, я нашёл для себя идеальную схему организации многих виртуальных хостов на server managed software.


Поясню:

1) server-managed software - это когда содержимое сайта с активным приложением (медиавики, вордпресс, phpbb и т.д.) находится НЕ в каталоге /var/www/sitename, а в /usr/share/applicationname. Главным же моментом, который обеспечивает такой подход - управление приложениями веб-сайтов с помощью аптитьюда. Т.е. apt-get install wordpress, или там phpbb. А управление, значит и обновление! Т.е. выпустили новую багу для вордпресса, выпустили патч. В ближайшем aptitude upgrade оно починится само. Во всех инсталляциях, сколько бы их не было.

2) Политика debian требует, чтобы файлы конфигурации приложений лежали в /etc/appname/ (ну или /etc, если это один файл). Файлы же приложения, не зависящие от архитектуры (а всякие похапэшные приблуды от архитектуры не зависят) должны лежать в /usr/share/appname.

Это приводит к конфликту между мнением авторов на похапэ и политикой дебиана: авторы на похапэ хотят видеть свой config.php в каталоге с приложением, что строго противоречит идее дебиана о том, что конфиги лежат там, где конфиги, а в /usr/share вменяемые приложения не пишут.

Есть решение в стиле медиавики: мы делаем файл /usr/share/mediawiki/config.php симлинком на /etc/mediawiki/config.php (может файл иначе называется, суть та же).

У этого подхода есть большой недостаток: вы можете иметь ТОЛЬКО ОДИН такой сайт. Это очень плохо, если у вас пара сотен сайтов.

Итак, решение от вордпресса. Оно примитивно и гениально:



$debian_server = preg_replace('/:.*/', "", $_SERVER['HTTP_HOST']);
$debian_server = preg_replace("/[^a-zA-Z0-9.\-]/", "", $debian_server);
$debian_file = '/etc/wordpress/config-'.strtolower($debian_server).'.php';

if (!file_exists($debian_file)) {
header("HTTP/1.0 404 Not Found");
echo "$debian_file could not be found. The file is either not readable by this process or does not exist.

Please check if $debian_file exists and contains the right password/username.";
exit(1);
}

require_once($debian_file);

define('ABSPATH', '/usr/share/wordpress/');
define('WP_CORE_UPDATE', false);

require_once(ABSPATH.'wp-settings.php');
?>


Т.е. в /etc/wordpress лежит "конфиг-скрипт", который по имени хоста (к которому обращаются) определяет, какой их конфигов следует читать. Например, /etc/wordpress/labs.internal, если мы ставим вордпресс на http://labs.internal.

Конгениальное решение. Пожалуй, в существующей инсталляции меня смущает только вот этот файл:

/etc/apache2/conf.d/javascript-common.conf

<Directory "/usr/share/javascript/">
        Options Indexes FollowSymLinks MultiViews
</Directory>
~


ИМХО было бы логичнее его прописывать только для сайтов, которым "это нужно", а не на весь сервер сразу же.

PS Кажется, я понял, как должно выглядеть тру-джанго приложение.


PPS А наличие исполняемых файлов в /etc нормально. В конце-концов у нас есть /etc/ini.d/ просто набитый этими файлами под завязку.

PPPS Ката не будет. It matter!
Tags: apache, debian, debian policy, linux, www, администрирование
Subscribe

  • мы их теряем!

    Make: 1976 Прямо сейчас выходят на пенсию люди, для которых make был новомодной технологией, которую притащили хипстеры.

  • Админская мудрость

    Когда вывод strace на башовый скрипт становится понятнее самого скрипта, граница разумности давно пройдена.

  • Rules of internet

    Rule 34. There is porn of it. Rule 35. It's used to mine cryptocurrencies.

  • 3 comments
  • 3 comments

Comments for this post were locked by the author