« Mediawiki configuration » : différence entre les versions

De Banane Atomic
Aller à la navigationAller à la recherche
 
(27 versions intermédiaires par le même utilisateur non affichées)
Ligne 28 : Ligne 28 :


= [https://www.mediawiki.org/wiki/Manual:Short_URL Pretty / Short URL] =
= [https://www.mediawiki.org/wiki/Manual:Short_URL Pretty / Short URL] =
Transforme les url « <nowiki>http://serveur/index.php?title=MonTitre</nowiki> » en « <nowiki>http://serveur/index.php/MonTitre</nowiki> »
Transform url from {{boxx|<nowiki>http://serveur/index.php?title=MyTitle</nowiki>}} to {{boxx|<nowiki>http://serveur/wiki/MyTitle</nowiki>}}
<filebox fn=LocalSettings.php lang=php>
 
# valeur par défaut
<filebox fn=LocalSettings.php>
$wgUsePathInfo =
$actions = array( 'edit', 'watch', 'unwatch', 'delete','revert', 'rollback',
( strpos( php_sapi_name(), 'cgi' ) === false ) &&
  'protect', 'unprotect', 'markpatrolled', 'render', 'submit', 'history', 'purge', 'info' );
( strpos( php_sapi_name(), 'apache2filter' ) === false ) &&
( strpos( php_sapi_name(), 'isapi' ) === false );
foreach ( $actions as $action ) {
  $wgActionPaths[$action] = "/wiki/$action/$1";
}
$wgActionPaths['view'] = "/wiki/$1";
$wgArticlePath = $wgActionPaths['view'];
</filebox>


# forcer l'utilisation des url classiques
<filebox fn='/etc/nginx/sites-available/mediawiki.conf' lang='nginx'>
$wgUsePathInfo = false;
location /wiki/ {
    rewrite ^/wiki/(?<pagename>.*)$ /index.php;
}
</filebox>


# définir le format de la pretty url, devra être couplé avec une règle de réécriture
<filebox fn='/etc/apache2/sites-available/mediawiki.conf' lang='apache'>
$wgArticlePath = "/wiki/$1";
<Directory /var/www/mediawiki>
    RewriteEngine      On
    # Short URL for wiki pages
    RewriteRule        ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/index.php [L]
    # Redirect / to Main Page
    RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]
</Directory>m
</filebox>
</filebox>


Ligne 49 : Ligne 63 :
= Du code HTML dans les pages =
= Du code HTML dans les pages =
Pour activer l'utilisation de balises HTML autre que [http://meta.wikimedia.org/wiki/Help:HTML_in_wikitext celles prévues par défaut]
Pour activer l'utilisation de balises HTML autre que [http://meta.wikimedia.org/wiki/Help:HTML_in_wikitext celles prévues par défaut]
<filebox fn=LocalSettings.php lang="php">
<filebox fn=LocalSettings.php>
$wgRawHtml = true;
$wgRawHtml = true;
</filebox>
= [https://www.mediawiki.org/wiki/InstantCommons InstantCommons] =
Allows to use images from Wikimedia Commons.
<filebox fn=LocalSettings.php>
$wgUseInstantCommons = true;
</filebox>
</filebox>


= [https://www.mediawiki.org/wiki/Manual:User_rights Droits utilisateurs] =
= [https://www.mediawiki.org/wiki/Manual:User_rights Droits utilisateurs] =
* [[Spécial:Permissions|Changer les droits utilisateur]]
* [http://www.mediawiki.org/wiki/Manual:Preventing_access Preventing access]
<filebox fn=LocalSettings.php lang=php>
<filebox fn=LocalSettings.php lang=php>
# Interdit l'édition de pages aux utilisateurs non-connectés
# Interdit l'édition de pages aux utilisateurs non-connectés
Ligne 73 : Ligne 95 :
$wgGroupPermissions['user']['undelete'] = true;
$wgGroupPermissions['user']['undelete'] = true;


# Autorise les utilisateurs loggués à modifier la page MediaWiki:Sidebar
# Autorise les utilisateurs loggués à modifier les droits utilisateur
$wgGroupPermissions['user']['editinterface'] = true;
$wgGroupPermissions['user']['userrights'] = true;




Ligne 85 : Ligne 107 :
$wgWhitelistRead = array ("Special:Userlogin");
$wgWhitelistRead = array ("Special:Userlogin");
</filebox>
</filebox>
* [http://www.mediawiki.org/wiki/Manual:Preventing_access Preventing access]


= [https://www.mediawiki.org/wiki/Manual:Configuring_file_uploads Téléversement de fichiers media] =
= [https://www.mediawiki.org/wiki/Manual:Configuring_file_uploads Téléversement de fichiers media] =
Ligne 107 : Ligne 127 :
* [https://www.mediawiki.org/wiki/Manual:$wgMimeTypeBlacklist $wgMimeTypeBlacklist]
* [https://www.mediawiki.org/wiki/Manual:$wgMimeTypeBlacklist $wgMimeTypeBlacklist]


== SVG ==
== [https://www.mediawiki.org/wiki/Manual:Image_administration#SVG SVG] ==
<filebox fn=LocalSettings.php lang=php>
<filebox fn=LocalSettings.php lang=php>
# modifier le converter, par défaut ImageMagik (convert)
// Add svg and pdf to the allowed extensions (defaults are 'png', 'gif', 'jpg', 'jpeg', 'webp')
$wgSVGConverter = 'batik';
$wgFileExtensions = array_merge(
    $wgFileExtensions, [
        'svg', 'pdf'
    ]
);
</filebox>
</filebox>


<u>Attention :</u> un converter doit être installé sur le serveur pour permettre la convertion de l'image SVG en PNG pour le rendu.
{{warn | Firefox doesn’t support the letter-spacing property in SVGs, so turn the letters into a path to fix the issue. [https://theme.co/forum/t/image-cut-off-in-firefox-only/22654/7 <nowiki>[1]</nowiki>]}}
* ImageMagick (convert)
* Inkscape
* Java-batik
* librsvg (rsvg)
 
[http://www.mediawiki.org/wiki/Manual:Image_administration#SVG Image administration]<br>
[http://www.mediawiki.org/wiki/Manual:Errors_and_Symptoms#SVG Image Thumbnails not working]


== [https://www.mediawiki.org/wiki/Manual:MIME_type_detection L'extension du fichier « .* » ne correspond pas au type MIME détecté du fichier (*/*)] ==
== [https://www.mediawiki.org/wiki/Manual:MIME_type_detection L'extension du fichier « .* » ne correspond pas au type MIME détecté du fichier (*/*)] ==
Ligne 242 : Ligne 259 :
</filebox>
</filebox>


<filebox fn='skins/MonoBook/includes/MonoBookTemplate.php'>
<filebox fn='skins/MonoBook/templates/skin.mustache' lang='xml' collapsed>
$html .= $this->deprecatedHookHack( 'MonoBookAfterContent' );  // line 90
<div class="visualClear"> <!-- line 24 -->
// placer cactions et personal hors de column-one
   
$html .= $this->getCactions();
    <!-- NEW PLACE outside of column-one -->
$html .= $this->getBox( 'personal', $this->getPersonalTools(), 'personaltools' );
        {{#data-portlets}}
//
        <div role="navigation" class="portlet" id="p-cactions" aria-labelledby="p-cactions-label">
$html .= Html::closeElement( 'div' );
            <h3 id="p-cactions-label" {{{html-user-language-attributes}}}>{{msg-monobook-cactions-label}}</h3>
            <div class="pBody">
                <ul {{{html-user-language-attributes}}}>
                {{! comments used to avoid additional whitespace}}
                {{{data-namespaces.html-items}}}{{!
                }}{{{data-views.html-items}}}{{!
                }}{{{data-actions.html-items}}}
                {{{data-variants.html-items}}}
                </ul>
            </div>
        </div>
        {{#data-cactions-mobile}}{{>Portlet}}{{/data-cactions-mobile}}
        {{#data-personal}}
        <div role="navigation" class="portlet" id="{{id}}" aria-labelledby="{{id}}-label">
            <h3 id="{{id}}-label" {{{html-user-language-attributes}}}>{{label}}</h3>
            <div class="pBody">
                <ul {{{html-user-language-attributes}}}>
                {{{html-items}}}
                </ul>
            </div>
        </div>
        {{/data-personal}}
        {{/data-portlets}}
    <!-- NEW PLACE outside of column-one -->
   
    </div>
</div>
<div id="column-one" {{{html-user-language-attributes}}}>
    <!--{{#data-portlets}}-->
    <h2>{{msg-navigation-heading}}</h2>


// ...
    <!-- MOVED outside of column-one
    <div role="navigation" class="portlet" id="p-cactions" aria-labelledby="p-cactions-label">
        <h3 id="p-cactions-label" {{{html-user-language-attributes}}}>{{msg-monobook-cactions-label}}</h3>
        <div class="pBody">
            <ul {{{html-user-language-attributes}}}>
            {{! comments used to avoid additional whitespace}}
            {{{data-namespaces.html-items}}}{{!
            }}{{{data-views.html-items}}}{{!
            }}{{{data-actions.html-items}}}
            {{{data-variants.html-items}}}
            </ul>
        </div>
    </div>
    {{#data-cactions-mobile}}{{>Portlet}}{{/data-cactions-mobile}}
    {{#data-personal}}
    <div role="navigation" class="portlet" id="{{id}}" aria-labelledby="{{id}}-label">
        <h3 id="{{id}}-label" {{{html-user-language-attributes}}}>{{label}}</h3>
        <div class="pBody">
            <ul {{{html-user-language-attributes}}}>
            {{{html-items}}}
            </ul>
        </div>
    </div>
    {{/data-personal}}
    -->


Html::element( 'h2', [], $this->getMsg( 'navigation-heading' )->text() ) .  // line 99 - 103
    <div class="portlet" id="p-logo" role="banner">
// déplacer cactions et personal hors de column-one
        <a href="{{link-mainpage}}" class="mw-wiki-logo"></a>
//$this->getCactions() .
    </div>
//$this->getBox( 'personal', $this->getPersonalTools(), 'personaltools' ) .
    <div id="sidebar">
Html::rawElement( 'div', [ 'class' => 'portlet', 'id' => 'p-logo', 'role' => 'banner' ],
    <!--{{/data-portlets}}-->
</filebox>
</filebox>


Ligne 405 : Ligne 475 :
= [https://www.mediawiki.org/wiki/Manual:GenerateSitemap.php Sitemap] =
= [https://www.mediawiki.org/wiki/Manual:GenerateSitemap.php Sitemap] =
<kode lang=bash>
<kode lang=bash>
export SERVER_NAME=www.domaine.fr
cd /var/www/mediawiki


cd /usr/share/webapps/mediawiki
php maintenance/generateSitemap.php \
php maintenance/generateSitemap.php \
  --conf /usr/share/webapps/mediawiki/LocalSettings-xxx.php \
    --memory-limit 50M \
  --server https://wiki.bananeatomic.fr \
    --fspath /var/www/mediawiki/sitemap/ \
  --urlpath https://wiki.bananeatomic.fr/ \
    --urlpath /sitemap/ \
  --skip-redirects
    --server https://wiki.domain.net \
    --conf /var/www/mediawiki/LocalSettings-xxx.php \
    --skip-redirects


# conf pour spécifier l'emplacement de LocalSettings.php si ce n'est pas celui par défaut qui doit être utilisé
# conf pour spécifier l'emplacement de LocalSettings.php si ce n'est pas celui par défaut qui doit être utilisé
Ligne 425 : Ligne 496 :
# un fichier par namespace sera généré sitemap-domaine-NS_0-0.xml.gz
# un fichier par namespace sera généré sitemap-domaine-NS_0-0.xml.gz
</kode>
</kode>
<filebox fn='/etc/nginx/sites-available/mediawiki.conf'>
# Allow access to the sitemap
location ^~ /sitemap/ { }
location = /sitemap.xml { }
</filebox>
<filebox fn=LocalSettings.php lang=php>
<filebox fn=LocalSettings.php lang=php>
# inclure seulement le namespace 0 (NS_MAIN) dans la génération du sitemap
# inclure seulement le namespace 0 (NS_MAIN) dans la génération du sitemap
$wgSitemapNamespaces = array( 0 );
$wgSitemapNamespaces = array( 0 );
</filebox>
</filebox>
* [https://www.mediawiki.org/wiki/Manual:$wgSitemapNamespaces/fr $wgSitemapNamespaces]
* [https://www.mediawiki.org/wiki/Manual:$wgSitemapNamespaces/fr $wgSitemapNamespaces]
* [https://www.mediawiki.org/wiki/Manual:Namespace_constants Namespace constants]
* [https://www.mediawiki.org/wiki/Manual:Namespace_constants Namespace constants]
Make the sitemap xml file discoverable to crawlers:
<kode lang='bash'>
ln -s /sitemap/sitemap-index-wiki.domain.net.xml sitemap.xml
</kode>


<filebox fn=robots.txt lang=bash>
<filebox fn=robots.txt lang=bash>
Sitemap:  https://www.domaine.fr/sitemap-index-domaine.xml
Sitemap:  https://wiki.domain.net/sitemap-index-wiki.domain.net.xml
</filebox>
</filebox>


Ligne 443 : Ligne 527 :
= [https://www.mediawiki.org/wiki/Manual:Wiki_family Plusieurs instances de mediawiki sur le même serveur] =
= [https://www.mediawiki.org/wiki/Manual:Wiki_family Plusieurs instances de mediawiki sur le même serveur] =
== [https://www.mediawiki.org/wiki/Manual:Wiki_family#Giant_switch_statement Giant switch statement] ==
== [https://www.mediawiki.org/wiki/Manual:Wiki_family#Giant_switch_statement Giant switch statement] ==
{{warn | Le filtre se fait sur <tt>$_SERVER['SERVER_NAME']</tt> qui est définit dans le fichier de conf de Nginx avec <tt>server_name</tt>.<br>
{{warn | Le filtre se fait sur {{boxx|$_SERVER['SERVER_NAME']}} qui est définit dans le fichier de conf de Nginx avec {{boxx|server_name}}.<br>
C'est toujours la première valeur de la ligne <tt>server_name</tt> qui sera prise en compte.<br>
C'est toujours la première valeur de la ligne {{boxx|server_name}} qui sera prise en compte.<br>
Si cette ligne contient plusieurs valeurs, il faudra créer un fichier de conf Nginx pour chacune de ces valeurs.}}
Si cette ligne contient plusieurs valeurs, il faudra créer un fichier de conf Nginx pour chacune de ces valeurs.}}
<filebox fn=LocalSettings.php lang=php>
<filebox fn=LocalSettings.php lang=php>
<?php
<?php
        switch ( $_SERVER['SERVER_NAME'] ) {
                case 'wiki1.domaine.fr':
                        require_once 'LocalSettings-wiki1.php';
                        break;


                case 'wiki2.domaine.fr':
switch ( $_SERVER['SERVER_NAME'] ) {
                        require_once 'LocalSettings-wiki2.php';
    case 'wiki1.domaine.fr':
                        break;
        require_once 'LocalSettings-wiki1.php';
        break;


                default:
    case 'wiki2.domaine.fr':
                        header( 'HTTP/1.1 404 Not Found' );
        require_once 'LocalSettings-wiki2.php';
                        echo 'This wiki is not available. Check configuration.<br>';
        break;
                        echo 'SERVER_NAME : ' . $_SERVER['SERVER_NAME'];
 
                        exit( 0 );
    default:
        }
        header( 'HTTP/1.1 404 Not Found' );
        echo 'This wiki is not available. Check configuration.<br>';
        echo 'SERVER_NAME : ' . $_SERVER['SERVER_NAME'];
        exit( 0 );
}
</filebox>
</filebox>
* LocalSettings-wiki1.php est l'ancien LocalSettings.php
* LocalSettings-wiki1.php est l'ancien LocalSettings.php
* Supprimer LocalSettings.php puis se connecter au site permettra la création du fichier LocalSettings-wiki2.php, de la bdd ainsi que de l'utilisateur de la bdd et du wiki
* Supprimer LocalSettings.php puis se connecter au site permettra la création du fichier LocalSettings-wiki2.php, de la bdd ainsi que de l'utilisateur de la bdd et du wiki

Dernière version du 5 mai 2024 à 21:18

Liens

Nom du site

LocalSettings.php
$wgSitename = "Mon Site";
# par défaut $wgMetaNamespace=false et $wgSitename est utilisé comme Meta Namespace
# il est utile de spécifier $wgMetaNamespace si $wgSitename contient des espace pour les remplacer par des underscores
$wgMetaNamespace = "Mon_Site";

MediaWiki:Pagetitle permet de modifier le texte dans les onglets de l'explorateur web ($1 → nom de la page)

URL du serveur

Si $wgServer n'est pas définie, il est calculé automatiquement. Mais certains serveurs ne retourne pas la bonne url (http://localhost).

LocalSettings.php
$wgServer = "http://mon.site.fr";

// pour le support de ssl il ne faut pas ajouter le protocole, ainsi cela fonctionnera avec http et https
$wgServer = "//mon.site.fr";
// la configuration de Creative Commons rend la connexion partiellement encryptée car l'url de l'image pointe vers un autre site
$wgRightsIcon = "http://i.creativecommons.org/l/by-sa/3.0/88x31.png";
// copier l'image sur le serveur et changer l'url
$wgRightsIcon = "$wgStylePath/common/images/cc-by-sa.png";

Pretty / Short URL

Transform url from http://serveur/index.php?title=MyTitle to http://serveur/wiki/MyTitle

LocalSettings.php
$actions = array( 'edit', 'watch', 'unwatch', 'delete','revert', 'rollback',
  'protect', 'unprotect', 'markpatrolled', 'render', 'submit', 'history', 'purge', 'info' );
 
foreach ( $actions as $action ) {
  $wgActionPaths[$action] = "/wiki/$action/$1";
}
$wgActionPaths['view'] = "/wiki/$1";
$wgArticlePath = $wgActionPaths['view'];
/etc/nginx/sites-available/mediawiki.conf
location /wiki/ {
    rewrite ^/wiki/(?<pagename>.*)$ /index.php;
}
/etc/apache2/sites-available/mediawiki.conf
<Directory /var/www/mediawiki>
    RewriteEngine       On
    # Short URL for wiki pages
    RewriteRule         ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/index.php [L]
    # Redirect / to Main Page
    RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]
</Directory>m

Affichage des dates

Par défaut, mediawiki utilise la date UTC (sans décalage en fonction du fuseau horaire) du serveur.
Chaque utilisateur doit définir son fuseau horaire dans ses préférences.

Du code HTML dans les pages

Pour activer l'utilisation de balises HTML autre que celles prévues par défaut

LocalSettings.php
$wgRawHtml = true;

InstantCommons

Allows to use images from Wikimedia Commons.

LocalSettings.php
$wgUseInstantCommons = true;

Droits utilisateurs

LocalSettings.php
# Interdit l'édition de pages aux utilisateurs non-connectés
$wgGroupPermissions['*']['edit'] = false;
# Interdit du même coup la création de pages mais pas les liens vers la création des pages
# pour cela il faut interdire explicitement la création de pages
$wgGroupPermissions['*']['createpage'] = false; 

# Interdit la création de nouveaux comptes aux utilisateur non-connectés
# Seul le compte administrateur peut maintenant créer de nouveaux comptes
$wgGroupPermissions['*']['createaccount'] = false;

# Autoriser le téléversement
$wgEnableUploads = true; 
# Par défaut les utiliseurs non-loggés ne sont pas autorisés à téléverser.

# Autorise les utilisateurs loggués à supprimer des pages
$wgGroupPermissions['user']['delete'] = true;
$wgGroupPermissions['user']['undelete'] = true;

# Autorise les utilisateurs loggués à modifier les droits utilisateur
$wgGroupPermissions['user']['userrights'] = true;


# pour un wiki privé
# interdire la lecture aux utilisateurs non connectés
$wgGroupPermissions['*']['read'] = false;

# Mais autoriser l'accès à la page de login
# (You also might want to add access to "Main Page", "Help:Contents", etc.)
$wgWhitelistRead = array ("Special:Userlogin");

Téléversement de fichiers media

LocalSettings.php
# retirer un type de fichier de la liste noire
$wgFileBlacklist = array_diff( $wgFileBlacklist, array ('py') );

# autoriser le téléversement de type de fichiers supplémentaires
$wgFileExtensions = array_merge(
    $wgFileExtensions, array(
        'pdf', 'svg', 'py'
        )
    );
# Default value: 	array( 'png', 'gif', 'jpg', 'jpeg' )

SVG

LocalSettings.php
// Add svg and pdf to the allowed extensions (defaults are 'png', 'gif', 'jpg', 'jpeg', 'webp')
$wgFileExtensions = array_merge(
    $wgFileExtensions, [
        'svg', 'pdf'
    ]
);
Firefox doesn’t support the letter-spacing property in SVGs, so turn the letters into a path to fix the issue. [1]

L'extension du fichier « .* » ne correspond pas au type MIME détecté du fichier (*/*)

Modifier les types MIME: /includes/mime.types

Limitation de taille

/etc/php/php.ini
upload_max_filesize = 2M
/etc/nginx/nginx.conf
client_max_body_size        3M;

Apparence du site

SideBar

Les boîtes rechercher, navigation et boîte à outils sont configurables via la page MediaWiki:Sidebar

  • SEARCH
  • navigation
    • #top|Top
    • Spécial:Recherche|Recherche
    • randompage-url|randompage
    • Spécial:Contact|Pour me contacter
    • http://mon.site.net|Label
    • mainpage|mainpage-description
    • recentchanges-url|recentchanges
    • helppage|help
  • TOOLBOX
  • LANGUAGES


Boîte à outils

Par défaut des liens sont ajoutés à boîte à outils, pour les cacher :

/skins/MonoBook/MonoBookTemplate.php
function toolbox() {
// ...
<?php
    foreach ( $this->getToolbox() as $key => $tbitem ) {
        // les liens permalink, recentchangeslinked-toolbox et 'Version imprimable' ne seront pas affichés
        if ($key != 'permalink' && $key != 'recentchangeslinked' && $key != 'print')
            echo $this->makeListItem($key, $tbitem);
    }
?>
// ...

La méthode getToolbox se trouve dans le fichier includes/skins/BaseTemplate.php. Elle contient les noms des clés.

Changer l'habillage par défaut

LocalSettings.php
$wgDefaultSkin = 'HabillageParDéfaut';
Pour les utilisateurs non loggués.

Changer d'habillage

Pages spéciales → Préférences → onglet Apparence → Habillage

Créer un nouvel habillage à partir de MonoBook

  • Copier le dossier skins/MonoBook dans un nouveau dossier skins/NewMonoBook
  • Fichiers à renommer:
    • MonoBook.phpNewMonoBook.php
    • MonoBookTemplate.phpNewMonoBookTemplate.php
    • SkinMonoBook.phpSkinNewMonoBook.php
  • Fichiers à éditer:
    • NewMonoBook.php
    • NewMonoBookTemplate.php
    • SkinNewMonoBook.php
    • i18n/*.json (garder seulement en et fr)
    • skin.json
  • Éditer le fichier « main.css » pour changer l'habillage ou ajouter de nouveaux fichiers css
  • Éditer le fichier « NewMonoBookTemplate » pour changer la structure du HTML généré

Ajouter d'autres fichiers CSS

skins/NewMonoBook/includes/SkinNewMonoBook.php
function setupSkinUserCss( OutputPage $out ) {
    // ...
    $out->addStyle( $this->stylename . '/resources/custom.css', 'screen' );
}

LocalSettings.php
$wgLogo = "$wgScriptPath/resources/assets/MonLogo.png";

# uploader l'image
$wgLogo = "$wgScriptPath/images/x/xx/MonLogo.png";

Taille recommendée : 135 x 135 pixels

Favicon

Petite icône dans l'onglet de l'explorateur web et à gauche de l'url.
Tailles recommendées : 16x16 ou 32x32 pixels.

LocalSettings.php
$wgFavicon = "$wgScriptPath/MonIcone.ico";
# Default = "/favicon.ico"
Par défaut c'est l'image favicon.ico qui est utilisé.

Masquer le message « Votre modification a été enregistrée »

Css.svg
.postedit { display: none !important; }
  • languages/messages/MessagesFr.php
  • resources/Resources.php
  • resources/mediawiki.action/mediawiki.action.view.postEdit.js
  • resources/mediawiki.action/mediawiki.action.view.postEdit.css

Fixer la colonne de gauche

skin/MonoBook/resources/custom.css
div#column-one {
    position: fixed;
    /* mettre la colonne au-dessus de la barre p-personal */
    z-index: 3;
}
div#content {
    min-height: 420px;
}
skins/MonoBook/templates/skin.mustache
<div class="visualClear"> <!-- line 24 -->
    
    <!-- NEW PLACE outside of column-one -->
        {{#data-portlets}}
        <div role="navigation" class="portlet" id="p-cactions" aria-labelledby="p-cactions-label">
            <h3 id="p-cactions-label" {{{html-user-language-attributes}}}>{{msg-monobook-cactions-label}}</h3>
            <div class="pBody">
                <ul {{{html-user-language-attributes}}}>
                {{! comments used to avoid additional whitespace}}
                {{{data-namespaces.html-items}}}{{!
                }}{{{data-views.html-items}}}{{!
                }}{{{data-actions.html-items}}}
                {{{data-variants.html-items}}}
                </ul>
            </div>
        </div>
        {{#data-cactions-mobile}}{{>Portlet}}{{/data-cactions-mobile}}
        {{#data-personal}}
        <div role="navigation" class="portlet" id="{{id}}" aria-labelledby="{{id}}-label">
            <h3 id="{{id}}-label" {{{html-user-language-attributes}}}>{{label}}</h3>
            <div class="pBody">
                <ul {{{html-user-language-attributes}}}>
                {{{html-items}}}
                </ul>
            </div>
        </div>
        {{/data-personal}}
        {{/data-portlets}}
    <!-- NEW PLACE outside of column-one -->
    
    </div>
</div>
<div id="column-one" {{{html-user-language-attributes}}}>
    <!--{{#data-portlets}}-->
    <h2>{{msg-navigation-heading}}</h2>

    <!-- MOVED outside of column-one
    <div role="navigation" class="portlet" id="p-cactions" aria-labelledby="p-cactions-label">
        <h3 id="p-cactions-label" {{{html-user-language-attributes}}}>{{msg-monobook-cactions-label}}</h3>
        <div class="pBody">
            <ul {{{html-user-language-attributes}}}>
            {{! comments used to avoid additional whitespace}}
            {{{data-namespaces.html-items}}}{{!
            }}{{{data-views.html-items}}}{{!
            }}{{{data-actions.html-items}}}
            {{{data-variants.html-items}}}
            </ul>
        </div>
    </div>
    {{#data-cactions-mobile}}{{>Portlet}}{{/data-cactions-mobile}}
    {{#data-personal}}
    <div role="navigation" class="portlet" id="{{id}}" aria-labelledby="{{id}}-label">
        <h3 id="{{id}}-label" {{{html-user-language-attributes}}}>{{label}}</h3>
        <div class="pBody">
            <ul {{{html-user-language-attributes}}}>
            {{{html-items}}}
            </ul>
        </div>
    </div>
    {{/data-personal}}
    -->

    <div class="portlet" id="p-logo" role="banner">
        <a href="{{link-mainpage}}" class="mw-wiki-logo"></a>
    </div>
    <div id="sidebar">
    <!--{{/data-portlets}}-->

Masquer les onglets content-actions

includes/skins/SkinTemplate.php
// masquer l'onglet history au utilisateurs non-logués
if ( $this->loggedin ) {
    $content_navigation['views']['history'] = [
        'class' => ( $onPage && $action == 'history' ) ? 'selected' : false,
        'text' => wfMessageFallback( "$skname-view-history", 'history_short' )
            ->setContext( $this->getContext() )->text(),
        'href' => $title->getLocalURL( 'action=history' ),
    ];
}

Performances

Mise en cache

Installer APCu et OPCache

LocalSettings.php
// pour une utilisation avec OPcache (bytecode caching) et APCu (object caching)
// désactivé par défaut CACHE_NONE
$wgMainCacheType = CACHE_ACCEL;

// depuis la version 1.27, les sessions sont stockées dans le cache des objets.
// le cache des sessions a besoin d'être persistant, si MainCacheType est définit à ACCEL, il faut définir SessionCacheType à DB
$wgSessionCacheType = CACHE_DB;

// définir un dossier pour le cache
// il doit avoir les droits en écriture pour http
// et ne pas être accessible depuis une requête
$wgCacheDirectory = "$IP/cache";

File cache

LocalSettings.php
// Utile pour les utilisateur non-logué
$wgUseFileCache = true;
$wgFileCacheDirectory = "$IP/cache";
$wgShowIPinHeader = false;

À voir

LocalSettings.php
// mettre en cache les liens de navigation de la colonne de gauche
$wgEnableSidebarCache = true;

// Increase parse cache lifetime to 30 days (default: 86400 seconds = 24 hours)
$wgParserCacheExpireTime = 2592000;
// wgParserCacheType hérite de la valeur de wgMainCacheType (défault: CACHE_ANYTHING)
$wgParserCacheType = CACHE_DB;

// Increase Resource Loader cache lifetime to 30 days (default: 5 minutes)
$wgResourceLoaderMaxage = 2592000;

// compresse les pages mises en cache. Retourne les pages compressés aux clients qui l'acceptent.
// nécessite zlib et son activation dans php (vérifier dans phpinfo)
$wgUseGzip = true;
Ne pas activer $wgUseGzip si le serveur archive déjà les pages (via ob_gzhandler ou zlib.output_compression).
Dans ce cas les pages affichées seront pleins de caractères incompréhensibles.

Purger le cache

Pour une page: avec son url wiki/MaPage?action=purge ou wiki/index.php?title=MaPage&action=purge
Pour toutes les pages avec $wgInvalidateCacheOnLocalSettingsChange

LocalSettings.php
# purge all the pages when LocalSettings.php is modified
$wgInvalidateCacheOnLocalSettingsChange = true;

Stocker toutes les images sur le site

Par exemple l'image Creative Common est téléchargée depuis leur site web à chaque chargement de page.
Il est moins couteux de la copier sur le site et de la servir depuis le site.

L'extension d'Internationalization intl PECL

L'extension PECL intl permet de normaliser Unicode, en remplacement de la version par défaut lente implémentée en PHP.

Bash.svg
sudo pacman -S php-intl
/etc/php/php.ini
extension=intl.so

Performances MySql

  • Utiliser le moteur InnoDB pour toutes les tables

Performances du serveur web

Outils externes

diff3

Permet l'édition de conflits (merging).

LocalSettings.php
$wgDiff3 = "/usr/bin/diff3";
Valeur par défaut: /usr/bin/diff3

ImageMagick

Permet la création de miniature et la convertion d'images svg

LocalSettings.php
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = '/usr/bin/convert';
Valeurs par défaut:
  • $wgUseImageMagick false
  • $wgImageMagickConvertCommand /usr/bin/convert

Robots d'exploration

robots.txt
User-agent: *
Disallow: /index.php
Disallow: /images/
Disallow: /images-kiwi/
Crawl-delay: 2
  • L'accès aux urls /wiki/ est autorisée
  • L'interdiction d'accès à Spécial et Catégories est faite dans le fichier LocalSettings.php

$wgDefaultRobotPolicy

LocalSettings.php
# par défaut interdire l'indexation et le suivit de toutes les pages
$wgDefaultRobotPolicy = 'noindex,nofollow';
# permettre l'indexation dans les pages de MAIN et le suivit des liens dans les pages MAIN et CATEGORY
$wgNamespaceRobotPolicies = array( NS_MAIN => 'index,follow', NS_CATEGORY => 'noindex,follow' );
# interdire l'indexation et le suivit de la page Test
$wgArticleRobotPolicies = array( 'Test' => 'noindex,nofollow' );

Short URL

robots.txt
# Version plus restrictive
User-agent: *
# autorise l'accès aux articles
Allow:    /wiki/
# autorise les CSS et JavaScript via load.php
Allow:    /load.php
# interdit tout le reste
Disallow: /
« /index.php?title=Spécial: » semble poser problème.
Utiliser « /index.php?title=Sp%C3%A9cial: » à la place ?

Sitemap

Bash.svg
cd /var/www/mediawiki

php maintenance/generateSitemap.php \
    --memory-limit 50M \
    --fspath /var/www/mediawiki/sitemap/ \
    --urlpath /sitemap/ \
    --server https://wiki.domain.net \
    --conf /var/www/mediawiki/LocalSettings-xxx.php \
    --skip-redirects

# conf pour spécifier l'emplacement de LocalSettings.php si ce n'est pas celui par défaut qui doit être utilisé
# server forcer l'url du serveur car il est parfois mal détécté
# urlpath url ajoutée avant les nom de fichier dans l'index, vide par défaut
# skip-redirects ne pas inclure les redirections d'articles
# fspath=/tmp/sitemap/  dossier où générer les fichiers sitemap, le dossier courant par défaut
# compress yes|no, default yes
# php maintenance/generateSitemap.php --help

# un fichier sitemap-index-domaine.xml sera générer pour lister les fichiers sitemap
# un fichier par namespace sera généré sitemap-domaine-NS_0-0.xml.gz
/etc/nginx/sites-available/mediawiki.conf
# Allow access to the sitemap
location ^~ /sitemap/ { }
location = /sitemap.xml { }
LocalSettings.php
# inclure seulement le namespace 0 (NS_MAIN) dans la génération du sitemap
$wgSitemapNamespaces = array( 0 );

Make the sitemap xml file discoverable to crawlers:

Bash.svg
ln -s /sitemap/sitemap-index-wiki.domain.net.xml sitemap.xml
robots.txt
Sitemap:  https://wiki.domain.net/sitemap-index-wiki.domain.net.xml

PHP Warning: failed to mkdir "/usr/share/webapps/mediawiki/cache"

/etc/php/php.ini
open_basedir = /usr/share/webapps/mediawiki/cache/

Plusieurs instances de mediawiki sur le même serveur

Giant switch statement

Le filtre se fait sur $_SERVER['SERVER_NAME'] qui est définit dans le fichier de conf de Nginx avec server_name.

C'est toujours la première valeur de la ligne server_name qui sera prise en compte.

Si cette ligne contient plusieurs valeurs, il faudra créer un fichier de conf Nginx pour chacune de ces valeurs.
LocalSettings.php
<?php

switch ( $_SERVER['SERVER_NAME'] ) {
    case 'wiki1.domaine.fr':
        require_once 'LocalSettings-wiki1.php';
        break;

    case 'wiki2.domaine.fr':
        require_once 'LocalSettings-wiki2.php';
        break;

    default:
        header( 'HTTP/1.1 404 Not Found' );
        echo 'This wiki is not available. Check configuration.<br>';
        echo 'SERVER_NAME : ' . $_SERVER['SERVER_NAME'];
        exit( 0 );
}
  • LocalSettings-wiki1.php est l'ancien LocalSettings.php
  • Supprimer LocalSettings.php puis se connecter au site permettra la création du fichier LocalSettings-wiki2.php, de la bdd ainsi que de l'utilisateur de la bdd et du wiki
LocalSettings-wiki2.php
$wgUploadDirectory = "{$IP}/images-wiki2";
// defaut = "{$IP}/images"

$wgUploadPath = "{$wgScriptPath}/images-wiki2";
// defaut = "{$wgScriptPath}/images"

$wgCacheDirectory = "$IP/cache-wiki2";
// default = false
Bash.svg
mkdir /var/cache/wiki2
chown http:http /var/cache/wiki2/
ln -s /var/cache/wiki2 cache-wiki2

mkdir /var/lib/wiki2
chown http:http /var/lib/wiki2/
ln -s /var/lib/wiki2 images-wiki2
Bash.svg
# Mise à jour: définir la variable SERVER_NAME
export SERVER_NAME=wiki1.domaine.fr

cd /usr/share/webapps/mediawiki
php maintenance/update.php

Copie des sources

Mises à jour compliquées.
Bash.svg
cp -r /usr/share/webapps/wiki1 /usr/share/webapps/wiki2
cd /usr/share/webapps/wiki2

rm cache images LocalSettings.php

mkdir /var/cache/wiki2
chown http:http /var/cache/wiki2/
ln -s /var/cache/wiki2 cache

mkdir /var/lib/wiki2
chown http:http /var/lib/wiki2/
ln -s /var/lib/wiki2 images
  • créer le fichier de config Nginx
  • créer le fichier de config Uwsgi
  • la première connexion au site permettra la création du fichier LocalSettings.php