Mot-clé - FastCGI

Fil des billets

Lundi 19 janvier 2015

Installation de Dotclear sous openSUSE (bis)

Il y a quelques années, j'avais écrit un billet sur l'installation de Dotclear en local.

Nous allons donc revoir la procédure de A à Z, en changeant cette fois-ci de serveur Web, et de système de base de données.

Les prérequis sont :

  • Un serveur HTTP
  • Une base de données
  • PHP >= 5.2

Lire la suite...

mercredi 23 novembre 2011

Présentation du micro-framework Flask

logo framework Flask

Ce billet constitue une présentation du framework, Flask. Il permet de créer rapidement et très simplement des applications Web (blog, forum, etc.).

Par la suite d'autres billets seront publiés pour présenter d'une manière plus approfondi quelques unes de ses caractéristiques.

Lire la suite...

samedi 13 août 2011

Installation de Dotclear en local, sous openSUSE

logo openSUSE logo de Dotclear

Pour célébrer les huit ans de Dotclear, j'en profite donc pour présenter une méthode pour installer ce fabuleux système de blog sur son ordinateur en « local ».

Pré-requis

  • Un serveur Web, Lighttpd
  • PHP5 avec le module FastCGI (indispensable) ou PHP-FPM
  • SQLite [1] (installez bien le module PHP pour cette base de données)

Tous ces composants ont été installés via zypper (vous pouvez très bien passer par Yast2).

Régler le daemon

Comme il s'agit de mon ordinateur de bureau, je n'ai pas l'intention de le lancer à chaque démarrage, il sera utilisé ponctuellement.

# chkconfig --list | grep lighttpd
lighttpd                  0:off  1:off  2:off  3:on   4:off  5:on   6:off

On constate qu'il est activé lorsque le système est en mode multi-users (numéros 3 et 5).

Nous allons donc désactiver ce service

# chkconfig --del lighttpd
# chkconfig --list | grep lighttpd
lighttpd                  0:off  1:off  2:off  3:off   4:off  5:off   6:off

Désormais, on le lancera de cette manière :

# /etc/init.d/lighttpd start

Configuration du serveur

Dans cette partie, nous allons modifier (légèrement) le comportement par défaut de Lighttpd.

Le fichier principale s'appelle lighttpd.conf, il est situé dans /etc/lighttpd.

J'ai modifié la valeur des variables server_root , server.use-ipv6 et server.bind.

[...]
var.server_root = "/usr/www"

[...]
##
## Use IPv6?
##
server.use-ipv6 = "disable"

##
## bind to a specific IP
##
server.bind = "127.0.0.1"

[...]

Il reste à créer les répertoires /usr/www/htdocs :

# mkdir -p /usr/www/htdocs
# cd /usr/www ; chown -R lighttpd:lighttpd .

Ensuite, on va autoriser le listing des répertoires situés dans server_root, il faut modifier le fichier /etc/lighttpd/conf.d/dirlisting.conf

[...]
##
## Enabled Directory listing
##
dir-listing.activate      = "enable"
 
##
## Hide dot files from the listing?
## By default they are listed.
##
dir-listing.hide-dotfiles = "enable"

Pour une question de facilité, on va activer le module userdir, il faut décommenter la ligne correspondante dans le fichier /etc/lighttpd/modules.conf :

[...]

##
## mod_userdir
##
include "conf.d/userdir.conf"

[...]

Vous pouvez activer la variable userdir.exclude-user dans le fichier /etc/lighttpd/conf.d/userdir.conf

[...]
userdir.exclude-user = ( "root" )

[...]

Il nous reste plus qu'à créer le dossier public_html/ pour chaque utilisateur.

% mkdir ~/public_html

Vous pouvez maintenant tester le serveur.

PHP

Nous allons utilisé PHP avec le module FastCGI.

On va rechercher le nom exacte de ce binaire :

% ls /usr/bin/php* | grep cgi
/usr/bin/php-cgi   **
/usr/bin/php-cgi5

** : Il s'agit d'un lien symbolique vers /etc/alternatives/php-cgi, donc on l'oublie (vérifiez tout de même avec ls -l /usr/bin/php-cgi*).

On va rajouter ce module au démarrage du serveur, grâce au fichier /etc/lighttpd/modules.conf

[...]
##
## FastCGI (mod_fastcgi)
##
include "conf.d/fastcgi.conf"

[...]

Il ne nous reste plus qu'à rajouter une directive dans le fichier /etc/lighttpd/conf.d/fastcgi.conf :

[...]

fastcgi.server = ( ".php" =>
     ( "localhost" =>
         (
         "socket" => socket_dir + "/php-fastcgi-0.socket",
         "bin-path" => "/usr/bin/php-cgi5",
         "max-procs" => 1,
         "check-local" => "disable"
         )
     )
)

[...]

On peut relancer notre serveur.

Ici on utilise un socket UNIX, mais on peut très bien utiliser un socket utilisant la pile TCP/IP.

Installation de Dotclear

1. Téléchargez et installez le dans le dossier public_html/.

2. Il faut rendre accessible en écriture le répertoire cache/ :

% chmod a+w dotclear/cache

3. On va créer le « fichier » de la base de données (uniquement pour SQLite)

% touch db/database.db ; chmod a+w db/database.db
% chmod a+w db/

Vous pouvez donner un autre nom, ceci est un exemple.

4. On copie le fichier inc/config.php.in en inc/config.php et on l'édite. Les variables à modifier sont :

  • DC_DBDRIVER
  • DC_DBNAME (mettre le chemin complet depuis la racine du fichier du §3)
  • DC_MASTER_KEY

On termine l'installation en faisant pointer notre navigateur vers http://127.0.0.1/dotclear/admin/install/

Finaliser la configuration du serveur

On va empêcher le listing de la base de données, dans le fichier /etc/lighttpd/conf.d/dirlisting.conf on va rajouter une expression régulière à la variable dir-listing.exclude :

[...]

##
## list of regular expressions. Files that match any of the specified
## regular expressions will be excluded from directory listings.
##
dir-listing.exclude       = ( "~$", ".+\.db$" )

[...]

On va également interdir l'accès (depuis un navigateur) aux répertoires dotclear/db/ et dotclear/admin/install/. Pour cela il faut activer le module, mod_access (via le fichier /etc/lighttpd/modules.conf).

Dans le fichier /etc/lighttpd/lighttpd.conf on rajoute ces lignes :

[...]

##
## deny access to dotclear/db/ and dotclear/admin/install/
$HTTP["url"] =~ "(/db/|/install/)" {
     url.access-deny = ( "" )
}

On va empêcher le listing du répertoire public/, où sont stockés les médias tels que les images, les vidéos, etc. Dans le fichier /etc/lighttpd/conf.d/dirlisting.conf on rajoute ces lignes :

[...]

##
## Disable listin into public/ directory
$HTTP["url"] =~ "/public/" {
     dir-listing.activate = "disable"
}

[...]

Maintenant vous pouvez passer des heures à configurer votre blog.

Notes

[1] Je n'avais pas envie de passer du temps à configurer MySQL ou PostgreSQL.