WikiJS

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

Sobre

Olá! Visitante, reunimos aqui informações sobre a instalação do Wiki.js, uma plataforma de gerenciamento de conhecimento de código aberto, que permite criar, editar e organizar conteúdo em uma interface web.

Sites Oficiais: https://wiki.js.org/

Vídeo

https://youtu.be/EXEMPLO_VIDEO

Script Projeto Root

Para facilitar deixamos um script para fazer todo o processo de forma automatizada, assim agilizando o processo de instalação, caso queira utilizar veja:

https://github.com/projetoroot/wikijs

wget https://raw.githubusercontent.com/projetoroot/wikijs/refs/heads/main/install-wikijs.sh
bash install-wikijs.sh


Caso queira instalar manualmente veja abaixo os procedimentos

Aviso Importante

O processo de instalação remove completamente qualquer instalação anterior do Wiki.js, incluindo:

Banco de dados 'wikijs'
Usuário 'wikijsuser' do PostgreSQL
Pasta /opt/wikijs

Tenha total certeza que deseja prosseguir antes de continuar.

Preparação do Servidor

Sistema suportado: Debian 13

Atualizar o sistema:

sudo apt update && sudo apt upgrade -y

Instalar dependências essenciais:

sudo apt install curl wget gnupg2 unzip nano nginx postgresql postgresql-contrib -y

Remoção de versão Anterior

sudo -u postgres psql -tc "SELECT 1 FROM pg_database WHERE datname='wikijs'" | grep -q 1 && \
sudo -u postgres psql -c "DROP DATABASE wikijs;"
if sudo -u postgres psql -tc "SELECT 1 FROM pg_roles WHERE rolname='wikijsuser'" | grep -q 1; then
sudo -u postgres psql -c "REASSIGN OWNED BY wikijsuser TO postgres;"
sudo -u postgres psql -c "DROP OWNED BY wikijsuser;"
sudo -u postgres psql -c "DROP ROLE wikijsuser;"
fi
sudo rm -rf /opt/wikijs

Criação do Banco de Dados

Criar banco de dados e usuário do Wiki.js:(Mude 'SENHA_DO_BANCO' para uma senha segura!)

sudo -u postgres psql
CREATE DATABASE wikijs;
CREATE USER wikijsuser WITH PASSWORD 'SENHA_DO_BANCO';
ALTER ROLE wikijsuser SET client_encoding TO 'utf8';
ALTER ROLE wikijsuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE wikijsuser SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE wikijs TO wikijsuser;
\c wikijs;
GRANT ALL PRIVILEGES ON SCHEMA public TO wikijsuser;
ALTER SCHEMA public OWNER TO wikijsuser;
\q

Instalação do Node.js

Instalar Node.js 22:

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs

Verificar versão instalada:

node -v
npm -v

Download e Configuração do Wiki.js

Criar pasta de instalação:

sudo mkdir -p /opt/wikijs

Baixar última versão do Wiki.js e descompactar:

cd /opt/wikijs
LATEST=$(curl -s https://api.github.com/repos/Requarks/wiki/releases/latest | grep "tag_name" | cut -d '"' -f4)
wget "https://github.com/Requarks/wiki/releases/download/${LATEST}/wiki-js.tar.gz"
tar xzf wiki-js.tar.gz
rm wiki-js.tar.gz

Configuração do config.yml

Criar arquivo de configuração config.yml com os parâmetros do banco:

  • Backup do arquivo padrão de configuração do config.yml
cp /opt/wikijs/config.sample.yml /opt/wikijs/config.yml.bkp 

  • Faça um novo igual o trecho abaixo (Mude a SENHA_DO_BANCO para senha informada na criação do banco)
nano /opt/wikijs/config.yml
port: 3000
bindIP: 0.0.0.0
logLevel: info
 
db:
  type: postgres
  host: localhost
  port: 5432
  user: wikijsuser
  pass: SENHA_DO_BANCO
  db: wikijs
  ssl: false

pool:
 min: 2
 max: 10

path:
 data: ./data

uploads:
 maxFileSize: 50mb

sessionSecret: 'wikijs-secret-key'

analytics:
 enabled: false

auth:
 local:
   enabled: true


Ajustar permissões:

chmod 640 config.yml
sudo chown -R www-data:www-data /opt/wikijs

Serviço systemd

Criar arquivo de serviço systemd /etc/systemd/system/wikijs.service com os parâmetros necessários.

nano /etc/systemd/system/wikijs.service

[Unit]
Description=Wiki.js
After=network.target postgresql.service

[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/wikijs
ExecStart=/usr/bin/node server
Restart=always
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target


Comandos principais:

sudo systemctl daemon-reload
sudo systemctl enable wikijs
sudo systemctl start wikijs
sudo systemctl status wikijs

Configuração do Nginx

Criar configuração de proxy reverso /etc/nginx/sites-available/wikijs.conf:

nano /etc/nginx/sites-available/wikijs.conf
server {
listen 80;
server_name SEU_DOMINIO;

location / {  
    proxy_pass http://localhost:3000/;  
    proxy_http_version 1.1;  
    proxy_set_header Upgrade $http_upgrade;  
    proxy_set_header Connection 'upgrade';  
    proxy_set_header Host $host;  
    proxy_set_header X-Real-IP $remote_addr;  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    proxy_set_header X-Forwarded-Proto $scheme;
    client_max_body_size 100M;  
}  


}

Ativar configuração e reiniciar Nginx:

sudo ln -sf /etc/nginx/sites-available/wikijs.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

HTTPS com Certbot (Opcional)

Instalar Certbot:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d SEU_DOMINIO

Finalização

Acesse no navegador:

http://SEU_DOMINIO ou http://IP_DO_SERVIDOR:3000

Complete a configuração inicial via interface web.


Remover opções do Shrare

Caso seja necessário remover o compartilhamento de redes sociais das páginas da wikiJS, é necessário inserir (injetar) um código/script na página de administração, para isso faça:

Antes:
Antes
Depois:
Depois


 Administração
 Tema (theme)
 Injeção de HTML no Head

Cole o trecho abaixo e salve

`<script>
(function waitForBodyThenObserve() {
if (!document.body) {
return setTimeout(waitForBodyThenObserve, 50);
}

const labelsToHide = new Set([
"Facebook",
"LinkedIn",
"Reddit",
"Telegram",
"Twitter",
"Viber",
"Weibo",
"Whatsapp",
// Add more labels as needed
]);

const hideMenuItems = () => {
let found = false;
document.querySelectorAll('.v-list-item').forEach(item => {
const label = item.querySelector('.v-list-item__title')?.textContent?.trim();
if (labelsToHide.has(label)) {
item.style.display = 'none';
found = true;
}
});
return found;
};

const observer = new MutationObserver(() => {
if (hideMenuItems()) {
observer.disconnect(); // One and done
}
});

observer.observe(document.body, {
childList: true,
subtree: true,
});
})();
</script>
`