Настройка VPS

Выкладываю инструкцию по настройке сервера для запуска моего же блога на свежесозданном VPS. Я для этого использовал сервер DigitalOcean c Ubuntu Server 12.04 на борту. Мне кажется, данная инструкция с некоторыми изменениями вполне подойдёт для запуска любого самонаписанного сервера. Ещё она определённо пригодится мне, когда я в следующий раз опять надумаю сменить сервер. Итак, приступим.

Нажмите, чтобы увидеть много технических подробностей...
DigitalOcean
DigitalOcean

Давеча блог сменил место своего проживания. Вместо Rackspace он хостится теперь у DigitalOcean.

На самом деле Rackspace был всем хорош, огромное количество сервисов, из которых я, правда, использовал лишь малость. Но главная причина ухода — цена. Минимальный сервер с 512 Мб памяти на Rackspace обходится в 15 долларов в месяц. И это ещё не включая трафик, который стоит 10 центов за гигабайт. Такой же сервер на DigitalOcean стоит в 3 раза меньше — 5 долларов, и эта цена включает один терабайт трафика.

Честно говоря, я не особо занимался поисками, просто случайно попалась статья со сравнением DigitalOcean и Linode. И в ней рассматриваются два VPS-хостера, каждый из которых дешевле, чем мой. А тут ещё купон обнаружился, покрывающий два месяца использования. Ну как тут не задуматься. В общем, я посмотрел различные отзывы и съехал.

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

Dart

Очередной эксперимент. В этот раз я решил переписать весь JavaScript-код этого блога на новомодном Dart. И если результат я не выложу в итоге на рабочий сервер, это всё равно неплохая возможность взглянуть на новый язык. Почему именно Dart? Даже и не знаю. Мне подход с написанием языка с нуля нравится больше, чем попытки исправить недостатки JavaScript с помощью всяких надстроек, как в случае TypeScript или CoffeeScript. Я не говорю, что это плохие языки, просто они пытаются обойтись «малой кровью», а Google, создатель Dart, играет по крупному.

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

var sum = (a, b) {
     return a + b;
};

Или даже ещё короче:

var sum = (a, b) => a + b;

Но это мелочи. Гораздо интереснее исправленные области видимости. Например, переменная, объявленная внутри цикла for, не видна вне его. Очень понравилось, как в Dart переделали всю структуру DOM-объектов. Например, у элементов свойство textContent превратилось в text, а childNodes в nodes. Наконец-то attributes — это явный ассоциативный массив, а не NamedNodeMap плюс набор методов вроде getAttribute и setAttribute. И classes — это множество, а не строка. Красота!

События тоже претерпели сильные изменения. Нет больше element.onclick и element.addEventListener (attachEvent в старых IE). Теперь события представляют собой потоки, на которые можно подписываться. Теперь нужно писать:

button.onClick.listen((event) {
    // do something
});

А если нужно, чтобы обработчик сработал только один раз:

button.onClick.first.then((event) {
    // do something
});

Свойство first в примере выше является Future, что по сути то же, что и Promise. Я, кстати, не знаю, в чём разница между Futures и Promises, буду рад, если кто-нибудь объяснит.

Конечно, вся эта красота не приходит просто так. И если текущая сжатая версия скриптов для блога на языке Dart занимает 13 кб (по большей части из-за подключённой библиотеки интернационализации), то она же, но скомпилированная в JavaScript, все 134.

Текущая версия скриптов тут. Комментарии не возбраняются, а очень даже приветствуются.

Новый блог

Совсем недавно я писал про Hakyll и статические генераторы. И теперь я рад объявить, что весь код сайта был переписан и уже работает! Welcome! Bienvenu! Добро пожаловать!

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

Старый блог

Старый блог

Теперь вас встречает простой и чистый интерфейс с большим шрифтом, который удобно читать. Надеюсь, вам нравится.

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

Hakyll

В общем, я загорелся идеей переделать свой блог на статическую генерацию. И в связи с этим посмотрел несколько кандидатур: Jekyll, DocPad, Hugo и Hakyll. У каждой из систем свои достоинства и недостатки. Вообще, статические генераторы сайтов — это благодатная тема для обсуждения: вариантов множество и каждый день появляются новые. Если у вас есть опыт работы с какими-то другими вариантами, то милости прошу в комментарии.

Jekyll — практически стандарт де-факто, написанный на Ruby. На этом движке работает GitHub Pages. Но в нем не хватает некоторых очень важных функции, вроде раздельной пагинации для различных типов записей.

Hugo — молодой движок на Go. Работает очень быстро. По заявлению разработчиков, время генерации одной страницы не должно превышать 3-х миллисекунд. Пагинация отсутствует вообще, но Roadmap проекта утверждает, что она скоро должна появиться. Думаю у проекта большое будущее. А пока…

DocPad — очень гибкий вариант, написанный на JavaScript. Для DocPad существует множество плагинов под самые различные нужды. Но в этом генераторе мне не понравилось соглашение по именованию файлов. Например, в 2013-09-10-something.html.md расширение означает, что файл нужно будет преобразовать из markdown в html, как будто нельзя это указать в конфигурации.

И, наконец, Hakyll. Это скорее не отдельное приложение, а библиотека для создания статических генераторов. Его конфигурация представляет собой программу на языке Haskell, а потому бинарник должен пересобираться после каждого изменения. Зато такой способ даёт подлинную гибкость. Даже если какой-то возможности и не хватает, ничего не мешает её дописать. Да-да, Haskell не может похвастаться огромной популярностью и учить ради какого-то генератора новый непростой язык вряд ли кому захочется. Но так уж получилось, что у меня есть базовые знания, поэтому я решил попробовать и пока не разочаровался.

Надеюсь, пройдет совсем немного времени и мы увидим обновлённый блог, работающий ещё быстрее. Наблюдать за процессом можно на GitHub.

← СтаршеМоложе →