Kategorien
Content Management Systeme Infrastruktur Shared Hosting Site Builder

Installation von Ghost auf Novatrend Webhosting

Ghost ist eine freie Blogging-Plattform, die in JavaScript geschrieben ist und unter Node.js läuft. Sie ist minimalistisch aufgebaut und verfolgt das Ziel, ein einfaches System zum Verfassen und zur Veröffentlichung von Artikeln zu bieten ohne dass man viel Aufwand mit konfigurieren verbringen muß.

Ich habe die Installation von Ghost auf einem Root Server vor 6 Jahren (!) hier im Blog beschrieben – Ein Blog mit Ghost und Node.js. Damals war es nicht möglich, Node.js in einem Webhosting zu verwenden. Heute geht das aber problemlos und daher nun die Anleitung, wie man das famose Ghost System auf einem ganz normalen Webhosting bei Novatrend installiert.

Wenn du noch unsicher bist, ob es sich lohnt, Ghost auszuprobieren, dann schau dir zu Motivationszwecken einfach mal Film zum Start des Projekts auf Kickstarter aus dem Jahr 2013 an.

Kickstarter Video für Ghost von 2013

Und denke dabei kurz daran, dass es den klassischen LAMP Stack nun auch schon wieder mehr als 25 Jahre gibt. 

Wenn du jetzt etwas überzeugter bist, dann lass uns starten. 

Node.js ist, im Gegensatz zu PHP bei vielen Hostern nicht gebräuchlich und so war es auch für uns eine kleine Herausforderung. Bedanken möchte ich mich bei Angelo Gründler, der die erfolgreiche “Forschung“ für diese Anleitung übernahm.

So grundsätzlich sind die Installationsschritte nicht schwer, aber für „gelernte“ LAMP-Stack Sitebuilder doch ein wenig ungewohnt.

Voraussetzung, um diese Anleitung nachvollziehen zu können ist ein Webhosting bei Novatrend und ein Zugang zur Konsole dieses Webhostings (siehe dazu auch den Blog post der letzten Woche: Arbeiten mit der Kommandozeile auf deinem Webhosting).

Kategorien
API Automatisierung Wunschthema

Bots in space! Heute schon getootet?

Manchmal muss man etwas tun, was man sonst nicht so oft tut. Ich meine so etwas wie Kekse backen oder ein alternatives Smartphone Betriebssystem ausprobieren. Beides macht Spass, die Kekse kann man nach dem Backen sogar aufessen. Wenn man gerade keinen Backofen oder kein alternatives Smartphone zur Hand hat, kann man auch immer gut mit API’s „spielen“. Einer der seit fünf Jahren am meisten aufgerufenen Artikel hier im Blog handelt von

Kategorien
Frameworks Webdesign Webserver

Node.js

Node.js gibt es seit mittlerweile 8 Jahren. Das .js steht für JavaScript und diese Sprache wird immer beliebter. Mit Node.js können Entwickler JavaScript auf dem Client und auf dem Server verwenden. Es läuft unter Windows, macOS, Linux und gilt heute als ausgereifte Technologie.

In diesem Blogeintrag wollen wir ein paar erste Schritte wagen.

Installation

Zur Installation musst du dir das gewünschte Paket aus dem Download Bereich des Node.js Projekts laden und installieren. Die neuesten Features finden sich in der Version 8.x..  Unter macOS gibt es die Möglichkeit, Node.js über Homebrew zu installieren.

$ brew install node

Nach der Installation kannst du im Terminal Fenster mit dem Befehl node –version überprüfen, ob alles korrekt installiert wurde. Wenn dir die Versionsnummer angezeigt wird, war die Installation erfolgreich.

$ node --version
v8.1.2

Node Konsole

Mit dem Befehl node startest du die Node.js Konsole. Mit dem Befehl console.log(‚Hallo Welt!‘); können wir auch gleich ein „Hallo Welt“ ausprobieren.

$ node
> console.log('Hallo Welt!');
Hallo Welt!
undefined
>

Mit dem Befehl .exit verlässt du die Konsole wieder.

Node Server Prozess

Mit Node.js lassen sich Server Prozesse starten. Hier ein Beispiel für einen einfachen Webserver:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hallo Welt!\n');
}).listen(8124, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8124');

Wie beim ersten vorherigen Programm gibt es auch hier einen console.log() Befehl, der die Nachricht ausgibt. Darüber wird allerdings mit dem Befehl http.createServer()… ein Webserver erzeugt und mit … listen() zum „lauschen“ auf der IP Adresse 127.0.0.1, Port 8124 gebracht. Deswegen endet dieses Programm auch nicht einfach nach dem Aufruf, sondern läuft solange, bis du es wieder abbrichst.
Schreibe die Befehle in eine Datei (server.js) und rufe sie mit dem Befehl node server.js auf.

$ node server.js
Server running at http://127.0.0.1:8124

Du hast jetzt einen lokalen Webserver auf Port 8184 laufen. Wenn du im Browser den URL aufrufst, siehst du die „Hallo Welt!“ Ausgabe.

Hallo Welt
Hallo Welt

Dieser Server läuft, solange du das Terminalfenster nicht schließt. Mit CTRL-C kannst du den Server Prozess stoppen.

Paket Manager NPM

Node.js bringt einen Paketmanager mit (NPM) um die vorhandenen Module wie http zu ergänzen. Mittlerweile gibt es mehrere hunderttausend Module! NPM vereinfacht den Download und die Nutzung von Zusatzmodulen. Module werden im aktuellen Verzeichnis in /node_modules gespeichert (npm install [Modulname]). Sie können auch mit dem -g Flag global installiert werden. Bei einer globalen Installation landen sie im globalen /node_modules Verzeichnis und können aus jedem anderen Verzeichnis ebenfalls aufgerufen werden.

Wenn ich beispielsweise

$ sudo npm install -g hexy

aufrufe

$ sudo npm install -g hexy
/usr/local/bin/hexy -> /usr/local/lib/node_modules/hexy/bin/hexy_cmd.js
+ hexy@0.2.9
added 1 package in 0.732s

wird der Hex-Dumper hexy installiert.

Das Kommando

$ hexy --width 12 server.js

zeigt mir dann die Datei server.js im Hexadezimalformat

00000000: 7661 7220 6874 7470 203d 2072 var.http.=.r
0000000c: 6571 7569 7265 2827 6874 7470 equire('http
00000018: 2729 3b0a 6874 7470 2e63 7265 ');.http.cre
00000024: 6174 6553 6572 7665 7228 6675 ateServer(fu
00000030: 6e63 7469 6f6e 2028 7265 712c nction.(req,
0000003c: 2072 6573 2920 7b0a 2020 7265 .res).{...re
00000048: 732e 7772 6974 6548 6561 6428 s.writeHead(
00000054: 3230 302c 207b 2743 6f6e 7465 200,.{'Conte
00000060: 6e74 2d54 7970 6527 3a20 2774 nt-Type':.'t
0000006c: 6578 742f 706c 6169 6e27 7d29 ext/plain'}

Mit dem Befehl

$ sudo npm uninstall -g hexy

lässt sich das Modul wieder entfernen.

Zugriff auf das Dateisystem

Mit Node.js lässt sich problemlos auf das Dateisystem zugreifen. Der folgende Code (ls.js) zeigt die Dateien im aktuellen Verzeichnis an:

var fs = require('fs');
var dir = '.';
if (process.argv[2]) dir = process.argv[2];
var files = fs.readdirSync(dir);
for (fn in files) {
  console.log(files[fn]);
}
$ node ls.js
ls.js
server.js

Fazit

Der Einstieg in Node.js ist, wie bei PHP auch, sehr einfach. Die Möglichkeiten, die sich mit Node.js auftun sind endlos. In den Bereichen Web-APIs und Single-Page-Apps eignet sich Node.js hervorragend und es macht Spaß damit zu arbeiten.

Links


tl;dr: Node.js ermöglicht JavaScript Programmierung auf dem Client und auf dem Server.

#ffffff; background: #bd081c no-repeat scroll 3px 50% / 14px 14px; position: absolute; opacity: 1; z-index: 8675309; display: none; cursor: pointer;">Save

Kategorien
Streaming Server

Open Source Musikstreaming mit Koel

Ihre Famile würde auch gern Musik aus Ihrer MP3 Sammlung hören?

  • Auf dem Laptop kein Platz?
  • Auf dem Telefon nur 16 GB?
  • Aber auf Ihrer externen Festplatte mehr als 40GB Musik im MP3 Format?

Genau dieses Problem hatte Phan An, fand keine Lösung und startete das Projekt Koel, einen Streaming Server auf der Basis des PHP Frameworks Laravel und einem Client, basierend auf vue.js, der in jedem Browser läuft.

Laden Sie die 40 GB Musik einfach auf Ihren Server, installieren Sie Koel, richten Sie Benutzerkonten ein und alle können Musik hören!

Vorausetzungen

Auf dem Server müssen Laravel 5.1, MySQL oder MariaDB, PHP ab Version 5.6, sowie Node.js ab 0.10.40 installiert sein. Der Client läuft in jedem Browser.

Installation

Legen Sie sich zunächst eine MySQL Datenbank an

mysql -u root -p
Enter password:
mysql> CREATE DATABASE koel DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
mysql> CREATE USER 'koel'@'localhost' IDENTIFIED BY 'koel-passwort';
mysql> GRANT ALL PRIVILEGES ON koel.* TO 'koel'@'localhost' WITH GRANT OPTION;
mysql> exit;

Welchseln Sie in das Home Verzeichnis Ihres Users, in meinem Fall novatrend.

cd /home/novatrend

Laden Sie den Koel Quellcode von GitHub.

sudo git clone https://github.com/phanan/koel.git

Wechseln Sie in das koel Verzeichnis.

cd koel

und rufen Sie den Node Paketmanager npm auf.

npm install

Danach rufen Sie den PHP Paketmanager composer auf.

composer install

Anschliessend müssen Sie noch in die Konfiguurationsdatei .env die Datenbank Parameter, sowie E-Mail, Name und Passwort für den Administrator Account eintragen.

nano .env

Danach müssen Sie die Datenbank einmalig initialisieren.

php artisan init

Den Laravel Development Server starten Sie mit

php artisan serve --host=music.serverblogger.ch --port=8080

wobei die Werte für Host und die Portnummer natürlich von Ihrer individuellen Konfiguration abhängen.

Wenn Sie im Browser Ihren URL aufrufen, sehen Sie die Login Maske von Koel und können sich mit Ihren Admin Daten einloggen.

Koel - Login
Koel – Login

Nun müssen Sie noch Ihre MP3 Sammlung in ein Verzeichnis laden. Ich habe ein Verzeichnis music innerhalb des koel Verzeichnisses, aber ausserhalb des public Verzeichnisses angelegt (/home/novatrend/koel/music).

In den Settings von Koel müssen Sie diesen Pfad eintragen und auf den Button Scan klicken.

Koel - Musikverzeichnis
Koel – Musikverzeichnis

Das war es!

Nun können Sie im Bereich User Ihre Familie mit Benutzeraccounts versorgen.

Koel - Benutzer
Koel – Benutzer

Sie können Playlists erstellen und Herzchen vergeben. Auf dem Telefon läuft das Programm stabil und gut bedienbar, hier ein Beispiel unter iOS mit dem Safari Browser.

Koel - In Safari unter iOS
Koel – In Safari unter iOS

Na und nun kann die Party losgehen 🙂

Links:


tl;dr: Nutzen Sie Koel um Ihre MP3 Dateien von Ihrem Server zu streamen und zu hören!

Kategorien
Messenger Server Soziale Netze

pump.io – die Basis für dezentrale soziale Netzwerke?

Nach meinen bisherigen Erlebnissen mit den alternativen sozialen Netzwerken Friendica und GNU social zeigte sich schnell die Hauptproblematik. Es fehlt bis heute ein gemeinsamer Standard für die Speicherung und Verwaltung der eigenen Daten und Beziehungen zu anderen Benutzern. Alle proprietären sozialen Netzwerke wie Facebook, Twitter, und Google+ lösen das auf die klassische Art. Sie nutzen Ihren eigenen Standard und versuchen, Ihre Nutzerzahlen, auch durch Zukäufe von anderen Netzwerken, zu erhöhen. Das hilft diesen Unternehmen, nicht aber den beteiligten Menschen, wie Ihnen und mir, die die Hoheit über Ihre Daten und Berechtigungen haben wollen.

Pump.io geht genau dieses Problem an

I post something and my followers see it. That’s the rough idea behind the pump.

Pump.io besitzt eine API, nutzt activitystrea.ms und JSON ist das Hauptdaten- und Kommandoformat. Man kann also beispielsweise kurzen und langen Text, Lesezeichen, Bilder, Video, Audio, Events und ortsbasierte Checkins posten. Man kann anderen Nutzern folgen und Listen von Nutzern anlegen und darüber wieder deren Inhalt, abhängig von deren Berechtigungen sehen und/oder downloaden. Pump.io wird unter der Apache-2.0-Lizenz veröffentlicht, die jedem die Nutzung des Quellcodes erlaubt, aber fordert, dass Änderungen an der Software weitergegeben werden müssen. Anders als bei der GPL fordert die AGPL dies auch dann, wenn man die Software selbst nur nutzt und nicht weiterverbreitet. Code unter der Apache-2.0-Lizenz kann auch in proprietären Projekten verwendet werden.

Durch die offene Struktur kann man selbst einen pump.io Server betreiben oder sich auf einem vertrauenswürdigem externen Server registrieren. Um diese Struktur herum können dann Anwendungen entstehen, die auf Telefonen, im Web oder von Maschine zu Maschine laufen.

Ein Projekt, daß momentan pump.io einbaut ist MediaGoblin. MediaGoblin ist ein dezentrales Netzwerk für Medien, also die dezentrale Alternative zu Flickr, YouTube und SoundCloud.

Eine stabile Version, die Sie auch nutzen können, finden Sie beispielsweise hier (https://goblinrefuge.com/).

Die proprietären sozialen Netzwerke könnten also einfach pump.io als Basis nehmen, sich gegenüber Ihren Nutzer vertauenswürdig verhalten und die Welt wäre ok? Im Prinzip ja. Das ebenfalls proprietäre Netzwerk Identi.ca, ist genau diesen Weg gegangen (Umbau bei Identi.ca – Golem 4.5.2013). Dazu muß man allerdings auch wissen, daß der Gründer von Identi.ca und pump.io derselbe ist, nämlich Evan Prodromou. Evan ist seit 2013 in der W3C Federated Social Web Incubator Group engagiert und steckt auch im GNU social Projekt, das ebenfalls pump.io als Standard nutzt.

Hier eine Präsentation von ihm, die einen detaillierteren Überblick über pump.io gibt.

Um der Sache etwas mehr auf den Grund zu gehen, wollte ich pump.io einfach mal installieren und schauen was man damit tun kann. Nach der Installation war ich überrascht, einen vollständigen Twitterersatz gefunden haben.

Installation

Zur Installation habe ich die folgenden Anleitungen genutzt.

http://pump.io/
https://github.com/e14n/pump.io/wiki/Ubuntu-Installation#install-basic-build-essential-packages

pump.io ist momentan in der Version 0.3 verfügbar. Es arbeitet nicht wirklich gut mit dem Apache Proxy Modul zusammen und es wird empfohlen einen Root-Server exclusiv für pump.io zu nutzen. Mit dem Nginx Proxy harmoniert pump.io besser (http://sjoberg.fi/blog/pumpio.html). Da ich es für diesen Artikel nur ausprobieren wollte, gibt es dieses mal nur eine kurze Installationbeschreibung aber – eine Testversion auf http://pump.serverblogger.ch:31337.

Aber zurück zum Installieren.

Installationsvoraussetzung sind node.js 0.8.0 oder größer, npm 1.1.0 oder größer, eine Datenbank und das graphicsmagick Paket.

Ich habe ein Installationsscript genutzt, das wirklich gut funktioniert.

wget https://gist.githubusercontent.com/debanjum/3c3e92de34d290a8bc68/raw/f2d86de263980e744a7ac1079c2863f49fe1c9d6/Pump.sh
chmod +x Pump.sh        # Make script exectuable
sudo ./Pump.sh "local"  # For local testing
# OR #
sudo ./Pump.sh "server" # For server testing, with external ip and hostname

Danach habe ich in der /etc/pump.io.json Konfigurationsdatei noch die Werte für site, hostname, owner, ownerURL, address und serverUser angepasst.

{
    "driver":  "redis",
    "params":  {"host":"localhost","port":6379},
    "secret":  "my dog has fleas",
    "noweb":  false,
    "site":  "Serverblogger",
    "owner":  "NOVATREND Serverblogger",
    "ownerURL":  "http://blog.novatrend.ch/",
    "port":  31337,
    "hostname":  "pump.serverblogger.ch",
    "address":  "pump.serverblogger.ch",
    "nologger":  false,
    "serverUser":  "novatrend",
    "uploaddir": "/srv/pump.io/uploads",
    "debugClient": false,
    "firehose": "ofirehose.example"
}

In Screen läst es sich so starten

screen -S pumpserver -L -dm bash -c "cd /srv/pump.io; npm start"

Danach lief der Server … schauen Sie mal vorbei http://pump.serverblogger.ch:31337. Sie und ich können sich User anlegen, Bilder hochladen, Nutzern folgen und den Account auf anderen pump.io Plattformen nutzen. Denken Sie aber daran, dass es nur eine Testinstallation ist und wieder von unserem Server verschwinden wird.



Links


tl;dr: Pump.io stellt eine API aller notwendigen Funktionen für soziale Software unter einer auf kommerziell nutzbaren Lizenz zur Verfügung.