Konfigurera en Railserver och distribuera med Capistrano på Fedora från scratch

Denna artikel och video handledning lär dig hur du installerar en grundläggande Fedora-server för Rails och PostgreSQL-implementeringar. Först ska vi installera Apache och PostgreSQL. Då använder vi phpPgAdmin för att skapa vår applikations användare och databaser. Efter det ska vi installera Ruby-plattformen med passagerare för att köra vår ansökan. När alla komponenter är installerade, ska vi förbereda vår applikation för distribuering med Capistrano.

Jag ska visa dig hur du använder Capistrano för att automatisera fjärranslutna uppgifter och dra nytta av andra funktioner.


På med showen


Förstå distributionsprocessen

Det finns alltid mycket förvirring kring att använda Rails-applikationer. Denna handledning hoppas att sortera några av det ut. De flesta känner till LAMP: Linux, Apache, MySQL och PHP. Vi kommer att installera LAPR: Linux, Apache, PostgreSQL och Ruby. Att konfigurera en LAPR-server ligner mycket på att konfigurera en LAMP-server. Det enda rynket får Rails att prata med Apache. Tack och lov finns det passagerare aka mod \ _rails. Passagerare är som mod \ _php. Det gör att Rails applikationer är enkla som paj. För att kunna köra en Rails-applikation via Apache skapar du en virtuell värd som pekar på dokumentrotten i programmets offentliga katalog och du rider på skenor.

Capistrano är en annan del som människor kanske inte känner till. Capistrano är en Ruby pärla avsedd att utföra uppgifter på en eller flera fjärrmaskiner. Du behöver SSH-åtkomst för att använda Capistrano. Capistrano, kärleksfullt känt som Cap, automatiserar installationsprocessen. Vi kan använda locket för att ta vår kod från en repo och trycka den på servern, stoppa / starta / starta om servern, skriv anpassade uppgifter som krävs av vår applikation (tänk att installera nödvändiga pärlor) eller inaktivera / aktivera en underhållssida. Att använda lock är inte nödvändigt, men det slår säkert med FTP för att kopiera alla filer runt! Caps verkliga kraft kommer från förmågan att skriva egna uppgifter i Ruby för att manipulera servern. Jag har skrivit många program som tillåter användarfiluppladdningar. Sedan på serverns sida måste en del katalog skapas med rätt behörighet för att uppladdningarna ska lyckas. Det är lätt att skriva en cap-uppgift för att skapa katalogen och ställa in behörigheterna. Om du ändrar servrar, kan du helt enkelt köra cap-uppgiften att installera servern igen. Det finns många saker du kan göra med Capistrano. Du kan även automatisera hela denna handledning för att ställa in ett antal maskiner samtidigt!


Tutorial Sandbox

För att slutföra denna handledning behöver du SSH + sudo-åtkomst. Om du inte har en extra server som sitter runt, kan du skapa en i VirtualBox. Du kan enkelt skapa en ny VM och näta den med ditt värdsystem. Jag gjorde det här för handledningen. När du startar din virtuella maskin, se till att du använder en överbryggad adapter så att din VM får en IP på samma delnät. Jag började med en ny installation utan någon anpassning. Om du har tillgång till en VPS som SliceHost kan du också använda dessa instruktioner.

Var noga med att se skärmen innan du analyserar koden nedan.


Skapa installationsprogrammet

 $ sudo adduser -m deployer $ sudo passwd deployer $ sudo visudo implementer ALL = (ALL) NOPASSWD: ALL $ su deployer $ mkdir ~ / .ssh $ touch ~ / .ssh / authorized_keys2 $ chmod -R 0700 ~ / .ssh # kopia din offentliga nyckel och klistra in den i authorized_keys2 fil $ service sshd start

Ställa in Postgres

 $ sudo yum groupinstall "PostgreSQL Database" $ sudo service postgresql initdb $ sudo service postgresql start $ su - postgres $ psql -d template1 $ alter-användare postgres med lösenordet 'yourpostgresuserpassword'; $ \ q # Ersätt ident i /var/usr/lib/pgsql/data/pg_hba.conf med md5 $ passwd postgres # sätt extra säkerhet i /etc/phpPgAdmin/config.inc.php till false # add 'Tillåt från YOUR_IP_HERE' till vhost i /etc/httpd/conf.d/phpPgAdmin.conf # aktivera http i brandväggen $ sudo yum installera httpd $ sudo service httpd start $ sudo service postgresql starta om

Konfigurera Ruby, RubyGems och Passagerare

 $ sudo yum groupinstall Ruby $ sudo yum installera rubygems $ sudo pärla installera gemcutter $ sudo yum installera postgresql-devel $ sudo pärla installera pg $ sudo pärla installera passagerare $ yum installera gcc-c ++ httpd-devel apr-devel $ sudo passager-installera- apache2-modulen # skapa den här filen /etc/http/conf.d/passenger.conf med dessa innehåll: 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 service httpd starta om

Skapa implementeringsmappen

 $ sudo mkdir / var / www / html / apps $ sudo chown deployer: apache / var / www / html / apps $ sudo yum installera git # skapa nu dina databaser i phpPgAdmin

Konfigurera Apache

 # echo "Inkludera vhost.d / * .vhost" >> /etc/httpd/conf/httpd.conf $ sudo mkdir /etc/httpd/vhost.d $ sudo touch /etc/httpd/vhost.d/nettuts-demo .vhost # uppdatera de här filerna till:  Servernamn www.nettuts-demo.com DocumentRoot / var / www / html / apps / net-demo / nuvarande / offentlig  Alternativ FollowSymLinks Tillåt från alla alternativ -MultiViews  RewriteEngine On RewriteCond% DOCUMENT_ROOT /system/maintenance.html -f RewriteCond% SCRIPT_FILENAME! Maintenance.html RewriteRule $ /system/maintenance.html [R = 302, L] 

Komplett Cap-fil

 set: application, "netuts demo" set: repository, "git: //github.com/Adman65/Nettuts-Capistrano-Deployments.git" set: användare,: deployer set: deploy_to, "/ var / www / html / apps / # application "set: use_sudo, false set: scm,: git role: web," 192.168.1.112 "# Din HTTP-server, Apache / etc-roll: app," 192.168.1.112 "# Det kan vara samma som din webbserver-roll: db, "192.168.1.112",: primary => true # Det här är Rails migreringar kommer att köra roll: db, "192.168.1.112" default_run_options [: pty] = true namespace: implementera uppgift : börja göra; slutlig uppgift: sluta göra; avsluta uppgiften: starta om:: roller =>: app,: except => : no_release => true kör "# try_sudo tryck # File.join (current_path, 'tmp', 'restart.txt') "avsluta desc" installerar nödvändiga pärlor "uppgift: ädelstenar:: roller =>: app kör" cd # current_path && sudo rake gems: installera RAILS_ENV = produktion "slut efter" implementera: setup "," deploy: gems " "deploy", "deploy: web: disable" efter "deploy", "deploy: web: enable" slutet