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
Comentario to disqus w wersji Selfhosted
Comentario ↗ to taka selfhostowy i otwartoźródłowy odpowiednik Disqusa, charakteryzujący się:
- mały rozmiar assetów;
- szanujący prywatność komentujących (brak żadnych pikseli śledzących);
- rozbudowane funkcje
- obsługa zagnieżdżonych komentarzy
- głosowanie komentarzy
- wsparcie składni Markdown
- logowanie za pomocą Google / X / Github / Gitlab
- integracje z zewnętrznymi usługami do wykrywania spamów (askimet / perspective).
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:
- powyższa konfiguracja “instaluje” obraz
Comentario
w wersji rozwojowej (czyli najnowsza wersja commita, jaka wylądowała w masterze) - Twórca udostępnia w repo informacje ↗ o dostępnych obrazach dockerowych
- Aktualna wersja stabilna, zogdnie z release’ami ↗, to v 3.7.0
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:
http://localhost:8080/
https://c.domena.com
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
- dodać skrypt od
comentario.js
- dodać webcomponent
<comentaro-comments></comentario-comments>
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.
- Przejdź do witryny Wordpress i wyeksportuj swoje komentarze np
https://your-wordpress-page.com/wp-admin/export.php
- Wybierz Posty i żądany zakres dat
- Przenieś pobrany plik XML do tego projektu i nadaj mu nazwę wordpress.xml
- Odpal polecenie
yarn convert
- W katalogu projektu powstaną 2 nowe pliki z rozszerzeniem
*.json
i*.json.gz
- W katalogu projektu powstaną 2 nowe pliki z rozszerzeniem
- W panelu Comentario wybieramy domenę, następnie ścieżką
Operation -> Import Data
wybieramy opcję importu formatu zgodnegoCommento / 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ć :)