Umstellung auf "www.stefanwienert.net" und Passenger mit apache mod userdir

Diejenigen, die meinen Feed abonniert haben, haben es wahrscheinlich schon gemerkt, da die ganzen Items als ungelesen markiert sein könnten.
Da ich passenger verwende, aber gleichzeitig noch apache mit mod_userdir nutzen möchte, blieb mir nichts anderes übrig als den Hauptteil der Site auf eine Subdomain zu legen. Aus irgendwelchen unerfindlichen Gründen hatte ich damals “site.stefanwienert.net” genommen. Jetzt ist mir mal aufgefallen, dass die Wahl der Subdomain “www.” deutlich klüger gewesen wäre.

Anfragen an mod_userdir können bei dieser Methode dann einfach durch “http://hauptdomain/~username” entgegengenommen werden. Die Haupt Rails Domain, auf die der Nutzer bei Erstkontakt stoßen sollte, ist dann “www.stefanwienert.net” und wird dank Passenger dann an einen Ruby-Prozess dispatcht. Dazu muss man einfach nur zwei vhosts in seiner “/etc/apache2/sites-enabled/…” aktivieren:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Hier fuer die Hauptdomain, um weitere Websites zu ermoeglichen
# z.B. php Wikis oder Userspaces
<VirtualHost *:80>                                      
      ServerAdmin s59605@htw-dresden.de                 
      ServerName stefanwienert.net                      
      DocumentRoot /var/www                             
#   PassengerHighPerformance on                         
        <Directory /var/www/>                           
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All                        
                Order allow,deny                         
                allow from all                                             
        </Directory>                                                           
</VirtualHost>    

# jetzt der eigentliche Rails Prozess
<VirtualHost *:80>                                                             
        ServerAdmin info@stefanwienert.net                                     
        ServerName www.stefanwienert.net                                       
        ServerAlias site.stefanwienert.net                                           
        #RailsBaseURI /site                                                    
        DocumentRoot /path/to/rails/public                         
# gzip html, css and js                                                       
        AddOutputFilterByType DEFLATE text/html text/css application/x-javascript application/javascript
                                        
  <Directory /path/to/rails/public>                                                         
      Order allow,deny                                                                                  
      Allow from all                                                                                    
      AllowOverride All                                                                                 
  </Directory>                                                                                          
</VirtualHost>

Zu guter Letzt noch eine 304 Weiterleitung für die, die “http://site.stefanwienert.net” oder “http://stefanwienert.net” eintippen. Das ganze kann man in die entsprechenden htaccess packen oder oben gleich mit bei den “Directory” Direktiven mit angeben. Hier der Vollständigkeit halber, bevor ihr selbst erst googlen müsst.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# /var/www/.htaccess:
RewriteEngine On

RewriteCond %{HTTP_HOST} ^stefanwienert.net$
RewriteCond %{REQUEST_URI} ^\/$
RewriteRule ^(.*)$ http://www.stefanwienert.net/$1 [R=permanent,L]


# /path/to/rails/public/.htaccess
RewriteEngine on

RewriteCond %{HTTP_HOST} ^site.stefanwienert.net [NC]
RewriteRule ^(.*)$ http://www.stefanwienert.net/$1 [L,R=301]


# Hups, hier sieht man mal, dass ich die Zeilen jeweils woanders
# herkopiert habe: Selbe Funktion aber etwas andere Syntax :)

Rails/Passenger im Parallels Plesk zum Laufen bekommen

Wer auch Parallels Plesk Panel für seine Serveradministration verwendet, und sich schonmal gefragt hat, ob es was besseres als die Build-in Fast CGI Unterstützung oder Mongrel/Webrick gibt, dem will ich hier mal einen kleinen Guide geben, wie das ganze mit Passenger zu bewerkstelligen ist.
Wir verwenden für die Administration unserer Server auch Plesk, da es echt stupid simple ist.

Ich gehe davon aus, dass Ruby und Rubygems bereits installiert sind! (Sollte man z.B. Debian verwenden, auf keinen Fall die Pakete aus dem apt-get installieren, sondern manuell wie hier beschreiben.) Auch ein Root-Zugang zum Server wird benötigt.

Also:

  1. im Plesk eine neue Domain/Subdomain anlegen
  2. Unser Rails-Projekt nach /var/www/vhosts/DOMAIN/httpdocs bzw. /var/www/vhosts/DOMAIN/subdomains/SUBDOMAIN/httpdocs kopieren. Also genau dort rein, kein weiteres Unterverzeichnis (nach httpdocs kommen dann gleich app db config public …)
  3. Schauen, dass die Lese/Schreibrechte hinhauen: z.B. chgrp psaserv log db tmp -R && chmod g+w * -R. Im einzelnen mal schauen.
  4. Root Konsole: Gems installieren und Datenbank migrieren:
1
2
3
4
5
rake gems:install
rake db:migrate RAILS_ENV="production"
gem install passenger
# laengere Anleitung befolgen. Im Endeffekt muss man ein paar Zeilen in die apache2.conf kopieren. 
# Den zweiten Teil mit mit der Vserver Konfiguration interessiert uns im Moment nicht
  1. Im Ordner DOMAIN/conf also von unserem httpdocs Verzeichnis ../conf/vhost.conf nun die Datei vhost.conf anlegen und folgendes reinkopieren (jeweils das richtige Verzeichnis als Ziel nehmen, je nachdem ob wir eine Subdomain oder Domain benutzen möchten):
1
2
3
4
5
6
 DocumentRoot /var/www/vhosts/DOMAIN/httpdocs/public
# bzw.   /var/www/vhosts/DOMAIN/subdomains/SUBDOMAIN/httpdocs/public
 <Directory /var/www/vhosts/pludoni.de/subdomains/tasks/httpdocs/public >
    AllowOverride all
    Options -MultiViews
 </Directory>
  1. plesk Vhost reloaden:
1
/usr/local/psa/admin/sbin/websrvmng -u --vhost-name=DOMAIN.de

hierbei jeweils immer nur die Domain angeben, auch wenn wir nur einen Subdomain anlegen.

Nun sollte unsere Rails App unter der Domain bzw. Subdomain verfügbar sein. Neustarten können wir Passenger indem wir ein touch tmp/restart.txt oder die Datei sonst irgendwie im Timestamp verändern.