NodeBB - uma solução para comentários

Meu amigo Antonio Ladeia hoje comentou via twitter que meu blog poderia ter/habilitar comentários:

Cofesso que este é um assunto que eu estava adiando…

Desde que comecei esta história de blog há 12 anos sempre permiti comentários nos posts, acho uma coisa bacana, cria uma conexão, é útil, permite que pessoas te corrigam ou complementem as informações de uma postagem com outros pontos de vista e experiências.

Tem o outro lado também, abre as portas para spammers, trolls e gente viciada em palpitar que não contribui muito para discussões ricas.

Neste aspecto, gosto muito da idéia de Pingback, pois é um grande filtro que promove e incentiva a autonomia das pessoas, a web distribuida, descentralizada e bem linkada. Se alguém quer muito participar de um assunto, ela escreve sobre o tema em seu próprio site e te linka (e você fica sabendo, e pode responder com novas postagens e assim por diante). Seria a solução mais bonita e ideal, mas o sistema de blog que eu uso (Ghost) ainda não traz suporte a esta tecnologia por padrão, nem sei da existencia de uma app ou plugin para adicionar esta funcionalidade.

O Ghost também não suporta comentários, e a solução mais popular entre os que usam este sistema, tem sido a adoção de algum sistema de comentários/anotações providos por terceiros, como o Discuss, Muut, Facebook Comments, Intense Debate.

Sistemas de comentários hospedados por terceiros possuem no entanto uma grande desvantagem: são hospedados por terceiros. Ou seja, você não tem controle algum sobre o código do sistema e nem sobre o futuro do conteúdo.

Se um sistema de comentários terceirizado morre amanhã, o passado do seu site vai junto, se decidem passar a cobrar pelo serviço, se decidem colocar anúncios, se decidem vender os dados dos seus leitores, se o código de embed trouxer furos de segurança, se não permitirem backup ou exportação dos dados ou migração, etc… você está basicamente na zorba.

Existem mil outros motivos, benefícios e razões para usá-los também, é uma balança, você ganha backups automáticos, instalação fácil, controle de spam, controle de contas e autenticação, algoritimos de ordenação por popularidade/relevancia, interfaces bonitas/modernas e sempre atualizadas, pode focar no principal (os textos seus), etc…

Eu particularmente ando numa fase da minha vida em que prefiro hospedar eu mesmo e ter controle sobre o código das aplicações que rodam no meu site, portanto um sistema de comentários terceirizado, neste momento não é uma opção.

Opções self-hosted

Como disse, o ideal seria não habilitar comentários e pedir que todos usassem o sistema de pingbacks. Mas como eu mesmo ainda não tenho condições de participar da blogosfera como um cidadão que faz a lição de casa e que suporta pingbacks, e como não vivemos num mundo ideal, onde pedir dos meus leitores para que cada um tenha seu site próprio e que as discussões sejam inter-blogs é pedir muito, um passo intermediário de implementar uma "caixa de comentários" no estilo mais prático e tradicional vai ser o que temos para hoje.

Para quem busca habilitar comentários e anotações em um blog Ghost, há uma série de opções disponíveis, as 3 que me mais me agradam são:

A primeira é realmente bacana, permite anotações e comentários rápidos em trechos específicos de um texto, gosto muito, é simples e talvez eu adicione aqui também! Acho que há espaço para anotações contextuais pequenas conviverem lado a lado com discussões longas e elaboradas incitadas pelo post inicial.

As duas outras soluções são mais na linha do que eu imagino ser bom e participativo, são sistemas de fórum de discussões completos, capazes de garantir espaço e interfaces para threads longas, algo que vai além daquele ambiente claustrofóbico que hoje temos em discussões de facebook por exemplo.

O Discourse é um puta sistema de fóruns lindo, moderno e open source. Só que é moderno demais para a minha preguiça neste momento, tem como requisitos mínimos um servidor com 2GB de memória, Ruby on Rails, Postgres, Redis, Docker… enfim, quero muito fazer uma instalação do Discourse em máquinas minhas pois é o futuro, e seria o objetivo a longo prazo se a minha experiencia de criar um fórum para acompanhar blog posts for boa. Boa o suficiente para pagar um host mais caro que o meu atual :P

O NodeBB é um sistema de fórums mais simples, leve e escrito em Javascript, é tipo um phpbb da vida e possui também a funcionalidade de embutir threads do fórum como caixa de comentários em um post. É a solução que vou usar neste momento.

Instalação do NodeBB

Seguindo as instruções de instalação para ubuntu da documentação.

Checar em https://github.com/NodeBB/NodeBB/releases a versao da última release (substituir abaixo onde está MAJOR.MINOR.PATCH).

$ sudo apt-get install git nodejs nodejs-legacy npm redis-server imagemagick build-essential
$ cd /var/www
$ git clone -b vMAJOR.MINOR.PATCH https://github.com/NodeBB/NodeBB.git nodebb
$ cd nodebb
$ npm install
$ ./nodebb setup

Criar uma configuracao nova no nginx:

$ cp /etc/nginx/sites-available/ghost /etc/nginx/sites-available/nodebb
$ nano /etc/nginx/sites-available/nodebb

Muda server_name para forum.fabricio.org e proxy_pass para http://localhost:PORTA;, o arquivo deve se parecer com isto ao final:

server {  
    listen 80;

    server_name forum.fabricio.org;

    location / {
        proxy_pass http://localhost:4567;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Então:

$ ln -s /etc/nginx/sites-available/nodebb /etc/nginx/sites-enabled/nodebb
$ service nginx restart
$ ./nodebb start

Testa se está funcionando no navegador… depois configura o upstart service do ubuntu:

$ ./nodebb stop
$ cp /etc/init/ghost.conf /etc/init/nodebb.conf
$ nano /etc/init/nodebb.conf

Algo parecido com isso:

description "NodeBB forum"

start on (local-filesystems and net-device-up IFACE=eth0)  
stop on runlevel [!12345]

# If the process quits unexpectadly trigger a respawn
respawn

env NODE_ENV=production  
chdir /var/www/nodebb  
exec /usr/local/bin/node app.js  

Instalação do plugin NodeBB Blog Comments

Seguindo as instruções de https://community.nodebb.org/topic/810/nodebb-plugin-blog-comments-blog-commenting-engine-ghost-wordpress-widget

$ npm install nodebb-plugin-blog-comments

Acessar no browser: /admin/extend/plugins e ativar o plugin, depois /admin/general/dashboard e clique no botão amarelo de Reload, depois em /admin/blog-comments para colocar o ID da categoria que você criou para comentários do blog.

Monkey-patch o arquivo de embed

$ nano ../nodebb/node_modules/nodebb-plugin-blog-comments/public/lib/embed.js

Mais ou menos assim:

Então edite o template dos posts do blog:

$ cd /var/www/ghost
$ nano content/themes/casper/post.hbs

Insira em algum lugar no footer este código:

<section>  
<a id="nodebb/comments"></a>  
<script type="text/javascript">  
var nodeBBURL = 'http://forum.fabricio.org',  
    articleID = '{{id}}';

(function() {
var nbb = document.createElement('script'); nbb.type = 'text/javascript'; nbb.async = true;  
nbb.src = nodeBBURL + '/plugins/nodebb-plugin-blog-comments/lib/embed.js';  
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(nbb);
})();
</script>  
<noscript>Please enable JavaScript to view comments</noscript>  
</section>  

E reinicie o Ghost:

$ service ghost restart

Ai, certifique-se que está logado tanto no ghost quanto no nodeBB e para cada post você terá que clicar uma vez em um botão verde para que o script crie o post correspondente no fórum. É um procedimento bem bugado e a aplicação do nodeBB vai crashar frequentemente (este plugin de comentários pro nodeBB parece ser bem precário e malfeito, mas isto ja deu para perceber pelo fato de termos que dar um patch na parada), mas como o serviço nodebb foi configurado no upstart do ubuntu com a opção de respawn, ela se relança a cada crash.

Habemus comments!

A partir deste ponto nossa caixa de comentários deve estar funcional. Oba!!

Fiquem a vontade para deixar contribuições pertinentes ao fim de cada post agora, este espaço é nosso :)

Preciso ainda configurar umas coisinhas, como o sendmail para avisar quando um topico que você acompanha teve atualizações… se fizer avisarei aqui.

Fabricio Campos Zuardi

Read more posts by this author.

Subscribe to Egoísmo duplicado

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!
Cofesso que este é um assunto que eu estava adiando… Desde que [comecei esta história de blog][firstpost] há 12 anos sempre permiti comentários nos posts, acho uma coisa bacana, cria uma conexão, é útil, permite que pessoas te corrigam ou complementem as informações de uma postagem com outros pontos de vista e experiências. Tem o outro lado também, abre as portas para spammers, trolls e gente viciada em palpitar que não contribui muito para discussões ricas. Neste aspecto, gosto muito da idéia de [Pingback][pingback], pois é um grande filtro que promove e incentiva a autonomia das pessoas, a web distribuida, descentralizada e bem linkada. Se alguém quer muito participar de um assunto, ela escreve sobre o tema em seu próprio site e te linka (e você fica sabendo, e pode responder com novas postagens e assim por diante). Seria a solução mais bonita e ideal, mas o sistema de blog que eu uso ([Ghost][ghost]) ainda não traz suporte a esta tecnologia por padrão, nem sei da existencia de uma app ou plugin para adicionar esta funcionalidade. O Ghost também não suporta comentários, e a solução mais popular entre os que usam este sistema, tem sido a adoção de algum sistema de comentários/anotações providos por terceiros, como o [Discuss][discuss], [Muut][muut], [Facebook Comments][fbcomments], [Intense Debate][intensedebate]. Sistemas de comentários hospedados por terceiros possuem no entanto uma grande desvantagem: são hospedados por terceiros. Ou seja, você não tem controle algum sobre o código do sistema e nem sobre o futuro do conteúdo. Se um sistema de comentários terceirizado morre amanhã, o passado do seu site vai junto, se decidem passar a cobrar pelo serviço, se decidem colocar anúncios, se decidem vender os dados dos seus leitores, se o código de embed trouxer furos de segurança, se não permitirem backup ou exportação dos dados ou migração, etc… você está basicamente na zorba. Existem mil outros motivos, benefícios e razões para usá-los também, é uma balança, você ganha backups automáticos, instalação fácil, controle de spam, controle de contas e autenticação, algoritimos de ordenação por popularidade/relevancia, interfaces bonitas/modernas e sempre atualizadas, pode focar no principal (os textos seus), etc… Eu particularmente ando numa fase da minha vida em que prefiro hospedar eu mesmo e ter controle sobre o código das aplicações que rodam no meu site, portanto um sistema de comentários terceirizado, neste momento não é uma opção. ### Opções self-hosted Como disse, o ideal seria não habilitar comentários e pedir que todos usassem o sistema de pingbacks. Mas como **eu mesmo ainda não tenho condições** de participar da blogosfera como um cidadão que faz a lição de casa e que suporta pingbacks, e como não vivemos num mundo ideal, onde pedir dos meus leitores para que cada um tenha seu site próprio e que as discussões sejam inter-blogs **é pedir muito**, um passo intermediário de implementar uma "caixa de comentários" no estilo mais prático e tradicional vai ser o que temos para hoje. Para quem busca habilitar comentários e anotações em um blog Ghost, há uma série de opções disponíveis, as 3 que me mais me agradam são: - [Annotator][annotator] - [Discourse][discourseembed] - [NodeBB][nodebb] A [primeira][annotator] é realmente bacana, permite anotações e comentários rápidos em trechos específicos de um texto, gosto muito, é simples e talvez eu adicione aqui também! Acho que há espaço para anotações contextuais pequenas conviverem lado a lado com discussões longas e elaboradas incitadas pelo post inicial. As duas outras soluções são mais na linha do que eu imagino ser bom e participativo, são sistemas de fórum de discussões completos, capazes de garantir espaço e interfaces para threads longas, algo que vai além daquele ambiente claustrofóbico que hoje temos em discussões de facebook por exemplo. O [Discourse][discourse] é um puta sistema de fóruns lindo, moderno e open source. Só que é moderno demais para a minha preguiça neste momento, tem como requisitos mínimos um servidor com **2GB de memória**, Ruby on Rails, Postgres, Redis, Docker… enfim, quero muito fazer uma instalação do Discourse em máquinas minhas pois **é o futuro**, e seria o objetivo a longo prazo se a minha experiencia de criar um fórum para acompanhar blog posts for boa. Boa o suficiente para pagar um host mais caro que o meu atual :P O [NodeBB][nodebb] é um sistema de fórums mais simples, leve e escrito em [Javascript][node], é tipo um phpbb da vida e possui também a funcionalidade de [embutir threads do fórum como caixa de comentários em um post][nodebbembed]. É a solução que vou usar neste momento. ### Instalação do NodeBB Seguindo as instruções de [instalação para ubuntu][nodebbinstall] da documentação. Checar em https://github.com/NodeBB/NodeBB/releases a versao da última release (substituir abaixo onde está MAJOR.MINOR.PATCH). $ sudo apt-get install git nodejs nodejs-legacy npm redis-server imagemagick build-essential $ cd /var/www $ git clone -b vMAJOR.MINOR.PATCH https://github.com/NodeBB/NodeBB.git nodebb $ cd nodebb $ npm install $ ./nodebb setup Criar uma configuracao nova no nginx: $ cp /etc/nginx/sites-available/ghost /etc/nginx/sites-available/nodebb $ nano /etc/nginx/sites-available/nodebb Muda ```server_name``` para ```forum.fabricio.org``` e ```proxy_pass``` para ```http://localhost:PORTA;```, o arquivo deve se parecer com isto ao final: ``` server { listen 80; server_name forum.fabricio.org; location / { proxy_pass http://localhost:4567; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } ``` Então: $ ln -s /etc/nginx/sites-available/nodebb /etc/nginx/sites-enabled/nodebb $ service nginx restart $ ./nodebb start Testa se está funcionando no navegador… depois configura o upstart service do ubuntu: $ ./nodebb stop $ cp /etc/init/ghost.conf /etc/init/nodebb.conf $ nano /etc/init/nodebb.conf Algo parecido com isso: ``` description "NodeBB forum" start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel [!12345] # If the process quits unexpectadly trigger a respawn respawn env NODE_ENV=production chdir /var/www/nodebb exec /usr/local/bin/node app.js ``` ### Instalação do plugin NodeBB Blog Comments Seguindo as instruções de https://community.nodebb.org/topic/810/nodebb-plugin-blog-comments-blog-commenting-engine-ghost-wordpress-widget $ npm install nodebb-plugin-blog-comments Acessar no browser: ```/admin/extend/plugins``` e ativar o plugin, depois ```/admin/general/dashboard``` e clique no botão amarelo de Reload, depois em ```/admin/blog-comments``` para colocar o ID da categoria que você criou para comentários do blog. Monkey-patch o arquivo de embed $ nano ../nodebb/node_modules/nodebb-plugin-blog-comments/public/lib/embed.js Mais ou menos assim: Então edite o template dos posts do blog: $ cd /var/www/ghost $ nano content/themes/casper/post.hbs Insira em algum lugar no footer este código: ```html
``` E reinicie o Ghost: $ service ghost restart Ai, certifique-se que está logado tanto no ghost quanto no nodeBB e para cada post você terá que clicar uma vez em um botão verde para que o script crie o post correspondente no fórum. É um procedimento bem bugado e a aplicação do nodeBB vai crashar frequentemente (este plugin de comentários pro nodeBB parece ser bem precário e malfeito, mas isto ja deu para perceber pelo fato de termos que dar um patch na parada), mas como o serviço nodebb foi configurado no upstart do ubuntu com a opção de respawn, ela se relança a cada crash. ### Habemus comments! A partir deste ponto nossa caixa de comentários deve estar funcional. Oba!! Fiquem a vontade para deixar contribuições pertinentes ao fim de cada post agora, este espaço é nosso :) Preciso ainda configurar umas coisinhas, como o sendmail para avisar quando um topico que você acompanha teve atualizações… se fizer avisarei aqui. [annotator]: http://annotatorjs.org/ [discuss]: https://disqus.com/ [discourse]: http://www.discourse.org/ [discourseembed]: http://eviltrout.com/2014/01/22/embedding-discourse.html [fbcomments]: https://developers.facebook.com/docs/plugins/comments [firstpost]: http://idomyownstunts.blogspot.com.br/2003/01/ok-ladies-and-gentlemen-aqui-comeca.html [ghost]: https://ghost.org/ [intensedebate]: http://intensedebate.com/ [muut]: https://muut.com/ [node]: http://nodejs.org [nodebb]: https://github.com/NodeBB/NodeBB [nodebbembed]: https://community.nodebb.org/topic/810/nodebb-plugin-blog-comments-blog-commenting-engine-ghost-wordpress-widget [nodebbinstall]: https://docs.nodebb.org/en/latest/installing/os/ubuntu.html [pingback]: http://www.hixie.ch/specs/pingback/pingback [tecnowancer]: https://twitter.com/tecnowancer