Nasadenie systému komentárov Isso pod Nginx s Dockerom
Postupujte podľa tohto prístupu Docker Compose a uľahčite nasadenie Isso na server na základe oficiálneho súboru Docker od vývojárov.
Isso je open source softvér na komentovanie, ktorý môže slúžiť ako skvelá alternatíva k proprietárnemu Disqus.
Môžete ho použiť na pridanie systému komentárov na váš blog alebo webovú stránku.
Funguje s WordPress, Ghost a mnohými ďalšími rámcami vďaka vloženiu JavaScriptu. Tu som použil Ghost ako názorný príklad.
Inštalácia Isso s Dockerom s hybridnou kontajnerizáciou
Tento dokument sa zameriava na nasadenie Isso pod kontajnerom Nginx so základnými informáciami a využíva zjednodušený prístup prijatím spôsobu Docker Compose. Konfigurácia používa obrázok vygenerovaný vytvorením oficiálneho súboru Dockerfile, ktorý vývojári poskytli na GitHub.
Oficiálna príručka uvádza používanie Nginx, ktoré je založené na inštalácii na strane hostiteľa. Tu, ako vždy, som použil konfiguráciu Nginx založenú na Docker.
Oficiálna dokumentácia poskytuje základný jednoriadkový príklad pre Docker. To však musí byť dôkladne prepracované, ak sa uvažuje o použití vo výrobe.
Preto som prispôsobil verziu Docker Compose na základe rovnakého príkladu a vlastného nastavenia Isso založeného na Docker Compose. Ten sa už neudržiava, ale je stále užitočným odkazom.
Pomocou tejto príručky môžete znova zostaviť svoj súbor Dockerfile a vytvoriť nový obrázok vždy, keď bude vydaná aktualizácia pre Isso.
Predpoklady
Nie je to povinné, ale návod bude pre vás oveľa jednoduchšie sledovať, ak máte:
Niektoré znalosti Dockera
Pochopenie Docker Compose
Isso budete nasadzovať za kontajnerom reverzného proxy so subdoménou povolenou SSL.
Okrem vyššie uvedených aktuálnych znalostí budete potrebovať nasledujúce požiadavky na infraštruktúru:
-
Verejný server Ubuntu Linux. Môžete použiť poskytovateľa cloudových služieb, ako je Linode. Pre toto nasadenie bude postačovať Nano server s 1 GB RAM.
Prístup k doméne a jej nastaveniam DNS
Docker a Docker Compose nainštalované na vašom serveri Linux.
Reverzný proxy server Nginx je už nastavený (súbor Docker Compose je súčasťou tohto návodu)
Ak potrebujete pomoc, môžete postupovať podľa našich sprievodcov na:
Inštalácia Docker na Ubuntu
Inštalácia Docker Compose na Ubuntu
Reverzné nastavenie dokovacieho servera proxy
Budem používať isso.domain.com ako príklad pre blog Ghost dostupný na domain.com. Podľa potreby ich vhodne zmeňte. Na Docker Compose používam nasledujúcu konfiguráciu Nginx:
version: '3.7'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./html:/usr/share/nginx/html
- ./dhparam:/etc/nginx/dhparam
- ./vhost:/etc/nginx/vhost.d
- ./certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
- ./www.domain.com:/etc/nginx/vhost.d/www.domain.com
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
restart: always
networks:
- net
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt-proxy-companion
environment:
DEFAULT_EMAIL: "[email "
depends_on:
- nginx-proxy
volumes:
- ./certs:/etc/nginx/certs:rw
- ./vhost:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: always
networks:
- net
networks:
net:
external: true
Vytvorte externú sieť pomocou docker create network net a nasaďte ju pomocou docker-compose up -d z príslušného adresára. Úplné podrobnosti nájdete vo vyššie uvedenom článku Nginx Docker.
Krok 1: Zmeňte nastavenia DNS
Na ovládacom paneli poskytovateľa DNS sa uistite, že záznamy A/AAAA vašej domény smerujú na IP adresu vášho servera Linux.
Povedzme, že chcete hostiť Isso na isso.domain.com pre svoj blog Ghost hostený na doméne.com, mali by ste pridať nasledujúci záznam A, ktorý nahradí xxx.xxx.xxx.xxx IP adresou vášho servera.
- A Record
isso
Krok 2: Stiahnite si Isso
Predtým, ako pripravíte komponovaný súbor pre kontajner Nginx, musíte si stiahnuť Isso s Git.
Prevezmime ho na /opt/isso.
Na stiahnutie Isso použite git a vložte ho do adresára /opt:
sudo git clone https://github.com/posativ/isso /opt/isso
Teraz prejdite do tohto adresára:
cd /opt/isso
Teraz ste pripravení vytvoriť oficiálny súbor Dockerfile na vygenerovanie potrebného obrazu Isso prostredníctvom Docker Compose:
Krok 3: Upravte konfiguračné hodnoty
Pred vytvorením obrazu je lepšie nastaviť konfiguračný súbor s minimálnymi potrebnými parametrami pre produkčné použitie.
sudo nano isso.cfg
Nastavenia po častiach pre konfiguračný súbor:
Sekcia [všeobecné]:
Pomocou
dbpathnastavte cestu k databáze tak, ako ju vidíte zvnútra kontajnera, ktorý sa má nasadiť.Nastavte názov domény pre parameter
hostiteľ, čo by bol váš blog alebo webová lokalita, do ktorej chcete vložiť pole komentára Isso do blogových príspevkov. Upozorňujeme, že ak pre svoj blog používate presmerovanie bez www na www, nastavtewww.domain.comako hostiteľa namiestodomain.com, pretože to je koncový bod, kde by komentáre v konečnom dôsledku zverejnené.Pomocou
max-agemôžete nastaviť časový rozsah, ktorý umožňuje používateľom upravovať alebo odstraňovať vlastné komentáre do 15 minút (predvolené).Používam
smtpako spôsob upozornenia (prostredníctvom e-mailu), keď budú na blogu zverejnené nové komentáre.
Sekcia [moderovanie]:
Nastavte túto hodnotu na "true", aby ste povolili moderovanie všetkých komentárov uverejnených na vašej webovej lokalite.
Sekcia [stráž]:
Nastavte túto hodnotu na "true", aby ste povolili základnú ochranu proti spamu pre všetky uverejnené komentáre.
Sekcia [server]:
Pomocou
počúvaťurčíte server, na ktorom chcete počúvať. Isso podporuje TCP/IP aj unixové doménové sokety.
Sekcia [smtp]:
Snáď najdôležitejšou časťou je, že tu nastavíte základné poverenia na základe vášho poskytovateľa služieb SMTP. Pri tomto nastavení vždy, keď návštevník uverejní nový komentár, dostanete e-mailové upozornenie s názvom „Pridaný nový komentár“. To vám umožní dostávať upozornenia na nové komentáre a jednoducho ich moderovať priamo z vašej poštovej schránky. Parametre pre SendGrid sú:
usernameje doslovaapikeyako hodnota (spoločná pre všetkých používateľov SendGrid).hesloje váš jedinečný kľúč API špecifický pre vaše ID kľúča API.hostiteľby bolsmtp.sendgrid.netportby mal byť587komuje vaša e-mailová adresa, na ktorú chcete dostávať upozornenia na nové komentáre.odje meno a adresa, ktoré by ste videli v doručenej pošte. Aby to bolo jednoduchšie, nastavil som meno odosielateľa ako „Nový komentátor“ s e-mailovou adresou[e-mail chránený].
Ak nepoužívate SendGrid, ale niektorého iného poskytovateľa služieb SMTP, metriky používateľského mena, hesla, hostiteľa a portu by sa museli zodpovedajúcim spôsobom zmeniť na základe ich zodpovedajúcich hodnôt.
Aby som to zhrnul, tu je úplný konfiguračný súbor, ktorý vám pomôže začať:
[general]
dbpath = /db/comments.db
host = https://domain.com/
max-age = 15m
notify = smtp
[moderation]
enabled = true
[guard]
enabled = true
[server]
listen = http://0.0.0.0:8080/
[smtp]
username = apikey
password = replace-me-with-sendgrid-apikey
host = smtp.sendgrid.net
port = 587
to = [email
from = New Commenter <[email >
Krok 4: Vytvorte obraz Isso Docker na základe oficiálneho súboru Dockerfile
Keďže ste si už stiahli Isso z jeho úložiska GitHub na /opt/isso, súbor Dockerfile už existuje.
Poďme teda vytvoriť obrázok a pomenovať ho isso:0.12.2:
docker build . -t isso:0.12.2
Tento obrázok by sa vytvoril lokálne so značkou 0.12.2. Je čas ho použiť v Docker Compose:
version: '3.7'
services:
isso:
image: isso:0.12.2
restart: on-failure
volumes:
- ./:/config
- ./:/db
environment:
- UID=4242
- GID=4242
- VIRTUAL_HOST=isso.domain.com
- LETSENCRYPT_HOST=isso.domain.com
networks:
- net
networks:
net:
external: true
Najprv nastavíte názov obrázka a použijete zásadu reštartovania pri zlyhaní. Na základe toho, ako sú zväzky pripojené, ako to uviedli vývojári, adresáre /config a /db budú vyzerať tak, ako sú zobrazené v kontajneri Isso. Hodnoty UID a GID 4242 sa používajú na spustenie kontajnera ako neprivilegovaného používateľa.
VIRTUAL_HOST sa používa na sprístupnenie súboru Isso JS online na vloženie na vaše stránky a LETSENCRYPT_HOST mu poskytuje bezplatný certifikát SSL pre prístup HTTPS. Naše kontajnery Nginx používajú sieť s názvom net. Preto by aj táto konfigurácia mala používať rovnakú sieť.
Teraz ste pripravení nasadiť Isso s Dockerom!
Krok 5: Nasaďte súbor Docker Compose
Teraz je potrebné mať na pamäti tieto kľúčové body:
Tento kontajner musí zdieľať rovnakú sieť ako Isso, aby mohli navzájom komunikovať. Keďže Isso bude používať sieť
neta váš kontajner reverzného proxy servera bude používať to isté. Ak máte nakonfigurovanú inú sieť, uistite sa, že ju používate.Mali by ste nastaviť politiku reštartu „pri zlyhaní“.
Trvalé údaje musíte chrániť pomocou zväzkov (na strane hostiteľa pod
/opt/isso), ktoré sú pripojené na príslušné miesta v kontajneri.
Kontajnery potrebujú, aby sa premenné prostredia nastavili mimo súboru docker-compose. Toto sú dôležité hodnoty, ktoré sa čítajú zo strany hostiteľa, a preto je Isso dobrým príkladom nastavenia hybridnej dockerizácie.
Poďme roztočiť inštanciu Isso:
docker-compose up -d
Zistite, ako prebehlo nasadenie pomocou kontroly v reálnom čase:
docker logs -f isso_isso_1
Ak všetko pôjde dobre, dostanete takýto výstup, ako je uvedené nižšie:
2021-08-23 14:48:21,334 INFO: connected to SMTP server
2021-08-23 14:48:21,750 INFO: connected to https://domain.com/
[2021-08-23 14:48:21 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2021-08-23 14:48:21 +0000] [1] [INFO] Listening at: http://0.0.0.0:8080 (1)
[2021-08-23 14:48:21 +0000] [1] [INFO] Using worker: sync
[2021-08-23 14:48:21 +0000] [8] [INFO] Booting worker with pid: 8
[2021-08-23 14:48:21 +0000] [9] [INFO] Booting worker with pid: 9
[2021-08-23 14:48:21 +0000] [10] [INFO] Booting worker with pid: 10
[2021-08-23 14:48:21 +0000] [11] [INFO] Booting worker with pid: 11
Krok 6: Vložte Isso kód na svoj web
Na základe konfigurácie diskutovanej v kroku 3 musíte teraz aktualizovať svoju webovú lokalitu pomocou kódu na vloženie Isso.
Môžete zistiť, kam by ste mali JavaScript vložiť na svoj web.
<script data-isso="https://isso.domain.com/"
data-isso-avatar="true"
data-isso-vote="true"
data-isso-vote-levels="-5,5"
src="https://isso.domain.com/js/embed.min.js"></script><
<section id="isso-thread"></section>Kroky pre Ghost
Pri nasadzovaní Ghost založenom na Dockeri proces prebieha približne takto:
Prihláste sa na svoj server duchov a zadajte adresár duchov:
cd ~/ghost
Súbor post.hbs sa nachádza na adrese /var/lib/ghost/current/content/themes/theme-name/post.hbs. Nezabudnite použiť iba post.hbs pre motív, ktorý momentálne používate, aby sa vloženie prejavilo. Tu používam tému Casper. Takže názov témy tu bude casper. Môžete si to overiť zadaním obalu kontajnera Ghost:
avimanyu@localhost:~$ docker exec -ti ghost_ghost_1 bash -c "ls /var/lib/ghost/current/content/themes/casper/"
LICENSE author.hbs error.hbs package.json post.hbs
README.md default.hbs gulpfile.js page.hbs tag.hbs
assets error-404.hbs index.hbs partials yarn.lockSkopírujte súbor pomocou príkazu docker cp:
docker cp ghost_ghost_1:/var/lib/ghost/current/content/themes/casper/post.hbs post.hbsTeraz, keď ho máte vo svojom vlastnom hosťovanom adresári Ghost, kde sa nachádza súbor Docker Compose, otvorte tento súbor a do sekcie s komentármi k článku vložte nasledujúci kód:
<section class="article-comments gh-canvas">
<script data-isso="https://isso.domain.com/"
data-isso-avatar="true"
data-isso-vote="true"
data-isso-vote-levels="-5,5"
src="https://isso.domain.com/js/embed.min.js"></script><
<section id="isso-thread"></section>
</section>
Tu data-isso-vote="true" umožňuje hlasovanie pre návštevníkov a data-isso-vote-levels="-5,5" umožňuje nastaviť rozsah pre tých hodnoty (v tomto prípade -5 až 5):
Pripojte novo upravený súbor do konfigurácie Ghost Docker Compose v sekcii zväzkov a aktualizujte ho nasledovne:
- ./post.hbs:/var/lib/ghost/current/content/themes/casper/post.hbs
Škálujte novú inštanciu Ghost na základe tejto konfigurácie:
docker-compose up -d --scale ghost=2 --no-recreate
Asi po minúte odstráňte starý kontajner Ghost, ktorý stále beží:
docker rm -f ghost_ghost_1Zmenšiť na režim jedného kontajnera:
docker-compose up -d --scale ghost=1 --no-recreateV tomto bode ste úspešne dokončili nastavenie Isso na svojom blogu!
Krok 7: Prejdite do poľa komentárov Isso na webovej stránke
Počkajte niekoľko minút a nasmerujte prehliadač na doménu Ghost, kde ste práve nakonfigurovali Isso.
Ak napríklad hosťujete svoj blog na adrese domain.com, prejdite nadol do spodnej časti ľubovoľného blogového príspevku a pole na komentáre nájdete pripravené na použitie!
Zastavenie kontajnerov
V prípade, že chcete kontajner stiahnuť, môžete tak urobiť tak, že prejdete do adresára, kde ste si stiahli Isso (v našom prípade /opt/isso) pomocou Git a použite tento príkaz:
docker-compose down
Ak chcete znova spustiť nasadenie, uistite sa, že pracujete v rovnakom adresári /opt/isso a spustite:
docker-compose up -d
Bonusové tipy
Tu je niekoľko ďalších tipov, ktoré by sa vám mali hodiť pri nastavení Isso:
Webové administračné rozhranie
Vedeli ste, že môžete pristupovať a moderovať komentáre Isso aj na webovom rozhraní? Zodpovedajúca adresa URL, ktorá slúži na tento účel, je isso.domain.com/admin. Tu som použil iso pre subdoménu. Aby ste to však povolili, musíte v konfiguračnom súbore (o ktorom sa hovorí v kroku 3) nastaviť ďalšiu sekciu s názvom [admin] s nasledujúcim obsahom:
[admin]
enabled = true
password = plain-text-password
Všimnite si, že heslo vo formáte obyčajného textu uvedené vyššie by doslova predstavovalo hodnotu, ktorú používate ako heslo:
Po prihlásení vyzerá webové rozhranie nasledovne:
Ak máte povolenú dôveryhodnosť obsahu Docker
Dockerfile používa node:dubnium-buster ako základný obrázok, ktorý zjavne nemá žiadne platné údaje o dôveryhodnosti, keď som sa ho pokúšal vytvoriť. Dôveryhodnosť obsahu je v Dockeri predvolene zakázaná. Ak ju však máte povolenú, môže sa vám zobraziť takáto chyba:
avimanyu@localhost:/opt/isso$ docker build . -t isso:0.12.2
WARN[0013] targets metadata is nearing expiry, you should re-sign the role metadata
WARN[0013] snapshot is nearing expiry, you should re-sign the role metadata
ERRO[0013] Can't add file /opt/isso/ansible/site.yml to tar: io: read/write on closed pipe
Sending build context to Docker daemon 2.8MB
ERRO[0013] Can't close tar writer: io: read/write on closed pipe
error during connect: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.41/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=isso%3A0.12.2&target=&ulimits=null&version=1: No valid trust data for dubnium-busterPred vytvorením obrázka sa teda uistite, že ste dočasne nastavili DOCKER_CONTENT_TRUST ako 0 (krok 4):
export DOCKER_CONTENT_TRUST=0Po získaní obrázka ho nastavte späť na 1:
export DOCKER_CONTENT_TRUST=1Aktualizácia Isso
Vždy, keď vyjde nová verzia Isso, môžete úložisko naklonovať na samostatné miesto:
git clone https://github.com/posativ/isso.git isso-update
cd isso-updatePo presťahovaní na toto samostatné miesto (isso-update) môžete vytvoriť nový obrázok s použitím čísla najnovšej verzie, ako je uvedené v kroku 4. Po dokončení upravte súbor Isso Docker Compose a aktualizujte je tam aj číslo verzie obrázka.
Teraz zväčšite novú nádobu Isso, počkajte asi minútu a vyberte starú nádobu. Nakoniec znížte na režim jednej nádoby (ako je uvedené v druhej časti kroku 6).
Uistite sa, že hlasovanie funguje
Chvíľu mi trvalo, kým som zistil, prečo hlasovanie za alebo proti komentárom nefunguje, keď som sa o to pokúšal. Isso je v týchto veciach dosť ostražitý a háklivý.
Podarilo sa mi úspešne otestovať hlasovanie za/proti hlasovaniu až po prístupe k komentárom z inej IP adresy (čo boli v mojom prípade moje mobilné dáta). Na testovanie hlasovania o komentároch na Isso by bolo dobré použiť VPN.
Záverečné poznámky
Úplnú referenciu o aplikácii Isso a všetkých jej funkciách nájdete v oficiálnej dokumentácii Isso, najmä v podsekciách servera a klienta, aby ste ju mohli vo veľkej miere využívať a maximalizovať jej produktivitu.
Dúfam, že táto príručka bude pre vás užitočná pri samohostení vášho vlastného systému komentárov na vašej stránke. Ak máte nejaké návrhy, spätnú väzbu alebo otázky, môžete ich zdieľať v sekcii komentárov nižšie.




