2014-02-07 4 views
0

У нас есть два сервера Linux Deluxe в GoDaddy.Как перенести данные с сервера разработки на производственный сервер?

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

Как перемещаться файлы между серверами? Какие инструменты я могу использовать для автоматизации этого процесса?

+4

Есть несколько проблем с этим вопросом, что могло бы объяснить отсутствие внимания. Во-первых, он довольно широк. Кроме того, он должен привлекать ответы с оценкой, потому что есть много способов решить эту проблему. Запросить инструменты для рекомендаций также не входит в объем Stackoverflow. Наконец, вы можете сделать некоторые исследования и обновить свой вопрос с помощью ранних результатов. Поиск развертывания программного обеспечения может быть хорошей отправной точкой. Кроме того, не забывайте о хорошем ol Rsync. – SirDarius

ответ

3

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

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

Причины:

  1. Это освобождает вас от вспоминания, какие файлы были обновлены. Просто нажмите.
  2. Он обеспечивает быстрый и простой механизм отката. Если вы подтолкнули изменение, и оно оказалось сломанным, просто roll back as shown here.
  3. Для управления изменениями вы должны иметь локальное репо.

git делает модернизацию производственной машины легкой с помощью крюка приема сообщения. Настройте голый репозиторий в своем доме входа на производственный сервер.

mkdir site.git 
cd site.git 
git init --bare 

Настройка корня сайта, например:

mkdir /var/www/www.mysite.com 

Затем создайте п сценарий оболочки hooks/post-receive (не забудьте chomod +x), содержащий что-то вроде:

#!/bin/sh 
GIT_WORK_TREE=/var/www/www.mysite.com git checkout --force 

Теперь добавьте site.git в удаленный репозиторий машины разработки. Нажатие этой цели обновит производственную машину.

NB

Я не выступает за мерзавцем, чтобы быть полным решением. Поскольку @Will I Am сказано в комментариях, вам нужно продумать конфиденциальные данные в свете того, где хранятся ваши репозитории. Однако даже для этого git может быть полезным инструментом при правильном настройке e.g. as explained here. Общая идея для конфиденциальных данных заключается в использовании git и отдельного репо или подмодуля в качестве интеллектуальной формы безопасного FTP.Конечно, если количество и/или сложность конфиденциальных данных малы, простой сценарий или сценарий удаленной оболочки будут делать то же самое.

+0

Это будет работать для файлов приложений, но данные конфигурации и не публичные ключи не должны храниться в репозитории git. Этот тип данных должен храниться в переменных среды или в файлах, которые отправляются с одного сервера на другой через SSH. –

1

Способы перемещения файлов:

  1. FTP: Работает как на Windows, и Linux, но очень и очень небезопасно - вы никогда не должны использовать это.

  2. SFTP: очень безопасный, но для доступа к вашим Linux-серверам необходим доступ к оболочке (SSH).

    • Если вы используете Windows для разработки, вы можете установить OpenSSH for Windows, и вы получите командную строку SCP.
    • Если вы используете Linux, он поставляется в комплекте с SCP, поэтому вы можете сразу начать использовать его.
    • Короткий синтаксис для SCP выглядит следующим образом: more details here. Эта команда запускается на вашем локальном сервере разработки и копирует файлы на производственный сервер.

      scp <your-local-files> <prod-username>@<prod-host>:<prod-port>

    • Есть GUI, как WinSCP и Putty/SuperPutty, а также, для выполнения УПП от Windows, в Linux.

  3. RSync: обертка над SCP, может эффективно использоваться для копирования большого количества файлов, так как это делает много вещей, как копирование только измененных файлов, сжатие и т.д. Работает на Linux, но вы не могли бы найти его для Windows.

Способы перемещения данных: Я предполагаю, что вы говорите о данных базы данных? В этом случае это зависит от вашей базы данных. Опять же общие инструкции:

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

  2. Скопируйте сгенерированный файл дампа с помощью описанных выше способов копирования файлов.

  3. Снова обратитесь к документации по базе данных о том, как импортировать этот файл.

Инструменты для автоматизации этого процесса: предположим, вы спрашиваете, как автоматизировать копирование этих файлов.Вот варианты:

  • SCP и RSync инструменты командной строки, так что вы можете просто использовать Cron (планировщик заданий) в Linux для автоматического копирования файлов в какой-то момент времени каждый день. Если вы используете Windows, вам нужно найти другие инструменты планирования.

  • Вам нужно каким-то образом сохранить пароли, если вы собираетесь автоматизировать. Но рекомендуется использовать аутентификацию на основе ключа без пароля, которая более безопасна, чем hardcoding ваш пароль где-то в скрипте. Вы можете найти множество учебников по SSH Public-key authentication.

И, наконец, существуют различные инструменты и обертки, которые упрощают (или иногда усложняют) этот процесс. Но им потребуются дополнительные пакеты для установки/установки и т. Д. Как правило, они входят в сферу развертывания программного обеспечения, но я не буду объяснять это дальше, так как он может быть очень упрямым. Лучше понять базовые инструменты, прежде чем перейти к абстракциям более высокого уровня.

0

Правда, что тот факт, что вы не дают нам достаточно информации, но, как говорится, я пошел бы в подходе, как говорит @Gene, с некоторыми изменениями:

  1. управления источником Have на сервер тестирования
  2. Имейте SSH открытым и правильно настроенным на производственном сервере, но НЕ ИСПОЛЬЗУЙТЕ root для подключения к нему
  3. Имейте SSH действительный логин на тестовом сервере, который настроен для подключения к производственному серверу , в идеале вы будете использовать сертификат с обеих сторон (производство и тестирование), чтобы вы могли подключаться от тестирования до производства без пароля (вы будете иметь открытый ключ из prod, установленного на сервере тестирования), отметьте this link о том, как это сделать
  4. Используйте политику фиксации в своем исходном элементе управления таким образом, чтобы вы знали, что определенные ветви или теги являются предварительно протестированными версиями или которые были прошел процесс контроля качества. Это важно!
  5. Настройка пост фиксации крюк на тестовом сервере (для GIT или Subversion), который выполняет следующие действия:
    1. Проверяет, если тег был создан
    2. Если это так, скопируйте файлы папки тегов и загружать их через вашу правильно настроенную учетную запись SSH без пароля на производственный сервер
    3. Выполняйте то, что вам нужно делать на производственном сервере ssh по этому же сценарию оболочки post-commit (например, перезапуск apache при производстве в случае изменения файла .htaccess или что-то подобное)

делая это таким образом имеет некоторые преимущества:

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

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

Удачи вам!

0

Я хотел бы использовать эти средства для автоматизации копирования файлов:

  1. FTP или SFTP - Они используются для копирования файлов между двумя серверами. Однако они просят ввести пароль пользователя вручную.
  2. expect - Expect может использоваться для автоматизации ввода пользователя и пароля вручную.
  3. scp - Это еще один вариант и может быть настроен для автоматизации копирования файлов.

Проверьте это: linux script to automate ftp operation

Смежные вопросы