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