diff --git a/.envrc.sample b/.envrc.sample index 62d3083..f004c62 100644 --- a/.envrc.sample +++ b/.envrc.sample @@ -10,3 +10,5 @@ export MEDIAWIKI_EMAIL_FROM="wiki@wiki.example.com" export DB_ROOT_PASSWD_VERSION=v1 export DB_PASSWD_VERSION=v1 +export LOCAL_SETTINGS_CONF_VERSION=v1 +export ENTRYPOINT_CONF_VERSION=v1 diff --git a/LocalSettings.php.tmpl b/LocalSettings.php.tmpl new file mode 100644 index 0000000..e65582a --- /dev/null +++ b/LocalSettings.php.tmpl @@ -0,0 +1,162 @@ + 'http://localhost:8000/', + // Parsoid "domain" (string, optional) - MediaWiki >= 1.26 + 'domain' => 'localhost', + // Parsoid "prefix" (string, optional) - deprecated since MediaWiki 1.26, use 'domain' + 'prefix' => 'localhost', + // Forward cookies in the case of private wikis (string or false, optional) + 'forwardCookies' => true, + // request timeout in seconds (integer or null, optional) + 'timeout' => null, + // Parsoid HTTP proxy (string or null, optional) + 'HTTPProxy' => null, + // whether to parse URL as if they were meant for RESTBase (boolean or null, optional) + 'restbaseCompat' => null, +]; diff --git a/compose.yml b/compose.yml index 844cd79..cafb686 100644 --- a/compose.yml +++ b/compose.yml @@ -27,11 +27,23 @@ services: environment: - DOMAIN=${DOMAIN} - STACK_NAME=${STACK_NAME} + - MEDIAWIKI_EMAIL_CONTACT=${MEDIAWIKI_EMAIL_CONTACT} + - MEDIAWIKI_EMAIL_FROM=${MEDIAWIKI_EMAIL_FROM} + - MEDIAWIKI_SITENAME=${MEDIAWIKI_SITENAME} + - MEDIAWIKI_SITENAMESPACE=${MEDIAWIKI_SITENAMESPACE} volumes: - - 'mediawiki:/var/www/html' + - 'mediawiki_images:/var/www/html/images' - 'parsoid:/usr/lib/parsoid' + configs: + - source: LocalSettings_conf + target: /var/www/html/LocalSettings.php + - source: entrypoint2_conf + target: /docker-entrypoint2.sh + mode: 0555 depends_on: - mariadb + secrets: + - db_password networks: - proxy - internal @@ -44,10 +56,11 @@ services: - "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`)" - "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure" - "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}" + entrypoint: /docker-entrypoint2.sh volumes: mariadb: - mediawiki: + mediawiki_images: parsoid: networks: @@ -57,8 +70,18 @@ networks: secrets: db_root_password: - name: ${STACK_NAME}_db_root_password_${DB_ROOT_PASSWD_VERSION} + name: ${STACK_NAME}_db_root_password_${DB_ROOT_PASSWORD_VERSION} external: true db_password: - name: ${STACK_NAME}_db_password_${DB_PASSWD_VERSION} + name: ${STACK_NAME}_db_password_${DB_PASSWORD_VERSION} external: true + +configs: + LocalSettings_conf: + name: ${STACK_NAME}_local_settings_${LOCAL_SETTINGS_CONF_VERSION} + file: LocalSettings.php.tmpl + template_driver: golang + entrypoint2_conf: + name: ${STACK_NAME}_entrypoint2_${ENTRYPOINT_CONF_VERSION} + file: entrypoint.sh + template_driver: golang diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..1ce4733 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +set -eu -o pipefail + +init_db() { + set -eu + + apt update && apt install -y mariadb-client + + PASSWORD=`cat /run/secrets/db_password` + TABLE_COUNT=$(mysql -u mediawiki --password="$PASSWORD" -h mariadb mediawiki -e "SELECT count(*) AS TOTAL FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'mediawiki';" -N -B) + + if [[ "${TABLE_COUNT}" == "0" ]]; then + mysql -u mediawiki --password="$PASSWORD" -h mariadb mediawiki < /var/www/html/maintenance/tables.sql + else + php /var/www/html/maintenance/update.php + fi +} + +main() { + set -eu + + init_db +} + +main + +/docker-entrypoint.sh apache2-foreground "$@"