|
|
Line 1: |
Line 1: |
− | At this moment there is one way to install Open CSP yourself.
| + | Installation of Open CSP is quite easy. See [https://github.com/Open-CSP/open-csp/blob/main/.github/README.md the Open CSP Readme on github]. |
− | | |
− | == Install MediaWiki ==
| |
− | The first step is to [[Mediawikiwiki:Manual:Installing MediaWiki|install MediaWiki]]. If you have done this, go to the next step.
| |
− | | |
− | == Install Elasticsearch ==
| |
− | In Open CSP Elasticsearch is used as [https://www.semantic-mediawiki.org/wiki/Help:ElasticStore Elasticstore for Semantic MediaWiki]. Having the data in Elasticsearch is a prerequisite for the use of [[Mediawikiwiki:Extension:WikiSearch|WikiSearch]].
| |
− | | |
− | How to install Elasticsearch is described here: https://www.mediawiki.org/wiki/Extension:CirrusSearch#Elasticsearch.
| |
− | | |
− | == Download the Open CSP extensions ==
| |
− | Go to [[Extensions-in-open-csp|Extensions in Open CSP]] and download all the extensions that are not included with MediaWiki.
| |
− | | |
− | == Configuration of settings ==
| |
− | Our approach is to have LocalSettings.php as it is and put settings in different files. This promotes clarity and upgradability.
| |
− | | |
− | === Change LocalSettings.php ===
| |
− | Add this to the end of LocalSettings.php and create a 'settings' folder in the public_html with these files.
| |
− | <pre>
| |
− | require_once( 'settings/ServerSettings.php' );
| |
− | require_once( 'settings/AdditionalSettings.php' );
| |
− | require_once( 'settings/ExtensionSettings.php' );
| |
− | require_once( 'settings/SkinSettings.php' );
| |
− | </pre>
| |
− | | |
− | === Configure server settings ===
| |
− | <pre>
| |
− | <?php
| |
− | // Project namespace (choose your project namespace)
| |
− | // $wgMetaNamespace = "Wiki";
| |
− | | |
− | // Short URL (optional)
| |
− | // $wgArticlePath = "/$1";
| |
− | // $wgUsePathInfo = true;
| |
− | | |
− | // Elasticsearch (configure according your ES installation)
| |
− | $GLOBALS['smwgElasticsearchEndpoints'] = [ 'elasticsearch-master.helm.svc.cluster.local:9200', ];
| |
− | $GLOBALS['smwgElasticsearchConfig']['settings']['data'] = [ 'number_of_shards' => 2,
| |
− | 'number_of_replicas' => 0 ];
| |
− | | |
− | // Disable jobqueue on webrequest (optional, if set to 0 create cronjob to run runJobs.php)
| |
− | // $wgJobRunRate = 0;
| |
− | | |
− | </pre>
| |
− | | |
− | === Configure additional settings ===
| |
− | <pre>
| |
− | <?php
| |
− | // Uncomment to see Exception Details
| |
− | // $wgShowExceptionDetails = true;
| |
− | | |
− | // Please fill in your page name here:
| |
− | $wgSitename = "CSP Wiki";
| |
− | | |
− | // Allow uploads
| |
− | $wgEnableUploads = true;
| |
− | // Under evaluation: Might no longer be required for FlexForm
| |
− | $wgAllowCopyUploads = true;
| |
− | $wgCopyUploadsFromSpecialUpload = true;
| |
− | | |
− | // Use img_auth.php for all files served. (optional)
| |
− | // $wgUploadPath = "/img_auth.php";
| |
− | | |
− | // Switch off cache (optional)
| |
− | // $wgCachePages = false;
| |
− | // $wgMainCacheType = CACHE_NONE;
| |
− | // $wgCacheDirectory = false;
| |
− | // $wgParserCacheType = CACHE_NONE;
| |
− | | |
− | // Enable ElasticSearch as the standard backend
| |
− | $smwgDefaultStore = 'SMWElasticStore';
| |
− | | |
− | // Explicitly set wgRawHtml to false, since it is unsafe.
| |
− | $wgRawHtml = false;
| |
− | | |
− | // Below are settings for a private wiki that all users can edit
| |
− | // No need to patrol pages
| |
− | $wgUseRCPatrol = false;
| |
− | $wgUseNPPatrol = false;
| |
− | | |
− | // Private wiki
| |
− | $wgGroupPermissions['*']['read'] = false;
| |
− | $wgGroupPermissions['*']['edit'] = false;
| |
− | $wgGroupPermissions['*']['createaccount'] = false;
| |
− | | |
− | // Give read and write rights to all registered users.
| |
− | $wgGroupPermissions['user']['read'] = true;
| |
− | $wgGroupPermissions['user']['edit'] = true;
| |
− | // Give a faux permission to 'moderator' so it will show up as a role.
| |
− | $wgGroupPermissions['moderator']['read'] = true;
| |
− | | |
− | // Allow moderators edit access to the Wiki namespace.
| |
− | $wgNamespaceProtection[NS_PROJECT] = [ 'edit project' ];
| |
− | $wgGroupPermissions['sysop']['edit project'] = true;
| |
− | $wgGroupPermissions['moderator']['edit project'] = true;
| |
− | | |
− | </pre>
| |
− | | |
− | === Configure extension settings ===
| |
− | <pre>
| |
− | <?php
| |
− | ##### Admin Links
| |
− | wfLoadExtension( 'AdminLinks' );
| |
− | | |
− | ##### CodeMirror (optional
| |
− | // Required for source editing with CodeMirror.
| |
− | // wfLoadExtension( 'WikiEditor' );
| |
− | // wfLoadExtension( 'CodeMirror' );
| |
− | // $wgDefaultUserOptions['usecodemirror'] = 1;
| |
− | | |
− | ##### CSPResources
| |
− | wfLoadExtension( 'CSPResources' );
| |
− | $wgCSPShowSmwIndicator = false;
| |
− | | |
− | ##### DataTransfer
| |
− | wfLoadExtension( 'DataTransfer' );
| |
− | | |
− | ##### DeleteBatch
| |
− | wfLoadExtension( 'DeleteBatch' );
| |
− | | |
− | ##### DisplayTitle
| |
− | wfLoadExtension( 'DisplayTitle' );
| |
− | // defaults to true
| |
− | $wgAllowDisplayTitle = true;
| |
− | // defaults to true
| |
− | $wgRestrictDisplayTitle = false;
| |
− | | |
− | ##### Echo
| |
− | wfLoadExtension( 'Echo' );
| |
− | $wgEchoWatchlistNotifications = true;
| |
− | | |
− | $wgExtensionFunctions[] = static function () {
| |
− | global $wgEchoNotifications;
| |
− | unset( $wgEchoNotifications["thank-you-edit"] );
| |
− | | |
− | global $wgEchoNotificationCategories;
| |
− | unset( $wgEchoNotificationCategories["edit-user-talk"] );
| |
− | unset( $wgEchoNotificationCategories["mention"] );
| |
− | unset( $wgEchoNotificationCategories["emailuser"] );
| |
− | unset( $wgEchoNotificationCategories["thank-you-edit"] );
| |
− | };
| |
− | | |
− | ##### FlexForm (formerly: WSForm)
| |
− | wfLoadExtension( 'FlexForm' );
| |
− | $wgFlexFormConfig['sec_key'] = getenv( 'GITLAB_ENVIRONMENT_URL' ) . "salt";
| |
− | $wgFlexFormConfig['auto_save_btn_on'] = 'Autosave on';
| |
− | $wgFlexFormConfig['auto_save_btn_off'] = 'Autosave off';
| |
− | $wgFlexFormConfig['FlexFormDefaultTheme'] = "plain";
| |
− | $wgFlexFormConfig['CreateAndEditForms']['allowedGroups'] = ["sysop","moderator"];
| |
− | $wgFlexFormConfig['form_timeout_limit'] = 7200;
| |
− | | |
− | ##### Lockdown
| |
− | wfLoadExtension( 'Lockdown' );
| |
− | | |
− | ##### MultimediaViewer
| |
− | wfLoadExtension( 'MultimediaViewer' );
| |
− | $wgMediaViewerIsInBeta = true;
| |
− | | |
− | ##### MyVariables
| |
− | wfLoadExtension( 'MyVariables' );
| |
− | | |
− | ##### NumberFormat
| |
− | require_once "$IP/extensions/NumberFormat/NumberFormat.php";
| |
− | | |
− | ##### ParserFunctions
| |
− | wfLoadExtension( 'ParserFunctions' );
| |
− | $wgPFEnableStringFunctions = true;
| |
− | $wgPFStringLengthLimit = 80000;
| |
− | | |
− | ##### Realnames
| |
− | wfLoadExtension( 'Realnames' );
| |
− | $wgRealnamesLinkStyle = "replace";
| |
− | | |
− | ##### RegexFun
| |
− | require_once $IP . '/extensions/RegexFun/RegexFun.php';
| |
− | | |
− | ##### ReplaceText
| |
− | wfLoadExtension( 'ReplaceText' );
| |
− | | |
− | ##### SSO Stack
| |
− | ### PluggableAuth
| |
− | ### WSAzureAuth
| |
− | ### WSOAuth
| |
− | $wgGroupPermissions['*']['autocreateaccount'] = true;
| |
− | wfLoadExtension( 'PluggableAuth' );
| |
− | wfLoadExtension( 'WSAzureAuth' );
| |
− | wfLoadExtension( 'WSOAuth' );
| |
− | $wgPluggableAuth_EnableLocalLogin = true;
| |
− | $wgPluggableAuth_Config['WikibaseSolutionsAAD'] = [
| |
− | 'plugin' => 'WSOAuth',
| |
− | 'data' => [
| |
− | 'type' => 'azure',
| |
− | 'clientId' => getenv( 'AAD_CLIENT_ID' ),
| |
− | 'clientSecret' => getenv( 'AAD_CLIENT_SECRET' ),
| |
− | 'redirectUri' => str_replace( "http",
| |
− | "https",
| |
− | getenv( 'GITLAB_ENVIRONMENT_URL' ) ) . '/Special:PluggableAuthLogin'
| |
− | ],
| |
− | 'buttonLabelMessage' => 'wikibase-solutions-oauth-button-label'
| |
− | ];
| |
− | $wgOAuthAzureTenant = getenv( 'AAD_TENANT_ID' );
| |
− | $wgOAuthAutoPopulateGroups = [ 'sysop',
| |
− | 'interface-admin' ];
| |
− | | |
− | ##### SemanticMediaWiki
| |
− | enableSemantics( 'wikibase.nl' );
| |
− | $smwgConfigFileDir = $IP . '/cache';
| |
− | # Default disabled (CSP Basis#13)
| |
− | $smwgCheckForConstraintErrors = SMW_CONSTRAINT_ERR_CHECK_NONE;
| |
− | const NS_WIDGET = 274;
| |
− | const NS_WIDGET_TALK = 275;
| |
− | $smwgNamespacesWithSemanticLinks[NS_TEMPLATE] = true;
| |
− | $smwgNamespacesWithSemanticLinks[SMW_NS_PROPERTY] = true;
| |
− | $smwgNamespacesWithSemanticLinks[SMW_NS_CONCEPT] = true;
| |
− | $smwgNamespacesWithSemanticLinks[NS_WIDGET] = true;
| |
− | $smwgNamespacesWithSemanticLinks[SMW_NS_PROPERTY_TALK] = false;
| |
− | $smwgNamespacesWithSemanticLinks[SMW_NS_CONCEPT_TALK] = false;
| |
− | $smwgNamespacesWithSemanticLinks[NS_WIDGET_TALK] = false;
| |
− | $smwgPageSpecialProperties = [ '_MDAT',
| |
− | '_CDAT' ];
| |
− | | |
− | ##### SemanticExtraSpecialProperties
| |
− | wfLoadExtension( 'SemanticExtraSpecialProperties' );
| |
− | $sespgEnabledPropertyList = [ '_EUSER',
| |
− | '_CUSER',
| |
− | '_PAGEID', ];
| |
− | | |
− | ##### SemanticResultFormats
| |
− | wfLoadExtension( 'SemanticResultFormats' );
| |
− | | |
− | ##### SyntaxHighlight_GeSHi
| |
− | wfLoadExtension( 'SyntaxHighlight_GeSHi' );
| |
− | | |
− | ##### TemplateData
| |
− | wfLoadExtension( 'TemplateData' );
| |
− | | |
− | ##### UrlGetParameters
| |
− | require_once $IP . '/extensions/UrlGetParameters/UrlGetParameters.php';
| |
− | | |
− | ##### UserFunctions
| |
− | require_once "$IP/extensions/UserFunctions/UserFunctions.php";
| |
− | $wgUFAllowedNamespaces = array_fill( 0,
| |
− | 4000,
| |
− | true );
| |
− | $wgUFAllowedNamespaces += array_fill( 50000,
| |
− | 5000,
| |
− | true );
| |
− | | |
− | ##### UserMerge
| |
− | wfLoadExtension( 'UserMerge' );
| |
− | $wgGroupPermissions['bureaucrat']['usermerge'] = true;
| |
− | | |
− | ##### Variables
| |
− | wfLoadExtension( 'Variables' );
| |
− | | |
− | ##### VisualEditor
| |
− | wfLoadExtension( 'VisualEditor' );
| |
− | $wgTmpDirectory = $IP . '/images/temp/';
| |
− | $wgExtraSignatureNamespaces = [ NS_MAIN ];
| |
− | $wgVisualEditorEnableWikitext = true;
| |
− | $wgVisualEditorEnableDiffPage = true;
| |
− | for ( $i = 50000; $i < 55000; $i += 2 ) {
| |
− | $wgContentNamespaces[] = $i;
| |
− | }
| |
− | $wgVisualEditorNamespaces = array_merge( $wgContentNamespaces,
| |
− | [ NS_USER ] );
| |
− | | |
− | ##### Widgets
| |
− | wfLoadExtension( 'Widgets' );
| |
− | | |
− | ##### WSArrays
| |
− | wfLoadExtension( 'WSArrays' );
| |
− | $wfEnableResultPrinter = true;
| |
− | | |
− | ##### WSImageVersion
| |
− | wfLoadExtension( 'WSImageVersion' );
| |
− | $wgWSImageVersionVersionDescriptions = [ [ "product" => "CSP",
| |
− | "file" => $IP . "/.version" ], ];
| |
− | | |
− | ##### WSPageSync
| |
− | wfLoadExtension( 'WSPageSync' );
| |
− | $wgWSPageSync['filePath'] = $IP . '/wsps';
| |
− | | |
− | ##### WikiSearch (and WikiSearchFront)
| |
− | wfLoadExtension( 'WikiSearch' );
| |
− | wfLoadExtension( 'WikiSearchFront' );
| |
− | | |
− | ##### WSSemanticParsedText
| |
− | wfLoadExtension( 'WSSemanticParsedText' );
| |
− | $smwgElasticsearchConfig["indexer"]["raw.text"] = true;
| |
− | | |
− | ##### WSSlots
| |
− | # Note: We still define and append the 'ws-page-props' slot, because it is used on some wikis.
| |
− | wfLoadExtension( 'WSSlots' );
| |
− | $wgWSSlotsDefaultSlotRoleLayout = [ "display" => "none",
| |
− | "region" => "center",
| |
− | "placement" => "append", ];
| |
− | $wgWSSlotsDefaultContentModel = "wikitext";
| |
− | $wgWSSlotsDefinedSlots = [ "ws-base-props", "ws-class-props" ];
| |
− | $wgWSSlotsSemanticSlots = [ "ws-base-props", "ws-class-props" ];
| |
− | $wgWSSlotsDoPurge = true;
| |
− | | |
− | ##### WSSpaces
| |
− | wfLoadExtension( 'WSSpaces' );
| |
− | for ( $i = 50000; $i < 55000; $i++ ) {
| |
− | $smwgNamespacesWithSemanticLinks[$i] = true;
| |
− | }
| |
− | | |
− | ##### WSTools
| |
− | wfLoadExtension( 'WSTools' );
| |
− | | |
− | </pre>
| |
− | | |
− | === Configure skin settings ===
| |
− | <pre>
| |
− | <?php
| |
− | wfLoadExtension( 'Bootstrap' );
| |
− | wfLoadSkin( 'chameleon' );
| |
− | $wgDefaultSkin = "chameleon";
| |
− | | |
− | // Define the location of the css and the layout xml
| |
− | $egChameleonLayoutFile = "$IP/skin/wikibaseLayout.xml";
| |
− | $egChameleonExternalStyleModules = glob( $IP . '/skin/scss/[^_]*.scss' );
| |
− | $wgAllowSiteCSSOnRestrictedPages = true;
| |
− | | |
− | // Replace "Powered by SMW" by "Powered by Wikibase"
| |
− | $wgFooterIcons = [ "copyright" => [ "copyright" => [], ],
| |
− | "poweredby" => [ "wikibase" => [ "src" => "/skin/PoweredByWikibase.png",
| |
− | "url" => "https://www.wikibase-solutions.com/",
| |
− | "alt" => "Powered by Wikibase", ], ], ];
| |
− | $wgRightsIcon = null;
| |
− | | |
− | // Logo and favicon
| |
− | $wgFavicon = "/skin/favicon.png";
| |
− | | |
− | // Common message files
| |
− | $wgMessagesDirs['WikibaseSolutions'] = __DIR__ . '/../skin/i18n';
| |
− | | |
− | // Style settings
| |
− | // If you want to use container-max-widths, take this step or it won't respond:
| |
− | // -> Go to skin/wikibaseLayout.xml and from <grid>, remove: 'class="flex-fill" mode="fluid"'
| |
− | // Add this to the following array: 'container-max-widths' => '(sm: 100%, md: 100%, lg: 70vw, xl:
| |
− | // 70vw)'
| |
− | $egChameleonExternalStyleVariables = [ 'primary' => '#0576a8' ];
| |
− | | |
− | </pre>
| |