read

In diesem kleinen Tutorial geht es darum, wie man seinen Server per SSH administrieren kann, bzw. per Capistrano deployed.

Inspiriert dadurch, dass Dennis für sein Ausbildungsprojekt seine Webseiten bei all-Inkl per Capistrano „deployed”, wollte ich mir dieses System auch für meine eigenen Webseiten einrichten.

Bei empuxa nutzen wir Gitolite zur einfachen Administration der Repositories und schieben diese dann per Capistrano auf die entsprechenden Server. Das ist unglaublich bequem, spart viel Zeit und Energie und ist nicht so fehleranfällig wie das händische Hochladen per FTP. Passt man dann noch die Konfigurationsdateien entsprechend an, dann kann man auch direkt Dateien komprimieren etc.

1. Vorbereitung

Der SSH-Zugang ist bei all-inkl leider erst ab dem Premiumpaket möglich. Hat man dieses gebucht, so muss im KAS für jeden Account einzeln die SSH-Verbindung aktiviert werden. Die Bereitstellung dauert in der Regel nur ein paar Minuten und dann kann losgelegt werden.

2. Konfiguration SSH

Update: Mittlerweile kann man die Keys direkt im kasserver-System hinterlegen. Der Zugriff via Terminal auf den Server ist nicht mehr nötig.

Wie auf all-Inkl beschrieben, loggen wir uns zuerst mit unserem eben erstellten Nutzer und unserem Passwort ein. Die (erste und hoffentlich letzte) Passwortabfrage erfolgt nach Eingabe des folgenden Kommandos:

ssh ssh-w00000x@domain.com

Jeder, der bereits einen SSH Public Key besitzt, sollte diesen nun der Einfachheit halber auf dem Server ablegen. Wir erstellen also erst einmal eine entsprechende Datei:

cd ~
cd .ssh
touch authorized_keys

Anschließend fügt man seinen eigenen Key mit dem Texteditor seiner Wahl ein. Ich benutze Nano für solche Aktionen.

nano authorized_keys

Ist der Code eingefügt kann man sich in Zukunft einfach ohne die Passwortabfrage einloggen.

3. Einrichtung von Git

Bevor auf dem Server Git initialisiert wird, sollte man zuerst eine gute Struktur schaffen. Ich habe mich dazu entschieden, die Repositories in mein Root-Verzeichnis zu legen. All-inkl warnt mich zwar, dass alle meine Daten flöten gehen könnten, da ich jedoch keinen Serverumzug plane und auch hoffe, dass sie das nicht so einfach tun werden, probiere ich es einfach mal aus. Für Erfahrungen und Anregungen wäre ich sehr dankbar.

Im ersten Schritt muss das Git-Verzeichnis angelegt werden:

cd ~
git init --bare VERZEICHNISNAME.git

Nachdem wir das Verzeichnis nun auf dem Server erstellt haben, müssen wir dieses noch lokal initialisieren. Dazu wechseln wir in unseren gewünschten Ordner und geben folgendes ein:

git init
git add *
git commit -m 'First commit'
git remote add origin ssh-w00000x@domain.com:VERZEICHNISNAME.git
git push -u origin master

Git ist nun voll funktionsfähig.

4. Einrichtung Capistrano

Anmerkung: Dieser Artikel bezieht sich auf Version 2!

Capistrano ist in Ruby geschrieben und kann als RubyGem verwendet werden. Alle Informationen zur Installation findet man auf GitHub. Um Capistrano für unser Projekt einzurichten gehen wir in unser lokales Repository und führen folgenden Befehl aus:

capify .

Durch diesen Befehl wurden nun die Datei CAPFILE und ein Ordner names config erstellt. In dem Ordner befindet sich zudem eine weitere Datei mit Namen deploy.rb. Am besten löscht man alle vorhandenen Einträge und gibt folgendes ein:

# Pfad zum Git auf dem Server
set :repository, 'file:///VERZEICHNISNAME.git' 

# Eure Domain
set :domain , 'domain.tld

# SSH-Nutzer
set :user , 'ssh-w00000x' 

# Verwendung von Git
set :scm , 'git'

# All-inkl braucht den Hinweis, dass der Code lokal ist.
set :local_repository, 'file://.' 

# Der Branch, aus dem wir deployen möchten
set :branch , 'master'

# Wir benötigen keinen Sudo-Nutzer – gibt nur Fehler bei all-Inkl
set :use_sudo , false 

# Verzeichnis, in das wir deployen möchten
set :deploy_to, '/www/htdocs/w00000x/'

# Login via SSH-Keys (s.o.)
ssh_options[:forward_agent] = true

# Nur auf diese Seite deployen
role :website, domain, :primary => true

Unsere deploy.rb ist nun soweit vorbereitet. Im nächsten Schritt müssen wir den Server auf das Deployment vorbereiten. Der folgende Befehl übernimmt die Einrichtung auf dem Server:

cap deploy:setup

Auf dem Server erscheinen nun drei Ordner im Zielordner: current, shared und releases. Um nun den Code auf unseren Server zu laden müssen wir nur noch folgenden Befehl ausführen:

cap deploy

Unsere Webseite ist nun unter domain.tld/current in der neusten Version erreichbar. Da ich persönlich URLs in diesem Format nicht mag, habe ich mich erneut ins KAS eingeloggt und verweise die Domains direkt auf das Verzeichnis current. So habe ich nun immer den neusten Stand meiner Software erreichbar und der eigentliche Benutzer sieht keinen Unterschied.

Danke an Dennis für viele Infos!

Marco Raddatz

Marco Raddatz

Published

Image
Marco Raddatz #TechnicalProjectManagement #SoftwareDevelopment #Berlin Back to Overview