Как мы писали фронтенд собственной панели управления хостингом: фреймворк и бекдоры



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

Сегодня наш фронтенд разработчик Артыш расскажет, как писал фронтенд этой панели: какой выбрали фреймворк, какой антипаттерн считаем хорошим тоном и как защищаться от бекдоров, если пользуетесь готовыми библиотеками.

Выбор фреймворка: почему искали новый
Предыдущая панель была реализована на собственном фреймворке, написанном на jQuery. Мы сидели на VMManager, он требовал много доработок: по интерфейсу и функционалу, было тяжело сопровождать такой код. Добавление нового функционала в панель со стороны фронта занимало много времени. Понятно, что при желании и на jQuery можно реализовать хороший фреймворк (я до сих пор люблю jQuery) или даже подобие CMS, но это был не оптимальный вариант: начиная скудной документацией по самописному фреймворку и заканчивая не совсем корректной архитектурой самого приложения.

Старая панель была реализована в виде Single Page Application и на этом его хорошие качества заканчивались. После решения очередной головоломки по добавлению кнопки в список, пришло понимание, что нужна альтернатива. Выбор пал на Vue.

Почему SPA?
Single Page Application — идеальный выбор для панели управления. Панель управления в плане рендеринга довольно простая штука, эту работу можно легко доверить браузеру пользователя. К тому же панели не важна SEO-оптимизация, для этого у нас есть основной сайт. Ну и требуемое время на начальную загрузку всех необходимых скриптов пользователи панели воспринимают спокойно в силу специфики самих этих пользователей. Опять же, бекенд у нас получился классическим RestAPI сервисом — для предоставления в будущем открытого API нашим клиентам.

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

Почему Vue?
3 года назад Vue был относительно молодым фреймворком, но уже тогда о нем много говорили и писали, и когда вышел релиз версии 2.0, мы решили сделать ставку на него — и не прогадали. Сначала планировали просто постепенно заменять какие-то компоненты написанные на jQuery и Vue это позволял делать легко. Но потом, после того, как были переписаны довольно объемные компоненты, все таки решили, что лучше переписать вообще все приложение на Vue.
Это бы рискованный шаг и мы решили его сделать по 4 причинам:
  • Vue — простой декларативный фреймворк, его понимают даже верстальщики. Если что, под него легко найти разработчика или просто научить товарища. А значит у нас не будет проблем с поиском нового разработчика и его вхождением в проект, если меня переедет трамвай (хвала богам, в моем городе их нет).
  • Vue объективно хорош для написания SPA приложений.
  • У меня перед глазами был опыт развития React и я предположил, что популярность Vue будет расти так же. Сейчас фреймворк входит в TOP-3 популярных JS-фреймворков (это легко проверить поисковым запросом), уступая только React и Angular. У него хорошая поддержка, развитая экосистема и большое комьюнити.
  • Скорость разработки. Лично я сразу стал воспринимать Vue как этакий конструктор и разработка на нем идет довольно быстро: если мне нужен, например, компонент выбора даты, скорее всего на Vue он уже существует, свободен в использовании и опробован сообществом. Я просто устанавливаю компонент в проект, пишу тег и все работает. По сути, наша панель состоит на 70-80% из готовых библиотек. Я имею в виду именно использование компонента, а не размер кодовой базы, который можно проверить командой типа: npx intrinsic/loc

При реализации проекта всегда учитываешь его перспективы, особенно перспективы развития. И то, что в экосистеме Vue уже имеются такие инструменты как Weex, Quasar Framework или Nuxt по мне существенно расширяют горизонты развития нашей панели.

На Хабре есть замечательная статья о Vue от его создателя, а я расскажу о некоторых особенностях нашего приложения.

Синхронизация Vuex с сервисом RestAPI
Часть данных глобального хранилища Vuex в нашем приложении синхронизируется с RestAPI путем обыкновенных запросов по соответствующим адресам. Зачем мы так сделали? Ну хотя бы для того, чтобы основные настройки пользователя не были привязаны к конкретному браузеру конкретного устройства. Можно зайти в нашу панель с компьютера жены или из игрового клуба и при этом получить в то же знакомое окружение, что и было у вас на своей родной машине.

Кроме того, когда синхронизация была только с localStorage, некоторые браузеры при обновлениях теряли содержимое localStorage — оно полностью удалялось. Да и в последнее время прослеживается какая то тенденция к ужесточению политики хранения данных пользователей в куках, например функция в WebKit Intelligent Tracking Prevention — не ровен час они доберутся и до localStorage.

Шина событий
Да, мы используем глобальную шину событий. Как и в любом другом крупном приложении с множеством компонентов, рано или поздно возникает необходимость наладить взаимодействие между не связанными между собой компонентами. Даже через глобальное хранилище. Понятно, что если есть связь родитель-потомок, их взаимодействие стандартно организуется через свойства props в одну сторону и методом $emit в другую, ну или через хранилище, как и описано в рекомендациях Vue.

Но в документации описана и возможность использования глобальной шины событий. У нас в проекте куча форм с разными наборами полей и в некоторых случаях (их немного, но все из них принципиальные) нужно как-то по особенному реагировать на изменение значения поля. Хранить в глобальном хранилище значения всех полей каждой формы не имеет смысла:
  • Во-первых, из-за редкой необходимости
  • Во-вторых, все наши формы генерируются динамически и набор полей у любой формы может поменяться кардинально.

Поэтому я решил использовать механизм шины событий. При этом ничто не мешает использовать свой Event emitter — главное использовать этот механизм аккуратно, только для исключительных ситуаций и тщательно все подчищать за собой.

Взаимодействие RestAPI с панелью
Для большей отзывчивости интерфейса в старом jQuery-фреймворке обратная связь от RestAPI к клиентскому приложению эмулировалась через хитрую систему таймеров: она производила опросы RestAPI с определенным интервалом и перерисовывала узлы DOM, которые затронули изменения.

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

Для решения этой проблемы в новой панели я решил использовать связку из модуля Nchan для веб сервера Nginx и новых возможностей HTML5-интерфейсов — EventSource и WebWorker.

Модуль Nchan поддерживает отправку сообщений через Websocket, EventSource и Long-Polling. Я провел несколько тестов и решил использовать EventSource: сообщения могут быть только текстовыми и поток сообщений осуществляется только в одну сторону (от сервера). Это полностью решало поставленную задачу.

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

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

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

Я всегда проверяю пакеты на наличие хуков preinstall, install и postinstall в поле “scripts” файла “package.json”. Кроме того, использую статические анализаторы пакетов, такие как retire, snyk и команду “audit” пакетного менеджера npm.

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

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

После того, как пакет прошел анализ, я обязательно фиксирую его версию. Если нужна другая версия — пакет проходит анализ заново. Да, это занимает время, но оно того стоит.

Пока бэкдоры ни разу не попадали к нам на продакшн.

Много-много комментариев
Как я уже говорил, Vue был выбран за простоту и декларативность. В дополнение к этому я пишу много комментариев, практически к каждой строчке: чтобы в случае чего новый разработчик мог легко войти в проект и чтобы я сам легко возвращался к старым кускам кода.

За что я полюбил новый фронтенд и панель в целом
  • Стало проще поддерживать код
Разработка заняла полгода. Теперь я скорее занимаюсь поддержкой панели, свой код не жмет и не натирает.

Клиенты могут быстро получать то, что запрашивали


Стало быстро и удобно добавлять новые функции, которые появились в бекенде: например, оплату для юридических лиц я добавил за 2 дня, снепшоты — за 1 день.

https://vdsina.ru

Борьба за домен .amazon может иметь политические мотивы



В нашем блоге мы регулярно сообщали о подробностях спора между компанией Amazon и странами Амазонского пакта, которые всеми силами стремятся предотвратить регистрацию доменной зоны .amazon.

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

В 2019 году в лесах Амазонии бушуют сильнейшие пожары. Ситуация может обернуться экологической катастрофой. По данным учёных, тропические леса Амазонии поглощают четверть всего углекислого газа на Земле и вырабатывают пятую часть кислорода. Не случайно их называют лёгкими планеты. Также эти леса составляют 10% всей земной флоры и фауны, и именно благодаря ним поддерживается стабильность климата.

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

В столь напряженной обстановке нежелание отдавать на сторону домен .amazon вполне понятно. Вряд ли эта доменная зона, находясь под управлением Amazon, будет использована для критики правительства, но последнему не хочется уступать даже в мелочах.

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

www.webnames.ru

Завоз железа. Засетапили новую партию железа в лучшем дата-центре Москвы - DataPro



Завоз железа. Засетапили новую партию железа в лучшем дата-центре Москвы — DataPro. В данный момент доступны: Стандартные серверы vdsina.ru/pricing (CPU 3.2 GHz), Hi-CPU vdsina.ru/pricing/hi-cpu-vds (CPU 4.5 GHz), Выделенные серверы vdsina.ru/pricing/dedicated-server (CPU 4.2 GHz).



500(!!!) Мбит/сек скорость подключения КАЖДОГО сервера (VDS / VPS / cloud / instance / хуинстанс) клиента сверх-хостинга серверов на ЛЮБОМ ТАРИФЕ! Это невероятно, НО в стоимость тарифов входит защита от ddos-атак!

Статистика по версиям PHP, CMS и панелям

Недавно мы перевели все серверы на PHP 7.3, попутно собрали немного интересной статистики.

86.44% сайтов используют новую версию PHP 7.3, дальше идет 5.6 версия с долей в 9.26%.



WordPress ожидаемо оказалась самой популярной системой управления сайтами (73.26%), дальше идет OpenCart (9.78%) и Joomla (8.6%).



В свете последних новостей с повышением цен на панель управления Cpanel, она потеряла лидерство популярности среди наших клиентов. Самой популярной панелью стала DirectAdmin (37.69%), дальше идет Cpanel (32.8%) и ISPmanager 5 (15.25%).



https://lite.host/
https://billing.lite-host.in

Три дня до конца акции. Скидка 30% на серверы Xeon E3v6

Лето еще придёт, а такой скидки на выделенные серверы Xeon E3v6 можно уже и не дождаться. Ещё три дня, чтобы заказать выделенный сервер с мощным процессором (до 4,2 ГГц) и получить скидку 30% на три месяца. Успевайте!


Ваш промокод для заказа — E3V6_SUMMER. Действует до 31 августа включительно.
В наличии конфигурации до 64 Гб оперативной памяти и 4 дисков — HDD, SDD и скоростных NVMe. Осталось всего 5 серверов.

  • Запуск сервера в течение суток
  • Администрирование днём и ночью, без выходных
  • Удобство управления — ISPmanager, DCImanager, IPMI-KVM
  • Возможность подключить VLAN/VPU, BGP, DDoS-защиту
Можно оформить предзаказ на нужную конфигурацию и заранее забронировать сервер. Для этого позвоните в отдел продаж по телефону 8(800)775-53-32 или отправьте сообщение в чат на https://1dedic.ru

Зарегистрируйтесь сейчас OVHcloud Summit

Обеспечение безопасности и контроля ваших данных


7е издание саммита OVHcloud отметит 20 — летний OVH
Это событие будет возможность поблагодарить нашу экосистему. В этот день мы вновь подтверждаем обязательство, которые делают нам альтернативный плеер в облаке в течение двух десятилетий.
Вы также узнаете наши новейшие решения и инновации. Это позволит вам сохранить полный контроль над вашими данными и максимально свободно.
summit.ovhcloud.com/fr/subscription/
summit.ovhcloud.com/fr/

Debian 10 "Buster" now available on our instances



Debian Buster, 10-я версия успешного дистрибутива Linux, теперь доступна для всех наших диапазонов экземпляров, и вы можете развернуть ее прямо сейчас из консоли или выполнив следующую команду с `scw`:
scw create --commercial-type = <instance-type> debian-buster


Эта доступность следует через несколько недель после выпуска новой версии.

Действительно, время, необходимое для проведения необходимых испытаний до окончательного производства, примененного ко всем диапазонам наших экземпляров (экземпляры разработки, экземпляры общего назначения и т. Д.), Сопровождалось углубленной работой по перестройке нашей системы производства изображений. Этот крупномасштабный проект призван помочь нам ускорить время их генерации в будущем.

Уже готовые для установки на наши выделенные серверы Dedibox с 10 июля, настало время для наших экземпляров воспользоваться его многочисленными исправлениями и функциями.

К ним, в частности, относятся следующие:
  • Обновленная версия ядра 4.19 и 5.0 Bash по умолчанию;
  • замена iptables на NFtables и AppArmor по умолчанию включены;
  • Наличие OpenJDK 11.0, Nodejs 10.15 и Python 3.

Наши опытные инженеры на неделю опережают график

Наши опытные инженеры на неделю опережают график этого полного обновления сети в многопрофильном трасте в Ноттингеме. Новая базовая сеть 10 Гбит / с высокопроизводительными виртуальными серверами даст ученикам и сотрудникам повышение производительности, когда они вернутся на следующей неделе!



www.arubacloud.com/

Действие Регламента по защите персональных данных (GDPR)



В данной статье мы рассмотрим, что включает в себя Регламент по защите персональных данных (GDPR), какие изменения в части процессов обработки он повлек за собой и повлек ли вообще, а также иные вопросы, связанные с вступлением Регламента в силу.

Потребовалось ли внедрение новых механизмов по обработке и предоставлению персональных данных и их защите?

Персональные данные (далее ПДн) – вопрос, затрагивающий сферы работы как государственных органов, так и интересы бизнес-сообщества. Действия, связанные с ПДн, выходят на первый план в работе как государственных инстанций, так и коммерческих компаний. В современных условиях для трансграничной передачи ПДн требуется наличие единого детализированного правового акта. Общий регламент по защите данных (англ. General Data Protection Regulation или GDPR) вступил в силу 25 мая 2018 года и закрепил определенные принципы обработки ПДн и установил определения следующим терминам: consent, personal data и иным положениям, основные из которых будут рассмотрены в данной статье.

blog.selectel.ru/gdpr/