Tag Archives

11 Articles
Slack pour Linux ? Essayez Scudcloud

Slack pour Linux ? Essayez Scudcloud

Vous êtes sous Linux et vous en avez marre de devoir réserver un onglet de navigateur pour Slack ?Vous voulez enfin une application dédiée ? Et bien vous devriez essayer ScudCloud.

Scudcloud est un client non officiel de Slack et il est compatible avec la plupart des distributions linux du moment : Debian, Ubuntu, Kubuntu, Mint, Arch, Fedora.

De plus, il a les fonctionnalités suivantes :

  • support multi team
  • utilisation des notification systèmes
  • Affichage du nombre d’éléments non lus depuis le lanceur/systray
  • alerte à chaque nouveau message
  • Optionnel : Réduire dans le systray en fermant.

Si ce client vous intéresse, voici la méthode d’installation pour ceux tournant sous Ubuntu :

sudo apt-add-repository -y ppa:rael-gc/scudcloud
sudo apt-get update
sudo apt-get install scudcloud 

Si vous voulez le spell checking pensez à ajouter le dictionnaire hunspell dans votre langue :

sudo apt-get install hunspell-fr

Pour toute autre information, je vous renvoie directement sur la page du projet

Node.JS 4.0.0 vient de sortir

Node.JS 4.0.0 vient de sortir

Bonjour à tous,

Une semaine après la rentrée, une grande nouvelle a été annoncée hier soir : Node.JS 4.0.0 a été publiée en version finale.

4.0.0 ? Mais on était pas en 0.12 juste avant ?

Je vous répondrait par un grand oui. Ce changement brutal de version s’explique par le fait que Node.JS et IO.JS ont été mergés ensemble pour cette nouvelle version. Ce qui veut dire que nous avons le droit, pour cette version, à toutes les nouveautés de IO.JS 3.0 mais pas que. Voici le début du changelog fourni par Node.JS

  • child_process: ChildProcess.prototype.send() and process.send() operate asynchronously across all platforms so an optional callback parameter has been introduced that will be invoked once the message has been sent, i.e. .send(message[, sendHandle][, callback]) (Ben Noordhuis) #2620. node: Rename « io.js » code to « Node.js » (cjihrig) #2367.
  • node-gyp: This release bundles an updated version of node-gyp that works with all versions of Node.js and io.js including nightly and release candidate builds. From io.js v3 and Node.js v4 onward, it will only download a headers tarball when building addons rather than the entire source. (Rod Vagg) #2700 npm: Upgrade to version 2.14.2 from 2.13.3, includes a security update, see https://github.com/npm/npm/releases/tag/v2.14.2 for more details, (Kat Marchán) #2696. timers: Improved timer performance from porting the 0.12 implementation, plus minor fixes (Jeremiah Senkpiel) #2540, (Julien Gilli) nodejs/node-v0.x-archive#8751 nodejs/node-v0.x-archive#8905
  • util: The util.is*() functions have been deprecated, beginning with deprecation warnings in the documentation for this release, users are encouraged to seek more robust alternatives in the npm registry, (Sakthipriyan Vairamani) #2447.
  • v8: Upgrade to version 4.5.103.30 from 4.4.63.30 (Ali Ijaz Sheikh) #2632.
  • Implement new TypedArray prototype methods: copyWithin(), every(), fill(), filter(), find(), findIndex(), forEach(), indexOf(), join(), lastIndexOf(), map(), reduce(), reduceRight(), reverse(), slice(), some(), sort(). See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray for further information.
  • Implement new TypedArray.from() and TypedArray.of() functions. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray for further information.
  • Implement arrow functions, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions for further information.
  • Full ChangeLog available at https://github.com/v8/v8-git-mirror/blob/4.5.103/ChangeLog

Pour installer cette version, rien de plus simple :

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs

# Using Debian, as root
curl -sL https://deb.nodesource.com/setup_4.x | bash -
apt-get install -y nodejs

Pensez aussi à réinstaller vos modules npm pour les compiler avec le nouveau moteur mais attention, il y a encore plusieurs modules non compatibles dont :

  • IconV
  • Canvas
  • ICU-charset-detector

Sources

Mettre à jour NodeJS sur Debian/Ubuntu + Bonus

Mettre à jour NodeJS sur Debian/Ubuntu + Bonus

Comme vous avez pu le remarquer, NodeJS 0.12 est sortie il y a maintenant quelques mois. Malheureusement l’ancien dépôt apt utilisé pour mettre à jour NodeJS n’est plus maintenu depuis pas mal de temps.

Fort heureusement, NodeSource a mis à disposition un script pour mettre à jour NodeJS à jour dans sa dernière version. Et, encore plus fort, on peut choisir si l’on veut la dernière de la branche 0.10, 0.12 ainsi que de iojs.

L’installation est compatible sur les systèmes suivants :

  • Debian testing (jessie)
  • Debian unstable (sid)
  • Ubuntu 14.04 LTS (Trusty Tahr)
  • Ubuntu 14.10 (Utopic Unicorn)
  • Ubuntu 15.04
  • Linux Mint
  • Linux Mint Debian Edition
  • elementary OS
  • Trisquel
  • Toutes les variantes à jour de Debian et Ubuntu
Si vous changez la version de Node.JS, pensez à réinstaller vos modules globaux et locaux de NPM afin qu’ils soient compilés avec la bonne version de NodeJS.

Voici les lignes de commandes pour mettre à jour NodeJS dans chacune d’entre elles :

NodeJS 0.10

# Note the new setup script name for Node.js v0.10
curl -sL https://deb.nodesource.com/setup_0.10 | sudo bash -

# Then install with:
sudo apt-get install -y nodejs

NodeJS 0.12

# Note the new setup script name for Node.js v0.12
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -

# Then install with:
sudo apt-get install -y nodejs

IO.JS 1.x

# Note the new setup script name for io.js
curl -sL https://deb.nodesource.com/setup_iojs_1.x | sudo bash -

# Then install with:
sudo apt-get install -y iojs

Petit Bonus

Il se peut que, pour un projet, vous deviez repasser à NodeJS 0.10 puis revenir vers la 0.12 pour un autre projet et vice-versa. Vous pouvez, si vous le souhaitez, partir sur NVM mais je vous le déconseille fortement.

À la place, je vous propose un petit script simple à placer ici : /usr/bin/nmv

!#/bin/bash

case $1 in
    0.10)
        curl -sL https://deb.nodesource.com/setup_0.10 | sudo bash - && sudo apt-get remove -y nodejs && sudo apt-get install -y nodejs
        ;;
    0.12)
        curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash - && sudo apt-get remove -y nodejs && sudo apt-get install -y nodejs
        ;;
    *)
        echo "Usage :"
        echo "nmv [version]"
        echo ""
        echo "Availables versions :"
        echo "0.10, 0.12, iojs"
        ;;
esac

Après, vous pourrez facilement choisir la version de NodeJS à installer en effectuant les commandes suivantes :

# install NodeJS 0.10
nmv 0.10
# install NodeJS 0.12
nmv 0.12

Source

Mise en production projet node.js

Mise en production projet node.js

Présentation

Après un temps d’abscence, me revoici pour vous présenter comment mettre en production votre projet Node.js au sein de votre serveur de production. Personnellement, j’utilise NGinx pour faire le lien avec le serveur http de node.JS.

Sachez que j’utilise un serveur Ubuntu x64 14.04 LTS pour cet article. Il se peut que selon votre distribution, certaines commandes changent.

Prérequis

Avant de commencer, sachez que je n’utilise pas les versions de node.js et de npm fournis par ubuntu car elles ne sont pas mise à jour régulièrement et que la mise à jour de npm par lui même ne marche pas, De même pour NGinx. De plus, pour gérer comme il faut mon projet Node.JS, j’utilise monit et upstart. Voici donc toutes les commandes à rentrer pour être prêt à commencer :

# avant de commencer, mettre à jour Ubuntu
sudo apt-get update && sudo apt-get upgrade
# installation de paquets nécessaires disponibles dans ubuntu
sudo apt-get install imagemagick libicu-dev libgd2-xpm-dev python-software-properties software-properties-common build-essential upstart monit
# installation de nginx et de node.js
sudo add-apt-repository ppa:nginx/stable
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nginx nodejs
Attention : Avec cette installation de Node.JS nous nous retrouvons en 0.10.X. De plus, la commande de base n’est pas node mais nodejs

Utilisateur webuser

De base, l’utilisateur exécutant la partie web chez moi ne doit pas avoir les accès sudo. Je créée donc un nouvel utilisateur avec pour nom webuser :

sudo useradd -d /home/webuser -m webuser
sudo passwd webuser
su webuser
# on est chez webuser
cd
mkdir public_html
exit

NGinx

Maintenant voici le fichier NGinx à créer pour pouvoir faire le lien entre le port 80 (ou 443 si vous passez via https) et votre processus node (les 3/4 du temps sur le port 3000). Le fichier sera à placer dans /etc/nginx/sites-available/

upstream app_nodenomunique {
        server 127.0.0.1:3000;
}

server {
    listen 443 ssl;
    server_name api.testnode.com;
    ssl_certificate /etc/nginx/certificates/site.crt;
    ssl_certificate_key /etc/nginx/certificates/site.key;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;

    access_log /var/log/nginx/votreprojet.log;

    # supposedly prevents 502 bad gateway error;
    # ultimately not necessary in my case
    large_client_header_buffers 8 32k;

    client_max_body_size 10M;

    # pass the request to the node.js server with the correct headers and much more can be added, see nginx config options
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        # prevent 504
        proxy_read_timeout 600;

        # supposedly prevents 502 bad gateway error;
        # ultimately not necessary in my case
        proxy_buffers 8 32k;
        proxy_buffer_size 64k;

        proxy_pass http://app_nodenomunique/;
        proxy_redirect off;

        # the following is required as well for WebSockets
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Comment ça marche exactement ici ? La liaison vers votre serveur node.JS est renseignée via cette partie du fichier :

upstream app_nodenomunique {
        server 127.0.0.1:3000;
}

Ensuite, nous indiquons dans la partie location /, qui correspond aux réglages de la racine de notre url (ici api.testnode.com) de passer par le proxy http://app_nodeunique/ qui correspond à notre redirection vers 127.0.0.1:3000. Pour l’utilisateur accédant à votre site, api, … c’est entièrement transparent.

Pour finir, vous devrez créer un lien symbolique pour placer le fichier dans le répertoire sites-enabled puis de relancer nginx :

sudo ln -s /etc/nginx/sites-available/api.testnode.com /etc/nginx/sites-enabled/
sudo service nginx restart
Si vous essayez d’accéder à votre site, vous devriez avoir, si bien entendu votre serveur node.JS est coupé, une erreur 502 voulant dire que Nginx ne peut réaliser la redirection.

Initialisation du projet depuis GIT

Cette partie vous concerne si vous avez votre projet hébergé chez git. Je donne ici les commandes à effectuer pour initialiser ce projet. De toute manière voici l’arborescence que vous devriez avoir :

/
˪ home
    ˪ webuser
        ˪ public_html
            ˪ votreprojet 

Et maintenant l’initialisation via git :

cd /home/webuser/public_html
sudo -u webuser -H git clone git@votreserveur:userougroupe/votreprojet.git
cd votreprojet
sudo -u webuser -H npm install

Upstart

Upstart va servir à démarrer notre serveur comme si c’étasit un service linux, avec le bon utilisateur comme propriétaire. Pour cela, vous devez créer le fichier /etc/init/votreprojet.conf avec le contenu suivant :

#/etc/init/votreprojet.conf
description "NodeServer init script"
author "throrin19"

start on startup # it's possible to use "net-device-up IFACE=eth0" for starting the process when the ethernet adapter is up
stop on shutdown

script
    cd /home/webuser/public_html/votreprojet
    exec sudo -u webuser NODE_ENV=production /usr/bin/nodejs /home/webuser/public_html/votreprojet/server.js >> /home/webuser/logs/nodeserver.log 2>&1
end script
Attention : Vous devrez impérativement créer le répertoire /home/webuser/logs.

Monit

Monit lui, va servir à redémarrer le serveur nginx s’il est en panne, redémarrer l’api si elle est innaccessible et envoyer un email d’erreur dès qu’il y en a. Pour cela, vous devrez créer deux fichiers :

  • /etc/monit/monitrc.d/votreprojet
  • /etc/monit/monitrc.d/email

Quand les fichiers sont crées et complétés, vous devrez faire un lien symbolique vers /etc/monit/conf.d de la manière suivante :

sudo ln -s /etc/monit/monitrc.d/email /etc/monit/conf.d/
sudo ln -s /etc/monit/monitrc.d/votreprojet /etc/monit/conf.d/
sudo ln -s /etc/monit/monitrc.d/nginx /etc/monit/conf.d/

votreprojet

check host nodeapp with address 127.0.0.1
    start "/sbin/start votreprojet"
    stop "/sbin/stop votreprojet"
    if failed port 3000 protocol HTTP
        request /
        with timeout 10 seconds
        then restart
        if 5 restarts within 5 cycles then timeout

email

set mailserver smtp.gmail.com port 587
    username "user@gmail.com" password "password"
    using tlsv1
    with timeout 30 seconds


set alert votremail@domain.com

set mail-format { 
    from:server@domain.net 
    subject: [production]monit alert -- $EVENT $SERVICE 
    message: $EVENT Service $SERVICE 
             Date: $DATE 
             Action: $ACTION 
             Host: $HOST 
             Description: $DESCRIPTION 
}

Start, Stop, Restart

Maintenant, si vous voulez lancer, arrêter et redémarrer l’api, vous n’aurez qu’à faire

sudo start votreprojet
sudo restart votreprojet
sudo stop votreprojet
Attention : Avec monit, si vous arrêtez l’API, elle se redémarrera automatiquement au bout de 30s.

Si vous voulez couper et relancer monit, faites juste :

sudo service monit stop
sudo service monit start

Script de mise en production

Lors de la mise à jour de l’API, tout comme pour l’installation, vous avez juste à lancer le script suivant :

#!/bin/sh
cd /home/webuser/public_html/votreprojet
sudo -u webuser -H git pull
sudo -u webuser -H npm install
sudo restart votreprojet

Le mot de la fin

Voilà. Maintenant vous êtes aptes à mettre en production votre projet NodeJS. Certains d’entre vous passeront par les tags plutôt que par la branche master pour les mises à jour de la production. Je suis bien preneur pour un script permutant ceci. De plus je n’ai pas parlé des scripts de migration pour mettre à jour la BDD, … Je me suis concentré sur l’essentiel. N’hésitez pas à me faire vos remarques.

OSX, BASH et .bash_profile

OSX, BASH et .bash_profile

Bonjour à tous. Si vous êtes sur Mac OSX et que, comme moi, vous utilisez souvent votre terminal, vous avez dû vous apercevoir qu’il est plutôt sobre, qu’on ne voit pas la différence de couleur sur les types de fichiers/droits comme sous Ubuntu ou que quand on fait un petit setenv, on se fait gentiment renvoyer dans les roses.

Et bien laissez mois vous apprendre, ou vous répéter, que OSX utilise le shell BASH et donc, exécute des scripts particuliers pour enrichir et configurer votre terminal. À savoir ici, le fichier .bash_profile.

Nous n’allons pas voir en profondeur comment fonctionne ce fichier, de nombreux tutoriels existent. Google est votre amis si je puis dire. Non, ici nous allons juste voir comment enrichir notre variable PATH, comment définir de nouvelles variables qui peuvent s’avérer utiles (ex : ANDROID_HOME, ANT_HOME, …) et comment créer des alias de commandes. (ex untar au lieu de tar -zxf)

Justement, voici mon petit fichier ~/.bash_profile :

# alias de commandes unix
alias ls="ls -G"
alias untar="tar -zxf"

# definitions de nouvelles variables
export ANDROID_HOME=/usr/local/etc/android/sdk

# extension de $PATH
export PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools

Mon .bash_profile permet ceci :

  • Afficher, avec ls, une couleur par type/droit des fichiers comme sous Ubuntu
  • Décompresser facilement les fichiers .tar.gz avec les arguments principaux
  • Définir la variable ANDROID_HOME
  • Rajouter les commandes android à mon PATH pour les exécuter facilement dans le terminal.

Quand vous avez modifié votre .bash_profile, n’oubliez surtout pas de le recharger grâce à la commande source ~/.bash_profile

Bien entendu, le .bash_profile permet pleins d’autres choses comme l’ajout de nouvelles commandes, la redéfinition de votre prompt, … Libre aà vous de faire ce que vous voulez et de rendre votre terminal encore plus puissant que ce qu’il est déjà.

Cet article marche pour tous les systèmes utilisants un shell unix. Même Cygwin sous Windows est compatible.