MediaWiki

De Wiki Projeto Root
Ir para navegação Ir para pesquisar

Sobre

Olá! Visitante, reunimos aqui, informações sobre configurações avançadas da MediaWiki, com estes ajustes além de fazer uma configuração mais personalizada e segura, também é possível configurar a sua wiki de maneira profissional com o AD da sua empresa, assim deixando os usuários de seu controlador de domínios podendo autenticar na sua wiki, este tipo de situação é interessante quando se precisa disponibilizar uma Wiki Corporativa.


Configurações

Edições

1 - Bloquear exceções de captcha:
# vim ConfirmEdit/ConfirmEdit.php
$wgGroupPermissions['*'            ]['skipcaptcha'] = false;
$wgGroupPermissions['user'         ]['skipcaptcha'] = false;
$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false;
$wgGroupPermissions['bot'          ]['skipcaptcha'] = false; // registered bots
$wgGroupPermissions['sysop'        ]['skipcaptcha'] = false;
$wgAvailableRights[] = 'skipcaptcha';
2 - Definição de ações que solicitarão captcha:
$wgCaptchaTriggers = array();
$wgCaptchaTriggers['edit']          = false; // Would check on every edit
$wgCaptchaTriggers['create']        = true; // Check on page creation.
$wgCaptchaTriggers['sendemail']     = false; // Special:Emailuser
$wgCaptchaTriggers['addurl']        = false;  // Check on edits that add URLs
$wgCaptchaTriggers['createaccount'] = true;  // Special:Userlogin&type=signup
$wgCaptchaTriggers['badlogin']      = true;  // Special:Userlogin after failure

Integração com AD

1 - Download da última versão em: http://www.mediawiki.org/wiki/Extension:LDAP_Authentication#Current_version
2 - Habilitar o módulo no LocalSettings.php:
require_once( "$IP/extensions/LdapAuthentication/LdapAuthentication.php" );
$wgAuth = new LdapAuthenticationPlugin();
3 - Configurações básicas:
$wgLDAPDomainNames = array( 'dominio' );
$wgLDAPServerNames = array( 'dominio' => 'servidor.dominio.com' );
$wgLDAPSearchStrings = array( "dominio" => "DOMINIO\\USERNAME" );
$wgLDAPEncryptionType = array( "dominio" => "clear" );
4 - Fazer o update de banco para adicionar as tabela "wikidb.ldap_domains":
# cd /var/www/mediawiki/maintenance
# php update.php
5 - Testar a autenticação.

Restrições de Grupos

1 - Adicionar as seguintes opções no LocalSettings.php:
$wgLDAPGroupUseFullDN = array( "DOMINIO" => true );
$wgLDAPBaseDNs = array( 'DOMINIO' => 'dc=dominio,dc=com' );
$wgLDAPSearchAttributes = array( 'DOMINIO' => 'sAMAccountName' );
2 - Definição dos atributos de busca por grupos:
$wgLDAPGroupObjectclass = array( 'DOMINIO' => 'group' );
$wgLDAPGroupAttribute = array( 'DOMINIO' => 'member' );
$wgLDAPGroupNameAttribute = array( 'DOMINIO' => 'cn' );
3 - Definição de quais grupos precisa pertencer:
$wgLDAPRequiredGroups = array( 'DOMINIO' => array( 'cn=Wiki_Edicao,ou=Acessos_Wiki,dc=dominio,dc=com','cn=Wiki_Leitura,ou=Acessos_Wiki,dc=dominio,dc=com' ) );
OBS.: Da mesma forma podem ser usados grupos de exclusão usando a tag "$wgLDAPExcludedGroups"
$wgLDAPExcludedGroups = array( 'DOMINIO' => array( 'cn=Wiki_Negado,ou=Acessos_Wiki,dc=dominio,dc=com' ) );
4 - Aplicação de permissões baseadas em grupos:
$wgLDAPUseLDAPGroups = array( 'DOMINIO' => true );
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['read'] = false;
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['user']['createpage'] = false;
$wgGroupPermissions['user']['upload'] = false;

$wgGroupPermissions['Wiki_Leitura' ]['edit'] = false;
$wgGroupPermissions['Wiki_Edicao' ]['edit'] = true;
$wgGroupPermissions['Wiki_Edicao' ]['createpage'] = true;
$wgGroupPermissions['Wiki_Edicao' ]['upload'] = true;
$wgGroupPermissions['Wiki_Admin' ]['edit'] = true;
$wgGroupPermissions['Wiki_Admin' ]['createpage'] = true;
$wgGroupPermissions['Wiki_Admin' ]['upload'] = true;
$wgGroupPermissions['Wiki_Admin' ] = $wgGroupPermissions[ 'sysop' ];

Busca de Atributos

1 - Adicionar a seguinte linha para buscar e-mail, nome, login e idioma:
$wgLDAPPreferences = array( 'dominio.com' => array( 'email'=>'mail','realname'=>'cn','nickname'=>'sAMAccountName','language'=>'preferredLanguage'));

Referências

http://ryandlane.com/blog/2009/03/23/using-the-ldap-authentication-plugin-for-mediawiki-the-basics-part-1/
http://www.mediawiki.org/wiki/Manual:User_rights
http://www.mediawiki.org/wiki/Extension:LDAP_Authentication/Options#Enabling_the_plugin
http://www.mediawiki.org/wiki/Extension:LDAP_Authentication/AD_Configuration_Examples

Múltiplas Instâncias

Quando há a necessidade de mais bases Wiki no mesmo servidor, uma boa solução é criar endereços de wikis diferentes e com bases de dados diferentes mas usando os mesmos arquivos do MediaWiki.

1 - Renomear o arquivo LocalSettings.php
mv LocalSettings.php LocalSettings_Wiki1.php
2 - Acessar http://wiki.dominio.com/mw-config/index.php e proceder com a configuração da nova database.
3 - Fazer uma cópia do LocalSettings_Wiki1.php para LocalSettings_Wiki2.php e ajustar os seguintes parâmetros:
$wgServer
$wgDBname
$wgSecretKey
$wgUpgradeKey
4 - Verificar e ajustar as permissões de grupos e autenticação.
5 - Criar um arquivo LocalSettings.php com o seguinte conteúdo:
<?php
$callingURL = strtolower($_SERVER['SERVER_NAME']);
$pos = strpos( $callingURL, 'wiki1');

if ( $pos === false ) {
   require_once('LocalSettings_Wiki1.php');
}else{
   require_once('LocalSettings_Wiki2.php');
}
?>
6 - Ajustar os diretórios de uploads na Wiki2:
$wgUploadDirectory = "{$IP}/wiki2/images";
$wgUploadPath = "{$wgScriptPath}/wiki2/images";

Procedimentos

SQL

Criar Admin

INSERT INTO user_groups ( ug_user, ug_group ) VALUES ( 1, "bureaucrat" );
INSERT INTO user_groups ( ug_user, ug_group ) VALUES ( 1, "sysop" );

Backup

/usr/local/bin/bkp_mediawiki.sh

#!/bin/bash
# VARIAVEIS
DIR_BKP="/mnt/BACKUP"
BKPS="2"
DATE="`date +%Y-%m-%d`"
DATE_APAGAR=$(date --date "$BKPS days ago" +%Y-%m-%d)

# COMANDOS
mysqldump -u wiki_user -p"senha" wiki > $DIR_BKP/wiki_$DATE.sql
mysqldump -u wiki_user -p"senha" wiki2 > $DIR_BKP/wiki2_$DATE.sql
tar -cvzf $DIR_BKP/wikidir_$DATE.tgz /var/www/wiki* /var/www/mediawiki*

# Verifica e remove arquivos antigos.
if [ -e $DIR_BKP/wikidir_$DATE_APAGAR.tgz ]; then
       rm -f $DIR_BKP/wikidir_$DATE_APAGAR.tgz
fi
if [ -e $DIR_BKP/wiki_$DATE_APAGAR.sql ]; then
       rm -f $DIR_BKP/wiki_$DATE_APAGAR.sql
fi
if [ -e $DIR_BKP/wiki2_$DATE_APAGAR.sql ]; then
       rm -f $DIR_BKP/wiki2_$DATE_APAGAR.sql
fi

Upload de outros arquivos

Por padrão, a MediaWiki permite o upload de apenas alguns tipos de arquivos:

array( 'png', 'gif', 'jpg', 'jpeg' );

Modificando uma configuração no arquivo LocalSettings.php podemos adicionar outros tipos:

// Override the default with a bundle of filetypes:
$wgFileExtensions = array(
   'png', 'gif', 'jpg', 'jpeg', 'jp2', 'webp', 'ppt', 'pdf', 'psd',
   'mp3', 'xls', 'xlsx', 'swf', 'doc','docx', 'odt', 'odc', 'odp',
   'odg', 'mpp'
   );

Referências

https://www.mediawiki.org/wiki/Manual:$wgFileExtensions

Configuração SMTP

Primeiro instalamos os pacotes necessários:

  • CentOS
yum install php-pear php-PHPMailer
pear install mail Net_SMTP Auth_SASL mail_mime
systemctl restart httpd
  • Debian
apt-get install php-pear php-PHPMailer
pear install mail Net_SMTP Auth_SASL mail_mime
/etc/init.d/apache2 restart


Todas as configurações devem ser feitas no arquivo LocalSettings.php.

$wgSMTP = array(
'host'     => "smtp.dominio.com.br", // could also be an IP address. Where the SMTP server is located
'IDHost'   => "dominio.com.br",      // Generally this will be the domain name of your website (aka mywiki.org)
'port'     => 587,                 // Port to use when connecting to the SMTP server
'auth'     => true,               // Should we use SMTP authentication (true or false)
'username' => "[email protected]",     // Username to use for SMTP authentication (if being used)
'password' => "****"   // Password to use for SMTP authentication (if being used)
);

$wgEnableEmail = true;
$wgEnableUserEmail = true; # UPO
$wgAllowHTMLEmail = true;
$wgNoReplyAddress = true;
$wgUserEmailUseReplyTo = true;
$wgEmailAuthentication = false;
$wgEmergencyContact = "[email protected]";
$wgPasswordSender   = "[email protected]";
$wgPasswordReminderResendTime = 2;

$wgEnotifUserTalk = true; # UPO
$wgEnotifWatchlist = true; # UPO
#$wgEnotifImpersonal = true;
$wgEnotifMaxRecips = 50;
$wgEnotifMinorEdits  = true;
$wgEnotifRevealEditorAddress = true;
$wgUseEnotif = true;

Referências

https://www.mediawiki.org/wiki/Manual:Configuration_settings
https://www.mediawiki.org/wiki/Extension:Email_notification
https://snowulf.com/2011/08/30/configuring-mediawiki-to-use-external-smtp/

Extensões

Aproved Revs

Extensão usada para administradores aprovarem as modificações antes de publicá-las.

http://www.mediawiki.org/wiki/Extension:Approved_Revs

Algumas características:

  1. Caso uma página não possua nenhuma revisão aprovada, mostrará sempre a última revisão.
  2. Caso uma revisão seja aprovada, todas as anteriores são aprovadas também (isso é lógico).
  3. Os ajustes de permissões com base em grupos do AD, por exemplo, podem ser feitos em LocalSettings.php.
  4. Os ajustes mais genéricos de permissões podem ser feitos em extenstions/ApprovedRevs/ApprovedRevs.php
$wgGroupPermissions['*']['viewlinktolatest'] = false;
$wgGroupPermissions['sysop']['viewlinktolatest'] = true;

Flagged Revs

Extensão mais complexa e flexível para controle de revisões na MediaWiki. É a extensão usada pela Wikipedia.

https://www.mediawiki.org/wiki/Extension%3aFlaggedRevs

Upload de formatos diferentes

Para liberar novos formatos de arquivos, adicionar no LocalSettings.php

$wgFileExtensions = array_merge(
  $wgFileExtensions, array(
     'pdf', 'ppt', 'xml', 'rar', 'doc','docx', 'xls', 'xlsx', 'zip'
     )
  );

Troubleshooting

searchindex corrompido

Ao fazer buscas na Wiki, aparece uma mensagem semelhante à essa:

"...searchindex' is marked as crashed and should be repaired (localhost)"

Uma tabela da Wiki está corrompida e precisa ser recriada. A maneira mais rápida de fazer isso é pelo script update.php:

cd /var/www/wiki/maintenance
php update.php