Я программист по профессии, "администратор сервера" по необходимости компании.
Мы планируем избавиться от старого болезненного стиля развертывания «сайт обновления по FTP». Мы хотим, чтобы веб-сервер проверял последнюю базу кода из системы управления версиями в папку и имел "текущую" символическую ссылку на последнюю проверку (позволяющую легко вернуться к более старой версии, изменив символическую ссылку). идти.
Но у меня вопрос: как лучше всего работать с загруженным пользователем контентом? Этого нет в системе контроля версий. У меня есть несколько идей, как с этим справиться, но что является разумной и принятой практикой?
Если весь загруженный контент находится в одном каталоге, я вижу два пути.
Первый метод не требует реальных изменений кода, в то время как второй метод мне кажется немного чище.
Вы должны разместить его где-нибудь за пределами корня веб-сервера, /var/upload/
например. У него есть соображения безопасности: код веб-сервера не должен быть открыт для загруженного кода, и это может произойти, если вы смешаете эти две вещи и установите неправильные разрешения. И вы сохраняете свой контент между обновлениями.
Если пользователи загружают небольшие файлы, лучше всего хранить их в базе данных.
Я имею дело только с изображениями и аватарами для пользовательского контента. А также веб-серверы с балансировкой нагрузки. Я перекладываю весь загруженный контент на один веб-сервер, резервные копии которого создаются ежедневно. Затем я настраиваю сервер rsync на сервере содержимого. Веб-серверы запрашивают новые файлы через rsync каждую минуту во время задания cron. Затем все файлы копируются и копируются!
Загружаемый пользователем контент должен не быть помещенным в систему контроля версий, как вы упомянули. Тем не менее, их все равно следует создавать резервные копии.
Я рекомендую просто настроить сценарий ежедневного резервного копирования cron, который будет использовать rsync, tar, rdiff-backup или что-то еще, и загрузить данные на другой сервер. Конечно, ваш подход будет зависеть от важности ваших данных; для действительно важной информации вы можете настроить мгновенную репликацию (особенно для баз данных: прочтите о репликации базы данных).
Я подозреваю, что вы, возможно, немного над этим задумались. Хотя предпочтительным вариантом является просто изолировать веб-контент и загруженные файлы, вы также можете просто исключить каталог загрузки (и подкаталоги?) Из системы контроля версий.