This repository holds the Dockerfile that is used to run the container serving wiki.xmpp.org.
xsf / mediawiki-docker Goto Github PK
View Code? Open in Web Editor NEWmediawiki container
mediawiki container
This repository holds the Dockerfile that is used to run the container serving wiki.xmpp.org.
I run a customer mediawiki build for my employer, here's my Dockerfile
in case its of help
FROM php:5.6-apache
MAINTAINER Lloyd Watkin <[email protected]>
ENV MEDIAWIKI_VERSION 1.25
ENV MEDIAWIKI_FULL_VERSION 1.25.0
RUN set -x; \
apt-get update \
&& apt-get install -y --no-install-recommends \
g++ \
libicu52 \
libicu-dev \
&& pecl install intl \
&& echo extension=intl.so >> /usr/local/etc/php/conf.d/ext-intl.ini \
&& apt-get purge -y --auto-remove g++ libicu-dev \
&& rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install mysqli opcache
RUN pear install mail net_smtp
RUN set -x; \
apt-get update \
&& apt-get install -y --no-install-recommends imagemagick \
&& rm -rf /var/lib/apt/lists/*
RUN a2enmod rewrite
# https://www.mediawiki.org/keys/keys.txt
RUN gpg --keyserver pool.sks-keyservers.net --recv-keys \
441276E9CCD15F44F6D97D18C119E1A64D70938E \
41B2ABE817ADD3E52BDA946F72BC1C5D23107F8A \
162432D9E81C1C618B301EECEE1F663462D84F01 \
1D98867E82982C8FE0ABC25F9B69B3109D3BB7B0 \
3CEF8262806D3F0B6BA1DBDD7956EE477F901A30 \
280DB7845A1DCAC92BB5A00A946B02565DC00AA7
RUN MEDIAWIKI_DOWNLOAD_URL="https://releases.wikimedia.org/mediawiki/$MEDIAWIKI_VERSION/mediawiki-$MEDIAWIKI_FULL_VERSION.tar.gz"; \
set -x; \
mkdir -p /usr/src/mediawiki \
&& curl -fSL "$MEDIAWIKI_DOWNLOAD_URL" -o mediawiki.tar.gz \
&& curl -fSL "${MEDIAWIKI_DOWNLOAD_URL}.sig" -o mediawiki.tar.gz.sig \
&& gpg --verify mediawiki.tar.gz.sig \
&& tar -xf mediawiki.tar.gz -C /usr/src/mediawiki --strip-components=1
COPY apache/mediawiki.conf /etc/apache2/
RUN echo Include /etc/apache2/mediawiki.conf >> /etc/apache2/apache2.conf
ADD LocalSettings.php /var/www-shared/html/LocalSettings.php
ADD extensions /usr/src/mediawiki/extensions
COPY docker-entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["apache2-foreground"]
I store extensions in an extensions
subdirectory from the docker file.
Here's my entrypoint.sh
:
#!/bin/bash
set -e
: ${MEDIAWIKI_SITE_NAME:=MediaWiki}
if [ -z "$MEDIAWIKI_DB_HOST" -a -z "$MYSQL_PORT_3306_TCP" ]; then
echo >&2 'error: missing MYSQL_PORT_3306_TCP environment variable'
echo >&2 ' Did you forget to --link some_mysql_container:mysql ?'
exit 1
fi
# if we're linked to MySQL, and we're using the root user, and our linked
# container has a default "root" password set up and passed through... :)
: ${MEDIAWIKI_DB_USER:=root}
if [ "$MEDIAWIKI_DB_USER" = 'root' ]; then
: ${MEDIAWIKI_DB_PASSWORD:=$MYSQL_ENV_MYSQL_ROOT_PASSWORD}
fi
: ${MEDIAWIKI_DB_NAME:=mediawiki}
if [ -z "$MEDIAWIKI_DB_PASSWORD" ]; then
echo >&2 'error: missing required MEDIAWIKI_DB_PASSWORD environment variable'
echo >&2 ' Did you forget to -e MEDIAWIKI_DB_PASSWORD=... ?'
echo >&2
echo >&2 ' (Also of interest might be MEDIAWIKI_DB_USER and MEDIAWIKI_DB_NAME.)'
exit 1
fi
if ! [ -e index.php -a -e includes/DefaultSettings.php ]; then
echo >&2 "MediaWiki not found in $(pwd) - copying now..."
if [ "$(ls -A)" ]; then
echo >&2 "WARNING: $(pwd) is not empty - press Ctrl+C now if this is an error!"
( set -x; ls -A; sleep 10 )
fi
tar cf - --one-file-system -C /usr/src/mediawiki . | tar xf -
echo >&2 "Complete! MediaWiki has been successfully copied to $(pwd)"
fi
: ${MEDIAWIKI_SHARED:=/var/www-shared/html}
if [ -d "$MEDIAWIKI_SHARED" ]; then
# If there is no LocalSettings.php but we have one under the shared
# directory, symlink it
if [ -e "$MEDIAWIKI_SHARED/LocalSettings.php" -a ! -e LocalSettings.php ]; then
ln -s "$MEDIAWIKI_SHARED/LocalSettings.php" LocalSettings.php
fi
# If the images directory only contains a README, then link it to
# $MEDIAWIKI_SHARED/images, creating the shared directory if necessary
if [ "$(ls images)" = "README" -a ! -L images ]; then
rm -fr images
mkdir -p "$MEDIAWIKI_SHARED/images"
ln -s "$MEDIAWIKI_SHARED/images" images
fi
fi
: ${MEDIAWIKI_DB_HOST:=${MYSQL_PORT_3306_TCP#tcp://}}
TERM=dumb php -- "$MEDIAWIKI_DB_HOST" "$MEDIAWIKI_DB_USER" "$MEDIAWIKI_DB_PASSWORD" "$MEDIAWIKI_DB_NAME" <<'EOPHP'
<?php
// database might not exist, so let's try creating it (just to be safe)
list($host, $port) = explode(':', $argv[1], 2);
$mysql = new mysqli($host, $argv[2], $argv[3], '', (int)$port);
if ($mysql->connect_error) {
file_put_contents('php://stderr', 'MySQL Connection Error: (' . $mysql->connect_errno . ') ' . $mysql->connect_error . "\n");
exit(1);
}
if (!$mysql->query('CREATE DATABASE IF NOT EXISTS `' . $mysql->real_escape_string($argv[4]) . '`')) {
file_put_contents('php://stderr', 'MySQL "CREATE DATABASE" Error: ' . $mysql->error . "\n");
$mysql->close();
exit(1);
}
$mysql->close();
EOPHP
chown -R www-data: .
export MEDIAWIKI_SITE_NAME MEDIAWIKI_DB_HOST MEDIAWIKI_DB_USER MEDIAWIKI_DB_PASSWORD MEDIAWIKI_DB_NAME
exec "$@"
and here's my LocalSettings.php
some details removed:
<?php
# This file was automatically generated by the MediaWiki 1.24.2
# installer. If you make manual changes, please keep track in case you
# need to recreate them later.
#
# See includes/DefaultSettings.php for all configurable settings
# and their default values, but don't forget to make changes in _this_
# file, not there.
#
# Further documentation for configuration settings may be found at:
# https://www.mediawiki.org/wiki/Manual:Configuration_settings
# Protect against web entry
if ( !defined( 'MEDIAWIKI' ) ) {
exit;
}
## Uncomment this to disable output compression
# $wgDisableOutputCompression = true;
$wgSitename = "XSF";
## The URL base path to the directory containing the wiki;
## defaults for all runtime URL paths are based off of this.
## For more information on customizing the URLs
## (like /w/index.php/Page_title to /wiki/Page_title) please see:
## https://www.mediawiki.org/wiki/Manual:Short_URL
$wgScriptPath = "";
$wgScriptExtension = ".php";
## The protocol and server name to use in fully-qualified URLs
$wgServer = "https://wiki.xmpp.org";
## The relative URL path to the skins directory
$wgStylePath = "$wgScriptPath/skins";
## The relative URL path to the logo. Make sure you change this from the default,
## or else you'll overwrite your logo when you upgrade!
#$wgLogo = "$wgScriptPath/resources/assets/wiki.png";
$wgLogo = 'https://lh3.googleusercontent.com/Nphl2F50eCsGBKNsee6rzk21p-7ihtW4p9XATFXOvaOMgp1lu49CM8Eiyut7JcBIjbqG=w300-rw';
$wgSMTP = array(
'host' => 'smtp.provider.com',
'IDHost' => 'email.hist.com',
'port' => 25,
'auth' => true,
'username' => '[email protected]',
'password' => '******************'
);
## UPO means: this is also a user preference option
$wgEnableEmail = true;
$wgEnableUserEmail = false; # UPO
$wgEmergencyContact = "[email protected]";
$wgPasswordSender = '[email protected]';
$wgEnotifUserTalk = false; # UPO
$wgEnotifWatchlist = true; # UPO
$wgEmailAuthentication = true;
## Database settings
$wgDBtype = "mysql";
$wgDBserver = $_ENV['MEDIAWIKI_DB_HOST'];
$wgDBname = $_ENV['MEDIAWIKI_DB_NAME'];
$wgDBuser = $_ENV['MEDIAWIKI_DB_USER'];
$wgDBpassword = $_ENV['MEDIAWIKI_DB_PASSWORD'];
# MySQL specific settings
$wgDBprefix = "";
# MySQL table options to use during installation or update
$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=utf8";
# Experimental charset support for MySQL 5.0.
$wgDBmysql5 = true;
# RAW HTML
$wgRawHtml = true;
## Shared memory settings
$wgMainCacheType = CACHE_NONE;
$wgMemCachedServers = array();
## To enable image uploads, make sure the 'images' directory
## is writable, then set this to true:
$wgEnableUploads = true;
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";
# InstantCommons allows wiki to use images from http://commons.wikimedia.org
$wgUseInstantCommons = false;
## If you use ImageMagick (or any other shell command) on a
## Linux server, this will need to be set to the name of an
## available UTF-8 locale
$wgShellLocale = "C.UTF-8";
## If you want to use image uploads under safe mode,
## create the directories images/archive, images/thumb and
## images/temp, and make them all writable. Then uncomment
## this, if it's not already uncommented:
#$wgHashedUploadDirectory = false;
## Set $wgCacheDirectory to a writable directory on the web server
## to make your wiki go slightly faster. The directory should not
## be publically accessible from the web.
#$wgCacheDirectory = "$IP/cache";
# Site language code, should be one of the list in ./languages/Names.php
$wgLanguageCode = "en-gb";
$wgSecretKey = "*******************";
# Site upgrade key. Must be set to a string (default provided) to turn on the
# web installer while LocalSettings.php is in place
$wgUpgradeKey = "*****************";
## For attaching licensing metadata to pages, and displaying an
## appropriate copyright notice / icon. GNU Free Documentation
## License and Creative Commons licenses are supported so far.
$wgRightsPage = ""; # Set to the title of a wiki page that describes your license/copyright
$wgRightsUrl = "";
$wgRightsText = "";
$wgRightsIcon = "";
# Path to the GNU diff3 utility. Used for conflict resolution.
$wgDiff3 = "/usr/bin/diff3";
# The following permissions were set based on your choice in the installer
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['read'] = false;
## Default skin: you can change the default skin. Use the internal symbolic
## names, ie 'vector', 'monobook':
$wgDefaultSkin = "vector";
# Enabled skins.
# The following skins were automatically enabled:
require_once "$IP/skins/CologneBlue/CologneBlue.php";
require_once "$IP/skins/Modern/Modern.php";
require_once "$IP/skins/MonoBook/MonoBook.php";
require_once "$IP/skins/Vector/Vector.php";
$wgUploadDirectory = 'images';
$wgUploadS3Bucket = $_ENV['MEDIAWIKI_S3_BUCKET'];
$wgUploadS3SSL = true; // true if SSL should be used
$wgPublicS3 = false; // true if public, false if authentication should be used
$wgS3BaseUrl = "http".($wgUploadS3SSL?"s":"")."://s3.amazonaws.com/$wgUploadS3Bucket";
//viewing needs a different url from uploading. Uploading doesnt work on the below url and viewing doesnt work on the above one.
$wgS3BaseUrlView = "http".($wgUploadS3SSL?"s":"")."://".$wgUploadS3Bucket.".s3.amazonaws.com";
$wgUploadBaseUrl = "$wgS3BaseUrlView/$wgUploadDirectory";
// leave $wgCloudFrontUrl blank to not render images from CloudFront
$wgCloudFrontUrl = '';//"http".($wgUploadS3SSL?"s":"").'://YOUR_CLOUDFRONT_SUBDOMAIN.cloudfront.net/';
$wgLocalFileRepo = array(
'class' => 'LocalS3Repo',
'name' => 's3',
'directory' => $wgUploadDirectory,
'url' => $wgUploadBaseUrl ? $wgUploadBaseUrl . $wgUploadPath : $wgUploadPath,
'urlbase' => $wgS3BaseUrl ? $wgS3BaseUrl : "",
'hashLevels' => $wgHashedUploadDirectory ? 2 : 0,
'thumbScriptUrl' => $wgThumbnailScriptPath,
'transformVia404' => !$wgGenerateThumbnailOnParse,
'initialCapital' => $wgCapitalLinks,
'deletedDir' => $wgUploadDirectory.'/deleted',
'deletedHashLevels' => $wgFileStore['deleted']['hash'],
'AWS_ACCESS_KEY' => $_ENV['MEDIAWIKI_AWS_ID'],
'AWS_SECRET_KEY' => $_ENV['MEDIAWIKI_AWS_KEY'],
'AWS_S3_BUCKET' => $wgUploadS3Bucket,
'AWS_S3_PUBLIC' => $wgPublicS3,
'AWS_S3_SSL' => $wgUploadS3SSL,
'cloudFrontUrl' => $wgCloudFrontUrl,
);
require_once("$IP/extensions/LocalS3Repo/LocalS3Repo.php");
# Enabled Extensions. Most extensions are enabled by including the base extension file here
# but check specific extension documentation for more details
# The following extensions were automatically enabled:
require_once "$IP/extensions/Cite/Cite.php";
require_once "$IP/extensions/ConfirmEdit/ConfirmEdit.php";
require_once "$IP/extensions/ImageMap/ImageMap.php";
require_once "$IP/extensions/InputBox/InputBox.php";
require_once "$IP/extensions/LocalisationUpdate/LocalisationUpdate.php";
require_once "$IP/extensions/PdfHandler/PdfHandler.php";
require_once "$IP/extensions/Renameuser/Renameuser.php";
require_once "$IP/extensions/SpamBlacklist/SpamBlacklist.php";
require_once "$IP/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php";
require_once "$IP/extensions/WikiEditor/WikiEditor.php";
# End of automatically generated settings.
# Add more configuration options below.
require_once("extensions/improved-accesscontrol/improved-accesscontrol.php");
$wgAdminCanReadAll = true; // sysop users can read all restricted pages
$wgAccessControlRedirect = false; // don't redirect from page with search results for denied and
// anonymous users, if searching pattern is validate on any
// protected page
define("NS_USERS", 3000);
// Add namespaces.
$wgExtraNamespaces[NS_USERS] = "Users";
$wgFileExtensions = array_merge($wgFileExtensions, array('txt', 'pdf', 'doc', 'docx', 'zip'));
$wgAllowExternalImages = true;
$wgRawHtml = true;
# error_reporting( -1 );
# ini_set( 'display_errors', 1 );
# $wgShowExceptionDetails = true;
# $wgDebugToolbar = true;
# $wgShowDebug = true;
# #$wgDevelopmentWarnings = true;
# $wgShowSQLErrors = true;
# $wgDebugDumpSql = true;
# $wgShowDBErrorBacktrace = true;
This uses an exteranl SMTP provider, external database, and files are stored in an S3 bucket
@ge0rg suggests MobileFrontend
I'm currently not sure how to go about adding this.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.