Итак, у вас чистая Ubuntu, в консоли открыто SSH-соединение с сервером и консоль вас соблазнительно приглашает — «root@my-awesome-host:~#» — и больше ничего нет. Но я хочу запустить и показать всему миру какое-то железнодорожное приложение.
Перейдем от супа к орехам.
Мы строим дом
В вашей системе еще даже нет пользователей.Да даже имя хоста, скорее всего, не такое, как в приведенном примере, а что-то вроде «56-78-vps-small».
Не в порядке.
Мы меняемся: #> nano /etc/hostname
#> nano /etc/hosts
Перезагрузить: shutdown -r now
Ждем загрузки системы.
Сразу добавим правила фаервола: #> nano /etc/rc.local
# Drop all incoming traffic<br>
/sbin/iptables -P INPUT DROP<br>
# Drop all forwarded traffic<br>
/sbin/iptables -P FORWARD DROP<br>
# Allow all outgoing traffic<br>
/sbin/iptables -P OUTPUT ACCEPT<br>
# Allow returning packets<br>
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT<br>
# Allow incoming traffic on port 80 for web server<br>
/sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT<br>
# Allow local traffic<br>
/sbin/iptables -A INPUT -i lo -j ACCEPT<br>
# Allow incoming SSH on port 22<br>
/sbin/iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT<br>
# Allow ping<br>
/sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT<br><br>
exit 0
По фен-шуй можно сохранить конфигурацию в отдельный файл и восстановить ее отдельной командой.
Но можно и так :) Вдох: #> /etc/rc.local
Давай попробуем: #> asdlkjflaskdjf
Если буквы отображаются — выдыхаем, значит, мы не срубили ветку, на которой сидели (не закрыли ssh-соединение по правилам).
Вперед, продолжать.
#> adduser deployer<br>
#> adduser eugzol<br>
#> adduser eugzol sudo
Запоминайте пароли.
Все www будет работать под деплоером.
Мы будем использовать eugzol через ssh (выберите свое любимое имя пользователя).
Уходим, заходим.
root@my-awesome-host#> exit<br>
eugzol@home$> ssh my-awesome-host<br>
eugzol@my-awesome-host$> sudo echo test
Все работает хорошо.
Добавьте свой ключ: $> mkdir .
ssh<br> $> echo "ssh-rsa .
== eugzol@home" > .
ssh/authorized_keys<br> $> chmod 700 .
ssh<br> $> cd .
ssh<br>
$> chmod 600 *
Отключаемся, подключаемся, пароль спрашивать не надо.
Аналогичным образом мы добавляем наш ключ пользователю развертывания.
Если вам нравится цветная консоль, раскомментируйте соответствующую строку в .
bashrc: $> nano ~/.
bashrc<br> # .
<br> force_color_prompt=yes<br> .
Пакеты, пакеты, пакеты
Закладываем все необходимое заранее.Ну, может мы что-то забыли, ничего страшного, добавим позже в зависимости от обстоятельств.
Чтобы построить Ruby: $> sudo apt-get -y install build-essential zlib1g zlib1g-dev libxml2 libxml2-dev libxslt-dev sqlite3 libsqlite3-dev locate git-core
MySQL (запомните пароль root): $> sudo apt-get -y install mysql-server libmysqlclient-dev
Чтобы построить Пассажира: $> sudo apt-get -y install libcurl4-openssl-dev
Развертывание приложения
$> sudo su deployer
Далее мы создаем структуру каталогов: /home/deployer/repos — репозитории git /home/deployer/projects — рабочие копии проектов.
$> mkdir repos<br>
$> mkdir projects
Давайте поставим рубин: $> bash < <(curl -s rvm.beginrescueend.com/install/rvm)
Посмотрим, что он напишет в конце.
И здесь важны две вещи: — возможно, вам нужно добавить указанную строку в .
bashrc, если ее там еще нет — возможно, не все перечисленные пакеты были ранее установлены.
нам нужно сделать шаг назад и доставить Вперед, продолжать.
$> rvm install 1.8.7
Мне нужна была эта версия Ruby. Если у вас другая основная версия, установите другую.
Теперь посмотрим, как мы будем устанавливать приложение, например, катание по рельсам.
По науке его следует завернуть в капистрано или аналогичный продукт. Но для начала можно обойтись простыми методами.
И наконец: $> echo "gem: --no-rdoc --no-ri" > ~/.
gemrc"
Чтобы Rubygems не тормозил установку документации, которую все равно никто не просматривает с локального компьютера.
$> rvm use 1.8.7<br>
$> rvm gemset use global<br>
$> gem install bundler
Репозиторий и рабочий каталог
cd ~/repos<br>
git init --bare rolling-on-rails.git
Далее на вашем локальном компьютере в каталоге проекта:
eugzol@home$> git remote add my-awesome-host ssh://[email protected]/home/deployer/repos/rolling-on-rails.git <br>
eugzol@home$> git push my-awesome-host master
Возвращаясь к удаленному:
cd ~/projects<br>
mkdir rolling-on-rails<br>
cd rolling-on-rails<br>
git init<br>
git remote add local /home/deployer/repos/rolling-on-rails.git<br>
git fetch local<br>
git checkout master
Файлы нашего проекта должны появиться в каталоге.
Настройка базы данных
mysql -u root -p
Введите пароль.
mysql> create user 'rolling-on-rails'@'localhost' identified by 'sakdl5&%1';<br>
mysql> create database rolling-on-rails charset utf8 collate utf8_bin;<br>
mysql> grant all on rolling-on-rails.* to 'rolling-on-rails'@'localhost';
Создайте конфигурацию: cd ~/projects/rolling-on-rails<br>
echo "production:<br>
adapter: mysql<br>
host: localhost<br>
database: rolling-on-rails<br>
username: rolling-on-rails<br>
password: sakdl5&%1<br>
encoding: utf8" > config/database.yml
Драгоценные камни и вперед!
$> echo "rvm 1.8.7@rolling-on-rails > .
rvmrc"<br>
$> rvm gemset create rolling-on-rails<br>
$> cd .
<br>
$> cd rolling-on-rails
RVM спросит, доверяете ли вы тому, что написали в .
rvmrc. Поскольку эту строку вы придумали не сами, а скопировали ее из источника в открытой сети, и кто знает, что в этих интернетах вас попросят написать в конфигах, я бы перечитал еще раз.
Ну да ладно, шутки в сторону, идем дальше.
$> rvm info
Давайте еще раз проверим, что у нас есть правильная версия Ruby и набор драгоценных камней.
$> bundle install<br>
$> RAILS_ENV=production rake db:migrate<br>
$> RAILS_ENV=production rake db:seed
Давайте проверим, все ли работает.
Размещаем пассажира
Давайте временно добавим развертыватель в группу sudo: eugzol@my-awesome-host$> sudo adduser deployer sudo<br>
sudo su deployer
Фактическая установка:
cd ~/projects/rolling-on-rails<br>
gem install passenger<br>
rvmsudo passenger-install-nginx-module
Говорим установщику, чтобы он сам все скачал и установил.
Создаем место для логов nginx: mkdir ~/nginx
Редактирование конфигов: cd /opt/nginx/conf<br>
sudo nano nginx.conf
В результате мы получаем что-то вроде http://pastie.org/2625120 .
Ставим инициализирующий скрипт: cd<br>
git clone git://github.com/jnstq/rails-nginx-passenger-ubuntu.git <br>
sudo mv rails-nginx-passenger-ubuntu/nginx/nginx /etc/init.d/nginx<br>
sudo chown root:root /etc/init.d/nginx
Измените путь к pid-файлу: $> sudo nano /etc/init.d/nginx
.
<br> PIDSPATH=/home/deployer/nginx<br> .
Мы проверяем: $> sudo service nginx configtest
$> sudo service nginx start
Мы получаем доступ к нашему серверу из браузера через IP или доменное имя.
Вы должны увидеть сообщение «Добро пожаловать в nginx!» быстрый.
Добавьте конфигурацию приложения: $> cd /opt/nginx/conf<br>
$> sudo su<br>
#> mkdir sites-available<br>
#> mkdir sites-enabled<br>
#> nano sites-available/rolling-on-rails.conf
Давайте добавим что-то вроде этого http://pastie.org/2625166 .
Включать: #>cd sites-enabled<br>
#> ln -s .
/sites-available/rolling-on-rails.conf .
Перезапуск: #> service nginx reload
Пойдем Rolling-on-rails.ru .
Если все сделано правильно, то мы можем наслаждаться нашим рабочим приложением.
Очистка хвостов
Убираем оставшийся мусор: deployer@my-awesome-host$> rm -rf ~/rails-nginx-passenger-ubuntu
deployer@my-awesome-host$> exit
Удалите пользователя развертывателя из группы sudo:
eugzol@my-awesome-host$> sudo nano /etc/group
Измените строку, похожую на «sudo:x:27:eugzol,deployer», на «sudo:x:27:eugzol».
exit
Давайте займемся другими делами, пока все работает :)
P.S. Эту тему писал в основном Хабраузер эвгзол с моими небольшими дополнениями, так что все вопросы и плюсы по карме лучше направлять к нему
Теги: #ubuntu #ruby onrails #passenger #rvm #MySQL #bundler #git #Nginx #ruby onrails
-
Цифровая Реклама
19 Oct, 24 -
Вернуть Клиента Легко – Не Дайте Ему Уйти
19 Oct, 24 -
Я Возмущен, Теле 2 - Это Трата
19 Oct, 24