CompleteNoobs Docker Image 2: Difference between revisions

From CompleteNoobs
Jump to navigation Jump to search
AwesomO (talk | contribs)
Created page with " ==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 == Prere..."
 
AwesomO (talk | contribs)
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>VIDEO_ID</youtube></code>
   * YouTube: Add <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>



Revision as of 14:42, 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

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

1.2: Create Shared Directory

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 .

3.2: Run the Container with Shared Directory

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

Place XML file in shared directory

# 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

  * 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