Назад | Перейти на главную страницу

Развертывание веб-сайта - управление загруженным пользователями контентом?

Я программист по профессии, "администратор сервера" по необходимости компании.

Мы планируем избавиться от старого болезненного стиля развертывания «сайт обновления по FTP». Мы хотим, чтобы веб-сервер проверял последнюю базу кода из системы управления версиями в папку и имел "текущую" символическую ссылку на последнюю проверку (позволяющую легко вернуться к более старой версии, изменив символическую ссылку). идти.

Но у меня вопрос: как лучше всего работать с загруженным пользователем контентом? Этого нет в системе контроля версий. У меня есть несколько идей, как с этим справиться, но что является разумной и принятой практикой?

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

  • Сделайте загруженный каталог символической ссылкой для контроля версий. Эта символическая ссылка указывает на целевой каталог для фактических загрузок.
  • Установите псевдоним в конфигурации вашего веб-сайта, чтобы он указывал на фактический каталог, который находится за пределами обычного корневого веб-сайта.

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

Вы должны разместить его где-нибудь за пределами корня веб-сервера, /var/upload/ например. У него есть соображения безопасности: код веб-сервера не должен быть открыт для загруженного кода, и это может произойти, если вы смешаете эти две вещи и установите неправильные разрешения. И вы сохраняете свой контент между обновлениями.

Если пользователи загружают небольшие файлы, лучше всего хранить их в базе данных.

Я имею дело только с изображениями и аватарами для пользовательского контента. А также веб-серверы с балансировкой нагрузки. Я перекладываю весь загруженный контент на один веб-сервер, резервные копии которого создаются ежедневно. Затем я настраиваю сервер rsync на сервере содержимого. Веб-серверы запрашивают новые файлы через rsync каждую минуту во время задания cron. Затем все файлы копируются и копируются!

Загружаемый пользователем контент должен не быть помещенным в систему контроля версий, как вы упомянули. Тем не менее, их все равно следует создавать резервные копии.

Я рекомендую просто настроить сценарий ежедневного резервного копирования cron, который будет использовать rsync, tar, rdiff-backup или что-то еще, и загрузить данные на другой сервер. Конечно, ваш подход будет зависеть от важности ваших данных; для действительно важной информации вы можете настроить мгновенную репликацию (особенно для баз данных: прочтите о репликации базы данных).

Я подозреваю, что вы, возможно, немного над этим задумались. Хотя предпочтительным вариантом является просто изолировать веб-контент и загруженные файлы, вы также можете просто исключить каталог загрузки (и подкаталоги?) Из системы контроля версий.