GNU/Linux >> Znalost Linux >  >> Linux

Nasazení systému komentářů Isso pod Nginx s Dockerem

Isso je open source software pro komentáře, který může sloužit jako skvělá alternativa k proprietárnímu Disqus.

Můžete jej použít pro přidání systému komentářů na váš blog nebo web.

Funguje s WordPress, Ghost a mnoha dalšími frameworky díky vložení JavaScriptu. Zde jsem jako demonstrativní příklad použil Ghost.

Instalace Isso s Dockerem s hybridní kontejnerizací

Tento dokument se zaměřuje na nasazení Isso pod kontejnerem Nginx se základními náležitostmi a zaujímá zjednodušený přístup přijetím způsobu Docker Compose. Konfigurace používá obrázek vygenerovaný při vytváření oficiálního souboru Dockerfile poskytnutého vývojáři na GitHubu.

Oficiální průvodce zmiňuje použití Nginx, které je založeno na instalaci na straně hostitele. Zde jsem jako vždy použil konfiguraci Nginx založenou na Dockeru.

Oficiální dokumentace poskytuje základní jednořádkový příklad pro Docker. To však musí být rozsáhle propracováno, pokud se uvažuje o použití ve výrobě.

Proto jsem upravil verzi Docker Compose na základě stejného příkladu a vlastní nastavení Isso založené na Docker Compose. Ten již není udržován, ale je stále užitečným odkazem.

Pomocí tohoto průvodce můžete znovu sestavit svůj Dockerfile a vytvořit nový obraz pokaždé, když je vydána aktualizace pro Isso.

Předpoklady

Není to povinné, ale návod pro vás bude mnohem snazší sledovat, pokud máte:

  • Některé znalosti Dockeru
  • Porozumění Docker Compose

Isso budete nasazovat za reverzní proxy kontejner se subdoménou s povoleným SSL.

Kromě výše uvedených aktuálních znalostí budete potřebovat následující požadavky na infrastrukturu:

  • Veřejně přístupný Server Ubuntu Linux . Můžete použít poskytovatele cloudových služeb, jako je Linode. Pro toto nasazení bude stačit Nano server s 1 GB RAM.
  • Přístup k doméně a jejím nastavením DNS
  • Docker a Docker Compose nainstalované na vašem serveru Linux.
  • Reverzní proxy Nginx je již nastaven (Soubor Docker Compose byl součástí tohoto výukového programu)

Pokud potřebujete pomoc, můžete postupovat podle našich průvodců na adrese:

  • Instalace Dockeru na Ubuntu
  • Instalace Docker Compose na Ubuntu
  • Reverzní nastavení proxy dockeru

Budu používat isso.domain.com jako příklad pro blog Ghost dostupný na domain.com . Podle potřeby je vhodně změňte. Na Docker Compose používám následující konfiguraci 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 protected]"
    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

Vytvořte externí síť pomocí docker create network net a nasaďte jej pomocí docker-compose up -d z odpovídajícího adresáře. Úplné podrobnosti naleznete ve výše uvedeném článku Nginx Docker.

Krok 1:Změňte nastavení DNS

Na ovládacím panelu poskytovatele DNS se ujistěte, že záznamy A/AAAA vaší domény ukazují na IP adresu vašeho linuxového serveru.

Řekněme, že chcete hostovat Isso na isso.domain.com pro váš blog Ghost hostovaný na domain.com, měli byste přidat následující záznam A nahrazující xxx.xxx.xxx.xxx IP adresou vašeho serveru.

Typ Hostitel Hodnota TTL
Záznam iso xxx.xxx.xxx.xxx 5 min.

Krok 2:Stáhnout Isso

Než připravíte soubor pro psaní pro kontejner Nginx, musíte si stáhnout Isso s Git.

Načteme jej na /opt/isso .

Použijte git stáhnout Isso a umístit jej do adresáře /opt:

sudo git clone https://github.com/posativ/isso /opt/isso

Nyní se přepněte do tohoto adresáře:

cd /opt/isso

Nyní jste připraveni vytvořit oficiální soubor Dockerfile pro generování potřebného obrazu Isso prostřednictvím Docker Compose:

Krok 3:Úprava hodnot konfigurace

Před vytvořením obrazu je lepší nastavit konfigurační soubor s minimálními nezbytnými parametry pro produkční použití.

sudo nano isso.cfg

Nastavení po částech pro konfigurační soubor:

[general] sekce:

  • Použijte dbpath k nastavení cesty k databázi tak, jak je vidět z kontejneru, který má být nasazen.
  • Nastavte název domény pro host parametr, což by byl váš blog nebo webová stránka, kam chcete vložit pole komentáře Isso do blogových příspěvků. Pokud pro svůj blog používáte přesměrování bez www na www, nastavte www.domain.com jako hostitel místo domain.com protože to je koncový bod, kam budou komentáře nakonec zveřejněny.
  • S max-age , můžete nastavit časový rozsah, který uživatelům umožní upravit/odebrat vlastní komentáře do 15 minut (výchozí).
  • Používám smtp jako způsob upozornění (e-mailem), když budou na blogu zveřejněny nové komentáře.

[moderation] sekce:

Nastavte tuto hodnotu na "true" pro povolení moderování všech komentářů zveřejněných na vašem webu.

[guard] sekce:

Nastavte tuto hodnotu na "true" pro aktivaci základní ochrany proti spamu pro všechny zveřejněné komentáře.

[server] sekce:

  • Pomocí listen , určíte server, na kterém chcete naslouchat. Isso podporuje TCP/IP i unixové doménové sokety.

[smtp] sekce:

Pravděpodobně nejzásadnější částí je, že zde nastavíte základní přihlašovací údaje na základě vašeho poskytovatele služeb SMTP. S tímto nastavením pokaždé, když návštěvník přidá nový komentář, obdržíte e-mailové upozornění s názvem „Byl zveřejněn nový komentář“. To vám umožní dostávat upozornění na nové komentáře a snadno je moderovat přímo z vaší poštovní schránky. Parametry pro SendGrid jsou:

  • username je doslova apikey jako hodnotu (společná pro všechny uživatele SendGrid).
  • password je váš jedinečný klíč API specifický pro vaše ID klíče API.
  • host bude smtp.sendgrid.net
  • port by měl být 587
  • to je vaše e-mailová adresa, na kterou chcete být informováni o nových komentářích.
  • from je jméno a adresa, které uvidíte ve své doručené poště. Aby to bylo jednodušší, nastavil jsem jméno odesílatele jako „Nový komentátor“ s e-mailovou adresou [email protected] .

Pokud nepoužíváte SendGrid, ale některého jiného poskytovatele služeb SMTP, metriky uživatelského jména, hesla, hostitele a portu by se musely odpovídajícím způsobem změnit na základě jejich odpovídajících hodnot.

Abychom to shrnuli, zde je kompletní konfigurační soubor, který vám pomůže začít:

[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 protected]
from = New Commenter <[email protected]>

Krok 4:Vytvořte obraz Isso Docker na základě oficiálního souboru Dockerfile

Protože jste si již Isso stáhli z jeho úložiště GitHub na adrese /opt/isso , Dockerfile je již přítomen.

Pojďme tedy vytvořit obrázek a pojmenovat jej isso:0.12.2 :

docker build . -t isso:0.12.2

Tento obrázek by byl vytvořen lokálně s 0.12.2 štítek. Je čas jej použít 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

Nejprve nastavíte název obrázku a použijete on-failure zásady restartování. Na základě toho, jak jsou svazky připojeny, jak ukazují vývojáři, oba /config a /db adresářů by bylo vidět v kontejneru Isso. UID a GID hodnoty 4242 se používají ke spuštění kontejneru jako neprivilegovaný uživatel.

VIRTUAL_HOST se používá ke zpřístupnění souboru Isso JS online pro vložení na váš web a LETSENCRYPT_HOST poskytuje bezplatný certifikát SSL pro přístup HTTPS. Naše kontejnery Nginx používají síť s názvem net . Proto by tato konfigurace měla také používat stejnou síť.

Nyní jste připraveni nasadit Isso s Dockerem!

Krok 5:Nasazení souboru Docker Compose

Nyní je třeba mít na paměti tyto klíčové body:

  • Aby spolu mohli komunikovat, musí tento kontejner sdílet stejnou síť jako Isso. Jako Isso bude používat net síť, jako je váš reverzní proxy kontejner, bude to používat totéž. Pokud máte nakonfigurovanou jinou síť, ujistěte se, že ji používáte.
  • Měli byste nastavit zásadu restartování při selhání.
  • Stálá data musíte chránit pomocí svazků (na straně hostitele pod /opt/isso ), které jsou namontovány na příslušných místech uvnitř kontejneru.

Kontejnery potřebují, aby byly proměnné prostředí nastaveny mimo soubor docker-compose. Toto jsou důležité hodnoty, které se čtou ze strany hostitele, a proto je Isso dobrým příkladem nastavení hybridní dockerizace.

Pojďme roztočit instanci Isso:

docker-compose up -d

Zjistěte, jak nasazení proběhlo pomocí kontroly v reálném čase:

docker logs -f isso_isso_1

Pokud vše půjde dobře, dostanete výstup podobný tomuto, jak je ukázáno níže:

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 kód Isso na svůj web

Na základě konfigurace popsané v kroku 3 musíte nyní aktualizovat svůj web pomocí kódu pro vložení Isso.

Můžete zjistit, kam byste měli JavaScript vložit na svůj 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 pro Ghost

Na nasazení Ghost založeném na Dockeru probíhá proces zhruba takto:

Přihlaste se ke svému serveru duchů a zadejte adresář duchů:

cd ~/ghost

post.hbs soubor je umístěn na /var/lib/ghost/current/content/themes/theme-name/post.hbs . Nezapomeňte použít pouze post.hbs pro motiv, který aktuálně používáte, aby se vložení projevilo. Zde používám téma Casper. Tedy theme-name zde by byl casper . Můžete to zkontrolovat zadáním shellu kontejneru Ghost:

[email protected]:~$ 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.lock

Zkopírujte soubor pomocí příkazu docker cp:

docker cp ghost_ghost_1:/var/lib/ghost/current/content/themes/casper/post.hbs post.hbs

Nyní, když jej máte ve svém vlastním hostovaném adresáři Ghost, kde je umístěn soubor Docker Compose, otevřete tento soubor a do sekce s komentáři k článku vložte následující 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>

Zde data-isso-vote="true" umožňuje hlasování pro návštěvníky a data-isso-vote-levels="-5,5" umožňuje nastavit rozsah pro tyto hodnoty (v tomto případě -5 až 5):

Připojte nově upravený soubor do konfigurace Ghost Docker Compose v sekci svazky a aktualizujte jej následovně:

- ./post.hbs:/var/lib/ghost/current/content/themes/casper/post.hbs

Škálujte novou instanci Ghost na základě této konfigurace:

docker-compose up -d --scale ghost=2 --no-recreate

Asi po minutě odstraňte starý kontejner Ghost, který stále běží:

docker rm -f ghost_ghost_1

Zmenšit na režim jednoho kontejneru:

docker-compose up -d --scale ghost=1 --no-recreate

V tuto chvíli jste úspěšně dokončili nastavení Isso na svém blogu!

Krok 7:Přístup k poli komentářů Isso na webu

Počkejte několik minut a nasměrujte prohlížeč na doménu Ghost, kde jste právě nakonfigurovali Isso.

Pokud například hostujete svůj blog na domain.com , přejděte dolů na konec jakéhokoli blogového příspěvku a najdete pole pro komentáře připravené k použití!

Zastavení kontejnerů

V případě, že chcete kontejner stáhnout, můžete tak učinit tak, že přejdete do adresáře, kam jste si stáhli Isso (/opt/isso v našem případě) pomocí Git a pomocí tohoto příkazu:

docker-compose down

Chcete-li znovu spustit nasazení, ujistěte se, že pracujete pod stejným /opt/isso adresář a spusťte:

docker-compose up -d

Bonusové tipy

Zde je několik dalších tipů, které by se měly hodit při nastavení Isso:

Webové administrační rozhraní

Věděli jste, že můžete také přistupovat a moderovat komentáře Isso na webovém rozhraní? Odpovídající adresa URL, která slouží tomuto účelu, je isso.domain.com/admin . Zde jsem pro subdoménu použil iso. Ale abyste to mohli povolit, musíte nastavit další sekci nazvanou [admin] v konfiguračním souboru (probráno v kroku 3) s následujícím obsahem:

[admin]
enabled = true
password = plain-text-password

Všimněte si, že plain-text-password uvedená výše by doslova byla hodnota, kterou používáte jako heslo:

Po přihlášení vypadá webové rozhraní následovně:

Pokud máte povolenu důvěryhodnost obsahu Docker

Dockerfile používá node:dubnium-buster jako základní obraz, který zjevně nemá žádná platná důvěryhodná data, když jsem se jej pokoušel vytvořit. Důvěryhodnost obsahu je na Dockeru ve výchozím nastavení zakázána. Pokud ji však máte povolenou, může se zobrazit tato chyba:

[email protected]:/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-buster

Nezapomeňte tedy dočasně nastavit DOCKER_CONTENT_TRUST jako 0 před vytvořením obrázku (krok 4):

export DOCKER_CONTENT_TRUST=0

Nastavte jej zpět na 1 po získání obrázku:

export DOCKER_CONTENT_TRUST=1

Aktualizace Isso

Kdykoli je vydána nová verze Isso, můžete úložiště naklonovat do samostatného umístění:

git clone https://github.com/posativ/isso.git isso-update
cd isso-update

Po přestěhování na toto samostatné místo (isso-update ), můžete vytvořit nový obraz pomocí nejnovějšího čísla verze, jak je znázorněno v kroku 4. Jakmile to uděláte, upravte soubor Isso Docker Compose a aktualizujte v něm také číslo verze obrazu.

Nyní přidejte novou nádobu Isso, počkejte asi minutu a vyjměte starou nádobu. Nakonec zmenšete na režim jednoho kontejneru (jak je popsáno v druhé části kroku 6).

Zajištění funkčnosti hlasování

Chvíli mi trvalo, než jsem přišel na to, proč hlasování pro nebo proti komentářům nefunguje, když jsem se o to pokoušel. Isso je v těchto věcech dost ostražitý a vybíravý.

Úspěšně jsem mohl otestovat upvoting/downvoting až po přístupu ke komentářům z jiné IP adresy (což byla v mém případě moje mobilní data). Pro testování hlasování o komentářích na Isso by bylo dobré použít VPN.

Závěrečné poznámky

Kompletní referenci o aplikaci Isso a všech jejích funkcích naleznete v oficiální dokumentaci Isso, zejména v podsekcích server a klient, abyste ji mohli široce využívat a maximalizovat její produktivitu. Doufám, že vám tato příručka bude užitečná při samohostování vašeho vlastního systému komentářů na vašem webu. Pokud máte nějaké návrhy, zpětnou vazbu nebo dotazy, můžete je sdílet v sekci komentářů níže.


Linux
  1. nginx - 413 entita požadavku je příliš velká

  2. Jak nasadit mikroslužby s Dockerem

  3. Jak nasadit kontejner nginx s Dockerem na Linode

  1. Pochopení systémových volání na Linuxu pomocí strace

  2. Opravte bitovou kopii systému pomocí DISM

  3. Nainstalujte WordPress s Docker Compose, Nginx, Apache s SSL

  1. Dockerizace Wordpressu pomocí Nginx a PHP-FPM na Ubuntu 16.04

  2. Jak nainstalovat diskusní fórum s Nginx na CentOS 7

  3. Prozkoumání systému souborů kontejneru Docker