развертывание пользовательского программного обеспечения на Linux? - PullRequest
1 голос
/ 16 июля 2009

Я пишу внутреннее программное обеспечение компании на PHP и C ++.

Каковы наилучшие методы развертывания этого типа программного обеспечения на Linux-машине? В настоящее время мы используем экспорт SVN, есть ли другие методы?

Ответы [ 3 ]

4 голосов
/ 16 июля 2009

Мы используем checkinstall . Просто напишите простой Makefile, который копирует файлы в целевые каталоги на целевом компьютере, а затем запустите checkinstall, чтобы создать пакет RPM, DEB или TGZ, который впоследствии можно будет легко установить с помощью инструментов управления пакетами распространения.

Вы даже можете добавить сценарии оболочки, которые выполняются до и после копирования файлов, поэтому вы можете выполнить некоторую предварительную и последующую обработку, например, добавление учетных записей пользователей, записей в crontab и т. Д.

Как только вы станете более продвинутым, вы сможете добавить зависимости к этим пакетам, чтобы он также мог извлекать и устанавливать библиотеки PHP, MySQL, Apache, GCC и даже необходимые модули PHP или Apache или некоторые дополнительные библиотеки C ++, которые вам могут понадобиться, и все с одиночная команда.

1 голос
/ 17 июля 2009

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

По моему опыту работы с серверами Linux, эти системы часто создаются на заказ, и по моему опыту часто используют rsync, а не svn export и / или scp отдельно.

Сценарий может быть выполнен из командной строки следующим образом:

$ deploy-site --package=app \
--platform=dev \
--title="Revsion 1.2"

Внутренне, система будет брать все, что было в транке для данного пакета из SVN (я уверен, что вы могли бы действительно легко адаптировать это для git), генерировать новый уникальный тег с записью в журнале "развертывание Revision 1.2".

Затем он исправит любые конфигурационные сценарии с соответствующими изменениями (URL-адреса, хосты, пароли базы данных и т. Д.), Прежде чем выполнить повторную синхронизацию с соответствующим назначением.

Если есть проблемы с развертыванием, это так же просто, как повторить ту же команду только на этот раз, используя один из автоматически сгенерированных тегов из более раннего развертывания:

$ deploy-site --package=app \
--platform=dev \
--title="Reverting to Revision 1.1" \
--tag=20090714200154

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

0 голосов
/ 16 июля 2009

По моему опыту, существует компромисс между безопасностью и простотой развертывания.

Для моего развертывания у меня никогда не было проблем с использованием scp для перемещения файлов с одного компьютера на другой. Вы можете написать простой BASH-сценарий, чтобы взять список машин (из текстового файла или STDIN) и отправить данный каталог / приложение в заданный каталог на всех машинах. Скажем, вы гипотетически сделали это с каталогом bin, конечный пользователь никогда не узнает разницу.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...