Skip to content

System komentarzy na blogu

Posted on:10 maja 2024 at 15:43
Reading TIme:5 min czytania

Po wielu miesiącach nieobecności włączyłem z powrotem komentowanie na blogu. Stało się to za sprawą niezależnego systemu komentarzy, na które trafiłem zupełnie przypadkowo.

Spis treści

Rozwiń

Comentario to disqus w wersji Selfhosted

Comentario to taka selfhostowy i otwartoźródłowy odpowiednik Disqusa, charakteryzujący się:

1. Instalacja

Sam system Comentario można zainstalować na różne sposoby - naturalnie wybrałem wersję docker.

Konfiguracja .env

POSTGRES_DB=
POSTGRES_USER=
POSTGRES_PASSWORD=
BASE_URL=http://localhost:8080/
SECRETS_FILE=secrets.yml

Konfiguracja docker-compose

version: "3"

services:
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    ports:
      - "5432:5432"
    volumes:
      - ./db-data:/var/lib/postgresql/data/
      - ./backups:/backups

  app:
    image: registry.gitlab.com/comentario/comentario:dev-fe1950a7
    environment:
      BASE_URL: ${BASE_URL}
      SECRETS_FILE: ${SECRETS_FILE}
    ports:
      - "8080:80"
    volumes:
      - ./secrets.yaml:/secrets.yaml:ro
    depends_on:
      - db

Taka uwaga:

Konfiguracja secrets.yml

# Almost empty secrets file for running e2e tests using PostgreSQL
postgres:
  host:
  port: 5432
  database: comentario
  username: postgres
  password:

smtpServer:
  host:
  port:
  username:
  password:

  # Encryption used for sending mails. Possible values are "none", "ssl", "tls". Optional, if not provided, will pick
  # one based on the port number (25, 465, 587)
  # encryption: TLS

  # Whether to skip SSL certificate verification. Do NOT set to true in production!
  #insecure: false

idp:
  # Each of the providers below can be disabled by setting the `disable` field to `true`
  facebook:
    disable: true
    key: facebook_key
    secret: facebook_secret
  github:
    disable: true
    key: github_key
    secret: github_secret
  gitlab:
    disable: true
    key: gitlab_key
    secret: gitlab_secret
  google:
    disable: true
    key: google_key
    secret: google_secret
  linkedin:
    # LinkedIn auth doesn't work, see https://github.com/markbates/goth/issues/519
    disable: true
    key: linkedin_key
    secret: linkedin_secret
  twitter:
    disable: true
    key: twitter_key
    secret: twitter_secret

extensions:
  # Each of the extensions will be available to domain owners unless explicitly disabled. If the API key is not
  # provided at the instance level, domain owner will need to specify their own API key for each domain
  akismet:
    #disable: true
    key:

  perspective:
    disable: true
    key:

  apiLayerSpamChecker:
    disable: true
    key:

Obsługa nginx

  server {
        listen 80;
        listen [::]:80;
        server_name c.domena.com;

        location / {
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
        proxy_pass http://localhost:8080/;
        }
  }

2. Uruchomienie i konfiguracja

Aby móc korzystać z systemu komentarzy, należy założyć konto w świeżo podstawionym panelu administratora, który jest dostępny pod adresami:

Po utworzeniu konta i zalogowaniu się kolejnym krokiem będzie dodanie domeny strony / bloga, gdzie chcemy osadzić system komentarzy.

Warto poświęcić czas konfigurację systemu dla konkretnej domeny — w szczególności kwestie rejestracji nowych kont dla komentujących, uwierzytelnienia i moderacji nowych komentarzy.

Taka ciekawostka: Comentario może działać pod wieloma domenami, zapewniając unikalne komentarze.

3. Umieszczenie komentarzy na blogu

Implementacja systemu komentarzy jest bardzo prosta, bo wystarczy

Dodatkowo w wyżej wspomnianym web-komponencie można zdefiniować odpowiednie atrybuty. Tutaj z pomocą przychodzi dokumentacja albo generator w panelu zarządzania komentarzami.

Nic prostszego.

4. Import komentarzy z Wordpressa

Comentario nie wspiera wordpresowego formatu komentarzy wprost; jedynie dogaduje sie z Disqusem oraz komentarzami zgodnymi ze standardem Commento / Commento++ w formacie .json lub .json.gz.

Na szczęście ktoś dawno temu stworzył odpowiedni konwerter, dzięki któremu byłem w stanie przywrócić wartościowe komentarze do obecnego statycznego bloga.

  1. Przejdź do witryny Wordpress i wyeksportuj swoje komentarze np https://your-wordpress-page.com/wp-admin/export.php
  2. Wybierz Posty i żądany zakres dat
  3. Przenieś pobrany plik XML do tego projektu i nadaj mu nazwę wordpress.xml
  4. Odpal polecenie yarn convert
    1. W katalogu projektu powstaną 2 nowe pliki z rozszerzeniem *.json i *.json.gz
  5. W panelu Comentario wybieramy domenę, następnie ścieżką Operation -> Import Data wybieramy opcję importu formatu zgodnego Commento / Comentario

I to tyle.

Można prościej — import Wordpress

Popełniłem małe seppuku. Początkowo sugerowałem się konfiguracją z dokumentacji i nie zauważyłem, że dockerowy obraz jest dość leciwy i okrojony z wielu funkcji, które opisane są w wyżęj wspomnianiej dokumentacji. Okazało się, że jest możliwy import k WXR czyli Wordpress eXtended RSS.

Tak czy inaczej — efekt w obu przypadkach jest taki sam.

Podsumowanie

System komentarzy wypuściłem znacznie wcześniej, ale tylko nieliczni dostrzegli jego obecność i skontaktowali się ze mną z uwagi na techniczne problemy.

Problemy

Pierwszy problem, a zarazem mój błąd to zbyt stara wersja obrazu — szybko to naprawiłem i okazało się, że tych funkcji jest dużo więcej. (tutaj pozdrawiam STFN ;-) )

Drugi problem to inicjalizacja bazy danych za każdym restartem — wystarczyło zadeklarować volume w docker-compose.yml i problem ze znikającymi danymi zniknął.

Trzeci problem to problem z dodaniem komentarzy osób - w sumie to dzięki Xpil’owi natknąłem na dość nieoczywisty / ciekawy przypadek. Backend zwracał kod 500 i w logach widniały takie wpisy:

ERROR svc         | commentService.Create: ExecuteOne() failed: pq: value too long for type character varying(15)
ERROR handlers    | Service error: services: database error

Szybko zorientowałem się, że to problem z kolumną, która odpowiada za przechowanie danych IP autora. Nie przepuszcza IPv6 z racji zbyt dużej ilości znaków. Problem został zgłoszony już wcześniej, więc kwestia czasu, kiedy autor przygotuje odpowiednią łatkę.

Alternatywy

Jeśli chodzi o taki realne alternatywy, dostępne w sieci, to wybór jest mocno ograniczony.

Jasne, nic nie stało na przeszkodzie, aby napisać własny system komentarzy, który miałby to, czego sobie zażyczę. Zrobiłbym to, gdyby nie to, ze u Stefana zauważyłem dość prosty zewnętrzny system Commento++, który można hostować u siebie.

Mocno przypominał Giscusa, opartego na Github Discussions - to sprawiło, iż niestety szybko odrzuciłem.

Po kilku dniach testowania Commento++ i nieudolnych próbach importowania komentarzy wodpress, odpuścilem ten projekt. Spojrzałem do repozytorium, od dłuższego czasu nie było aktualizacji (od kwietnia 2022 roku), co tylko potwierdziło moją decyzję. W ten sposób trafiłem na Comentario.

Podziękowania

Dziękuję Stefanowi za inspirację z systemem komentarzy, Xpilowi za zgłoszenie problemu z dodawaniem komentarzy, aktywny udział w debugowaniu problemu (dotyczący z IPv6).

Wszelkie uwagi / problemy - dajcie znać :)



Możesz napisać do mnie e-mail lub wyszukać mnie na Mastodonie.
Loading...