Jump to content

Mediawiki Additional Configuration: Difference between revisions

From MediawikiCIT
Created page with "== MediaWiki Additional Configuration Guide == <div style="font-size: 100%;"> '''''This guide covers advanced configuration options for your MediaWiki installation, including logos, permissions, email, private namespaces, and two-factor authentication.''''' <div style="background-color: #fff3cd; border-left: 4px solid #ffc107; padding: 12px; margin: 15px 0; font-size: 90%;"> '''Prerequisites:''' Complete the '''MediaWiki Docker Setup Guide''' before proceeding with..."
 
No edit summary
 
(4 intermediate revisions by 2 users not shown)
Line 61: Line 61:
</syntaxhighlight>
</syntaxhighlight>


Find the existing <code>$wgLogos</code> section (it looks like this):
Find the existing <code>$wgLogos</code> section and replace it with:


<syntaxhighlight lang="php" style="font-size: 85%;">
<syntaxhighlight lang="php" style="font-size: 85%;">
$wgLogos = [
$wgLogos = [
'1x' => "$wgResourceBasePath/resources/assets/change-your-logo.svg",
'1x'   => "$wgResourceBasePath/images/yourlogo-160.svg",
'icon' => "$wgResourceBasePath/resources/assets/change-your-logo.svg",
];
</syntaxhighlight>
 
Replace it with:
 
<syntaxhighlight lang="php" style="font-size: 85%;">
$wgLogos = [
'1x' => "$wgResourceBasePath/images/yourlogo-160.svg",
'icon' => "$wgResourceBasePath/images/yourlogo-50.svg",
'icon' => "$wgResourceBasePath/images/yourlogo-50.svg",
];
];
Line 94: Line 85:
'''3. Configure the Modern Vector Skin'''
'''3. Configure the Modern Vector Skin'''


MediaWiki comes with several "skins" (visual themes). The Vector skin has a modern version called <code>vector-2022</code>.
Open LocalSettings.php and find <code>$wgDefaultSkin</code>. Replace it with this configuration block:
 
Open LocalSettings.php again:
 
<syntaxhighlight lang="bash" style="font-size: 85%;">
sudo nano /opt/stacks/mediawiki/LocalSettings.php
</syntaxhighlight>
 
Find this line near the bottom:
 
<syntaxhighlight lang="php" style="font-size: 85%;">
$wgDefaultSkin = "monobook";
</syntaxhighlight>
 
Replace it with this configuration block:


<syntaxhighlight lang="php" style="font-size: 85%;">
<syntaxhighlight lang="php" style="font-size: 85%;">
Line 123: Line 100:
$wgVectorFeatureFlags = [
$wgVectorFeatureFlags = [
     'VectorAppearance' => [
     'VectorAppearance' => [
         'logged_in' => true,
         'logged_in' => true,
         'logged_out' => true,
         'logged_out' => true,
     ],
     ],
Line 145: Line 122:


<div style="background-color: #fff3cd; border-left: 4px solid #ffc107; padding: 12px; margin: 15px 0; font-size: 90%;">
<div style="background-color: #fff3cd; border-left: 4px solid #ffc107; padding: 12px; margin: 15px 0; font-size: 90%;">
'''Important:''' This example uses Gmail. If using another email provider, you'll need their SMTP settings.
'''Important:''' This configuration uses environment variables to keep sensitive credentials out of LocalSettings.php. You will need to configure both your <code>.env</code> file and <code>docker-compose.yml</code>.
</div>
</div>


'''Step A: Generate a Gmail App Password'''
'''Step A: Set Up the .env File'''


If using Gmail, you need an "App Password" (regular passwords won't work):
Create or edit your <code>.env</code> file at <code>/opt/stacks/mediawiki/.env</code> and add your SMTP credentials:


# Go to your Google Account: https://myaccount.google.com/
<syntaxhighlight lang="bash" style="font-size: 85%;">
# Click '''Security''' in the left sidebar
# SMTP Configuration
# Scroll to "How you sign in to Google"
SMTP_HOST=mail.comfac-it.com
# Click '''2-Step Verification''' (you must enable this first)
SMTP_PORT=587
# Scroll down and click '''App passwords'''
SMTP_USER=your-email@comfac-it.com
# Select '''Mail''' and '''Other (Custom name)'''
SMTP_PASS=your_smtp_password_here
# Type "MediaWiki" as the name
</syntaxhighlight>
# Click '''Generate'''
 
# Copy the 16-character password (it looks like: <code>abcd efgh ijkl mnop</code>)
<div style="background-color: #fff3cd; border-left: 4px solid #ffc107; padding: 12px; margin: 15px 0; font-size: 90%;">
'''Warning:''' Never commit your <code>.env</code> file to version control. Add it to <code>.gitignore</code>.
</div>


'''Step B: Add Email Configuration to LocalSettings.php'''
'''Step B: Pass Environment Variables in docker-compose.yml'''


Open LocalSettings.php:
Ensure your <code>docker-compose.yml</code> passes the SMTP variables into the MediaWiki container:


<syntaxhighlight lang="bash" style="font-size: 85%;">
<syntaxhighlight lang="yaml" style="font-size: 85%;">
sudo nano /opt/stacks/mediawiki/LocalSettings.php
services:
  mediawiki:
    image: mediawiki
    container_name: mediawiki
    restart: always
    ports:
      - "${MEDIAWIKI_PORT}:80"
    depends_on:
      - database
    volumes:
      - ./230912_images:/var/www/html/images
      - /opt/stacks/mediawiki/extensions:/var/www/html/extensions
      - /opt/stacks/mediawiki/LocalSettings.php:/var/www/html/LocalSettings.php:ro
    environment:
      - SMTP_HOST=${SMTP_HOST}
      - SMTP_PORT=${SMTP_PORT}
      - SMTP_USER=${SMTP_USER}
      - SMTP_PASS=${SMTP_PASS}
</syntaxhighlight>
</syntaxhighlight>


Scroll to the bottom (after the extensions section) and add:
'''Step C: Add Email Configuration to LocalSettings.php'''
 
Open LocalSettings.php and add the following section after the extensions block:


<syntaxhighlight lang="php" style="font-size: 85%;">
<syntaxhighlight lang="php" style="font-size: 85%;">
/*-------------------------------------------
/*-------------------------------------------
EMAIL & SMTP CONFIGURATION
EMAIL & SMTP CONFIGURATION
----------------------------------------- */
-------------------------------------------*/


# Enable email features
# Enable email features
$wgEnableEmail = true;
$wgEnableEmail     = true;
$wgEnableUserEmail = true;
$wgEnableUserEmail = true;
$wgEmailAuthentication = true;
$wgEmailAuthentication = true;


# Enable email notifications for talk pages and watchlist
# Enable email notifications for talk pages and watchlist
$wgEnotifUserTalk = true;
$wgEnotifUserTalk = true;
$wgEnotifWatchlist = true;
$wgEnotifWatchlist = true;


# Set your wiki's email addresses
# Set your wiki's email addresses
$wgEmergencyContact = "your-email@gmail.com";
$wgEmergencyContact = "your-email@comfac-it.com";
$wgPasswordSender = "your-email@gmail.com";
$wgPasswordSender   = "your-email@comfac-it.com";


# Gmail SMTP configuration
# SMTP configuration — credentials loaded from environment variables
$wgSMTP = [
$wgSMTP = [
     'host'    => 'smtp.gmail.com',
     'host'    => getenv('SMTP_HOST'),  # e.g. mail.comfac-it.com
     'IDHost'  => 'yourdomain.com',           # Your domain (or 'gmail.com' for testing)
     'IDHost'  => 'comfac-it.com',       # Your mail domain
     'port'    => 587,
     'port'    => getenv('SMTP_PORT'),  # 587 for TLS
     'auth'    => true,
     'auth'    => true,
     'username' => 'your-email@gmail.com',     # Your Gmail address
     'username' => getenv('SMTP_USER'),   # Your SMTP username
     'password' => 'your app password here',  # Paste your 16-character App Password
     'password' => getenv('SMTP_PASS'),  # Your SMTP password
     'secure'  => 'tls'
     'secure'  => 'tls'
];
];


# Email settings
# Additional email settings
$wgUserEmailUseReplyTo = true;
$wgUserEmailUseReplyTo = true;
$wgAllowHTMLEmail = true;
$wgAllowHTMLEmail     = true;


# Enable password reset via email
# Enable password reset via email
$wgPasswordResetRoutes = [
$wgPasswordResetRoutes = [
     'username' => true,
     'username' => true,
     'email' => true,
     'email'   => true,
];
];


# Password reset links expire after 24 hours
# Password reset links expire after 24 hours
$wgNewPasswordExpiry = 86400;
$wgNewPasswordExpiry = 86400;
# ================================
# ALLOWED EMAIL DOMAINS
# ================================
# Users can register/use these email domains
$wgAllowedEmailDomains = [
    'gmail.com',
    'comfac.net',
    'comfac-it.com',
];
</syntaxhighlight>
</syntaxhighlight>


<div style="background-color: #f8f9fa; border-left: 4px solid #3498db; padding: 12px; margin: 15px 0; font-size: 90%;">
<div style="background-color: #f8f9fa; border-left: 4px solid #3498db; padding: 12px; margin: 15px 0; font-size: 90%;">
'''Replace these values:'''
'''What this does:'''
* <code>your-email@gmail.com</code> → Your actual Gmail address
* Uses <code>getenv()</code> to read SMTP credentials from Docker environment variables at runtime
* <code>your app password here</code> → The 16-character password from Step A (remove spaces)
* Keeps passwords out of <code>LocalSettings.php</code> and version control
* <code>yourdomain.com</code> → Your wiki's domain name
* <code>IDHost</code> is set to your mail domain (<code>comfac-it.com</code>)
* Restricts user email registration to approved domains only
</div>
</div>


Line 228: Line 238:
'''5. Create a Clean Permission Structure'''
'''5. Create a Clean Permission Structure'''


By default, MediaWiki allows anyone to edit. Let's create a more controlled system with different user levels.
Open LocalSettings.php and replace the permissions section with:
 
Open LocalSettings.php:
 
<syntaxhighlight lang="bash" style="font-size: 85%;">
sudo nano /opt/stacks/mediawiki/LocalSettings.php
</syntaxhighlight>
 
Find the existing permissions section in your CUSTOM PERMISSIONS & EXTENSIONS block:
 
<syntaxhighlight lang="php" style="font-size: 85%;">
// 1. SECURITY: Prevent anonymous editing and account creation
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['createaccount'] = false;
</syntaxhighlight>
 
Replace it with this expanded permission system:


<syntaxhighlight lang="php" style="font-size: 85%;">
<syntaxhighlight lang="php" style="font-size: 85%;">
Line 251: Line 245:
----------------------------------------- */
----------------------------------------- */


# ANONYMOUS USERS (not logged in)
# Anonymous users
$wgGroupPermissions['*']['read'] = true;           # Can view pages
$wgGroupPermissions['*']['read']         = true;
$wgGroupPermissions['*']['edit'] = false;         # Cannot edit
$wgGroupPermissions['*']['edit']         = false;
$wgGroupPermissions['*']['createaccount'] = false; # Cannot create accounts
$wgGroupPermissions['*']['createaccount'] = false;


# LOGGED-IN USERS (default group)
# Allow bureaucrats/admins to create accounts
$wgGroupPermissions['user']['read'] = true;       # Can view pages
$wgGroupPermissions['bureaucrat']['createaccount'] = true;
$wgGroupPermissions['user']['edit'] = false;      # Cannot edit (read-only)


# EDITOR GROUP (must be assigned by admin)
# Logged-in users (view only)
$wgGroupPermissions['editor']['read'] = true;     # Can view pages
$wgGroupPermissions['user']['read'] = true;
$wgGroupPermissions['editor']['edit'] = true;      # Can edit pages
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['editor']['upload'] = true;    # Can upload files
$wgGroupPermissions['editor']['reupload'] = true; # Can replace existing files


# SYSOP GROUP (administrators)
# Editor group
$wgGroupPermissions['sysop']['read'] = true;       # Can view pages
$wgGroupPermissions['editor']['read']     = true;
$wgGroupPermissions['sysop']['edit'] = true;       # Can edit pages
$wgGroupPermissions['editor']['edit']     = true;
$wgGroupPermissions['sysop']['protect'] = true;   # Can protect pages
$wgGroupPermissions['editor']['upload']   = true;
$wgGroupPermissions['sysop']['userrights'] = true; # Can assign user groups
$wgGroupPermissions['editor']['reupload'] = true;


# Enable protection levels
# Sysop (admin)
$wgRestrictionLevels[] = 'user';
$wgGroupPermissions['sysop']['read']          = true;
$wgGroupPermissions['sysop']['edit']          = true;
$wgGroupPermissions['sysop']['protect']      = true;
$wgGroupPermissions['sysop']['userrights']   = true;
$wgGroupPermissions['sysop']['createaccount'] = true;
</syntaxhighlight>
</syntaxhighlight>


Line 288: Line 283:


After restarting your wiki, log in as an admin and go to:
After restarting your wiki, log in as an admin and go to:
* '''Special:UserRights''' (or click '''Special Pages''' → '''User rights management''')
* '''Special:UserRights''' (or click '''Special Pages''' → '''User and rights section''')
* Enter a username
* Enter a username
* Check the '''editor''' box
* Check the '''editor''' box
Line 297: Line 292:


=== Part 5: Creating a Private Namespace ===
=== Part 5: Creating a Private Namespace ===
Private namespaces let you create pages that only certain user groups can see. This is useful for internal documentation, confidential information, or drafts.


'''6. Configure the Private Namespace'''
'''6. Configure the Private Namespace'''


The Lockdown extension should already be installed from the basic setup. Now let's configure it.
Open LocalSettings.php and add this section after your extensions:
 
Open LocalSettings.php:
 
<syntaxhighlight lang="bash" style="font-size: 85%;">
sudo nano /opt/stacks/mediawiki/LocalSettings.php
</syntaxhighlight>
 
Add this section after your extensions (near the bottom of the CUSTOM PERMISSIONS & EXTENSIONS block):


<syntaxhighlight lang="php" style="font-size: 85%;">
<syntaxhighlight lang="php" style="font-size: 85%;">
Line 321: Line 306:


# Define namespace IDs (must be unique)
# Define namespace IDs (must be unique)
define("NS_PRIVATE", 3000);
define("NS_PRIVATE",     3000);
define("NS_PRIVATE_TALK", 3001);
define("NS_PRIVATE_TALK", 3001);


# Register the namespace names
# Register the namespace names
$wgExtraNamespaces[NS_PRIVATE] = "Private";
$wgExtraNamespaces[NS_PRIVATE]     = "Private";
$wgExtraNamespaces[NS_PRIVATE_TALK] = "Private_talk";
$wgExtraNamespaces[NS_PRIVATE_TALK] = "Private_talk";


# Set permissions for the Private namespace
# Only logged-in users, editors, and admins can READ
# Only logged-in users, editors, and admins can READ
$wgNamespacePermissionLockdown[NS_PRIVATE]['read'] = ['user', 'editor', 'sysop'];
$wgNamespacePermissionLockdown[NS_PRIVATE]['read'] = ['user', 'editor', 'sysop'];
Line 339: Line 323:
'''How to use the Private namespace:'''
'''How to use the Private namespace:'''


To create a private page, use this format in the URL or search:
To create a private page, use this format: <code>Private:YourPageName</code>
* <code>Private:YourPageName</code>


Example: <code>Private:Company_Policies</code>
Example: <code>Private:Company_Policies</code>
Line 350: Line 333:


=== Part 6: Additional Recommended Extensions ===
=== Part 6: Additional Recommended Extensions ===
These extensions add useful features for a professional wiki.


'''7. Enable Additional Extensions'''
'''7. Enable Additional Extensions'''


Open LocalSettings.php:
Open LocalSettings.php and expand your extensions section:
 
<syntaxhighlight lang="bash" style="font-size: 85%;">
sudo nano /opt/stacks/mediawiki/LocalSettings.php
</syntaxhighlight>
 
Find your EXTERNAL EXTENSIONS section and expand it with these additional extensions:


<syntaxhighlight lang="php" style="font-size: 85%;">
<syntaxhighlight lang="php" style="font-size: 85%;">
// 3. EXTERNAL EXTENSIONS
wfLoadExtension( 'Mermaid' );
/*-------------------------------------------
/*-------------------------------------------
ADDITIONAL RECOMMENDED EXTENSIONS
ADDITIONAL RECOMMENDED EXTENSIONS
Line 372: Line 344:


# Content organization
# Content organization
wfLoadExtension( 'CategoryTree' );     # Browse categories as tree structure
wfLoadExtension( 'CategoryTree' );
wfLoadExtension( 'ImageMap' );         # Clickable image regions
wfLoadExtension( 'ImageMap' );


# User experience
# User experience
wfLoadExtension( 'Echo' );             # Notification system
wfLoadExtension( 'Echo' );
wfLoadExtension( 'Thanks' );           # Thank users for edits
wfLoadExtension( 'Thanks' );
wfLoadExtension( 'DiscussionTools' );   # Better talk page discussions
wfLoadExtension( 'DiscussionTools' );


# Content features
# Content features
wfLoadExtension( 'TemplateData' );     # Document templates
wfLoadExtension( 'TemplateData' );
wfLoadExtension( 'TemplateStyles' );   # CSS styling for templates
wfLoadExtension( 'TemplateStyles' );
wfLoadExtension( 'Poem' );             # Format poetry and verse
wfLoadExtension( 'Poem' );


# File handling
# File handling
wfLoadExtension( 'PdfHandler' );       # Display PDF thumbnails
wfLoadExtension( 'PdfHandler' );
wfLoadExtension( 'MultimediaViewer' ); # Better image viewing
wfLoadExtension( 'MultimediaViewer' );


# Moderation & security
# Moderation & security
wfLoadExtension( 'ConfirmEdit' );       # CAPTCHA for spam prevention
wfLoadExtension( 'ConfirmEdit' );
wfLoadExtension( 'SpamBlacklist' );     # Block spam URLs
wfLoadExtension( 'SpamBlacklist' );
wfLoadExtension( 'TitleBlacklist' );   # Block page title patterns
wfLoadExtension( 'TitleBlacklist' );
wfLoadExtension( 'CiteThisPage' );     # Citation tools
wfLoadExtension( 'CiteThisPage' );
wfLoadExtension( 'AbuseFilter' );
wfLoadExtension( 'LoginNotify' );
</syntaxhighlight>
</syntaxhighlight>


<div style="background-color: #fff3cd; border-left: 4px solid #ffc107; padding: 12px; margin: 15px 0; font-size: 90%;">
<div style="background-color: #fff3cd; border-left: 4px solid #ffc107; padding: 12px; margin: 15px 0; font-size: 90%;">
'''Note:''' Some of these extensions may already be included in your MediaWiki installation. If you get an error about a missing extension after restarting, simply comment out that line by adding <code>#</code> at the beginning or remove it entirely.
'''Note:''' If you get an error about a missing extension after restarting, comment out that line by adding <code>#</code> at the beginning.
</div>
</div>


Line 406: Line 380:
'''8. Configure Upload Settings'''
'''8. Configure Upload Settings'''


Open LocalSettings.php:
Open LocalSettings.php and update the upload settings:
 
<syntaxhighlight lang="bash" style="font-size: 85%;">
sudo nano /opt/stacks/mediawiki/LocalSettings.php
</syntaxhighlight>
 
Find the line with <code>$wgEnableUploads</code> and update the upload settings:


<syntaxhighlight lang="php" style="font-size: 85%;">
<syntaxhighlight lang="php" style="font-size: 85%;">
# Enable file uploads
# Enable file uploads
$wgEnableUploads = true;
$wgEnableUploads = true;
$wgUseImageMagick = true;
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";
$wgImageMagickConvertCommand = "/usr/bin/convert";
Line 426: Line 394:
# Allow SVG files with embedded titles
# Allow SVG files with embedded titles
$wgAllowTitleInSVG = true;
$wgAllowTitleInSVG = true;
$wgSVGConverter = 'ImageMagick';
$wgSVGConverter   = 'ImageMagick';
</syntaxhighlight>
</syntaxhighlight>
<div style="background-color: #f8f9fa; border-left: 4px solid #3498db; padding: 12px; margin: 15px 0; font-size: 90%;">
'''Note:''' You can add or remove file extensions based on your needs. Be cautious about allowing executable files or scripts.
</div>


Save and exit.
Save and exit.


=== Part 8: Two-Factor Authentication for Administrators ===
=== Part 8: Two-Factor Authentication for Administrators ===
Add an extra layer of security by requiring administrators to use two-factor authentication.


'''9. Install the OATHAuth Extension'''
'''9. Install the OATHAuth Extension'''
Line 457: Line 419:
'''10. Configure OATHAuth for Admins Only'''
'''10. Configure OATHAuth for Admins Only'''


Open LocalSettings.php:
Open LocalSettings.php and add:
 
<syntaxhighlight lang="bash" style="font-size: 85%;">
sudo nano /opt/stacks/mediawiki/LocalSettings.php
</syntaxhighlight>
 
Add this configuration after your extensions:


<syntaxhighlight lang="php" style="font-size: 85%;">
<syntaxhighlight lang="php" style="font-size: 85%;">
Line 476: Line 432:
$wgOATHRequiredForGroups = ['sysop'];
$wgOATHRequiredForGroups = ['sysop'];


# Optional: Also require 2FA for bureaucrats if you have this group
# Optional: Also require 2FA for bureaucrats
# $wgOATHRequiredForGroups = ['sysop', 'bureaucrat'];
# $wgOATHRequiredForGroups = ['sysop', 'bureaucrat'];


# Allow TOTP (Time-based One-Time Password) - works with Google Authenticator, Authy, etc.
# Allow TOTP - works with Google Authenticator, Authy, etc.
$wgOATHAuthModules = [
$wgOATHAuthModules = [
     'totp' => [
     'totp' => [
Line 489: Line 445:
<div style="background-color: #f8f9fa; border-left: 4px solid #3498db; padding: 12px; margin: 15px 0; font-size: 90%;">
<div style="background-color: #f8f9fa; border-left: 4px solid #3498db; padding: 12px; margin: 15px 0; font-size: 90%;">
'''What this does:'''
'''What this does:'''
* Loads the OATHAuth extension
* Requires 2FA only for users in the <code>sysop</code> (administrator) group
* '''Requires''' 2FA only for users in the 'sysop' (administrator) group
* Regular users and editors do NOT need 2FA
* Regular users and editors do NOT need 2FA
* Uses TOTP method (compatible with most authenticator apps)
* Uses TOTP method (compatible with most authenticator apps)
Line 500: Line 455:


'''11. Update the Database and Restart'''
'''11. Update the Database and Restart'''
After making all these configuration changes, update your database and restart the containers:


<syntaxhighlight lang="bash" style="font-size: 85%;">
<syntaxhighlight lang="bash" style="font-size: 85%;">
Line 517: Line 470:


'''12. Set Up 2FA for Administrator Accounts'''
'''12. Set Up 2FA for Administrator Accounts'''
Now each administrator needs to enable 2FA on their account.


'''Step A: Install an Authenticator App (If Not Already Installed)'''
'''Step A: Install an Authenticator App (If Not Already Installed)'''
Line 534: Line 485:
# Click '''Preferences'''
# Click '''Preferences'''
# Click the '''Two-factor authentication''' tab (or '''OATH''' tab)
# Click the '''Two-factor authentication''' tab (or '''OATH''' tab)
# Click '''Enable two-factor authentication'''
# Click '''Manage''' and '''Add an authenticator app'''
# You'll see a QR code on the screen
# You'll see a QR code on the screen


Line 554: Line 505:
'''CRITICAL - Save Your Recovery Codes!'''
'''CRITICAL - Save Your Recovery Codes!'''


Write down or securely save your recovery codes (also called scratch codes). If you lose access to your phone, these codes are the ONLY way to regain access to your account. Store them in a safe place like:
Write down or securely save your recovery codes. If you lose access to your phone, these codes are the ONLY way to regain access to your account. Each recovery code can only be used once.
* A password manager
* A secure note app
* Printed on paper in a safe location
 
Each recovery code can only be used once.
</div>
</div>


'''13. Test Two-Factor Authentication'''
'''13. Test Two-Factor Authentication'''
'''Log out and log back in''' to verify 2FA is working:


# Log out of your MediaWiki account
# Log out of your MediaWiki account
# Log back in with your username and password
# Log back in with your username and password
# You'll now see a new screen asking for a '''Two-factor authentication token'''
# You'll now see a screen asking for a '''Two-factor authentication token'''
# Open your authenticator app
# Open your authenticator app and enter the current 6-digit code
# Enter the current 6-digit code
# Click '''Continue''' or '''Log in'''
# Click '''Continue''' or '''Log in'''
You should now be logged in successfully!


== Verification Checklist ==
== Verification Checklist ==
Line 579: Line 520:
'''14. Test Your Configuration'''
'''14. Test Your Configuration'''


Visit your wiki and verify these features are working:
'''Logo & Skin'''
* Your custom logo appears in the top-left corner and as the favicon
* The modern Vector 2022 skin is active


* '''Logo:''' Your custom logo appears in the top-left corner and as the favicon
'''Permissions'''
 
* '''Skin:''' The modern Vector 2022 skin is active
 
* '''Permissions:'''  
# Log out and confirm you can only read pages
# Log out and confirm you can only read pages
# Log in as a regular user and confirm you cannot edit
# Log in as a regular user and confirm you cannot edit
# Log in as admin and assign the "editor" role to a test user via '''Special:UserRights'''
# Log in as admin and assign the "editor" role via '''Special:UserRights'''
# Confirm the editor can now edit pages
# Confirm the editor can now edit pages


* '''Email:'''  
'''Email'''
# Click "Forgot password?" on the login page
# Click "Forgot password?" on the login page
# Enter your username or email
# Enter your username or email and verify you receive the reset email
# Check that you receive the reset email


* '''Private Namespace:'''
'''Private Namespace'''
# Create a page like <code>Private:Test</code>
# Create a page like <code>Private:Test</code>
# Log out and confirm anonymous users cannot access it
# Log out and confirm anonymous users cannot access it
Line 602: Line 540:
# Check that only editors and admins can edit it
# Check that only editors and admins can edit it


* '''File Uploads:'''
'''File Uploads'''
# Log in as an editor or admin
# Log in as an editor or admin
# Go to '''Special:Upload'''
# Go to '''Special:Upload'''
# Try uploading an image file
# Try uploading an image file and verify it appears on the page
# Verify it appears on the page


* '''Two-Factor Authentication:'''
'''Two-Factor Authentication'''
# Verify all admins have set up 2FA
# Verify all admins have set up 2FA
# Test login process with 2FA code
# Test login process with 2FA code
Line 617: Line 554:
'''If an Admin Loses Access to Their Phone:'''
'''If an Admin Loses Access to Their Phone:'''


They can use one of their recovery codes instead of the authenticator code:
# At the 2FA prompt, enter one of the saved recovery codes
# At the 2FA prompt, enter one of the saved recovery codes
# Once logged in, immediately go to '''Preferences''' → '''Two-factor authentication'''
# Once logged in, go to '''Preferences''' → '''Two-factor authentication'''
# Disable 2FA, then re-enable it with a new QR code
# Disable 2FA, then re-enable it with a new QR code
# Generate new recovery codes
# Generate new recovery codes
Line 641: Line 577:


'''Email not sending?'''
'''Email not sending?'''
* Verify your Gmail App Password is correct (16 characters, no spaces)
* Verify SMTP credentials are correct in your <code>.env</code> file
* Check that 2-Step Verification is enabled on your Google account
* Check <code>SMTP_HOST</code>, <code>SMTP_PORT</code>, <code>SMTP_USER</code>, <code>SMTP_PASS</code> values
* Look at container logs: <code>docker compose logs -f mediawiki</code>
* Ensure environment variables are passed correctly in <code>docker-compose.yml</code>
* Check container logs: <code>docker compose logs -f mediawiki</code>


'''Logo not appearing?'''
'''Logo not appearing?'''
Line 656: Line 593:


'''2FA prompt not appearing for admins:'''
'''2FA prompt not appearing for admins:'''
* Verify the configuration in LocalSettings.php
* Verify the OATHAuth configuration in LocalSettings.php
* Check that database update ran successfully: <code>docker exec -it mediawiki php maintenance/update.php</code>
* Run: <code>docker exec -it mediawiki php maintenance/update.php</code>
* Restart containers: <code>docker compose restart</code>
* Restart containers and clear your browser cache
* Clear your browser cache and try again
 
'''QR code not displaying:'''
* Check container logs: <code>docker compose logs -f mediawiki</code>
* Verify OATHAuth extension is installed: <code>ls /opt/stacks/mediawiki/extensions/OATHAuth</code>


'''Authenticator codes not working:'''
'''Authenticator codes not working:'''
Line 673: Line 605:


'''Regular Backups'''
'''Regular Backups'''
Create a backup script for your wiki:


<syntaxhighlight lang="bash" style="font-size: 85%;">
<syntaxhighlight lang="bash" style="font-size: 85%;">
Line 691: Line 621:
cp /opt/stacks/mediawiki/LocalSettings.php $BACKUP_DIR/LocalSettings_$DATE.php
cp /opt/stacks/mediawiki/LocalSettings.php $BACKUP_DIR/LocalSettings_$DATE.php


# Backup images (use docker volume backup)
# Backup images
docker run --rm -v 230912_images:/data -v $BACKUP_DIR:/backup alpine tar czf /backup/images_$DATE.tar.gz -C /data .
docker run --rm -v 230912_images:/data -v $BACKUP_DIR:/backup alpine tar czf /backup/images_$DATE.tar.gz -C /data .


Line 698: Line 628:


'''Updating MediaWiki'''
'''Updating MediaWiki'''
When a new version is released:


<syntaxhighlight lang="bash" style="font-size: 85%;">
<syntaxhighlight lang="bash" style="font-size: 85%;">
Line 723: Line 651:
✓ Custom logos and modern Vector 2022 theme
✓ Custom logos and modern Vector 2022 theme
<br>
<br>
✓ Email notifications via SMTP (Gmail)
✓ Email notifications via SMTP (environment-variable-secured credentials)
<br>
<br>
✓ Multi-level permission system (Anonymous, User, Editor, Sysop)
✓ Multi-level permission system (Anonymous, User, Editor, Sysop)
Line 752: Line 680:
* Install additional extensions from https://www.mediawiki.org/wiki/Category:Extensions
* Install additional extensions from https://www.mediawiki.org/wiki/Category:Extensions


For additional help, visit the official MediaWiki documentation at https://www.mediawiki.org/
'''''For additional help, visit the official MediaWiki documentation at''''' https://www.mediawiki.org/

Latest revision as of 00:33, 5 March 2026

MediaWiki Additional Configuration Guide

This guide covers advanced configuration options for your MediaWiki installation, including logos, permissions, email, private namespaces, and two-factor authentication.

Prerequisites: Complete the MediaWiki Docker Setup Guide before proceeding with this configuration.

Advanced Configuration

Part 1: Customizing Your Wiki's Appearance

1. Upload Your Logo Files

Before configuring logos, you need to upload your logo images to the wiki's images folder.

Step A: Prepare Your Logo Files

Create logo images in these sizes:

  • Small logo (50x50 pixels): For favicon and small displays - save as yourlogo-50.svg or yourlogo-50.png
  • Large logo (160x160 pixels): For the main wiki logo - save as yourlogo-160.svg or yourlogo-160.png

Tip: SVG format is recommended because it scales cleanly at any size. PNG is also acceptable.

Step B: Copy Logo Files to the Server

First, you need to upload files to the Docker volume:

# Create a temporary container to access the images volume
docker run -d --name temp-mediawiki \
  -v 230912_images:/var/www/html/images \
  mediawiki sleep 3600

# Copy your logo files into the container
docker cp ~/Downloads/yourlogo-50.svg temp-mediawiki:/var/www/html/images/
docker cp ~/Downloads/yourlogo-160.svg temp-mediawiki:/var/www/html/images/

# Fix permissions
docker exec temp-mediawiki chown 33:33 /var/www/html/images/yourlogo-50.svg
docker exec temp-mediawiki chown 33:33 /var/www/html/images/yourlogo-160.svg

# Remove the temporary container
docker stop temp-mediawiki
docker rm temp-mediawiki

Note: Replace yourlogo-50.svg and yourlogo-160.svg with your actual filename. Adjust the path ~/Downloads/ if your files are saved elsewhere.

2. Configure Logo and Favicon in LocalSettings.php

Open your LocalSettings.php file:

sudo nano /opt/stacks/mediawiki/LocalSettings.php

Find the existing $wgLogos section and replace it with:

$wgLogos = [
	'1x'   => "$wgResourceBasePath/images/yourlogo-160.svg",
	'icon' => "$wgResourceBasePath/images/yourlogo-50.svg",
];

$wgFavicon = "$wgResourceBasePath/images/yourlogo-50.svg";

What this does:

  • '1x' sets your main wiki logo (shown in the corner)
  • 'icon' sets the smaller icon version
  • $wgFavicon sets the browser tab icon

Save and exit.

Part 2: Customizing the Wiki Skin (Theme)

3. Configure the Modern Vector Skin

Open LocalSettings.php and find $wgDefaultSkin. Replace it with this configuration block:

# Use the modern Vector 2022 skin by default
$wgDefaultSkin = "vector-2022";

# Make existing users see the new skin too
$wgVectorDefaultSkinVersionForExistingAccounts = "2";

# Make the skin work well on mobile devices
$wgVectorResponsive = true;

# Enable appearance customization options for users
$wgVectorFeatureFlags = [
    'VectorAppearance' => [
        'logged_in'  => true,
        'logged_out' => true,
    ],
];

What this does:

  • Sets the modern Vector skin as default
  • Makes it responsive for mobile/tablet viewing
  • Allows users to customize appearance settings

Save and exit.

Part 3: Setting Up Email and SMTP

This allows your wiki to send password reset emails, notifications, and user-to-user messages.

4. Configure Email Settings

Important: This configuration uses environment variables to keep sensitive credentials out of LocalSettings.php. You will need to configure both your .env file and docker-compose.yml.

Step A: Set Up the .env File

Create or edit your .env file at /opt/stacks/mediawiki/.env and add your SMTP credentials:

# SMTP Configuration
SMTP_HOST=mail.comfac-it.com
SMTP_PORT=587
SMTP_USER=your-email@comfac-it.com
SMTP_PASS=your_smtp_password_here

Warning: Never commit your .env file to version control. Add it to .gitignore.

Step B: Pass Environment Variables in docker-compose.yml

Ensure your docker-compose.yml passes the SMTP variables into the MediaWiki container:

services:
  mediawiki:
    image: mediawiki
    container_name: mediawiki
    restart: always
    ports:
      - "${MEDIAWIKI_PORT}:80"
    depends_on:
      - database
    volumes:
      - ./230912_images:/var/www/html/images
      - /opt/stacks/mediawiki/extensions:/var/www/html/extensions
      - /opt/stacks/mediawiki/LocalSettings.php:/var/www/html/LocalSettings.php:ro
    environment:
      - SMTP_HOST=${SMTP_HOST}
      - SMTP_PORT=${SMTP_PORT}
      - SMTP_USER=${SMTP_USER}
      - SMTP_PASS=${SMTP_PASS}

Step C: Add Email Configuration to LocalSettings.php

Open LocalSettings.php and add the following section after the extensions block:

/*-------------------------------------------
 EMAIL & SMTP CONFIGURATION
-------------------------------------------*/

# Enable email features
$wgEnableEmail      = true;
$wgEnableUserEmail  = true;
$wgEmailAuthentication = true;

# Enable email notifications for talk pages and watchlist
$wgEnotifUserTalk  = true;
$wgEnotifWatchlist = true;

# Set your wiki's email addresses
$wgEmergencyContact = "your-email@comfac-it.com";
$wgPasswordSender   = "your-email@comfac-it.com";

# SMTP configuration — credentials loaded from environment variables
$wgSMTP = [
    'host'     => getenv('SMTP_HOST'),   # e.g. mail.comfac-it.com
    'IDHost'   => 'comfac-it.com',        # Your mail domain
    'port'     => getenv('SMTP_PORT'),   # 587 for TLS
    'auth'     => true,
    'username' => getenv('SMTP_USER'),   # Your SMTP username
    'password' => getenv('SMTP_PASS'),   # Your SMTP password
    'secure'   => 'tls'
];

# Additional email settings
$wgUserEmailUseReplyTo = true;
$wgAllowHTMLEmail      = true;

# Enable password reset via email
$wgPasswordResetRoutes = [
    'username' => true,
    'email'    => true,
];

# Password reset links expire after 24 hours
$wgNewPasswordExpiry = 86400;

# ================================
# ALLOWED EMAIL DOMAINS
# ================================

# Users can register/use these email domains
$wgAllowedEmailDomains = [
    'gmail.com',
    'comfac.net',
    'comfac-it.com',
];

What this does:

  • Uses getenv() to read SMTP credentials from Docker environment variables at runtime
  • Keeps passwords out of LocalSettings.php and version control
  • IDHost is set to your mail domain (comfac-it.com)
  • Restricts user email registration to approved domains only

Save and exit.

Part 4: Permission System (Who Can Do What)

5. Create a Clean Permission Structure

Open LocalSettings.php and replace the permissions section with:

/*-------------------------------------------
CLEAN PERMISSION SYSTEM
----------------------------------------- */

# Anonymous users
$wgGroupPermissions['*']['read']          = true;
$wgGroupPermissions['*']['edit']          = false;
$wgGroupPermissions['*']['createaccount'] = false;

# Allow bureaucrats/admins to create accounts
$wgGroupPermissions['bureaucrat']['createaccount'] = true;

# Logged-in users (view only)
$wgGroupPermissions['user']['read'] = true;
$wgGroupPermissions['user']['edit'] = false;

# Editor group
$wgGroupPermissions['editor']['read']     = true;
$wgGroupPermissions['editor']['edit']     = true;
$wgGroupPermissions['editor']['upload']   = true;
$wgGroupPermissions['editor']['reupload'] = true;

# Sysop (admin)
$wgGroupPermissions['sysop']['read']          = true;
$wgGroupPermissions['sysop']['edit']          = true;
$wgGroupPermissions['sysop']['protect']       = true;
$wgGroupPermissions['sysop']['userrights']    = true;
$wgGroupPermissions['sysop']['createaccount'] = true;

What this permission structure means:

  • Anonymous visitors: Can only read pages
  • Logged-in users: Can only read pages (no editing)
  • Editors: Can read, edit, and upload files (assigned by admins)
  • Sysops (Admins): Full control over the wiki

How to assign the Editor role:

After restarting your wiki, log in as an admin and go to:

  • Special:UserRights (or click Special PagesUser and rights section)
  • Enter a username
  • Check the editor box
  • Click Save user groups

Save and exit.

Part 5: Creating a Private Namespace

6. Configure the Private Namespace

Open LocalSettings.php and add this section after your extensions:

/*-------------------------------------------
PRIVATE NAMESPACE (RESTRICTED ACCESS)
----------------------------------------- */

# Load the Lockdown extension
wfLoadExtension( 'Lockdown' );

# Define namespace IDs (must be unique)
define("NS_PRIVATE",      3000);
define("NS_PRIVATE_TALK", 3001);

# Register the namespace names
$wgExtraNamespaces[NS_PRIVATE]      = "Private";
$wgExtraNamespaces[NS_PRIVATE_TALK] = "Private_talk";

# Only logged-in users, editors, and admins can READ
$wgNamespacePermissionLockdown[NS_PRIVATE]['read'] = ['user', 'editor', 'sysop'];

# Only editors and admins can EDIT
$wgNamespacePermissionLockdown[NS_PRIVATE]['edit'] = ['editor', 'sysop'];

How to use the Private namespace:

To create a private page, use this format: Private:YourPageName

Example: Private:Company_Policies

Anonymous users and non-logged-in visitors will get an access denied message.

Save and exit.

7. Enable Additional Extensions

Open LocalSettings.php and expand your extensions section:

/*-------------------------------------------
ADDITIONAL RECOMMENDED EXTENSIONS
----------------------------------------- */

# Content organization
wfLoadExtension( 'CategoryTree' );
wfLoadExtension( 'ImageMap' );

# User experience
wfLoadExtension( 'Echo' );
wfLoadExtension( 'Thanks' );
wfLoadExtension( 'DiscussionTools' );

# Content features
wfLoadExtension( 'TemplateData' );
wfLoadExtension( 'TemplateStyles' );
wfLoadExtension( 'Poem' );

# File handling
wfLoadExtension( 'PdfHandler' );
wfLoadExtension( 'MultimediaViewer' );

# Moderation & security
wfLoadExtension( 'ConfirmEdit' );
wfLoadExtension( 'SpamBlacklist' );
wfLoadExtension( 'TitleBlacklist' );
wfLoadExtension( 'CiteThisPage' );
wfLoadExtension( 'AbuseFilter' );
wfLoadExtension( 'LoginNotify' );

Note: If you get an error about a missing extension after restarting, comment out that line by adding # at the beginning.

Save and exit.

Part 7: Enable File Uploads

8. Configure Upload Settings

Open LocalSettings.php and update the upload settings:

# Enable file uploads
$wgEnableUploads  = true;
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";
$wgUseInstantCommons = false;

# Allow these file types to be uploaded
$wgFileExtensions = ['png','gif','jpg','jpeg','webp','svg','pdf','doc','docx','xls','xlsx'];

# Allow SVG files with embedded titles
$wgAllowTitleInSVG = true;
$wgSVGConverter    = 'ImageMagick';

Save and exit.

Part 8: Two-Factor Authentication for Administrators

9. Install the OATHAuth Extension

First, check if the extension already exists:

ls /opt/stacks/mediawiki/extensions/ | grep -i oath

If you don't see OATHAuth, install it:

cd /opt/stacks/mediawiki/extensions
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/OATHAuth.git
sudo chown -R 33:33 OATHAuth

10. Configure OATHAuth for Admins Only

Open LocalSettings.php and add:

/*-------------------------------------------
TWO-FACTOR AUTHENTICATION (ADMINS ONLY)
----------------------------------------- */

# Load the OATHAuth extension
wfLoadExtension( 'OATHAuth' );

# REQUIRE 2FA for administrators (sysops) only
$wgOATHRequiredForGroups = ['sysop'];

# Optional: Also require 2FA for bureaucrats
# $wgOATHRequiredForGroups = ['sysop', 'bureaucrat'];

# Allow TOTP - works with Google Authenticator, Authy, etc.
$wgOATHAuthModules = [
    'totp' => [
        'class' => 'MediaWiki\\Extension\\OATHAuth\\Module\\TOTP',
    ],
];

What this does:

  • Requires 2FA only for users in the sysop (administrator) group
  • Regular users and editors do NOT need 2FA
  • Uses TOTP method (compatible with most authenticator apps)

Save and exit.

Part 9: Apply All Changes

11. Update the Database and Restart

# Update database to recognize new extensions and namespaces
docker exec -it mediawiki php maintenance/update.php --quick

# Restart MediaWiki to apply all changes
cd /opt/stacks/mediawiki
docker compose restart

Wait about 30 seconds for the containers to fully restart.

Setting Up Two-Factor Authentication

12. Set Up 2FA for Administrator Accounts

Step A: Install an Authenticator App (If Not Already Installed)

On your phone or tablet, install one of these apps:

  • Google Authenticator (iOS/Android)
  • Microsoft Authenticator (iOS/Android)
  • Authy (iOS/Android)
  • 1Password (if you use a password manager)

Step B: Enable 2FA on Your Admin Account

  1. Log in to MediaWiki as an administrator
  2. Click on your username in the top-right corner
  3. Click Preferences
  4. Click the Two-factor authentication tab (or OATH tab)
  5. Click Manage and Add an authenticator app
  6. You'll see a QR code on the screen

Step C: Scan the QR Code

  1. Open your authenticator app on your phone
  2. Tap the "+" or "Add account" button
  3. Scan the QR code shown on your screen
  4. The app will add an entry like "MediaWiki - YourUsername"
  5. You'll see a 6-digit code that changes every 30 seconds

Step D: Verify the Setup

  1. Enter the 6-digit code from your authenticator app into the MediaWiki form
  2. You'll also see scratch codes (recovery codes) - SAVE THESE SAFELY!
  3. Click Confirm or Enable

CRITICAL - Save Your Recovery Codes!

Write down or securely save your recovery codes. If you lose access to your phone, these codes are the ONLY way to regain access to your account. Each recovery code can only be used once.

13. Test Two-Factor Authentication

  1. Log out of your MediaWiki account
  2. Log back in with your username and password
  3. You'll now see a screen asking for a Two-factor authentication token
  4. Open your authenticator app and enter the current 6-digit code
  5. Click Continue or Log in

Verification Checklist

14. Test Your Configuration

Logo & Skin

  • Your custom logo appears in the top-left corner and as the favicon
  • The modern Vector 2022 skin is active

Permissions

  1. Log out and confirm you can only read pages
  2. Log in as a regular user and confirm you cannot edit
  3. Log in as admin and assign the "editor" role via Special:UserRights
  4. Confirm the editor can now edit pages

Email

  1. Click "Forgot password?" on the login page
  2. Enter your username or email and verify you receive the reset email

Private Namespace

  1. Create a page like Private:Test
  2. Log out and confirm anonymous users cannot access it
  3. Log in as a regular user and confirm you can view it
  4. Check that only editors and admins can edit it

File Uploads

  1. Log in as an editor or admin
  2. Go to Special:Upload
  3. Try uploading an image file and verify it appears on the page

Two-Factor Authentication

  1. Verify all admins have set up 2FA
  2. Test login process with 2FA code
  3. Verify recovery codes are saved securely

Managing Two-Factor Authentication

If an Admin Loses Access to Their Phone:

  1. At the 2FA prompt, enter one of the saved recovery codes
  2. Once logged in, go to PreferencesTwo-factor authentication
  3. Disable 2FA, then re-enable it with a new QR code
  4. Generate new recovery codes

If Recovery Codes Are Also Lost:

Another administrator needs to disable 2FA for that account:

# Run this command to disable 2FA for a specific user
docker exec -it mediawiki php maintenance/run.php OATHAuth:deleteUser --user="USERNAME"

Replace USERNAME with the actual username.

Security Tip: Create at least two administrator accounts so one admin can help recover another's account if needed.

Troubleshooting

Email not sending?

  • Verify SMTP credentials are correct in your .env file
  • Check SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS values
  • Ensure environment variables are passed correctly in docker-compose.yml
  • Check container logs: docker compose logs -f mediawiki

Logo not appearing?

  • Verify files were copied correctly: docker exec mediawiki ls -la /var/www/html/images/
  • Hard refresh your browser: Ctrl + Shift + R (Windows/Linux) or Cmd + Shift + R (Mac)
  • Check the exact filenames in LocalSettings.php match the uploaded files

Private namespace not working?

  • Ensure Lockdown extension is installed: ls /opt/stacks/mediawiki/extensions/Lockdown
  • Run database update: docker exec -it mediawiki php maintenance/update.php --quick
  • Restart containers: docker compose restart

2FA prompt not appearing for admins:

  • Verify the OATHAuth configuration in LocalSettings.php
  • Run: docker exec -it mediawiki php maintenance/update.php
  • Restart containers and clear your browser cache

Authenticator codes not working:

  • Verify your phone's time is set to automatic (not manual)
  • Time synchronization is critical for TOTP to work
  • Try syncing time in your authenticator app settings

Maintenance Tasks

Regular Backups

#!/bin/bash
# Save as /opt/scripts/backup-mediawiki.sh

BACKUP_DIR="/opt/backups/mediawiki"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

# Backup database
docker exec mediawiki-db mysqldump -u root -pyour_root_password my_wiki > $BACKUP_DIR/db_$DATE.sql

# Backup LocalSettings.php
cp /opt/stacks/mediawiki/LocalSettings.php $BACKUP_DIR/LocalSettings_$DATE.php

# Backup images
docker run --rm -v 230912_images:/data -v $BACKUP_DIR:/backup alpine tar czf /backup/images_$DATE.tar.gz -C /data .

echo "Backup completed: $DATE"

Updating MediaWiki

# Pull the latest MediaWiki image
docker pull mediawiki:latest

# Restart with the new image
cd /opt/stacks/mediawiki
docker compose down
docker compose up -d

# Update the database schema
docker exec -it mediawiki php maintenance/update.php

# Clear the cache
docker exec -it mediawiki php maintenance/rebuildLocalisationCache.php

Summary

You've successfully configured advanced features for your MediaWiki installation:

✓ Custom logos and modern Vector 2022 theme
✓ Email notifications via SMTP (environment-variable-secured credentials)
✓ Multi-level permission system (Anonymous, User, Editor, Sysop)
✓ Private namespace for confidential content
✓ Additional professional extensions
✓ File upload capabilities
✓ Two-factor authentication for administrators
✓ Enhanced security hardening

Your MediaWiki installation is now fully configured and production-ready!

Next Steps

Your wiki is now fully configured! You can:

  • Create user accounts and assign roles via Special:UserRights
  • Start creating content in the main namespace
  • Create private documentation in the Private: namespace
  • Customize the main page by editing MediaWiki:Mainpage
  • Explore Special:SpecialPages to discover all available features
  • Set up automatic backups (see Maintenance Tasks above)
  • Configure SSL/HTTPS if not already done
  • Install additional extensions from https://www.mediawiki.org/wiki/Category:Extensions

For additional help, visit the official MediaWiki documentation at https://www.mediawiki.org/