Configurazione di un server Rails e distribuzione con Capistrano su Fedora da zero

Questo articolo e tutorial video ti insegnerà come configurare un server Fedora di base per le distribuzioni di Rails e PostgreSQL. Per prima cosa installeremo Apache e PostgreSQL. Quindi, useremo phpPgAdmin per creare utenti e database della nostra applicazione. Successivamente, configureremo la piattaforma Ruby utilizzando Passenger per eseguire la nostra applicazione. Una volta installati tutti i componenti, prepareremo la nostra applicazione per la distribuzione utilizzando Capistrano.

Ti mostrerò come utilizzare Capistrano per automatizzare le attività remote e sfruttare le altre funzionalità.


Con lo spettacolo


Comprensione del processo di distribuzione

C'è sempre molta confusione sulla distribuzione delle applicazioni Rails. Questo tutorial spera di risolverne un po '. La maggior parte delle persone conosce LAMP: Linux, Apache, MySQL e PHP. Imposteremo LAPR: Linux, Apache, PostgreSQL e Ruby. L'impostazione di un server LAPR è molto simile alla configurazione di un server LAMP. L'unica ruga è far sì che Rails parli con Apache. Per fortuna, c'è Passenger aka mod \ _rails. Passenger è come mod \ _php. Rende le applicazioni Rails in esecuzione facili come una torta. Per eseguire un'applicazione Rails tramite Apache, crea un host virtuale che punta la radice del documento nella directory pubblica delle applicazioni e sarai su binari.

Capistrano è un'altra parte con cui le persone potrebbero non avere familiarità. Capistrano è una gemma di Ruby progettata per eseguire attività su una o più macchine remote. Avrai bisogno dell'accesso SSH per utilizzare Capistrano. Capistrano, affettuosamente conosciuto come Cap, automatizza il processo di distribuzione. Possiamo usare cap per prendere il nostro codice da un repository e inviarlo al server, arrestare / avviare / riavviare il server, scrivere le attività personalizzate richieste dalla nostra applicazione (pensate a installare le gemme richieste), o disabilitare / abilitare una pagina di manutenzione. L'uso di cap non è richiesto ma sicuramente batte usando FTP per copiare tutti i file in giro! Il vero potere di Cap deriva dalla possibilità di scrivere attività personalizzate in Ruby per manipolare il server. Ho scritto molte applicazioni che consentono il caricamento di file dell'utente. Quindi sul lato server, è necessario creare alcune directory con le autorizzazioni appropriate per il corretto caricamento. È abbastanza facile scrivere un'attività cap per creare la directory e impostare le autorizzazioni. Quindi, se cambi server, puoi semplicemente eseguire l'attività cap per configurare nuovamente il server. Ci sono molte cose che puoi fare con Capistrano. Potresti anche automatizzare l'intero tutorial per configurare un numero qualsiasi di macchine contemporaneamente!


Tutorial Sandbox

Per completare questo tutorial, avrai bisogno dell'accesso SSH + sudo. Se non si dispone di un server di riserva in giro, è possibile crearne uno in VirtualBox. È possibile creare facilmente una nuova VM e collegarla in rete con il sistema host. L'ho fatto per il tutorial. Quando si avvia la macchina virtuale, assicurarsi di utilizzare un adattatore a ponte in modo che la VM ottenga un IP sulla stessa sottorete. Ho iniziato con una nuova installazione senza personalizzazione. Se si ha accesso a un VPS come SliceHost, è possibile utilizzare anche queste istruzioni.

Assicurati di visualizzare lo screencast prima di analizzare il codice qui sotto.


Creare il deployer

 $ sudo adduser -m deployer $ sudo passwd deployer $ sudo visudo deployer ALL = (TUTTI) NOPASSWD: ALL $ su deployer $ mkdir ~ / .ssh $ touch ~ / .ssh / authorized_keys2 $ chmod -R 0700 ~ / .ssh # copy la tua chiave pubblica e incollarla nel file authorized_keys2 $ sshd start del servizio

Impostare Postgres

 $ sudo yum groupinstall "Database PostgreSQL" $ sudo servizio postgresql initdb $ sudo servizio postgresql inizio $ su - postgres $ psql -d modello1 $ alter utenti postgres con password 'yourpostgresuserpassword'; $ \ q # Sostituisci ident in /var/usr/lib/pgsql/data/pg_hba.conf con md5 $ passwd postgres # imposta sicurezza extra in /etc/phpPgAdmin/config.inc.php su false # aggiungi 'Allow from YOUR_IP_HERE' per vhost in /etc/httpd/conf.d/phpPgAdmin.conf # abilitare http nel firewall $ sudo yum install httpd $ sudo service httpd start $ sudo service postgresql restart

Configurazione di Ruby, RubyGems e Passenger

 $ sudo yum groupinstall Ruby $ sudo yum installa rubygems $ sudo gem installa gemcutter $ sudo yum installa postgresql-devel $ sudo gem installa pg $ sudo gem installa passeggero $ yum installa gcc-c ++ httpd-devel apr-devel $ sudo passeggero-install- apache2-module # crea questo file /etc/http/conf.d/passenger.conf con questi contenuti: LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger. quindi PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.9 PassengerRuby / usr / bin / ruby ​​$ sudo setenforce 0 $ sudo service httpd restart

Creazione della cartella del deployer

 $ sudo mkdir / var / www / html / apps $ sudo chown deployer: apache / var / www / html / apps $ sudo yum install git # a questo punto, crea i tuoi database in phpPgAdmin

Configurazione di 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 # aggiorna che i file contendono a:  ServerName www.nettuts-demo.com DocumentRoot / var / www / html / apps / nettuts-demo / corrente / pubblico  Opzioni FollowSymLinks Consenti da tutte le opzioni -MultiViews  RewriteEngine su RewriteCond% DOCUMENT_ROOT /system/maintenance.html -f RewriteCond% SCRIPT_FILENAME! Maintenance.html RewriteRule $ /system/maintenance.html [R = 302, L] 

File Cap completo

 set: application, "nettuts-demo" set: repository, "git: //github.com/Adman65/Nettuts-Capistrano-Deployments.git" set: user,: set di deployer: deploy_to, "/ var / www / html / app / # application "set: use_sudo, false set: scm,: git role: web," 192.168.1.112 "# Il tuo server HTTP, ruolo Apache / etc: app," 192.168.1.112 "# Questo potrebbe essere lo stesso come ruolo del server 'Web': db, "192.168.1.112",: primary => true # Qui è dove verranno eseguite le migrazioni di Rails: db, "192.168.1.112" default_run_options [: pty] = spazio dei nomi true: deploy do task : start do; end task: stop do; end task: restart,: roles =>: app,: except => : no_release => true esegui "# try_sudo touch # File.join (current_path, 'tmp', 'restart.txt') "end desc" Installa gemma richiesta "task: gems,: roles =>: app do run" cd # current_path && sudo rake gems: installa RAILS_ENV = production "end after" deploy: setup "," deploy: gems "prima "deploy", "deploy: web: disable" dopo "deploy", "deploy: web: enable" end