xzz@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.
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)
Lister les versions installées :
$ perlbrew list
perl-5.32.0
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
Pour cette session uniquement
$ perlbrew use perl-5.32.0
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
$ 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
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).
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