Sette opp en Railserver og distribuere med Capistrano på Fedora fra Scratch

Denne artikkelen og videoopplæringen vil lære deg hvordan du konfigurerer en grunnleggende Fedora-server for Rails og PostgreSQL-distribusjoner. Først vil vi sette opp Apache og PostgreSQL. Deretter bruker vi phpPgAdmin til å lage applikasjonens bruker og databaser. Etter det vil vi sette opp Ruby-plattformen ved hjelp av passasjer for å kjøre vår søknad. Når alle komponentene er installert, utarbeider vi vårt program for distribusjon ved hjelp av Capistrano.

Jeg vil vise deg hvordan du bruker Capistrano til å automatisere eksterne oppgaver og dra nytte av andre funksjoner.


På med showet


Forstå distribusjonsprosessen

Det er alltid mye forvirring rundt utplassering av Rails-applikasjoner. Denne opplæringen håper å sortere noe av det ut. De fleste kjenner LAMP: Linux, Apache, MySQL og PHP. Vi vil sette opp LAPR: Linux, Apache, PostgreSQL og Ruby. Oppsett av en LAPR-server ligner veldig på å sette opp en LAMP-server. Den eneste rynken får Rails til å snakke med Apache. Heldigvis er det Passasjer aka mod \ _rails. Passasjer er som mod \ _php. Det gjør at Rails applikasjoner er enkle som kake. For å kunne kjøre en Rails-applikasjon via Apache, opprett en virtuell vert som peker dokumentroten til programmets offentlige katalog, og du vil ri på skinner.

Capistrano er en annen del som folk kanskje ikke er kjent med. Capistrano er en Ruby perle designet for å utføre oppgaver på en eller flere eksterne maskiner. Du trenger SSH-tilgang til å bruke Capistrano. Capistrano, kjærlig kjent som Cap, automatiserer distribusjonsprosessen. Vi kan bruke hetten til å ta koden fra noen repo og skyve den til serveren, stoppe / starte / starte serveren på nytt, skriv tilpassede oppgaver som kreves av applikasjonen vår (tenk installere nødvendige perler), eller deaktiver / aktiver en vedlikeholdsside. Bruk av hette er ikke nødvendig, men det slår sikkert med FTP for å kopiere alle filene rundt! Caps virkelige kraft kommer fra evnen til å skrive tilpassede oppgaver i Ruby for å manipulere serveren. Jeg har skrevet mange applikasjoner som tillater brukerfilopplastinger. Deretter på server siden må noen katalog opprettes med riktig tillatelse for at opplastingene skal lykkes. Det er lett nok å skrive en cap-oppgave for å opprette katalogen og angi tillatelsene. Deretter, hvis du noen gang bytter servere, kan du bare kjøre cap-oppgave for å sette opp serveren igjen. Det er mange ting du kan gjøre med Capistrano. Du kan til og med automatisere hele denne opplæringen for å sette opp et antall maskiner samtidig!


Tutorial Sandbox

For å fullføre denne opplæringen trenger du SSH + sudo-tilgang. Hvis du ikke har en ekstra server som sitter rundt, kan du opprette en i VirtualBox. Du kan enkelt lage en ny VM og nettverk den med ditt vertssystem. Jeg gjorde dette for opplæringen. Når du starter din virtuelle maskin, må du sørge for at du bruker en brokoblet adapter slik at VM får en IP på samme delnett. Jeg startet med en fersk installasjon uten noen tilpasning. Hvis du har tilgang til en VPS som SliceHost, kan du også bruke disse instruksjonene.

Pass på å se screencast før du analyserer koden nedenfor.


Opprette Deployeren

 $ sudo adduser -m deployer $ sudo passwd deployer $ sudo visudo distribuator ALL = (ALL) NOPASSWD: ALL $ su distribuerer $ mkdir ~ / .ssh $ touch ~ / .ssh / authorized_keys2 $ chmod -R 0700 ~ / .ssh # kopi din offentlige nøkkel og lim den inn i autorisert_keys2 fil $ service sshd start

Sette opp Postgres

 $ sudo yum groupinstall "PostgreSQL Database" $ sudo service postgresql initdb $ sudo service postgresql start $ su - postgres $ psql -d template1 $ alter bruker postgres med passord 'yourpostgresuserpassword'; $ \ q # Erstatt ident i /var/usr/lib/pgsql/data/pg_hba.conf med md5 $ passwd postgres # sett ekstra sikkerhet i /etc/phpPgAdmin/config.inc.php til false # add 'Tillat fra YOUR_IP_HERE' å vhost i /etc/httpd/conf.d/phpPgAdmin.conf # aktivere http i brannmuren $ sudo yum installere httpd $ sudo tjeneste httpd start $ sudo service postgresql restart

Konfigurere Ruby, RubyGems og Passenger

 $ sudo yum groupinstall Ruby $ sudo yum installere rubygems $ sudo perle installere gemcutter $ sudo yum installere postgresql-devel $ sudo perle installere pg $ sudo perle installere passasjer $ yum installere gcc-c ++ httpd-devel apr-devel $ sudo passasjer-installere- apache2-modul # lag denne filen /etc/http/conf.d/passenger.conf med disse innholdene: LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger. så PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.9 PassengerRuby / usr / bin / ruby ​​$ sudo setenforce 0 $ sudo tjenesten httpd restart

Opprett distribueringsmappen

 $ sudo mkdir / var / www / html / apps $ sudo chown deployer: apache / var / www / html / apps $ sudo yum install git # på dette tidspunktet lager dine databaser i phpPgAdmin

Konfigurere Apache

 # echo "Inkluder vhost.d / * .vhost" >> /etc/httpd/conf/httpd.conf $ sudo mkdir /etc/httpd/vhost.d $ sudo touch /etc/httpd/vhost.d/nettuts-demo .vhost # oppdater de filene conttents til:  Servernavn www.nettuts-demo.com DocumentRoot / var / www / html / apps / netts-demo / nåværende / offentlig  Alternativer FollowSymLinks Tillat fra alle alternativer -MultiViews  RewriteEngine On RewriteCond% DOCUMENT_ROOT /system/maintenance.html -f RewriteCond% SCRIPT_FILENAME! Vedlikehold.html RewriteRule $ /system/maintenance.html [R = 302, L] 

Komplett Cap-fil

 sett: søknad, "netts-demo" sett: depot, "git: //github.com/Adman65/Nettuts-Capistrano-Deployments.git" sett: bruker,: distribusjonssett: deploy_to, "/ var / www / html / apps / # application "sett: use_sudo, falskt sett: scm,: git rolle: web," 192.168.1.112 "# HTTP-serveren din, Apache / etc rolle: app," 192.168.1.112 "# Dette kan være det samme som din "Web" -serverrolle: db, "192.168.1.112",: primary => true # Dette er hvor Rails-migrasjoner skal kjøre rolle: db, "192.168.1.112" default_run_options [: pty] = sann navneskala: deploy do task : start gjøre; sluttoppgave: stop gjøre; avslutte oppgave: restart,: roller =>: app,: except => : no_release => true kjører "# try_sudo touch # File.join (current_path, 'tmp', 'restart.txt') "end desc" installerer nødvendige edelstener "oppgave: edelstener,: roller =>: app run" cd # current_path && sudo rake gems: installer RAILS_ENV = produksjon "end etter" distribuere: setup "," deploy: gems "før "deploy", "deploy: web: deaktiver" etter "deploy", "deploy: web: enable" end