Сайт на удалённой машине с Линуксом

Введение

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

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

Если Вы согласны на адрес типа lisakov.github.io, то можно запустить себе блог совершенно бесплатно и очень быстро. Для этого не понадобится эта инструкция, читайте запись про установку Hexo и размещение сайта на Github’e.

Почти всему нижеизложенному меня научил hombit, за что ему исполинское бесчеловечное спасибо.

Хостинг

Что такое хостинг? Варианты.

Сначала определяемся с местом хранения сайта (хостинг). Это может быть как Ваш личный компьютер, так и арендованная удалённая машина. Сайт, на котором Вы прямо сейчас находитесь, лежит на удалённой машине на сервисе Digital Ocean, и все дальнейшие инструкции предполагают такое же или схожее развитие событий и с Вашей стороны. Самая дешёвая машина на этом сервисе стоит 5$/месяц (20 Гб SSD, 512 Мб оперативной памяти + какой-нибудь линукс на выбор). Ищите аналогичные сервисы по запросу «облачный сервер» («cloud server»). Например, есть отечественный аналог подешевле: firstvds.ru. Digital Ocean предлагает сервера в Европе и в Америке, а FirstVDS — в Москве. Ознакомьтесь с тарифами они вас приятно удивят.

Чем хороша удалённая машина с Линуксом? Тем, что Вы имеете полную свободу действий, можете ставить на неё любые программы и работать на удалённой машине в привычном терминале с любого компьютера. Чрезвычайно гибко и удобно.
Если Вы являетесь студентом/аспирантом, то при указании Вашего университетского e-mail адреса на DigitalOcean можно получить бонус в 100$, то есть 1 год и 8 месяцев бесплатного пользования самой дешёвой машиной. Я указал адрес @physics.msu.ru и где-то в течение суток получил бонус.

В качестве ОС я выбрал Ubuntu 14.04, 32-bit версию. Казалось бы, все пацаны знают, что 64-битные системы круче. Но круче они в первую очередь тем, что в них можно без проблем использовать более 4 Гб оперативной памяти. За это приходится платить: по умолчанию в 64-битной системе используется на 100 Мб памяти больше, чем в 32-битной. Ясно, что с нашими 512 Мб разумнее выбирать 32-битную систему.
Выбираем машину

Итак, если Вы хотите использовать удалённую машину на Digital Ocean, FistVds.ru или аналогичном сервисе, регистрируйтесь и оплачивайте её.

Если выбрали Digital Ocean и у Вас есть студенческий или аспирантский университетский e-mail адрес, регистрируйтесь на Github, берите «Student pack», на той же странице получайте код для Digital Ocean, после чего регистрируйтесь и там и получите бонус 100$.

Или же Вы подключаете свой компьютер к интернету так, чтобы у Вас был статический IP-адрес, если хотите держать сайт на своём компьютере.

Настройка удалённого доступа по SSH

Local & remote

Далее постфикс @local в prompt’e будет означать, что действие выполняется на локальной машине, а @remote — на удалённой.

Заходим на машину@DigitalOcean по ssh (нужно будет ввести пароль для root, который придёт по почте после создания droplet’а, скорее всего, первым делом будет предложено его сменить, введя два раза):

user $ssh root@ip

где «ip» — ip-адрес Вашей машины. Будьте внимательны, Вы заходите сразу под рутом. Из соображений безопасности вход по ssh из-под root’a советуют отключить, если интересно, подробности по ссылке.

Создаём пользователя и добавляем его в группу sudo:

root@remote #root@remote #adduser username

gpasswd -a username sudo

где username — Ваше имя для пользователя. Третья строка позволяет пользователю использовать sudo.

Удобно заходить на удалённую машину или копировать на неё файлы по scp, не вводя пароль. Для этого нужно добавить содержимое файла ~/.ssh/id_rsa.pub с Вашего компьютера в файл ~/.ssh/authorized_keys на удалённой машине. Можно это сделать вручную, скопировав и вставив, а можно так (спасибо комментариям):
user@local $ssh user@host «echo `cat ~/.ssh/id_rsa.pub` >>.ssh/authorized_keys»
Если у Вас на компьютере нет ~/.ssh/id_rsa.pub, сгенерируйте его следующим образом:
user@local $ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa
Попросят ввести пароль. Ничего не вводите, просто нажмите Enter пару раз. Если предполагается заходить на удалённую машину с разных компьютеров, обеспечьте им одинаковые файлы ~/.ssh/id_rsa.pub.

Поднимаем веб-сервер

На машине, где будет лежать сайт, установите Nginx (команда для Debian/Ubuntu):

root@remote #apt-get install nginx

Nginx (читается как «Engine X») — веб-сервер, написанный Игорем Сысоевым и используемый такими гигантами, как Яндекс и «ВКонтакте». Эта программа делает Ваш сайт доступным по адресу http://ip.address. Из аналогов широко известен веб-сервер Apache. Кстати, будьте внимательны, в Apache конфигурационным файлом является .htaccess, а в Nginx — nginx.conf. Дело в том, что когда кто-то пишет о веб-сервере и его настройках, часто по умолчанию имеется в виду Apache.

Создайте директорию /var/www и в файле /etc/nginx/sites-enabled/default поменяйте /usr/share/nginx/html на /var/www. Зачем это нужно? Я не знаю, так сказал Костик (он ответил в комментариях). Перезагрузите nginx для ввода новых параметров в действие:

root@remote #service nginx restart

После этой замены корень Вашего сайта расположится по адресу /var/www. Создайте там тестовый index.html с любым содержанием, которое можно будет увидеть, зайдя на http://ip.address.

Покупаем доменное имя

Один из крупнейших продавцов доменных имён (таких, например, как lisakov.com) — регистратор RU-CENTER. Покупайте там или на FistVDS.ru аналогичных сервисах доменное имя своей мечты. При необходимости регистратора можно будет сменить. Платные услуги

DNS подключать не надо.

Я пользуюсь регистратором RU-CENTER. Есть варианты и подешевле. В общем, изучите рынок регистраторов, если интересно. У меня претензий к регистратору нет.

Подключаем DNS-сервер

Чтобы привязать доменное имя к IP-адресу (здесь речь пойдёт о статическом IP, т.е. постоянном), нужно воспользоваться DNS (domain name system). Мы будем использовать DNS-сервера от Яндекса, он предоставляет такую услугу бесплатно.

Отправляйтесь по адресу pdd.yandex.ru, подключайте свой сайт, делегируйте его на Яндекс, получайте два адреса DNS, возвращайтесь на nic.ru/manager или на сайт своего регистратора, если выбрали не RU-CENTER, выбирайте Услуги → Мои домены → DNS-серверы → Изменить и вводите эти адреса туда. Состояние сменится на «Делегирован» в течение нескольких дней.

После выполнения этих операций, наконец, Ваш сайт станет доступен по адресу sitename.com в течение нескольких дней. Время появления зависит от интернет-провайдеров. Часто бывает, например, что с работы сайт доступен, а из дома — ещё нет, если провайдеры разные.

Получаем почту @domain.com

Такую почту можно получить, например, от Яндекса. Я теперь имею тысячу почтовых адресов для ящика @lisakov.com. Делается это всё там же, на pdd.yandex.ru.
Выбираем генератор для сайта

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

Сайты бывают статическими и динамическими. Динамические сайты генерируют содержание страниц после захода пользователя. Они медленнее статических сайтов. Блоги на популярных платформах WordPress, livejournal, blogger, blogspot — динамические.

Журнал, который Вы читаете прямо сейчас — статический. Все странички здесь — это обычные html файлы. Большинство статических журналов создаются с помощью различных генераторов статических сайтов. Зачем они нужны, эти генераторы? Ведь можно, например, написать самому CSS- и html-код для каждой страницы своего блога. Но при добавлении записи каждый раз придётся переделывать страницу со списком записей, ленту записей, ссылки под статьёй (на следующую и предыдущую статью) и пр.

Всё это и многое другое автоматически умеют делать генераторы, обширный список которых можно найти тут: staticsitegenerators.net.

Конечно, я не призываю Вас изучать все эти почти 400 генераторов. Отсортируйте их по звёздам, оставленным довольными пользователями. Я пользовался Octopress и Hexo. Могу порекомендовать и тот, и другой: оба хороши.

Между прочим, Octopress работает на Jekyll, упрощает процесс создания сайтов с помощью Jekyll’a. У Октопресса очень хорошая документация на официальном сайте octopress.org.

У меня есть запись о том, как установить генератор Hexo и разместить сайт на Github’e быстро и бесплатно.

Индексация сайта

Это уже совсем другая история. Но какую-то начальную информацию тут всё-таки дам.

Конечно же, мы хотим, чтобы наш сайт можно было найти в поисковых системах, а особенно в Google и Yandex. Для контроля за ходом индексации надо добавить свой сайт на webmaster.google.com и на webmaster.yandex.ru. Делать это необязательно, но крайне желательно. Инструменты для вебмастеров подскажут, где нерабочие ссылки, где сайт неоптимизирован для мобильных, как часто сайт посещает робот Гугла/Яндекса, какие существуют ссылки на Ваш сайт и многое другое. Если с содержимым сайта всё в порядке, обычно никаких дополнительных действий не требуется — роботы от Гугла и Яндекса сами придут к Вам в гости и проиндексируют Ваш сайт, если им всё понравится. Но если через неделю после того, как сайт стал доступным по адресу http://sitename.com, запрос «sitename.com» в упомянутых поисковиках не выдаёт Вашего сайта, можно начинать волноваться. Если через 2 недели появилась, например, только главная страница, то волноваться всё равно надо.

У меня, между прочим, так и было. Я недоумевал, в чём же дело. Понедоумевав ещё пару недель, я-таки нашёл причину, случайно зайдя в «Поисковый трафик → Меры, принятые вручную» на webmaster.google.com. Оказалось, что мой сайт попал в категорию «агрессивного спама», а содержание каждой страницы считалось автоматически сгенерированным бессмысленным текстом. Признаться, я был лучшего мнения о своих способностях излагать мысли. Написав через инструменты для вебмастеров запросы в Google и Яндекс, получил ответ, что сайт был снова проверен, ошибок больше не обнаружено, скоро индексация пойдёт. Ответили мне и из Яндекса, и из Гугла в день запроса, но в результатах выдачи Гугла сайт появился на следующий же день, а в Яндексе — через 15 дней.

Также рекомендуется создать файлы robots.txt (указания для роботов: что можно индексировать, а что нельзя) и sitemap.xml (список всех страниц сайта) для облегчения жизни поисковым роботам. Это необязательно, но желательно. Подробнее можете прочитать в справке Яндекса: robots.txt и sitemap.xml.

Статистика

Чтобы посмотреть, какие страницы самые популярные, сколько человек посещает сайт, из каких стран Вас посещают, на какие кнопки нажимают, как долго на странице пребывают и многое, многое другое, можно воспользоваться счётчиками от Гугла (Google Analytics) и/или от Яндекса (Yandex Metrika). Такую статистику можно сделать открытой, можете просмотреть всю статистику для моего сайта от Яндекса.

Чтобы эти счётчики поставить, надо добавить на каждую страницу код счётчика. Пример можете посмотреть прямо на этой странице, нажав Ctrl+U и найдя счётчик Яндекса по фразе «Yandex.Metrika» и счётчик Гугла по фразе «UA-5». Octopress, кстати, умеет добавлять счётчик Гугла, а счётчик Яндекса я его научил добавлять. Зачем мне два счётчика, спросите Вы? Не знаю, интересно было. До сих пор интересно. Результаты сравниваю. Бывает полезно. Счётчики поддерживают асинхронную загрузку, т.е. не увеличивают время загрузки страницы (по крайней мере, не должны).

С удовольствием отвечу на все вопросы и услышу замечания.