CINXE.COM
MediaWiki at WMF - Wikitech
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>MediaWiki at WMF - Wikitech</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )labswikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat": "dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"db168ade-de35-44ed-baad-f2f465a1da13","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"MediaWiki_at_WMF","wgTitle":"MediaWiki at WMF","wgCurRevisionId":2243801,"wgRevisionId":2243801,"wgArticleId":84340,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Pages with FIXME on them","Drafts","MediaWiki production"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"MediaWiki_at_WMF","wgRelevantArticleId":84340,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikitech","wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgVisualEditor":{ "pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"personal","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"wgSiteNoticeId":"2.0"};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","mediawiki.page.gallery.styles":"ready","ext.cite.styles":"ready","ext.pygments":"ready","ext.categoryTree.styles":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready", "ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.pt":"ready","ext.dismissableSiteNotice.styles":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","ext.categoryTree","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.site","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.uls.interface","ext.checkUser.clientHints","ext.dismissableSiteNotice"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.categoryTree.styles%7Cext.cite.styles%7Cext.dismissableSiteNotice.styles%7Cext.pygments%7Cext.uls.pt%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cmediawiki.page.gallery.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="MediaWiki at WMF - Wikitech"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="icon" href="/static/favicon/wikitech.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikitech (en)"> <link rel="EditURI" type="application/rsd+xml" href="//wikitech.wikimedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://wikitech.wikimedia.org/wiki/MediaWiki_at_WMF"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"> <link rel="alternate" type="application/atom+xml" title="Wikitech Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-MediaWiki_at_WMF rootpage-MediaWiki_at_WMF skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-Server-admin-log:-Prod" class="mw-list-item"><a href="/wiki/Server_Admin_Log"><span>Server admin log: Prod</span></a></li><li id="n-Admin-log:-RelEng" class="mw-list-item"><a href="/wiki/Release_Engineering/SAL"><span>Admin log: RelEng</span></a></li><li id="n-Incident-status" class="mw-list-item"><a href="/wiki/Incident_status"><span>Incident status</span></a></li><li id="n-Deployments" class="mw-list-item"><a href="/wiki/Deployments"><span>Deployments</span></a></li><li id="n-SRE-Team-Help" class="mw-list-item"><a href="/wiki/SRE/SRE_Team_requests"><span>SRE Team Help</span></a></li> </ul> </div> </div> <div id="p-Cloud_VPS_&_Toolforge" class="vector-menu mw-portlet mw-portlet-Cloud_VPS_Toolforge" > <div class="vector-menu-heading"> Cloud VPS & Toolforge </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-Cloud-VPS-portal" class="mw-list-item"><a href="/wiki/Portal:Cloud_VPS"><span>Cloud VPS portal</span></a></li><li id="n-Toolforge-portal" class="mw-list-item"><a href="/wiki/Portal:Toolforge"><span>Toolforge portal</span></a></li><li id="n-Request-VPS-project" class="mw-list-item"><a href="https://phabricator.wikimedia.org/project/view/2875/"><span>Request VPS project</span></a></li><li id="n-Admin-log:-Cloud-VPS" class="mw-list-item"><a href="/wiki/Cloud_VPS_Server_Admin_Log"><span>Admin log: Cloud VPS</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikitech.svg" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikitech" src="/static/images/mobile/copyright/wikitech-wordmark.svg" style="width: 8.75em; height: 1.6875em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikitech [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikitech" aria-label="Search Wikitech" autocapitalize="sentences" title="Search Wikitech [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-uls" class="mw-list-item active user-links-collapsible-item"><a data-mw="interface" href="#" class="uls-trigger cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet"><span class="vector-icon mw-ui-icon-wikimedia-language mw-ui-icon-wikimedia-wikimedia-language"></span> <span>English</span></a> </li> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?utm_source=donate&utm_medium=sidebar&utm_campaign=spontaneous&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=MediaWiki+at+WMF" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out user-links-collapsible-item" title="More options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?utm_source=donate&utm_medium=sidebar&utm_campaign=spontaneous&uselang=en"><span>Donate</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=MediaWiki+at+WMF" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><div id="mw-dismissablenotice-anonplace"></div><script>(function(){var node=document.getElementById("mw-dismissablenotice-anonplace");if(node){node.outerHTML="\u003Cdiv class=\"mw-dismissable-notice\"\u003E\u003Cdiv class=\"mw-dismissable-notice-close\"\u003E[\u003Ca tabindex=\"0\" role=\"button\"\u003Edismiss\u003C/a\u003E]\u003C/div\u003E\u003Cdiv class=\"mw-dismissable-notice-body\"\u003E\u003C!-- CentralNotice --\u003E\u003Cdiv id=\"localNotice\" data-nosnippet=\"\"\u003E\u003Cdiv class=\"sitenotice\" lang=\"en\" dir=\"ltr\"\u003E\u003Ctable style=\"width: 75%; background-color: var(--background-color-warning-subtle, #fdf2d5); border: var(--border-subtle, 1px solid #987027); color: var(--color-base, #202122); border-radius: 10px; padding: 5px; margin: 0 auto;\"\u003E\n\u003Ctbody\u003E\u003Ctr\u003E\n\u003Ctd style=\"width:40px; height:40px; text-align:center; vertical-align:middle; padding: 2px;\"\u003E\u003Cspan typeof=\"mw:File\"\u003E\u003Ca href=\"/wiki/File:OOjs_UI_icon_alert-warning.svg\" class=\"mw-file-description\"\u003E\u003Cimg src=\"//upload.wikimedia.org/wikipedia/commons/thumb/3/3b/OOjs_UI_icon_alert-warning.svg/30px-OOjs_UI_icon_alert-warning.svg.png\" decoding=\"async\" width=\"30\" height=\"30\" class=\"mw-file-element\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/3/3b/OOjs_UI_icon_alert-warning.svg/45px-OOjs_UI_icon_alert-warning.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/3b/OOjs_UI_icon_alert-warning.svg/60px-OOjs_UI_icon_alert-warning.svg.png 2x\" data-file-width=\"20\" data-file-height=\"20\" /\u003E\u003C/a\u003E\u003C/span\u003E\n\u003C/td\u003E\n\u003Ctd style=\"text-align:center; vertical-align: middle; padding: 4px; max-height: 60px;\"\u003E\u003Cb\u003EWe are migrating Wikitech to \u003Ca href=\"/wiki/Wikitech/SUL-migration\" title=\"Wikitech/SUL-migration\"\u003ESUL\u003C/a\u003E!\u003C/b\u003E\n\u003Cp\u003E\u003Cb\u003EAction may be required for your \u003Ca href=\"/wiki/Wikitech/SUL-migration#What_You_Should_Do\" title=\"Wikitech/SUL-migration\"\u003E account\u003C/a\u003E!\u003C/b\u003E\n\u003C/p\u003E\u003Cp\u003E\u003Cb\u003ETrouble logging in? Please visit \u003Ca href=\"https://phabricator.wikimedia.org/T376267\" class=\"extiw\" title=\"phab:T376267\"\u003ET376267\u003C/a\u003E\u003C/b\u003E\n\u003C/p\u003E\n\u003C/td\u003E\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E";}}());</script></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Beginning</div> </a> </li> <li id="toc-Infrastructure" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Infrastructure"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Infrastructure</span> </div> </a> <ul id="toc-Infrastructure-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-App_servers" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#App_servers"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>App servers</span> </div> </a> <ul id="toc-App_servers-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-MediaWiki_configuration" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#MediaWiki_configuration"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>MediaWiki configuration</span> </div> </a> <button aria-controls="toc-MediaWiki_configuration-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle MediaWiki configuration subsection</span> </button> <ul id="toc-MediaWiki_configuration-sublist" class="vector-toc-list"> <li id="toc-Document_root" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Document_root"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Document root</span> </div> </a> <ul id="toc-Document_root-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Multiversion" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Multiversion"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Multiversion</span> </div> </a> <ul id="toc-Multiversion-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-MediaWiki_internals" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#MediaWiki_internals"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3</span> <span>MediaWiki internals</span> </div> </a> <ul id="toc-MediaWiki_internals-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Static_files" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Static_files"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Static files</span> </div> </a> <button aria-controls="toc-Static_files-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Static files subsection</span> </button> <ul id="toc-Static_files-sublist" class="vector-toc-list"> <li id="toc-Application_resources" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Application_resources"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.1</span> <span>Application resources</span> </div> </a> <ul id="toc-Application_resources-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-WMF_resources" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#WMF_resources"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.2</span> <span>WMF resources</span> </div> </a> <ul id="toc-WMF_resources-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Timeouts" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Timeouts"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Timeouts</span> </div> </a> <button aria-controls="toc-Timeouts-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Timeouts subsection</span> </button> <ul id="toc-Timeouts-sublist" class="vector-toc-list"> <li id="toc-Request_timeouts" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Request_timeouts"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.1</span> <span>Request timeouts</span> </div> </a> <ul id="toc-Request_timeouts-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Backend_timeouts" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Backend_timeouts"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.2</span> <span>Backend timeouts</span> </div> </a> <ul id="toc-Backend_timeouts-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Involved_codebases" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Involved_codebases"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Involved codebases</span> </div> </a> <ul id="toc-Involved_codebases-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Footnotes" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Footnotes"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Footnotes</span> </div> </a> <ul id="toc-Footnotes-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Pages_in_the_MediaWiki_production_category" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Pages_in_the_MediaWiki_production_category"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>Pages in the MediaWiki production category</span> </div> </a> <ul id="toc-Pages_in_the_MediaWiki_production_category-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">MediaWiki at WMF</span></h1> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/MediaWiki_at_WMF" title="View the content page [c]" accesskey="c"><span>Page</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:MediaWiki_at_WMF" rel="discussion" title="Discussion about the content page [t]" accesskey="t"><span>Discussion</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/MediaWiki_at_WMF"><span>Read</span></a></li><li id="ca-viewsource" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=MediaWiki_at_WMF&action=edit" title="This page is protected. You can view its source [e]" accesskey="e"><span>View source</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=MediaWiki_at_WMF&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/MediaWiki_at_WMF"><span>Read</span></a></li><li id="ca-more-viewsource" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=MediaWiki_at_WMF&action=edit"><span>View source</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=MediaWiki_at_WMF&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/MediaWiki_at_WMF" title="A list of all wiki pages that link here [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/MediaWiki_at_WMF" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=MediaWiki_at_WMF&oldid=2243801" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=MediaWiki_at_WMF&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=MediaWiki_at_WMF&id=2243801&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fwikitech.wikimedia.org%2Fwiki%2FMediaWiki_at_WMF"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fwikitech.wikimedia.org%2Fwiki%2FMediaWiki_at_WMF"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=Special:Book&bookcmd=book_creator&referer=MediaWiki+at+WMF"><span>Create a book</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=MediaWiki_at_WMF&action=show-download-screen"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=MediaWiki_at_WMF&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikitech</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r2230541">.mw-parser-output .tpl-navinfra--portal{float:none}.mw-parser-output .tpl-navinfra--portal .tpl-navsidebar-contents{margin:0 8px;display:flex;flex-flow:row wrap;gap:16px}.mw-parser-output .tpl-navinfra--portal .tpl-navsidebar-content{break-inside:avoid}.mw-parser-output .tpl-navinfra--sidebar .tpl-navsidebar-content{margin:0}.mw-parser-output .tpl-navinfra--sidebar .tpl-navsidebar-heading{font-weight:normal;margin:1px 0 0 0}.mw-parser-output .tpl-navinfra--sidebar .tpl-navsidebar-heading a{display:block;border-top:1px solid var(--border-color-muted,#eaecf0);background-color:var(--background-color-neutral-subtle,#f8f9fa);color:var(--color-base,#202122);margin:0 -8px;padding:4px 8px 0px 8px}.mw-parser-output .tpl-navinfra--sidebar .tpl-navsidebar-heading a:hover{background-color:var(--background-color-base,#fff);color:var(--color-emphasized,#000)}.mw-parser-output ul{margin-top:unset!important}</style> <style data-mw-deduplicate="TemplateStyles:r2241375">.mw-parser-output .tpl-navsidebar{max-width:22em;background:var(--background-color-base,#fff);color:var(--color-base,#202122);border:1px solid var(--border-color-base,#a2a9b1);float:right;clear:right;margin:.5em 0 1em 1em}.mw-parser-output .tpl-navsidebar-floatright{float:right;clear:right;margin:.5em 0 1em 1em}.mw-parser-output .tpl-navsidebar-floatleft{float:left;clear:left;margin:.5em 1em 1em 0}.mw-parser-output .tpl-navsidebar-floatnone{float:none;clear:both;margin:.5em 0}.mw-parser-output .tpl-navsidebar-topimage{margin:0 0 16px 0}.mw-parser-output .tpl-navsidebar-title{margin:8px 16px;border-bottom:3px solid var(--border-color-muted,#eaecf0);font-size:20px;text-align:center}.mw-parser-output .tpl-navsidebar-image{margin:0 0 8px}.mw-parser-output .tpl-navsidebar-content{margin:0 0 16px 0;padding:0 8px}.mw-parser-output .tpl-navsidebar-heading{margin:8px 0;font-weight:bold}.mw-parser-output .tpl-navsidebar-foot{padding:0 8px;margin:0;text-align:right;font-size:smaller}@media not (min-width:720px){.mw-parser-output .tpl-navsidebar{float:none;clear:both;margin:.5em 0;max-width:none}}</style><div role="navigation" class="navigation-not-searchable tpl-navsidebar tpl-navinfra--sidebar" style=""><p class="tpl-navsidebar-title"><a href="/wiki/Wikimedia_infrastructure" title="Wikimedia infrastructure">Wikimedia infrastructure</a></p><div class="tpl-navsidebar-contents"><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Data_centers" title="Data centers">Data centers</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Network_design" title="Network design">Networking</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Global_traffic_routing" title="Global traffic routing">Global traffic routing</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a class="mw-selflink selflink">MediaWiki SRE</a></p><p class="mw-empty-elt"> </p><ul><li><a href="/wiki/Application_servers" title="Application servers">Application servers</a></li> <li><a href="/wiki/BounceHandler" title="BounceHandler">BounceHandler</a></li> <li><a href="/wiki/Application_servers/Runbook" title="Application servers/Runbook">PHP 7 and php-fpm</a></li> <li><a href="/wiki/Citoid" title="Citoid">Citoid</a></li> <li><a href="/wiki/Dumps" title="Dumps">Dumps</a></li> <li><a href="/wiki/Envoy" title="Envoy">Envoy</a></li> <li><a href="/wiki/External_storage" title="External storage">External storage</a></li> <li><a href="/wiki/MediaWiki_JobQueue" title="MediaWiki JobQueue">MediaWiki JobQueue</a></li> <li><a href="/wiki/Memcached_for_MediaWiki" title="Memcached for MediaWiki">Memcached</a></li> <li><a href="/wiki/Memcached_for_MediaWiki/mcrouter" class="mw-redirect" title="Memcached for MediaWiki/mcrouter">Mcrouter runbook</a></li> <li><a href="/wiki/MediaWiki_HTTP_cache_headers" title="MediaWiki HTTP cache headers">MediaWiki HTTP cache headers</a></li> <li><a href="/wiki/MediaWiki_On_Kubernetes" title="MediaWiki On Kubernetes">MediaWiki On Kubernetes</a></li> <li><a href="/wiki/MediaWiki_and_EtcdConfig" title="MediaWiki and EtcdConfig">MediaWiki and EtcdConfig</a></li> <li><a href="/wiki/Mathoid" title="Mathoid">Mathoid</a></li> <li><a href="/wiki/Nutcracker" title="Nutcracker">Nutcracker</a></li> <li><a href="/wiki/Parser_cache" title="Parser cache">Parser cache</a></li> <li><a href="/wiki/Shellbox" title="Shellbox">Shellbox</a></li> <li><a href="/wiki/Redis" title="Redis">Redis</a></li></ul> </div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/MediaWiki_Engineering" title="MediaWiki Engineering">MediaWiki Engineering</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Upload.wikimedia.org" title="Upload.wikimedia.org">Multimedia</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Data_Engineering" class="mw-redirect" title="Data Engineering">Data Engineering</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Search" title="Search">Search</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/SRE/Data_Persistence/Documentation" title="SRE/Data Persistence/Documentation">SRE Data Persistence</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/SRE/Infrastructure_Foundations/Documentation" title="SRE/Infrastructure Foundations/Documentation">SRE Infra Foundations</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/SRE/Observability/Documentation" title="SRE/Observability/Documentation">SRE Observability</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Performance" title="Performance">Wikimedia Performance</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Event_Platform" title="Event Platform">Event Platform</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Release_Engineering" title="Release Engineering">Release Engineering</a></p><p class="mw-empty-elt"> </p></div></div><p class="tpl-navsidebar-foot">[<span class="noprint plainlinks"><a class="external text" href="https://wikitech.wikimedia.org/w/index.php?title=Template:Navigation_Wikimedia_infrastructure&action=edit"><span title="Edit this template">edit</span></a></span>]</p></div> <p><b>MediaWiki</b> is the collaborative editing software that runs Wikipedia. This page documents its deployment at Wikimedia Foundation. </p> <ul><li>For more about the history, see <a href="https://en.wikipedia.org/wiki/MediaWiki" class="extiw" title="w:MediaWiki">"MediaWiki" on wikipedia.org</a>.</li> <li>For how to use, install or contribute, see <a href="https://www.mediawiki.org/wiki/" class="extiw" title="mw:">mediawiki.org</a>.</li></ul> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Infrastructure">Infrastructure</h2></div> <p>A Wikipedia web request is processed in a series of steps outlined here (as of August 2022). </p> <ul><li>The DNS resolves hostnames like <code>en.wikipedia.org</code> ultimately points to an address like <code>text-lb.*.wikimedia.org</code>, for which the IP addresses are service IPs handled by LVS, which acts as a <b>direct-routing load balancer</b> to our caching proxies.<br />» See also <a href="/wiki/DNS" title="DNS">DNS</a>, <a href="/wiki/Global_traffic_routing" title="Global traffic routing">Global traffic routing</a>, and <a href="/wiki/LVS" title="LVS">LVS</a>.</li> <li>Wikimedia Foundation owns its content-delivery network. The public load balancers and caching proxies are located in all data centres (especially those with the sole role of being an edge cache, also known as "pop"). <br />» See also <a href="/wiki/Data_centers" title="Data centers">Data centers</a> and <a href="https://en.wikipedia.org/wiki/Point_of_presence" class="extiw" title="w:Point of presence">PoPs</a>.</li> <li>The caching servers are implemented as a reverse proxy consisting of three layers: TLS termination, frontend caching, backend caching. Each cache server hosts all three of these layers. <br />» See also <a href="/wiki/Caching_overview" title="Caching overview">Caching overview</a>.<br /> <ul><li><b>TLS termination</b> and HTTP/2 handling, handled by HAProxy.</li> <li><b>Frontend caching</b>: This is an in-memory HTTP cache (uses Varnish, called "Varnish frontend", or <code>varnish-fe</code>). The LVS load balancers route the request to a random cache proxy server to maximise the amount of parallel traffic we can handle. Each frontend cache server likely holds the same set of responses in its cache, the logical capicity for the frontend cache is therefore equal to 1 server's RAM.</li> <li><b>Backend caching</b>: The backend HTTP caches are routed to by frontend caches in case of a cache miss. Contrary to the frontends, these are routed by a consistent hash, and they also persist their cache on disk (instead of in memory). The backend caches scale horizontally and have a logical capacity equal to the total of all servers. In case of a surge in traffic to a particular page, the frontends should each get a copy and distribute from there. Because of consistent hashing, the same backend cache is always consulted for the same URL. We use request coalescing to avoid multiple requests for the same URL hitting the same backend server. For the backend cache, we use Apache Traffic Server (<code>ats-be</code>).</li></ul></li> <li>After the cache proxies we arrive at the <b>application servers</b> (that is, if the request was not fulfilled by a cache). The application servers are load-balanced via LVS. Connections between backend caches and app servers are encrypted with TLS, which is terminated locally on the app server using a local <b>Envoy</b> instance, which, in turn, hands the request off to the local <b>Apache</b>. Prior to mid-2020, <b>Nginx-</b> was used for TLS termination. Apache there is in charge of handling redirects, rewrite rules, and determining the document root. It then uses <code>php-fpm</code> to invoke the MediaWiki software on the <b>app servers</b>. The application servers and all other backend services (such as Memcached and MariaDB) are located in "Core services" data centers, currently <a href="/wiki/Eqiad" class="mw-redirect" title="Eqiad">Eqiad</a> and <a href="/wiki/Codfw" class="mw-redirect" title="Codfw">Codfw</a>.<br />» See also <a href="/wiki/Application_servers" title="Application servers">Application servers</a> for more about how Apache, PHP7 and php-fpm are configured.</li></ul> <ul class="gallery mw-gallery-traditional"> <li class="gallerybox" style="width: 305px"> <div class="thumb" style="width: 300px; height: 360px;"><span typeof="mw:File"><a href="/wiki/File:Wikipedia_webrequest_2022.png" class="mw-file-description" title="Wikipedia request flow"><img alt="Wikipedia request flow" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4d/Wikipedia_webrequest_2022.png/266px-Wikipedia_webrequest_2022.png" decoding="async" width="266" height="330" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4d/Wikipedia_webrequest_2022.png/398px-Wikipedia_webrequest_2022.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4d/Wikipedia_webrequest_2022.png/531px-Wikipedia_webrequest_2022.png 2x" data-file-width="2224" data-file-height="2762" /></a></span></div> <div class="gallerytext">Wikipedia request flow</div> </li> <li class="gallerybox" style="width: 305px"> <div class="thumb" style="width: 300px; height: 360px;"><span typeof="mw:File"><a href="/wiki/File:MediaWiki_infrastructure_2022.png" class="mw-file-description" title="MediaWiki components and appserver clusters"><img alt="MediaWiki components and appserver clusters" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/ee/MediaWiki_infrastructure_2022.png/270px-MediaWiki_infrastructure_2022.png" decoding="async" width="270" height="160" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/ee/MediaWiki_infrastructure_2022.png/405px-MediaWiki_infrastructure_2022.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ee/MediaWiki_infrastructure_2022.png/540px-MediaWiki_infrastructure_2022.png 2x" data-file-width="5646" data-file-height="3338" /></a></span></div> <div class="gallerytext">MediaWiki components and appserver clusters</div> </li> <li class="gallerybox" style="width: 305px"> <div class="thumb" style="width: 300px; height: 360px;"><span typeof="mw:File"><a href="/wiki/File:WMF_infrastructure_2022.png" class="mw-file-description" title="Wikimedia Foundation infrastructure around MediaWiki more broadly"><img alt="Wikimedia Foundation infrastructure around MediaWiki more broadly" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/48/WMF_infrastructure_2022.png/270px-WMF_infrastructure_2022.png" decoding="async" width="270" height="161" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/48/WMF_infrastructure_2022.png/405px-WMF_infrastructure_2022.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/48/WMF_infrastructure_2022.png/540px-WMF_infrastructure_2022.png 2x" data-file-width="5764" data-file-height="3438" /></a></span></div> <div class="gallerytext">Wikimedia Foundation infrastructure around MediaWiki more broadly</div> </li> </ul> <div class="mw-heading mw-heading2"><h2 id="App_servers">App servers</h2></div> <dl><dd><i>See <a href="/wiki/Application_servers" title="Application servers">Application servers</a> for more about how Apache and php-fpm are configured.</i></dd></dl> <p>The application servers are divided in the following clusters: </p> <table class="wikitable"> <caption> </caption> <tbody><tr> <th>Cluster </th> <th>Purpose </th> <th>Hiera </th> <th>Servergroup </th> <th>Conftool </th></tr> <tr> <th>Main app servers </th> <td>Default catch-all for HTTP requests to wiki domains for anything not served by another group. <p>This includes <code>/w/index.php</code> and <code>/w/load.php</code>. Notably excluded are <code>X-Wikimedia-Debug</code>, <code>/w/api.php</code> and <code>/w/rest.php</code>. </p><p>Hostnames: <code>appservers-ro.discovery.wmnet</code>, <code>appservers-rw.discovery.wmnet</code> </p> </td> <td><code>appserver</code> </td> <td><code>appserver</code> </td> <td><code>appserver</code> </td></tr> <tr> <th>Web (Kubernetes) </th> <td>Default catch-all for HTTP requests to wiki domains, if sampled into <a href="/wiki/MediaWiki_On_Kubernetes" title="MediaWiki On Kubernetes">MediaWiki On Kubernetes</a>, and not served by another group. <p>Hostnames: <code>mw-web-ro.discovery.wmnet</code>, <code>mw-web.discovery.wmnet</code> </p> </td> <td>– </td> <td><code>kube-mw-web</code> </td> <td>– </td></tr> <tr> <th>Debug servers </th> <td>Public HTTP to wiki domains, with <code>X-Wikimedia-Debug</code>. This is used by <a href="/wiki/WikimediaDebug" title="WikimediaDebug">WikimediaDebug</a>. <p>Hostnames: <code>mwdebug####.{eqiad,codfw}.wmnet</code> </p> </td> <td><code>appserver</code> </td> <td><code>appserver</code> </td> <td><code>testserver</code> </td></tr> <tr> <th>Debug (Kubernetes) </th> <td>Public HTTP to wiki domains, with <code>X-Wikimedia-Debug</code> and select <code>k8s-mwdebug</code> as backend. <p>Hostnames: <code>mwdebug.discovery.wmnet</code> </p> </td> <td>– </td> <td><code>kube-mw-debug</code> </td> <td>– </td></tr> <tr> <th>Misc (Kubernetes) </th> <td>Public HTTP request to <a href="/wiki/Noc.wikimedia.org" title="Noc.wikimedia.org">noc.wikimedia.org</a>. <p>Hostnames: <code>mw-misc.discovery.wmnet</code> </p> </td> <td>– </td> <td><style data-mw-deduplicate="TemplateStyles:r2211903">.mw-parser-output .note{background-position:left 7px top 50%;padding:0.5em 0.5em 0.5em 40px;margin:0.5em 0;overflow:hidden;background-color:#f8f9fa;color:#333;background-repeat:no-repeat;border:1px solid #ddd}.mw-parser-output .note-inline{display:inline-block;vertical-align:middle}.mw-parser-output .note-info{background-color:#eaf3ff;color:#333;background-image:url("https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg");background-size:25px;border-color:#a3caff;padding-left:40px;min-height:25px}.mw-parser-output .note-reminder{background-color:#fff9ea;color:#333;background-image:url("https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg");background-size:25px;border-color:#fc3;min-height:25px}.mw-parser-output .note-warn{background-color:#fff9ea;color:#333;background-image:url("https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg");background-size:25px;border-color:#fc3;min-height:25px}.mw-parser-output .note-error{background-color:#fee7e6;color:#333;background-image:url("https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg");background-size:25px;border-color:#c33;min-height:25px}@media screen{html.skin-theme-clientpref-night .mw-parser-output .note{background-color:transparent;color:inherit}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .note{background-color:transparent;color:inherit}}</style><div role="note" class="note note-info"><b>FIXME:</b> ?</div> </td> <td>– </td></tr> <tr> <th>API app servers </th> <td>Public HTTP to wiki domains, with <code>/w/api.php</code> or <code>/w/rest.php</code>. <p>Hostnames: <code>api-ro.discovery.wmnet</code>, <code>api-rw.discovery.wmnet</code> </p> </td> <td><code>api_appserver</code> </td> <td><code>api_appserver</code> </td> <td><code>api_appserver</code> </td></tr> <tr> <th>API external (Kubernetes) </th> <td>Public HTTP to wiki domains, with <code>/w/api.php</code> or <code>/w/rest.php</code>. <p>Hostnames: <code>mw-api-ext-ro.discovery.wmnet</code>, <code>mw-api-ext.discovery.wmnet</code> </p> </td> <td>– </td> <td><code>kube-mw-api-ext</code> </td> <td>– </td></tr> <tr> <th>API internal (Kubernetes) </th> <td>Internal HTTP to wiki domains , with <code>/w/api.php</code> or <code>/w/rest.php</code>. <p>Hostnames: <code>mw-api-int-ro.discovery.wmnet</code>, <code>mw-api-int.discovery.wmnet</code> </p> </td> <td>– </td> <td><code>kube-mw-api-int</code> </td> <td>– </td></tr> <tr> <th>Parsoid (Kubernetes) </th> <td>Internal HTTP from RESTBase to wiki domains, with <code>/w/rest.php</code> to call <a href="/wiki/Parsoid" title="Parsoid">Parsoid</a>. <p>Hostnames: <code>mw-parsoid.discovery.wmnet</code> </p> </td> <td><code>-</code> </td> <td><code>parsoid</code> </td> <td><code>-</code> </td></tr> <tr> <th>Jobrunners (Kubernetes) </th> <td>Internal HTTP from ChangeProp-JobQueue to wiki domains, with <code>/rpc/RunSingleJob.php</code>. <p>Hostnames: <code>mw-jobrunner.discovery.wmnet</code> </p> </td> <td>- </td> <td><code>jobrunner</code> </td> <td><code>-</code> </td></tr> <tr> <th>Videoscalers </th> <td>Internal HTTP from ChangeProp-JobQueue to wiki domains, with <code>/rpc/RunSingleJob.php</code>. <p>Hostnames: <code>videoscaler.discovery.wmnet</code> </p> </td> <td><code>jobrunner</code> </td> <td><code>jobrunner</code> </td> <td><code>videoscaler</code> </td></tr> <tr> <th>Maintenance server </th> <td>Internal php-cli processes that run <a href="/wiki/Mwscript" class="mw-redirect" title="Mwscript">mwscript</a> to invoke a MediaWiki maintenance script. These are either from cron (systemd timers), or run on ad-hoc by MediaWiki deployers shelling to a <a href="/wiki/Maintenance_server" title="Maintenance server">maintenance server</a>. <p>Hostnames: <code>mwmaint####.{eqiad,codfw}.wmnet</code> </p> </td> <td><code>misc</code> </td> <td><code>other</code> </td> <td>– </td></tr> <tr> <th>Snapshot hosts </th> <td>Internal php-cli processes that run <a href="/wiki/Mwscript" class="mw-redirect" title="Mwscript">mwscript</a>. These perform scheduled work to produce XML dumps. <p>Hostnames: <code>snapshot####.{eqiad,codfw}.wmnet</code> </p> </td> <td><code>dumps</code> </td> <td><code>other</code> </td> <td>– </td></tr></tbody></table> <p>For web requests to Apache on bare metal appservers, the <code>$_SERVER['SERVERGROUP']</code> environmente variable is automatically set based on the "Hiera cluster" value. For <a href="/wiki/MediaWiki_On_Kubernetes" title="MediaWiki On Kubernetes">MediaWiki On Kubernetes</a>, this is set in the <code>operations/deployment-charts.git</code> repo explicitly for each helm chart. See also <a href="/wiki/MediaWiki_On_Kubernetes/How_it_works" title="MediaWiki On Kubernetes/How it works">MediaWiki On Kubernetes/How it works</a>. </p><p>Logstash messages from MediaWiki carry a <code>servergroup</code> label that is set to <code>$_SERVER['SERVERGROUP']</code>. </p><p>Prometheus metrics (e.g. Grafana dashboards and Icinga alerts) carry a <code>cluster</code> field set to the "Hiera cluster" value as well. </p> <div class="mw-heading mw-heading2"><h2 id="MediaWiki_configuration">MediaWiki configuration</h2></div> <p>For web requests not served by <a href="#Infrastructure">the cache</a>, the request eventually arrives on an app server where Apache invokes PHP via <code>php-fpm</code>. </p> <div class="mw-heading mw-heading3"><h3 id="Document_root">Document root</h3></div> <dl><dd><i>Example request: <code><a class="external free" href="https://en.wikipedia.org/w/index.php">https://en.wikipedia.org/w/index.php</a></code></i></dd></dl> <p>The document root for a wiki domain like "en.wikipedia.org" is <code>/srv/mediawiki/docroot/wikipedia.org</code> (<a rel="nofollow" class="external text" href="https://github.com/wikimedia/operations-mediawiki-config/tree/master/docroot/wikipedia.org">source</a>). </p><p>The <code>/srv/mediawiki</code> directory on apps servers comes from the <a rel="nofollow" class="external text" href="https://github.com/wikimedia/operations-mediawiki-config">operations/mediawiki-config.git</a> repository, which is cloned on the <a href="/wiki/Deployment_server" title="Deployment server">Deployment server</a>, and then rsync'ed to the app servers by <a href="/wiki/Scap" title="Scap">Scap</a>. </p><p>The <code>docroot/wikipedia.org</code> directory is mostly empty, except for <code>w/</code>, which is symlinked to a wiki-agnostic directory that looks like a MediaWiki install (in that it has files like "index.php", "api.php", and "load.php"), but actually contains small stubs that invoke "Multiversion". </p> <div class="mw-heading mw-heading3"><h3 id="Multiversion">Multiversion</h3></div> <p><b>Multiversion</b> is a WMF-specific script (maintained in the operations/mediawiki-config repo) that inspects the hostname of the web request (e.g. "en.wikipedia.org"), and finds the appropiate MediaWiki installation for that hostname. The weekly <a href="/wiki/Deployments/Train" title="Deployments/Train">Deployment train</a> creates a fresh branch from the latest master of MediaWiki (including any extensions we deploy), and clones it to the deployment server in a directory named like <code>/srv/mediawiki/php-–</code>. </p><p>For example, if the English Wikipedia is running MediaWiki version <u>1.30.0-wmf.5</u>, then "en.wikipedia.org/w/index.php" will effectively be mapped to <code>/srv/mediawiki/php-<u>1.30.0-wmf.5</u>/index.php</code>. For more about the "wikiversions" selector, see <a href="/wiki/Heterogeneous_deployment" title="Heterogeneous deployment">Heterogeneous deployment</a>. </p><p>The train also creates a stub <code>LocalSettings.php</code> file in this <code>php-…</code> directory. This stub <code>LocalSettings.</code> file does nothing other than include <code>wmf-config/CommonSettings.php</code> (also in the operations/mediawiki-config repo). </p><p>The <code>CommonSettings.php</code> file is responsible for <b>configuring MediaWiki</b>, this includes database configuration (which DB server to connect to etc.), <b>loading MW extensions</b> and configuring them, and general site settings (name of the wiki, its logo, etc.). </p><p>After CommonSettings.php is done, MediaWiki handles the rest of the request and responds accordingly. </p> <div class="mw-heading mw-heading3"><h3 id="MediaWiki_internals">MediaWiki internals</h3></div> <p>To read more about how MediaWiki works in general, see: </p> <ul><li><a href="https://www.mediawiki.org/wiki/Manual:Code" class="extiw" title="mw:Manual:Code">Manual:Code</a> on mediawiki.org, about entry points and the directory structure of MediaWiki.</li> <li><a href="https://www.mediawiki.org/wiki/Manual:Index.php" class="extiw" title="mw:Manual:Index.php">Manual:Index.php</a> on mediawiki.org, for what a typical MediaWiki entrypoint does.</li></ul> <div class="mw-heading mw-heading2"><h2 id="Static_files"><span id="Versioned_resources"></span><span id="Unversioned_resources"></span>Static files</h2></div> <p>There are broadly speaking two kinds of static assets served by <a href="/wiki/Application_servers" title="Application servers">Apache</a> on MediaWiki application servers: </p> <ol><li><code>/w/**/*</code></li> <li><code>/static/**/*</code></li></ol> <div class="mw-heading mw-heading3"><h3 id="Application_resources">Application resources</h3></div> <ul><li>Route: <code>/w/**/*?1234567</code> or <code>/w/**/*</code> <ul><li>Varnish: Strip cookies, fixed hostname.</li> <li>Apache: Rewrite to <code>/w/static.php</code> (<a href="https://gerrit.wikimedia.org/g/operations/mediawiki-config/%2B/refs/heads/master/w/static.php" class="extiw" title="git:operations/mediawiki-config/+/refs/heads/master/w/static.php">source</a>).</li></ul></li> <li>Caching: public, 1 year, hostname-agnostic (Varnish object is shared across wiki domains).</li> <li>Stats: <a class="external text" href="https://grafana.wikimedia.org/d/000000212/mediawiki-static">Grafana: MediaWiki Static</a>.</li></ul> <p>Versioned resources are the most common way we serve static files, and is generally how new code should use assets. These URLs are produced by MediaWiki's ResourceLoader or OutputPage component, and work by mapping the URL to a file on disk, hashing it, and appending that hash as a query string. </p><p>This offers the strongest performance (client-side immutable, and server-side wiki-agnostic shared cache), whilst also operating under relatively tight requirements (must know the exact version at the point where the file is requested). This is especially difficult in the face of <a href="/wiki/Parser_cache" title="Parser cache">ParserCache</a> and our <a href="/wiki/Caching_overview" title="Caching overview">CDN</a>, given that you'd generally want to present users with a consistent experience from page-to-page where an icon or other visual aspect does not alternate based on when the page was last modified. The way we generally make this work is by linking to assets through one level of indirection, e.g. through a stylesheet or JavaScript manifest (see also: <a href="https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Caching" class="extiw" title="mw:ResourceLoader/Architecture">mw:ResourceLoader/Architecture#Caching</a>). </p><p>On the backend, the requests for versioned resources are rewritten to <code>/w/static.php</code>. This implements important behaviours: </p> <ul><li>If given a version hash, match the request with the right version of the file by checking the two currently active MW branches in production.</li> <li>If given a version hash, and the requested version is not found, we disable caching (reduce to 1 minute for clients and CDN). This avoids non-recovering cache poisoning around deployments, which would otherwise be possible given that we do not atomically group end-users and CDN servers and backend servers. More background about this eventual-consistency can be found in the <a href="https://gerrit.wikimedia.org/g/operations/mediawiki-config/%2B/refs/heads/master/w/static.php" class="extiw" title="git:operations/mediawiki-config/+/refs/heads/master/w/static.php">source</a>, and in <a href="https://phabricator.wikimedia.org/T47877" class="extiw" title="phab:T47877">T47877</a>.</li> <li>Without a version hash, serve the current version as found in the latest MW branch, regardless of hostname. In this case, it is expected that it is not important for changes to propagate immediately. They will generally propagate slowly over a 24-hour period, with any individual client always having a consistent experience between pages until a specific point where the resource is renewed and then all pages have the new version.</li></ul> <p>Below are examples of use cases where we can't reasonably specify a version hash and thus request the current version without a hash parameter: </p> <ul><li>Gadgets and user scripts that augment core functionality and reuse some of our assets. For example, Wikipedia's <a class="external text" href="https://en.wikipedia.org/w/index.php?title=MediaWiki:Vector.css&oldid=1026507000">Vector.css override</a> references an SVG icon from MediaWiki. It isn't versioned as the editor would otherwise have to keep it in sync with our deployments.</li> <li>Debug mode from ResourceLoader, where we intentionally serve internal JS and CSS files directly without minification at their "current" version. Cache performance is not a concern in debug mode.</li> <li>A tail of random things in core and extensions that reference static files that aren't part of any UI code. Such as <a href="https://en.wikipedia.org/wiki/Special:Version" class="extiw" title="en:Special:Version">Special:Version</a> linking the <code>COPYING</code> license file.</li> <li>ULS web fonts (<a href="https://phabricator.wikimedia.org/T135806" class="extiw" title="phab:T135806">T135806</a>). Upto 2021, files like this were sometimes served from "/static/current/**" which was deprecated in favour of simply "/w/**" in <a href="https://phabricator.wikimedia.org/T302465" class="extiw" title="phab:T302465">T302465</a>.</li></ul> <div class="mw-heading mw-heading3"><h3 id="WMF_resources"><span id="Static_resources"></span>WMF resources</h3></div> <ul><li>Route: <code>/static/**/*</code> <ul><li>Varnish: Strip cookies, fixed hostname.</li> <li>Apache: Serve file directly without involving PHP code. <ul><li>Files are in <a href="https://gerrit.wikimedia.org/g/operations/mediawiki-config/%2B/refs/heads/master/static/" class="extiw" title="git:operations/mediawiki-config/+/refs/heads/master/static/">operations/mediawiki-config.git:/static/</a></li> <li>Configuration: <a href="https://gerrit.wikimedia.org/g/operations/puppet/%2B/08a5cf67f8caa61c0b1e0de0ea185b8b5da051c7/modules/mediawiki/files/apache/modules/expires.conf#5" class="extiw" title="git:operations/puppet/+/08a5cf67f8caa61c0b1e0de0ea185b8b5da051c7/modules/mediawiki/files/apache/modules/expires.conf">puppet: apache/modules/expires.conf</a></li></ul></li></ul></li> <li>Caching: public, 1 year, hostname-agnostic (Varnish object is shared across wikis).</li></ul> <p>These are custom assets, generally pointed to from settings in wmf-config. </p><p>The most prominent example are our project logos and favicons. We want to serve these from a stable URL that we can expose through APIs, to external organizations, be saved in databases, ParserCache, CDN, etc.. These URLs present a consistent experience to any given user, regardless of when the page they are on was last edited or purged. Changes to "static" resources should be rare as browsers are allowed to use their copy offline, without revalidation, for up to a year. This means that purging from the CDN does not mean users can be expected to get the latest copy. </p><p>The <code>/static</code> directory is external to MediaWiki and only used if and when explicitly configured so in <code>wmf-config</code>. </p> <div class="mw-heading mw-heading2"><h2 id="Timeouts">Timeouts</h2></div> <div class="mw-heading mw-heading3"><h3 id="Request_timeouts">Request timeouts</h3></div> <p>Generally speaking, the app servers allow upto 60 seconds for most web requests (e.g. page views, HTTP GET), and for write actions we allow upto 200 seconds (e.g. edits, HTTP POST). </p> <dl><dd><i>» See <a href="/wiki/HTTP_timeouts#App_server" title="HTTP timeouts">HTTP timeouts#App server</a> for a detailed breakdown of the various timeouts on app servers.</i></dd></dl> <div class="mw-heading mw-heading3"><h3 id="Backend_timeouts">Backend timeouts</h3></div> <table class="wikitable"> <tbody><tr> <th colspan="2">MySQL/MariaDB </th></tr> <tr> <th>Setting </th> <td>MySQL's <code>event_scheduler</code> <a class="external text" href="https://phabricator.wikimedia.org/diffusion/OSOF/browse/master/dbtools/events_coredb_master.sql">core events master</a> <a class="external text" href="https://phabricator.wikimedia.org/diffusion/OSOF/browse/master/dbtools/events_coredb_slave.sql">core events replica</a> <ul><li>web requests user on running queries for read only replicas: 60s</li> <li>web requests user for idle connections for read only replicas: 60s</li> <li>web requests user read only replicas, on connection overload: 10s</li> <li>web requests user for idle connections on read-write master: 300s</li></ul> </td></tr> <tr> <th>Type </th> <td>Wall clock time </td></tr> <tr> <th>Notes </th> <td>This was added as a measure to prevent pileups from a single event, as well as to overcome the (considered not ideal behavior) of terminated connections keeping running even if there won't be any socket open to report to. Implemented on MySQL's event scheduler for legacy reasons, but using <code>max_execution_time</code> or equivalent should be probably ideal. </td></tr></tbody></table> <div class="mw-heading mw-heading2"><h2 id="Involved_codebases">Involved codebases</h2></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r2211903"><div role="note" class="note note-info"><b>This section is currently a draft.</b><br /> Material may not yet be complete, information may presently be omitted, and certain parts of the content may be subject to radical, rapid alteration. More information pertaining to this may be available on the <a href="/wiki/Talk:MediaWiki_at_WMF" title="Talk:MediaWiki at WMF">talk page</a>.</div> <ul><li>The "MediaWiki ecosystem" – <a href="https://gerrit.wikimedia.org/g/mediawiki/core" class="extiw" title="git:mediawiki/core">MediaWiki core</a> itself, <a href="https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/tools/release/%2B/refs/heads/master/make-release/settings.yaml#41" class="extiw" title="gerrit:plugins/gitiles/mediawiki/tools/release/+/refs/heads/master/make-release/settings.yaml">8 skins and 189 extensions</a> , and <a href="https://gerrit.wikimedia.org/g/operations/mediawiki-config" class="extiw" title="git:operations/mediawiki-config">production site configuration</a> (and <a href="https://gerrit.wikimedia.org/g/mediawiki/vendor" class="extiw" title="git:mediawiki/vendor">a static check-out</a> of our composer dependencies). This set of code totals (as of October 2022) approximately 2M lines of Wikimedia-maintained PHP (alongside another 1.2M of JavaScript),<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> plus third party libraries like Symfony, jQuery, Guzzle, and Vue.</li> <li>The "<a href="https://gerrit.wikimedia.org/g/operations/puppet/" class="extiw" title="git:operations/puppet/">puppet</a>" Wikimedia server orchestration and configuration This set of code totals (as of November 2022) approximately 200K lines of Puppet/ERB (plus 55K each of YAML and Python, 35K of Ruby, and 10K of Bash and Perl).<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></li></ul> <div class="mw-heading mw-heading2"><h2 id="Footnotes">Footnotes</h2></div> <ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">Calculated using cloc v1.94 in a fresh check-out of production 1.40.0-wmf.10 with:<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span>cloc<span class="w"> </span>--not-match-d<span class="w"> </span><span class="s1">'vendor|node_modules|lib'</span><span class="w"> </span>--fullpath<span class="w"> </span>--skip-uniqueness<span class="w"> </span>. cloc<span class="w"> </span>--skip-uniqueness<span class="w"> </span>vendor/wikimedia<span class="w"> </span>vendor/oojs<span class="w"> </span>vendor/wmde<span class="w"> </span>vendor/diff cloc<span class="w"> </span>--skip-uniqueness<span class="w"> </span>resources/lib/oo*<span class="w"> </span>resources/lib/codex*<span class="w"> </span>resources/lib/CLDRPluralRuleParser<span class="w"> </span>resources/lib/wvui </pre></div></span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">Calculated using cloc v1.94 in a check-out of the production branch on 2022-11-21 with:<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span>cloc<span class="w"> </span>. </pre></div></span> </li> </ol> <div class="mw-heading mw-heading2"><h2 id="Pages_in_the_MediaWiki_production_category">Pages in the <a href="/wiki/Category:MediaWiki_production" title="Category:MediaWiki production">MediaWiki production</a> category</h2></div> <div class="CategoryTreeTag" data-ct-options="{"mode":10,"hideprefix":20,"showcount":false,"namespaces":false,"notranslations":false}"><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreeBullet"><a class="CategoryTreeToggle" data-ct-title="MediaWiki_production" data-ct-loaded="1" aria-expanded="true"></a> </span> <bdi dir="ltr"><a href="/wiki/Category:MediaWiki_production" title="Category:MediaWiki production">MediaWiki production</a></bdi></div><div class="CategoryTreeChildren"><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Application_servers" title="Application servers">Application servers</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/MediaWiki_at_WMF" title="MediaWiki at WMF">MediaWiki at WMF</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Cron_jobs" title="Cron jobs">Cron jobs</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Heterogeneous_deployment" title="Heterogeneous deployment">Heterogeneous deployment</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/History_of_job_queue_runners_at_WMF" title="History of job queue runners at WMF">History of job queue runners at WMF</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/History_of_job_queue_runners_at_WMF/Jobrunner" title="History of job queue runners at WMF/Jobrunner">History of job queue runners at WMF/Jobrunner</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/How_to_do_a_schema_change" title="How to do a schema change">How to do a schema change</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Obsolete:LocalisationUpdate" title="Obsolete:LocalisationUpdate">Obsolete:LocalisationUpdate</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Maintenance_server" title="Maintenance server">Maintenance server</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/MediaWiki_and_EtcdConfig" title="MediaWiki and EtcdConfig">MediaWiki and EtcdConfig</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/MediaWiki_JobQueue" title="MediaWiki JobQueue">MediaWiki JobQueue</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/MediaWiki_UDP_logging" title="MediaWiki UDP logging">MediaWiki UDP logging</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Memcached_for_MediaWiki" title="Memcached for MediaWiki">Memcached for MediaWiki</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Mw-mcrouter" title="Mw-mcrouter">Mw-mcrouter</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Nutcracker" title="Nutcracker">Nutcracker</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Parser_cache" title="Parser cache">Parser cache</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Php-wmerrors" title="Php-wmerrors">Php-wmerrors</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Reattribute_edits" title="Reattribute edits">Reattribute edits</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Redis" title="Redis">Redis</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Rename_a_wiki" title="Rename a wiki">Rename a wiki</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/SecurePoll" title="SecurePoll">SecurePoll</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/Wikimedia_binaries" title="Wikimedia binaries">Wikimedia binaries</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div><div class="CategoryTreeSection"><div class="CategoryTreeItem"><span class="CategoryTreePageBullet"></span> <bdi dir="ltr"><a href="/wiki/WikimediaDebug" title="WikimediaDebug">WikimediaDebug</a></bdi></div><div class="CategoryTreeChildren" style="display:none"></div></div></div></div></div> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div> <ul><li><a href="/wiki/Infographics" title="Infographics">Infographics</a></li> <li><a href="/wiki/User:Quiddity/How_does_it_all_work" title="User:Quiddity/How does it all work">User:Quiddity/How does it all work</a>, related notes and infographics</li></ul> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐n58kz Cached time: 20241124125416 Cache expiry: 21600 Reduced expiry: true Complications: [show‐toc] CPU time usage: 0.093 seconds Real time usage: 0.124 seconds Preprocessor visited node count: 622/1000000 Post‐expand include size: 11214/2097152 bytes Template argument size: 3271/2097152 bytes Highest expansion depth: 8/100 Expensive parser function count: 2/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 17240/5000000 bytes --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 62.483 1 -total 48.36% 30.214 1 Template:Navigation_Wikimedia_infrastructure 28.83% 18.013 1 Template:Todo 24.84% 15.523 1 Template:Navigation_sidebar 21.66% 13.534 2 Template:Note 6.27% 3.918 2 Template:Anchor 4.63% 2.891 1 Template:Draft-section --> <!-- Saved in parser cache with key labswiki:pcache:idhash:84340-0!canonical and timestamp 20241124125416 and revision id 2243801. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://wikitech.wikimedia.org/w/index.php?title=MediaWiki_at_WMF&oldid=2243801">https://wikitech.wikimedia.org/w/index.php?title=MediaWiki_at_WMF&oldid=2243801</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Special:Categories" title="Special:Categories">Categories</a>: <ul><li><a href="/wiki/Category:Pages_with_FIXME_on_them" title="Category:Pages with FIXME on them">Pages with FIXME on them</a></li><li><a href="/w/index.php?title=Category:Drafts&action=edit&redlink=1" class="new" title="Category:Drafts (page does not exist)">Drafts</a></li><li><a href="/wiki/Category:MediaWiki_production" title="Category:MediaWiki production">MediaWiki production</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 13 November 2024, at 10:57.</li> <li id="footer-info-copyright">Text is available under the <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-ShareAlike License</a>; additional terms may apply. See <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">Terms of Use</a> for details.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Main_Page">About Wikitech</a></li> <li id="footer-places-disclaimers"><a href="https://foundation.wikimedia.org/wiki/General_disclaimer">Disclaimers</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/wikitech.wikimedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//wikitech.wikimedia.org/w/index.php?title=MediaWiki_at_WMF&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-n58kz","wgBackendResponseTime":234,"wgPageParseReport":{"limitreport":{"cputime":"0.093","walltime":"0.124","ppvisitednodes":{"value":622,"limit":1000000},"postexpandincludesize":{"value":11214,"limit":2097152},"templateargumentsize":{"value":3271,"limit":2097152},"expansiondepth":{"value":8,"limit":100},"expensivefunctioncount":{"value":2,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":17240,"limit":5000000},"timingprofile":["100.00% 62.483 1 -total"," 48.36% 30.214 1 Template:Navigation_Wikimedia_infrastructure"," 28.83% 18.013 1 Template:Todo"," 24.84% 15.523 1 Template:Navigation_sidebar"," 21.66% 13.534 2 Template:Note"," 6.27% 3.918 2 Template:Anchor"," 4.63% 2.891 1 Template:Draft-section"]},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-n58kz","timestamp":"20241124125416","ttl":21600,"transientcontent":true}}});});</script> </body> </html>