Перед погружением в технические аспекты системного администрирования, обозначу несколько принципиальных вещей:
1) системное администрирование — в 80% случаев — тривиальные задачи, ответ на которые ждут вас на первой странице поисковой системы
2) настройка удаленного сервера принципиально ничем не отличается от конфигурирования рабочей станции. настраивать последюнюю приходится каждому из нас, согласитесь — занятие приятное и довольно простое
3) благодаря высокой популярности vps, вероятность того, что вы окажетесь в тупике по любому вопросу — ничтожна мала
4) просто сделайте то, что написано в этой статье
5) обязательно напишите ваш комментарий, чтобы другому было легче понять и разобраться
Сделайте выбор хостинг провайдера, я выбрал linode.com
в моем случае — несколько скриншотов для быстрого развертывания образа (Ubuntu 8.04 LTS).
Дистриб выбирайте сами, у меня также есть статья по настройке CentOS
Итак, начнем:
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)
тем не менее, отличный совет. смотри: если бюджет 20баксов, то амазон тебе не сможет предоставить ec2 за эти деньги. если бюджет 70баксов — то однозначно клауд лучше.
Но! дефолтные ami rubyonrails all-in-one достаточно кривые, установлен руби 1.8.5, например.
поэтому пассажира и руби enterprise придется ставить руками
есть замечания по существу? :)
А еще подразумевается, что вы понимаете что делаете. Иначе все действия будут напоминать черную магию.
«Итак, начнем: ssh root@12.12.12.12 (ваш ip)» — вот тут что делать, вводить свой ip в скобочках после цифр? Я конечно утрирую, но с лаконичным и понятным комментарием к каждой строчке было бы гораздо лучше.
Такой то обед любой дурак приготовит.
(это всё топикстартеру, если непонятно. тема коммента совпадает, так что поместил сюда)
P.S. помещать на хабр записи по развёртыванию сервисов вообще идея довольна странная, даже учитывая разбавление скриншотами и парой абзацев. Весь инет заполнен подобным. А устроить критический разбор конкретно взятой инсталяции и описать всевозможные подводные камни и узкие места — вот тут плюсек я влеплю, однозначно.
проверенной информации достаточно мало.
я скажу зачем написал — каждый разработчик разворачивает приложения на серверах. кто то платит админами, кто то еще что.
я решил сам сделать
Если этот пост для разработчиков, то ему не хватает пояснений. Если для себя как шпаргалка — то не понятно зачем сюда.
обязательно учту ваши комментарии. к каким пунктам не хватает комментариев?
> проверенной информации достаточно мало.
4.2, как говорят на ЛОРе. www.linode.com/community/.Там хорошая wiki, форум. Да и гугл полон ссылок.
отвеча на ваши вопросы
дальше, я не считаю, что мне надо жать руку, мое желание — помочь разработчикам разобраться с азами системного администрирования для того, чтобы:
1) не нанимать админа для настройки и сопровождения vps
2) понять, что здесь ничего сложного нет
3) не искать срочно vps, когда заказчик попросил покаказть приложение на стадии разработки (если разработка идет итеративно), а иметь свой
Подскажите пожалуйста, возможно ли без apache в связку ngnix + passager поставить mail server :) И как проще всего это сделать.
ставьте postfix, ему не важно какой у вас вебсервер.
кстати, если будет более 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 — и все. Вот тебе и каталог веб-сервера по-дефолту. Вот тебе и новый пользователь. Все готово — только конфиги подправь.
Общее впечатление от «статьи» — мерзопакостное. Ни тебе основ работы с пакетным менеджером, ни краткого рассказа о устанавливаемых/настраиваемых демонов… В результате выполнения этих действий после очередного обновления в системе может наступить черт знает что. Что-то собрано с одними параметрами, что-то — с опредленными зависимостями…
Но похвалить можно — набрался храбрости и разместил. Если бы еще понимал, что делает…
Ничего ничему не противоречит )
Автор что-то сделал, да еще и написал об этом, за что честь ему и хвала! Когда у меня был ненужный ноут, я поставил там debian и стал собирать rails-сервер (apache+nginx+passenger+capistrano+svn(был молод и глуп =)), и как-то до конца так и не дошел, потому что не хватало НОРМАЛЬНЫХ мануалов, и все они были за 04—05—06 год. В итоге забросил эту затею, и стал больше отдавать времени таки программированию. Не знаю что будет, когда придется обустраивать vps (или просто сервер, как получится), нанимать админа, просить друзей или сам, но эта статья (и ей подобные) увеличат вероятность того, что сам все сделаю без проблем.
Спасибо за внимание, ничего личного.
напомню для невнимательных читателей — моя цель помочь программистам не копаться в дебрях системного администрирования, а настроить vps за 1 час
В-общем, так держать, принимать замечания и делать новые версии мануала все лучше и лучше :-)
Ждем ЦентОС, почтового сервера, а также неплохо бы панель управления хостингом для счастья прикрутить (и не только на рубиистов затачивать статью).
присылайте пожелания по темам и то, что каждая статья должна освещать.
за мной — обещание писать нужные статьи :)
Я вот не знаю, что там про «нормальные» мануалы, но ради интереса специально пошел на www.rubyenterpriseedition.com/download.html — ведь вроде там у нас энтерпрайз руби?
С огромным удовлетворением увидел там ссылку вида rubyforge.org/frs/download.php/57098/ruby-enterprise_1.8.6-20090520_i386.deb
Последний абзац моего комментария видели? Я вообще пытался объяснить, что если делаешь — то делай по-хорошему. Не так давно на хабре была статья, посвященная именно сборке пакетов.
Для написания «Вышел новый OpenOffice» профессионализма не требуется ;-)
отвечу по порядку
1) собирать буду ruby enterprise edition
2) есть удобовразумительные обоснование про aptitude?
3) есть несколько сповобов настроить что угодно.
4) git в репах старый. дальше, меня устраиват данныый вариант.
5) вы зачем пишете здесь? кроме негатива, у вас есть чем помочь коллегам?
6) nginx в репах старый, дальше — мне нужен nginx со скомпиленным модулем passenger
так, теперь:
общее впечатление — у меня от тебя более мерзкое впечатление.
основы работы с пакетным менеджером — аналогично
ответь на следующий вопрос — ты зачем написал?
Написал затем, что не надо новичков учить плохому. Если делаете руками — то обосновывайте, почему.
Но если делаете руками, то делайте хотя-бы правильно. Не создавайте дистрибутиву плохую репутацию.
Вы не знаете элементарных правил администрирования серверов.
Мало-мальски грамотный специалист на вашем месте просто выложил бы deb/src-deb пакеты, и НИКОГДА не стал бы ставить компилятор на боевой сервер.
мне извиниться? :)
напишите статью, выложите — почитаем
Отставить бредить. Если найдется умник, который воспринимает «никогда компилятор на бойевой сервер» как догму, и из-за этого ставит откуда попало взятые deb/src пакеты, такого уволить немедленно за нарушение правил гигиены.
Зачем нужен компилятор, если на сервере стоит ruby. Смотреть pkg-ruby-extras.alioth.debian.org/rubygems.html Ели после этого непонятно, то уволить за паталогическое неумение думать.
компилятор на сервере — рассадник руткитов
> Скачиваем deb-src
А писать его будет Пушкин?
> на локальной машине скачиваем deb-src, обновляем, собираем, тестируем, заливаем deb на сервер
Можно еще добавить «ставим на локальную машине (винду или макось) в виртуальной машине дебиан». И это все для того, чтобы поставить gem mysql на личный VPS? Или предполагается, что Яндекс решил перейти на тысячу VPSов? Уволен за неумение оценивать адекватность целей и потраченных средств.
Уволить за некомпетентность. Попробуйте поставить gem mysql и увидите, нужен компилятор или нет.
Нет его в дебах. Почему нет, линк был выше.
Тогда надо сразу было писать: «Речь идет о личной песочнице, на которой не будет клиентов, где допустимы 10-20 минутные притормаживания на компиляцию и периодические отказы, когда я буду обновлять софт на живую, и что-то пойдет не так. Не делайте так на продакшине!»
1) «о личной песочнице» — жду от вас нормальной статьи по настройке vps, я и коллеги будут рады перенять ваш ценный опыт
2) компиляция указанных выше пакетов заняла не более 4 минут
3) где я написал о том, что я периодески планирую «обновлять софт на живую»?
4) «что-то пойдет не так» — здесь попробнее
5) «Не делайте так на продакшине» — ответ №1
Зачем изобретать свое, если можно исправить чужое? :)
> компиляция указанных выше пакетов заняла не более 4 минут
Ок, принято :)
> где я написал о том, что я периодески планирую «обновлять софт на живую»
Нигде :) Но согласись, это логичный вывод: человек, который поднимает VPS на время, срезая везде, где это возможно, врядли будет поднимать второй такой же сервер, только для того, чтобы тестировать обновления перед тем, как их накатывать :)
Кстати, как ты собираешься обновлять софт, если не на живую? :)
> «что-то пойдет не так» — здесь попробнее
Есть куча вещей, которые могут пойти не так: поменяли ключики в скриптах, в конфиге что-то устарело или добавилось новое, важное, поменялись настройки по-умолчанию, новая версия не работает со старыми библиотеками или наоборот старые проги не поддерживают новую библиотеку. Тупо сделав make install поверх старых файлов ты рискуешь попасть на упущенную прибыль :)
Админы, которые уже заработали шишки на этом, держат (виртуальные) копии продакшн серверов только для тестирования обновлений. И чем больше шишок админ собирает, тем больше соломки он стелет: бэкапы, пакеты вместо make install, локальный репозиторий, держит запасное железо (не нужно для VPS), строит кластеры, настраивает дубли, которые заменят упавший сервер в течении секунд и т.д. и т.п.
Так что «системное администрирование — в 80% случаев тривиальные задачи» — это взгляд новичка. В 80% случаев это превентивное решение еще не возникших проблем.
ОС на сервере вообще опасно держать. Могут поломать.
Бугага! Руткиты (да и любое другое malware) в виде готовых бинарников вы категорически отрицаете?.. Я имею ввиду нормальные грамотные руткиты, а не тот публик хлам с LKM внедрением, от которого наивно лечит Rootkit Hunter.
А не спешно копипастить «на обеде» какие-то непонятные (а иначе зачем вообще это руководство) команды.
VPS != Денвер.
тем не менее, моя статья размещана в блоге Ruby не случайно: я описал не типовой, а конкретный частный случай насройки vps под rubyonrails проекты.
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
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/
Спасибо Саше Коссу
www.railsgeek.com/2009/8/11/backup-shell-script-for-my-rails-applications