Add a wiki
Please note that the directions in this guide are approximate. Some cases may not need apache updates and some may not need docroot. You need to look at the existing similar wikis and see what is required.
This page will walk you through how to add a new wiki project. This includes new languages on sister projects, and wikis for committees, chapters etc.
- Tell in advance the Ops list, jcrespo (jynus) or Coren that this is happening so the storage layer can be prepared and checked (labs, backups, dumps). In particular, it needs to be made clear whether the wiki will be public - if so, ops will arrange for the wiki to be replicated to labs. If not, ops will need to add the wiki to $private_wikis in the puppet repository's manifests/realm.pp.
This can be fixed after the wiki creation, but it is more painful/involves custom queries.
- First of all, the DNS entry for the new wiki has to be added. Make the following changes to your local checkout of operations/dns.git and submit to gerrit for review.
- If it is a language project, add the language code to
/templates/helpers/langs.tmplin operations/dns repo. If it is not a new language, then it has probably been done already as these are shared by all the sister projects.
- If it is a wiki in *.wikimedia.org domain (chapter wiki or special wiki), add it to
/templates/wikimedia.org. Make sure to add a mobile entry if necessary.
- If it is a language project, add the language code to
- Merge the change in gerrit and run
authdns-update. Query the DNS servers to make sure it has been correctly deployed. See DNS#HOWTO for details.
- Secondly, add Apache configuration for the new wiki by submitting it to gerrit first. They are now located at
- Common configuration:
- For languages projects, this step is usually not needed as it has been configured already.
- For chapter wikis, add ServerAlias to wikimedia-chapter VirtualHost in
- For Wikimania wikis, add ServerAlias to
- After merging on Gerrit, do
apache-graceful-all(needs verification?). See Apache for details.
- If there are any other domains which should point to the same wiki, add it to
You will firstly have to login to our deployment host. As of sometime, this is the host tin, you will have to go via bast1001. Then gather all relevant information for the new project, including all configuration variables and entries. Each wiki will have different requirements (project name, namespaces, extensions to be enabled etc).
You now have to determine if this is a new language project (say something like Spanish Wikibooks) or a chapter wiki, or a special wiki (anything else, including private wikis). Then choose the correct part of this manual:
- Make sure the language has been approved by the Language committee at Requests for new languages on Meta-Wiki. Usually, the Maniphest task will contain a link to the approval page.
- Make the following changes on your own checkout of operations/mediawiki-config.git:
- Make sure that the language code appears in jquery.uls's langdb (file data/langdb.yaml).
- Go to #Finish
IMPORTANT: For Private Wikis
- Private wiki databases must not be replicated to the labsdb MySQL instances!
- Before creating a database for a new private wiki, make sure to add the db name to the puppet global array $private_wikis in manifests\realm.pp.
- Deploy this config change with puppet and manually restart the Prelabsdb-db (Sanitarium) MySQL instance that will house this wiki's db (most likely s3).
- If you need help with this, please ask a member of the Ops team for help. This is very important.
- Make the following changes on your own checkout of operations/mediawiki-config.git and submit to Gerrit for review:
- If it is a new language, add the language code (ISO 639 code: usually provided in the task) to langlist. This will be used at Special:SiteMatrix and for interwiki linking etc.
- Update the configuration files (located at
/wmf-config). Some may not be required but the following are the most common wiki-specific settings in InitialiseSettings.php:
- For *wikimedia databases, add the subdomain to the list in MWMultiVersion::setSiteInfoForWiki
- Add the wiki to the relevant dblists (under the
|Database lists of wikis in each MySQL database cluster|
|all.dblist||All wikis should be listed in here|
|closed.dblist||Any closed (no write access, full read access) wikis|
|deleted.dblist||Wiki databases which MediaWiki is no longer configured to access|
|Database lists of wikis arranged into their relevant size|
|flaggedrevs.dblist||All wikis running the FlaggedRevs extension|
|securepollglobal.dblist||$wgSecurePollCreateWikiGroups wikis: Board Election wikis|
|visualeditor-default.dblist||All wikis where VisualEditor is enabled by default|
|commonsuploads.dblist||All wikis which should have local uploading soft-disabled. Uploads go to Commons instead.|
|fishbowl.dblist||All fishbowl (restricted write access, full read access) wikis|
|private.dblist||All private (read and write restricted) wikis|
|special.dblist||All special wikis|
|wikidata.dblist||All wikis running the Wikidata repo|
|wikidataclient.dblist||All wikis running the Wikidata client (most new language-project wikis should start off like this)|
|wikimania.dblist||All Wikimania wikis|
|wikimedia.dblist||All chapter wikis|
|wikibooks.dblist||All Wikibooks wikis|
|wikinews.dblist||All Wikinews wikis|
|wikipedia.dblist||All Wikipedia wikis|
|wikiquote.dblist||All Wikiquote wikis|
|wikisource.dblist||All Wikisource wikis|
|wikiversity.dblist||All Wikiversity wikis|
|wikivoyage.dblist||All Wikivoyage wikis|
|wiktionary.dblist||All Wiktionary wikis|
- Now it is time to actually create the database (this script also performs other tasks, such as notifying the 'newprojects' mailing list). There are two different ways to do this, depending on if you did Part A, B, or C above:
- Part A is for standard language additions to projects, like adding a Spanish Wikinews, which will be my example.
- Part B is for Chapters Wikis. My example will be adding a Finnish chapter wiki:
- Part C is for non-standard special wikis such as committees, chapters, and the like. My example will be strategy.wikimedia.org.
(Note the 'aawiki' in these examples: aawiki is in s3, so this will create the database in s3, which is usually the right place for new small wikis.)
- Merge the config change in Gerrit, and pull it onto tin
- Check *.dblist files now contain the new wiki
- Run sync-dir dblists to synchronize all database lists
- Check wikiversions.json is sane
- Run sync-wikiversions to synchronize the version number to use for this wiki
- Run sync-file wmf-config/InitialiseSettings.php
- Run sync-file w/static/images/project-logos/path-to-logo.png
- Run sync-file langlist (this must be done before the interwiki cache below)
- Unless it's a language project, update the meta:Interwiki map
Parsoid has it's own copy of SiteMatrix, which needs updating using tools/fetch-sitematrix.js in mediawiki/services/parsoid.git.
You shouldn't have to do much (maybe adjust shard sizes preemptively if it'll be big), the index should be automatically created by addWiki.php and all wikis now opt into Cirrus/Elastic by default. See Search/New#Adding_new_wikis for more information.
- Public wikis:
- Create the container for thumbnails. mwscript extensions/WikimediaMaintenance/filebackend/setZoneAccess.php databasename --backend=local-multiwrite
- Private wikis:
- Create the container for thumbnails. mwscript extensions/WikimediaMaintenance/filebackend/setZoneAccess.php databasename --backend=local-multiwrite --private
Create a patch for ops/puppet to add the database to the correct list in modules/role/manifests/labs/dnsrecursor.pp
After you finished
If there's something to import (as is often the case in new Language wikis), someone will do so, following the process described at MetaWikipedia:incubator:Incubator:Importing from Incubator (logged at MetaWikipedia:incubator:Incubator:Site creation log). Then when that's done, add the language code to the ContentTranslation registry - mediawiki/services/cxserver repository, files config.dev.yaml and config.prod.yaml, in the source and target sections in each.
See also Delete a wiki.