Kategorien
Backup Server Verschlüsselung

Ein Backup mit Duply

Backup ist so ein Thema, dass man in seiner Vollständigkeit versteht, wenn man kein Backup hat oder es nicht möglich ist, das vorhandene Backup wiederherzustellen. Es gibt zahlreiche Lösungsansätze fuer das Backup/Restore Szenario.

Beispielsweise gibt es für die meisten Content Management Systeme Erweiterungen, die ein Datei- und ein Datenbank Backup auf dem Root-Server erzeugen und danach auf ein Ziel Ihrer Wahl übertragen (z.B. Drupal Backup & Migrate oder WordPress UpdraftPlus Backup and Restoration). Bis zu einem gewissen Umfang (der schwer errechenbar ist, weil er von so vielen Parametern abhängt) klappt das auch gut und zuverlässig.

Das Backup der Datenbank (Dump) funktioniert meist reibungsloser als das der Dateien. Datenbanken sind komprimiert erheblich kleiner als tausende von PDF oder JPG-Dateien, daher kann es bei den Dateien ab einem gewissen Umfang kompliziert werden. Sie werden normalerweise komprimiert und dann als zip oder tar.gz Archiv auf das Ziel übertragen. Alle paar Tage wird ein Vollbackup erzeugt und dazwischen inkrementelle Backups. Die Komprimiererei bei einem Voll-Backup kann auch einen Root-Server schnell an den Rand der Leistungsfähigkeit bringen und für locker mal 30 Minuten beschäftigen. Abhängig von der sonstigen Konfiguration des Systems kann das bedeuten, das manche Services in dieser Zeit sehr langsam laufen. Was aber viel wichtiger ist: Die Backups sind normalerweise nicht verschlüsselt. Genau an dieser Stelle kommt Duply ins Spiel.

Was ist Duply?

Zunächst gibt es das Backup Programm Duplicity. Duplicity ist ein

Encrypted bandwidth-efficient backup using the rsync algorithm

Das hört sich gut an. Es nutzt den rsync Algorithmus, erstellt inkrementelle Backups und das auch noch verschluesselt. Leider ist es etwas aufwendig zu konfigurieren, so dass die Zeitschrift Ct im Jahr 2006 das Script ftplicity schrieb und die Bedienung damit erleichterte (Ct – Hinter Schloss und Siegel).

Aus ftplicity entwickelte sich Duply, ein in der Programmiersprache Python geschriebenes Skript, das die Nutzung von Duplicity vereinfacht.

Beispiel

Nehmen wir an, sie haben viele virtuelle Server auf Ihrem Root-Server. Jeder soll ein eigenes Datei-Backup des Dokumentenverzeichnisses erhalten. Das Backup soll auf einen FTP Server übertragen werden und verschluesselt sein. Wir haben die FTP Zugangsdaten fuer den Ziel-Server und den Pfad des zu sichernden Verzeichnisses auf unserem Root-Server. Es soll alle 7 Tage ein Vollbackup erstellt werden und dazwischen 7 inkrementelle Backups. Eine Wiederherstellung der Dateien in einem anderen Verzeichnis soll möglich sein. Auf dem Root-Server läuft Ubuntu 14.04.

Installation

Wir benötigen zunächst das Paket Duplicity und einen FTPclient (ncFTP), der dann den eigentlich Dateitransfer übernimmt.

apt-get install duplicity ncftp

Erstes Backup

Sie können nun bereits ein Backup erstellen und per FTP übertragen. Den folgenden Befehl müssen Sie nur mit Ihren Zugangsdaten füllen und abschicken.

FTP_PASSWORD=[FTP-Passwort] duplicity [zu-sicherndes-Verzeichnis] ftp://[FTP-User]@[FTP-Host]/[Verzeichnis]

Nach dem Absenden werden Sie nach einem Passwort gefragt. Geben Sie ein beliebiges Passwort ein und merken es sich, Sie benötigen es bei der Wiederherstellung der Daten wieder.

root@server1:~# FTP_PASSWORD=*** duplicity /var/www/piwik.serverblogger.ch ftp://****@****/****
NcFTP version is 3.2.5
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
GnuPG passphrase:
Retype passphrase to confirm:
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1420383883.70 (Sun Jan  4 16:04:43 2015)
EndTime 1420383889.16 (Sun Jan  4 16:04:49 2015)
ElapsedTime 5.46 (5.46 seconds)
SourceFiles 7119
SourceFileSize 41831081 (39.9 MB)
NewFiles 7119
NewFileSize 41831081 (39.9 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 7119
RawDeltaSize 38427305 (36.6 MB)
TotalDestinationSizeChange 11915629 (11.4 MB)
Errors 0
-------------------------------------------------

root@server1:~#

Herzlichen Glückwunsch, auf der Ziel FTP-Seite sind tatsächlich Dateien angekommen – Ein erstes Backup!

Sicherungsdateien von Duplicity
Sicherungsdateien von Duplicity
Auf der Handbuchseite man duplicity sehen Sie zahlreiche Parameter, mit denen Sie Ihr Backup verfeinern koennen und bekommen eine Ahnung von der Komplexität des Programms.

Wiederherstellung des Backups (restore)

Nachdem das mit dem Backup recht einfach ging, wollen wir die Daten in einem anderen Verzeichnis wiederherstellen.

FTP_PASSWORD=[FTP-Passwort] duplicity ftp://[FTP-User]@[FTP-Host]/[Verzeichnis] [restore-Verzeichnis]

root@server1:~/backup# FTP_PASSWORD=**** duplicity  ftp://****@****/****/backup /root/backup/test
NcFTP version is 3.2.5
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Sun Jan  4 16:04:38 2015
GnuPG passphrase:
root@server1:~/backup# cd test
root@server1:~/backup/test# ls
logs  public_html

Nach Eingabe des richtigen Passworts wird das Verzeichnis test erstellt und die gesicherten Daten dort wiederhergestellt. Das funktioniert alles sehr schnell und elegant, nun wollen wir es mit Duply automatisieren.

Automatisierung der Backups mit Duply

Bevor wir Duply installieren muss die Sache mit der Passworteingabe automatisiert werden. Dazu erstellen wir uns Schlüssel mit dem Befehl.

gpg --gen-key

Es folgt ein Dialog

root@server1:# gpg --gen-key
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Waehlen Sie DSA and Elgamal aus

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 2

Die Schlüssellaenge von 2048 koennen Sie uebernehmen

DSA keys may be between 1024 and 3072 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits

Der Schlüssel soll nicht verfallen

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all

Antworten Sie mit y

Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Hagen Graf
Email address: hagen@novatrend.ch
Comment: Serverblogger Test
You selected this USER-ID:
    "Hagen Graf (Serverblogger Test) <hagen@novatrend.ch>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.

Geben Sie an dieser Stelle wieder Ihr Passwort ein und merken es sich. Dieses Passwort brauchen Sie später in der Duply Konfigurationsdatei. Die nächste Meldung bezieht sich auf einen gpg-agent, der beim Start einer Session die Passphrase abfragt und zur Verfügung stellt. Dieser gpg-agent ist nicht installiert und daher kommt diese Meldung. Sie können sie ignorieren.

gpg: gpg-agent is not available in this session

Jetzt startet die Schlüsselerzeugung.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: WARNING: some OpenPGP programs can't handle a DSA key with this digest size
+++++...+++++....+++++.++++++++++++++++++++++++++++++.+++++++++++++++..+++++.....+++++++++++++++.+++++.+++++....+++++.++++++++++.+++++.++++++++++....+++++++++++++++>+++++................>+++++..................................................................................................+++++

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 288 more bytes)

In meinem Fall brach die Schlüsselerzeugung nach kurzer Zeit ab, weil nicht genug „entropy“ (Zufall) im System vorhanden war. Um die Entropie zu erhoehen, müssen Sie ihr System beschaftigen. Es gibt unterschiedliche Ansaetze (Beispiel). Ich habe es zuerst mit der mehrfachen Ausfuehrung des Befehls ls / -R probiert. Der Screenshot zeigt eine Shell mit der Schlüsselgenerierung, die Shell oben rechts zeigt die Entropie an, unten rechts wird das System beschäftigt.

Entropie erhöhen
Entropie erhöhen
Nach ein paar Minuten erfolgloser Beschäftigung habe ich dann das Paket stress installiert (apt-get install stress) und mit dem Befehl stress -c 4 -m 2 -d 1 -t 40s vierzig Sekunden „Stress“ in CPU, Hauptpeicher und auf der Festplatte erzeugt (Stress Test Your Ubuntu Computer with ‘Stress’).

Die Schlüsselerzeugung ging daraufhin weiter.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++.+++++++++++++++.+++++++++++++++.+++++.++++++++++++++++++++.+++++..++++++++++++++++++++>++++++++++>+++++...............................................................................+++++^^^
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key ******* marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048D/6986FD72 2015-01-04
      Key fingerprint = 43C1 DA7D 7CAE A2BC 34CF  6665 BB91 22E0 6986 FD72
uid                  Hagen Graf (Serverblogger Test) <hagen@novatrend.ch>
sub   2048g/27AC130F 2015-01-04

Merken Sie sich den Key, der im gelb markierten Bereich steht.

wget http://downloads.sourceforge.net/project/ftplicity/duply%20%28simple%20duplicity%29/1.9.x/duply_1.9.1.tgz
tar xvfz duply_1.9.1.tgz
cp duply_1.9.1/duply /usr/local/bin

Nun müssen Sie ein Profil erstellen.

duply [name-des-profils] create

Ich möchte wieder die Piwik Installation sichern und geben folgendes ein

root@server1:~# duply piwik.serverblogger.ch create

Congratulations. You just created the profile 'piwik.serverblogger.ch'.
The initial config file has been created as
'/root/.duply/piwik.serverblogger.ch/conf'.
You should now adjust this config file to your needs.

Sie müssen nun die Konfigurationsdatei bearbeiten

nano /root/.duply/piwik.serverblogger.ch/conf

Diese Werte müssen Sie anpassen

GPG_KEY='*****' // Der gelb markierte Key von oben
GPG_PW='*****' // ihr Passwort bei der key-Erzeugung
TARGET='ftp://****@****/****/****'  // FTP Zugangsdaten
TARGET_PASS='*****' // FTP Passwort
SOURCE='/var/www/piwik.serverblogger.ch' // zu sichernden Verzeichnis
MAX_AGE=1M // Nach 1 Monat werden alle aelteren Backups geloescht
TEMP_DIR=/tmp // Das temporaere Verzeichnis

OPTIONAL

Wenn Sie die Datenbank (MySQL Dump) mit sichern wollen, können Sie sich eine Datei mit dem Namen pre anlegen

/root/.duply/piwik.serverblogger.ch/pre

Inhalt der Datei

mysqldump -u [Benutzername] -p[Passwort] piwik > piwik.sql

Backup mit Duply

Mit dem Befehl duply [profilname] backup koennen Sie nun ein Backup ausühren. In meinem Fall

duply piwik.serverblogger.ch backup

Ein Vollbackup wird mit full aufgerufen

duply piwik.serverblogger.ch full

Ein inkrementelles Backup mit incr

duply piwik.serverblogger.ch incr

Sie sollten nun nicht nach einem Passwort gefragt werden! Mit duply -h können Sie sich die Hilfeseite anzeigen lassen.

Automatisierung

Der letzte Schritt ist nun der Eintrag in der Crontab um den Backup Befehl regelmässig auszuführen.

crontab -e

Sonntags um 0:00 wird ein volles Backup erstellt und alte Backups gelöscht. Von Montag bis Samstag wird jeweils um 0:00 Uhr ein inkrementelles Backup durchgeführt.

# do a full backup on sunday  & delete old backups

0 0 * * 7 /usr/bin/duply /root/.duply/piwik.serverblogger.ch full_verify_purge --force

# run the incremental backup each night at 00:00h

0 0 * * 1-6 /usr/bin/duply /root/.duply/piwik.serverblogger.ch incr

Restore mit Duply

Die Wiederherstellung funktioniert ebenso einfach wie das Backup

duply [Profilname] restore [Zielverzeichnis]

Andere Plattformen

Mit Duplicity und Duply können Sie auf auf andere Ziele sichern, beispielsweise S3 Amazon Web Services, Google Cloud Storage, Rackspace Open Cloud, und Dropbox.


tl;dr: Backups sind hilfreich und nicht schwer!

Kategorien
Messenger

Messenger – Schnell, Einfach, Sicher – IRC

In Zeiten von Facebook, WhatsApp, Telegram, Threema und vielen anderen Messaging Services stellt sich für Firmen und grössere Gruppen von Menschen die Frage, wie man denn nun am Besten ohne einen fremd verwalteten Server miteinander textbasiert kommunizieren kann.

Wie realisiert man textbasierte Kommunikation in einem Unternehmen, die auf allen Endgeräten funktioniert, wenig Ressourcen verbraucht und auch noch einigermassen „sicher“ ist? Die wohl älteste, aber nach wie vor funktionierende Variante ist der Interlay Relay Chat (IRC). Ursprünglich wurde der Relay Chat Anfang der achtziger Jahre im BITNET (Because It’s Time NETwork) genutzt. 1988 wurde das Prinzip durch den finnischen Studenten Jarkko Oikarinen auf das Internet übertragen.

Wenn Sie noch nie etwas von IRC gehört haben, schauen Sie sich New User Introduction auf irchelp.org an. Ein guter Anfang auf Deutsch ist Internet Relay Chat – Eine möglichst kurze Einführung von Kai ‚Oswald‘ Seidler.

Grundsätzlich benötigen Sie einen IRC-Client und einen IRC-Server. Der IRC-Client läuft auf Ihrem Endgerät, der IRC-Server ist entweder öffentlich zugänglich und wird von „jemandem“ betrieben.

Sie können sich aber auch Ihren eigenen IRC-Server auf Ihrem Root-Server installieren und darüber völlig autark passwortgeschützt und verschlüsselt kommunizieren. In diesem Artikel werden wir den UnrealIRC Server instalieren und über verschiedene Clients damit Kontakt aufnehmen.

IRC Server

Die Konfiguration von IRC Servern wie ratbox, die als Installationspaket für Ubuntu vorliegen ist ziemlich aufwändig, daher verwende ich in diesem Beispiel den Unreal IRC Server. Die Installation und Konfiguration ist recht überschaubar.

Installation

Ich lade die Dateien in das Verzeichnis /home/novatrend

Download des Quellcodes

wget https://www.unrealircd.org/downloads/Unreal3.2.10.4.tar.gz

Auspacken des Pakets

tar xfz Unreal3.2.10.4.tar.gz

Dann in das Verzeichnis wechseln und mit ./Config das Konfigurationsprogramm aufrufen.

novatrend@server1:~/Unreal3.2.10.4$ ./Config

Die meisten Fragen können mit der Entertaste und dem vorgeschlagenen Wert beantwortet werden

What directory are all the server configuration files in?
[/home/novatrend/Unreal3.2.10.4] ->

What is the path to the ircd binary including the name of the binary?
[/home/novatrend/Unreal3.2.10.4/src/ircd] ->

What should the default permissions for your configuration files be? (Set this to 0 to disable)
It is strongly recommended that you use 0600 to prevent unwanted reading of the file
[0600] ->

Wenn der Chat verschlüsselt sein soll müssen sie hier Yes eingeben

Do you want to support SSL (Secure Sockets Layer) connections?
[No] -> YES

Die nächste Frage können Sie mit Enter bestätigen. Die OpenSSL Library wird unter Ubuntu 14.04. automatisch gefunden

If you know the path to OpenSSL on your system, enter it here. If not
leave this blank (in most cases it will be detected automatically).
[] ->

Auch bei den weitere Fragen können Sie die Standardwerte übernehmen. Sie können im weiteren Verlauf der Installation auch ein Zertifikat erzeugen, falls Sie noch keins haben.

_______________________________________________________________________
|                                                                       |
|                    UnrealIRCd Compile-Time Config                     |
|_______________________________________________________________________|
|_______________________________________________________________________|
|                                                                       |
| Now all you have to do is type 'make' and let it compile. When that's |
| done, you will receive other instructions on what to do next.         |
|                                                                       |
|_______________________________________________________________________|
|_______________________________________________________________________|
|                        - The UnrealIRCd Team -                        |
|                                                                       |
| * Syzop     syzop@unrealircd.com                                      |
|_______________________________________________________________________|

Wenn diese Meldung erscheint ist die Konfiguration beendet und Sie müssen mit dem make Kommando die eigentliche Kompilierung starten

novatrend@server1:~/Unreal3.2.10.4$ make
...
__________________________________________________
| Compile is now complete.                         |
| You should now read the documentation and learn  |
| how to configure your IRCd.                      |
|                                                  |
| If you really like UnrealIRCd, and would like to |
| make a donation, please read the Donation file in|
| this archive. :)                                 |
|                                                  |
| Thanks for using Unreal IRCd! If you are in need |
| for any kind of help regarding the IRCd please   |
| read the Unreal.nfo file.                        |
|__________________________________________________|
novatrend@server1:~/Unreal3.2.10.4$

Der IRC Server ist nun auf Ihrem Root-Server installiert.

Konfiguration

Der IRC Server benötigt eine Konfigurationsdatei. Im /doc Vereichnis finden Sie Beispieldateien in mehreren Sprachen.

novatrend@server1:~/Unreal3.2.10.4/doc$ ls -l
total 1996
-rw-r--r-- 1 novatrend novatrend  20342 Jul 26 17:42 example.conf
-rw-r--r-- 1 novatrend novatrend  20414 Jul 26 17:42 example.de.conf
-rw-r--r-- 1 novatrend novatrend  22535 Jul 26 17:42 example.es.conf
-rw-r--r-- 1 novatrend novatrend  23120 Jul 26 17:42 example.fr.conf
-rw-r--r-- 1 novatrend novatrend  23117 Jul 26 17:42 example.hu.conf
-rw-r--r-- 1 novatrend novatrend  19916 Jul 26 17:42 example.nl.conf
-rw-r--r-- 1 novatrend novatrend  21650 Jul 26 17:42 example.ru.conf
-rw-r--r-- 1 novatrend novatrend  21524 Jul 26 17:42 example.tr.conf

Ich nehme die Datei example.de.conf und kopiere Sie in das /Unreal3.2.10.4 Verzeichnis. Der Name muss unrealircd.conf sein

nano unrealircd.conf

Ein Konfigurationsbeispiel finden Sie hier unter http://irc-guide.de/wiki/Main/UnrealIRCdBeispielkonfigurationsdatei.

Die Konfigurationsdatei ist sehr gut kommentiert (und sehr lang). Hier die Änderungen, die ich vergenommen habe:

Kommentieren Sie diese beiden Zeilen aus

/* FUER *NIX (Unix, Linux, Xenix etc.), sind diese 2 Zeilen auszukommentieren: */
loadmodule "src/modules/commands.so";
loadmodule "src/modules/cloak.so";

Geben Sie dem Server einen Namen

me
{
        name "irc.serverblogger.ch";
        info "Serverblogger Server";
        numeric 1;
};

Legen Sie den Admin fest

admin {
        "Hagen Graf";
        "hagen";
        "hagen@novatrend.ch";
};

Legen Sie ein Passwort fest

allow {
        ip             *@*;
        hostname       *@*;
        class           clients;
        password "geheimespasswort"
        maxperip 5;
};

Legen Sie Channel fest

allow   channel {
        channel "#serverblogger-chat";
        channel "#raum1";
        channel "#raum2";
        channel "#raum3";
};

Verhindern Sie, dass Channel angelegt werden

deny channel {
        channel "*";
        reason "Es gibt schon vier Raeume :) ";
};

Netzwerk Konfiguration

set {
    network-name            "IRC";
    default-server          "serverblogger.ch";
    services-server         "serverblogger.ch";
    stats-server            "serverblogger.ch";
    ...
    cloak-keys {
                "aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
                "Key eingeben";
                "Key eingeben";
     };

}

Lesen Sie die restlichen Einstellungen und speichern die Datei ab. Im gleichen Verzeichnis können Sie noch die Willkommensdateien motd.conf und rules.conf erstellen um eine Willkommensnachricht auf dem Client anzuzeigen.

Starten und stoppen können Sie den IRC Server nun mit den Befehlen

./unreal start

und

./unreal stop

IRC Clients

Es gibt ein grosses Angebot für IRC-Clients auf allen denkbaren Plattformen. Hier ein paar Beispiele mit dem gerade aufgesetzten irc.serverblogger.ch Server.

Lime (OSX)

http://limechat.net/mac/

Konfiguration Lime IRC Client
Konfiguration Lime IRC Client
Chat Fenster Lime IRC Client
Chat Fenster Lime IRC Client

AndroIRC (Android)

http://www.androirc.com/

AndroIRC Chatfenster
AndroIRC Chatfenster

Adium (OSX)

https://adium.im/

Adium Chat Client
Adium Chat Client

tl;dr: Der Internet Relay Chat ist eine schnelle, einfache und sichere Alternative zu proprietären Messenger Systemen.

Kategorien
Frameworks

Konzentrieren Sie sich auf das Wesentliche – Hoodie

Im Blogeintrag über das Ghost Projekt habe ich die Installation von Node.js bereits gezeigt. In diesem Blogeintrag möchte ich Ihnen zeigen, wie Sie Ihren Root-Server zu einen Backend Service machen, der es Ihnen ermöglicht, offline Anwendungen zu erstellen.

Bevor wir uns der Frage widmen, was ein Backend Service für offline Anwendungen überhaupt ist, schauen Sie bitte kurz auf die Website http://minutes.io und erstellen Sie dort ein Protokoll einer Besprechung.

minutes.io
minutes.io
Vermutlich sind Sie von der Einfachheit und Effektivität der Anwendung fasziniert.

Und vermutlich fallen Ihnen sofort weitere Aufgaben ein, die auch so einfach sein sollen.

Das Hoodie Team benutzt intern beispielsweise so eine Anwendung für die Erstellung Ihrer Roadmap (http://gr2m.github.io/milestones/)

Hoodie Milestones
Hoodie Milestones
Weitere Beispiele finden Sie hier.

No Backend & offline first

Wenn Sie Anwendungen wie die beiden Beispiele mit herkömmlichen Methoden und Tools erstellen wollen, so benötigen Sie dafür mindestens Kenntnisse von HTML, CSS, JavaScript, Skriptsprachen wie PHP, Datenbanken wie MySQL, Webserver wie Apache und natürlich ein Betriebssystem wie Linux. Wenn Sie diese Begriffe in Frontend (Browser) und Backend (Server) aufteilen, dann findet HTML, CSS und JavaScript im Frontend statt und der Rest im Backend. Dieser „Rest“ ist für „Nicht Programmierer“ und „Nicht Administratoren“ unfassbar kompliziert und die Lernkurve sehr hoch. Wer im Schulunterricht HTML lernt und eine Idee für eine Anwendung hat, scheitert bei seiner Arbeit oft am Backend.

Jede einigermassen nützliche Anwendung benötigt diese Features:

  • Benutzerregistrierung
  • Benutzerverwaltung durch einen Administrator
  • Speichern und Laden von Daten
  • Teilen der Data an berechtigte Personen oder mit der Oeffentlichkeit
  • Verschicken von E-Mails
  • Vielleicht etwas bezahlen

Das war vor zehn und mehr Jahren so. Heute kommt hinzu, dass die Anwendung bitte auf jedem Endgerät laufen soll und zwar auch offline. Die Daten werden dann bei erneutem online Zustand gesynct. Die Anwendung minutes.io kann das alles!

Was ist Hoodie?

Hoodie vereinfacht das Entwickeln solcher Anwendungen. Es nutzt Node.js, Git und CouchDB und stellt damit ein serverseitiges Backend (Hoodie) für offline Anwendungen zur Verfügung.

Die eigentliche Anwendungsentwicklung geschieht im Frontend mit HTML, CSS und JavaScript.

Hoodie kann über Plugins in seiner Funktionalität erweitert werden.

Eine sehr gute Einführung gibt Alex Feyerke in seinem Talk auf der JSConf 2013

I have a Dreamcode: Build Apps, not Backends

Installation von Hoodie unter Ubuntu 14.04

Da Sie nach dieser recht ausführlichen Einleitung, in der ich Sie zu minutes.io und YouTube geschickt habe den Weg wieder hierher gefunden habe, zeige ich Ihnen jetzt, wie Sie Hoodie auf einem Root-Server installieren.

Deutlicher Hinweis:

Momentan ist Hoodie bei der Versionsnummer 0.6.3 angekommen. Normalerweise wird lokal entwickelt und die Ergebnisse der Entwicklung werden dann auf einem produktiven Server deployed (Hoodie Deployment Guide). Nichtsdestotrotz glaube ich, dass es gut ist, Hoodie einfach mal auf einem Root-Server zu installieren und damit zu experimentieren. Die einzelne Anwendung läuft nur, wenn Hoodie gestartet ist und dann „nur“ auf einen anderen Port als 80. Das Risiko ist also überschaubar :). Der Vorführeffekt einer selbst erstellten Anwendung ist sehr eindrucksvoll, wenn Sie „online“ zur Verfügung steht und jeder die Applikation mal eben mit seinem Tablet oder Telefon ausprobieren kann.

Nun aber endlich los. Installieren Sie die folgenden Software.

Node.js

Ubuntu hat ein Installationspaket von Node.js. Damit alles so funktioniert, wie Hoodie das erwartet, muss zusätzlich Chris Lea’s Node.js PPA hinzugefügt werden. Eine PPA ist ein Personal Package Archive.

sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

CouchDB

sudo apt-get update
sudo apt-get install couchdb-bin git

Hoodie-CLI

npm install -g hoodie-cli

Das war bereits alles, Hoodie ist nun installiert.

Erste Schritte

Mit hoodie -h sehen Sie die möglichen Paramneter

Hoodie Help

Hoodie Help

Um das Gerüst für eine erste Anwendung zu erstellen, geben Sie den Befehl

hoodie new testapp

ein. Hoodie erstellt nun im Verzeichnis testapp alle Dateien, die Sie benötigen um loszulegen. Die testapp ist eine ToDo Liste mit Benutzerverwaltung. Der Name ist frei wählbar.

Erstellung der Hoodie testapp
Erstellung der Hoodie testapp
Wechseln Sie nun in den testapp Ordner und starten Sie Hoodie. Sie müssen ein Passwort für den Administrationsbereich vergeben.

cd testapp
hoodie start
Hoodie testapp starten
Hoodie testapp starten
Nun können Sie die testapp im Browser aufrufen. In meinem Fall ist das http://serverblogger.ch:6001 für die testapp und http://serverblogger.ch:6002 für den Adminbereich.
testapp im Browser
testapp im Browser
Administrationsbereich
Administrationsbereich
Auf der Website können Sie sich ein Benutzerkonto anlegen und Ihre ToDo’s verwalten.

In der Datei /home/novatrend/testapp/www/index.html befindet sich der Quellcode Ihrer Anwendung. Für erste Schritte können Sie diese Datei im Editor bearbeiten. Komfortabler geht es natürlich in einer lokalen Entwicklungsumgebung.

Hoodie selbst können Sie mit ctrl-c wieder beenden. Die App ist dann nicht mehr über den Browser aufrufbar. Das Passwort können Sie mit dem Befehl hoodie reset password zurücksetzen.

Eine Anwendung direkt aus GitHub installieren

Eine Demo Anwendung ist der Hoodie MapChat. Stellen Sie sich vor, Sie wollen Informationen sammeln, die mit einem bestimmten Ort zusammenhängen (Der Weinbauer geht über seine Felder und notiert sich etwas, mal mit, mal ohne Internetverbindung. Die Daten sind nur für ihn sichtbar 😉 ). Auch wenn die Anwendung auf den ersten Blick ein wenig hergeholt erscheint, so funktionieren doch die meisten ortsbezogenen Dienste nach exakt diesem Prinzip.

Verlassen Sie das Verzeichnis testapp wieder und geben Sie die folgenden Befehle ein.

hoodie new vineyard -t hoodiehq/hoodie-app-mapchat
cd vineyard
hoodie start

Wenn Sie die Anwendung nun im Browser aufrufen, können Sie sich registrieren und dann mit Ihrem Telefon über Ihre Liegenschaften laufen und Notizen verfassen. Auch offline!

Hoodie MapChat
Hoodie MapChat

Links


tl:dr; Mit Hoodie lassen sich Web-Applikationen schnell und einfach entwickeln.

Kategorien
Content Management Systeme

Ein Intranet mit Open Atrium

Heute schauen wir uns unsere neue Intranet Lösung an!

Haben Sie diesen Satz schon einmal in einem Meeting gehört?

Als ich diesen Satz das erste Mal hörte, war mir noch nicht so recht klar, was ein Intranet für ein Unternehmen, auch und gerade ein kleines Unternehmen, bedeutet. Die meisten Intranet Lösungen, die ich zu Gesicht bekam, waren ähnlich selbsterklärend wie Steuer- oder Buchhaltungsprogramme, nämlich gar nicht. Bei den Mitarbeitern machte sich meist in kürzester Zeit Angst und Misstrauen breit, weil es in bestehenden Unternehmen oft ausgetretene Pfade gibt, die nicht gern verlassen werden. Mittlerweile kann ich diese Reaktion gut verstehen, denn ich war oft in Meetings, in denen die neue, alle Probleme lösende Software, vorgestellt wurde!

Seit dem Auftauchen von BaseCamp (Projektmanagement) im Jahre 2004 verbesserte sich die Lage ein wenig, aber nicht wirklich. BaseCamp war gut, aber eben „nur“ eine Website. Viele Unternehmen wollten ihre Daten aus Sicherheitsgründen lieber selbst hosten.

Oft arbeiten Gruppen mit einer Mischung aus E-Mail, Microsoft Word, Outlook und Skype zusammen. Ich habe auch schon oft Kommunikation über Facebook, WhatsApp, Google Docs, Wikis, Telefon und Jabber gesehen. Das Problem ist verzwickt. Je nach Unternehmen, Herkunft, Kultur, Arbeitsverhältnissen und anderen Parametern wird mal lose oder eben nicht so lose zusammengearbeitet. Innerhalb von Unternehmen gibt es oft den „offiziellen“ und den „anderen“ Weg. Auf beiden Wegen sollte sich ein Mitarbeiter zurechtfinden. Ein Intranet muss daher einfach benutzbar aber hochflexibel sein.

„Eine“ Software hat es da naturgemass schwer, alle Bedürfnisse abzudecken. Die meisten Mitarbeiter sind allerdings auch überfordert, unterschiedliche Tools einigermassen produktiv zu kombineren.

Als ich anfing mit Drupal zu experimentieren, habe ich oft Intranets damit „zusammengeklickt“. Das ging mit Drupal erstaunlich gut, weil man mit Inhaltstypen, Feldern und Benutzerrollen schon eine ganze Menge ohne Programmierung erledigen kann. Scheinbar haben mehrere Anwender so gedacht, denn Ende 2009 erschien die erste Version von Open Atrium, einer Drupal Distribution, die dem BaseCamp Prinzip sehr ähnelte und aus Drupal Modulen zusammengesetzt war. Der grosse Vorteil war für mich, dass man dieses System sehr einfach mit anderen bestehenden Drupal Modulen erweitern konnte und so auf eine elegante Art zum Ziel kam. Wir (cocoate.com) haben Open Atrium erfolgreich für die Verwaltung von internationalen Kunden- und EU-Projekten genutzt und konnten wirklich jede Herausforderung (Workflow, Tasks) damit meistern.

Die treffendste Beschreibung des Projektes ist vermutlich

Open Atrium is an intranet in a box that has group spaces to allow different teams to have their own conversations and collaboration.

Mittlerweile ist Open Atrium von der Firma Phase2 gekauft worden. Die Software an sich steht weiterhin unter einer freien Lizenz zur Verfügung. Aktuell ist die Version Open Atrium 2. Sie basiert auf Drupal 7. Auf openatrium.com finden Sie mehr Informationen über die Geschichte und die Features des Projektes. Die echten Nutzungszahlen lassen sich auf der drupal.org/project/usage/openatrium nachvollziehen.

Installation von Open Atrium 2

Das gesamte Installationspaket können Sie auf der Projekt Seite herunterladen.

Vorbereitungen

Um die Software installieren zu können, benötigen Sie auf Ihrem Root-Server einen LAMP Stack (LAMP einrichten), einen VHOST (Viele virtuelle Server auf einem Root-Server) und eine Datenbank nebst Datenbank-User (Installation der 5 verbreiteten Content Management Systeme).

Empfehlenswerte Einstellungen sind in der

php.ini:

memory_limit=256M

In meinem Fall ist der Aufruf von

sudo nano /etc/php5/apache2/php.ini

und ein anschliessender Neustart des Webservers noetig

sudo service apache2 reload

MySQL my.cnf:

max_allowed_packet = 32M

Ich rufe

sudo nano /etc/mysql/my.cnf

auf und starte den Datenbankserver anschliessend neu:

sudo service mysql reload

Installation

Laden Sie das Dateipaket von drupal.org/project/openatrium

wget http://ftp.drupal.org/files/projects/openatrium-7.x-2.26-core.tar.gz

Extrahieren Sie es in ein Verzeichnis Ihrer Wahl und rufen Sie es im Browser auf. Die gesamte Open Atrium Distribution ist momentan nur auf Englisch verfügbar. Nach der Installation kann die Anwendung jedoch lokalisiert werden.

Web-Installer
Web-Installer
Das ist die erste Seite des Webinstallers.

Drupal Distributionen nutzen den Standard Drupal Webinstaller und erweitern ihn um die entsprechenden Funktionen.

Datenbankkonfiguration
Datenbankkonfiguration
Profilauswahl
Profilauswahl
Hier wird die Installationsmethode ausgewählt. Ich habe habe die Quick Installation gewählt.
Installation der Module
Installation der Module
338 Drupal Module werden nun installiert.

Danach werden der Adminname, das Passwort und die E-Mail Adresse abgefragt.

Erfolgreiche Installation
Erfolgreiche Installation
Die Installation war erfolgreich, Open Atrium ist nun bereit zur Konfiguration.
Startseite
Startseite
Der grüne „Create Content“ Button führt nun in die Welt der Intranets. So grundsätzlich gibt es Spaces, Sections, Groups, Members und Teams in denen unterschiedliche Arten von Inhalten gespeichert werden werden können.

Wenn Sie nun neugierig sind, sollten Sie sich eine Stunde Zeit nehmen und eine Einführung in Open Atrium ansehen (Englisch). Das erste Drittel besteht aus Slides mit den theoretischen Zusammenhängen und der Rest aus der Konfiguration von Open Atrium.

Weitere Videos und Tutorials finden Sie auf auf der Projektseite (https://www.drupal.org/project/openatrium).


tl;dr: Ein für Ihre Bedürfnisse massgeschneidertes Intranet mit Open Source Software ist möglich.