Как обновить производственный сервер без перезаписи пользовательских файлов?

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

Мне нужно регулярно обновлять файлы на моем живом веб-сайте, но я чувствую, что рабочий процесс, которому я следую, крайне неэффективен:

  1. Я вручную отслеживаю, был ли изменен каталог / файл на моем локальном хосте по отношению к производственному серверу.
  2. Для каталогов / файлов, которые были изменены, я заменяю файлы сервера на обновленные с использованием FTP
  3. В некоторых каталогах есть загруженные пользователем файлы (например, фотографии), и я должен быть особенно осторожен, чтобы не перезаписывать эти «живые» каталоги тестовыми каталогами, используемыми на моем локальном хосте. (Это так неправильно!)

Понятно, что мне здесь не хватает наилучшей практики, но я не могу найти ответ, несмотря на дни поисков в сети:

  1. Я подумал об использовании Git / SVN — но это не имеет смысла для меня, так как я одинокий разработчик и у меня нет нескольких человек, работающих над одними и теми же файлами
  2. Filezilla имеет эту полезную функцию, которая помогает помечать измененные каталоги / файлы — но это не кажется идеальным решением

Что мне не хватает?

PS — я использую стек PHP, MySQL, Apache на сервере общего хостинга.

1

Решение

Я бы посоветовал вам еще пойти на Git / Tortoise SVN

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

Помимо ветвления и разветвления, в GIT и Tortoise SVN есть множество функций. Это показывает хорошие изменения сравнения между кодами (+ и зеленый) для добавленных, (- и красный) для удаленных. Я нашел чрезвычайно удобным при работе над CSS в RWD

Слияние также становится проще и без трения. Разрешение конфликтов также является хорошим знанием

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

Для справки

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-preface-features.html

http://www.hongkiat.com/blog/github-overlooked-features/

2

Другие решения

Похоже, вам нужно автоматизировать процесс развертывания. Это называется в мире Интернета. Лично я пользуюсь , но есть много других вариантов, таких как . Как и в комментарии @ pala_, я определенно предлагаю использовать программное обеспечение для контроля версий, которое, вероятно, будет необходимо, если вы в конечном итоге будете использовать сервер непрерывной интеграции.

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

Если вы используете сервис, такой как GitHub или BitBucket, для размещения своего кода, тогда у вас есть возможность использовать веб-хуки, которые могут инициировать действия на сервере непрерывной интеграции при отправке обновленного кода.

Документация Github о веб-хуках

На сервере непрерывной интеграции вы можете использовать что-то вроде rsync для обновления файлов на вашем веб-сервере. Команда будет выглядеть примерно так:

rsync -avz -e ssh myproject/ [email protected]:/path/to/example.com

1

По вопросам рекламы [email protected]