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].
Ensuite, il faut quelques lignes de magie pour gérer les URL générées par Dotclear, ajoutées à la fin de /etc/nginx/fastcgi_params.conf :
fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
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$ { try_files $uri =404; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; #le nom exact de ce fichier dépend de votre distribution (ici Ubuntu 18.04) ! fastcgi_index index.php; include /etc/nginx/fastcgi_params; }
À 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, en la laissant en query_string, 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 { # Pseudo PATH_INFO dotclear reste configure en QUERY_STRING 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$ { try_files $uri =404; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; #le nom exact de ce fichier dépend de votre distribution (ici Ubuntu 18.04) ! fastcgi_index index.php; include /etc/nginx/fastcgi_params; 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 { # Pseudo PATH_INFO dotclear reste configure en QUERY_STRING 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$ { try_files $uri =404; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_index index.php; 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 { # Pseudo PATH_INFO dotclear reste configure en QUERY_STRING 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