~ read.

Как создать собственный блог

Идея вести блог пришла внезапно. Последнее время делаешь много исследований и хочется поделиться чем-нибудь интересным. Тема для первого поста напрашивалась сама собой.

Первой идеей было взять уже готовый сервис. Благо имя им легион. Тут можно привести и Medium, и github pages, и ghost, который в итоге и вдохновил меня на текущее решение. Но, сделав демо аккаунт на https://ghost.org и посмотрев на цены, я решил, что я таки разработчик и способен развернуть платформу самостоятельно. Тем более, что написана она на nodeJS, что позволит разобраться с возможными багами, или доработать что-то под себя. Об этом и пост.

Дешевый не значит плохой

Когда то давно, услышав заветный промо код на 10 баксов в radio-t (который, к слову, на момент написания статьи перманентно ронял вкладку в браузере), я зарегистрировался на digitalocean. На тот момент я абсолютно бесцельно потратил средства нажитые нечестным трудом, грохнул дроплет и положил аккаунт на верхнюю полку. Достать его оттуда побудила необходимость хостинга под блог и, зная, что сервер там можно создать в готовой конфигурации и прямо с docker-ом в пределах одной минуты, решил воспользоваться им, взяв сам дешевый (5 американских рублей в месяц) вариант, который как ни странно вполне работоспособен, если не стоит задача запустить Weblogic %). Итак, у нас есть сервер с Ubuntu и есть внешний ip. Заходим по ssh с присланными по почте паролями (или как настоящие пацаны копируем сертификат на сервер, чтобы забыть про ввод паролей раз и навсегда) и...

Docker for everything

Последнее время я в основном разворачиваю приложения в dockere. Это такой универсальный способ что-то очень быстро запустить не вдаваясь на первом этапе в детали. Уже потом, изучив содержимое docker-контейнера и вдоволь наигравшись с технологией, можно настраивать контейнер так как нужно для боевого использования.

Разворачивать ghost прямо на Ubuntu не хотелось и я взял готовый официальный образ. Ставится всё это хозяйство одной командой:

docker run -d -p 80:2368 --name ghost \  
    -v <your_directory>:/ghost-override dockerfile/ghost

Если кратко, то "магия" в следующем: docker выкачает образ из своего репозитория dockerfile/ghost, затем запустит новый контейнер с именем ghost, который будет доступен по 80 порту -p 80:2368. Флаг -d говорит о том, что контейнер нужно запустить в фоновом режиме, а -v позволяет смонтировать определенный в docker-образе volume на произвольную директорию на диске.

Теперь можно зайти на сервер по 80 порту и увидеть приветственную страницу. При желании можно поставить nginx, у меня ещё руки не дошли. Админка доступна по добавочному url: /ghost. В первый раз попросят зарегистрировать основного пользователя и допустят в святая святых, где можно выбрать картинку для своего блога, поменять название и ещё по мелочи.

Просто добавь DNS

Заходить по ip приятно, но не слишком, поэтому идём к регистратору доменных имен, например, GoDaddy. После несложной регистрации покупаем какой-нибудь домен по дешёвке (ну не брать же для запуска блога домен .guru) и привязываем его к нашему серверу.

Для этого идем на вкладку DNS https://cloud.digitalocean.com/domains и прописываем соответствие дроплета полученному от регистратора доменному имени. Чтобы убедиться, что запись добавилась к DNS-серверам Digital Ocean, на сервере используем утилиту dig

dig ns1.digitalocean.com <your_domain>  

Должно вернуться что-то вроде этого

;; ANSWER SECTION:
developerblog.info.    1799    IN  A   128.199.35.19  

Если всё ок, то идём на сайт регистратора и прописываем на нём для нашего домена сервера имён Digital Ocean:

NS1.DIGITALOCEAN.COM  
NS2.DIGITALOCEAN.COM  
NS3.DIGITALOCEAN.COM  

Через некоторое время сайт будет доступен по доменному имени из браузера или консоли.

Лезем под капот

Всё бы хорошо, но теперь нажав на "домик" мы попадём на дефолтный URL, а не на свой домен. Дело в том, что у платформы есть своя конфигурация, которую docker-образ от нас заботливо скрыл (на самом деле, если читать инструкцию сразу, то вопросов не будет, но кто её читает?). Исправляем досадную мелочь.

В монтированной на шаге 2 папке создаём файл config.js (или берём отсюда и меняем production.url на нужный. Перезапускаем контейнер и радуемся, но не долго.

Что если мы хотим изменить что-то в текущем оформлении или вообще его кардинально изменить? На такой случай ghost поддерживает темы, которые фактически являются набором шаблонов handlebars, к которым можно подключать собственный js и css. Тему нужно разархивировать в директорию content/themes, перезапустить контейнер и зайти в админку, где она станет доступной для выбора.

Просмотрев несколько бесплатных тем я остановился на ghostium.

Нескучные обои

Очень скоро тему захотелось допилить. Например, локализовать какие-то вещи и добавить ссылки на себя в твиттер. Чтобы было удобно апдейтить тему, нужно сделать форк на гитхабе, поменять название в package.json и установить как новую тему.

Тот же репозиторий нужно склонировать себе локально и запустить набор несложных команд:

brew install node  
npm install -g bower  
gem install bundler  
npm i  
grunt dryrun  

Если что-то уже стоит, то команду можно пропустить.

Коммитим изменения в репозиторий, и обновляем оформление на сервере:

git pull && docker restart ghost  

На десерт. Тема поддерживает GA и Disqus из коробки. Для их изменения в partials/custom/config.js можно прописать свой ключ от GA и имя пользователя Disqus и не забыть перезапустить контейнер.

P.S.

Проделав всё вышеперечисленное, я понял за что сервисы хотят денег, но сделанное своими руками оно гораздо лучше, правда?

comments powered by Disqus