Скорость, кэш и новый плеер
Как уже знают читатели моего телеграм-канала, сейчас я работаю над запуском персонального сайта Стасу Васильеву на Орбите - Sasflix.ru.
Для этого я выкачал все заметки и видео с его Бусти, обработал, и закачал на арендованный сервер. В ходе этой работы и последующих тестов мы сделали много разных изменений движка, которые заказчик разрешил выложить обратно в Open Source.
Вот, выкладываю.
Кэширование проверки прав
Орбита - это блог с подписками, поэтому там везде встроена проверка прав на загрузку аудио и видеофайлов.
Грузятся они пачками по 10 секунд и проверка производится при каждом обращении. Если на сайт пришла пара сотен человек и смотит свежий видос, то это можно нормально так тормозить. Так что теперь результаты этой проверки кэшируются для каждого юзера, и сразу для всех гостей, по умолчанию на 1 час. Поменять время кэша можно настройкой CACHE_MEDIA_ACCESS_TIME.
Кэширование хранилища S3
Хранить видео на локальном диске сервера очень удобно, но дорого. Нормальным решением будет использовать встроенную функцию работы с S3-совместимым хранилищем. Но эти хранилища - сетевые, так что какое-то время уйдёт на подключение и загрузку нужных данных.
Поэтому теперь можно указать ненулевое значение мегабайт в настройках CACHE_S3_SIZE, после чего во временную директорию будут сохраняться чанки медиа, которые загружают пользователи.
Когда размер кэша превысит указанное значение, более старые файлы будут удалены так, чтобы размер кэша оставался в пределах выделенных мегабайт. Таким образом, у вас всё время будут закэшированы самые популярные видосы.
Кэширование фронтенда
Во время реальной эксплуатации с тысячами посещений оказалось очень накладым каждому гостю рендерить страницу на сервере. И тут я провёл довольно много времени пытаясь разработать простую систему - кэшировать страницы только для гостей. Как оказалось, никаких готовых решений для Nuxt нет, или я не нашёл.
Поэтому написал своё, используя возможности сервера Nitro.
Указываете время кэширования в CACHE_PAGES_TIME в секундах, и готовые страницы будут складываться в Redis. Кэш сбрасывается при изменении страниц или заметок, а так же при перезапуске фронтенд приложения.
Проигрыватель Vidstack
Проигрыватель Plyr, который я использовал в Орбите уже довольно-таки давно считается устаревшим, но раньше меня это не особо беспокоило. Работает - и ладно.
Но когда я попылся реализовать функционал разбиения видео по таймкодам, оказалось, что Plyr поддерживает их очень криво. И я решил попробовать Vidstack, который призван стать заменой Plyr.
В результате у нес теперь есть и таймкоды, и превьюшки, и более удобный плеер.
Единственное, что мне пришлось сделать свой форк для реализации плоского меню настроек без вложенных пунктов.
Единственное, что мне пришлось сделать свой форк для реализации плоского меню настроек без вложенных пунктов.
Постараюсь оформить эти изменения в Pull Request и предложить авторам.
Генерацию превьюшек можно выключить настройкой EXTRACT_VIDEO_THUMBNAILS_ENABLED, но зачем? Оно же прикольное.
Аудиоверсия
Вряд ли это кому-то пригодится, кроме реальных блогеров с Бусти, но если вы включите EXTRACT_VIDEO_AUDIO_ENABLED, то при транскодировании видео будет выделяться его звуковая дорожка и вставляться отдельно под видео. Видосы можно будет слушать фоном, затрачивая меньше интернет-трафика.
Обновление старых видео
Чтобы добавить превьюшки и аудиоверсию уже загруженным видосам, есть скрипт core/cli/add-new-features.php, который нужно запустить в контейнере PHP.
Это займёт какое-то время, потому что скрипт скопирует оригиналы видосов в локальную директорию, достанет всё нужное, и загрузит обратно.
Остальные изменения
Остальные изменения не такие крупные, поэтому просто списком:
- Исправлен вывод даты в письме о покупке подписки.
- Упростил работу с тёмной темой - убрал режим "авто". Теперь она "полу-авто", меняется при смене системной темы или вручную.
- В боевом режиме файлы собранного фронта обслуживаются Nginx, а не сервером ноды - он отдаёт статику гораздо быстрее.
- Больше подробностей о версиях видео и скорости их обработки в админке.
- Живое обновление циферок в подвале заметок (просмотры, реакции) и форматирование тысяч.
- Вывод статуса "ошибка" у платежей в админке и разделе юзера.
- Улучшена работа фронтенда с единственной языковой версией - раньше он норовил где-нибудь вывести не тот язык при серверном рендере.
- Можете разрешить юзерами скачивать ваши видео и аудиофайлы настройкой DOWNLOAD_MEDIA_ENABLED - она выводит кнопку заказчки в проигрывателях десктопной версии. На мобильных устройствах кнопка не нажимается, это глюк Vidstack, поэтому там она пока спрятана.
Заключение
Как видите, изменений очень много.
Новый проигрыватель выглядит вполне себе как у взрослых - есть все основные функции стандартных видеохостингов.
Проект стал более крутым и быстрым, добавились опции кэширования, чтобы держать нагрузку в сотни и тысячи юзеров даже на не особо дорогом сервере.
Обновляемся как обычно:
git pull
service orbita restart
2
👍
👎
❤️
🔥
😮
😢
😡
😀
851
8/19/2024, 17:32:21
14 comments
Александр Наумов
8/19/2024, 23:07:44
Класс!!!
Василий, появилась какая-то проблема с редактированием страниц и топиков в которых есть загруженные фото. Поле с контентом пустое, когда пытаешься отредактировать, а страницы с фото вообще не показываются после создания, выдает ошибку:
500 _b.find is not a function
В консоли браузера:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
Может конечно это у меня на локальном компе, но хотя фото к превью топика грузится и редактируется потом нормально.
И на старых установках Орбиты, тоже нет этой проблемы.
А это ошибки, когда пытаюсь отредактировать топик:
Александр Наумов
8/19/2024, 23:20:31
Василий Наумкин
8/20/2024, 00:20:40
Мне кажется, у тебя первично, что сервер на загрузку картинки отвечает ошибкой 500, а потом уже от этого и ошибки в редакторе.
Проверяй log/error-дата.log, почему картинка не грузится.
Александр Наумов
8/20/2024, 12:52:04
Спасибо!
С топиками разобрался, файлы грузились но на них права не те ставились, после простановки 777, проблемы с топиками решилась. А вот у страниц файлы грузятся но изменение прав проблему не решает. Сейчас новая ошибка: 500 page.value.content?.blocks?.find is not a function
В папке log почему-то вообще файлы не создаются. Буду разбираться.
Попробовал создать страницу с фото на сайте который ставил 24 марта и не обновлял, там все хорошо.
Александр Наумов
8/20/2024, 13:03:44
И еще на сайте от 24 марта в папке log файлы создаются.
Василий Наумкин
8/20/2024, 13:41:33
У тебя явно с правами на директории какие-то проблемы.
Я работу с логами и обычными страницами даже не трогал - можешь проверить по истории Git.
Александр Наумов
8/20/2024, 13:47:43
Спасибо, понял!
Александр Наумов
8/22/2024, 01:30:58
Василий, подскажи, пожалуйста.
Я с Git-ом на ВЫ, когда я пытаюсь обновить проект который вносил изменения только в конфиги: git pull получаю ошибку:
error: Your local changes to the following files would be overwritten by merge:
frontend/package-lock.json
Please commit your changes or stash them before you merge.
Я делаю следующее git stash, но понимаю, что это не правильно, а как нужно делать?
Василий Наумкин
8/22/2024, 11:13:53
Всё просто - надо удалить имеющиеся изменения, от package-lock ничего сохранять не надо.
Отчего так получилось - я сам не понимаю, видимо я что-то немного накрутил с историей коммитов Git.
Александр Наумов
8/22/2024, 12:59:09
Спасибо!!!
Михаил Соловьёв
9/1/2024, 06:14:18
Заметка с вопросами об установке платная. Платежи не проходят. Напишу здесь.
В разделе примера конфигурации nginx начинается так:
Но это нынче deprecated, должно быть так:
Но вообще это костыли, нынче модно так
Михаил Соловьёв
9/1/2024, 06:21:58
А. Ну и nginx -t для проверки, а только потом systemctl restart nginx тоже костыли. Просто nginx -s reload. Оно скажет если ошибка где, и оставит всё как есть, а если нет ошибок просто перегрузит сам свой демон с новым конфигом.
Михаил Соловьёв
9/1/2024, 06:40:21
Ещё порадовало это:
Я конечно тоже люблю и midnight commander и htop. Но кажется скворечник не участвует в фестивале )
Можно кстати предложить пользователю, раз уж mc поставил mcedit вместо nano.
acidtmn
9/12/2024, 16:24:51
Посоветуйте, как запустить Орбиту на Synology в докере?
Orbita
The latest news about the project and new functionality.
You can log in to the admin panel with login and password demo.
For help, please contact help@orbitacms.ru
Online
Василий Наумкин
10/15/2024, 14:03:13
Это логика из моего движка Vesp.
У каждого контроллера может быть scope, то есть требуемое разрешен...
acidtmn
9/12/2024, 16:24:51
Посоветуйте, как запустить Орбиту на Synology в докере?
Скорость, кэш и новый плеер
14
Василий Наумкин
8/19/2024, 04:44:55
Разобрался, это глюк редактора после обновления. Иногда он формирует массив с блоками, а иногда, поч...
Александр Наумов
7/9/2024, 00:06:38
Случайно забрел на Тинькофф Журнал https://journal.tinkoff.ru/friendship-ended-with-patreon/ и сразу...
Subscriptions
Тестировщик
RUB 100 per month
Базовая подписка. Все платежи проводятся в тестовом режиме!
Подписчик
RUB 250 per month
Средний уровень подписки. Все платежи проводятся в тестовом режиме!
Советник
RUB 500 per month
Максимальный уровень подписки. Все платежи проводятся в тестовом режиме!