Logo carnetderootxzz@carnetderoot.net"La simplification est la sophistication suprême" - Léonard De Vinci
dimanche 12 février 2017

:: Simple application avec Dancer2 ::

Présentation

Dans cet exemple, on va créer une simple application web avec Dancer2.

Pour le déploiement, on se basera sur starman pour la gestion de l'application avec Nginx en frontal.

Installation de Dancer2

Préparation de l'environnement

Afin de sécuriser l'application, on fait tourner Starman (notre serveur d'application) sous une identité propre que nous appelerons starman. La seule manière d'y accéder sera via l'utilisateur root.

# adduser --gecos "" --disabled-password starman

Brewing Perl

Afin de séparer la distribution Perl installée sur le système (system perl) de celle que l'on souhaite utiliser pour lancer notre application, nous utiliserons PerlBrew, un outil de gestion des versions de Perl.

Pour installer PerlBrew, cf.Gestion des versions de Perl avec Perlbrew

  • Liste des versions Perl disponibles à l'installation :

    # su - starman
    $ perlbrew available
      perl-5.23.3
      perl-5.22.0
      perl-5.20.3
      perl-5.18.4
      perl-5.16.3
      perl-5.14.4
      perl-5.12.5
      perl-5.10.1
      perl-5.8.9
      perl-5.6.2
      perl5.005_04
      perl5.004_05
      perl5.003_07
  • Installation de la dernière version stable (nombre pair) :

    $ perlbrew install perl-5.22.0
  • Vérification de la version installée (deux méthodes) :

    1. Lister les versions installées :

      $ perlbrew list
        perl-5.22.0
    2. Lister les versions disponibles (remarquez le "i" devant la version installée) :

      $ perlbrew available
        perl-5.23.3
      i perl-5.22.0
        perl-5.20.3
        perl-5.18.4
        perl-5.16.3
        perl-5.14.4
        perl-5.12.5
        perl-5.10.1
        perl-5.8.9
        perl-5.6.2
        perl5.005_04
        perl5.004_05
        perl5.003_07

Installation des modules CPAN

Avant tout, on installe un client cpan. Pour cela, on utilise la commande PerlBrew permettant d'installer cpanminus.

$ perlbrew install-cpanm

Puis on installe les modules :

$ cpanm Dancer2 Starman Daemon::Control

Création de l'application

La méthode la plus rapide pour créer son application est d'utiliser la commande dancer2 qui met en place l'arborescence des répertoires et fichiers à partir d'un squelette standard :

$ dancer2 -a Xzz::Blog

Cette commande crée le répertoire Xzz-Blog ainsi qu'un ensemble de sous-répertoires et fichiers.

Notez le double : dans le nom qui demande à dancer2 de créer le module "Blog" dans la sous-arborescence "Xzz", ce qui permet de cloisonner différentes parties de l'application en ajoutant simplement d'autres modules (ex: Xzz::Admin, Xzz::Galerie, etc.)

Pour lancer l'application, exécuter la commande suivante :

$ plackup -R lib bin/app.psgi 
Watching lib bin/lib bin/app.psgi for file updates.
HTTP::Server::PSGI: Accepting connections at http://0:5000/

L'application (vide) est dorénavant disponible à l'adresse http://AdresseServeur:5000. (Ctrl+C pour stopper)

Mise en place du service systemd Starman

Pour lancer automatiquement notre application, on crée le fichier /etc/systemd/system/starman.service avec le contenu ci-dessous :

$ sudo vi /etc/systemd/system/starman.service

[Unit]
Description=Starman
After=syslog.target

[Service]
Type=forking
ExecStart=/home/starman/perl5/perlbrew/perls/perl-5.18.4/bin/starman --listen 127.0.0.1:5001 --env development --daemonize /home/starman/apps/MCO/bin/app.psgi
Restart=always

[Install]
WantedBy=multi-user.target

Lancement et activation du service au démarrage :

$ sudo systemctl start starman.service
$ sudo systemctl enable starman.service

Installation et configuration de Nginx

$ sudo aptitude install nginx

--- A SUIVRE ---


dimanche 05 février 2017

:: Docker ::

Introduction

Commandes principales

Lister les containers

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Vérifier la version

$ docker version
Client:
 Version:      1.13.0
 API version:  1.25
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Wed Jan 18 16:20:26 2017
 OS/Arch:      windows/amd64

Server:
 Version:      1.13.0
 API version:  1.25 (minimum version 1.12)
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Wed Jan 18 16:20:26 2017
 OS/Arch:      linux/amd64
 Experimental: true

Infos supplémentaires

$  docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.13.0
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 03e5862ec0d8d3b3f750e19fca3ee367e13c090e
runc version: 2f7393a47307a16f8cee44a37b262e8b81021e3e
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.4-moby
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.934 GiB
Name: moby
ID: 5GS5:CDLI:QBVM:CI6Q:7EZ3:3SXU:33E5:IBQQ:AWBX:H4WA:K3PU:L4UT
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 13
 Goroutines: 21
 System Time: 2017-02-05T18:55:34.4573341Z
 EventsListeners: 0
Registry: https://index.docker.io/v1/
Experimental: true
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

Test du bon fonctionnement de l'installation

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
78445dd45222: Pulling fs layer
78445dd45222: Verifying Checksum
78445dd45222: Download complete
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

jeudi 02 février 2017

:: Vim ::

Principales commandes

Commande Sens Type Effet
h déplacement déplace le curseur vers la gauche
j déplacement déplace le curseur vers le bas
k déplacement déplace le curseur vers le haut
l déplacement déplace le curseur vers la droite
w word déplacement avance d'un mot
b back déplacement recule d'un mot
e end déplacement avance jusqu'à la fin d'un mot
W déplacement avance d'un MOT
B déplacement recule d'un MOT
E déplacement avance jusqu'à la fin d'un MOT
fx forward déplacement avance jusqu'au prochain x
Fx déplacement recule jusqu'au x précédent
tx déplacement avance jusqu'à juste avant le prochain x
Tx déplacement recule jusqu'à juste après le x précédent
gg déplacement va au début du texte
G déplacement va à la fin du texte
$ déplacement va à la fin de la ligne
0 déplacement va au début de la ligne
{ déplacement va au début du paragraphe
} déplacement va à la fin du paragraphe
( déplacement va au début de la phrase
) déplacement va à la fin de la phrase
n next déplacement continue une recherche
N déplacement continue une recherche, en sens inverse
u undo annule la dernière action
Ctrl-R redo refait la dernière action annulée
. redo répète la dernière opération
x supprime un caractère vers la droite (« delete »)
X supprime un caractère vers la gauche (« backspace »)
s substitute supprime un caractère et passe en mode insertion
rx replace remplace un caractère par x
p paste colle un registre après le curseur
P colle un registre avant le curseur
~ passe un caractère de majuscule en minuscule ou l'inverse
/ fais une recherche
? fais une recherche vers l'arrière
* cherche le mot sous le curseur
# cherche le mot sous le curseur vers l'arrière
d delete action supprime
c change action supprime et passe en mode insertion
y yank action copie dans un registre
gu action passe en minuscules
gU action passe en majuscules
g? action passe en rot13
< action décale vers la gauche
> action décale vers la droite
gq action recoupe les lignes
= action met en forme un programme
" x sélectionne le registre x
m x pose la marque x
' x déplacement va à la marque x (par ligne)
` x déplacement va à la marque x (par caractère)

Ligne de commande

Commande Abbréviation Effet
:write :w sauve le fichier en cours d'édition
:write fichier :w écrit le texte dans le fichier indiqué
:saveas fichier :sav sauve le fichier sous un nouveau nom
:edit fichier :ed édite un nouveau fichier
:quit :q quitte
:exit :x sauve si nécessaire et quitte
:wq sauve et quitte
:help :he affiche l'aide en ligne
:split sépare le fenêtre actuelle en deux parties
:split fichier.log sépare la fenêtre et édite fichier.log

Options

Option Abbréviation Effet
:set number :se nu affiche les numéros de ligne
:set nonumber :se nonu enlève les numéros de ligne
:set incsearch définit la recherche incrémentiel (le recherche démarre au 1er caractère tapé)
:set hlsearch mise en valeur des termes recherchés (highlight)
:set paste option de collage de texte sans modification
:set nopaste désactivation de l'option de collage de texte sans modification

Modes

Commande Sens Type Effet
i insert passe en mode insertion
a append passe en mode insertion en faisant avancer le curseur
o open passe en mode insertion en créant une nouvelle ligne sous le curseur
O open passe en mode insertion en créant une nouvelle ligne au dessus du curseur
R replace passe en mode remplacement
A passe en mode insertion en allant à la fin de la ligne
I passe en mode insertion en allant au début de la ligne
v visual passe en mode visuel
V passe en mode visuel par ligne
Ctrl-V passe en mode visuel par bloc