Logo carnetderootxzz@carnetderoot.net"La simplicité est la sophistication suprême" - Léonard De Vinci
vendredi 23 avril 2021

:: 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 Dancer

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.

$ sudo useradd starman

Brewing Perl

Afin de séparer la distribution Perl installée sur le système 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.33.2   
       perl-5.32.0   
       perl-5.30.3   
       [...]
  • Installation

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

    1. Lister les versions installées :

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

      $ perlbrew available
         perl-5.33.2   
      i  perl-5.32.0   
         perl-5.30.3   
         [...]
  • Utilisation

    1. Pour cette session uniquement

      $ perlbrew use perl-5.32.0
    2. Comme version par défaut à l'ouverture de session

      $ perlbrew switch perl-5.32.0

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 gen -a MonApp

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

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

$ cd MonApp/
$ 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.32.0/bin/starman --listen 127.0.0.1:5001 --env development --daemonize /home/starman/apps/MonApp/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 pacman -S nginx

$ sudo vi /etc/nginx/nginx.conf
[...]
server {
    listen       80;
    server_name  www;

    access_log  /var/log/www.access.log;
    error_log   /var/log/www.error.log info;

    location / {
        try_files $uri @proxy;
        access_log off;
        expires max;
    }

    # proxy to Starman listening on 127.0.0.1:5001
    #
    location @proxy {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass       http://127.0.0.1:5001;
    }
}

mercredi 03 février 2021

:: Gestion des versions de Perl avec Perlbrew ::

Installation

$ curl -kL http://install.perlbrew.pl | bash

Ou, si vous préférez utiliser wget :

$ wget --no-check-certificate -O - https://install.perlbrew.pl | bash

Configuration

Editer le fichier .bashrc

$ vi ~/.bashrc

Et ajouter la ligne suivante à la fin du fichier :

# Perlbrew
source ~/perl5/perlbrew/etc/bashrc

Puis charger le nouvel environnement :

$ . ~/.bashrc

Gestion des versions de Perl

Initialisation

$ perlbrew init

Versions disponibles

$ perlbrew available
perl-5.33.6   
perl-5.32.1   
perl-5.30.3   
perl-5.28.3   
perl-5.26.3   
perl-5.24.4   
perl-5.22.4   
perl-5.20.3   
perl-5.18.4   
perl-5.16.3   
[...]

Versions installées

$ perlbrew list
* perl-5.22.0
perl-5.21.6
perl-5.20.1
perl-5.18.4   
perl-5.16.3   

Installation d'une version particulière

$ perlbrew install 5.32.1
Installing /home/starman/perl5/perlbrew/build/perl-5.32.1/perl-5.32.1 into ~/perl5/perlbrew/perls/perl-5.32.1

This could take a while. You can run the following command on another shell to track the status:

  tail -f ~/perl5/perlbrew/build.perl-5.32.1.log

Mise à jour vers la dernière version mineure (ici 5.22.0 vers 5.22.4)

Script upgrade-perl

$ perlbrew upgrade-perl
Upgrading perl-5.22.0 to 5.22.4
Fetching perl 5.22.4 as /home/starman/perl5/perlbrew/dists/perl-5.22.4.tar.bz2
Download http://www.cpan.org/src/5.0/perl-5.22.4.tar.bz2 to /home/starman/perl5/perlbrew/dists/perl-5.22.4.tar.bz2
Installing /home/starman/perl5/perlbrew/build/perl-5.22.4 into ~/perl5/perlbrew/perls/perl-5.22.0

This could take a while. You can run the following command on another shell to track the status:

  tail -f ~/perl5/perlbrew/build.perl-5.22.4.log

Vérification de la mise à jour

$ perlbrew list
perl-5.32.1
* perl-5.22.0 (5.22.4)
perl-5.21.6
perl-5.20.1
perl-5.18.4   
perl-5.16.3   

Utilisation d'une version particulière de perl

De manière permanente

$ perlbrew switch perl-5.32.1

Uniquement dans le shell courant

$ perlbrew use perl-5.32.1

Arrêt de perlbrew et retour au perl système

$ parlbrew off

Démarrage de perlbrew : commandes switch or use

$ perlbrew switch perl-5.32.1
$ perlbrew use perl-5.32.1

Tester un script sur toutes les versions de perl installées

$ perlbrew exec perl monscript.pl
$ perlbrew exec -- perl -E 'say $]'

Accéder à l'aide

$ perlbrew help

Utilisation dans un script bash

Pour utiliser perlbrew dans un script, il faut definir PERLBREW_ROOT et PERLBREW_HOME avant de charger l'environnement bashrc.

#!/bin/bash

## Variables d'environnement requises
export PERLBREW_ROOT=/opt/perlbrew
export PERLBREW_HOME=/tmp/.perlbrew
source ${PERLBREW_ROOT}/etc/bashrc

## Utilisation de la version 5.14.1
perlbrew use 5.14.1
perl /app/mon-application

## Utilisation de la version 5.12.3
perlbrew use 5.12.3
perl /app/mon-application

Gestion des modules CPAN

Installation d'un client CPAN

Pour installer des modules CPAN additionnels, on utilisera cpanm, une alternative à cpan offrant une meilleure compatibilité avec perlbrew.

La méthode habituelle d'installation (cpan -i App::cpanminus) installe bien cpanm, mais uniquement dans l'environnement perlbrew utilisé. Dans ce cas, si on en change, plus de cpanm ('cpanm is not found'...).

Afin d'éviter ce désagrément, Perlbrew fournit un script pour installer cpanm sous ~/perl5/perlbrew/bin, il sera ainsi disponible quelque soit la version de Perl utilisée.

$ perlbrew install-cpanm

Installation de modules

$ cpanm List::Util

Lister les modules installés

$ perlbrew list-modules

Mettre à jour les modules installés

$ perlbrew list-modules | perlbrew exec cpanm

Migrer les modules installés dans la version de perl courante vers une autre (ici 5.16.3).

$ perlbrew list-modules | perlbrew exec --with perl-5.16.3 cpanm

Références


dimanche 30 août 2015

:: Dancer - Exemples ::

Exemple d'ouverture de session

post '/login' => {
    if ( params->{user} eq 'foo' && params->{passwd} eq 'bar' ) {
        session user => params->{user};
        redirect params->{path} || '/';
    } else {
        redirect '/login?failed=1';
    }
};

mercredi 10 juin 2015

:: Gestion des dates (localtime) ::

Astuces

Calcul de dates

Date du jour

my ($sec,$min,$heure,$jmois,$mois,$annee,$jsem,$jcal,$ete) = localtime(time)

Date de la veille

my ($sec,$min,$heure,$jmois,$mois,$annee,$jsem,$jcal,$ete) = localtime(time-3600*24);

dimanche 03 mai 2015

:: CPAN ::

Utilisation

Mode interactif (shell cpan)

$ perl -MCPAN -e shell

Mode commande

$ cpan

Script Perl

CPAN::Shell->install("Module::Name") ;

Commandes basiques

Shell CPAN

cpan> install Module::Name          # Installe le module "Module::Name"
cpan> r [Module/RegExp]             # Liste les mises à jours de modules disponibles
cpan> upgrade [Module/RegExp]       # Installe les mises à jours de modules disponibles

Références


vendredi 25 juillet 2014

:: Opérateurs de test ::

Réf : https://www.cs.cf.ac.uk/Dave/PERL/node69.html

Tests sur fichiers

Tableau des opérateurs
Opérateur Test
-d test si l'opérande est un répertoire
-r fichier accessible en lecture
-w fichier accessible en écriture
-x fichier exécutable
-o fichier possédé par la personne qui exécute le script
-e fichier existant
-z fichier de taille nulle
-s taille du fichier
-M âge du fichier en jours à partir de la date d'exécution du script