Installation Ejabberd 25.07 auf Debian 12 mit Datenbank Postgresql + Audio/Video Funktion
ÖffenÖffnen wir in das Terminal:
Wir machen ein Update unseres Servers damit alle Pakte aktuell sind. Nun installieren Wir Postgresql und das Erlang Paket welches wir für unseren Ejabberd Server benötigen.
sudo apt update && apt upgrade -y
sudo apt install postgresql erlang-p1-pgsql mc curl unp wget -y
Bearbeiten pg_hba.conf:
Wir müssen die Posgresql hba.conf bearbeiten. Zeile 7 wie hier in dem Code müssen wir umstellen von "peer" auf "scram-sha-256".
sudo nano /etc/postgresql/15/main/pg_hba.conf
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all scram-sha-256 ##<<<-von peer auf scram-sha-256
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
Postgresql restart:
Wir müssen sicherstellen das die Änderung übernommen wird, starten wir Postgresql neu.
sudo systemctl restart postgresql
Ejabberd Download:
Wir downloaden uns nun Ejabberd "Standalone" für unsere entsprechende Architektur, bei mir ist es x86 von hier:
---> Ejabberd Download <---
wget https://static.process-one.net/ejabberd/downloads/25.07/ejabberd-25.07-1-linux-x64.run
Installer ausführbar machen:
Wir machen das Installationsskript mit vollgendenfolgenden Befehl ausführbar.
chmod +x ejabberd-25.07-1-linux-x64.run
Ejabberd installieren:
Wir installieren Ejabberd mit folgenden Befehl: Während das Script ausgeführt wird, wird uns angezeigt wo es installiert wird und betätigen die Installation mit y.
sudo ./ejabberd-*.run
Schauen wir uns kurz an wo es installiert ist. Am besten wir machen uns geleichgleich ein Backup der ejabberd.yml zur Sicherheit.
Enablen Service Ejabberd:
Wir enablen den Dienst Ejabberd damit es bei einem Neustart des Servers automatisch gestartet wir. Ich mache dadas nur zur Sicherheit, denn bei der Installation von Ejabberd hat das Einrichtung-Script das schon automatisch getan.erledigt.
sudo systemctl enable ejabberd
Stoppen von Ejabberd:
wir stoppen für den weiteren Verlauf erstmal den Ejabberd Server.
sudo systemctl stop ejabberd
Upload Verzeichnis erstellen:
Um später auch Bilder, Video und Dateien versenden zu können benötigen Wir ein Upload Verzeichnis welches später in der ejabberd.yml definiert wird. Wir erstellen es unter /opt nennen es "ejabberd_uploads". undWir vergeben die Berechtigungen für den User ejabberd darin lesen und schreiben zu können.
sudo cd /opt
sudo mkdir ejabberd_uploads
sudo chown ejabberd:ejabberd ejabberd_uploads
WirPostgresql Shell User und Datenbank anlegen:
Mit folgenden Befehl wechseln wir in die PostgresqlPosgresql Shell und entfernen gegebenenfalls vorhandene User und Datenbanken und legen einen neuen User an:Shell.
sudo -u postgres psql
Zuerst sollten wir prüfen ob schon eine Datenbank und ein User für Ejabberd angelegt wurde, eventuell von einer früheren Installation, nur zur Sicherheit, und sollten diese mit folgenden Befehlen löschen. Bei einer Neuinstallation müssen wir diesen Schritt nicht machen.
DROP DATABASE IF EXISTS ejabberd;
DROP USER IF EXISTS ejabberd_user;
Nun legen wir einen neuen User "ejabberd_user" mit einem Passwort "IhrSicheresPasswort" an. Diese Angaben müssen später in den Block "Datenbank" in der ejabberd.yml eingetragen werden. Zum Schluss verlassen wir die Postgresql Shell mit dem Befehl \q.
CREATE USER ejabberd_user WITH PASSWORD 'IhrSicheresPasswort';
CREATE DATABASE ejabberd OWNER ejabberd_user;
\q
Import der Postgresql Datenbank:
Wir Wirbefinden uns wieder im Terminal und importieren nun die EjabberdPostgresql Datenbank indie Postgresql,während der Installation mit dem Installation-Script unter folgenden Ort abgelegt wurde "/opt/ejabberd-25.07/lib/ejabberd-25.7.0/priv/sql/pg.sql". Führen Sie den Import aus.
Sie werden währen des Importes nach Ihrem Passwort gefragt daswelches sieSie weitermit oben im Schritt'IhrSicheresPasswort' angelegt haben 'IhrSicheresPasswort':hatten.
psql -h localhost -U ejabberd_user -d ejabberd -f /opt/ejabberd-25.07/lib/ejabberd-25.7.0/priv/sql/pg.sql
Der Import ist nun abgeschlossen. Die Postgresql Datenbank ist nun bereit für den Einsatz Ihres Ejabberd Servers.
Ejabberd einrichten, bearbeiten der ejabber.yml:
Im Voraus noch etwas Grundsätzliches im Umgang mit ACME und der Verwaltung von Zertifikaten in Ejabberd.
Das Modul ACME in Ejabberd verwaltet die Zerifikate vollständig automatisch, was wirklich super Toll ist, denn es erspart einem viel Arbeit! Aber!, jetzt kommt das aber;) Dies ist nur gegeben wenn man Ejabberd auf einem Server installiert auf welchen nur EJabberd läuft, sprich eine Art von "Standalone" Server. Bei vielen ist das aber nicht so.
Meistens, um Ressourcen auch voll nutzen zu wollen, laufen noch verschiedene andere Dienste auf dem Server, zum Beispiel ISPConfig oder andere Panels die Webspace Verwalten. Da wird es schwierig, weil dort auch meist schon ACME verwendet wird und käme mit dem Modul von ACME von Ejabberd in Konflikt, deswegen sollte man dort auf des Modul von ACME verzichten und die Pfade für die Zertifikate von Hand eintragen, welche für die Domain die Ejabberd verwendet zeigen.
Ich gebe Ihnen 2 Beispiele an die Hand die Sie verwenden können.
In diesen Beispiel nehmen wir die Version "Standalone" und verwenden das Ejabberd Modul ACME zu vollständigen Verwaltung unseres Zertifikate. Wir müssen hier nur sicherstellen das für unsere "Hauptdomain" im DNS Ihres Anbieters eine Wildcard * für Ihre Domain angelegt ist also "*.Hauptdomain.xyz".
AMCE prüft dann Automatisch ob es Zertifikate für folgende Subdomains erstellen kann: upload, proxy, pubsub und conference. Wenn nicht kommt es zu einem Fehler und es werden keine Zertifikate ausgestellt. Sollte es erfolgreich sein müssen wir lediglich noch in der Weboberfläche von Ejabberd uns ein Zertifikat für die Hauptdomain erstellen, danach der Ejabberd Server stoppen, in der ejabberd.yml Zeile ca_file: und certfiles: # auskommentieren. Ejabberd wieder starten, das war es.
ca_file: /opt/ejabberd/conf/cacert.pem
certfiles:
- /opt/ejabberd/conf/server.pem
zu
#ca_file: /opt/ejabberd/conf/cacert.pem
#certfiles:
# - /opt/ejabberd/conf/server.pem
Bei dem Beispiel wo Ejabberd auf einen Server mit ISPConfig oder anderen Verwaltungs-Tools laufen soll, sollten sie sicherstellen das alles Subdomains angelegt worden sind und das selbe Zertifikat wie die Hauptdomain nutzen! Die Pfade zu den Zertifikaten müssen Sie anpassen. Das Modul ACME sollte dann nach dem ersten Start deaktiviert werden und die Pfade müssen eingebunden sein.
certfiles:
- "/pfad/zu/.crt"
- "/pfad/zu.key"
#acme:
# contact: "mailto:admin@yyy.yyy"
# ca_url: "https://acme-v02.api.letsencrypt.org/directory"
Bearbeiten wir nun die ejabbed.yml.
Sie können sie löschen oder ein Backup erstellen, oder schauen Sie sich mal an, ich werde Ihnen nachfolgend meine ejabberd.yml zeigen.
Ich verwende einen VPS Server mit ISPconfig und einer bestehenden Domain daher verwende ich das Let'sencrypt Zertifikat von meiner Domain. Um nur ein Zertifikat zu verwenden habe ich Subdomains für Confernce, Upload, Proxy und Pubsub anglegt die kein eigenes Let'sencrypt verwenden sondern das von der Hauptdomain, das ist wichtig denn sonst geht es nicht.
Wenn Sie das ohne ISpConfig machen, also ein "Purer" VPS Server ist, dann stellen sie einfach nur per DNS sicher das Wildcards *.IhreDomain auf Ihren Server Zeigen dann macht das eingebaute ACME bei Ejabberd die Zertifikate für Ihre Domain und für Confernce, Upload, Proxy und Pubsub automatisch!!! Sie brauchen sich darum nicht mehr zu kümmern! Den Zertifikats Verweis in der ejabberd können Sie dann entfernen.
Wichtig!! Geben sie Ihre Domain an den richtigen Stellen ein! Das gleiche gilt für Ihre IP! Vergessen sie nicht den Admin in die ACL einzutragen!!!
hosts:
- IhreDomain
loglevel: info
### DATENBANK
default_db: sql
sql_type: pgsql
sql_server: "localhost"
sql_database: "ejabberd"
sql_username: "ejabberd_user"
sql_password: "IhrSicheresPasswort"
auth_method: [sql]
sql_pool_size: 10
###Pfad zu Ihren Cert's oder AMCE machen lassen, statt crt und key kann es auch eine pem sein
certfiles:
- "/pfad/zu *.crt"
- "/pfad/zu *.key"
listen:
-
port: 5222
ip: "::"
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
starttls_required: true
-
port: 5223
ip: "::"
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
tls: true
-
port: 5269
ip: "::"
module: ejabberd_s2s_in
max_stanza_size: 524288
shaper: s2s_shaper
-
port: 5443
ip: "::"
module: ejabberd_http
tls: true
request_handlers:
/admin: ejabberd_web_admin
/api: mod_http_api
/bosh: mod_bosh
# /captcha: ejabberd_captcha
/upload: mod_http_upload
/ws: ejabberd_http_ws
-
port: 3478
transport: udp
module: ejabberd_stun
use_turn: true
turn_min_port: 49152
turn_max_port: 49352
## The server's public IPv4 address:
turn_ipv4_address: IhrePublicIP
-
port: 5349
transport: tcp
module: ejabberd_stun
use_turn: true
tls: true
turn_min_port: 49152
turn_max_port: 65535
ip: IhrePublicIP
turn_ipv4_address: IhrePublicIP
s2s_use_starttls: optional
acl:
admin: # <--- NEUE ZEILEN HIER HINZUFÜGEN
user:
- "admin@xxxxx.xxxx"
local:
user_regexp: ""
loopback:
ip:
- 127.0.0.0/8
- ::1/128
access_rules:
local:
allow: local
c2s:
deny: blocked
allow: all
announce:
allow: admin
configure:
allow: admin
muc_create:
allow: local
pubsub_createnode:
allow: local
trusted_network:
allow: loopback
api_permissions:
"console commands":
from: ejabberd_ctl
who: all
what: "*"
"webadmin commands":
from: ejabberd_web_admin
who: admin
what: "*"
"adhoc commands":
from: mod_adhoc_api
who: admin
what: "*"
"http access":
from: mod_http_api
who:
access:
allow:
- acl: loopback
- acl: admin
oauth:
scope: "ejabberd:admin"
access:
allow:
- acl: loopback
- acl: admin
what:
- "*"
- "!stop"
- "!start"
"public commands":
who:
ip: 127.0.0.1/8
what:
- status
- connected_users_number
shaper:
normal:
rate: 10000
burst_size: 500000
fast: 500000
shaper_rules:
max_user_sessions: 10
max_user_offline_messages:
5000: admin
100: all
c2s_shaper:
none: admin
normal: all
s2s_shaper: fast
modules:
mod_adhoc: {}
mod_adhoc_api: {}
mod_admin_extra: {}
mod_announce:
access: announce
mod_avatar: {}
mod_blocking: {}
mod_bosh: {}
mod_caps: {}
mod_carboncopy: {}
mod_client_state: {}
mod_configure: {}
mod_disco: {}
mod_fail2ban: {}
mod_http_api: {}
mod_http_upload:
docroot: "/opt/ejabberd_uploads"
put_url: https://@HOST@:5443/upload
max_size: 104857600 # Maximale Dateigröße in Bytes (hier: 100 MB)
custom_headers:
"Access-Control-Allow-Origin": "https://@HOST@"
"Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
"Access-Control-Allow-Headers": "Content-Type"
mod_last: {}
mod_mam:
## Mnesia is limited to 2GB, better to use an SQL backend
## For small servers SQLite is a good fit and is very easy
## to configure. Uncomment this when you have SQL configured:
db_type: sql
assume_mam_usage: true
default: always
mod_mqtt: {}
mod_muc:
access:
- allow
access_admin:
- allow: admin
access_create: muc_create
access_persistent: muc_create
access_mam:
- allow
default_room_options:
mam: true
mod_muc_admin: {}
mod_muc_occupantid: {}
mod_offline:
access_max_user_messages: max_user_offline_messages
mod_ping: {}
mod_privacy: {}
mod_private: {}
mod_proxy65:
access: local
max_connections: 5
mod_pubsub:
access_createnode: pubsub_createnode
plugins:
- flat
- pep
force_node_config:
## Avoid buggy clients to make their bookmarks public
storage:bookmarks:
access_model: whitelist
mod_push: {}
mod_push_keepalive: {}
mod_register:
ip_access: trusted_network
mod_roster:
versioning: true
mod_s2s_bidi: {}
mod_s2s_dialback: {}
mod_shared_roster: {}
mod_stream_mgmt:
resend_on_timeout: if_offline
mod_stun_disco:
credentials_lifetime: 12h
services:
-
host: IhrePublicIP
port: 3478
type: stun
transport: udp
restricted: false
-
host: IhrePublicIP
port: 3478
type: turn
transport: udp
restricted: true
-
host: IhreDomain
port: 5349
type: stuns
transport: tcp
restricted: false
-
host: IhreDomain
port: 5349
type: turns
transport: tcp
restricted: true
mod_vcard: {}
mod_vcard_xupdate: {}
mod_version:
show_os: false
###Wenn Sie ACME nutzen möchten müssen Sie das darunte stehende auskommentieren und anpassen,
#acme:
# contact: "mailto:admin@xxxxx.xxx"
# ca_url: "https://acme-v02.api.letsencrypt.org/directory"
Hier noch eine Konfiguration eines VPS "Sandalone" Servers wo sich ACME um die Zertifikate selber kümmert.
hosts:
- IhreDomain
loglevel: info
###Nach den ersten starten und wenn AMCE die Let' Encrypt Zertifikate angelegt hat kann das auskommentiert werden
#ca_file: /opt/ejabberd/conf/cacert.pem
###Nach den ersten starten und wenn AMCE die Let' Encrypt Zertifikate angelegt hat kann das auskommentiert werden
#certfiles:
# - /opt/ejabberd/conf/server.pem
###Wichtig auch nach dem zweiten Start in die Adminoberfläche gehen und unter ACME noch das Zerifikat ür die Hauptdomain austellen, ###dann erst oben Auskommentieren!!!
### DATENBANK
default_db: sql
sql_type: pgsql
sql_server: "localhost"
sql_database: "ejabberd"
sql_username: "ejabberd_user"
sql_password: "IhrsicheresPasswort"
auth_method: [sql]
sql_pool_size: 10
listen:
-
port: 5222
ip: "::"
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
starttls_required: true
-
port: 5223
ip: "::"
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
tls: true
-
port: 5269
ip: "::"
module: ejabberd_s2s_in
max_stanza_size: 524288
shaper: s2s_shaper
-
port: 5443
ip: "::"
module: ejabberd_http
tls: true
request_handlers:
/admin: ejabberd_web_admin
/api: mod_http_api
/bosh: mod_bosh
# /captcha: ejabberd_captcha
/upload: mod_http_upload
/ws: ejabberd_http_ws
-
port: 80
ip: "::"
module: ejabberd_http
request_handlers:
# /admin: ejabberd_web_admin
/.well-known/acme-challenge: ejabberd_acme
-
port: 3478
transport: udp
module: ejabberd_stun
use_turn: true
turn_min_port: 49152
turn_max_port: 65535
## The server's public IPv4 address:
turn_ipv4_address: IhreIP
-
port: 5349
transport: tcp
module: ejabberd_stun
use_turn: true
tls: true
turn_min_port: 49152
turn_max_port: 65535
ip: IhreIP
turn_ipv4_address: IhreIP
s2s_use_starttls: optional
acl:
admin: # <--- NEUE ZEILEN HIER HINZUFÜGEN
user:
- "admin@IhreDomain"
local:
user_regexp: ""
loopback:
ip:
- 127.0.0.0/8
- ::1/128
access_rules:
local:
allow: local
c2s:
deny: blocked
allow: all
announce:
allow: admin
configure:
allow: admin
muc_create:
allow: local
pubsub_createnode:
allow: local
trusted_network:
allow: loopback
api_permissions:
"console commands":
from: ejabberd_ctl
who: all
what: "*"
"webadmin commands":
from: ejabberd_web_admin
who: admin
what: "*"
"adhoc commands":
from: mod_adhoc_api
who: admin
what: "*"
"http access":
from: mod_http_api
who:
access:
allow:
- acl: loopback
- acl: admin
oauth:
scope: "ejabberd:admin"
access:
allow:
- acl: loopback
- acl: admin
what:
- "*"
- "!stop"
- "!start"
"public commands":
who:
ip: 127.0.0.1/8
what:
- status
- connected_users_number
shaper:
normal:
rate: 10000
burst_size: 500000
fast: 500000
shaper_rules:
max_user_sessions: 10
max_user_offline_messages:
5000: admin
100: all
c2s_shaper:
none: admin
normal: all
s2s_shaper: fast
modules:
mod_adhoc: {}
mod_adhoc_api: {}
mod_admin_extra: {}
mod_announce:
access: announce
mod_avatar: {}
mod_blocking: {}
mod_bosh: {}
mod_caps: {}
mod_carboncopy: {}
mod_client_state: {}
mod_configure: {}
mod_disco: {}
mod_fail2ban: {}
mod_http_api: {}
mod_http_upload:
docroot: "/opt/ejabberd_uploads"
put_url: https://@HOST@:5443/upload
max_size: 104857600 # Maximale Dateigröße in Bytes (hier: 100 MB)
custom_headers:
"Access-Control-Allow-Origin": "https://@HOST@"
"Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
"Access-Control-Allow-Headers": "Content-Type"
mod_last: {}
mod_mam:
## Mnesia is limited to 2GB, better to use an SQL backend
## For small servers SQLite is a good fit and is very easy
## to configure. Uncomment this when you have SQL configured:
db_type: sql
assume_mam_usage: true
default: always
mod_mqtt: {}
mod_muc:
access:
- allow
access_admin:
- allow: admin
access_create: muc_create
access_persistent: muc_create
access_mam:
- allow
default_room_options:
mam: true
mod_muc_admin: {}
mod_muc_occupantid: {}
mod_offline:
access_max_user_messages: max_user_offline_messages
mod_ping: {}
mod_privacy: {}
mod_private: {}
mod_proxy65:
access: local
max_connections: 5
mod_pubsub:
access_createnode: pubsub_createnode
plugins:
- flat
- pep
force_node_config:
## Avoid buggy clients to make their bookmarks public
storage:bookmarks:
access_model: whitelist
mod_push: {}
mod_push_keepalive: {}
mod_register:
ip_access: trusted_network
mod_roster:
versioning: true
mod_s2s_bidi: {}
mod_s2s_dialback: {}
mod_shared_roster: {}
mod_stream_mgmt:
resend_on_timeout: if_offline
mod_stun_disco:
credentials_lifetime: 12h
services:
-
host: IhreIP
port: 3478
type: stun
transport: udp
restricted: false
-
host: IhreIP
port: 3478
type: turn
transport: udp
restricted: true
-
host: IhreDomain
port: 5349
type: stuns
transport: tcp
restricted: false
-
host: IhreDomain
port: 5349
type: turns
transport: tcp
restricted: true
mod_vcard: {}
mod_vcard_xupdate: {}
mod_version:
show_os: false
acme:
contact: "mailto:admin@IhreDomain"
ca_url: "https://acme-v02.api.letsencrypt.org/directory"
Wenn das alles erledigt ist starten Sie Ejabberd:
sudo systemctl start ejabberd
Sollte es Fehler geben oder er starte nicht, starten Sie Ejabberd im Vordergrund:
cd /opt/ejabberd-25.07
./ejabberdctl foreground
Zur Fehleranalyse starten Sie gegebenenfalls ein zweites Terminal und führen Sie folgenden Befehl aus:
tail -f /opt/ejabberd/logs/ejabberd.log
oder diesen
tail -f /opt/ejabberd/logs/error.log
Läuft alles normal und er startet ohne Fehler legen wir jetzt noch den Admin User an damit sie ich auf der Webseite von Ejabberd einloggen können.
sudo /opt/ejabberd-25.07/bin/ejabberdctl register admin IhreDomain IhrSicheresPasswort
Vergessen Sie nicht Ihre Firewall Regeln anzupassen!!!!
Deinstallation Ejabberd:
# To uninstall ejabberd, first remove the service. If you're using systemd:
systemctl --now disable ejabberd
rm -f /etc/systemd/system/ejabberd.service
# Remove the binary files:
rm -rf /opt/ejabberd-25.07
# If you want to remove your configuration, database and logs:
rm -rf /opt/ejabberd
rm -rf /opt/ejabberd_uploads/
# To remove the user running ejabberd:
userdel ejabberd