Статьи

Настройка сервера Rails и развертывание с помощью Capistrano на Fedora с нуля

Эта статья и видеоурок научат вас, как настроить базовый сервер Fedora для развертываний Rails и PostgreSQL. Сначала мы настроим Apache и PostgreSQL. Затем мы будем использовать phpPgAdmin для создания пользователя и баз данных нашего приложения. После этого мы настроим платформу Ruby, используя Passenger для запуска нашего приложения. Как только все компоненты будут установлены, мы подготовим наше приложение к развертыванию с использованием Capistrano.

Я покажу вам, как использовать Capistrano для автоматизации удаленных задач и использования других функций.



Внедрение Rails-приложений всегда приводит к путанице. Этот урок надеется разобраться с этим. Большинство людей знают LAMP: Linux, Apache, MySQL и PHP. Мы настроим LAPR: Linux, Apache, PostgreSQL и Ruby. Настройка сервера LAPR очень похожа на настройку сервера LAMP. Единственная проблема — заставить Rails общаться с Apache. К счастью, есть Пассажир, иначе мод \ _rails. Пассажир как мод \ _php. Это делает запуск приложений на Rails простым, как пирог. Чтобы запустить приложение Rails через Apache, создайте виртуальный хост, указывающий корень документа на общий каталог приложений, и вы будете кататься по рельсам.

Capistrano — это еще одна часть, с которой люди могут быть не знакомы. Capistrano — это гем Ruby, предназначенный для выполнения задач на одной или нескольких удаленных машинах. Вам понадобится доступ по SSH для использования Capistrano. Capistrano, ласково известный как Cap, автоматизирует процесс развертывания. Мы можем использовать cap, чтобы взять наш код из какого-либо репозитория и отправить его на сервер, остановить / запустить / перезапустить сервер, написать пользовательские задачи, требуемые нашим приложением (например, установить необходимые гемы), или отключить / включить страницу обслуживания. Использование кепки не обязательно, но она наверняка превосходит использование FTP для копирования всех файлов вокруг! Реальная сила Cap заключается в способности писать на Ruby собственные задачи для управления сервером. Я написал много приложений, которые позволяют загружать пользовательские файлы. Затем на стороне сервера необходимо создать некоторый каталог с соответствующими разрешениями для успешной загрузки. Достаточно просто написать задачу cap, чтобы создать каталог и установить разрешения. Затем, если вы когда-нибудь смените сервер, вы можете просто запустить задачу cap, чтобы снова настроить сервер. Есть много вещей, которые вы можете сделать с Capistrano. Вы можете даже автоматизировать весь этот учебник, чтобы настроить любое количество машин одновременно!


Для завершения этого урока вам понадобится доступ по SSH + sudo. Если у вас нет запасного сервера, вы можете создать его в VirtualBox . Вы можете легко создать новую виртуальную машину и связать ее с хост-системой. Я сделал это для урока. Когда вы запускаете виртуальную машину, убедитесь, что вы используете мостовой адаптер, чтобы ваша виртуальная машина получала IP-адрес в той же подсети. Я начал с новой установки без каких-либо настроек. Если у вас есть доступ к VPS, как SliceHost, вы также можете использовать эти инструкции.

Обязательно просмотрите скринкаст перед анализом кода ниже.


1
2
3
4
5
6
7
8
9
$ sudo adduser -m deployer
$ sudo passwd deployer
$ sudo visudo deployer ALL=(ALL) NOPASSWD: ALL
$ su deployer
$ mkdir ~/.ssh
$ touch ~/.ssh/authorized_keys2
$ chmod -R 0700 ~/.ssh
# copy your public key and paste it into the authorized_keys2 file
$ service sshd start

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
$ sudo yum groupinstall «PostgreSQL Database»
$ sudo service postgresql initdb
$ sudo service postgresql start
$ su — postgres
$ psql -d template1
$ alter user postgres with password ‘yourpostgresuserpassword’;
$ \q
# Replace ident in /var/usr/lib/pgsql/data/pg_hba.conf with md5
$ passwd postgres
# set extra security in /etc/phpPgAdmin/config.inc.php to false
# add ‘Allow from YOUR_IP_HERE’ to vhost in /etc/httpd/conf.d/phpPgAdmin.conf
# enable http in the firewall
$ sudo yum install httpd
$ sudo service httpd start
$ sudo service postgresql restart

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
$ sudo yum groupinstall Ruby
$ sudo yum install rubygems
$ sudo gem install gemcutter
$ sudo yum install postgresql-devel
$ sudo gem install pg
$ sudo gem install passenger
$ yum install gcc-c++ httpd-devel apr-devel
$ sudo passenger-install-apache2-module
# create this file /etc/http/conf.d/passenger.conf with these contents:
  LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger.so
  PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.9
  PassengerRuby /usr/bin/ruby
 
$ sudo setenforce 0
$ sudo service httpd restart

1
2
3
4
$ sudo mkdir /var/www/html/apps
$ sudo chown deployer:apache /var/www/html/apps
$ sudo yum install git
# at this point, create your databases in phpPgAdmin

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
# echo «Include vhost.d/*.vhost» >> /etc/httpd/conf/httpd.conf
$ sudo mkdir /etc/httpd/vhost.d
$ sudo touch /etc/httpd/vhost.d/nettuts-demo.vhost
# update that files conttents to:
  <VirtualHost *:80>
      ServerName www.nettuts-demo.com
      DocumentRoot /var/www/html/apps/nettuts-demo/current/public
      <Directory /var/www/html/apps/nettuts-demo/current/public>
        Options FollowSymLinks
          Allow from all
          Options -MultiViews
      </Directory>
       
      RewriteEngine On
      RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
      RewriteCond %{SCRIPT_FILENAME} !maintenance.html
      RewriteRule $ /system/maintenance.html [R=302,L]
  </VirtualHost>

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
set :application, «nettuts-demo»
set :repository, «git://github.com/Adman65/Nettuts-Capistrano-Deployments.git»
 
set :user, :deployer
 
set :deploy_to, «/var/www/html/apps/#{application}»
 
set :use_sudo, false
 
set :scm, :git
 
role :web, «192.168.1.112» # Your HTTP server, Apache/etc
role :app, «192.168.1.112» # This may be the same as your `Web` server
role :db, «192.168.1.112», :primary => true # This is where Rails migrations will run
role :db, «192.168.1.112»
 
default_run_options[:pty] = true
 
namespace :deploy do
   task :start do ;
   task :stop do ;
   task :restart, :roles => :app, :except => { :no_release => true } do
     run «#{try_sudo} touch #{File.join(current_path,’tmp’,’restart.txt’)}»
   end
 
   desc «Installs required gems»
   task :gems, :roles => :app do
     run «cd #{current_path} && sudo rake gems:install RAILS_ENV=production»
   end
   after «deploy:setup», «deploy:gems»
 
   before «deploy», «deploy:web:disable»
   after «deploy», «deploy:web:enable»
end