GNU/Linux >> Znalost Linux >  >> Linux

Kompletní průvodce k samohostování Rocket.Chat s Dockerem

Rocket.Chat je open source komunikační platforma ideální pro spolupráci mezi organizacemi, týmy nebo členy fóra.

Používáme ho pro naši interní komunikaci v Linux Handbook and It's FOSS a naprosto ho milujeme.

Nyní se můžete rozhodnout pro spravovanou instanci Rocket.Chat od tvůrců samotného Rocket.Chat. Samozřejmě by to znamenalo další výdaje, ale nebudete muset vynakládat další úsilí na nasazení Rocket.Chat, jeho aktualizaci a údržbu. Kromě toho také pomáhá rozvoji projektu Rocket.Chat.

Pokud se chcete vyhnout velkým výdajům nebo vzít věci do svých rukou přístupem „udělej si sám“, můžete na svém serveru hostit Rocket.Chat.

V tomto tutoriálu ukážu kroky k nasazení Rocket.Chat s Dockerem.

Samohostování Rocket.Chat s Docker

Podívejme se, co potřebujete k nasazení Rocket.Chat s Dockerem na linuxovém serveru.

Požadavky

Kromě znalosti linuxových příkazů vám zde pomůže i znalost základů Docker Compose.

  • Server Linux. Můžete použít fyzický server, virtuální počítač nebo cloudové servery. Můžete se zaregistrovat u našeho partnera Linode a získat kredity v hodnotě 100 $ zdarma.
  • Docker a Docker Compose nainstalované na vašem serveru.
  • Přístup k DNS vaší domény, kde chcete nasadit Rocket.Chat.
  • Nastavení reverzního proxy serveru Nginx s přesměrováním www/bez www a povolenými limity nahrávání.

Krok 0:Připravte úvodní nastavení

V systému musíte mít nainstalovaný Docker a Docker Compose. Pokyny pro Ubuntu naleznete v těchto výukových programech.

  • Nainstalujte Docker na Ubuntu
  • Nainstalujte Docker Compose na Ubuntu

Kromě toho musíte mít také nastavení reverzního proxy serveru Nginx. To je výhodné, pokud chcete mít na stejném serveru nainstalováno více než jeden Rocket.Chat nebo nějakou jinou webovou službu.

Toto téma bylo dříve podrobně probráno v níže uvedeném tutoriálu, takže zde nebudu opakovat stejné kroky. Toto nastavení však musíte mít ve svém systému.

Při spuštění Docker Compose použijte následující konfiguraci Nginx s názvem docker-compose.yml v samostatném adresáři. Ujistěte se, že jste změnili DEFAULT_EMAIL podle vašich preferencí.

version: '3.7'

services:

  jwilder-nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: jwilder-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:
      - jwilder-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

volumes:
  certs:
  html:
  vhost:
  dhparam:

networks:
  net:
    external: true

Před nasazením výše uvedené konfigurace si v případě potřeby zkontrolujte odkaz a také zajistěte přípravné kroky, jak je popsáno níže.

Krok 1:Příprava nasazení serveru Rocket.Chat

Zde používám reverzní proxy metodu Jwilder, protože bere v úvahu certifikáty SSL, přesměrování www/bez www a povolené limity nahrávání.

Jak zacházet s certifikáty SSL bylo popsáno v odkazu sdíleném výše v části požadavky. Kromě toho popíšu, jak povolit přesměrování www/non-www (přeskočit to pro subdomény) a zvýšit povolené limity nahrávání přes Nginx.

Přesměrování WWW/non-WWW (přeskočit pro subdomény)

V případě, že chcete sami hostit Rocket.Chat na subdoméně, je tato sekce irelevantní a můžete přejít k této další sekci. Ale pokud ne, v závislosti na vašich preferencích SEO můžete chtít nastavit přesměrování www na  bez www nebo naopak. Pokud je například váš chatovací server hostován na adrese  domain.com, uživatelé navštěvující www.domain.com na něj musí být přesměrováni (jak funguje doména GitHubu).

Podobně, pokud jej hostujete na adrese www.domain.com, uživatelé navštěvující doménu domain.com musí být přesměrováni (jak funguje doména Linode).

WWW na jiné než WWW

Vytvořte soubor s názvem www.domain.com v nginx docker vytvořte adresář s následujícím obsahem a uložte jej:

rewrite ^/(.*)$ https://domain.com/$1 permanent;
Ne-WWW na WWW

Vytvořte soubor s názvem domain.com v nginx docker vytvořte adresář s následujícím obsahem a uložte jej:

rewrite ^/(.*)$ https://www.domain.com/$1 permanent;

Nyní předpokládejme, že chcete použít WWW k přesměrování mimo WWW. Jediné, co musíte udělat, je svázat a připojit soubor v sekci svazků vaší konfigurace služby Nginx:

      - ./www.domain.com:/etc/nginx/vhost.d/www.domain.com

Zvýšení povolených limitů nahrávání

Nahrávání obrázků může být ovlivněno nízkými limity velikosti nahrávání na Rocket.Chat. Protože používám reverzní proxy, musím dodatečně nastavit maximální limit nahrávání a vyhnout se problémům při nahrávání obrázků na Docker. Řekněme, že pro 1 GB vytvořte soubor s názvem client_max_upload_size.conf a uložte jej s následujícím obsahem:

client_max_body_size 1G;

Později jej budete muset připojit stejně jako v předchozím souboru:

      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf

Spusťte docker-compose up -d z adresáře Nginx a aktualizujte konfiguraci Nginx.

Konfigurace nasazení Rocket.Chat se v podstatě skládá ze tří hlavních komponent:

  • Backend databáze MongoDB
  • Inicializace sady replik MongoDB
  • Rocket.Chat jako webové rozhraní

Protože nastavujete Rocket.Chat pomocí Dockeru, všechny výše uvedené komponenty budou nasazeny jako jejich vlastní kontejnery.

Pro inicializaci databázové služby a sady replik použiji interní síť s názvem rocket protože musí být viditelný pouze pro službu Rocket.Chat.

networks:
  - rocket

Ale pro službu Rocket.Chat samozřejmě stejná net síť použitá v konfiguraci reverzního proxy musí být specifikována spolu s rocket sítě a teprve poté by bylo možné jej uvést do provozu pomocí kontejneru Nginx Docker.

networks:
  - net
  - rocket

Nyní zvažte, jak jsou jednotlivě konfigurovány pomocí Docker Compose:

Pro MongoDB používám oficiální obrázek MongoDB 4.0, který je k dispozici na Docker Hub:

  mongo:
    image: mongo:4.0
    restart: always
    volumes:
     - ./data/db:/data/db
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
    networks:
      - rocket

Rocket.Chat také vyžaduje sadu replik MongoDB pro zlepšení výkonu. Obraz je tedy nutné použít samostatně k nasazení dočasné služby a inicializaci sady replik. Spustí potřebný příkaz, sám se odstraní a nezůstane spuštěný:

  mongo-init-replica:
    image: mongo:4.0
    command: 'bash -c "for i in `seq 1 30`; do mongo mongo/rocketchat --eval \"rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})\" && s=$$? && break || s=$$?; echo \"Tried $$i times. Waiting 5 secs...\"; sleep 5; done; (exit $$s)"'
    depends_on:
      - mongo
    networks:
      - rocket

Pro samotnou službu Rocket.Chat používám nejnovější číslo verze označené na Docker Hub, které vývojáři spustili jako stabilní verzi. Zde, v době psaní tohoto článku, je to 3.17.0 a na základě oficiální konfigurace Rocket.Chat Docker Compose:

  rocketchat:
    image: rocketchat/rocket.chat:3.17.0
    command: bash -c 'for i in `seq 1 30`; do node main.js && s=$$? && break || s=$$?; echo "Tried $$i times. Waiting 5 secs..."; sleep 5; done; (exit $$s)'
    restart: always
    volumes:
      - ./uploads:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=https://chat.domain.com
      - VIRTUAL_HOST=chat.domain.com
      - LETSENCRYPT_HOST=chat.domain.com
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - Accounts_UseDNSDomainCheck=false
    depends_on:
      - mongo
    networks:
      - net
      - rocket

Protože se jedná o konfiguraci založenou na reverzním proxy serveru Nginx, musíte zahrnout další proměnné prostředí, konkrétně VIRTUAL_HOST , LETSENCRYPT_HOST s adresou URL vaší domény a Accounts_UseDNSDomainCheck nastavit na false . Zde jsem předpokládal chat.domain.com jako příklad názvu domény pro váš chatovací server.

Pamatujte, že nasazení používá konfiguraci připojenou k vazbě, a proto by adresáře svazku databáze a služby byly vytvořeny ve stejném adresáři, v jakém je soubor Docker Compose.

Krok 2:Nasazení Rocket.Chat

Nyní byste měli mít připravený soubor  docker-compose. Je čas použít tento soubor.

Vytvořte na svém serveru adresář Rocket Chat docker compose:

mkdir rocketchat

Přejděte do adresáře a upravte potřebné soubory:

cd rocketchat

Nyní vytvořte následující soubor docker-compose na základě našich dosavadních diskuzí:

version: "3.7"

services:
  rocketchat:
    image: rocketchat/rocket.chat:3.17.0
    command: bash -c 'for i in `seq 1 30`; do node main.js && s=$$? && break || s=$$?; echo "Tried $$i times. Waiting 5 secs..."; sleep 5; done; (exit $$s)'
    restart: always
    volumes:
      - ./uploads:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=https://chat.domain.com
      - LETSENCRYPT_HOST=chat.domain.com
      - VIRTUAL_HOST=chat.domain.com
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - Accounts_UseDNSDomainCheck=false
    depends_on:
      - mongo
    networks:
      - net
      - rocket

  mongo:
    image: mongo:4.0
    restart: always
    volumes:
     - ./data/db:/data/db
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
    networks:
      - rocket

  mongo-init-replica:
    image: mongo:4.0
    command: 'bash -c "for i in `seq 1 30`; do mongo mongo/rocketchat --eval \"rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})\" && s=$$? && break || s=$$?; echo \"Tried $$i times. Waiting 5 secs...\"; sleep 5; done; (exit $$s)"'
    depends_on:
      - mongo
    networks:
      - rocket

networks:
  net:
    external: true
  rocket:
    internal: true

Nyní můžete spustit instanci Rocket.Chat:

docker-compose up -d

Přístup k doméně serveru Rocket.Chat zadané v konfiguraci pomocí adresy URL vaší domény.

Krok 3:Nastavení účtu správce Rocket.Chat

Při prvním přístupu na adresu URL vašeho chatovacího serveru postupujte podle pokynů na obrazovce, dokud nepotvrdíte svůj web jako správce.

Krok 4:Nastavení SMTP pro e-mailová upozornění

V tomto příkladu jsem jako službu SMTP použil SendGrid. Zde je stručný návod, jak jej nakonfigurovat:

Na hlavním serveru chatu klikněte na ikonu domů:

Přejděte na panel administrace:

Přejděte trochu dolů a otevřete Nastavení e-mailu:

Znovu přejděte vpravo dolů, dokud neuvidíte „SMTP“:

Rozbalte jej a ujistěte se, že jste zvolili následující nastavení, konkrétně smtps protokol. [email protected] „Z e-mailu“ je samozřejmě pouze pro demo účely. Přizpůsobte si jej, jak uznáte za vhodné, na základě toho, jak chcete, aby vypadalo, když uživatel obdrží upozornění z poštovní schránky. Změňte jej tedy podle svých požadavků:

Tak to je ono! Úspěšně jste na svém serveru hostovali svou vlastní, plně funkční instanci Rocket.Chat!

Tipy pro instanci Rocket.Chat, kterou hostujete sami

Zde je několik tipů, které vám pomohou udržovat vaši instanci.

Vždy používat HTTPS v adrese URL serveru

Ujistěte se, že v adrese URL chatovacího serveru vždy používáte HTTPS, zejména v následujících dvou případech:

  • Když informujete uživatele o adrese URL pro první přihlášení, ujistěte se, že používají https v názvu domény.
  • Zkontrolujte hodnotu adresy URL na Admin Panel> Settings> General> Site URL , také používá https .

Zajištěním výše uvedených dvou úkolů zabráníte nechtěným problémům s přihlášením nebo odhlášením v budoucnu.

Sledování protokolů Rocket.Chat v reálném čase

Pokud chcete zkontrolovat protokoly kontejneru během jeho nasazení v reálném čase, můžete spustit:

docker logs -f rocketchat_rocketchat_1

Zálohování a obnovení nastavení a svazků Rocket.Chat bez výpadků

Pomocí cloudu + místního přístupu můžete zálohovat a obnovovat svá nastavení a svazky Rocket.Chat bez prostojů. O tom, jak zálohovat přípojná připojení (jak je používá Rocket.Chat) jsem diskutoval v následujícím článku:

Rychle aktualizujte kontejnery Rocket.Chat bez výpadku

Pomocí --scale flag na Docker Compose, můžete vytvořit nový kontejner založený na nejnovější verzi Rocket.Chat. Až bude hotovo, můžete starou odstranit. To má za následek zanedbatelné prostoje při zmenšení na režim jednoho kontejneru. Uživatelský přístup nebude během aktualizace ovlivněn:

Pokud narazíte na chybu, máte problémy nebo máte návrh, můžete mi dát vědět zanecháním komentáře níže.


Linux
  1. Jak nainstalovat WordPress s Dockerem, snadno sledovatelný průvodce

  2. Kompletní průvodce pro začátečníky k protokolování dockeru

  3. Průvodce upgradem na MongoDB 5.0 a Rocket.Chat 4.0 na Dockeru

  1. Grep Regex:Kompletní průvodce

  2. Linux Commands - Kompletní průvodce

  3. Jak nainstalovat Rocket Chat na Ubuntu 16.04 s Dockerem

  1. Kompletní průvodce instalací Linuxu na Chromebook

  2. Kompletní průvodce protokolováním Linuxu

  3. Docker pro Mac:Kompletní průvodce instalací