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

18 января 2018

В этой статье и видео-учебнике рассказывается, как настроить базовый сервер 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. К счастью, есть Passenger aka mod_rails. Пассажир похож на mod_php. Он упрощает работу с Rails-приложениями как пирог. Чтобы запустить приложение Rails через Apache, создайте виртуальный хост, указав корень документа в общий каталог приложений, и вы будете кататься по рельсам.

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


Учебник Песочница

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

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


Создание Deployer

$ 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

Настройка Postgres

$ 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

Настройка Ruby, RubyGems и Passenger

$ 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

Создание папки Deployer

$ 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 phpPgAdmi

Настройка Apache

# 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 O
      RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
      RewriteCond %{SCRIPT_FILENAME} !maintenance.html
      RewriteRule $ /system/maintenance.html [R=302,L]
  </VirtualHost>

Полный файл крышки

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 ru
role :db,  "192.168.1.112"
default_run_options[:pty] = true
amespace :deploy do
   task :start do ; end
   task :stop do ; end
   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