Initial commit
This commit is contained in:
commit
2eff037f6b
16 changed files with 431 additions and 0 deletions
14
000-default.conf
Normal file
14
000-default.conf
Normal file
|
@ -0,0 +1,14 @@
|
|||
<VirtualHost *:80>
|
||||
ServerAdmin webmaster@localhost
|
||||
DocumentRoot /var/www/html
|
||||
|
||||
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
|
||||
# error, crit, alert, emerg.
|
||||
LogLevel warn
|
||||
|
||||
ErrorLog ${APACHE_LOG_DIR}/error.log
|
||||
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
||||
|
||||
Alias /wiki /var/www/html/index.php
|
||||
Alias /uploads /var/www/localstore/images
|
||||
</VirtualHost>
|
87
Dockerfile
Normal file
87
Dockerfile
Normal file
|
@ -0,0 +1,87 @@
|
|||
FROM mediawiki:1.35
|
||||
|
||||
ARG COMPOSER_VERSION=2.0.8
|
||||
|
||||
ENV \
|
||||
WG_SITENAME="Test Wiki" \
|
||||
WG_SCRIPT_PATH="" \
|
||||
WG_SERVER="https://wiki.example.com" \
|
||||
SEMANTIC_URL="wiki.example.com" \
|
||||
WG_ENABLE_UPLOADS="false" \
|
||||
WG_ENABLE_EMAIL="false" \
|
||||
WG_UPLOAD_PATH="/uploads" \
|
||||
WG_META_NAMESPACE="Meta" \
|
||||
WG_LANGUAGE_CODE="en" \
|
||||
MEDIAWIKI_ADMIN_USER="admin" \
|
||||
MEDIAWIKI_ADMIN_PASS="password" \
|
||||
WG_DB_TYPE="sqlite" \
|
||||
WG_DB_SERVER="" \
|
||||
WG_DB_NAME="my_wiki" \
|
||||
WG_DB_PASSWORD="password" \
|
||||
WG_DB_PREFIX="" \
|
||||
WG_DB_MWSCHEMA="" \
|
||||
WG_DATABASE_DIR="/var/www/data" \
|
||||
WG_SECRET_KEY="0000000000000000000000000000000000000000000000000000000000000000" \
|
||||
WG_EMERGENCY_CONTACT="admin@example.com" \
|
||||
WG_PASSWORD_SENDER="wiki@example.com" \
|
||||
ALLOW_PUBLIC_REGISTRATION="false" \
|
||||
ALLOW_PUBLIC_EDIT="false" \
|
||||
ALLOW_PUBLIC_READ="true" \
|
||||
DISABLE_ICONS="false" \
|
||||
DEBUG="false"
|
||||
|
||||
# System dependencies for extensions
|
||||
RUN set -eu; \
|
||||
apt-get update; \
|
||||
apt-get install -y --no-install-recommends \
|
||||
zip \
|
||||
unzip \
|
||||
libpq-dev \
|
||||
cron \
|
||||
rclone \
|
||||
; \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# PHP extensions
|
||||
RUN set -eu; \
|
||||
docker-php-ext-install -j$(nproc) pgsql; \
|
||||
docker-php-ext-install -j$(nproc) pdo_pgsql
|
||||
|
||||
RUN set -eu; \
|
||||
mkdir /var/www/conf; \
|
||||
mkdir -p /var/www/localstore/smwconfig; \
|
||||
mkdir -p /var/www/localstore/images
|
||||
|
||||
# Non-composer based extensions
|
||||
# JsonConfig required by Graph.
|
||||
RUN set -euo pipefail; \
|
||||
cd /var/www/html/extensions; \
|
||||
curl https://extdist.wmflabs.org/dist/extensions/JsonConfig-REL1_35-a0bdbfb.tar.gz |tar -xz; \
|
||||
curl https://extdist.wmflabs.org/dist/extensions/Graph-REL1_35-fa2b9af.tar.gz |tar -xz; \
|
||||
curl https://extdist.wmflabs.org/dist/extensions/SubPageList3-REL1_35-622c298.tar.gz| tar -xz; \
|
||||
curl https://extdist.wmflabs.org/dist/extensions/MsUpload-REL1_35-5998b96.tar.gz| tar -xz; \
|
||||
curl https://extdist.wmflabs.org/dist/extensions/TemplateStyles-REL1_35-7743810.tar.gz| tar -xz
|
||||
|
||||
# Install composer packages
|
||||
RUN set -eu; \
|
||||
curl -o /tmp/composer-setup.php https://getcomposer.org/installer; \
|
||||
curl -o /tmp/composer-setup.sig https://composer.github.io/installer.sig; \
|
||||
php -r "if (hash('SHA384', file_get_contents('/tmp/composer-setup.php')) !== trim(file_get_contents('/tmp/composer-setup.sig'))) { unlink('/tmp/composer-setup.php'); echo 'Invalid installer' . PHP_EOL; exit(1); }"; \
|
||||
php /tmp/composer-setup.php --no-ansi --install-dir=/usr/local/bin --filename=composer --version=${COMPOSER_VERSION}; \
|
||||
rm -rf /tmp/composer-setup.php; \
|
||||
ln -s /var/www/conf/LocalSettings.local.php /var/www/html/LocalSettings.local.php; \
|
||||
ln -s /var/www/conf/LocalSettings.php /var/www/html/LocalSettings.php
|
||||
COPY composer.local.json /var/www/html
|
||||
RUN composer update --no-dev
|
||||
|
||||
# Place config files
|
||||
COPY conf/* /var/www/conf/
|
||||
COPY 000-default.conf /etc/apache2/sites-available
|
||||
|
||||
# Place our maintenence and setup scripts
|
||||
COPY scripts/* /usr/local/bin/
|
||||
RUN chmod 755 /usr/local/bin/*
|
||||
|
||||
# Add crontab file in the cron directory
|
||||
ADD crontab /etc/crontab
|
||||
RUN chmod 0644 /etc/crontab
|
10
composer.local.json
Normal file
10
composer.local.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"require": {
|
||||
"mediawiki/semantic-bundle": "~4.0",
|
||||
"mediawiki/semantic-scribunto": "~2.1",
|
||||
|
||||
"mediawiki/mermaid": "~3.0",
|
||||
|
||||
"wikimedia/css-sanitizer": "2.0.1"
|
||||
}
|
||||
}
|
3
conf/LocalSettings.local.php
Normal file
3
conf/LocalSettings.local.php
Normal file
|
@ -0,0 +1,3 @@
|
|||
<?php
|
||||
# This file can be replaced by mounting in a custom configuration, that will
|
||||
# augment the generated config.
|
185
conf/LocalSettings.php
Normal file
185
conf/LocalSettings.php
Normal file
|
@ -0,0 +1,185 @@
|
|||
<?php
|
||||
# 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 = getenv("WG_SITE_NAME");
|
||||
$wgMetaNamespace = "Meta";
|
||||
|
||||
$wgScriptPath = getenv("WG_SCRIPT_PATH");
|
||||
|
||||
$wgServer = getenv("WG_SERVER");
|
||||
|
||||
$wgUploadPath = getenv("MEDIAWIKI_UPLOAD_PATH");
|
||||
|
||||
# Article path
|
||||
$wgArticlePath = "/wiki/$1";
|
||||
$wgUploadDirectory = "/var/www/localstore/images";
|
||||
|
||||
## The URL path to static resources (images, scripts, etc.)
|
||||
$wgResourceBasePath = $wgScriptPath;
|
||||
|
||||
## UPO means: this is also a user preference option
|
||||
|
||||
$wgEnableEmail = getenv("WG_ENABLE_EMAIL");
|
||||
$wgEnableUserEmail = true; # UPO
|
||||
|
||||
$wgEmergencyContact = getenv("WG_EMERGENCY_CONTACT");
|
||||
$wgPasswordSender = getenv("WG_PASSWORD_SENDER");
|
||||
|
||||
$wgEnotifUserTalk = false; # UPO
|
||||
$wgEnotifWatchlist = false; # UPO
|
||||
$wgEmailAuthentication = true;
|
||||
|
||||
## Database settings
|
||||
$wgDBtype = getenv("WG_DB_TYPE");
|
||||
$wgDBserver = getenv("WG_DB_SERVER");
|
||||
$wgDBname = getenv("WG_DB_NAME");
|
||||
$wgDBuser = getenv("WG_DB_USER");
|
||||
$wgDBpassword = getenv("WG_DB_PASSWORD");
|
||||
$wgDBport = getenv("WG_DB_PORT");
|
||||
|
||||
# Postgres specific settings
|
||||
if (getenv("WG_DB_MWSCHEMA")) {
|
||||
$wgDBmwschema = getenv("WG_DB_MWSCHEMA");
|
||||
}
|
||||
|
||||
# SQLite-specific settings
|
||||
$wgSQLiteDataDir = getenv("WG_DATABASE_DIR");
|
||||
|
||||
## Shared memory settings
|
||||
if(php_sapi_name() == "cli") {
|
||||
$wgMainCacheType = CACHE_NONE;
|
||||
} else {
|
||||
$wgMainCacheType = CACHE_ACCEL;
|
||||
}
|
||||
$wgMemCachedServers = [];
|
||||
|
||||
$wgEnableUploads = getenv("WG_ENABLE_UPLOADS");
|
||||
$wgUseImageMagick = true;
|
||||
$wgImageMagickConvertCommand = "/usr/bin/convert";
|
||||
|
||||
$wgUseInstantCommons = false;
|
||||
|
||||
# telemetry
|
||||
$wgPingback = 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";
|
||||
|
||||
## 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/data/Names.php
|
||||
$wgLanguageCode = getenv("WG_LANGUAGE_CODE");
|
||||
|
||||
$wgSecretKey = getenv("WG_SECRET_KEY");
|
||||
|
||||
# Changing this will log out all existing sessions.
|
||||
$wgAuthenticationTokenVersion = "1";
|
||||
|
||||
# Site upgrade key. Must be set to a string (default provided) to turn on the
|
||||
# web installer while LocalSettings.php is in place
|
||||
$wgUpgradeKey = "15ae97f94f551121";
|
||||
|
||||
## 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";
|
||||
|
||||
$wgGroupPermissions['*']['createaccount'] = !!getenv("ALLOW_PUBLIC_REGISTRATION");
|
||||
$wgGroupPermissions['*']['edit'] = !!getenv("ALLOW_PUBLIC_EDIT");
|
||||
$wgGroupPermissions['*']['read'] = !!getenv("ALLOW_PUBLIC_READ");
|
||||
|
||||
## 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:
|
||||
wfLoadSkin( 'MonoBook' );
|
||||
wfLoadSkin( 'Timeless' );
|
||||
wfLoadSkin( 'Vector' );
|
||||
|
||||
# Enabled extensions. Most of the extensions are enabled by adding
|
||||
# wfLoadExtensions('ExtensionName');
|
||||
# to LocalSettings.php. Check specific extension documentation for more details.
|
||||
# The following extensions were automatically enabled:
|
||||
wfLoadExtension( 'CategoryTree' );
|
||||
wfLoadExtension( 'Cite' );
|
||||
wfLoadExtension( 'CodeEditor' );
|
||||
wfLoadExtension( 'ImageMap' );
|
||||
wfLoadExtension( 'InputBox' );
|
||||
wfLoadExtension( 'OATHAuth' );
|
||||
wfLoadExtension( 'ParserFunctions' );
|
||||
wfLoadExtension( 'PdfHandler' );
|
||||
wfLoadExtension( 'SyntaxHighlight_GeSHi' );
|
||||
wfLoadExtension( 'WikiEditor' );
|
||||
|
||||
# End of automatically generated settings.
|
||||
# Add more configuration options below.
|
||||
|
||||
# Load our extensions
|
||||
wfLoadExtension( 'JsonConfig' ); # Configuration via Special Wiki Pages containing JSON
|
||||
wfLoadExtension( 'TemplateStyles' ); # Embedd Styles from Wiki Pages containing CSS
|
||||
wfLoadExtension( 'Scribunto' ); # Lua scripting
|
||||
wfLoadExtension( 'SemanticScribunto' ); # Lua scripting using semantic information
|
||||
wfLoadExtension( 'Mermaid' ); # Diagrams and flowcharts
|
||||
|
||||
# scribunto configuration
|
||||
$wgScribuntoDefaultEngine = 'luastandalone';
|
||||
|
||||
require_once '/var/www/html/extensions/SemanticBundle/SemanticBundle.php';
|
||||
|
||||
# Turn on SemanticMediaWiki
|
||||
enableSemantics( getenv("SEMANTIC_URL") );
|
||||
|
||||
# Set Subpages on
|
||||
$wgNamespacesWithSubpages[NS_MAIN] = 1;
|
||||
|
||||
# Enable long error messages
|
||||
if (getenv("DEBUG")) {
|
||||
$wgShowExceptionDetails = true;
|
||||
$wgShowDBErrorBacktrace = true;
|
||||
$wgShowSQLErrors = true;
|
||||
}
|
||||
|
||||
# Local configuration for MediaWiki
|
||||
ini_set( 'max_execution_time', 1000 );
|
||||
ini_set('memory_limit', '-1');
|
||||
|
||||
# Move the SMW config directory
|
||||
$smwgConfigFileDir = '/var/www/localstore/smwconfig';
|
||||
|
||||
# Icons
|
||||
$wgLogo = "favicon-135x135.png";
|
||||
$wgLogoHD = [
|
||||
"1.5x" => "favicon-202x202.png",
|
||||
"2x" => "favicon-202x202.png"
|
||||
];
|
||||
|
||||
# Footer icons
|
||||
|
||||
if (getenv("DISABLE_ICONS")) {
|
||||
unset( $wgFooterIcons['poweredby'] );
|
||||
}
|
||||
|
||||
# Responsive
|
||||
$wgVectorResponsive = true;
|
12
crontab
Normal file
12
crontab
Normal file
|
@ -0,0 +1,12 @@
|
|||
# Reference: https://www.semantic-mediawiki.org/wiki/Cron_jobs
|
||||
|
||||
# Every day at 07:45, Update Special Pages
|
||||
45 7 * * * root /usr/local/bin/updateSpecialPages.sh > /proc/1/fd/1 2>/proc/1/fd/2
|
||||
|
||||
# SemanticMediaWiki recommended maintenance
|
||||
30 * * * * root /usr/local/bin/updateEntityCollation.sh > /proc/1/fd/1 2>/proc/1/fd/2
|
||||
15 9 * * SAT root /usr/local/bin/rebuildData.sh > /proc/1/fd/1 2>/proc/1/fd/2
|
||||
15 9 * * SUN root /usr/local/bin/setupStore.sh > /proc/1/fd/1 2>/proc/1/fd/2
|
||||
15 3 1 * * root php /usr/local/bin/removeDuplicateEntities.sh > /proc/1/fd/1 2>/proc/1/fd/2
|
||||
|
||||
# file requires a trailing newline!
|
4
scripts/crontab-foreground
Normal file
4
scripts/crontab-foreground
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cron -f -L 15
|
39
scripts/db-setup.sh
Normal file
39
scripts/db-setup.sh
Normal file
|
@ -0,0 +1,39 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
cd /var/www/html/
|
||||
|
||||
# The install script doesn't want there to be a LocalSettings.php file
|
||||
echo Killing LocalSettings.php
|
||||
echo
|
||||
|
||||
rm /var/www/html/LocalSettings.php
|
||||
|
||||
echo Install.php
|
||||
echo
|
||||
|
||||
php maintenance/install.php --dbtype "${MEDIAWIKI_DB_TYPE}" --dbname "${MEDIAWIKI_DB_NAME}" --dbuser "${MEDIAWIKI_DB_USER}" --dbport "${MEDIAWIKI_DB_PORT}" --dbpass "${MEDIAWIKI_DB_PASSWORD}" --scriptpath "/var/www/html/" --dbserver "${MEDIAWIKI_DB_HOST}" --pass "${MEDIAWIKI_ADMIN_PASS}" --dbpath "${MEDIAWIKI_DATABASE_DIR}" "${MEDIAWIKI_SITE_NAME}" "${MEDIAWIKI_ADMIN_USER}"
|
||||
|
||||
# Now, we're going to replace the LocalSettings.php file that install.php just generated with ours
|
||||
# This way, update.php will work.
|
||||
rm /var/www/html/LocalSettings.php
|
||||
ln -s /var/www/conf/LocalSettings.php /var/www/html/LocalSettings.php
|
||||
|
||||
echo LocalSettings.php restored
|
||||
echo
|
||||
|
||||
echo Creating localstore
|
||||
echo
|
||||
|
||||
# Copy the htaccess file
|
||||
mkdir -p /var/www/localstore/images
|
||||
mkdir -p /var/www/localstore/smwconfig
|
||||
cp /var/www/html/images/* /var/www/localstore/images
|
||||
chown -R www-data:www-data /var/www/localstore
|
||||
|
||||
# Run update.php, to set up all of the extensions
|
||||
|
||||
echo update.php
|
||||
echo
|
||||
|
||||
php maintenance/update.php --quick
|
9
scripts/ensure-permissions.sh
Normal file
9
scripts/ensure-permissions.sh
Normal file
|
@ -0,0 +1,9 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Copy the htaccess file
|
||||
mkdir -p /var/www/localstore/images
|
||||
mkdir -p /var/www/localstore/smwconfig
|
||||
cp /var/www/html/images/* /var/www/localstore/images
|
||||
chown -R www-data:www-data /var/www/localstore
|
||||
chown -R www-data:www-data /var/www/data
|
23
scripts/mwjobrunner
Normal file
23
scripts/mwjobrunner
Normal file
|
@ -0,0 +1,23 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# From https://www.mediawiki.org/wiki/Manual:Job_queue
|
||||
IP=/var/www/html
|
||||
RJ=$IP/maintenance/runJobs.php
|
||||
echo Starting job service...
|
||||
# Wait a minute after the server starts up to give other processes time to get started
|
||||
sleep 60
|
||||
echo Started.
|
||||
while true; do
|
||||
# Job types that need to be run ASAP mo matter how many of them are in the queue
|
||||
# Those jobs should be very "cheap" to run
|
||||
php $RJ --type="enotifNotify"
|
||||
php $RJ --type="htmlCacheUpdate" --maxjobs=50
|
||||
# Everything else, limit the number of jobs on each batch
|
||||
# The --wait parameter will pause the execution here until new jobs are added,
|
||||
# to avoid running the loop without anything to do
|
||||
php $RJ --wait --maxjobs=10
|
||||
# Wait some seconds to let the CPU do other things, like handling web requests, etc
|
||||
echo Waiting for 10 seconds...
|
||||
sleep 10
|
||||
done
|
8
scripts/rebuildData.sh
Normal file
8
scripts/rebuildData.sh
Normal file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo rebuildData
|
||||
echo
|
||||
|
||||
php /var/www/html/extensions/SemanticMediaWiki/maintenance/rebuildData.php -d 100
|
||||
echo rebuildData finished
|
9
scripts/removeDuplicateEntities.sh
Normal file
9
scripts/removeDuplicateEntities.sh
Normal file
|
@ -0,0 +1,9 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo removeDuplicateEntities
|
||||
echo
|
||||
|
||||
/usr/local/bin/php /var/www/html/extensions/SemanticMediaWiki/maintenance/removeDuplicateEntities.php
|
||||
echo removeDuplicateEntities finished
|
||||
|
4
scripts/run-update.sh
Normal file
4
scripts/run-update.sh
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
/usr/local/bin/php maintenance/update.php
|
8
scripts/setupStore.sh
Normal file
8
scripts/setupStore.sh
Normal file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo setupStore
|
||||
echo
|
||||
|
||||
/usr/local/bin/php /var/www/html/extensions/SemanticMediaWiki/maintenance/setupStore.php --skip-import
|
||||
echo setupStore finished
|
8
scripts/updateEntityCollation.sh
Normal file
8
scripts/updateEntityCollation.sh
Normal file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo updateEntityCollation
|
||||
echo
|
||||
|
||||
/usr/local/bin/php /var/www/html/extensions/SemanticMediaWiki/maintenance/updateEntityCollation.php
|
||||
echo updateEntityCollation finished
|
8
scripts/updateSpecialPages.sh
Normal file
8
scripts/updateSpecialPages.sh
Normal file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo updateSpecialPages
|
||||
echo
|
||||
|
||||
/usr/local/bin/php /var/www/html/maintenance/updateSpecialPages.php
|
||||
echo updateSpecialPages finished
|
Loading…
Reference in a new issue