Назад | Перейти на главную страницу

Есть ли упрощенный способ экспорта настроек с существующего сервера CentOS 5.10 для локальной подготовки Vagrant? (Марионетка, повар, ракушка или другое)

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

Достигнув утомительного процесса попытки сделать мою виртуальную машину похожей на мой онлайн-сервер внутри ... мне кажется, что Vagrant не хватает части. Сейчас процесс более или менее похож на ручной метод проб и ошибок. Не идеально, чтобы быстро настроить с первого раза или легко синхронизировать вещи с вышестоящим сервером.

По общему признанию, я могу не знать точно, что ищу ... отсюда вопрос.

Есть ли упрощенный способ экспорта настроек с существующего сервера CentOS 5.10 для локальной подготовки Vagrant? (Марионетка, Повар, ракушка или что-то еще)

Что-то вроде этого я мог бы себе представить ...

(Подключиться к онлайн-серверу ...)

  1. Обнаружение различий в репо и включение, отключение, добавление локальных по мере необходимости.
  2. Обнаружение пакетов и локальная синхронизация для соответствия. (установить или удалить из локального)
  3. Получите httpd.conf, настройте локальный (при необходимости) и синхронизируйте.
  4. Получите php.ini, настройте локальный (при необходимости) и синхронизируйте.
  5. Получите настройки MySQL, настройте локальный (при необходимости) и синхронизируйте.
  6. Получите часовой пояс и синхронизируйте.
  7. [Ваши предложения о дополнительных вещах, которые следует синхронизировать, приветствуются здесь ...]

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

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

Предостережение

В моих личных обстоятельствах я использую сервер CentOS 5.10 с cPanel. cPanel, кажется, делает много вещей на стороне сервера, что не всегда очевидно. Одним из примеров является то, что многие имена пакетов начинаются с cPanel и кажутся проприетарными, но в то же время связаны с тем, что я, возможно, захочу синхронизировать. (например, cpanel-php53) Насколько я могу судить, синхронизировать их нелегко ... так что нужно будет найти обходные пути. Другим примером могут быть пути, отличные от ожидаемых, но я не совсем уверен, поскольку недостаточно знаком с установками по умолчанию как CentOS, так и cPanel, чтобы быть уверенным в каких-либо идиосинкразиях.

Что я сделал до сих пор ...

Я кое-что сделал, прежде чем решил спросить, есть ли лучший способ, который больше работал бы рука об руку с Vagrant. Это не ужасно, но не совсем «оптимизировано» или исчерпывающе. Вот подробности ...

  1. Я научился бегать yum repolist all на обеих машинах и как увидеть репозитории в файловой системе с помощью cd /etc/yum.repos.d; ll;, но не о том, как использовать эту информацию для автоматической синхронизации репозиториев.

  2. Я написал сценарий оболочки, чтобы получить пакеты на локальном компьютере, очень похожие на удаленные. Однако, хотя он и работает честно, он не идеален, и мне интересно, есть ли лучший выход. Вопросы...

    • Я не уверен в разрешении удаления пакетов, уникальных для локальных. (также выдает несколько ошибок)
    • Я еще не разобрался, как компенсировать пакеты, предварительно подготовленные с помощью "cpanel", которые кажутся заменой того, что я действительно хочу (PHP, MySQL и т.д.), кроме полного удаления каждого из списка установки.
    • Его нельзя запустить как провайдер Vagrant, потому что он требует ввода данных пользователем по своей природе. В то же время запуск этого и удаление пакетов, «уникальных для локальных», уничтожит установки yum, ранее запускавшиеся во время подготовки.

 

#!/usr/bin/env bash

# This script is a helper for syncing local packages to match a remote server.
# It is geared toward a remote CentOS server with cPanel thrown in the mix
# and a local "server" managed by Vagrant. Regardless, the concepts are the
# same for many kinds of set-ups and it's fairly tweakable.

# To run this script from the command line...
# Be root or become root by running 'sudo -i',
# then run 'source /vagrant/.vagrant/sync-packages.sh'

remote_host=1.1.1.1
destination=/vagrant/.vagrant/

echo -e '\nGetting packages from remote server...'
ssh root@${remote_host} "rpm -qa --queryformat='%{NAME}\n' | sort" > ${destination}packages-remote.txt

echo 'Getting packages from local server...'
rpm -qa --queryformat='%{NAME}\n' | sort > ${destination}packages-local.txt

echo 'Compiling package sets for comparison...'

comm -23 ${destination}packages-remote.txt ${destination}packages-local.txt                         > ${destination}packages-remote-only.txt
comm -23 ${destination}packages-local.txt ${destination}packages-remote.txt                         > ${destination}packages-local-only.txt
sed -r '/^(cpanel|newrelic)/!d' ${destination}packages-remote-only.txt                              > ${destination}packages-remote-only-proprietary.txt
comm -23 ${destination}packages-remote-only.txt ${destination}packages-remote-only-proprietary.txt  > ${destination}packages-remote-only-non-proprietary.txt

echo "Packages total  on local  $(cat ${destination}packages-local.txt | wc -l)"
echo "Packages unique to local  $(cat ${destination}packages-local-only.txt | wc -l)"
echo "Packages total  on remote $(cat ${destination}packages-remote.txt | wc -l)"
echo "Packages unique to remote $(cat ${destination}packages-remote-only.txt | wc -l)"
echo "Packages unique to remote *proprietary* $(cat ${destination}packages-remote-only-proprietary.txt | wc -l)"
echo "Packages unique to remote *non-proprietary* $(cat ${destination}packages-remote-only-non-proprietary.txt | wc -l)"

# If there are packages that are unique to local, prompt for removal

if [[ -s ${destination}packages-local-only.txt ]]; then
    read -p 'Do you want to remove the packages that are unique to local? (y/n) ' -n 1 -r; echo

    if [[ $REPLY =~ ^[Yy]$ ]]; then
        echo 'Removing packages (this runs in quiet mode and may take some time)...'
        yum -y -q remove $(cat ${destination}packages-local-only.txt)
    fi
fi

# If there are *non-proprietary* packages that are unique to remote, prompt for install

if [[ -s ${destination}packages-remote-only-non-proprietary.txt ]]; then
    read -p 'Do you want to install the *non-proprietary* packages that are unique to remote? (y/n) ' -n 1 -r; echo

    if [[ $REPLY =~ ^[Yy]$ ]]; then
        echo 'Installing packages (this runs in quiet mode and may take some time)...'
        yum -y -q install $(cat ${destination}packages-remote-only-non-proprietary.txt)
    fi
fi

# Wrap up

echo 'Ensuring all packages are up to date (this runs in quiet mode and may take some time)...'

yum -y -q update

echo -e "\nWe're all done here. If you need to see a log of changes, please run 'nano /var/log/yum.log'\n"


3.– 7. Я написал сценарий оболочки, чтобы получить некоторые удаленные файлы конфигурации и переместить их на место локально. На поверхности он работает довольно хорошо, но я еще не проверял результаты глубоко. Я бежал date чтобы убедиться, что часовой пояс синхронизирован должным образом, и проверил содержимое некоторых файлов, чтобы убедиться в успешности.

Опять же, это не может быть запущено как провайдер Vagrant, потому что по своей природе требует ввода пользователя. Кроме того, файлы не настраивались, чтобы гарантировать, что они будут работать локально без проблем. (например, http.conf, чтобы Apache не наткнулся на что-то и не указал MySQL на правильный каталог данных) Наконец, я уверен, что это не единственные файлы, которые я должен переносить ... это были просто самые очевидные.

#!/usr/bin/env bash

# This script is a helper for syncing local settings to match a remote server.
# It is geared toward a remote CentOS server with cPanel thrown in the mix
# and a local "server" managed by Vagrant. Regardless, the concepts are the
# same for many kinds of set-ups and it's fairly tweakable.

# To run this script from the command line...
# Be root or become root by running 'sudo -i',
# then run 'source /vagrant/.vagrant/sync-settings.sh'

remote_host=1.1.1.1
destination=/vagrant/.vagrant/

echo 'Getting config files from remote server...'

scp root@${remote_host}:"\
/usr/local/apache/conf/httpd.conf \
/usr/local/lib/php.ini \
/etc/my.cnf \
/root/.my.cnf \
/etc/localtime \
" ${destination}

echo 'Syncing files...'

mv -f ${destination}httpd.conf  /usr/local/apache/conf/httpd.conf
mv -f ${destination}php.ini     /usr/local/lib/php.ini
mv -f ${destination}my.cnf      /etc/my.cnf
mv -f ${destination}.my.cnf     /root/.my.cnf
mv -f ${destination}localtime   /etc/localtime

echo 'All done!'

Вы можете просто использовать Чертеж.

Создание модулей Puppet и поваренных книг Chef

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