Elasticweb — найдемократичніший віртуальний хостинг



Здрастуй, Хабр! Напевно, відразу вибачусь за свою відсутність і настільки довга перерва у публікації своїх дайджестів. Життя кардинальним чином змінилася, але я жадібно перечитую всі стрічки і незабаром продовжу своє публічне збиральництво цікавинок і корисностей для веб-розробників.

А зараз я хочу розповісти про наше з колегами творіння. Elasticweb — найдемократичніший віртуальний хостинг. Прозвучало, ймовірно, надто амбіційно, але після ознайомлення з тарифними планами десятків хостерів ми просто змушені так думати. У Elasticweb не існує мінімальної і максимальної вартості, ми застосували хмарний підхід до послуги shared хостингу і не обмежуємо вас за кількістю доменів, піддоменів або баз даних. Клієнти платять лише за використані апаратні ресурси сервера.


Тарифікація



Місячне обслуговування n-го кількості сайтів із загальною відвідуваністю 1000 чоловік в добу може коштувати ~30 рублів на місяць і менше. Зорієнтуватися по вартості утримання ваших проектів допоможе наш калькулятор.


Хостинг

PHP версії 5.6 із Opcache. За замовчуванням на кожному сервері встановлені Git, Composer, Drush, wpcli, антивірус і брандмауер. А найпікантніше те, що в якості веб-сервера використовується Nginx. Безумовно, в цьому є як плюси, так і мінуси, але щоб не створити черговий холівар на тему «Apache vs Nginx», я не буду загострювати увагу на факторах даного вибору. Зі зрозумілих причин .htaccess файли працювати не будуть, тому ми написали і автоматизували вибір конфігурацій для найпоширеніших CMS і фреймворків: Wordpress 4, Drupal 7-8, Yii, Joomla 2-3, Octobercms, OpenCart 1.5, ZenCart 1.5, CMS Made Simple, KodiCMS, MaxSite CMS, MODx Revolution, Zend Framework, Symfony, Laravel, Codeigniter, Kohana, phpBB3, MediaWiki, Asgard CMS. Також ми працюємо над створенням повноцінного редактора конфігурацій Nginx з інтерактивними підказками і автодополнениями. А на даний момент готові абсолютно за безкоштовно допомогти кожному перенесення існуючого проекту на Elasticweb.

Сервер статистики

Всі наші сервери працюють на Debian. Демон статистики з необхідною для ресурсу періодичністю опитує кожен процес користувача і формує звіт, який відправляється на сервер статистики. Такий демон є на кожному сервері. Після чого отримані дані групуються по серверам і акаунтів і представляються в вигляді графіків в панелі управління. Щоб забезпечити відсутність затримок ми реалізували експорт за розкладом в окремому потоці.

Ми моніторимо всі процеси системи, будь то активність веб-сервера, активність у командному рядку або робота інтерпретатора. Доктрина системи статистики — будь-яка взаємодія з сервером повинно бути враховано ( CPU %, RAM Memory usage, IO operations, Disk usage, Web bandwidth, MySQL bandwidth). Іншими словами, враховується навіть відкрита SSH сесія.

Демон написаний на Python з використанням бібліотек daemon, psutil, pwd, os, time, requests, json, datetime, MySQLdb, threading, re, platform, а для аналаза трафіку використовується сторонній модуль nginx-module-vts.

Панель управління

Замість CPanel і ISPmanager було прийнято рішення винайти власний велосипед. По-перше: адаптація існуючих продуктів під «еластик» здалася нам дуже об'ємною завданням, для виконання якої потрібно було б безліч милиць. По-друге: у нас є ще маса ідей і реалізовувати їх набагато простіше на власній платформі.

Основною метою при проектуванні і розробці серверного менеджера було забезпечення відмовостійкості. Нами була реалізована система черг з пріоритетами і логічною послідовністю виконання завдань. Всі команди виконуються тільки після звірки ключів безпеки і заточені суто на взаємодію з сервером панелі управління. У разі невиконання будь-якої операції адміністраторам приходить інформативне повідомлення про проблему.

Ми написали демон на Python для прослуховування команд, які передаються від панелі управління в форматі JSON. Сама панель написана на PHP. Нам було важливо отримати початкову архітектуру і мінімальний набір базових функцій, тому ми відмовилися від великих фреймворків начебто Symfony або Zend та за основу взяли Codeigniter 3 + HMVC ( для створення модулів ).

Спочатку проект повинен був з'явитися російською та англійською. Ми переписали дефолтні функції CodeIgniter для роботи з URI, щоб вони могли враховувати мову. Говорячи про саму локалізації, спосіб зберігати переклади у файлах і звертатися до них у вигляді ключів нам не сподобався. Тому ми використовуємо англійську як базовий мову в коді і заганяємо його в функцію, яка, у свою чергу, підключається до бази даних і шукає потрібний переклад рядки з урахуванням обраного на сайті мови.

Панель управління має на увазі під собою безліч форм, їх код та обробка займала занадто багато місця в контролерах. Плюс до всьому деякі форми необхідні виводити кілька разів. Тому ми написали Formbuilder для CodeIgnitor і виклали його на GitHub, вважаючи, що для кого-то цей інструмент буде корисний. А взагалі наша команда дуже альтруистически відноситься до OpenSource руху і ми плануємо зберегти подібну практику.

Система оплати

При розробці білінгу ми пішли від рахунків/інвойсів та місячних платежів. За аналогією з абонентами стільникового зв'язку, у клієнтів Elasticweb є персональний баланс, з якого і відбувається оплата послуг. Баланс може бути від'ємним протягом 7 днів, після чого сайти будуть заблоковані, а через місяць видалені. В майбутньому планується розробити систему кредиту довіри до користувачів. А вже зараз у нас працює реферальная програма для наших партнерів, умови якої можна дізнатися тут.

Апофеоз

Перша думка про Elasticweb прийшла зовсім випадково в звичайній розмові про залізо, сервера, хмарні технології і хостинги. Розробка тривала майже 3 місяці у вільний від основної роботи час. Ще місяць ми витратили на тестування продукту і ось підійшов час до одного з найбільш важливих і значимих для нас тестів — пройти через думка хабравчан.



Спасибі всім за увагу. З нетерпінням будемо чекати від вас критики, питань і пропозицій.

Яке у вас перше враження від Elasticweb?

/>
/>


<input type=«radio» id=«vv68881»
class=«radio js-field-data»
name=«variant[]»
value=«68881» />
Відразу пішов реєструватися
<input type=«radio» id=«vv68883»
class=«radio js-field-data»
name=«variant[]»
value=«68883» />
Думаю, що в майбутньому обов'язково спробую
<input type=«radio» id=«vv68885»
class=«radio js-field-data»
name=«variant[]»
value=«68885» />
Цікаво, але скептичиски ставлюся до молодих хостерів. Подивимося, що буде далі.
<input type=«radio» id=«vv68887»
class=«radio js-field-data»
name=«variant[]»
value=«68887» />
Пффф… Мені все це ні до чого, але бажаю удачі у ваших починаннях.

Проголосувало 148 осіб. Утрималося 44 людини.


Потрібен вам еластик для RoR?

/>
/>

<input type=«radio» id=«vv68889»
class=«radio js-field-data»
name=«variant[]»
value=«68889» />
Так
<input type=«radio» id=«vv68891»
class=«radio js-field-data»
name=«variant[]»
value=«68891» />
Немає

Проголосував 91 людина. Утрималося 63 людини.


Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.