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

5 ноября 2014. Комментарии .

Оглавление #

Введение #

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

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

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

Хостинг #

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

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

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

Если Вы являетесь студентом/аспирантом, то при указании Вашего университетского e-mail адреса на DigitalOcean можно получить бонус в 100$, то есть 1 год и 8 месяцев бесплатного пользования самой дешевой машиной.

Можно запустить сайт бесплатно и не арендуя удаленную машину. Для этого не понадобится эта инструкция, читайте запись про установку Hexo и размещение сайта на Github.

Выбираем машину #

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

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

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

user@local $
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. Покупайте там или на аналогичных сервисах доменное имя своей мечты. При необходимости регистратора можно будет сменить. Платные услуги 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 и Hugo. Могу порекомендовать два последних.

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

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

Конечно же, мы хотим, чтобы наш сайт можно было найти в поисковых системах, а особенно в 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). В 2018 году я наткнулся на отличную статью, которая заставила меня пересмотреть свое отношение к этим сервисам. Автор пишет:

Google Analytics is an ubiquitous solution to get a powerful analytics solution for free. It’s also a great way to provide data about your visitors to Google — also for free. There are self-hosted solutions like Matomo — previously Piwik. I opted for a simpler solution: no analytics. It also enables me to think that my blog attracts thousands of visitors every day.

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

Добавлено 14.05.2020. До сих пор пользуюсь goaccess. Вот как выглядит статистика посещения, собранная этой утилитой по логам Nginx: yesterday, day, week, month.