Выкладываю инструкцию по настройке сервера для запуска моего же блога на свежесозданном 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 и наслаждаться.
На самом деле всё проще, чем кажется, тем более что выполнять эти действия придётся только один раз.
Хочется что-то добавить или сказать? Я всегда рад обсудить. Пишите на me@dikmax.name.