Prosody je bezplatný open-source XMPP server napsaný v Lua. Je rychlý a lehký. XMPP je skvělý protokol pro rychlé zasílání zpráv. Tento tutoriál vám ukáže, jak nainstalovat a nakonfigurovat server Prosody XMPP na Ubuntu 20.04. Jakmile dokončíte tento tutoriál, budete mít svůj vlastní chatovací server.
Krok 1:Instalace Prosody na Ubuntu 20.04
Prosody je součástí výchozího úložiště Ubuntu. Tým Prosody také spravuje úložiště balíčků. Pokud chcete získat nejnovější verzi, musíte přidat úložiště Prosody pomocí následujícího příkazu.
echo 'deb https://packages.prosody.im/debian focal main' | sudo tee /etc/apt/sources.list.d/prosody.list
Poté spusťte následující příkaz pro stažení a import veřejného klíče Prosody, který umožňuje správci balíčků APT ověřit integritu balíčků stažených z tohoto úložiště.
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
Dále aktualizujte místní index balíčků a nainstalujte nejnovější verzi Prosody.
sudo apt update sudo apt install prosody
Po instalaci se Prosody automaticky spustí. Jeho stav můžete zkontrolovat pomocí:
systemctl status prosody
Výstup:
● prosody.service - Prosody XMPP Server Loaded: loaded (/lib/systemd/system/prosody.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-04-19 13:58:40 UTC; 16s ago Docs: https://prosody.im/doc Main PID: 1894 (lua5.2) Tasks: 1 (limit: 1108) CGroup: /system.slice/prosody.service └─1894 lua5.2 /usr/bin/prosody -F Apr 19 13:58:40 localhost systemd[1]: Started Prosody XMPP Server.
Pokud neběží, můžete jej spustit pomocí
sudo systemctl start prosody
Chcete-li povolit automatické spouštění při spouštění systému, spusťte
sudo systemctl enable prosody
Krok 2:Otevření portů v bráně firewall
Ve výchozím nastavení naslouchá na portu TCP 5269 a 5222 veřejné IP adresy, jak je vidět na následujícím příkazu. (Pokud vaše Ubuntu nemá příkaz netstat, můžete jej nainstalovat pomocí sudo apt install net-tools
.)
sudo netstat -lnptu | grep lua
- Port 5222 se používá pro připojení klienta k serveru.
- Port 5269 se používá pro připojení server-server.
Pokud jste na Ubuntu povolili bránu firewall UFW, musíte otevřít výše uvedené porty pomocí následujícího příkazu.
sudo ufw allow 5222,5269/tcp
Krok 3:Konfigurace serveru Prosody XMPP
Upravte hlavní konfigurační soubor pomocí textového editoru příkazového řádku, jako je Nano.
sudo nano /etc/prosody/prosody.cfg.lua
V module_enabled {...}
sekce, můžete odkomentovat řádek, abyste povolili konkrétní modul, nebo zakomentovat řádek, abyste zakázali konkrétní modul. Každý modul má popis, který říká, co dělá. Pravděpodobně budete chtít aktivovat modul BOSH, což znamená B idirectional-streams O ver S synchronní H TTP. Umožňuje komunikaci XMPP přes HTTP.
Dále přejděte dolů v konfiguračním souboru. Pokud chcete povolit registraci účtu z klienta XMPP, nastavte allow_registration
na pravdu. Než to uděláte, musíte vědět, jak zabránit zneužití. Pokud jste v XMPP noví, pravděpodobně nechcete klientům XMPP umožnit, aby si sami registrovali účty.
allow_registration = true;
Prosody umožňuje pouze šifrovanou komunikaci, což je označeno následujícími dvěma řádky.
c2s_require_encryption = true s2s_require_encryption = true
Musíme však vytvořit virtuálního hostitele a nainstalovat certifikát TLS, aby bylo možné připojení šifrovat. Ve výchozím nastavení je v Prosody pouze jeden virtuální hostitel:localhost, jak ukazuje následující řádek.
VirtualHost "localhost"
Nyní vytvoříme dalšího virtuálního hostitele jako chat.example.com
. Přidejte do tohoto souboru následující řádek.
VirtualHost "chat.example.com"
Uložte a zavřete soubor. Poté musíme získat a nainstalovat důvěryhodný certifikát TLS z Let’s Encrypt.
Krok 4:Získejte důvěryhodný certifikát TLS od společnosti Let’s Encrypt
Chcete-li nainstalovat klienta Let’s Encrypt (certbot) na server Ubuntu, zadejte následující příkaz.
sudo apt install certbot
Pokud ještě nemáte spuštěný webový server, doporučuji si jej nainstalovat (Apache nebo Nginx), protože je snazší získat a nainstalovat certifikát TLS pomocí webového serveru než pomocí jiných metod.
Pokud používáte webový server Apache, musíte nainstalovat plugin Apache. (Následující příkaz nainstaluje webový server Apache, pokud ještě není nainstalován ve vašem systému.)
sudo apt install python3-certbot-apache
Pokud používáte webový server Nginx, nainstalujte si plugin Nginx. (Následující příkaz nainstaluje webový server Nginx, pokud ještě není nainstalován ve vašem systému.)
sudo apt install python3-certbot-nginx
Získání certifikátu TLS pomocí webového serveru Apache
Musíte mít virtuálního hostitele Apache pro chat.example.com
před získáním certifikátu Let’s Encrypt TLS. Vytvořte soubor virtuálního hostitele:
sudo nano /etc/apache2/sites-available/prosody.conf
Poté do souboru vložte následující text. Nahraďte chat.example.com
s vaším skutečným názvem domény. Nezapomeňte pro něj nastavit záznam DNS A.
<VirtualHost *:80> ServerName chat.example.com DocumentRoot /var/www/prosody </VirtualHost>
Uložte a zavřete soubor. Poté vytvořte adresář webroot.
sudo mkdir /var/www/prosody
Nastavte www-data
(uživatel Apache) jako vlastník webrootu.
sudo chown www-data:www-data /var/www/prosody -R
Povolit tohoto virtuálního hostitele.
sudo a2ensite prosody.conf
Znovu načtěte Apache, aby se změny projevily.
sudo systemctl reload apache2
Jakmile je virtuální hostitel vytvořen a povolen, spusťte následující příkaz pro získání a instalaci certifikátu Let’s Encrypt TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
Nahraďte červený text svými skutečnými údaji. Měli byste vidět následující, což znamená, že certifikát byl úspěšně získán. Můžete také vidět adresář, ve kterém je uložen váš certifikát.
Získání certifikátu TLS pomocí webového serveru Nginx
Musíte mít virtuálního hostitele Nginx pro chat.example.com
před získáním certifikátu Let’s Encrypt TLS. Vytvořte soubor virtuálního hostitele:
sudo nano /etc/nginx/conf.d/prosody.conf
Dále do souboru vložte následující text. Nahraďte chat.example.com
s vaším skutečným názvem domény. Nezapomeňte pro něj nastavit záznam DNS A.
server { listen 80; listen [::]:80; server_name chat.example.com; root /var/www/prosody/; location ~ /.well-known/acme-challenge { allow all; } }
Uložte a zavřete soubor. Poté vytvořte kořenový webový adresář.
sudo mkdir /var/www/prosody/
Nastavte www-data
(uživatel Nginx) jako vlastník webového kořenového adresáře.
sudo chown www-data:www-data /var/www/prosody -R
Znovu načtěte Nginx, aby se změny projevily.
sudo systemctl reload nginx
Jakmile je virtuální hostitel vytvořen a povolen, spusťte následující příkaz pro získání a instalaci certifikátu Let’s Encrypt s pluginem Nginx.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
Měli byste vidět následující, což znamená, že certifikát byl úspěšně získán. Můžete také vidět adresář, ve kterém je uložen váš certifikát.
Krok 5:Instalace certifikátu TLS do Prosody
Upravte hlavní konfigurační soubor.
sudo nano /etc/prosody/prosody.cfg.lua
Přejděte na svého virtuálního hostitele Prosody a přidejte certifikát TLS a soubor klíče.
ssl = { key = "/etc/letsencrypt/live/chat.example.com/privkey.pem"; certificate = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"; }
Takhle:
Uložte a zavřete soubor. Protože server Prosody XMPP běží jako prosody
musíme uživateli prozódie umožnit číst certifikát TLS a soubor klíče pomocí následujících příkazů.
sudo apt install acl sudo setfacl -R -m u:prosody:rx /etc/letsencrypt/
Krok 6:Vytvoření uživatelských účtů
Uživatelský účet pro server Prosody XMPP lze vytvořit pomocí následujícího příkazu. Budete vyzváni k zadání hesla.
sudo prosodyctl adduser [email protected]
Chcete-li změnit heslo, spusťte
sudo prosodyctl passwd [email protected]
Krok 7:Restartujte Prosody
Zkontrolujte syntaxi konfiguračního souboru spuštěním:
sudo prosodyctl check config
Pokud je syntaxe správná, restartujte Prosody, aby se změny projevily.
sudo systemctl restart prosody
Krok 8:Konfigurace klienta XMPP
Tento kurz používá Pidgin instant messenger jako XMPP klienta. Empatie je další klient, kterého můžete použít. Lze je nainstalovat na plochu Ubuntu spuštěním:
sudo apt install pidgin sudo apt install empathy
Při prvním spuštění budete muset přidat účet v Pidginu. Klikněte na Přidat tlačítko.
Poté vyberte XMPP ze seznamu protokolů a zadejte své uživatelské jméno, doménu a heslo.
Klikněte na Přidat a budete přihlášeni.
Nastavit BOSH
Jak jsme již dříve vysvětlili, BOSH vám umožňuje používat XMPP přes HTTP, tedy ve webovém prohlížeči. Například software pro videokonference Jitsi Meet využívá BOSH k integraci Prosody do webových stránek, takže účastníci mohou textový chat během připojení k online videokonferenci.
Pokud jste povolili modul BOSH, upravte konfigurační soubor Prosody (/etc/prosody/prosody.cfg.lua
) a přidejte následující dva řádky na konec konfiguračního souboru.
consider_bosh_secure = true; cross_domain_bosh = true; https_ssl = { certificate = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"; key = "/etc/letsencrypt/live/chat.example.com/privkey.pem"; }
Kde:
- První řádek vynucuje zabezpečené připojení HTTPS.
- Druhý řádek přidává do odpovědí BOSH hlavičky COR, aby mohly požadavky přicházet z libovolné domény.
- Parmater https_ssl určuje certifikát TLS a soubor klíčů pro službu BOSH.
Uložte a zavřete soubor. Poté restartujte Prosody.
sudo systemctl restart prosody
Pokud jste povolili bránu firewall UFW na serveru Ubuntu, musíte otevřít port 5280 a 5281 pomocí následujícího příkazu.
sudo ufw allow 5280,5281/tcp
Po dokončení tohoto kurzu bude koncový bod BOSH dostupný na následující adrese. port 5280 je pro prostý text HTTP, port 5281 pro HTTPS.
http://chat.example.com:5280/http-bind
nebo
https://chat.example.com:5281/http-bind.
Koncový bod BOSH je adresa URL, kterou klient používá k připojení k serveru XMPP přes HTTP.
Místnost chatu pro více uživatelů
Chcete-li povolit MUC (Multi-User Chat), přidejte následující řádek do konfiguračního souboru Prosody. Nahraďte conference.example.com
s preferovanou subdoménou.
Component "conference.example.com" "muc" restrict_room_creation = "admin"
Druhý řádek umožní vytvářet místnosti pouze správci. Chcete-li definovat správce pro server XMPP, musíte nejprve vytvořit účet pomocí sudo prosodyctl adduser
příkaz, jak je uvedeno výše. Poté v konfiguračním souboru přidejte účet do admin {...}
sekce jako níže.
admins = { "[email protected]", "[email protected]" }
Zkontrolujte syntaxi konfiguračního souboru spuštěním:
sudo prosodyctl check config
Pokud je syntaxe správná, restartujte Prosody, aby se změny projevily.
sudo systemctl restart prosody
Odstraňování problémů
Hlavní soubor protokolu pro Prosody je /var/log/prosody/prosody.log
. Je zde také protokol chyb /var/log/prosody/prosody.err
. Pokud Prosody nefunguje tak, jak jste očekávali, je dobrým místem ke kontrole protokol chyb.
Automaticky obnovit certifikát TLS
Chcete-li automaticky obnovit certifikát TLS, můžete vytvořit úlohu Cron. Otevřete soubor crontab uživatele root.
sudo crontab -e
Pokud používáte webový server Apache, přidejte na konec souboru následující řádek.
@daily certbot renew --quiet && systemctl reload postfix dovecot apache2
Pokud používáte webový server Nginx, přidejte následující řádek.
@daily certbot renew --quiet && systemctl reload postfix dovecot nginx
Opětovné načtení Postfixu, Dovecotu a webového serveru je nezbytné, aby tyto programy vyzvedly nový certifikát a soukromý klíč.