Существует ли упрощенный способ экспорта параметров с существующего сервера CentOS 5.10 для локальной подготовки Vagrant? (Кукольный, повар, ракушка или иное)
Недавно я начал изучать, как использовать Vagrant для раскрутки локальной среды разработки. (после разочарования в связи с различными вариантами стека WAMP) Vagrant великолепен до сих пор... небольшой (ха) кривая обучения, но выглядит многообещающе в долгосрочной перспективе.
Достигнув утомительного процесса, пытаясь заставить мою виртуальную машину выглядеть как мой онлайн-сервер внутри... мне кажется, что в Vagrant отсутствует часть. Процесс сейчас кажется более или менее похожим на ручную пробу и ошибку. Не идеально для быстрой настройки с первого раза или для простой синхронизации данных с вышестоящего сервера.
По общему признанию, я не могу точно знать, что я ищу... отсюда вопрос.
Существует ли упрощенный способ экспорта параметров с существующего сервера CentOS 5.10 для локальной подготовки Vagrant? (Кукольный, повар, ракушка или иное)
Что-то вроде этого я и представлял...
(Подключение к онлайн-серверу...)
- Обнаружьте различия репо и включите, отключите, добавьте на локальном по мере необходимости.
- Обнаружение пакетов и синхронизация локальных для соответствия. (установить или удалить из локального)
- Получите httpd.conf, настройте локально (при необходимости) и синхронизируйте.
- Получить php.ini, настроить локальный (при необходимости) и синхронизировать.
- Получить настройки MySQL, настроить локальный (при необходимости) и синхронизировать.
- Получить часовой пояс и синхронизировать.
- [Ваши предложения для дополнительных вещей, которые должны быть синхронизированы, добро пожаловать сюда...]
В идеале, это должно выполняться во время подготовки и в основном синхронизировать локальную версию с онлайн-версией. Это избавило бы от необходимости постоянно настраивать вашу локальную настройку вручную, чтобы поддерживать синхронизацию. Если что-то было изменено в сети (хостом или внутри компании)... оно будет распространяться автоматически. (конечно, в идеале вы можете пометить настройки, чтобы настроить поведение в соответствии с вашими потребностями)
В качестве альтернативы, я думаю, если бы я мог упаковать онлайн-сервер без упаковки различных пользовательских данных, это также сработало бы. Тем не менее, это кажется невозможным из того, что я могу сказать... и это, безусловно, не будет очень эффективным.
Предостережение
В моих личных обстоятельствах я нахожусь на сервере CentOS 5.10 с cPanel. Кажется, cPanel делает много вещей на стороне сервера, что не всегда очевидно. Одним из примеров является то, что многие имена пакетов начинаются с cPanel и кажутся проприетарными, но в то же время связаны с вещами, которые я мог бы захотеть синхронизировать. (например, cpanel-php53) Насколько я могу судить, они не могут быть легко синхронизированы... поэтому необходимо обойти обходные пути. Другим примером могут быть пути, отличные от ожидаемых, но я не совсем уверен, поскольку я недостаточно знаком с установками по умолчанию как CentOS, так и cPanel, чтобы быть уверенным в каких-либо идиосинкразиях.
Что я сделал до сих пор...
Я кое-что сделал, прежде чем решил спросить, есть ли лучший способ, который больше работает рука об руку с Вагрантом. Это не ужасно, но на самом деле не "обтекаемый" или всеобъемлющий. Вот подробности...
Я научился бегать
yum repolist all
на обеих машинах и как посмотреть репозитории в файловой системе, используяcd /etc/yum.repos.d; ll;
, но не как использовать эту информацию для автоматической синхронизации репо.Я написал сценарий оболочки, чтобы локальные пакеты были очень близки к удаленным. Однако, несмотря на то, что он справляется со своей задачей, он не идеален, и мне интересно, есть ли лучший выход. Вопросы...
- Я не уверен в разрешении удаления пакетов, уникальных для локальных. (также выкидывает несколько ошибок)
- Я не разобрался, как компенсировать пакеты, предварительно добавленные с помощью "cpanel", которые кажутся заменой того, что я действительно хочу (PHP, MySQL и т. Д.), Кроме полного удаления каждого из списка установки.
- Его нельзя запускать как поставщик Vagrant, поскольку он требует ввода данных пользователем по своей природе. На этой же ноте запуск этого и удаление пакетов, "уникальных для локальных", уничтожит ням установки, ранее запущенные во время подготовки.
#!/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!'
1 ответ
Вы можете просто использовать Blueprint.
Создание кукольных модулей и поваренных книг шеф-повара
Вы сможете отредактировать полученный пакет по вкусу, прежде чем пытаться развернуть его на другом сервере.