Настройка VPS
Понедельник, 27 января 2014

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

Логинимся под root с предоставленным нам паролем.

ssh root@xxx.xxx.xxx.xxx

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

adduser username
usermod -a -G sudo username

Закрываем сессию и заходим на сервер под новосозданным пользователем.

exit
ssh username@xxx.xxx.xxx.xxx

Вводим пароль и первым делом добавляем RSA-ключ, чтобы больше этот пароль для логина не вводить.

mkdir .ssh
cd .ssh
echo *содержимое_ключа* > authorized_keys

Следуем инструкции на GitHub и создаём новые RSA-ключи, соответствующие этому серверу.

ssh-keygen -t rsa -C "your_email@example.com"

Добавляем созданный ключ на GitHub тут.

Ставим git.

sudo aptitude install git

Извлекаем файлы.

cd ~
git clone git@github.com:dikmax/dikmax.name.git

Инициализируем подмодули.

cd dikmax.name
git submodule init
git submodule update

В отдельном окошке собираем проект и заливаем его на сервер. Для сборки самого проекта понадобится куча пакетов вроде Haskell и Java, но эту часть я тут опущу, так как выполняется она не на сервере.

rcp dikmax-name.tar.lzma xxx.xxx.xxx.xxx:/home/username/dikmax.name/dikmax-name.tar.lzma

Можно, конечно, и на самом сервере проект собирать, но в таком случае нужен сервер с как минимум двумя гигабайтами памяти, а не с 512 мегабайтами, как у меня.

Распаковываем всё, что залили.

tar -xvf dikmax-name.tar.lzma

Для следующего шага нам понадобится nodejs. Для того, чтобы поставить последнюю версию, нужно добавить репозиторий с пакетами. А для того, чтобы добавить репозиторий, весьма пригодится утилита add-apt-repository. Так получилось, что она располагается в разных пакетах в зависимости от версии Ubuntu.

Ubuntu ≤ 12.04:

sudo aptitude install python-software-properties

Ubuntu ≥ 12.10:

sudo aptitude install software-properties-common

Теперь можно добавить репозиторий и установить последнюю версию nodejs.

sudo add-apt-repository ppa:chris-lea/node.js
sudo aptitude update
sudo aptitude install nodejs

Ещё для запуска сайта нам понадобится less препроцессор. Устанавливаем его глобально с помощью npm.

sudo npm install -g less

Теперь можно сгенерировать страницы сайта.

./dikmax-name rebuild

Если теперь запустить сервер, то страницы должны открываться по адресу xxx.xxx.xxx.xxx:8000.

./server

Но запустить сервер на 80-м порту (где он и должен работать) не получится, это можно сделать только под рутом. Я лучше оставлю сервер под локальным пользователем, но проброшу порты. Выполняем:

sudo iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT —to-port 8000
sudo sh -c "iptables-save > /etc/iptables.rules"

И изменяем /etc/network/interfaces, добавляем строчку:

pre-up iptables-restore < /etc/iptables.rules

Получится что-то вроде:

auto eth0
iface eth0 inet static
 	pre-up iptables-restore < /etc/iptables.rules
  	address 188.226.142.207
  	netmask 255.255.255.0
  	gateway 188.226.142.1
  	dns-nameservers 8.8.4.4 8.8.8.8 209.244.0.3

Теперь можно добавить сервер в автозагрузку. Есть несколько способов это сделать. Я же использую crontab. Для этого выполняем crontab -e и в открывшемся редакторе добавляем строку:

@reboot cd /home/username/dikmax.name/ && nohup ./server &

Дальше нужно настроить синхронизацию тяжёлых файлов. Я храню такие файлы в отдельном аккаунте Dropbox, (а до перехода на DigitalOcean я хранил их в Rackspace Files). Скачиваем Dropbox, запускаем и следуем инструкции на экране.

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf -
~/.dropbox-dist/dropboxd

Добавляем Dropbox в автозапуск в том же crontab -e.

@reboot nohup /home/username/.dropbox-dist/dropboxd &

Теперь нужно настроить синхронизацию комментариев с Disqus. Для этого извлекаем ещё одну копию репозитория.

cd ~
git clone git@github.com:dikmax/dikmax.name.git disqus-sync

Настраиваем.

cd disqus-sync/disqus-sync
npm install

И добавляем задачу на синхронизацию в крон (crontab -e). Синхронизация будет проходить каждые 15 минут.

*/15 * * * * /home/username/disqus-sync/disqus-sync.sh >> /home/username/sync.log

Осталось совсем немного деталей. Запрещаем root-пользователя.

sudo passwd -dl root

Ставим последние обновления системы.

aptitude update
aptitude safe-upgrade

Устанавливаем необходимые утилиты, я обычно ставлю mc, htop.

aptitude install mc htop

Перезагружаем систему и смотрим, как всё заработало.

sudo reboot

Всё, можно перебрасывать DNS и наслаждаться.

На самом деле всё проще, чем кажется, тем более что выполнять эти действия придётся только один раз.

← DigitalOceanlowmemorykiller →

Хочется что-то добавить или сказать? Я всегда рад обсудить. Пишите на me@dikmax.name.