Kurztest Christmann TEO|4|ALL

Kom­pak­ter Büro­rech­ner: Christ­mann TEO|4|ALL

Für einen Kun­den bestellte ich einen Kom­pakt­rech­ner TEO|4|ALL der Fa. Christ­mann aus dem nie­der­säch­si­schen Ilsede bei Peine. Über­haupt auf­merk­sam gewor­den bin ich auf diese Firma und deren Hard­ware durch eine Zusam­men­ar­beit mei­nes Arbeit­ge­bers mit eben­die­ser Firma.

Bei dem von mir bestell­ten Gerät han­delt es sich um das Ein­stiegs­mo­dell, den TEO|4|ALL, wel­cher mit einem Intel Atom der neu­es­ten Gene­ra­tion (N2800) aus­ge­stat­tet ist. Der Pro­zes­sor ver­fügt über zwei Kerne, 1 MB Cache und kann Hyper Threa­ding, ver­fügt somit also über vier logi­sche Kerne. Als Main­board kommt das DN2800MT im ITX-Formfaktor von Intel zum Ein­satz. Auf die­sem steckt ein vier Giga­byte gro­ßer DDR3-Baustein. USB 3.0 wird hier lei­der nicht gebo­ten, dafür aber zwei Hochstrom-USB-2.0-Ports, die sich auf der Rück­seite des Geräts befin­den und bspw. dem schnel­le­ren Laden von Smart­pho­nes und Tablets die­nen kön­nen. Von den vier inter­nen USB-2.0-Anschlüssen des Intel-Mainboards führt Christ­mann zwei auf der Vor­der­seite raus. Für den Anschluss von Bild­schir­men steht ein VGA– und ein HDMI-Anschluss zur Ver­fü­gung. Außer­dem ist ein Gigabit-Netzwerkcontroller von Intel auf dem Board verbaut.

Was nach dem Ein­schal­ten des Geräts als ers­tes auf­fällt ist, dass kein Geräusch von dem Gerät kommt. Es ist kom­plett laut­los. Also wirk­lich kom­plett. Im gesam­ten Sys­tem ist kein Lüf­ter ver­baut. Das Netz­teil ist extern und eben­falls lüf­ter­los. Nach eini­gen Stun­den des Tes­tens war die Unter­seite des Gehäu­ses nur hand­warm, Ther­mik­pro­bleme würde ich somit nicht erwarten.

Christ­mann bie­tet den Rech­ner in ins­ge­samt 10 ver­schie­de­nen Far­ben, unter ande­rem auch aus­ge­fal­lene Rech­ner­far­ben wie Hell­rosa und Schwe­fel­gelb) an. In der Stan­dard­va­ri­ante ver­zich­tet Christ­mann auf den Ein­bau eines opti­schen Lauf­werks. Heut­zu­tage sehe ich das als unpro­ble­ma­tisch an. Wer den­noch nicht dar­auf ver­zich­ten möchte, kann ein Tray-DVD-Brenner für 39,90 € ein­bauen las­sen. Hier hätte ich mir viel­leicht ein Slot-In-Laufwerk gewünscht, da ich den Trays bei star­ker Bean­spru­chung nicht vertraue.

Recht mini­ma­lis­tisch ist der stan­dard­mä­ßig ver­baute Mas­sen­spei­cher: eine 60 GiB große SSD von Intel. Für den Betrieb als nor­ma­len Office-PC dürfte der Spei­cher aber genü­gen. Gegen Auf­preis las­sen sich aber natür­lich auch grö­ßere SSDs und auch Fest­plat­ten ver­bauen. Auch eine Kom­bi­na­tion aus bei­dem ist mög­lich, das Gehäuse bie­tet genug Platz für zwei 2,5″-Laufwerke.

Nun aber zum eigent­lich inter­es­san­tes­ten Teil: die Per­for­mance. Ich habe auf dem TEO|4|ALL Ubuntu 12.04, Win­dows XP, 7 und 8 aus­pro­biert. Gemein war allen vier Betriebs­sys­te­men, dass sich die Instal­la­tion ganz schön zog. Gemes­sen natür­lich an PCs mit voll­wer­ti­gen Desktop-CPUs wie einem Intel Core i. Für einen Atom-basierten Rech­ner war die War­te­zeit äußerst kurz. Wäh­rend der Arbeit mit allen vier Betriebs­sys­te­men konnte ich keine nen­nens­wer­ten oder stö­ren­den Ver­zö­ge­run­gen fest­stel­len. Das ist sicher­lich mit­un­ter dem ver­bau­ten DDR3-Speicher und der recht schnel­len SSD geschul­det. Aber auch die vier logi­schen Kerne der CPU dürf­ten ihren Teil dazu bei­tra­gen. Ich war auf jeden Fall posi­tiv über­rascht, da ich bei einem Atom mit weni­ger Leis­tung gerech­net habe.

Pro­ble­ma­tisch erwies sich lei­der der Betrieb von 64-bittigen Betriebs­sys­te­men, da Intel für diese (noch?) keine Gra­fik­kar­ten­trei­ber anbie­tet. Weder unter Win­dows 7 noch unter Win­dows 8 gelang es mir, den Gra­fik­chip mit vol­ler Auf­lö­sung zu betrei­ben. Die 32-Bit-Treiber lies­sen sich nicht instal­lie­ren. Da in dem Sys­tem 4 GB RAM ver­baut sind, ist dies durch­aus ärger­lich, da man so rund 700 MB RAM ver­schenkt. Außer­dem sind 64-bittige Win­dowse ten­den­zi­ell sicherer.

Wer für sein Home Office oder auch für sein Büro und seine Mit­ar­bei­ter kom­pakte und leise Rech­ner sucht, die mit einer maxi­ma­len Wat­tage von 23 Watt auch noch äußerst strom­spa­rend sind, ist mit dem TEO|4|ALL aus mei­ner Sicht sehr gut bera­ten. Mit einem Ein­stiegs­preis von 349,– € ist er außer­dem recht güns­tig, wenn auch ein Betriebs­sys­tem zusätz­lich erwor­ben wer­den muss. Wer gerne drei Jahre Garan­tie mit Vorab-Austausch haben möchte, kann diese Option für einen Auf­preis von 60,– € erwer­ben, stan­dard­mä­ßig bie­tet Christ­mann eine zwei Jahre lange Garan­tie mit Bring-In-Service an.

Cloud-Deployment von Webanwendungen auf Basis von PHP

Vor einer gan­zen Weile berich­tete ich über den PaaS-Anbieter Heroku, der sein Port­fo­lio an Pro­gram­mier­spra­chen mitt­ler­weile deut­lich erwei­tert hat. Bis vor nicht allzu lan­ger Zeit fehlte aber noch ein ver­gleich­ba­rer Anbie­ter für das Deploy­ment von PHP-Anwendungen. Ver­wun­der­lich gerade des­we­gen, weil PHP nach wie vor zu den belieb­tes­ten Pro­gram­mier­spra­chen im welt­wei­ten Netz gehört und einige sehr bekannte Sys­teme in PHP ent­wi­ckelt wurden.

Diese Lücke füllt nun der Anbie­ter PHP Fog, wel­cher, genau wie Heroku auf das Deploy­ment von Anwen­dun­gen über das Ver­sio­nie­rungs­tool Git setzt. Das ver­spricht eine äußerst ein­fa­che Hand­ha­bung und ist deut­lich zeit­ge­mä­ßer als das sonst übli­che Deploy­ment über FTP. Allein schon in Sachen Geschwin­dig­keit steckt Git die Daten­über­tra­gung via FTP locker in die Tasche. Vor eini­ger Zeit mel­dete ich mich dann bei PHP Fog an und begann, ein wenig zu expe­ri­men­tie­ren. Vor­bild­lich ist, dass man gän­gige PHP-Anwendungen per One-Click-Installer instal­lie­ren kann. Dazu gehört unter ande­rem auch das äußerst beliebte CMS Word­Press. In der Anfangs­phase aber war eine bei PHP Fog abge­legte WordPress-Installation aber nahezu unbrauch­bar, da man keine beschreib­ba­ren Ver­zeich­nisse ein­rich­ten konnte und somit viele Funk­tio­nen von Word­Press nicht nutz­bar waren. Updates schei­ter­ten, die Instal­la­tion von Plugins oder der Upload von Dateien war unmög­lich. Der ein­zige Aus­weg war, die WordPress-Installation lokal zu war­ten und die Ände­run­gen per Git zu deployen. Pro­ble­ma­tisch war aber natür­lich hier, dass Ein­träge in der loka­len Daten­bank nicht auf der Infra­struk­tur von PHP Fog lan­de­ten. Die Anfangs­phase war kurzum ziem­lich ent­täu­schend. Stän­dige Down­ti­mes und ein erfolg­rei­cher, groß ange­leg­ter Hacker­an­griff trüb­ten den Erstein­druck wei­ter. Mitt­ler­weile ist der Ser­vice deut­lich gereift und die oben genann­ten Kri­tik­punkte sind alle­samt eli­mi­niert wor­den. Den­noch reicht der Bedie­nungs­kom­fort lei­der nach wie vor nicht an den von Heroku ran. Lokale Ände­run­gen an Theme-Dateien bspw. kann man lei­der nicht zurück auf den eige­nen Rech­ner bekom­men, da die Ver­sio­nie­rung nur in eine Rich­tung funk­tio­niert. Glei­ches gilt für hoch­ge­la­dene Dateien, bei­spiels­weise Fotos. Diese nach­träg­lich auf den eige­nen Rech­ner zu bekom­men, bspw. um einen Anbie­ter­wech­sel durch­zu­füh­ren ist nicht mög­lich, wenigs­tens nicht ohne Umwege über WordPress-Plugins, die das erlau­ben. Die­ser Nach­teil exis­tiert natür­lich auch bei Heroku, nur bringt jede Rails-basierte Anwen­dung einen inte­grier­ten Web­ser­ver mit und ver­fügt im Regel­fall über meh­rere Daten­ban­ken (Pro­duc­tion, Deve­lop­ment, Test), sodass man Ände­run­gen an der Anwen­dungs­struk­tur ohne Pro­bleme lokal vor­neh­men und auch gleich tes­ten kann. Die Schuld ist hier also nicht bei PHP Fog zu suchen, son­dern viel­mehr bei der Struk­tur von PHP-Anwendungen. Ohne eine lokale Instal­la­tion eines Web­ser­vers und einer MySQL-Datenbank ist eine sol­che Arbeits­weise nicht mög­lich. In Sachen Sim­pli­zi­tät schlägt Rails hier PHP ganz bequem. Die Idee, das Deploy­ment von PHP-Anwendungen über das effi­zi­ente und ein­fach zu bedie­nende Git vor­zu­neh­men ist gut, lei­der schei­tert die Benutz­bar­keit in der Pra­xis an dem doch recht ange­staub­ten Kon­zept von PHP-Anwendungen. Heroku ver­bie­tet das Schrei­ben in das Datei­sys­tem des Anbie­ters ein­fach, um genau sol­chen Pro­ble­men vor­zu­beu­gen. Rails-Anwendungen spie­len da im Regel­fall auch pro­blem­frei mit, und man bin­det Sto­rage über Ser­vices wie Ama­zons S3 an. Bei PHP Fog ist das Schrei­ben ins Datei­sys­tem (lei­der) ohne wei­te­res mög­lich. Dor­tige Ände­run­gen las­sen sich aber nicht reflek­tie­ren. Meine Idee wäre, dass man im Backend von PHP Fog einen But­ton fin­den sollte, der auf der ent­fern­ten Maschine eine git add .; git com­mit –am ‘Kom­men­tar’ aus­führt und man dann mit­tels git pull die Ände­run­gen auf seine eigene Maschine bekommt. Ich werde wohl mal ein Support-Ticket einreichen …

Da ist es: Ubuntu 11.04

Ubuntu 11.04, das schein­bar umstrit­tenste Release seit lan­gem ist nun da. Umstrit­ten, weil nicht mehr Gnome, son­dern Unity der neue Desktop-Manager ist. Ich per­sön­lich mag ihn eigent­lich. Liegt aber viel­leicht daran, dass ich gene­rell Ver­än­de­run­gen gerne mag.

Was sich aber nicht ändert ist die Tat­sa­che, dass ich mal wie­der einen Mir­ror für alle ver­füg­ba­ren Ver­sio­nen von Ubuntu anbiete:

ubuntu-11.04-desktop-amd64.iso

ubuntu-11.04-desktop-i386.iso

ubuntu-11.04-server-amd64.iso

ubuntu-11.04-server-i386.iso

ubuntu-11.04-alternate-amd64.iso

ubuntu-11.04-alternate-i386.iso

Die letzte Beta habe ich schon ein wenig ange­tes­tet und ich mag Unity. Nur schade, dass es ohne 3D-Hardware nicht läuft. Dafür gibt es aber einen Fork namens Unity2D. Eine kleine Google-Suche dürfte euch bei der Instal­la­tion behilf­lich sein. Und nun, fro­hes Saugen.

Aus und vorbei mit der Ordnerwirtschaft

Die Zei­ten der Ord­ner sind gezählt. Immer mehr ver­lie­ren starre Ord­ner­struk­tu­ren an Rele­vanz und auch an Sinn.

Google hat das schon vor Jah­ren erkannt und das klas­si­sche Ord­ner­kon­zept bei ihrem E-Mail-Dienst Google Mail über den Hau­fen gewor­fen. Dort gibt es keine Ord­ner mehr. Deren Nach­fol­ger hei­ßen Labels und sind uni­ver­sel­ler ein­setz­bar. Musste man im Zeit­al­ter der Ord­ner eine E-Mail einem ein­zi­gen, ein­deu­ti­gen Ord­ner zuord­nen, kann man dank des Label-Konzepts eine E-Mail (oder einen gan­zen Kon­ver­sa­ti­ons­ver­lauf) meh­re­ren The­men, Labels, zuord­nen. Denn nicht immer kann man den Sach­ver­halt einer E-Mail oder einer gan­zen Kon­ver­sa­tion einem ein­zi­gen Thema zuord­nen. Nicht zuletzt dank der inte­grier­ten Archiv-Funktion kann man das Inbox-Zero-Konzept ver­fol­gen, ohne jemals wie­der eine E-Mail löschen zu müs­sen. E-Mails las­sen sich aber auch ohne die Ver­wen­dung von Labels blitz­schnell wie­der­fin­den, Google ist nicht umsonst Experte im Fin­den von Din­gen. Eine Suche nach einer bestimm­ten E-Mail dürfte im Zwei­fels­falle also schnel­ler gehen, als in vier Dut­zend Ord­nern hän­disch nach einer E-Mail zu suchen.

Aber die feh­lende Not­wen­dig­keit, peni­bel Ord­nung hal­ten zu müs­sen hat sich mitt­ler­weile auch außer­halb des E-Mail-Postfachs mani­fes­tiert. Zu ver­dan­ken hat der Com­pu­ter­be­nut­zer das den sys­tem­weit funk­tio­nie­ren­den Meta­su­chen, die alle moder­nen Betriebs­sys­teme mitt­ler­weile imple­men­tiert haben. Begon­nen hat damit Apple anno 2005, als sie ihrem Betriebs­sys­tem Mac OS 10.4 Tiger die sys­tem­weite Suche Spot­light spen­dier­ten. Spot­light funk­tio­niert wie eine Such­ma­schine für den eige­nen Com­pu­ter und weiß immer bescheid, wo wel­che Dateien mit wel­chen Inhal­ten (sofern sie nicht ver­schlüs­selt sind) lie­gen. Anstatt also auf­wän­dig nach einer Datei unter dut­zen­den oder gar hun­der­ten zu fahn­den, rufe ich ein­fach Spot­light auf und lasse für mich fin­den. Win­dows hat seit Vista eine ähn­li­che Metho­dik imple­men­tiert, Linux kann das auch schon eine ganze Weile. Diese ein­ge­bau­ten Such­in­di­zes las­sen sich aber nicht nur für das Auf­fin­den von Dateien nut­zen, Pro­gramme las­sen sich auf diese Art und Weise auch schnel­ler star­ten. Anstatt auf mei­nem iMac ein Pro­gramm auf­wän­dig im Programme-Verzeichnis zu suchen oder mei­nen Schreib­tisch bzw. mein Dock mit Ver­knüp­fun­gen zu ver­schan­deln, drü­cke ich ein­fach Alt-Space und gebe die ers­ten zwei, drei Buch­sta­ben des zu star­ten­den Pro­gramms ein. Im Regel­fall genügt ein Druck auf die Enter­taste, das gewünschte Pro­gramm star­tet. Für Linux gibt es ähn­li­che Lösun­gen, unter Win­dows kann man die ein­ge­baute Such­box im Start­menü nut­zen (Druck auf die Windows-Taste, tip­pen, Enter drücken).

Der Bereich der Medi­en­ver­wal­tung ver­zeich­net ähn­li­che Ten­den­zen. Wenn ich Musik auf mei­nen Rech­ner kopiere, küm­mere ich mich nicht um die Ablage, son­dern schiebe das Ver­zeich­nis ein­fach in iTu­nes. Möchte ich dann mal Musik eines bestimm­ten Inter­pre­ten hören, gebe ich des­sen Namen ein­fach in die Such­box ein. Wenn ich von einer Foto­tour wie­der komme, klemme ich meine Kamera nur an und über­lasse Aper­ture die Ver­wal­tung mei­ner Bild­da­ten. Bin ich der Mei­nung, dass einige Fotos meh­re­ren Alben zuge­ord­net wer­den soll­ten, ist das kein Pro­blem, dop­pelte Daten­men­gen habe ich dadurch nicht.

Natür­lich gibt es nach wie vor wei­ter­hin gute Anwen­dungs­fälle für Ord­ner, im Bereich der eige­nen Daten­ver­wal­tung kann ich aber kei­nen mehr ent­de­cken. Mir ist es herz­lich egal, wo meine Daten lie­gen. Ich brau­che mei­nen Kopf für andere Dinge, mein Com­pu­ter kann das deut­lich besser.

Leider immer noch kein SNI mit Windows XP und dem Internet Explorer

Und wie­der mal bremst Micro­soft das Web aus. Dank der Markt­macht von Micro­soft und der immer noch gigan­ti­schen Ver­brei­tung von Win­dows XP kann ein hoch­gra­dig wich­ti­ges Fea­ture moder­ner Web­ser­ver nicht unein­ge­schränkt ver­wen­det wer­den: SNI.

SNI steht für Ser­ver Name Indi­ca­tion und macht mög­lich, was vor­her nicht mög­lich war. Näm­lich auf einer IP meh­rere SSL-Zertifikate zu ver­wen­den. Gerade heut­zu­tage, in denen IP-Adresse ein knap­pes Gut sind ein nahezu unver­zicht­ba­res Fea­ture. Aber dank Micro­softs Nach­läs­sig­keit für all die­je­ni­gen, die aus wel­chem Grunde auch immer an einer Windows-XP-Maschine mit einem Inter­net Explo­rer, unab­hän­gig von der Ver­sion, sit­zen unzu­gäng­lich. Der Grund hier­für erschliesst sich mir nicht, da alle ande­ren Brow­ser (getes­tet mit Fire­fox 3.6.13, Opera 11.01, Safari 5.0.3, Chrome 9.0.597.98) unter Win­dows XP ein­wand­frei mit­spie­len. Außer­dem liegt der ent­spre­chende Ent­wurf seit 2006, also mitt­ler­weile rund fünf Jah­ren, vor.

Die wei­ter­hin starke Ver­brei­tung von Win­dows XP und des Inter­net Explo­rers macht es zu einer Grat­wan­de­rung, SNI tat­säch­lich im Pro­duk­tiv­ein­satz zu betrei­ben. Nutz­bar ist die Tech­no­lo­gie dann, wenn man maß­geb­li­chen Ein­fluss auf die Arbeits­um­ge­bung derer hat, die die SSL-gesicherte Ver­bin­dung tat­säch­lich nut­zen sol­len. Möchte man aber einen klei­nen Online­shop betrei­ben, für den sich SSL nahezu auf­drängt, kann man die IP-Adressen-sparende Vari­ante SNI von vorn­her­ein aus­schlies­sen, da man sich durch die Ver­wen­dung die­ser Tech­no­lo­gie gegen alle Internet-Explorer-nutzende Windows-XP-Benutzer aus­spricht. Eine ent­spre­chende Abfrage des Cli­ents vor Auf­nahme der Ver­bin­dung ist zwar mög­lich, aber was möchte man mit den Inter­net Explor­ern machen? Sie auf eine unge­si­cherte Ver­bin­dung wei­ter­lei­ten? Eine Warn­mel­dung aus­ge­ben las­sen? Bei­des ist eigent­lich nicht erstre­bens­wert. Es bleibt also wie­der nur die alte Methode, ein Zer­ti­fi­kat pro IP-Adresse zu verwenden.

Wie schon ein­gangs erwähnt, mal wie­der ist Micro­soft eine brem­sende Kraft beim Fort­schritt im Web. Wie sie es schon seit Jah­ren sind, spä­tes­tens näm­lich seit­dem der Inter­net Explo­rer 6 als ver­al­tet gilt, was seit nun­mehr bestimmt sie­ben Jah­ren der Fall ist…

Fehlende Autovervollständigung in OpenVZ-Containern

Aus einem mir nicht so wirk­lich ersicht­li­chen Grunde ist in den OpenVZ-Templates von Debian und Ubuntu (die ande­ren habe ich noch nicht getes­tet) die bash-autocompletion deak­ti­viert. Gerade wer viel mit apti­tude oder des­sen Bru­der apt-get arbei­tet, wird diese Auto­ver­voll­stän­di­gung aber schmerz­lich vermissen.

Akti­viert wird sie wie folgt:

In der Datei /etc/bash.bashrc müs­sen die fol­gen­den Zei­len ohne die Kom­men­tar­zei­chen (aus­ge­nom­men von der ers­ten Zeile, die ist näm­lich tat­säch­lich ein Kom­men­tar) stehen:

# enable bash completion in interactive shellsif [ -f /etc/bash_completion ]; then    . /etc/bash_completionfi

Das Paket bash-autocompletion muss instal­liert sein:

sudo aptitude install bash-autocompletion

Beim nächs­ten Anmel­den soll­ten die Auto­ver­voll­stän­di­gun­gen nun funk­tio­nie­ren. In mei­nen Tests hat das sowohl bei Debian 5.0 als auch Ubuntu 10.04 funktioniert.

Rails 3 liefert 0 Byte große Dateien aus

Rails-3-Anwendungen in Ver­bin­dung mit Nginx lie­fern 0 Byte große Dateien aus. Um das zu ver­hin­dern, muss in der config/environments/production.rb die ent­spre­chend gekenn­zeich­nete Zeile akti­viert werden:

# For nginx:config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'

Nach einem Neu­start der Anwen­dung soll­ten die Dateien kor­rekt an euren Brow­ser gelie­fert werden.

Quelle: http://stackoverflow.com/questions/3724853/rails-sends-0-byte-files-using-sen…

Duplikate aus einer PostgreSQL-Datenbank sicher entfernen

Kleine Notiz, auch für mich selbst. Wer aus einer PostgreSQL-Datenbank mal flott alle Dupli­kate löschen möchte, kann wie folgt vorgehen:

DELETEFROM    tabellennameWHERE   feldmituniquekey NOT IN  (SELECT   MAX(dup.feldmituniquekey)  FROM      tabellenname As dup  GROUP BY  dup.doppeltezeile1, dup.doppeltezeile2, dup.doppeltezeile3, dup.doppeltezeile4);

Die Anzahl der GROUP-BY-Felder kann belie­big erwei­tert wer­den, um das ver­se­hent­li­che Löschen von teil­weise iden­ti­schen Daten­sät­zen zu verhindern.

Drei PPAs für den modernen Mann

Um die Vor­teile eines LTS-Release von Ubuntu (aktu­ell 10.04.2) wei­ter­hin genie­ßen zu kön­nen, ohne auf aktu­elle Soft­ware ver­zich­ten zu müs­sen, gibt es unter Ubuntu die so genann­ten PPAs, Per­so­nal Package Archi­ves. Das sind sepa­rate Repo­sito­rys, mit denen man sein Ubuntu füt­tern kann um Pakete über die Paket­ver­wal­tung zu instal­lie­ren, die aus irgend­ei­nem Grunde noch kei­nen Weg in die offi­zi­el­len Repo­sito­rys der Dis­tri­bu­tion gefun­den haben. Cano­ni­cal ver­folgt die Phi­lo­so­phie, inner­halb eines Release keine Ver­si­ons­sprünge der ursprüng­lich aus­ge­lie­fer­ten Soft­ware mit­zu­ma­chen. Was sehr schade ist, hängt man doch so auf Post­greSQL 8.4, Git 1.7 und Nginx 0.7 fest. Dank eini­ger fleis­si­ger Paket­schnü­rer gibt es aber PPAs, die genau diese Pro­bleme behe­ben. Da ich alle drei zuvor genann­ten Anwendungen/Dienste regel­mä­ßig und auf ver­schie­de­nen Ser­vern nutze, habe ich mir dafür ent­spre­chende PPAs rausgesucht.

Um PPAs zum Sys­tem hin­zu­zu­fü­gen, bie­tet sich das Kom­mando add-apt-repository an. Sollte das Kom­mando nicht gefun­den wer­den kön­nen, leis­tet fol­gen­der Befehl Abhilfe:

sudo aptitude install python-software-properties

Die­ses Kom­mando fügt das Repo­sitory zur Apt-Sources-Liste hinzu und impor­tiert gleich den pas­sen­den GPG-Schlüssel.

Fügen wir nun nach­ein­an­der die drei zuvor erwähn­ten PPAs hinzu:

sudo add-apt-repository ppa:nginx/stablesudo add-apt-repository ppa:git-core/ppasudo add-apt-repository ppa:pitti/postgresql

Ein abschlie­ßen­des sudo aptitude update nicht ver­ges­sen und schon sind die aktu­el­len Ver­sio­nen von Nginx, Git und Post­greSQL via apt/aptitude verfügbar.

Rails-Anwendung auf https umleiten

Immer wie­der stehe ich vor dem glei­chen Pro­blem, der Blog­bei­trag soll also auch gleich­zei­tig als Gedächt­nis­stütze für mich dienen.

Für mein Stan­dard­setup ver­wende ich als Web­ser­ver nginx (Anzahl Worker = Anzahl Cores), als Rails-Applicationserver kommt thin mit zwei Workern zum Ein­satz. Eine Stan­dard­kon­fi­gu­ra­tion könnte nun bei­spiels­weise so aussehen:

# /etc/nginx/sites-available/my-site.deupstream my-site {  server   unix:/tmp/thin.my-site.0.sock;  server   unix:/tmp/thin.my-site.1.sock;}server {  listen   80;  server_name my-site.de www.my-site.de;  access_log /var/www/my-site.de/www/logs/access.log;  error_log /var/www/my-site.de/www/logs/error.log;  root   /var/www/my-site.de/www/htdocs/public/;  index  index.html;  location / {    proxy_set_header  X-Real-IP  $remote_addr;    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_set_header  Host $http_host;    proxy_redirect    off;    if (-f $request_filename/index.html) {      rewrite (.*) $1/index.html break;    }    if (-f $request_filename.html) {      rewrite (.*) $1.html break;    }    if (!-f $request_filename) {      proxy_pass http://my-site;      break;    }  }}

In Ver­bin­dung mit die­ser /etc/thin/my-site.yml funk­tio­niert eine Rails-Anwendung auch einwandfrei:

---pid: tmp/pids/thin.pidwait: 30timeout: 30log: log/thin.logmax_conns: 1024require: []environment: productionmax_persistent_conns: 512servers: 2daemonize: truechdir: /var/www/my-site.de/www/htdocssocket: /tmp/thin.sock

Sämt­li­cher Traf­fic läuft bei die­sem Setup unver­schlüs­selt über Port 80, also Standard-http. Wenn man nun aber ein Login, bspw. für ein CMS wie Radi­ant, rea­li­sie­ren möchte, wäre es natür­lich wün­schens­wert, den Traf­fic ver­schlüs­selt über Port 443, also https, lau­fen zu las­sen. Not­wen­dig ist das aber aus mei­ner Sicht nur bei Zugrif­fen auf das Admin-Backend. Im nach­fol­gen­den Setup wer­den sämt­li­che Anfra­gen auf http://www.my-site.de/admin/{IRGENDWAS} auf https://www.my-site.de/admin/{IRGENDWAS} umge­lei­tet. Requests auf die Web­site selbst blei­ben von der Umlei­tung also unberührt.

# /etc/nginx/sites-available/my-site.deupstream my-site {  server   unix:/tmp/thin.my-site.0.sock;  server   unix:/tmp/thin.my-site.1.sock;}server {  listen   80;  server_name my-site.de www.my-site.de;  access_log /var/www/my-site.de/www/logs/access.log;  error_log /var/www/my-site.de/www/logs/error.log;  root   /var/www/my-site.de/www/htdocs/public/;  index  index.html;  rewrite ^/admin/(.*) https://www.my-site.de/admin/$1 permanent; # Rewrite-Regel für die Umleitung aller Anfragen auf /admin  location / {    proxy_set_header  X-Real-IP  $remote_addr;    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_set_header  Host $http_host;    proxy_redirect    off;    if (-f $request_filename/index.html) {      rewrite (.*) $1/index.html break;    }    if (-f $request_filename.html) {      rewrite (.*) $1.html break;    }    if (!-f $request_filename) {      proxy_pass http://my-site;      break;    }  }}server {  listen 443;  server_name my-site.de www.my-site.de;  ssl                 on;  ssl_certificate     /etc/ssl/certs/startssl.crt;  ssl_certificate_key /etc/ssl/private/startssl.key;  ssl_ciphers         ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM;  ssl_protocols       SSLv3 TLSv1;  access_log /var/www/my-site.de/www/logs/access.log;  error_log /var/www/my-site.de/www/logs/error.log;  root   /var/www/my-site.de/www/htdocs/public/;  index  index.html;  location / {    proxy_set_header  X-FORWARDED_PROTO https;    proxy_set_header  X-Real-IP  $remote_addr;    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_set_header  Host $http_host;    proxy_redirect    off;    if (-f $request_filename/index.html) {      rewrite (.*) $1/index.html break;    }    if (-f $request_filename.html) {      rewrite (.*) $1.html break;    }    if (!-f $request_filename) {      proxy_pass http://my-site;      break;    }  }}

Meine Zer­ti­fi­kate beziehe ich übri­gens zumeist von StartSSL. Die Zer­ti­fi­kate kos­ten nichts und wer­den trotz­dem von allen aktu­el­len Brow­sern akzep­tiert. Nur den grü­nen Hin­ter­grund bekommt man mit die­sem Zer­ti­fi­kat nicht, was ich per­sön­lich aber als unkri­tisch ein­stufe. Googles Chrome wird der­zeit aber lei­der nicht für die Erstel­lung der Zer­ti­fi­kate unter­stützt, mit der aktu­el­len Ver­sion von App­les Safari geht’s aber einwandfrei.

Kurz noch zur Erklä­rung, wieso nginx und thin:

  • nginx ziehe ich Apa­che vor, weil er deut­lich schlan­ker und per­for­man­ter ist. Für PHP-Setups ver­wende ich zumeist wei­ter­hin den Apa­che, weil die­ser sich deut­lich ein­fa­cher mit PHP auf­set­zen lässt, als dies mit nginx der Fall ist.
  • thin ist extrem ein­fach auf­zu­set­zen, ein­fa­cher als Uni­corn oder mongrel_cluster, die im End­ef­fekt genau das Glei­che tun. Und dank der Fähig­keit von thin, auch als UNIX-Socket zu lau­fen, ist er auch extrem schnell.

Von Fall zu Fall mag die Eig­nung der Alter­na­ti­ven eher gege­ben sein, ich habe aber ziem­lich gute Erfah­run­gen mit die­sem Setup gemacht. Es ist ein­fach zu admi­nis­trie­ren und äußerst performant.

Ein klei­ner Tipp noch zum Schluss. Um sowohl thin als auch nginx in den aktu­el­len Ver­sio­nen zu fah­ren, benutze ich fol­gende Wege der Installation:

nginx instal­liere ich über das eigens dafür bereit­ge­stellte PPA, wel­ches wie folgt in Ubuntu 10.04 LTS oder neuer ein­ge­bun­den wer­den kann:

nginx=stable # use nginx=development for latest development versionsudo su -add-apt-repository ppa:nginx/$nginxapt-get update apt-get install nginx

thin instal­liere ich aus den Ruby-Gems her­aus und nutze dann den kom­for­ta­blen Instal­ler, den die Jungs mitliefern:

sudo gem install thinsudo thin installsudo /usr/sbin/update-rc.d -f thin defaults

Um die Anwen­dungs­um­ge­bun­gen nicht hän­disch erstel­len zu müs­sen, kann man das thin-Kommando benutzen:

sudo thin config -C /etc/thin/my-site.yml -c /var/www/my-site.de/www/htdocs --servers 2 -socket /tmp/thin.my-site.sock -e production

Die­ser Befehl erstellt eine Kon­fi­gu­ra­ti­ons­da­tei für thin, wie sie wei­ter oben zu sehen ist.