Mediawiki

De FroggDev - Fr
Aller à : navigation, rechercher
Wikimedia Logo


Administration

  • modifier le mot de passe d'un utilisateur
php maintenance/changePassword.php --user=UserName --password=newpassword
  • convertir un utilisateur en admin (requis $wgShowExceptionDetails = true; dans LocalSettings.php)
php maintenance/createAndPromote.php --user=UserName --sysop --force
  • convertir un utilisateur en admin via sql
INSERT INTO `user_groups` VALUES (userId, 'sysop');

Configuration

LocalSetting.php

Bases

  • adresse du serveur
$wgServer = 'http://wiki.frogg.fr';
  • autoriser les actions admin
$wgShowExceptionDetails = true;
  • customisation
$wgFavicon = '/wiki/images/favicon.ico';
$wgLogo = '/wiki/images/logo.gif';
  • email de confirmation
$wgEmailAuthentication = true;
$wgEmailConfirmToEdit = true;

Gestion des droits

ma configuration:

  • Utilisateurs anonymes (*)
$wgGroupPermissions['*'    ]['createaccount']   = true;
$wgGroupPermissions['*'    ]['read']            = true;
$wgGroupPermissions['*'    ]['edit']            = false;
$wgGroupPermissions['*'    ]['createpage']      = false;
$wgGroupPermissions['*'    ]['createtalk']      = false;
$wgGroupPermissions['*'    ]['talk']            = false;
$wgGroupPermissions['*'    ]['purge']           = false;
$wgGroupPermissions['*'    ]['editmyprivateinfo']= false;
$wgGroupPermissions['*'    ]['editmyusercss']   = false;
$wgGroupPermissions['*'    ]['editmyuserjs']    = false;
$wgGroupPermissions['*'    ]['editmyoptions']   = false;
$wgGroupPermissions['*'    ]['editmywatchlist'] = false;
$wgGroupPermissions['*'    ]['writeapi']        = false;
$wgGroupPermissions['*'    ]['viewmywatchlist'] = false;
$wgGroupPermissions['*'    ]['viewmyprivateinfo']= false;
  • utilisateur authentifiés (user)
$wgGroupPermissions['user' ]['move']            = false;
$wgGroupPermissions['user' ]['read']            = true;
$wgGroupPermissions['user' ]['edit']            = false;
$wgGroupPermissions['user' ]['createpage']      = false;
$wgGroupPermissions['user' ]['createtalk']      = true;
$wgGroupPermissions['user' ]['edittalk']        = true;
$wgGroupPermissions['user' ]['talk']            = true;
$wgGroupPermissions['user' ]['upload']          = false;
$wgGroupPermissions['user' ]['reupload']        = false;
$wgGroupPermissions['user' ]['reupload-shared'] = false;
$wgGroupPermissions['user' ]['minoredit']       = false;
$wgGroupPermissions['user' ]['purge']           = false;
$wgGroupPermissions['user' ]['movefile']        = false;
$wgGroupPermissions['user' ]['move-subpages']   = false;
$wgGroupPermissions['user' ]['move-categorypages'] = false;
$wgGroupPermissions['user' ]['move-rootuserpages'] = false;
$wgGroupPermissions['user' ]['writeapi']        = false;
$wgGroupPermissions['user' ]['editmyprivateinfo']= false;
$wgGroupPermissions['user' ]['editmyusercss']   = false;
$wgGroupPermissions['user' ]['editmyuserjs']    = false;
$wgGroupPermissions['user' ]['editmyoptions']   = false;
$wgGroupPermissions['user' ]['editmywatchlist'] = false;
$wgGroupPermissions['user' ]['changetags']      = false;
$wgGroupPermissions['user' ]['applychangetags'] = false;
  • bot (bot)
$wgGroupPermissions['bot'  ]['bot']             = true;
$wgGroupPermissions['bot'  ]['autoconfirmed']   = false;
$wgGroupPermissions['bot'  ]['nominornewtalk']  = false;
$wgGroupPermissions['bot'  ]['autopatrol']      = true;
$wgGroupPermissions['bot'  ]['writeapi']        = false;
  • administrateur (sysop)
$wgGroupPermissions['sysop']['move']            = true;
$wgGroupPermissions['sysop']['createpage']      = true;
$wgGroupPermissions['sysop']['createtalk']      = true;
$wgGroupPermissions['sysop']['edit']            = true;
$wgGroupPermissions['sysop']['block']           = true;
$wgGroupPermissions['sysop']['createaccount']   = true;
$wgGroupPermissions['sysop']['checkuser']       = true;
$wgGroupPermissions['sysop']['delete']          = true;
$wgGroupPermissions['sysop']['deletedhistory']  = true;
$wgGroupPermissions['sysop']['editinterface']   = true;
$wgGroupPermissions['sysop']['editusercssjs']   = true;
$wgGroupPermissions['sysop']['import']          = true;
$wgGroupPermissions['sysop']['importupload']    = true;
$wgGroupPermissions['sysop']['move']            = true;
$wgGroupPermissions['sysop']['patrol']          = true;
$wgGroupPermissions['sysop']['autopatrol']      = true;
$wgGroupPermissions['sysop']['protect']         = true;
$wgGroupPermissions['sysop']['proxyunbannable'] = true;
$wgGroupPermissions['sysop']['rollback']        = true;
$wgGroupPermissions['sysop']['trackback']       = true;
$wgGroupPermissions['sysop']['upload']          = true;
$wgGroupPermissions['sysop']['reupload']        = true;
$wgGroupPermissions['sysop']['reupload-shared'] = true;
$wgGroupPermissions['sysop']['unwatchedpages']  = true;
$wgGroupPermissions['sysop']['autoconfirmed']   = true;
$wgGroupPermissions['sysop']['upload_by_url']   = true;
$wgGroupPermissions['sysop']['ipblock-exempt']  = true;
$wgGroupPermissions['sysop']['blockemail']      = true;
$wgGroupPermissions['sysop']['purge']           = true;
$wgGroupPermissions['sysop']['writeapi']        = true;
  • utilisateur authentifié et avec un email confirmé (emailconfirmed)
# Make it so users with confirmed e-mail addresses are in the group.
$wgAutopromote['emailconfirmed'] = APCOND_EMAILCONFIRMED;
# Hide group from user list.
$wgImplicitGroups[] = 'emailconfirmed';
# Finally, set it to true for the desired group.
$wgGroupPermissions['emailconfirmed']['createtalk']     = true;
$wgGroupPermissions['emailconfirmed']['editmyoptions']  = true;
$wgGroupPermissions['emailconfirmed']['editmywatchlist']= true;

#Force ConfirmEmail special pages acces
$wgGroupPermissions['*']['viewmyprivateinfo'] = true;
$wgGroupPermissions['*']['editmyprivateinfo'] = true;

gestion des upload: Limites de taille

ajouter les lignes suivantes au fichier LocalSettings.php

$wgUploadSizeWarning = 15000000;
$wgMaxUploadSize = 15000000;

modifier aussi les lignes dans le fichier PHP.INI:

memory_limit = 1024M (doit être suppérieur à la limite d'upload)
post_max_size = 15M
upload_max_filesize = 15M

gestion des upload: mimes types

  • la liste des mimes types sont dans "includes/mime.types"
  • pour supprimer toutes restriction, ajouter ces lignes dans LocalSettings.php:
$wgStrictFileExtensions=false;
$wgVerifyMimeType=false;

gestion des upload: extensions

$wgFileExtensions est un tableau qui contient toutes les extensions, peut être modifié dans LocalSettings.php :

Ajouter une extension

$wgFileExtensions[] = 'pdf';

Ajouter des extensions

$wgFileExtensions = array_merge( $wgFileExtensions, array( 'pdf', 'ppt', 'jp2', 'webp' ) );

Créer manuellement la liste des extensions

$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'jp2', 'webp', 'ppt',
                           'pdf', 'psd', 'mp3', 'xls', 'xlsx', 'swf', 'doc',
                           'docx', 'odt', 'odc', 'odp', 'odg', 'mpp');

Contenu

Code Wikimedia

Table

Images

Galerie

Liens

pour forcer les liens externes, il faut changer la ligne suivante dans LocalSettings.php:

$wgExternalLinkTarget = '_blank';

Balises HTML

  • pour autoriser les balises html
$wgRawHtml = true;

ceci n'est pas conseillé, ni sécurisé, de plus ça rentre en conflit avec $wgUseTidy pour certaines balises comme les liens

mieux vaut passer par l'extension https://www.mediawiki.org/wiki/Extension:Secure_HTML

Avancé

  • Changer le contenu de la sidebar
index.php/MediaWiki:Sidebar
  • Style sheet

files are in /skins/{skinName}

  • purger les pages en cache
{URL}?action=purge
  • purger tous les pages du cache
php maintenance/purgeList.php --purge --all
  • forcer l'accès aux pages sans le cache
$wgUseFileCache=false;
  • Mots magiques

doc officielle: http://fr.wikipedia.org/wiki/Aide:Mot_magique

par exemple __NOTOC__ Supprime l'affichage automatique de la table des matières avant la première section.

  • Pages spéciales
/index.php/Special:SpecialPages
/index.php/Special:Allpages toutes les pages
/index.php/Special:Version description du wiki installé
/index.php/Special:Gather liste de suivi
/index.php/Special:Statistics statistiques globales

Mise à jour

doc officielle: https://www.mediawiki.org/wiki/Manual:Upgrading

Vous pouvez voir la version actuelle de votre Wiki dans le code source d'une page, dans la balise meta generator: <meta name="generator" content="MediaWiki 1.25alpha">

  1. récupérer la dernière version de Wikimedia sur http://www.mediawiki.org/wiki/Download
  2. Sauvegarder votre configuration Localsettings.php, vos skins et extensions
  3. Extraire les nouveaux fichiers
  4. Coller votre configuration Localsettings.php,vos extensions et skins
  5. autoriser l'utilisateur web (www-data) et si besoin refaire le lien vers votre serveur web
  6. supprimer l’exécution du répertoire images: chmod 550 ${wikifolder}images/* -R
  7. mettre à jour la base de donnée grâce à la commande: php maintenance/update.php

Skins & Extensions

Skins

  • liste des skins officielles:

http://www.mediawiki.org/wiki/Category:All_skins

Extensions

  • liste des extensions officielles:

http://www.mediawiki.org/wiki/Category:All_extensions

  • liste des extensions installées:
index.php/Special:Version

ShortUrl

doc officielle: https://www.mediawiki.org/wiki/Manual:Short_URL/fr

  • dans LocalSettings.php
$wgScriptPath = "";
$wgArticlePath="/$1";
  • dans la config apache du site web
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/index.php [L]

Multilingue

doc officielle: http://www.mediawiki.org/wiki/Manual:Wiki_family

description de l'installation de Wiki avec ressources partagées (Scenario 4)

Créer chaque Wiki

  • installer chaque Wiki:

pour chaque langues il faut un répertoire séparé: il est conseillé de les mettre dans un même répertoire principale,et chaque langue dans un sous répertoire, par exemple:

{Path}/wiki/fr                wiki en français
{Path}/wiki/en                wiki en anglais
{Path}/wiki/pool              fichiers communs

vous pouvez utiliser mon script d'installation disponible ici

  • liens symboliques web
ln -s {Path}/wiki/fr /var/www/wiki/fr
ln -s {Path}/wiki/en /var/www/wiki/en
ln -s {Path}/wiki/pool /var/www/wiki/pool
  • installation de la base de donnée

Vous pouvez créer une base de donnée pour chaque Wiki, le mieux est de créer une base de donnée et mettre les tables de chaque Wiki dans cette même base avec des préfixes différents

préfix fr_          pour wiki français
préfix en_          pour wiki anglais
préfix pool_        pour wiki des fichiers en commun
  • configuration

la table interwiki à besoin de configuration de la base commune (ou passer par les pages spéciale menu interwiki):

INSERT INTO `wiki`.`interwiki` (`iw_prefix`, `iw_wikiid` , `iw_url` , `iw_local`, `iw_trans`) 
	VALUES ('pool', 'http://pool.wiki.frogg.fr/index.php/$1','http://pool.wiki.frogg.fr/index.php/$1', '1', '1');
INSERT INTO `wiki`.`interwiki` (`iw_prefix`, `iw_wikiid` , `iw_url`, `iw_local`, `iw_trans`) 
	VALUES ('fr', 'http://fr.wiki.frogg.fr/index.php/$1','http://pool.wiki.frogg.fr/index.php/$1', '1', '1');
INSERT INTO `wiki`.`interwiki` (`iw_prefix`, `iw_wikiid` , `iw_url`, `iw_local`, `iw_trans`) 
	VALUES ('en', 'http://en.wiki.frogg.fr/index.php/$1','http://pool.wiki.frogg.fr/index.php/$1', '1', '1');
  • LocalSettings.php de chaque wiki nécessite des lignes de commandes supplémentaires:
 $wgGroupPermissions['sysop']['interwiki'] = true ;
  • partage des fichiers communs
$wgUseSharedUploads = true;
$wgHashedSharedUploadDirectory = true;
$wgUploadNavigationUrl = $wgServer."/wiki_pool/index.php/Special:Upload";
$wgSharedUploadPath = $wgServer."/wiki_pool/images";
$wgSharedUploadDirectory = "/opt/wiki/pool/images/";

$wgFetchCommonsDescriptions = true;
$wgSharedUploadDBname = 'wiki';
$wgSharedUploadDBprefix = 'pool_';
$wgRepositoryBaseUrl = $wgServer."/wiki_pool/index.php/Image:";
  • partage des bases de données
$wgInterwikiCentralDB = 'wiki';
$wgSharedDB = 'wiki';
$wgSharedPrefix = 'fr_';
$wgSharedTables = array('user','user_groups','interwiki','ipblocks');
  • partage des cookie (pour les interwiki multi domaine)
$wgCookieDomain = '.frogg.fr';

Optimisation

Pour éviter la duplication des configurations, le fichier LocalSetting.php peut être découpé pour plus de visibilité, voici ma version: Cliquez ici pour accéder à ma configuration

Ajouter les balises suivantes dans vos pages

  • pour activé une langue voici les balises:
[[en:{{PAGENAME}}]]
[[fr:{{PAGENAME}}]]

Site Map

  • générer le sitemap.xml
cd /opt/web/wiki/fr
mkdir -p sitemap
php maintenance/generateSitemap.php \
	--fspath sitemap \
	--server http://88.181.108.14:777/wiki \
	--urlpath http://88.181.108.14:777/wiki/sitemap \
	--conf LocalSettings.php
  • bonus 1: déplacer et renomer le xml à la racine en sitemap.xml
mv $(echo sitemap/*.xml) sitemap.xml
  • bonus 2: enregistrer le sitemap sur google webmaster tools:

https://www.google.com/webmasters/tools/sitemap-list

Augmenter la sécurité

Doc officielle

  • Securité

http://www.mediawiki.org/wiki/Manual:Security

  • Anti Spam/Robot

http://www.mediawiki.org/wiki/Manual:Combating_spam

Wiki configuration

  • changer la secret key dans LocalSetting.php (avec des charactères/symboles au hasard et long)
$wgSecretKey = "H3r34nYT3xT2S2cUR3y0uRW1k1";
  • Vérifier les email à la création d'un compte
$wgEmailConfirmToEdit = true;
$wgEmailAuthentication = true;
  • mettre des droits utilisateurs

Lien vers la gestion des droits

Wiki Extensions

  • Ajouter un anti-bot captcha

http://www.mediawiki.org/wiki/Extension:ConfirmEdit

  • convertir les adresse email en images anti-bot

http://www.mediawiki.org/wiki/Extension:EmailAddressImage

  • visualiser les droits utilisateurs

http://www.mediawiki.org/wiki/Extension:GlobalUserGroups

PHP Configuration

modifier le fichier de configuration php.ini (sous linux : /etc/php5/apache2/php.ini)

allow_url_fopen off

Augmenter les performances

Doc officielle: http://www.mediawiki.org/wiki/Manual:Performance_tuning

Mediawiki

  • LocalSettings.php
# Uncomment this to disable output compression
# $wgDisableOutputCompression = true;
 
# Shared memory settings
$wgMainCacheType = CACHE_ACCEL; #PHP APC
#$wgMainCacheType = CACHE_NONE;
$wgMemCachedServers = array(); 

# Parser Cache
$wgParserCacheExpireTime = 604800; #1 Week

# Load.php expires
$wgResourceLoaderMaxage['versioned']['server'] = 604800;
$wgResourceLoaderMaxage['versioned']['client'] = 604800;
$wgResourceLoaderMaxage['unversioned']['server'] = 604800;
$wgResourceLoaderMaxage['unversioned']['client'] = 604800;

# Job.php rate
$wgJobRunRate = 0;

# Sidebar cache
$wgEnableSidebarCache = true;

# File cache
$wgUseFileCache = true;
$wgFileCacheDirectory  = "$IP/cache";
$wgUseGzip = true;
$wgFileCacheDepth = 0;

# Cache folder
$wgCacheDirectory = "$IP/cache";
  • $wgJobRunRate = 0 ne lancera plus les tâches toute les x pages, il faut donc ajouter la tâche au /etc/crontab
0 0 * * * /usr/bin/php php /var/www/wiki/fr/maintenance/runJobs.php --conf /var/www/wiki/fr/LocalSettings.php > /var/log/wiki/runJobsFr.log 2>&1

Apache

/etc/apache2/sites-available/{YourSite}

# MOD_DEFLATE COMPRESSION
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application$

# DEFLATE NOT COMPATIBLE BROWERS
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# NOT CHACHING IF ALREADY CACHED
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip

# EXPIRE HEADERS
<IfModule mod_expires.c>
ExpiresActive On
#Images
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
AddType image/x-icon .ico
ExpiresByType image/ico "access plus 1 year"
ExpiresByType image/icon "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
#Elements
ExpiresByType application/xhtml+xml "access plus 1 week"
ExpiresByType text/html "access plus 1 week"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType text/x-javascript "access plus 1 week"
#Others
ExpiresDefault "access plus 1 month"
</IfModule>

# CACHE-CONTROL HEADERS
<IfModule mod_headers.c>
<FilesMatch "\\.(ico|jpe?g|png|gif|swf|gz|ttf)$">
Header set Cache-Control "max-age=2797200, public"
</FilesMatch>
<FilesMatch "\\.(css)$">
Header set Cache-Control "max-age=2797200, public"
</FilesMatch>
<FilesMatch "\\.(js)$">
Header set Cache-Control "max-age=2797200, private"
</FilesMatch>
<filesMatch "\\.(html|htm)$">
Header set Cache-Control "max-age=86400, public"
</filesMatch>
# Disable caching for scripts and other dynamic files
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>

Pour plus d'information sur Apache cliquez ici

Résultat

statistiques du server: http://info.home.frogg.fr

Résultat de Google Pagespeed Insights

Script

Script install/update/save/rollback

https://github.com/Fro99666/BASH_froggLinuxWikiFamilyManager

  • options pour wiki:
    • bash wikiManager.sh -install : pour installer wiki
    • bash wikiManager.sh -update : pour mettre à jour wiki
    • bash wikiManager.sh -backup : pour sauvegarder wiki
    • bash wikiManager.sh -rollback : pour restaurer wiki
  • options pour mysql & phpmyadmin:
    • bash wikiManager.sh -mysqlupdate: pour mettre à jour mysql & phpmyadmin
    • bash wikiManager.sh -mysqlbackup : pour sauvegarder mysql & phpmyadmin
    • bash wikiManager.sh -mysqlrollback : pour restaurer mysql & phpmyadmin
  • more options:
    • bash wikiManager.sh -changepass : pour linux & wiki changement de mot de passe
    • bash wikiManager.sh -{command} -confirm : confirmation automatique

Supprimer l'accès au utilisateurs non-sysop

  • supprimer l'accès aux utilisateurs non-sysop aux pages spéciales & purges (redirige vers l'écran de connexion)

wiki extension : https://github.com/Fro99666/PHP_Mediawiki_removeSpecialPageAccess

Debug

  • Global Debug
$wgShowExceptionDetails = true;
$wgDebugToolbar = true;
$wgShowDebug = true;
$wgDevelopmentWarnings = true;
  • Sql Debug
$wgShowSQLErrors = true;
$wgDebugDumpSql = true;
$wgShowDBErrorBacktrace = true;
  • Debug dans un fichier de log
 $wgDebugLogFile = "/tmp/{$wgSitename}-debug.log"

Support

Serveur IRC & Canal IRC