2009-08-15 3 views
5

Я работал в компании по разработке веб-сайтов, где у нас были наши локальные машины, промежуточный сервер и несколько производственных серверов. Мы работали над macs в perl и использовали svn для фиксации сценариев и perl-скриптов для загрузки на производственные серверы. Теперь я работаю над своим собственным проектом и хотел бы найти хорошие практики для веб-разработки при использовании совместного веб-хостинга и не работать в среде, основанной на unix (со всей магией, которую я мог бы выполнять с perl/bash scripting/cron jobs и т. Д.)Рекомендации по развертыванию (php/mysql) для совместного размещения?

Так что мой вопрос будет дан мои условия, которые:

  • Я использую единый стандарт общего веб-хостинг от внешнего поставщика (с доступом SSH)
  • Я работаю с, по меньшей мере, одного другого человека и предназначен для использования SVN для управления исходным кодом
  • Я разрабатываю php/mysql под Windows (но используя linux)

Какую настройку вы предлагаете для тестирования, развертывания, переноса кода/данных? У меня есть сервер xampp, установленный на моей локальной машине, но не был уверен, какие методы используют для переноса данных и т. Д. Под окнами.

ответ

10

У меня есть отдельные персональные проекты на общедоступном хостинге; вот несколько мыслей, из того, что я делаю на одном из этих (тот, который наиболее активен и нуждается в некотором, по крайней мере, полуавтоматическом способе синхронизации):

Несколько слов о моей настройке :

  • Некоторое время назад у меня было все на SVN; теперь, я использую bazaar; но идея точно такое же (за исключение, с базаром, я местная история и все, что)
  • У меня есть доступ по SSH к серверу производства, как вы делаете
  • Я работаю на Linux эксклюзивно (так то, что я не мог бы быть столь же легко с окнами)

Теперь, как я работаю:

  • Все, что имеет то быть на производственном сервере (исходный код, изображения, .. .) является поручен к SVN/bazarr/все
  • Я работаю на местном уровне, с Apache/PHP/MySQL (я использую дамп производственной БД, что я импортировать локально раз в то время)
  • Я только один работа над этим проектом; вероятно, было бы хорошо для небольшой команды из 2/3 разработчиков, но не более.

То, что я делал раньше:

  • У меня был некоторые PHP скрипт, проверяющего сервер SVN для изменения между «последним пересмотром толкнул производство» и ГОЛОВА
    • Я предполагаю, что это самодельный PHP-скрипт выглядит как скрипт Perl, который вы сейчас используете. ^^
  • Этот скрипт создал список каталогов/файлов для загрузки в производство
  • И загрузил их через FTP-доступ
  • Это было не очень приятно (были ошибки в моем скрипте, я полагаю; Я никогда не успевал их исправить); и заставил меня вспомнить номер ревизии, когда я в последний раз толкнул производство (ну, он автоматически сохраняется в файл с помощью сценария, так что не трудно ^^)

Что мне теперь делать:

  • При переключении на базар, я не хочу, чтобы переписать этот сценарий, который не работал очень хорошо в любом случае
  • Я уронил сценарий полностью
  • Поскольку у меня есть доступ по SSH к серверу производства , Я использую rsync для синхронизации от моей машины разработки до производственного сервера, когда то, что у меня локально, считается стабильным/готовым к производству.

Несколько примечаний о том, как делать вещи:

  • не имеют промежуточный сервер: моя локальная установка достаточно близко, чтобы один
  • Не имея промежуточный сервер по производству в это нормально для простого проекта с одним или двумя developpers
  • Если бы я был промежуточный сервер, я бы, вероятно, пойти с:
    • сделать «обновление СВН» на него, когда вы хотите ГНА GE
    • , когда он в порядке, запустите команду Rsync от промежуточного сервера (который будет ба в последнем «стабильный» ревизии, поэтому OK для толкания производства)
  • С большим проектом, с более разработчиков, я бы, вероятно, не пошел с такой настройкой; но я нахожу это вполне нормально для (не слишком большого) персонального проекта.


Единственное «специальный» здесь, которые могли бы быть «линукс-ориентированный» использует Rsync; быстрый поиск, кажется, указывает на наличие исполняемого файла rsync, который может быть установлен на окнах: http://www.itefix.no/i2/node/10650

Я никогда не пробовал.


Как Замечание, вот что моя команда Rsync выглядит следующим образом:

rsync --checksum \ 
    --ignore-times \ 
    --human-readable \ 
    --progress \ 
    --itemize-changes \ 
    --archive \ 
    --recursive \ 
    --update \ 
    --verbose \ 
    --executability \ 
    --delay-updates \ 
    --compress --skip-compress=gz/zip/z/rpm/deb/iso/bz2/t[gb]z/7z/mp[34]/mov/avi/ogg/jpg/jpeg/png/gif \ 
    --exclude-from=/SOME_LOCAL_PATH/ignore-rsync.txt \ 
    /LOCAL_PATH/ \ 
    [email protected]:/REMOTE_PATH/ 

Я использую открытый/закрытые ключи Механизм, так Rsync не запрашивает пароль, кстати.

И, конечно же, я обычно использую ту же команду в режиме «сухого хода» первым, чтобы увидеть, что будет synchorised, с опцией «--dry-run»

И ignore-rsync.txt содержит список файлы, которые я не хочу быть прижаты к продукции:

.svn 
cache/cbfeed/* 
cache/cbtpl/* 
cache/dcstaticcache/* 
cache/delicious.cache.html 
cache/versions/* 

Здесь я просто предотвратить каталоги кэша для толкания производства - кажется логичным, чтобы не отправлять тех, так как данные производства не то же самое, как развитие данные.

(Я просто заметил, что есть еще «.svn» в этом файле ... Я мог бы удалить его, так как я не использую SVN больше для этого проекта ^^)


Надежда это немного помогает ...

+1

Большое спасибо. Меня по-прежнему удивляет то, что такие люди, как ты, вложили ответы с такой детальностью и ясностью. – zenna

+1

Добро пожаловать :-) (Некоторые ответы, которые я получаю и/или вижу, поражают меня тоже ;-) Так что, когда я могу помочь ... ну, вот что такое!) –

1

Что касается SVN, я бы предложил вам пойти с выделенным хостом SVN, например beanstalk, или использовать тот же серверный сервер для запуска SVN-сервера, чтобы оба разработчика могли его отключить.

В последнем случае ваш сценарий развертывания просто переместил бы биты в промежуточную веб-папку (доступную через beta.mysite.com), а другой сценарий развертывания мог бы переместить это в живой веб-каталог. Очевидно, что развертывание непосредственно на реальном сайте не является хорошей идеей.

Если вы решили пойти с выделенным хостом или хотите развернуть с вашего компьютера на сервер, используйте rsync. Это также моя текущая настройка. RSync выполняет дифференциальную синхронизацию (через SSH), так что это быстро и было построено для такого рода вещей.

По мере роста вы можете начать использовать инструменты для сборки с модульными испытаниями и еще много чего. Это оставляет только проблему синхронизации данных.

Я только синхронизирую данные с удаленного -> локального и использую командный файл DOS, который делает это через SSH, используя mysqldump. Cygwin полезен для машин Windows, но вы можете пропустить его. Сценарий импорта SQL также выполняет однострочный запрос для обновления некоторых ячеек, таких как имя хоста и веб-root для локального развертывания.

После установки этой установки вы можете сосредоточиться только на написании кода и удаленном развертывании, а локальная синхронизация и развертывание - процесс с одним щелчком мыши.

+0

Спасибо, я использую сборку для хоста SVN, поэтому я не могу выполнить сценарии на этом сервере. – zenna

+0

Поскольку код синхронизирован на вашем компьютере, вы можете запускать скрипты с вашей собственной машины (или ваш партнер может запускать их на своей машине). Сценарии также можно проверить в хранилище. – aleemb

1

Одним из вариантов является использование выделенной структуры для задачи. Capistrano подходит для языков сценариев, таких как php. Он основан на Ruby, но если вы выполните поиск, вы сможете найти инструкции по его использованию для развертывания приложений php.