Развертывание Приложения На Чистой Ubuntu: От А До Я

Итак, у вас чистая 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

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.