Learning MediaWiki
Introdução ao MediaWiki
O MediaWiki é um notável software amplamente adotado por diversos sites e organizações para criar documentações de projetos ou páginas contendo informações variadas, com o objetivo de disseminar conhecimento. Sendo uma ferramenta de código aberto, possui suporte a multi-linguagem e uma ampla gama de extensões que enriquecem sua funcionalidade e utilidade.
Uma das principais vantagens do MediaWiki é sua própria linguagem, que, embora distintiva, é totalmente compatível com outras linguagens de marcação de texto, como o HTML. Essa flexibilidade permite que os usuários incorporem elementos visuais mais avançados e personalizem suas páginas de forma eficiente, tornando o uso do MediaWiki ainda mais poderoso e adaptável às suas necessidades específicas.
É importante ressaltar que, embora o MediaWiki ofereça suporte ao HTML, esse suporte não é completo. Em vez disso, ele permite a utilização de recursos mais básicos de formatação de texto e estilização diretamente, sem a necessidade de plugins ou extensões adicionais. Embora essa abordagem ofereça uma maneira rápida e fácil de formatar conteúdo, é importante estar ciente de suas limitações. Recursos HTML mais avançados podem não ser totalmente suportados ou podem exigir o uso de plugins específicos para funcionar corretamente.
Dessa forma, é sempre recomendável verificar a documentação oficial do MediaWiki e estar atento aos recursos suportados ao utilizar HTML em suas páginas, para garantir uma experiência de edição e visualização consistente e adequada às necessidades do projeto ou site.
Fornecendo Wikis
Quando uma organização decide instalar o MediaWiki, geralmente busca criar várias wikis, cada uma dedicada a um setor ou projeto específico. Para alcançar esse objetivo, existem duas abordagens principais para fornecer várias wikis usando o mesmo código-fonte (conhecidas como mesma instância):
Drupal Style:
Essa abordagem funciona apenas com Subpages (subpáginas), onde cada wiki é acessada através de URLs comoyourdomain.com/wiki1
,yourdomain.com/wiki2
, e assim por diante. Para configurar esse método, pode-se seguir um exemplo de configuração semelhante ao utilizado no Drupal.Giant Switch Statement:
Nesse caso, há a opção de usar Virtual Hosts (vhosts) do Apache ou Subpages. No entanto, é importante notar que usar ambos os métodos simultaneamente não é recomendado, pois pode levar a conflitos. Portanto, é necessário escolher entre vhosts ou subpages, dependendo das necessidades específicas do projeto.Várias instâncias:
Para contornar as limitações dos métodos acima e permitir o uso combinado de vhosts e/ou subpages, não se deve mais recorrer ao uso de links simbólicos, como era feito em versões mais antigas do MediaWiki. Em vez disso, é preciso copiar o diretório do MediaWiki para cada wiki desejada. Isso cria várias instâncias distintas, permitindo ter várias wikis, cada uma com seu próprio código-fonte.
É importante notar que a própria equipe do MediaWiki informa que o método de links simbólicos não funciona mais. Embora fosse uma abordagem anteriormente usada para configurar várias wikis de maneira simples, permitindo o uso de vhosts e/ou subpages ao mesmo tempo, essa funcionalidade foi descontinuada em versões mais recentes do software.
Fonte: https://m.mediawiki.org/wiki/Manual:Wiki_family
Symlink method
The symlinks method was formerly a method that eliminated the need to have redundant copies of MediaWiki on your filesystem while providing flexibility and customization for each wiki. WARNING: As of recent MediaWiki versions, this doesn't work anymore. If you try this, your MediaWiki will break. Instead, it's highly recommended to follow its spiritual successor, the method used by the Wikimedia Foundation (and the method that's used to power Wikipedia, this wiki, and many more!).
Instalar o mediawiki
Existem duas formas de instalar o MediaWiki: através do repositório oficial da sua distribuição ou utilizando o código-fonte diretamente. No momento em que este tutorial está sendo criado, as versões disponíveis diferem entre essas duas opções. No repositório oficial do Ubuntu 20.04, o pacote mais recente do MediaWiki é a versão 1.31.7. Essa é uma versão estável e pode ser instalada de maneira mais rápida e fácil através do gerenciador de pacotes do sistema.
Por outro lado, ao optar por instalar o MediaWiki através do código-fonte, é possível obter a versão mais atualizada, que é a 1.36.1. Essa versão também é estável e inclui as últimas melhorias e correções de bugs disponíveis no software. A escolha entre as duas opções dependerá das preferências e requisitos específicos do usuário. A instalação a partir do repositório é conveniente, especialmente para usuários que desejam uma configuração rápida e estável, garantida pela equipe responsável pela distribuição. Por outro lado, optar pelo código-fonte permite acesso às últimas atualizações e recursos, porém requer um pouco mais de esforço e configuração manual, pois o usuário fica responsável por gerenciar as atualizações.
É recomendável testar instalações via código-fonte, pois, na maioria das vezes, as versões mais recentes podem ser incompatíveis com alguns plugins ou extensões utilizadas anteriormente. Essa incompatibilidade pode ser prejudicial, especialmente quando estamos migrando a wiki entre diferentes versões. Portanto, antes de fazer uma atualização para a versão mais recente, é aconselhável verificar a compatibilidade dos plugins e extensões usados na wiki existente para evitar problemas durante a transição.
Independente da abordagem escolhida, ambas as versões do MediaWiki oferecem uma poderosa plataforma para criar e gerenciar wikis, permitindo compartilhar informações e conhecimentos de forma eficiente e colaborativa.
- Instalar usando o código fonte
- Instalar usando o repositório
# Atulize o repo:
sudo apt update
# Instale as dependencias:
sudo apt -y install php php-apcu php-json php-intl php-mbstring php-xml php-mysql mariadb-server apache2 imagemagick
# Baixe o mediawiki:
sudo wget https://releases.wikimedia.org/mediawiki/1.36/mediawiki-1.36.1.zip
# Descompacte-o:
sudo unzip mediawiki-1.36.1.zip
# Renomeie ele:
sudo mv mediawiki-1.36.1 mediawiki
# Mova para outro diretório:
sudo mv mediawiki /usr/share/
# Crie um dir no /etc:
sudo mkdir /etc/mediawiki
# Crie a pasta onde vao ficar as Wikis:
sudo mkdir -p /var/lib/wikis/producao/
# Entre na pasta:
cd /var/lib/wikis/producao/
# Crie os links
sudo ln -s /usr/share/mediawiki/* .
# Apague alguns arquivos/pastas, não podemos ter eles como links:
sudo rm LocalSettings.php AdminSettings.php images config
# Crie o LocalSettings da sua Wiki (apenas o link simbólico):
sudo ln -s /etc/mediawiki/LocalSettings_producao.php LocalSettings.php
# Crie as pastas:
sudo mkdir {images,upload,config}
# De as permissões corretas apenas para os arquivos abaixo:
sudo chown www-data. -R {images,config,upload}
# Acesse a pasta onde fica a instância da Wiki:
cd /usr/share/mediawiki/
# Crie o link que aponta para o LocalSettigs principal:
ln -s /etc/mediawiki/LocalSettings.php LocalSettings.php
sudo apt -y install mediawiki
Quando instalado pelo repositório, uma Wiki default será criada, ela fica em /var/lib/mediawiki/
, e os arquivos que todas as Wikis vão precisar ficam em /usr/share/mediawiki/
.
Você pode acessar ela pelo seu navegador no endereço: http://IP/mediawiki/
.
O arquivo de configuração do Apache para as Wiki fica em /etc/mediawiki/mediawiki.conf
.
No meu caso não vou usar a Wiki que vem por padrão, vamos criar outras manualmente, então pode remover ela:
$ sudo rm -r /var/lib/mediawiki/
Configurando nossa primeira Wiki
Eu utilizei a instalação pelo repositório, então existe uma configuração a mais que não tem na instalação manual.
Os passos abaixo podem ser realizados tanto para instalação pelo repositório quanto manual.
Agora vamos criar uma pasta onde vamos colocar todas as nossas Wikis:
$ sudo mkdir /var/lib/wikis
# Crie a primeira Wiki, vou chamar de 'producao':
$ sudo mkdir /var/lib/wikis/producao
# Entre na pasta:
$ cd /var/lib/wikis/producao/
# Crie os links
$ sudo ln -s /usr/share/mediawiki/* .
# Apague alguns arquivos/pastas, não podemos ter eles como links:
$ sudo rm LocalSettings.php AdminSettings.php images config
# Crie o LocalSettings da sua Wiki (apenas o link simbólico):
$ sudo ln -s /etc/mediawiki/LocalSettings_producao.php LocalSettings.php
# Crie as pastas:
$ sudo mkdir {images,upload,config}
# De as permissões corretas apenas para os arquivos abaixo:
$ sudo chown www-data. -R {images,config,upload}
Passo realizado para instalação feita pelo repositório, precisamos ajustar o arquivo do apache para o MediaWiki que está em /etc/mediawiki/mediawiki.conf
.
$ sudo sed -i 's/mediawiki/wikis\/producao/' /etc/mediawiki/mediawiki.conf
# Com esse comando, vamos substituir tudo que seja 'mediawiki' por 'wikis/producao', já deixando nossa primeira Wiki configurada.
# Apenas mude a linha 'Alias', removendo o '/wikis' de '/wikis/producao'.
# Substitua também '/var/lib/mediawiki' por '/var/lib/wikis/producao'.
Agora vamos configurar o comportamento da nossa Wiki, se vamos usar o método Drupal Style ou Giant Switch Statement, isso cabe a você decidir, eu vou usar o método Drupal Style, o que vai mudar é apenas o conteúdo do arquivo.
Para instalação manual, onde não temos o arquivo /etc/mediawiki/mediawiki.conf
, utilize o arquivo abaixo:
$ sudo wget -O /etc/mediawiki/mediawiki.conf https://gitlab.com/sysnetbr/codes/-/raw/main/mediawiki/mediawiki.conf
Usando o método Giant Switch Statement
Crie um arquivo LocalSettings.php
apenas e adicione o conteúdo abaixo, alterando os domínios de cada Wiki.
Usando com VHOSTS:
# Crie o arquivo padrão:
$ sudo vim /etc/mediawiki/LocalSettings.php
### CONTEÚDO ###
<?php
// Include common settings to all wikis before this line (eg. database configuration)
switch ( $_SERVER['SERVER_NAME'] ) {
case 'maddogswiki.test.br.com.br':
require_once '/etc/mediawiki/LocalSettings_maddogs.php';
break;
case 'taskforce171wiki.test.br.com.br':
require_once '/etc/mediawiki/LocalSettings_taskforce171.php';
break;
default:
header( 'HTTP/1.1 404 Not Found' );
echo 'This wiki is not available. Check configuration.';
exit( 0 );
}
### FIM CONTEÚDO ###
Usando com SUBPAGES
# Crie o arquivo padrão:
vim /etc/mediawiki/LocalSettings.php
### CONTEÚDO ###
<?php
// Include common settings to all wikis before this line (eg. database configuration)
$callingurl = strtolower( $_SERVER['REQUEST_URI'] ); // get the calling url
if ( strpos( $callingurl, '/maddogs' ) === 0 ) {
require_once '/etc/mediawiki/LocalSettings_maddogs.php';
} elseif ( strpos( $callingurl, '/taskforce171' ) === 0 ) {
require_once '/etc/mediawiki/LocalSettings_taskforce171.php';
} else {
header( 'HTTP/1.1 404 Not Found' );
echo "This wiki (\"" . htmlspecialchars( $callingurl ) . "\") is not available. Check configuration.";
exit( 0 );
}
### FIM CONTEÚDO ###
Você ainda deve configurar $wgUploadDirectory = "/var/lib/wikis/<NOME>/images";
em cada LocalSettings.php
de suas Wikis para não ter problema com o Uploads de conteúdos.
Usando o método Drupal Style
Obtenha o código nesse link, crie o arquivo em /etc/mediawiki/LocalSettings.php
contendo esse código. Na variável $confdir
, coloque o diretório de onde estão as suas Wikis, por exemplo:
## Como nossas Wikis ficam localizadas em '/var/lib/wikis/' mude a variável do arquivo '/etc/mediawiki/LocalSettings.php' confome abaixo ##
$confdir = '/var/lib/wikis';
Agora você deve criar a configuração do apache
para apontar para a subpage.
Você ainda deve configurar $wgUploadDirectory = "/var/lib/wikis/<NOME>/images";
em cada LocalSettings.php
de suas Wikis para não ter problema com o Uploads de conteúdos.
Criando o Banco de Dados
Agora vamos criar o banco de dados que nossa Wiki vai usar. Por padrão, é necessário um banco de dados para cada Wiki durante a criação dessa Wiki, então você sempre deve criar o banco de dados de uma Wiki antes de iniciar o processo de criação da mesma.
# Entre no Mysql (mariadb):
$ sudo mysql
# Crie o banco:
CREATE DATABASE producaowiki;
# Crie o usuário:
CREATE USER 'producaowikiuser'@'localhost' IDENTIFIED BY 'for1inWiK1D0';
# De permissão para o usuário no banco que criamos:
GRANT ALL PRIVILEGES ON producaowiki.* TO 'producaowikiuser'@'localhost' WITH GRANT OPTION;
# Recarregue as permissões:
FLUSH PRIVILEGES;
Vamos validar se funcionou, para isso, acesse o mysql usando o usuário e senhas criados mais acima:
$ mysql -u producaowikiuser -p producaowiki
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
# Funcionou!
Apache
Você deve escolher entre instalações usando vhosts
(Virtual Host, onde cada Wiki terá uma URL com domínio diferente) ou usando subpages (onde cada Wiki será uma sub página de uma página principal, como wiki.org/wiki1
, wiki.org/wiki2
, wiki.org/wiki3
e assim por diante)
Configurando Vhosts
Vamos configurar o vhost para nossa Wiki.
# Crie o arquivo abaixo:
cat /etc/apache2/sites-enabled/producao.conf
###### CONTEÚDO ######
<VirtualHost *:80>
ServerAdmin producao@wiki.test.br.com.br
ServerName producao.test.br.com.br
DocumentRoot /var/lib/wikis/producao
<Directory /var/lib/wikis/producao/>
Options +FollowSymLinks
AllowOverride All
<IfVersion >= 2.3>
Require all granted
</IfVersion>
<IfVersion < 2.3>
order allow,deny
allow from all
</IfVersion>
</Directory>
# some directories must be protected
<Directory /var/lib/wikis/producao/config>
Options -FollowSymLinks
AllowOverride None
<IfModule mod_php7.c>
php_admin_flag engine off
</IfModule>
<IfModule mod_php5.c>
php_admin_flag engine off
</IfModule>
</Directory>
<Directory /var/lib/wikis/producao/images>
Options -FollowSymLinks
AllowOverride None
<IfModule mod_php7.c>
php_admin_flag engine off
</IfModule>
<IfModule mod_php5.c>
php_admin_flag engine off
</IfModule>
</Directory>
<Directory /var/lib/wikis/producao/upload>
Options -FollowSymLinks
AllowOverride None
<IfModule mod_php7.c>
php_admin_flag engine off
</IfModule>
<IfModule mod_php5.c>
php_admin_flag engine off
</IfModule>
</Directory>
ErrorLog /var/log/apache2/error-producao.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access-producao.log combined
AddDefaultCharset UTF-8
</VirtualHost>
###### FIM CONTEÚDO ######
Configurando Subpages
Configure uma página em branco para a página principal do apache ou desative ela.
# Crie uma página principal em branco ou coloque algo nela (caso nao tenha), porque as wikis só serão acessada via subpage:
$ sudo vim /etc/apache2/sites-enabled/000-default.conf
###### CONTEÚDO ######
<VirtualHost *:80>
ServerName wiki.test.br.com.br
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/mediawiki/mediawiki.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
###### FIM CONTEÚDO ######
Agora reinicie o Apache:
$ sudo systemctl restart apache2
Configuração de redirecionamento
Não esqueça de modificar o LocalSettings.php
antes de acessar via Web, caso não tenha alterado, veja aqui.
Finalizando a criação da Wiki
Acesse o navegador http://IP/producao/
, você deve ver uma imagem igual a abaixo:
Assim vamos finalizar a criação da Wiki.
- Clique em complete the installation.
- Selecione o Idioma desejado e clique em continuar (porque coloquei em Português Brasil).
- Aqui é a verificação de Ambiente, deve estar tudo certo, então pode continuar.
- Agora vamos colocar as informações do banco de dados como o nome do banco que criamos producaowiki, nome do usuário que terá acesso ao banco producaowikiuser e a senha desse usuário for1inWiK1D0.
Clique em continuar depois de preencher essas informações. - Apenas clique em continuar.
- Coloque o nome da Wiki producao, o nome do primeiro usuário (vou deixar admin mesmo), mude a senha dele. Marcarei a opção Já estou aborrecido, apenas instale a wiki. e clicarei em continuar.
- Agora clique em continuar para criar a Wiki.
- Com tudo dando certo, clique em continuar para baixar o Localsettings.php da nossa Wiki.
Com o conteúdo em mãos, vamos inserir ele em /etc/mediawiki/LocalSettings_producao.php
.
Não se esqueça de configurar a variável
$wgUploadDirectory = "/var/lib/wikis/producao/images";
em todos osLocalSettings.php
(um para cada wiki) para não ter problema com o Uploads de conteúdos.
Vamos criar o link do LocalSettings padrão:
# Entre na pasta de conf da wiki:
$ cd /usr/share/mediawiki/
# Apague o localsettings.php que tem aqui:
$ sudo rm LocalSettings.php
# Crie um link apontando para o novo:
$ sudo ln -s /etc/mediawiki/LocalSettings.php LocalSettings.php
Após isso, você pode acessar a Wiki novamente pelo navegador: http://IP/producao/
.
Criando outras Wikis
Caso você precise criar outras Wikis, siga o passo a passo abaixo, isso pode tornar as páginas das Wikis existentes inácessíveis Durante o processo de criação:
# Crie a pasta onde vao ficar as Wikis:
sudo mkdir -p /var/lib/wikis/<NOME>
# Entre na pasta:
cd /var/lib/wikis/<NOME>
# Crie os links
sudo ln -s /usr/share/mediawiki/* .
# Apague alguns arquivos/pastas, não podemos ter eles como links:
rm LocalSettings.php AdminSettings.php images config
# Crie o LocalSettings da sua Wiki (apenas o link simbólico):
ln -s /etc/mediawiki/LocalSettings_<NOME>.php LocalSettings.php
# Crie as pastas:
sudo mkdir {images,upload,config}
# De as permissões corretas apenas para os arquivos abaixo:
sudo chown www-data. -R {images,config,upload}
###################################
##### Crie a conf no apache ! #####
###################################
###################################
##### Crie o banco de dados ! #####
###################################
# Renomeie o arquivo principal para que possa criar uma nova Wiki pela interface Gráfica:
mv /etc/mediawiki/LocalSettings.php /etc/mediawiki/LocalSettings.php-old
### Acessa a página pelo navegador ###
### Crie o LocalSettings.php com o arquivo fornecido ###
# Desfaça o rename que tinha feito para que as outras wikis volte a funcionar:
mv /etc/mediawiki/LocalSettings.php-old /etc/mediawiki/LocalSettings.php
Não se esqueça de configurar a variável $wgUploadDirectory = "/var/lib/wikis/<NOME>/images";
em todos os LocalSettings.php
(um para cada wiki) para não ter problema com o Uploads de conteúdos.
Criando Wiki via CLI
Vamos criar uma Wiki sem usar os recursos Web, isso diminui o tempo em que você vai deixar as wikis inacessíveis.
# Crie a pasta onde vao ficar as Wikis:
sudo mkdir -p /var/lib/wikis/adm
# Entre na pasta:
cd /var/lib/wikis/adm
# Crie os links
sudo ln -s /usr/share/mediawiki/* .
# Apague alguns arquivos/pastas, não podemos ter eles como links:
rm LocalSettings.php AdminSettings.php images config
# Crie o LocalSettings da sua Wiki (apenas o link simbólico):
ln -s /etc/mediawiki/LocalSettings_adm.php LocalSettings.php
# Crie as pastas:
sudo mkdir {images,upload,config}
# De as permissões corretas apenas para os arquivos abaixo:
sudo chown www-data. -R {images,config,upload}
# Entre no Mysql (mariadb):
mysql
# Crie o banco:
CREATE DATABASE admwiki;
# Crie o usuário:
CREATE USER 'admwikiuser'@'localhost' IDENTIFIED BY 'for1inWiK1D0';
# De permissão para o usuário no banco que criamos:
GRANT ALL PRIVILEGES ON admwiki.* TO 'admwikiuser'@'localhost' WITH GRANT OPTION;
# Recarregue as permissões:
FLUSH PRIVILEGES;
###################################
###### Crie a conf no apache ######
###################################
# Configure a Wiki:
cd /usr/share/mediawiki/maintenance
mv /etc/mediawiki/LocalSettings.php /etc/mediawiki/LocalSettings.php-old && \
\
php install.php --confpath='/var/lib/wikis' --dbname=admwiki --dbserver="localhost" --dbuser=admwikiuser --dbpass='for1inWiK1D0' --server="http://wiki.test.br.com.br" --scriptpath=/adm --lang=en --pass='4d7tx:h.;Ojv#yngEm2&p%Urk' "adm" "admin" && \
\
mv /etc/mediawiki/LocalSettings.php-old /etc/mediawiki/LocalSettings.php
# Pegue o arquivo LocalSeetings criado:
mv /var/lib/wikis/LocalSettings.php /etc/mediawiki/LocalSettings_adm.php
# Agora restarte o Apache:
systemctl restart apache2.service
Criando/Removendo um Usuários e Modificando Senha
Siga o passo a passo abaixo para criar/trocar a senha de usuários:
## Criando um usuário:
cd /usr/share/mediawiki/maintenance
cfg=/etc/mediawiki/LocalSettings_<NOME>.php
user_login='USERNAME'
pass_login='SENHA'
php createAndPromote.php --conf=${cfg} ${user_login} ${pass_login}
## Removendo usuário
Logue na Wiki com um usuário administrador
Vá em 'Páginas Especiais' - > 'Bloquear Usuário(a)'
Entre com o nome do usuário e Deixe 'Expiração' como Indefinido, depois basta salvar.
## Trocando a senha
cd /usr/share/mediawiki/maintenance
cfg=/etc/mediawiki/LocalSettings_<NOME>.php
user_login='USERNAME'
pass_login='SENHA'
php changePassword.php --conf=${cfg} --user=${user_login} --password=${pass_login}
Migrando uma Wiki de Servidor
Vamos demonstrar como migrar uma Wiki de servidor, o mesmo processo funciona para mais de uma wiki também, sendo que alguns passos só serão preciso ser realizados para a primeira Wiki (preparar o ambiente), tornando a migração das demais Wiki mais fácil.
Antes de começar - Servidor antigo
Antes de começar a migração, você vai precisar do dump de seu banco de dados e uma cópia dos arquivos do MediaWiki, principalmente da pasta upload
(caso tenha) e image
.
# Fazendo dump do banco de dados (backup):
mysqldump --user=wikidb_user --password=wikidb_userpassword wikidb > file.sql
# Faça backup do LocalSettings.php e das pastas: image, upload e config.
Instalando MediaWiki - Servidor novo
Use o processo descrito no começo do tutorial.
Criando o Banco de Dados - Servidor novo
Agora vamos criar o banco de dados que a nossa nova Wiki vai usar.
# Entre no Mysql (mariadb):
mysql
# Crie o banco:
CREATE DATABASE maddogs;
# Crie o usuário:
CREATE USER 'maddogswikiuser'@'localhost' IDENTIFIED BY 'uZD?%WK+wBqr,G3vQbMnEP&9)';
# De permissão para o usuário no banco que criamos:
GRANT ALL PRIVILEGES ON maddogswiki.* TO 'maddogswikiuser'@'localhost' WITH GRANT OPTION;
# Recarregue as permissões:
FLUSH PRIVILEGES;
Fazendo o Tunning do Mysql - Servidor novo
Vamos fazer o tunning do Mysql para deixar ele melhor, segue o que usei:
# Edite o arquivo abaixo e adicione as informações fornecidas para fazer o tunning do mysql:
vim /etc/mysql/my.cnf
#### INÍCIO DO CONTEÚDO ####
[mysqld]
collation_server = utf8mb4_unicode_ci
character_set_server = utf8mb4
innodb_buffer_pool_size = 1G
innodb_log_buffer_size = 256M
innodb_log_file_size = 1G
innodb_read_io_threads = 32
innodb_write_io_threads = 16
innodb_buffer_pool_instances = 2
innodb_flush_log_at_timeout = 3
innodb_buffer_pool_instances = 13
innodb_io_capacity = 5000
innodb_io_capacity_max = 10000
join_buffer_size = 100M
tmp_table_size = 100M
max_heap_table_size = 100M
long_query_time = 1
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slowquery.log
log_queries_not_using_indexes = 1
#### FIM DO CONTEÚDO ####
# Reinicie o Mysql:
systemctl restart mysql
Importando o Dump do DB - Servidor novo
Vamos importar o banco de dados que fizemos backup anteriormente.
sudo mysql -u root maddogswiki < bkp_db.sql
Instalando o Media Wiki - Servidor novo
Para isso, siga os processos descritos nos links abaixo, dependendo do tipo de instalação que você deseja.
Instalação usando o código fonte
Instalando usando o repositório
Crie seu LocalSettings.php - Servidor novo
Você deve usar o mesmo arquivo que utiliza no servidor antigo e deve deixar no mesmo local em que está o servidor antigo.
Crie também o LocalSettings padrão, seja usando método Giant Swtch Statement
ou Drupal Style
.
Apache - Servidor novo
No meu caso, escolhi utilizar subpage que fica mais fácil, todas as Wikis são uma sub-página de um mesmo domínio.
Como de costume, na minha Wiki existe um arquivo chamado /etc/mediawiki/apache.conf
, em versões mais novas (usando o pacote pelo repositório) esse arquivo vem com outro nome, mas vou manter este nome por questões práticas.
Vamos criar a entrada da nossa Wiki lá:
sudo vim /etc/mediawiki/apache.conf
### CONTEÚDO ###
###
#### WIKI producao
###
Alias /producao /var/lib/wikis/producao
<Directory /var/lib/wikis/producao/>
Options +FollowSymLinks
AllowOverride All
<IfVersion >= 2.3>
Require all granted
</IfVersion>
<IfVersion < 2.3>
order allow,deny
allow from all
</IfVersion>
</Directory>
# some directories must be protected
<Directory /var/lib/wikis/producao/config>
Options -FollowSymLinks
AllowOverride None
<IfModule mod_php7.c>
php_admin_flag engine off
</IfModule>
<IfModule mod_php5.c>
php_admin_flag engine off
</IfModule>
</Directory>
<Directory /var/lib/wikis/producao/images>
Options -FollowSymLinks
AllowOverride None
<IfModule mod_php7.c>
php_admin_flag engine off
</IfModule>
<IfModule mod_php5.c>
php_admin_flag engine off
</IfModule>
</Directory>
<Directory /var/lib/wikis/producao/upload>
Options -FollowSymLinks
AllowOverride None
<IfModule mod_php7.c>
php_admin_flag engine off
</IfModule>
<IfModule mod_php5.c>
php_admin_flag engine off
</IfModule>
</Directory>
### FIM CONTEÚDO ###
Agora na página default do apache 000-default.conf
inclua o caminho para o nosso arquivo de Wikis (Include /etc/mediawiki/apache.conf
):
# Editando a página padrão do Apache:
vim /etc/apache2/sites-available/000-default.conf
### CONTEÚDO ###
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ServerName wiki.test.br.com.br
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/mediawiki/apache.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
### FIM CONTEÚDO ###
# Reinicie o Apache:
sudo apachectl -k graceful
Finalizando a migração - Servidor novo
Volte o backup das pastas: image, upload e config do backup de arquivos:
# Entre na pasta da Wiki:
cd /var/lib/wikis/producao
# Crie os links
sudo ln -s /usr/share/mediawiki/* .
# Apague alguns arquivos/pastas, não podemos ter eles como links:
rm LocalSettings.php AdminSettings.php images config
# Crie o LocalSettings da sua Wiki (apenas o link simbólico):
ln -s /etc/mediawiki/LocalSettings_taskforce171.php LocalSettings.php
# Copie os arquivos:
cp -r /home/vagrant/var/lib/wikis/producao/{images,upload,config} .
# De as permissões corretas apenas para os arquivos abaixo:
sudo chown www-data. -R {images,config,upload}
Atualize o banco da sua Wiki:
# Entra na pasta de manutenção:
cd /usr/share/mediawiki/maintenance
# Faça o Update:
php update.php --conf /etc/mediawiki/LocalSettings_producao.php
Acerte o diretório de Upload:
# Etique o LocalSettings da Wiki:
vim /etc/mediawiki/LocalSettings_producao.php
# Adicione a linha abaixo (não esqueça de acertar o caminho correto):
$wgUploadDirectory = "/var/lib/wikis/<NOME>/images";
Por fim reinicie o Apache. Com isso sua Wiki estará migrada.
LocalSettings.php padrão
Segue uma versão do localsettings padrão para a instalação do MediaWiki 1.31.7:
<?php
# This file was automatically generated by the MediaWiki 1.31.7
# installer. If you make manual changes, please keep track in case you
# need to recreate them later.
#
# See includes/DefaultSettings.php for all configurable settings
# and their default values, but don't forget to make changes in _this_
# file, not there.
#
# 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;
}
## Include platform/distribution defaults
require_once "$IP/includes/PlatformSettings.php";
## Uncomment this to disable output compression
# $wgDisableOutputCompression = true;
$wgSitename = "taskforce171";
$wgMetaNamespace = "taskforce171";
## The URL base path to the directory containing the wiki;
## defaults for all runtime URL paths are based off of this.
## For more information on customizing the URLs
## (like /w/index.php/Page_title to /wiki/Page_title) please see:
## https://www.mediawiki.org/wiki/Manual:Short_URL
$wgScriptPath = "/taskforce171";
## The protocol and server name to use in fully-qualified URLs
$wgServer = "http://wiki.test.br.com.br";
## The URL path to static resources (images, scripts, etc.)
$wgResourceBasePath = $wgScriptPath;
## The URL path to the logo. Make sure you change this from the default,
## or else you'll overwrite your logo when you upgrade!
$wgLogo = "$wgResourceBasePath/resources/assets/wiki.png";
## UPO means: this is also a user preference option
$wgEnableEmail = true;
$wgEnableUserEmail = true; # UPO
$wgEmergencyContact = "apache@wiki.test.br.com.br";
$wgPasswordSender = "apache@wiki.test.br.com.br";
$wgEnotifUserTalk = false; # UPO
$wgEnotifWatchlist = false; # UPO
$wgEmailAuthentication = true;
## Database settings
$wgDBtype = "mysql";
$wgDBserver = "localhost";
$wgDBname = "NAME-DB";
$wgDBuser = "USER-DB";
$wgDBpassword = "SENHA";
# MySQL specific settings
$wgDBprefix = "";
# MySQL table options to use during installation or update
$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";
## Shared memory settings
$wgMainCacheType = CACHE_NONE;
$wgMemCachedServers = [];
## To enable image uploads, make sure the 'images' directory
## is writable, then set this to true:
$wgEnableUploads = false;
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";
# InstantCommons allows wiki to use images from https://commons.wikimedia.org
$wgUseInstantCommons = false;
# Periodically send a pingback to https://www.mediawiki.org/ with basic data
# about this MediaWiki instance. The Wikimedia Foundation shares this data
# with MediaWiki developers to help guide future development efforts.
$wgPingback = true;
## 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 = "pt-br";
$wgSecretKey = "ca14996bd2d4d6ffc6282050f8893cf920e641ace81e0bad35fff255a095ed06";
# 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 = "a03458a91eeeedf6";
## 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";
## 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' );
$wgGroupPermissions['*']['edit'] = false; # impede edicao sem estar logado
$wgGroupPermissions['*']['createaccount'] = false; # impede criacao de novos usuarios
# Disable reading by anonymous users
$wgGroupPermissions['*']['read'] = false;
# End of automatically generated settings.
# Add more configuration options below.
Usando LDAP para Autenticação
Para as versões mais recentes do MediaWiki (1.31 ou mais novo), a extensão LDAPAuthentication2 é comumente utilizada para permitir a autenticação através do protocolo LDAP (Lightweight Directory Access Protocol). Essa extensão tem duas dependências principais, que são PluggableAuth e LDAPProvider.
Plugin | Descrição |
---|---|
PluggableAuth | A extensão PluggableAuth é um sistema de autenticação flexível e "plug-and-play" que permite integrar diferentes sistemas de autenticação ao MediaWiki. É utilizado em conjunto com o LDAPProvider para que a autenticação via LDAP seja incorporada ao sistema de autenticação do MediaWiki de forma mais modular. Com o PluggableAuth, é possível adicionar outros métodos de autenticação além do LDAP, caso seja necessário. |
LDAPProvider | A extensão LDAPProvider é uma das principais extensões para autenticação LDAP no MediaWiki. Ela oferece suporte para conectar o MediaWiki ao servidor LDAP, permitindo que os usuários façam login utilizando suas credenciais armazenadas no diretório LDAP. Essa extensão estabelece a conexão com o servidor LDAP e realiza a autenticação dos usuários. |
LDAPAuthorization | A extensão LDAPAuthorization é usada para gerenciar as permissões dos usuários após a autenticação bem-sucedida através do LDAPProvider. Ela permite que você associe grupos e permissões do LDAP a grupos e permissões específicas do MediaWiki. Isso significa que os direitos dos usuários no MediaWiki podem ser controlados com base nos grupos do LDAP em que eles estão. |
LDAPAuthentication2 | O LDAPAuthentication2 é outra extensão para autenticação via LDAP, uma alternativa ao LDAPProvider. Ambas as extensões (LDAPProvider e LDAPAuthentication2) têm funcionalidades semelhantes, mas com implementações diferentes. O LDAPAuthentication2 também permite a autenticação de usuários no MediaWiki através de um servidor LDAP. |
Dependências
Para que tudo funcione, instale o pacote abaixo:
sudo apt-get install php-ldap -y
Instalação
Vamos instalar as extensões para ativar a autenticação LDAP.
Link das extensões, consulte antes da instalação para saber sobre compatibilidades e obter as ultimas versões disponíveis:
https://www.mediawiki.org/wiki/Extension:LDAPAuthorization
https://www.mediawiki.org/wiki/Extension:LDAPProvider
https://www.mediawiki.org/wiki/Extension:PluggableAuth
https://www.mediawiki.org/wiki/Extension:LDAPAuthentication2
## Entrando na pasta das extensões:
cd /etc/mediawiki-extensions/
## Baixando as extensões:
wget https://extdist.wmflabs.org/dist/extensions/LDAPAuthorization-REL1_31-b294fcb.tar.gz
wget https://extdist.wmflabs.org/dist/extensions/LDAPProvider-REL1_31-e7d9e7a.tar.gz
wget https://extdist.wmflabs.org/dist/extensions/PluggableAuth-REL1_31-e79a2fd.tar.gz
wget https://extdist.wmflabs.org/dist/extensions/LDAPAuthentication2-REL1_31-c3874d4.tar.gz
## Descompactando as extensões:
tar -xzf LDAPAuthorization-REL1_31-b294fcb.tar.gz -C /etc/mediawiki-extensions/
tar -xzf LDAPProvider-REL1_31-e7d9e7a.tar.gz -C /etc/mediawiki-extensions/
tar -xzf PluggableAuth-REL1_31-e79a2fd.tar.gz -C /etc/mediawiki-extensions/
tar -xzf LDAPAuthentication2-REL1_31-c3874d4.tar.gz -C /etc/mediawiki-extensions/
Configuração
Vamos configurar o arquivo que será usado para autenticar no servidor LDAP.
vim /etc/mediawiki/ldapprovider_<wiki_name>.json
#### CONTEÚDO ####
{
"DOMAIN":
{
"connection":
{
"server": "SERVER_NAME_LDAP",
"port": "636",
"enctype": "ssl",
"user": "uid=USERNAME,cn=sysaccounts,cn=etc,dc=example,dc=com,dc=te",
"pass": "SENHA",
"basedn": "dc=example,dc=com,dc=te",
"groupbasedn": "cn=groups,cn=accounts,dc=example,dc=com,dc=te",
"userbasedn": "cn=users,cn=accounts,dc=example,dc=com,dc=te",
"groupattribute": "cn",
"searchattribute": "uid",
"usernameattribute": "uid",
"realnameattribute": "cn",
"emailattribute": "mail",
"grouprequest": "MediaWiki\\Extension\\LDAPProvider\\UserGroupsRequest\\UserMemberOf::factory"
},
"authorization":
{
"rules":
{
"groups":
{
"required": [ "cn=GROUP_NAME,cn=groups,cn=accounts,dc=example,dc=com,dc=te" ]
}
}
},
"userinfo":
{
"email": "mail",
"realname": "cn",
"properties.gender": "gender"
}
}
}
###### Segue meu exemplo de COnfiguração ######
{
"example.com.te":
{
"connection":
{
"server": "freeipa.example.com.te",
"port": "636",
"enctype": "ssl",
"user": "uid=mediawikiuser,cn=sysaccounts,cn=etc,dc=example,dc=com,dc=te",
"pass": "4v4ieug4iXnDGqm81hmW",
"basedn": "dc=example,dc=com,dc=te",
"groupbasedn": "cn=groups,cn=accounts,dc=example,dc=com,dc=te",
"userbasedn": "cn=users,cn=accounts,dc=example,dc=com,dc=te",
"groupobjectclass": "memberof",
"groupattribute": "cn",
"searchattribute": "uid",
"usernameattribute": "uid",
"realnameattribute": "cn",
"emailattribute": "mail",
"grouprequest": "MediaWiki\\Extension\\LDAPProvider\\UserGroupsRequest\\UserMemberOf::factory"
},
"authorization":
{
"rules":
{
"groups":
{
"required": [ "cn=mediawiki,cn=groups,cn=accounts,dc=example,dc=com,dc=te" ]
}
}
},
"userinfo":
{
"email": "mail",
"realname": "cn",
"properties.gender": "gender"
}
}
}
Agora acessse o LocalSettings
da sua wiki e adicione as informações abaixo:
## Autenticação LDAP:
$wgExtensionDirectory = '/etc/mediawiki-extensions/';
wfLoadExtension( 'LDAPAuthorization' );
wfLoadExtension( 'LDAPProvider' );
wfLoadExtension( 'PluggableAuth' );
wfLoadExtension( 'LDAPAuthentication2' );
$LDAPProviderDomainConfigs = "/etc/mediawiki/ldapprovider_<wiki_name>.json" ;
## Opções para debug:
#error_reporting( -1 );
#ini_set( 'display_errors', 1 );
#$wgShowExceptionDetails = true;
#$wgShowDBErrorBacktrace = true;
Atualize o banco de dados:
cd /usr/share/mediawiki
php maintenance/update.php --quick --conf /etc/mediawiki/LocalSettings_<wiki_name>.php
Ative a opção $wgGroupPermissions['user']['autocreateaccount'] = true;
e $wgGroupPermissions['*']['autocreateaccount'] = true;
para criação de uma conta automatica, dessa forma, sempre um usuário for incluído no grupo do LDAP, ele poderá fazer login e terá sua conta inseria no banco de dados automaticamente, após aplicar essa opção, faça o update
para tornar essa opção ativa, caso contrário, ficará recebendo o erro de permissão negada na criação do usuário.
Caso a opção de autocreateaccount
esteja desativada, você verá o erro Auto-creation of a local account failed: Automatic account creation is not allowed
.
Caso o usuário não esteja no grupo do LDAP, mas exista no LDAP, ao tentar logar com esse usuário, será retornado o erro User USERNAME not authorized
. Caso o usuário não exista no LDAP, será retornado o erro Could not authenticate credentials against domain "DOMAIN"
.
Certifique-se de que no seu arquivo LocalSettings.php
exista a declaração $wgGroupPermissions['*']['createaccount'] = false;
, se voce não colocar isso, usuários poderão criar uma conta usando o opção que fica disponível na página de login da Wiki.
Caso esteja tendo algum problema e precise adicionar um usuário e por algum motivo não está indo pelos métodos normais (usando ldap), você pode adicionar os usuários usando a opção abaixo (não se incomode com o erro):
cd /usr/share/mediawiki/maintenance
cfg=/etc/mediawiki/LocalSettings_<NOME>.php
user_login='USERNAME'
pass_login='SENHA'
php createAndPromote.php --conf=${cfg} ${user_login} ${pass_login}
Agora o usuário já pode fazer login usando o LDAP.
Bloqueando usuário
# Obter o ticket Kerberos:
kinit admin
# Remova o usuario do grupo da Wiki correspondente:
ipa user-disable <USERNAME>
Bloquear o usuario na propria Wiki (não é extremamente necessário, mas é uma boa prática)!
Vá no LocalSettings da Wiki e descomente a linha abaixo:
$LDAPAuthentication2AllowLocalLogin = true;
Ná página de Login mudar o 'Domínio' para 'Local' (vamos logar com o usuário Admin localmente)
Vá em 'Páginas Especiais' - > 'Bloquear Usuário(a)'
Entre com o nome do usuário e Deixe 'Expiração' como Indefinido, depois basta salvar.
Fontes
https://www.mediawiki.org/wiki/Manual:Wiki_family https://www.mediawiki.org/wiki/Manual:Installation_guide https://www.mediawiki.org/wiki/Manual:Installation_requirements https://sharkysoft.com/wiki/how_to_configure_multiple_MediaWiki_instances_on_a_single_host https://www.mediawiki.org/wiki/Manual:Upgrading/pt-br https://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Debian_or_Ubuntu https://www.mediawiki.org/wiki/Manual:$wgLogo