node.js
Darunter wird eine JS Laufzeitumgebeung außerhalb von Web-Browsern verstanden, welche für Linux und Windows verfügbar ist (node.exe). Mit node.js lassen sich Serveranwendungen im RT-Umfeld realisieren. Klassischer Anwendungsfall ist ein Chat. Maßgebend für node.js ist die ausschließliche Umsetzung mit Javascript (Client und Server) und die Möglichkeit der asynchronen und transparenten Kommunikation zwischen Client und Server bzw. zwischen Clients einschließlich der Übertragung und Generierung von HTML-Elementen.
node.js wird oftmals für RT-Anwendungen eingesetzt (Chat, Etherpad) oder als Signalisierungssytem für Kommunikationsanwendungen. Mit der Entsteheung von WebRTC hat sich node.js als Technologiestandard für Signalisierung etabliert. node.js und WebRTC enthalten aber keine Signalisierungsstandards.
Folgende node.js-Applikationen sind in unserer campus21 - Anwendungsplattform enthalten:
- WebChat (basierend auf psitsmike)
- Etherpad gleichzeitiges bearbeiten eines Textdokumentes
- Kurento WebRTC-Applikationen
Installation von node, npm
Installation Ubuntu 14.04
sudo apt-get update sudo apt-get install nodejs sudo apt-get install npm
https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-an-ubuntu-14-04-server
Node wird aufgrund eines Namenskonfliktes nicht mit node sondern mit nodejs gestartet.
node.js kompilieren und installieren
https://gist.github.com/x-Code-x/2562576
sudo apt-get update && apt-get install git-core curl build-essential openssl libssl-dev
git clone https://github.com/joyent/node.git
cd node
git checkout v0.12.1
./configure --openssl-libpath=/usr/lib/ssl
make
make test # Fehler FS-Access
sudo make install
node -v
npm -v
??? curl https://npmjs.org/install.sh | sudo sh
node.js-Applikation über Kommandozeile ausführen
Ausführen eines Tutorials oder Applikation
cd /var/kms6/kurento-tutorial-node/kurento-hello-world
npm start
node.js-Applikation als Service installieren
Node.js muss zuvor installiert werden, siehe node.js und die Applikation sollte über die Kommandozeile ausführbar sein.
Service-Script erstellen
Das Service-Script /etc/init.d/psitsmike ist erforderlich, wenn psitsmike als Service ausgeführt werden soll (erfolgt damit auch automatischer Start bei Systemstart?)
Das Service-Script enthält lokale Pfade (im folgenden unterstrichen), da node.js-Applikationen keinen Standard-Installationspfad haben. Ebenfalls kann der Pfad und Name des Node.js-Runtime (in dem Fall /usr/bin/node) abweichen.
Zum Erstellen kopieren Sie folgenden Code in den VI und ändern die lokalen Pfade:
vi /etc/init.d/psitsmike
#!/bin/sh
### BEGIN INIT INFO
# Provides: psitsmike
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts psitsmike
# Description: starts psitsmike using start-stop-daemon
### END INIT INFO
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/node/bin"
LOGFILE="/home/node.js/psitsmike_example_2/app.log"
EXEC="/usr/bin/node /home/node.js/psitsmike_example_2/app.js"
USER="www-data"
GROUP="www-data"
DESC="psitsmike"
NAME="psitsmike"
set -e
. /lib/lsb/init-functions
start() {
echo "Starting $DESC ... "
start-stop-daemon --start --chuid "$USER:$GROUP" --background --make-pidfile --pidfile /var/run/$NAME.pid --exec $EXEC -- $LOGFILE || true
echo "done"
}
#We need this function to ensure the whole process tree will be killed
killtree() {
local _pid=$1
local _sig=${2-TERM}
for _child in $(ps -o pid --no-headers --ppid ${_pid}); do
killtree ${_child} ${_sig}
done
kill -${_sig} ${_pid}
}
stop() {
echo "Stopping $DESC ... "
while test -d /proc/$(cat /var/run/$NAME.pid); do
killtree $(cat /var/run/$NAME.pid) 15
sleep 0.5
done
rm /var/run/$NAME.pid
echo "done"
}
status() {
status_of_proc -p /var/run/$NAME.pid $NAME $NAME && exit 0 || exit $?
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Usage: $NAME {start|stop|restart|status}" >&2
exit 1
;;
esac
exit 0
Das stdout-Logging funktioniert in dem obigen Beispiel unter Ubuntu offenbar nicht. Die Ausgabeumleitung funktioniert mittels eines zusätzlichen bash-Parents:
EXEC="/usr/bin/node /home/node.js/kurento/rtc-groupcall/server.js 1>>/home/node.js/kurento/rtc-groupcall/server.log"
start-stop-daemon --start --chuid "$USER:$GROUP" --background --make-pidfile --pidfile /var/run/$NAME.pid --startas /bin/bash -- -c "$EXEC" || true
Service einrichten
sudo /etc/init.d/psitsmike start ps -elf | grep "node" cat /var/run/psitsmike.pid
sudo /etc/init.d/psitsmike stop
sudo /etc/init.d/psitsmike restart
sudo /etc/init.d/psitsmike status
SSL aktivieren
Innerhalb einer SSL-Website muss auch der node.js-Server über SSL kontaktiert werden. Dazu müssen eine Schlüssel- und Zertifikatdatei auf dem Server vorliegen, welche durch Selbstzertifizierung erstellt werden oder es können die Dateien der SSL-Website vom externen Zertifizierer verwendet werden.
Außerdem muss die node.js-Applikation nach dem Checkout geändert werden, was in der Regel kein Problem ist.
http://stackoverflow.com/questions/5998694/how-to-create-an-https-server-in-node-js
Werden zudem Ressourcen vom node-Webserver geladen muss das Zwischenzertifikat bereitgestellt werden. Ohne Zwischenzertifikat wird das Serverzertifikat bei einigen Browsern nicht anerkannt. Eine Lösung ist, das Zwischenzertifikat in die Zertifikatdatei des einzufügen (hat bei Firefox funktioniert):
Werden dennoch Zertifikatprobleme sichtbar:
- https://www.campus21.de:8443 (Chrome)
Wir arbeiten mit Software von http://www.campus21.de.
Verantwortlich für angezeigte Daten ist der Webdomain-Eigentümer laut Impressum.