[Résolu] WordPress multisite en sous dossier

(Retour de mon message du précédent ‘forum’, qui avait été sauvagement mis au placard par un adepte des langues étranges et surtout non française! Mais on ne donnera pas son nom pour éviter une incontrôlable insurrection :smiley:)

Bonjour,

Après 3 jours de galère, toujours pas de multisite fonctionnel.

L’idée est simple:
Utiliser la fonctionnalité multisite de wordpress pour centraliser plusieurs blog sur une même instance de wordpress.
Ceci permettant de faciliter grandement la maintenance avec une seule base de donnée, une seule copie de wordpress et de ses plugins et thèmes.

Les étapes suivi pour le moment:
Ajout dans le fichier wp-config.php

// Multisite
define('WP_ALLOW_MULTISITE', true);

Ajout d’un utilisateur wordpress pour la mise en place du réseau.
Désactivation des plugins (ldap, d’où le 2e utilisateur!)

Activation du réseau.
Nouvel ajout dans le fichier wp-config.php

define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'crudelis-test.fr');
define('PATH_CURRENT_SITE', '/blog');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

A partir de là, les problèmes commencent. wordpress donne les règles de rewriting pour htaccess, pas pour nginx.

Après de multiples recherches, j’ai trouvé ces règles pour nginx:

location ~ ^/[_0-9a-zA-Z-]+/files/(.*)$ {
        try_files /wp-content/blogs.dir/$blogid/files/$2 /wp-includes/ms-files.php?file=$2 ;
        access_log off; log_not_found off; expires max;
}

#avoid php readfile()
location ^~ /blogs.dir {
        internal;
        alias /var/www/wordpress/wp-content/blogs.dir ;
        access_log off; log_not_found off;      expires max;
}

# Rewrite multisite '.../wp-.*' and '.../*.php'.
if (!-e $request_filename) {
    rewrite /wp-admin$ $scheme://$host$uri/ permanent;
    rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
    rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}

Ajoutées au fichier /etc/nginx/conf.d/crudelis-test.fr.d/wordpress.conf

Mais à partir de là, je tourne en rond. Le blog principal fonctionne, mais tout sous-blog abouti au SSO sans message d’erreur dans le log de nginx.
J’ai trituré un peu ces règles de rewriting, mais les regex ne sont pas ma tasse de thé et je connais peu nginx.
De plus, j’ai le sentiment que tout ne se passe pas dans ce fichier de conf.

En espérant qu’avec de l’aide je parviendrais à faire avancer ce problème pour que tout le monde puisse en profiter par la suite.

Quelles sont les URLs auxquelles tu tentes d’accéder (et qui sont redirigées vers le SSO) ?

Peux-tu commenter les deux lignes qui commencent par access_by_lua_file dans ton fichier /etc/nginx/conf.d/crudelis-test.fr.conf. Ça aura pour effet de désactiver le SSO pour ce domaine, et tu pourras débugguer tranquillement la conf nginx après.

Une fois la configuration Nginx fonctionnelle, il faudra que tu joues avec la configuration du SSO, notamment gérer la déprotection de certaines routes :
https://github.com/Kloadut/SSOwat#skipped_regex

Je reprendrais les tests plus tard. Pour le moment, l’activation du réseau sur le wordpress ynh ne fonctionne pas du tout. Je ferais un test depuis une webapp vide.

J’ai repris depuis une webapp avec wordpress 4.0

Commenté les 2 lignes access_by_lua_file.

Et à présent, j’ai un 404 partout…
Ma conf nginx est la suivante:

# WordPress multisite subdirectory rules.
# Designed to be included in any server {} block.

# This order might seem weird - this is attempted to match last if rules below fail.
# http://wiki.nginx.org/HttpCoreModule
##location / {
   location /site {
    try_files $uri $uri/ /index.php?$args;
        alias /var/www/my_webapp/;
        index index.php index.html index.htm;
        default_type text/html;

  # Include SSOWAT user panel.
#  include conf.d/yunohost_panel.conf.inc;

}

# Directives to send expires headers and turn off 404 error logging.
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 24h;
    log_not_found off;
}

#location ~ ^/[_0-9a-zA-Z-]+/files/(.*)$ {
#        try_files /wp-content/blogs.dir/$blogid/files/$2 /wp-includes/ms-files.php?file=$2 ;
#        access_log off; log_not_found off; expires max;
#}

#avoid php readfile()
location ^~ /blogs.dir {
        internal;
        alias /var/www/example.com/htdocs/wp-content/blogs.dir ;
        access_log off; log_not_found off;      expires max;
}

# Rewrite multisite '.../wp-.*' and '.../*.php'.
if (!-e $request_filename) {
    rewrite /wp-admin$ $scheme://$host$uri/ permanent;
    rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
    rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}

# Pass all .php files onto a php-fpm/php-fcgi server.
##location ~ \.php$ {
   location ~ [^/]\.php(/|$) {

    # Zero-day exploit defense.
    # http://forum.nginx.org/read.php?2,88845,page=3
    # Won't work properly (404 error) if the file is not stored on this server, which is entirely possible with php-fpm/php-fcgi.
    # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on another machine.  And then cross your fingers that you won't get hacked.
    try_files $uri =404;

##    fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_split_path_info ^(.+?\.php)(/.*)$;

    #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

    include fastcgi_params;
    fastcgi_index index.php;

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           fastcgi_param  REMOTE_USER $remote_user;
           fastcgi_param  PATH_INFO $fastcgi_path_info;
#    fastcgi_intercept_errors on;
##    fastcgi_pass php;
           fastcgi_pass unix:/var/run/php5-fpm.sock;

}

Conf tirée de [wordpress][1].

Toutefois, je ne peux prétendre comprendre totalement cette configuration, que je me contente pour le moment d’appliquer bêtement.

Je n’ai aucune entrée dans le log. Mais en décommentant les 2 lignes access_by_lua_file, je constate que même le site principal ne fonctionne plus.
La conf nginx est bancale, sans doute parce qu’elle concerne un site placé à la racine du domaine (ce qui est pourtant un cas particulier de wordpress!).

Je reprendrais plus tard. Pour le moment, c’est un échec total…
[1]: http://codex.wordpress.org/Nginx#WordPress_Multisite_Subdirectory_rules

Bon, j’ai réussi à faire fonctionner un multisite en modifiant la config nginx à partir de celle de l’app yunohost.

En revanche, l’activation du réseau ne fonctionne pas sur l’app ynh. J’ai été obligé de procéder à partir d’une webapp vierge.

Je vais forker l’app ynh pour faire une version multisite. Affaire à suivre donc…

Merci, cett app Wordpress multisites m’intéresse grandement aussi :slight_smile: Est-elle déjà forkée ?
Merci

L’app est forkée,


Mais pour le moment, je n’ai travaillé qu’en local, je vais tenter un PR (mais github n’est pas mon ami…)

Il me reste quelques incursions dans la bdd à faire et 1 ou 2 appel curl et ce sera terminé. J’espère boucler ça dimanche.

A terme, je voudrais merger avec l’app wordpress normale et proposer ça comme une simple option dans le manifest.

Après quelques complications, notamment avec curl, finalement remplacé par wp-cli, j’ai enfin réussi à packager wordpress en multisite \o/

Je n’ai plus que quelques modif à faire sur le script d’upgrade et tout sera ok.

Le package se comporte simplement comme le package initial, a l’exception d’une option dans le manifest permettant de passer le wordpress en multisite à la fin de l’installation.

scith, n’hésite pas à tester et me dire si cela te convient :wink:

Merci mais il me met “app_install_custom_no_manifest” quand j’essaye d’installer depuis le git pour le moment

Erreur récurrente avec moi, la virgule rebelle qui se balade dans le manifest!
J’utilise toujours un manifest avec des valeurs par défaut, et chaque fois je me fais avoir quand je le nettoie…

C’est réglé :wink:

Merci ! L’install a marché sur ma VM mais j’avais une petite question avant de le lancer en prod : comment gères-tu les redirections de domaine ? Sur mon install actuelle, le multisite est à la racine et il redirige les domaines tout seul.
Faut-il avoir les domaines enregistrés dans YunoHost ?

Bonne remarque, c’est un point que j’oublie souvent.
Le multisite est configuré en sous-dossier, pas en sous-domaine. Je n’ai jamais utilisé le multisite en sous-domaine avec wordpress, je n’ai aucune idée de son fonctionnement.

Mais à mon avis, les sous domaines doivent passer sans problème avec yunohost.

Je pense que pour passer en sous domaine, il suffit d’ajouter l’option --subdomains à l’exécution de wp-cli et passer define(‘SUBDOMAIN_INSTALL’, false); à true.
Par contre, les règles de réécriture devront peut-être être changées…
Dans un premier temps, je ne peux que te conseiller d’essayer en téléchargeant le package et en le modifiant.

Si ça ne soulève pas trop de problème, ça devrait se faire rapidement.
Si tu as le coeur à l’ouvrage, je mergerais les modif sur github :wink:

J’ai essayé brièvement une installation en sous-domaine. Ce n’est pas si simple…

Voilà quelques notes de mon expérience:

  • L’installation initiale de wordpress doit être faite à la racine du domaine, ce qui empêchera l’installation d’autres app sur le domaine concerné. L’usage d’un sous-dossier interdit l’installation en sous domaine par la suite.
  • Le fichier wp-config n’est changé qu’à la ligne ‘define(‘SUBDOMAIN_INSTALL’, true);’
  • Les règles de réécriture htaccess sont différentes, ce qui implique de devoir retrouver leur équivalent pour nginx…
  • Chaque sous domaine ajouté avec wordpress semble devoir être ajouté également à Yunohost.
  • Mais dés lors, nginx ne trouve plus de fichier de config pour wordpress dans le dossier sous.domaine.tld correspondant.
  • Au final, les blogs supplémentaires ne sont pas accessibles

Au vue de mes tests (succincts), l’installation en sous-domaine ne fonctionne pas en l’état actuel.

Bonjour, je suis nouveau et je recherche un tuto pour installer wordpress multisite.
j’ai un vps et je ne sais pas ou installer ceci, sur le vps, dans wordpress ou et comment:


si un contributeur a un tuto détaillé, je suis intéressé
merci

Si tu as un VPS sur lequel est installé Yunohost, il suffit d’installer cette version de wordpress comme n’importe quelle autre application Yunohost.

Salut, j’ai tenté de l’installer sur Debian 8 mais j’arrive sur une page blanche. Je ne vois aucune erreur dans le log d’install ou autre. Penses-tu qu’il puisse y avoir un changement qui a tout chamboulé ?

Salut,

La mise à jour de debian 8 peut potentiellement modifier beaucoup de choses. C’est difficile d’en juger sans logs. As-tu regardé le log d’erreur de nginx?

EDIT: Sur une debian 7, tout semble fonctionner normalement, je viens de tester.

Merci, en fait ça marche sur ma machine de test aussi, je vais refaire ma machine de prod un de ces 4 elle commence à être abimée de part mon manque de rigueur :smile:
Du coup vu que les blogs sont en URL plutôt que sous-domaine, gères-tu plusieurs noms de domaine ?

Je n’ai pas compris ta dernière question.

Je suppose que l’un des intérêts du multisite (pour moi en tout cas ?) c’est d’administrer plusieurs blogs qui sont plutôt indépendants les uns des autres (différentes adresses par exemple).
Sur mon hébergement mutualisé j’ai mis WP multisite en sous-domaines et avec OVH je peux dire que blog1.domaine.tld redirige vers blog1.tld.

Mais quand WP multisite sépare domaine.tld/blog1 plutôt qu’en blog1.domaine.tld, est-il possible de le faire pointer vers blog1.tld ?