CompleteNoobs Docker Image 2: Difference between revisions
Line 391: | Line 391: | ||
2. Login with admin / AdminPass123! | 2. Login with admin / AdminPass123! | ||
3. Create or edit a page and test: | 3. Create or edit a page and test: | ||
* YouTube: Add <code><youtube>gBML6zuUpK0</youtube></code> | * YouTube: Add/Test <nowiki><youtube>gBML6zuUpK0</youtube></nowiki> <code><youtube>gBML6zuUpK0</youtube></code> | ||
* SyntaxHighlight: Add <nowiki><syntaxhighlight lang="python">print("Hello")</syntaxhighlight></nowiki> | * SyntaxHighlight: Add <nowiki><syntaxhighlight lang="python">print("Hello")</syntaxhighlight></nowiki> | ||
Latest revision as of 14:46, 2 September 2025
todo
- Use Dir for import export of xml.
- Min scripts - just setup mediawiki with extensions.
Complete Noobs Docker Wiki Tutorial v0.2
- Version 0.2 - Simplified with manual import/export
- Docker install guide
Overview
This tutorial creates a MediaWiki Docker container with:
- MediaWiki 1.44
- PageNotice extension (for license notices)
- YouTube extension (for video embedding)
- Shared directory for XML import/export
Prerequisites
- Ubuntu 24.04
- Docker installed and running
- Your user in docker group:
sudo usermod -aG docker $USER
(then logout/login)
Step 1: Create Directory Structure
1.1: Create Project Directory
mkdir ~/completenoobs-docker-v2
cd ~/completenoobs-docker-v2
mkdir ~/wiki-container
This directory will be used for importing and exporting XML files.
Step 2: Create All Files
2.1: Dockerfile
nano Dockerfile
FROM mediawiki:1.44
# Install dependencies
RUN apt-get update && apt-get install -y \
mariadb-server \
python3-pygments \
curl \
wget \
unzip \
nano \
vim \
git \
&& apt-get clean
# Copy setup script
COPY setup_wiki.sh /usr/src/setup_wiki.sh
COPY entrypoint.sh /entrypoint.sh
# Make executable
RUN chmod +x /usr/src/setup_wiki.sh /entrypoint.sh
# Setup wiki
RUN /usr/src/setup_wiki.sh
EXPOSE 80
VOLUME /var/lib/mysql
VOLUME /var/www/html/images
VOLUME /export
ENTRYPOINT ["/entrypoint.sh"]
2.2: Main Setup Script
nano setup_wiki.sh
#!/bin/bash
set -e
echo "Setting up CompleteNoobs Wiki..."
# Initialize MariaDB
if [ ! -d "/var/lib/mysql/mysql" ]; then
mysql_install_db --user=mysql --datadir=/var/lib/mysql
fi
service mariadb start
# Wait for MariaDB
for i in {1..30}; do
if mysql -e "SELECT 1;" &>/dev/null; then
echo "MariaDB ready!"
break
fi
sleep 2
done
# Setup database
mysql -e "CREATE DATABASE IF NOT EXISTS completenoobs_wiki CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -e "CREATE USER IF NOT EXISTS 'wikiuser'@'127.0.0.1' IDENTIFIED BY 'wikipass';"
mysql -e "GRANT ALL PRIVILEGES ON completenoobs_wiki.* TO 'wikiuser'@'127.0.0.1';"
mysql -e "CREATE USER IF NOT EXISTS 'wikiuser'@'localhost' IDENTIFIED BY 'wikipass';"
mysql -e "GRANT ALL PRIVILEGES ON completenoobs_wiki.* TO 'wikiuser'@'localhost';"
mysql -e "FLUSH PRIVILEGES;"
# Install MediaWiki
cd /var/www/html
php maintenance/install.php \
--dbtype=mysql \
--dbserver=127.0.0.1 \
--dbname=completenoobs_wiki \
--dbuser=wikiuser \
--dbpass=wikipass \
--server="http://localhost:8080" \
--scriptpath="" \
--lang=en \
--pass=AdminPass123! \
"CompleteNoobs Wiki" \
"admin"
# Download and install extensions
cd extensions/
echo "Installing PageNotice extension..."
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/PageNotice --branch REL1_44 || echo "PageNotice download failed, continuing..."
echo "Installing YouTube extension..."
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/YouTube --branch REL1_44 || echo "YouTube download failed, continuing..."
cd /var/www/html
# Configure LocalSettings.php
cat >> LocalSettings.php << 'EOF'
# Basic settings
$wgEnableUploads = true;
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";
$wgDefaultSkin = "vector-2022";
$wgAllowExternalImages = true;
# Debug settings (remove in production)
$wgShowExceptionDetails = true;
$wgDebugLogFile = "/tmp/mediawiki-debug.log";
# PageNotice extension
if ( file_exists( "$IP/extensions/PageNotice/extension.json" ) ) {
wfLoadExtension( 'PageNotice' );
}
# YouTube extension
if ( file_exists( "$IP/extensions/YouTube/extension.json" ) ) {
wfLoadExtension( 'YouTube' );
}
# SyntaxHighlight (usually bundled)
if ( file_exists( "$IP/extensions/SyntaxHighlight_GeSHi/extension.json" ) ) {
wfLoadExtension( 'SyntaxHighlight_GeSHi' );
$wgPygmentizePath = '/usr/bin/pygmentize';
}
EOF
# Create helper scripts
cat > /var/www/html/export_wiki.sh << 'EXPORT_EOF'
#!/bin/bash
echo "=== Wiki Export Tool ==="
DATE=$(date +%Y%m%d)
OUTPUT_FILE="/export/${DATE}_wiki_export.xml"
echo "Exporting wiki to: $OUTPUT_FILE"
php /var/www/html/maintenance/run.php dumpBackup.php --full --output=file:$OUTPUT_FILE
if [ -f "$OUTPUT_FILE" ]; then
echo "Export successful!"
echo "File saved to: $OUTPUT_FILE"
echo "On host system: ~/wiki-container/${DATE}_wiki_export.xml"
else
echo "Export failed!"
fi
EXPORT_EOF
chmod +x /var/www/html/export_wiki.sh
cat > /var/www/html/import_wiki.sh << 'IMPORT_EOF'
#!/bin/bash
echo "=== Wiki Import Tool ==="
echo ""
echo "Available XML files in /export:"
ls -la /export/*.xml 2>/dev/null || echo "No XML files found"
echo ""
if [ -z "$1" ]; then
echo "Usage: /var/www/html/import_wiki.sh <filename>"
echo "Example: /var/www/html/import_wiki.sh /export/wiki.xml"
exit 1
fi
if [ ! -f "$1" ]; then
echo "Error: File $1 not found!"
exit 1
fi
echo "Importing from: $1"
echo "This may take several minutes..."
php /var/www/html/maintenance/run.php importDump.php "$1"
if [ $? -eq 0 ]; then
echo "Import completed!"
echo "Rebuilding indexes..."
php /var/www/html/maintenance/run.php rebuildrecentchanges.php
php /var/www/html/maintenance/run.php initSiteStats.php
echo "Done!"
else
echo "Import failed! Check /tmp/mediawiki-debug.log for details"
fi
IMPORT_EOF
chmod +x /var/www/html/import_wiki.sh
# Create status check script
cat > /var/www/html/check_status.sh << 'STATUS_EOF'
#!/bin/bash
cd /var/www/html
echo "=== Wiki Status ==="
echo "Pages: $(mysql --user=wikiuser --password=wikipass completenoobs_wiki -e "SELECT COUNT(*) FROM page;" -s -N 2>/dev/null || echo "Error")"
echo "Users: $(mysql --user=wikiuser --password=wikipass completenoobs_wiki -e "SELECT COUNT(*) FROM user WHERE user_id > 0;" -s -N 2>/dev/null || echo "Error")"
echo ""
echo "=== Extensions ==="
if [ -d "extensions/PageNotice" ]; then
echo "PageNotice: Installed ✓"
else
echo "PageNotice: Not installed ✗"
fi
if [ -d "extensions/YouTube" ]; then
echo "YouTube: Installed ✓"
else
echo "YouTube: Not installed ✗"
fi
if [ -d "extensions/SyntaxHighlight_GeSHi" ]; then
echo "SyntaxHighlight: Installed ✓"
else
echo "SyntaxHighlight: Not installed ✗"
fi
echo ""
echo "=== Shared Directory ==="
if [ -d "/export" ]; then
echo "/export mounted ✓"
echo "Files in /export:"
ls -la /export/*.xml 2>/dev/null || echo " No XML files"
else
echo "/export not mounted ✗"
fi
STATUS_EOF
chmod +x /var/www/html/check_status.sh
echo ""
echo "Setup completed!"
echo "Admin: admin / AdminPass123!"
service mariadb stop
2.3: Entrypoint Script
nano entrypoint.sh
#!/bin/bash
echo "Starting CompleteNoobs Wiki..."
service mariadb start
# Wait for MariaDB
for i in {1..30}; do
if mysql -e "SELECT 1;" &>/dev/null; then
echo "MariaDB ready!"
break
fi
sleep 1
done
echo ""
echo "========================================="
echo "CompleteNoobs Wiki v0.2 Ready!"
echo "========================================="
echo ""
echo "Access: http://localhost:8080"
echo "Admin: admin / AdminPass123!"
echo ""
echo "Features:"
echo "- MediaWiki 1.44"
echo "- PageNotice extension"
echo "- YouTube extension"
echo "- SyntaxHighlight extension"
echo "- Import/Export via ~/wiki-container"
echo ""
echo "Available commands:"
echo "- Export wiki: docker exec completenoobs_wiki /var/www/html/export_wiki.sh"
echo "- Import XML: docker exec completenoobs_wiki /var/www/html/import_wiki.sh /export/filename.xml"
echo "- Check status: docker exec completenoobs_wiki /var/www/html/check_status.sh"
echo ""
apache2-foreground
Step 3: Build and Run
3.1: Build the Image
docker build -t completenoobs/wiki:v0.2 .
docker run -d -p 8080:80 \
-v ~/wiki-container:/export \
-v completenoobs_mysql:/var/lib/mysql \
-v completenoobs_images:/var/www/html/images \
--name completenoobs_wiki \
completenoobs/wiki:v0.2
Step 4: Import/Export Operations
4.1: Import an XML File
# Copy your XML file to the shared directory
cp ~/Downloads/completenoobs.xml ~/wiki-container/
Import the file
- All files in host
wiki-container
directory will also be in the containers/export/
directory.
# Run the import command
docker exec completenoobs_wiki /var/www/html/import_wiki.sh /export/completenoobs.xml
Restore the completenoobs Main Page:
By default, the completenoobs
MediaWiki instance overwrites the Main Page with content like "MediaWiki has been installed." To revert to the page’s state before this change, undo the initial revision:
1. Go to http://localhost:8080
in your browser.
2. On the Main Page, click View History (top-right corner).
3. Find the top revision by MediaWiki default
and click Undo.
4. Scroll down and click Save changes to revert the Main Page.
4.2: Export Your Wiki
# Export wiki to dated XML file
docker exec completenoobs_wiki /var/www/html/export_wiki.sh
# Check the exported file
ls -la ~/wiki-container/
4.3: Manual Import/Export (Advanced)
Access container shell
docker exec -it completenoobs_wiki bash
Manual export with custom filename
php /var/www/html/maintenance/run.php dumpBackup.php --full --output=file:/export/my_wiki_backup.xml
exit
Manual import with options
# Basic import
php /var/www/html/maintenance/run.php importDump.php /export/wiki.xml
# Import with image uploads
php /var/www/html/maintenance/run.php importDump.php --uploads /export/wiki.xml
# Then rebuild indexes
php /var/www/html/maintenance/run.php rebuildall.php
exit
Step 5: Testing and Verification
5.1: Check Wiki Status
docker exec completenoobs_wiki /var/www/html/check_status.sh
5.2: Test Extensions
1. Visit http://localhost:8080 2. Login with admin / AdminPass123! 3. Create or edit a page and test:
* YouTube: Add/Test <youtube>gBML6zuUpK0</youtube>
* SyntaxHighlight: Add <syntaxhighlight lang="python">print("Hello")</syntaxhighlight>
5.3: View Logs
# Container logs
docker logs completenoobs_wiki
# MediaWiki debug log
docker exec completenoobs_wiki tail -f /tmp/mediawiki-debug.log
Step 6: Common Operations
6.1: Change Admin Password
Via Web Interface
1. Login at http://localhost:8080 2. Click username → Preferences 3. Go to Password tab 4. Change password
Via Terminal
docker exec -it completenoobs_wiki bash
php /var/www/html/maintenance/run.php changePassword.php --user=admin --password=NEWPASSWORD
exit
6.2: Backup Your Wiki
# Create dated backup
docker exec completenoobs_wiki /var/www/html/export_wiki.sh
# Copy to safe location
cp ~/wiki-container/*_wiki_export.xml ~/backups/
6.3: Restore from Backup
# Place backup in shared directory
cp ~/backups/20250101_wiki_export.xml ~/wiki-container/
# Import the backup
docker exec completenoobs_wiki /var/www/html/import_wiki.sh /export/20250101_wiki_export.xml
6.4: Complete Reset
# Stop and remove container
docker stop completenoobs_wiki
docker rm completenoobs_wiki
# Remove volumes (WARNING: This deletes all data!)
docker volume rm completenoobs_mysql completenoobs_images
# Rebuild and start fresh
docker run -d -p 8080:80 \
-v ~/wiki-container:/export \
-v completenoobs_mysql:/var/lib/mysql \
-v completenoobs_images:/var/www/html/images \
--name completenoobs_wiki \
completenoobs/wiki:v0.2
Troubleshooting
Permission Issues
If you encounter permission errors with the shared directory:
# Fix permissions on host
chmod 777 ~/wiki-container
Import Failures
If imports fail, check:
- File exists in ~/wiki-container
- File is valid XML format
- Sufficient disk space
- Check debug log:
docker exec completenoobs_wiki tail /tmp/mediawiki-debug.log
Container Won't Start
# Check logs
docker logs completenoobs_wiki
# Try interactive mode
docker run -it --rm completenoobs/wiki:v0.2 bash
Summary
This setup provides:
- Clean MediaWiki 1.44 installation
- Essential extensions (PageNotice, YouTube, SyntaxHighlight)
- Simple import/export via ~/wiki-container directory
- No automatic updates - full control over your content
- Easy backup and restore capabilities
The shared directory approach gives you complete control over when and what to import/export, making it ideal for:
- Migrating content between wikis
- Regular backups
- Sharing wiki content
- Testing imports before applying to production