Je ne détaillerai pas ici l’installation même du serveur, mais bien la part de configuration qui concerne Dotclear. Il existe de nombreux tutoriels pour installer et configurer un serveur dit LEMP[1].
Mise en place
Vous devez avoir installé Nginx, un serveur de base de données (MySQL ou son clone libre MariaDB, PostgreSQL ou, si vous êtes joueur, SQLite), et PHP-FPM[2].
Puis, dans le fichier qui gère l’hôte de votre Dotclear, quelques règles de sécurité (Nginx ne tient pas compte des .htaccess livrés dans Dotclear)
location ~ /dotclear/(inc|cache|db|plugins|var) { #on interdit l’accès direct aux dossiers protégés de Dotclear deny all; access_log off; log_not_found off; }
et, bien sûr, les instructions pour faire traiter le php par php-fpm
location ~ [^/]\.php(/|$) { # l’expression régulière permet de prendre en compte les urls en path_info include snippets/fastcgi-php.conf; # récupère la configuration standard pour gérer les pages php fastcgi_pass unix:/var/run/php/php-fpm.sock; # le nom exact de ce fichier dépend de votre distribution ! }
À partir de là, installez Dotclear et votrejolisite.com/dotclear/index.php? pourra afficher votre page d’accueil ! On va pouvoir affiner.
Rediriger depuis la racine
Si vous souhaitez que Dotclear s’affiche à la racine de votre site, il n’est pas nécessaire d’y ajouter un index.php[3]. Vous pouvez définir comme url http://votrejolisite.com/ et définir la méthode de lecture de l’url en PATH_INFO, puis ajouter ces lignes de réécriture dans la configuration Nginx :
location / { try_files $uri $uri/ @dotclear_path_info; # vérifier si le fichier ou dossier existe, et sinon, renvoyer le traitement à Dotclear } location @dotclear_path_info { rewrite ^/index.php /dotclear/index.php last; rewrite ^/(.*) /dotclear/index.php/$1; }
Multi-blogs
Pour une installation multi-blogs, on peut utiliser aussi la réécriture d’URL si on ne souhaite pas créer un dossier par blog, en utilisant la constante DC_BLOG_ID
, définie dans l’index.php de Dotclear si elle n’a pas été définie ailleurs. Il faut simplement ajouter un paramètre fastcgi qui sera envoyé à PHP.
location ~ [^/]\.php(/|$) { include snippets/fastcgi-php.conf; # récupère la configuration standard pour gérer les pages php fastcgi_pass unix:/var/run/php/php-fpm.sock; # le nom exact de ce fichier dépend de votre distribution fastcgi_param DC_BLOG_ID $dotclear_id; # identifiant du blog Dotclear qu’on veut appeler }
Et ensuite, on n’a plus qu’à définir $dotclear_id
à chaque location
correspondant à un blog du multi-blog.
location / { set @dotclear_id default; try_files $uri $uri/ @dotclear_path_info; # vérifier si le fichier ou dossier existe, et sinon, renvoyer le traitement à Dotclear } location /blog1 { set @dotclear_id blog1; try_files $uri $uri/ @dotclear_path_info; # vérifier si le fichier ou dossier existe, et sinon, renvoyer le traitement à Dotclear } #et on n’oublie pas toutes les redirections location @dotclear_path_info { rewrite ^/blog1/?(.*) /dotclear/index.php/$1 last; rewrite ^/index.php /dotclear/index.php/$1 last; rewrite ^/(.*) /dotclear/index.php/$1; }
Configuration complète exemple
Pour finir, un exemple de configuration, inspirée de celle qui fait fonctionner les sites des plugins de DotAddict.
server { listen 80; server_name example.org; root /var/www; #emplacement des fichiers du site sur le serveur index index.php /dotclear/index.php; access_log /var/log/www/example.log; error_log /var/log/www/example.log; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # Deny all attempts to config files such as .htaccess, .htpasswd location ~ /\.ht { deny all; access_log off; log_not_found off; } location ~ /dotclear/(inc|cache|db|plugins|var) { #on interdit l’accès direct aux dossiers protégés de Dotclear deny all; access_log off; log_not_found off; } location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ { #optimisation du cache pour les images et feuilles de style expires max; log_not_found off; } location ~ [^/]\.php(/|$) { include snippets/fastcgi-php.conf; # récupère la configuration standard pour gérer les pages php fastcgi_pass unix:/var/run/php/php-fpm.sock; fastcgi_param DC_BLOG_ID $dotclear_id; } location /dotclear { set $dotclear_id default; try_files $uri $uri/ =404; } location /blog1 { set $dotclear_id blog1; try_files $uri $uri/ @dotclear_path_info; } location /blog2 { set $dotclear_id blog2; try_files $uri $uri/ @dotclear_path_info; } location / { set $dotclear_id default; try_files $uri $uri/ @dotclear_path_info; } location @dotclear_path_info { rewrite ^/blog2/?(.*) /dotclear/index.php/$1 last; rewrite ^/blog1/?(.*) /dotclear/index.php/$1 last; rewrite ^/(.*) /dotclear/index.php/$1; } }
N’hésitez pas à partager vos propres astuces, j’éditerai cette fiche au besoin.
Commentaires