Скрипт для поддержания распределения PHP кода по серверам.

Y.Vladimir

Новичок
Скрипт для поддержания распределения PHP кода по серверам.

Есть нагруженная система, которая расделена на три сервера.
Код на трех серверах почти идентичный (на 70%).

Поскольку на трех серверах содержатся дубликаты кода, то возникаент необходимость:
- Централизовано изменять одинаковый код
- Доставлять новый код на удаленные сервера

Для реализации этой задачи:
- нужно выделить главный сервер из трех (на нем хранить весь код, также только на нем делать правки)
- написать скрипт, который будет ежедневно ходить по фтп на главный сервер, смотреть небыло ли обновлений в PHP файлах (по дате изменения), если были - то сливать обновления к себе.


Что думаете по поводу такой реализации, возможно есть варианты лучше?
 

Крот

Новичок
Есть еще такая штука, называется Capistrano - она специально предназначена для развертывания веб приложений.

В связке crontab + svn up ты непеременно столкнешься с проблемой разных config файлов и т.д. (очень не советую в репозиторий пихать конфиг файлы; ну если только болванку конфиг-файла).

Очень советую погуглить по капистрано. Пользуюсь и очень доволен; просто специализированный софт всяко лучше самописного. Заодно и скилл поднимешь :)

-~{}~ 08.10.09 01:42:

А хранить код разумеется в репозитории...
 

Alexandre

PHPПенсионер
когда это использование НЕ самописного софта поднимало скилл?
всегда...
не могу отнести к профф программистам тех, кто не умеет работать в консоле, с свн, с командами юникс, с отладчиками...
все это далеко не самописный софт.
 

HraKK

Мудак
Команда форума
Так, можно и я вклинюсь. Есть идентичный код на 5-6 серверах. И даже на хостингах( СВН поэтому отпадает и rsync вроде тоже да?), надо на них поддерживать одинаковый код.

У какого какие мысли? Думаю написать какой-то свой скрипт который будет рекурсионо FTP обходить и обновлять. Но даже не знаю, получится это или нет. Но возможно я изобретаю велосипед, подскажите?
 

Farsh

~ on ~ high ~ wave ~
HraKK
Сам как-то пытался что-то подобное намутить ;)
Пробовал быстренько внедрить rsync в php скрипт, но за****ся, и тупо написал скрипт, оббегающий серваки по фтп и синхронизирующий данные, правда мне это настолько кажется велосипедом, что никак не радует :)
p.s.
Если это удаленный говнохост без ssh, видимо остается изать как раз свой велосипед.
Если удаленный хост и есть ssh, стоит помучаться и завести rsync.
Если локальный хост - svn.
 

MiksIr

miksir@home:~$
Capistrano на руби... как-то совсем не хочется на все продакшн сервера ставить руби только ради этого софта.
А вообще, подобный софт очень интересует - может кто еще что использует? Я сейчас использую набор Makefile, но все сложнее и сложнее, особо когда требуются откаты новых версий в нескольких пакетах до предыдущего рабочего состояния.
 

dimagolov

Новичок
кстати, а что все пхп да пхп. база как бы тоже может меняться и ее структуру/хранимые процедуры тоже надо обновлять. а временами при этом и данные преобразовывать. Capistrano как я понял с базой не работает.
 

Farsh

~ on ~ high ~ wave ~
HraKK
Боюсь кода испугаешься, писалось на скорую руку -)
Идея такая:
- подрубаемся к фтп
- берем файлы с локальной директории ( ls -l -R ) и удаленной ftp_rawlist ( формат один и тот же )
- форматируем полученные списки в более приемлемый вид
- находим те файлы и папки, что есть удаленно, но нет локально : удаляем ( ftp_delete и ftp_rmdir )
- бежим по локальному списку :
- берем chmod
- если удаленно файла или папки нет - создаем ( ftp_mkdir и ftp_put ), ставим chmod
- если удаленно существует и это папка - проверяем chmod и идем дальше
- если удаленно существует и это файл - проверяем размер файла ( или время модификации, но только если ты уверен, что время на всех машинах синхронизировано, то есть правильно ) и делаем необходимое: либо бежим дальше, либо обновляем файл и ставим chmod

p.s.
вот и усе ;)
Но как ни крути, с rsync было бы все намного круче ;)
p.p.s
если все-таки надо, то могу выложить ;)

-~{}~ 09.10.09 00:21:

p.p.p.s.
или вот можно глянуть
 

HraKK

Мудак
Команда форума
Выложи лучше, благодарен) Я то ужаснусь, но перепишу заново, я же мастер индусс-кода, так что я даже сомневаюсь что ужаснусь)
 

Farsh

~ on ~ high ~ wave ~
HraKK
))
http://pastebin.org/40374

-~{}~ 09.10.09 01:48:
PHP:
My_File_Transfer_Ftp_Exception extends Exception {}

try {

    $transfer = new My_File_Transfer_Ftp();
	
    $transfer->setHost($domain_name);
    $transfer->setUserPwd($login.':'.$password);
    $transfer->connect();

    $transfer->synchronizeDirs($local_dir, $remote_dir, array());
    $transfer->disconnect();

} catch(My_File_Transfer_Ftp_Exception $e) {

    echo $e->getMessage(); 
  
}
 

HraKK

Мудак
Команда форума
Спасибо, завтра изучу, на первый взгляд не все так ужасно, как ты прибедняешся)))
 

Alexandre

PHPПенсионер
кстати, а что все пхп да пхп. база как бы тоже может меняться и ее структуру/хранимые процедуры тоже надо обновлять. а временами при этом и данные преобразовывать. Capistrano как я понял с базой не работает.
где-то у меня валялся скрипт, который раскладывает ХП (и функции мускуля) по файлам. их можно хранить в свн, ну и саму структуру БД.

Вообще-то у нас представлена архитектура так (идеи от fixxxer):
есть загрузчик скриптов и конфигов.
в конфигах прописан текущий номер (пусть будет номер версии)
создается папка с этим номером

как только мы заливаем новую версию, в новую папку, номер сразу проставляем в конфиге. Всегда можно сделать откат на продакшене изменив всего лишь одну цифру, если что-то не пошло.
 

dimagolov

Новичок
Alexandre, структуру то я и так храню в svn, но одним файлом, полученным из mysqldump с ключиком по-моему -d -R (не включать данные и включить процедуры). но для изменения структуры таблицы нужно из diff делать alter table, вот с этим пока засада....
 
Сверху