войти зарегистрироваться

Ruby whois

индекс
108,30

Настрой собственный VPS в течение обеденного перерыва!

Перед погружением в технические аспекты системного администрирования, обозначу несколько принципиальных вещей:
1) системное администрирование — в 80% случаев — тривиальные задачи, ответ на которые ждут вас на первой странице поисковой системы
2) настройка удаленного сервера принципиально ничем не отличается от конфигурирования рабочей станции. настраивать последюнюю приходится каждому из нас, согласитесь — занятие приятное и довольно простое
3) благодаря высокой популярности vps, вероятность того, что вы окажетесь в тупике по любому вопросу — ничтожна мала
4) просто сделайте то, что написано в этой статье
5) обязательно напишите ваш комментарий, чтобы другому было легче понять и разобраться

Сделайте выбор хостинг провайдера, я выбрал linode.com
в моем случае — несколько скриншотов для быстрого развертывания образа (Ubuntu 8.04 LTS).
Дистриб выбирайте сами, у меня также есть статья по настройке CentOS
image
image
image
image

Итак, начнем:
ssh root@12.12.12.12 (ваш ip)

Итак, мы на борту:
---System info---------------
cat /etc/lsb-release
>DISTRIB_ID=Ubuntu
>DISTRIB_RELEASE=8.04

Поставим необходимые пакеты:
---build essentials--------------
apt-get -y install build-essential libssl-dev libreadline5-dev zlib1g-dev vim wget curl
apt-get -y install mysql-server libmysqlclient15-dev mysql-client

Несподручно работать под рутом, поэтому создадим пользователя (советую делать пароль подлиннее, так как коннектиться будем по ключу):
---User administration-------
adduser demo
visudo
в открывшемся редакторе добавим в конец файла следующую строку
demo ALL=(ALL) ALL)

Публичный и приватный ключи:
Воспользуемся способом аутентификации по ключу (необходима в первую очередь для git push, если gitosis будет на данном vps)
---SSH (local pc)------------
mkdir ~/.ssh
ssh-keygen -t rsa
scp ~/.ssh/id_rsa.pub demo@12.12.12.12:~

---SSH (remote pc)-----------
mkdir /home/demo/.ssh
mv /home/demo/id_rsa.pub /home/demo/.ssh/authorized_keys
chown -R demo:demo /home/demo/.ssh
chmod 700 /home/demo/.ssh
chmod 600 /home/demo/.ssh/authorized_keys

Обеспечим некоторую степень секьюрности: не пустим рута, запретим возможность удаленно запускать иксовое приложение(хотя иксы не стоят, но все же) и др.
sudo vim /etc/ssh/sshd_config
>PermitRootLogin no
>X11Forwarding no
>UsePAM no
>UseDNS no
>AllowUsers demo

sudo /etc/init.d/ssh restart
Не закрывая эту консоль, откройте другую и проверьте подлючение. Если все хорошо, ты вы все сделали правильно. Если нет — вернитесь в первую консоль и проверьте конфиг.

Настроим локаль:
---locales-----------------------
sudo locale-gen en_GB.UTF-8
sudo /usr/sbin/update-locale LANG=en_GB.UTF-8

Без гита, как без рук
---Git---------------------------
mkdir ~/temp && cd ~/temp
sudo apt-get install tcl8.4 tk8.4
wget kernel.org/pub/software/scm/git/git-1.6.3.2.tar.gz
tar xzvf git-1.6.3.2.tar.gz
cd git-1.6.3.2
./configure
make
sudo make install
sudo ln -s /usr/local/bin/git /usr/bin/git

Теперь, самое вкусное:
Ruby Enterprise Edition после компиляции устанавливает rubygems и десяток гемов, среди которых: rails, mysql, sqlite3 и др.
---Ruby ----Passenger------------
wget rubyforge.org/frs/download.php/58677/ruby-enterprise-1.8.6-20090610.tar.gz
tar xzvf ruby-enterprise-1.8.6-20090610.tar.gz
sudo ./ruby-enterprise-1.8.6-20090610/installer
sudo ln -s /opt/ruby-enterprise-1.8.6-20090610 /opt/ruby_ee
export PATH=/opt/ruby_ee/bin:$PATH
sudo /opt/ruby_ee/bin/passenger-install-nginx-module

Не стоит запускать вебсервер от рута из соображений безопасности, поэтому создадим отдельного пользователя для этих целей. После этого добавим членство пользователя demo в группе www-data (-a -G).
---Nginx-------------------------
sudo useradd -s /sbin/nologin -r www-data
sudo usermod -a -G www-data demo

mkdir ~/public_html
mkdir ~/public_html/01_project

Основная группа пользователя demo носит одноименное имя — demo, но вебсервер будет запущен из под пользователя из группы www-data, поэтому сделаем необходимые пермишины на public_html, чтобы все файлы, которые будем сюда копировать автоматически получали chown demo:www-data

sudo su
chgrp -R www-data /home/demo/public_html/
chmod -R 2750 /home/demo/public_html/

Скачаем файл хоста, конфиг и загрузочный скрипт и проверим как все работает
mkdir /opt/nginx/sites-available
mkdir /opt/nginx/sites-enabled
wget railsgeek.com/vps/vhost01 -P /opt/nginx/sites-available
ln -s /opt/nginx/sites-available/vhost01 /opt/nginx/sites-enabled

wget railsgeek.com/vps/nginx.conf -P /opt/nginx/conf
wget railsgeek.com/vps/nginx -P /etc/init.d
chmod +x /etc/init.d/nginx
/etc/init.d/nginx start

Готово!

В следующей статье будет описан процесс настройки бэкпов на Amazon S3, установка gitosis, capistrano. Опять же установка не займет времени больше, чем обеденный перерыв :)

комментарии (80)

  • может и vps взять у амазона?
  • у амазона нет VPS, это клауд.
    тем не менее, отличный совет. смотри: если бюджет 20баксов, то амазон тебе не сможет предоставить ec2 за эти деньги. если бюджет 70баксов — то однозначно клауд лучше.
    Но! дефолтные ami rubyonrails all-in-one достаточно кривые, установлен руби 1.8.5, например.
    поэтому пассажира и руби enterprise придется ставить руками
  • НЛО прилетело и опубликовало эту надпись здесь.
    • Привычка пользователя Ubuntu :).
  • спасибо, не доглядел.
    есть замечания по существу? :)
  • системное администрирование — в 80% случаев — тривиальные задачи, ответ на которые ждут вас на первой странице поисковой системы

    А еще подразумевается, что вы понимаете что делаете. Иначе все действия будут напоминать черную магию.
    • Вот по этому поводу залез в комменты — действительно, такая простыня по сути не имеет никакой ценности. Разве что переписать всё предоставленное в скрипт и ввести нужное параметрами.
      «Итак, начнем: ssh root@12.12.12.12 (ваш ip)» — вот тут что делать, вводить свой ip в скобочках после цифр? Я конечно утрирую, но с лаконичным и понятным комментарием к каждой строчке было бы гораздо лучше.
      Такой то обед любой дурак приготовит.
      (это всё топикстартеру, если непонятно. тема коммента совпадает, так что поместил сюда)
      P.S. помещать на хабр записи по развёртыванию сервисов вообще идея довольна странная, даже учитывая разбавление скриншотами и парой абзацев. Весь инет заполнен подобным. А устроить критический разбор конкретно взятой инсталяции и описать всевозможные подводные камни и узкие места — вот тут плюсек я влеплю, однозначно.
      • не похоже, что вы настраивали свой vps.
        проверенной информации достаточно мало.
        я скажу зачем написал — каждый разработчик разворачивает приложения на серверах. кто то платит админами, кто то еще что.
        я решил сам сделать
        • Я много чего настраивал, много чего не настраивал, но разговор то за пост, а не про меня? :)
          Если этот пост для разработчиков, то ему не хватает пояснений. Если для себя как шпаргалка — то не понятно зачем сюда.
          • я вас понял.
            обязательно учту ваши комментарии. к каким пунктам не хватает комментариев?
            • По всем! Объясни юзеру что он делает!
              • готово. давай еще замечания :) у тебя хорошо получается
                • Человеку который первый раз делает вообще непонятно что значит «visudo (demo ALL=(ALL) ALL)». Или я не знаю что-то и visudo принимает аргументы?
        • > не похоже, что вы настраивали свой vps.
          > проверенной информации достаточно мало.

          4.2, как говорят на ЛОРе. www.linode.com/community/.Там хорошая wiki, форум. Да и гугл полон ссылок.
  • какая конкретно строчка вызывает сложность?
  • просьба писать конструктивную и прямую критику.
    отвеча на ваши вопросы
    • ну вот чего тут критиковать? Вы скопипастнули пяток блоков Install из манов к этим тузлам и считаете что нужно всем вам лапку пожать. Если бы вы все это зафигачили в тот же puppet то сотворили бы значительно больше пользы.
      • именно так, я скопипастнул 5-6 блоков из манов. теперь мой вопрос — вы пробывали писать актуальную(!) статью на сегодняшний день, когда 95% манов устарели и приходится набивать десяток шишок перед тем, как все будет нормально настроено.
        дальше, я не считаю, что мне надо жать руку, мое желание — помочь разработчикам разобраться с азами системного администрирования для того, чтобы:
        1) не нанимать админа для настройки и сопровождения vps
        2) понять, что здесь ничего сложного нет
        3) не искать срочно vps, когда заказчик попросил покаказть приложение на стадии разработки (если разработка идет итеративно), а иметь свой
  • Спасибо за статью!

    Подскажите пожалуйста, возможно ли без apache в связку ngnix + passager поставить mail server :) И как проще всего это сделать.
    • спасибо. не вижу связи веб и почтового сервера.
      ставьте postfix, ему не важно какой у вас вебсервер.
      кстати, если будет более 10 человек, которым нужен будет актуальный и понятный ман по настройке почтового сервера — я сделаю. дайте знать
      • я за хороший ман по настройке почтового сервера
      • Я был бы рад за мануал nginx + passenger без апач на centos 5
        • Хех… первая версия этого мануала и была про CentOS5. Я думаю автор вам ее с удовольствием скинет
        • дай мне мыло, я тебе лично скину — ман для centos 5.2 + nginx +passenger
      • я за почтовый сервер! =) давайте может быть снизим порог из 10 человек?:)
      • И я присоединюсь
      • Спасибо за совет, теперь я понял что мне нужно было понять :)
        • срочно присоединись к просящим, и получим хорошую статью =) спасибом не отделаешься! ))
      • тоже хотелось бы за ман по настройке мейл-сервера )
      • хорошо, следующая статья будет по настройке постфикса.
        что конкретно должно отражать эта статья?
        само разумеющееся — первоначальная установка, многоступенчатый антиспам фильтр, что еще?
  • Значит по-существу надо… Постараюсь делать поменьше обидных выпадов, но гарантировать отсутствие оных не могу.

    1. apt-get -y install build-essential libssl-dev libreadline5-dev zlib1g-dev vim wget curl — придраться не к чему, но уже явно настораживает, что писатель явно готовиться что-то собирать.

    2. apt-get -y install mysql-server libmysqlclient15-dev mysql-client — приехали. При установке mysql-server клиентская часть ставится автоматически.

    Еще мы как бы не в курсе, разработчики уже достаточно давно рекомендуют пользоваться aptitude, который является более интеллектуальной системой (чем apt-get).

    3. Настроим локаль:… — еще раз приехали. dpkg-reconfigure locales является более удобным способом, которых позволит настроить/подключить более одной локали и сделать одну из них дефолтной. Как бы удобнее, нагляднее, грамотней.

    4. Без гита, как без рук… И началось то, за что руки надо выдирать с корнем, отмывать, прокатывать через волочильный станок и постараться вставить не туда, где были, а в плечи.
    Git есть в репозита(о)риях. Есть, был и будет. Версия не устраивает? Хорошо, для начала попробуйте подключить другую ветку. Поищите там. И лишь после этого собирайте из сырцов но так, чтобы не загрязнять систему. В конце концов, checkinstall придуман, и опробован, и даже (не поверите) — работает!
    Для чего нам даны deb-пакеты? Я всегда подозревал, что для того, чтобы было удобнее управлять ПО. Помните фразу «Одной командой make превращаем систему в слаку».

    5. Теперь, самое вкусное:… — Что-то вроде продукта непревзойденного пищеворения, приподнесенного к нашим устам на неком сельскохозяйственно инструменте, наиболее приспособленным для этого благородного дела?
    Опять сорцы. Опять через черт-знает-что. Ну хорошо. В этот раз предположим, что опции сборки не устраивают. Ну так apt-src в руки. Пересобирай. На здоровье. Но опять таки — так, чтобы остаться в рамках пакетного менеджера.

    6. Не стоит запускать вебсервер от рута из соображений безопасности. Прослезился. Умилился. Начал читать дальше. Начал отдирать челюсть от груди. nginx появился вообще волшебным образом. Но я так смутно подозреваю, что из сырцов (вот ведь копрофаг...).
    Волшебная команда aptitude install nginx — и все. Вот тебе и каталог веб-сервера по-дефолту. Вот тебе и новый пользователь. Все готово — только конфиги подправь.

    Общее впечатление от «статьи» — мерзопакостное. Ни тебе основ работы с пакетным менеджером, ни краткого рассказа о устанавливаемых/настраиваемых демонов… В результате выполнения этих действий после очередного обновления в системе может наступить черт знает что. Что-то собрано с одними параметрами, что-то — с опредленными зависимостями…

    Но похвалить можно — набрался храбрости и разместил. Если бы еще понимал, что делает…
    • Мне кажется или у вас пункт 1 и пункт 4 противоречат друг другу?
      • Нда. Моя бага :-)
        Ничего ничему не противоречит )
      • это была явно замаскированная ирония. Но спасибо за замечание.
    • раскрыть комментарий
      • спасибо.
        напомню для невнимательных читателей — моя цель помочь программистам не копаться в дебрях системного администрирования, а настроить vps за 1 час
        • В целом хороший посыл у статьи. Не хватает только комментариев, т.к. делать какие-то вещи на серваке вслепую все равно никто в здравом уме не будет. Ну и комментарии по поводу работы с пакетами стоит учесть, видимо.

          В-общем, так держать, принимать замечания и делать новые версии мануала все лучше и лучше :-)

          Ждем ЦентОС, почтового сервера, а также неплохо бы панель управления хостингом для счастья прикрутить (и не только на рубиистов затачивать статью).
          • спасибо.
            присылайте пожелания по темам и то, что каждая статья должна освещать.
            за мной — обещание писать нужные статьи :)
      • ой, да я таки не претендую.

        Я вот не знаю, что там про «нормальные» мануалы, но ради интереса специально пошел на www.rubyenterpriseedition.com/download.html — ведь вроде там у нас энтерпрайз руби?

        С огромным удовлетворением увидел там ссылку вида rubyforge.org/frs/download.php/57098/ruby-enterprise_1.8.6-20090520_i386.deb

        Последний абзац моего комментария видели? Я вообще пытался объяснить, что если делаешь — то делай по-хорошему. Не так давно на хабре была статья, посвященная именно сборке пакетов.
        • То есть лучше научиться профессионально писать статьи вида «Вышел новый OpenOffice», чем непрофессионально о настройке серверов? =)
          • ну… Меня уели.
            Для написания «Вышел новый OpenOffice» профессионализма не требуется ;-)
    • раскрыть комментарий
      • я аж покраснел.

        Написал затем, что не надо новичков учить плохому. Если делаете руками — то обосновывайте, почему.

        Но если делаете руками, то делайте хотя-бы правильно. Не создавайте дистрибутиву плохую репутацию.
      • Боже, какой апломб.

        Вы не знаете элементарных правил администрирования серверов.

        Мало-мальски грамотный специалист на вашем месте просто выложил бы deb/src-deb пакеты, и НИКОГДА не стал бы ставить компилятор на боевой сервер.
        • раскрыть комментарий
          • Карма не позволяет. Всякие быдлоадмины обижаются и минусуют.
        • > выложил бы deb/src-deb пакеты, и НИКОГДА не стал бы ставить компилятор на боевой сервер
          Отставить бредить. Если найдется умник, который воспринимает «никогда компилятор на бойевой сервер» как догму, и из-за этого ставит откуда попало взятые deb/src пакеты, такого уволить немедленно за нарушение правил гигиены.

          Зачем нужен компилятор, если на сервере стоит ruby. Смотреть pkg-ruby-extras.alioth.debian.org/rubygems.html Ели после этого непонятно, то уволить за паталогическое неумение думать.
          • если нужно обновить пакет. на локальной машине скачиваем deb-src, обновляем, собираем, тестируем, заливаем deb на сервер.

            компилятор на сервере — рассадник руткитов
            • Снес компилятор — защитился от руткитов? Не забыть про святую воду. Уволен. За бытовой мистицизм.

              > Скачиваем deb-src
              А писать его будет Пушкин?

              > на локальной машине скачиваем deb-src, обновляем, собираем, тестируем, заливаем deb на сервер
              Можно еще добавить «ставим на локальную машине (винду или макось) в виртуальной машине дебиан». И это все для того, чтобы поставить gem mysql на личный VPS? Или предполагается, что Яндекс решил перейти на тысячу VPSов? Уволен за неумение оценивать адекватность целей и потраченных средств.
              • если бы вы умели читать, то обнаружили-бы, что автор по мимо гемов пишет про сборку git и nginx. Ставить компилятор для гемов вообще не нужно.
                • > компилятор для гемов вообще не нужно

                  Уволить за некомпетентность. Попробуйте поставить gem mysql и увидите, нужен компилятор или нет.
                  • не нужен. он есть в debах
                    • Нанять, для того, чтобы уволить еще раз со строгим выговором.

                      Нет его в дебах. Почему нет, линк был выше.
              • > Уволен за неумение оценивать адекватность целей и потраченных средств.

                Тогда надо сразу было писать: «Речь идет о личной песочнице, на которой не будет клиентов, где допустимы 10-20 минутные притормаживания на компиляцию и периодические отказы, когда я буду обновлять софт на живую, и что-то пойдет не так. Не делайте так на продакшине!»
                • отвечу по порядку:
                  1) «о личной песочнице» — жду от вас нормальной статьи по настройке vps, я и коллеги будут рады перенять ваш ценный опыт
                  2) компиляция указанных выше пакетов заняла не более 4 минут
                  3) где я написал о том, что я периодески планирую «обновлять софт на живую»?
                  4) «что-то пойдет не так» — здесь попробнее
                  5) «Не делайте так на продакшине» — ответ №1

                  • > жду от вас нормальной статьи по настройке vps
                    Зачем изобретать свое, если можно исправить чужое? :)

                    > компиляция указанных выше пакетов заняла не более 4 минут
                    Ок, принято :)

                    > где я написал о том, что я периодески планирую «обновлять софт на живую»
                    Нигде :) Но согласись, это логичный вывод: человек, который поднимает VPS на время, срезая везде, где это возможно, врядли будет поднимать второй такой же сервер, только для того, чтобы тестировать обновления перед тем, как их накатывать :)

                    Кстати, как ты собираешься обновлять софт, если не на живую? :)

                    > «что-то пойдет не так» — здесь попробнее
                    Есть куча вещей, которые могут пойти не так: поменяли ключики в скриптах, в конфиге что-то устарело или добавилось новое, важное, поменялись настройки по-умолчанию, новая версия не работает со старыми библиотеками или наоборот старые проги не поддерживают новую библиотеку. Тупо сделав make install поверх старых файлов ты рискуешь попасть на упущенную прибыль :)

                    Админы, которые уже заработали шишки на этом, держат (виртуальные) копии продакшн серверов только для тестирования обновлений. И чем больше шишок админ собирает, тем больше соломки он стелет: бэкапы, пакеты вместо make install, локальный репозиторий, держит запасное железо (не нужно для VPS), строит кластеры, настраивает дубли, которые заменят упавший сервер в течении секунд и т.д. и т.п.

                    Так что «системное администрирование — в 80% случаев тривиальные задачи» — это взгляд новичка. В 80% случаев это превентивное решение еще не возникших проблем.
            • > компилятор на сервере — рассадник руткитов

              ОС на сервере вообще опасно держать. Могут поломать.
            • компилятор на сервере — рассадник руткитов

              Бугага! Руткиты (да и любое другое malware) в виде готовых бинарников вы категорически отрицаете?.. Я имею ввиду нормальные грамотные руткиты, а не тот публик хлам с LKM внедрением, от которого наивно лечит Rootkit Hunter.
    • За компилятор на сервере надо сразу к стенке
  • ИМХО после приобретения вэпээски идеальный вариант — протрахаться с ней минимум выходные. Поковыряться. Вникнуть. Покурить маны. Понять, что к чему.

    А не спешно копипастить «на обеде» какие-то непонятные (а иначе зачем вообще это руководство) команды.

    VPS != Денвер.
    • увы, статья не для таких крутых как ты
      • НЛО прилетело и опубликовало эту надпись здесь.
        • раскрыть комментарий
          • НЛО прилетело и опубликовало эту надпись здесь.
  • Даешь настройку CentOS для чайников как я :)
    • написал тебе собобщение
  • Не совсем для чайников, но пригодится :)
  • Может кто-нибудь покритикует/дополнит мой небольшой скрипт сетапа стандартного веб-сервера на базе CentOS?
    • Хабр съел ссылку unix-notes.ru/2009/05/13/skript-ustanovki-tipovogo-veb-servera-linux/
      • хорошая статья, для rhel.
        тем не менее, моя статья размещана в блоге Ruby не случайно: я описал не типовой, а конкретный частный случай насройки vps под rubyonrails проекты.
        • Да, сорри, не обратил внимание на название блога.
  • Установка Nginx 0.7.6 независимо от дефолтного для mod_rails — nginx 0.6.3

    mkdir ~/temp && cd ~/temp
    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.9.tar.gz
    tar xzf ./pcre-7.9.tar.gz

    wget sysoev.ru/nginx/nginx-0.7.60.tar.gz
    tar xzvf ./nginx-0.7.60.tar.gz
    cd ~/temp/nginx-0.7.60
    ./configure --add-module=/opt/ruby-enterprise-1.8.6-20090610/lib/ruby/gems/1.8/gems/passenger-2.2.3/ext/nginx --with-pcre=~/temp/pcre-7.9 --prefix=/opt/nginx076
    make
    sudo make install
    sudo cp /etc/init.d/nginx /etc/init.d/nginx076
    sudo sed -i 's,/opt/nginx,/opt/nginx076,g' /etc/init.d/nginx076
    sudo /etc/init.d/nginx076 start
  • Ну вот, хотел воспользоваться и установить, прочитал комменты и задумался:)
    Где взять нормальный мануал как установить mod_rails и Ruby Enterprise Edition для чайников.
    Что нужно сделать — что бы все просто работало?
  • если кратко, то выдержка из этой статьи:
    wget rubyforge.org/frs/download.php/58677/ruby-enterprise-1.8.6-20090610.tar.gz
    tar xzvf ruby-enterprise-1.8.6-20090610.tar.gz
    sudo ./ruby-enterprise-1.8.6-20090610/installer
    sudo ln -s /opt/ruby-enterprise-1.8.6-20090610 /opt/ruby_ee
    export PATH=/opt/ruby_ee/bin:$PATH
    sudo /opt/ruby_ee/bin/passenger-install-nginx-module

    если еще более кратко, то
    www.rubyenterpriseedition.com/download.html
    modrails.com/install.html

    wget rubyforge.org/frs/download.php/58677/ruby-enterprise-1.8.6-20090610.tar.gz
    tar xzvf ruby-enterprise-X.X.X.tar.gz
    ./ruby-enterprise-X.X.X/installer
    gem install passenger
    passenger-install-nginx-module
  • я написал статью о том, как установить последний стабильный nginx 0.7.6 вместе с modrails (вместо дефолтного для passenger — nginx 0.6.3).
    www.railsgeek.com/2009/6/20/installing-the-latest-stable-nginx-0-7-6-regardless-of-the-nginx-0-6-3-by-mod_rails-default
  • логическое продолжение данной статьи — детальное описание многих шагов
    habrahabr.ru/blogs/ror/63730/
    Спасибо Саше Коссу
  • Отточенный скрипт для создания бэкапов и их аплоада на Amazon S3 здесь:
    www.railsgeek.com/2009/8/11/backup-shell-script-for-my-rails-applications
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.