Archives pour la catégorie ‘JS’

Node.js : détecter la version requise depuis le fichier package.json

# jq ".engines.node" package.json|sed -ne 's/[^0-9]*\(\([0-9]\{1,4\}\)\(\.\([0-9]\{1,4\}\)\)\{0,2\}\)[^0-9]*/\1/p')

Node.js : installation d’un environnement multi-versions avec n

$ git clone https://github.com/tj/n.git
$ cd n
$ sudo su 
# make
# n latest
     install : node-v0.12.2
       mkdir : /usr/local/n/versions/node/0.12.2
       fetch : https://nodejs.org/dist/v0.12.2/node-v0.12.2-linux-x64.tar.gz
   installed : v0.12.2
# n 0.10.38
     install : node-v0.10.38
       mkdir : /usr/local/n/versions/node/0.10.38
       fetch : https://nodejs.org/dist/v0.10.38/node-v0.10.38-linux-x64.tar.gz
   installed : v0.10.38
# n
  ο node/0.10.38
    node/0.12.2

zabbix-monitor : moniteur web d’alertes Zabbix

zabbix-monitor

Je publie les sources d’un mini-projet dénommé zabbix-monitor qui pourrait être utile à tout ceux qui monitorent comme moi leurs serveurs avec Zabbix. Comme le nom l’explicite, zabbix-monitor est un moniteur web d’alertes Zabbix.

Caractéristiques :

  • application client-side full JS avec interface responsive pour affichage optimisé sur desktop / tablette / mobile
  • support multi-serveurs possible et paramètres spécifiques par serveur
  • vue des alertes avec filtrage par sevérité
  • vue des derniers évènements détectés
  • vue d’état d’exécution des scénarios web

Dépôt : https://github.com/bhuisgen/zabbix-monitor

blog-server : serveur REST API pour un blog full JS

Je viens de publier les sources du serveur REST API de la future version de ce blog. Il s’agit de la première brique d’un stack full JS. L’application client constituant la seconde brique suivra dans quelques mois si tout se passe bien. Il reste quelques points à régler ici et là mais rien d’insurmontable :)

Quelques points :

  • serveur REST API sous Node.js et basé sur Express.js v4
  • index géré par l’ORM jugglingdb avec le backend Redis (des backends PostgreSQL et MongoDB sont disponibles)
  • authentification API par clé UUID ou token dans le cas d’un compte local (login/password) ou externe (authentification Facebook / Google / LinkedIn / OpenID / Twitter grâce à Passport)
  • contenu statique (pages, articles) sous forme de fichiers Markdown avant indexation sous Redis
  • support des commentaires, tags et catégories sur les articles

Dépôt : https://github.com/bhuisgen/blog-server

Node.js : template de script de démarrage init.d

#! /bin/sh
### BEGIN INIT INFO
# Provides:          app
# Required-Start:    $remote_fs $syslog $network
# Required-Stop:     $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: app
# Description:       app startup script
### END INIT INFO

# Author: Boris HUISGEN <bhuisgen@hbis.fr>

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="app"
NAME=app
DAEMON=/usr/local/bin/node
USER=app
GROUP=app
LOGFILE=/var/log/app/app.log
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

NODEAPP_DIR=/home/app/
NODEAPP_SCRIPT="app.js"

[ -x "$DAEMON" ] || exit 0

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start()
{
	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test \
		> /dev/null || return 1
	start-stop-daemon --start --quiet --make-pidfile --pidfile $PIDFILE \
		--exec $DAEMON --chdir $NODEAPP_DIR --chuid $USER:$GROUP \
		--background -- $NODEAPP_SCRIPT >> $LOGFILE 2>&1 || return 2
}

do_stop()
{
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2

        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --pidfile $PIDFILE
        [ "$?" = 2 ] && return 2

	rm -f $PIDFILE
	return "$RETVAL"
}

case "$1" in
  start)
	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
	do_start
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  stop)
	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
	do_stop
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  status)
	status_of_proc -p $PIDFILE "$DAEMON" "$NAME" && exit 0 || exit $?
	;;
  restart|force-reload)
	log_daemon_msg "Restarting $DESC" "$NAME"
	do_stop
	case "$?" in
	  0|1)
		do_start
		case "$?" in
			0) log_end_msg 0 ;;
			1) log_end_msg 1 ;;
			*) log_end_msg 1 ;;
		esac
		;;
	  *)
		log_end_msg 1
		;;
	esac
	;;
  *)
	echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
	exit 3
	;;
esac

:

Iptables : redirection de port pour une application Node.js / Express

*nat
:PREROUTING ACCEPT [7281:438725]
:POSTROUTING ACCEPT [1652:103194]
:OUTPUT ACCEPT [1652:103194]
-A PREROUTING -d 80.80.80.80/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination :3000 
-A OUTPUT -o lo -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3000
COMMIT
*filter
:INPUT ACCEPT [184:13033]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [46937:6349034]
-A INPUT -d 80.80.80.80/32 -m state --state NEW -p tcp --dport 3000 -j ACCEPT 
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
Haut de page