MWStake MediaWiki Manager: Difference between revisions

From MWStake
Jump to navigation Jump to search
()
No edit summary
Line 1: Line 1:
== Project Reasoning and Potential Goals ==
== Project Reasoning and Potential Goals ==


<div style="margin:20px; padding:50px; border-radius:50px; background-color:beige;">
'''Why and What?'''
# Your kitchen / hotel chain kitchens
#* appliances vs. parts
#* integration levels and interfaces
# MWM (not integrated, but besides MW):
# MWM (not integrated, but besides MW):
## <code>git clone</code>
## <code>git clone</code>
Line 14: Line 9:
##** MediaWiki Stakeholders Group Certified Extensions Service
##** MediaWiki Stakeholders Group Certified Extensions Service
##* Backup/restore/clone/compare/consolidate system(s) (snapshots)
##* Backup/restore/clone/compare/consolidate system(s) (snapshots)
##* Troubleshoot/safe mode
##* Inject/extract/facet/edit/consolidate/import/export/remove apps/structures/ontologies
##* Inject/extract/facet/edit/consolidate/import/export/remove apps/structures/ontologies
##** MediaWiki Stakeholders Group Certified Apps Service
##** MediaWiki Stakeholders Group Certified Apps Service
##* Script/automate/schedule tasks
##* Script/automate/schedule tasks
##* Package/move/archive/migrate system(s)
##* Package/move/archive/migrate system(s)
</div>
__TOC__
__TOC__


== MWM Implementation Aspects ==
== MWM Implementation Aspects ==


<div style="margin:20px; padding:50px; border-radius:50px; background-color:beige;">
'''How and Why?'''
'''How and Why?'''


Line 44: Line 35:
# Pod "mwm"
# Pod "mwm"
# Container "mediawiki" + user volumes and config envs
# Container "mediawiki" + user volumes and config envs
# Container "mediawiki-safemode" + config envs
# Container "mariadb" + config envs
# Container "mariadb" + config envs


Line 74: Line 64:
|}
|}


==== [https://github.com/dataspects/mediawiki-manager/blob/main/cli/install-system/ Install] ====
https://github.com/dataspects/mediawiki-manager/blob/main/cli/install-system/initialize-persistent-mediawiki-service-volumes.sh
<syntaxhighlight lang=bash>
declare -a vols=(
  "/var/www/html/w/LocalSettings.php"
  "/var/www/html/w/extensions"
  "/var/www/html/w/skins"
  "/var/www/html/w/vendor"
  "/var/www/html/w/composer.json"
  "/var/www/html/w/images"
)
for vol in "${vols[@]}"
do
  podman cp $MWM_MEDIAWIKI_CONTAINER_ID:$vol $MEDIAWIKI_ROOT/w
done
</syntaxhighlight>
https://github.com/dataspects/mediawiki-manager/blob/main/cli/install-system/install-system.sh
<syntaxhighlight lang=bash>
source ./envs/my-new-system.env
envsubst < mediawiki-manager.tpl > mediawiki-manager.yml      # <-- Customize system
podman play kube mediawiki-manager.yml                        # <-- Schedule system (runs normal mediawiki container)
podman container stop mwm-deployment-pod-0-mediawiki-safemode  # <-- Stop safe mode mediawiki container
</syntaxhighlight>
==== Normal mode ====
<syntaxhighlight lang=bash>
# From scratch
source ./envs/my-new-system.env
podman pod start mwm-deployment-pod-0                          # <-- Run pod
podman container stop mwm-deployment-pod-0-mediawiki-safemode  # <-- Stop safe mode mediawiki container
# Returning from safe mode
source ./envs/my-new-system.env
podman container stop mwm-deployment-pod-0-mediawiki-safemode  # <-- Stop safe mode mediawiki container
podman container start mwm-deployment-pod-0-mediawiki          # <-- Start normal mediawiki container
</syntaxhighlight>
==== [https://github.com/dataspects/mediawiki-manager/blob/main/cli/manage-system/start-SAFE-MODE.sh Safe mode] ====
<syntaxhighlight lang=bash>
source ./envs/my-new-system.env
podman container stop mwm-deployment-pod-0-mediawiki          # <-- Stop normal mediawiki container
podman container start mwm-deployment-pod-0-mediawiki-safemode # <-- Start safe mode mediawiki container
</syntaxhighlight>
# <code>/images</code> still volumed in
# still uses production database
# mostly unchanged envs
# "volumed out" and falling back to reliable container-internal versions:
#* LocalSettings.php containing <code>$wgReadOnly = true; $wgSiteNotice = "================ MWM Safe Mode ================";</code>
#* extensions
#* skins
#* vendor
#* composer.json
</div>


== Target User Groups ==
== Target User Groups ==

Revision as of 03:33, 20 April 2021

Project Reasoning and Potential Goals

  1. MWM (not integrated, but besides MW):
    1. git clone
    2. install.sh
    3. manage:
      • Install/configure/upgrade system(s)
      • Install/enable/disable/upgrade/configure extensions
        • MediaWiki Stakeholders Group Certified Extensions Service
      • Backup/restore/clone/compare/consolidate system(s) (snapshots)
      • Inject/extract/facet/edit/consolidate/import/export/remove apps/structures/ontologies
        • MediaWiki Stakeholders Group Certified Apps Service
      • Script/automate/schedule tasks
      • Package/move/archive/migrate system(s)

MWM Implementation Aspects

How and Why?

  • Dissect system…
  • …into as few as possible but into as many as necessary interfacing components…
  • …in order to fulfill all intended use cases…
  • …in accordance with corresponding users' capabilities and needs.

Abstraction Layers

CLI <-- API <-- UI
  1. UI is GUI for API
  2. API wraps CLI
  3. CLI means bash scripts covering all use cases

Podman-managed MWM Kubernetes deploy manifest ("Containers")

  1. Pod "mwm"
  2. Container "mediawiki" + user volumes and config envs
  3. Container "mariadb" + config envs

Config envs

Pending: podman secret

# my-new-system.env
export WG_DB_PASSWORD=8n65f%6n5
⇒ envsubst ⇒
# mediawiki-manager.yml
...
containers:
  - image: docker.io/dataspects/mediawiki:1.35.0-2104121740
    name: mediawiki
    env:
      - name: WG_DB_PASSWORD
        value: 8n65f%6n5
      - ...
...
# Localsettings.php
$wgDBpassword = getenv("WG_DB_PASSWORD");


Target User Groups

Who can use the concepts in MWM how? Here I try to segregate target users into groups that share capabilities and needs.

User Group Point/Select/Type/Click CLI/SSH Scripting Edit configuration junior Edit configuration senior
Examples "Web Interface" Automate/schedule tasks
  • Edit LocalSettings.php
  • Run composer

PLUS

  • Interpret logs
  • Report bugs/feature request
  • Branch code, develop and PR
UGUI "WebAdmin" Yes - "Macro" style only from within UI
("Excel Record Macro Style")
- -
UGAdmin "SysAdmin" Yes Yes Run/arrange .sh scripts Yes -
UGCoder "Developer" Yes Yes Run/arrange/compose/create/edit .sh scripts including API calls Yes Yes

Use Cases

Install/configure/upgrade/run/operate system(s)

Where How Why
locally on a single computer as a containerized app for personal/private/development use
in an intranet
  • as a containerized app on a root server
  • as a containerized app on a PAAS
for corporate internal use

on the internet/in the cloud

  • on a shared host
  • as a containerized app on a root server
  • as a containerized app on a PAAS
for corporate internal/external/public use

CLI: Bash scripts

Mediawiki-manager-InteractionLogics.png

Install/enable/disable/upgrade/configure extensions

CLI (Bash)

The command:

./cli/manage-extensions/show-extension-catalogue.sh

parses https://github.com/dataspects/mediawiki-manager/blob/main/catalogues/extensions.json to offer the selection of "certified" extensions upon which the commands:

  • ./cli/manage-extensions/enable-extension.sh <EXTNAME> and
  • ./cli/manage-extensions/disable-extension.sh <EXTNAME>

can be executed.

MWM manage extensions on cli bash abstraction level.png

API (prototype)

Mediawiki-manager-ExtensionsStore.png

Backup/restore/clone/compare/consolidate system(s) (snapshots)

Troubleshoot/safe mode

Inject/extract/facet/edit/consolidate/import/export/remove apps/structures/ontologies

CLI (Bash)

https://github.com/dataspects/mediawiki-manager/tree/main/cli/manage-content

Scripting

CLI (Bash)

https://github.com/dataspects/mediawiki-manager/blob/main/cli/manage-extensions/tests.sh

Package system(s)

  1. mediawiki-apps.json

MediaWiki Stakeholders Group Certified Extensions Service

MWStake MWM Service Portfolio

Mediawiki-manager-Service-Protfolio.png

Abstraction Layers

Mediawiki-manager-Service-Architecture.png

ALcontainerization: Podman

  1. The mediawiki container image contains a full MediaWiki installation.
  2. initialize-persistent-mediawiki-service-volumes.sh will copy the 5 persistence-relevant files/directories out to the host so they can be volumed in when starting the mediawiki container.
  3. This shall allow for start-SAFE-MODE.sh.

ALcli: shell scripts using MWAPI and CRUDing files in service volumes

ALapi: MWM API (Go) wrapping and parametrizing ALcli shell scripts and using MWAPI

https://github.com/dataspects/mwmapi

Unit Testing

ALui: MWM UI (React/Material UI) using and parametrizing ALapi endpoints

https://github.com/dataspects/mwmui

MWM UI

Integration Testing

Development Broadcasting

There are videos about MWStake MWM at dataspects' YouTube channel.