Hello 馃槂
I am looking into deploying Jitsi using Traefik. I am looking for basic audio and video call functionality.
For this, do I need to deploy jigasi ?
Furthermore:
PUBLIC_URL environment variable?I assume I will need to ensure the relevant ports are open and forwarded correctly too.
Thanks in advance :-)
Hey! I don't know if you got your setup running and just what to get more into it - or you seek help getting your setup running. If it is the latter, I can give you my jitsi + traefik setup as example how it works for me.
From the perspective of my experience and not being an expert, regarding your questions:
jigasi. In fact, I didn't know what it was until now, because I just used the basic docker-compose file provided here.PUBLIC_URL in the .env file. But I'm not sure if it really is necessary.ENABLE_RECORDING stays commented (i.e. not set to 1) and you don't accidentally deploy jibri. Again, this is not the case if you only the the basic docker-compose file.Hi @jakesmolka,
Thanks for replying. Would you able to share your example please?
Thanks.
We have an examples directory in the dev branch, you are welcome to contribute your config with a PR so we can add it there!
Hi, working example(at least for me) with traefik.
I've added comments to the relevant parts, otherwise it's the default.
Make sure to uncomment and add your host ip in .env :
DOCKER_HOST_ADDRESS=1.2.3.4
Example docker-compose.yml with traefik(still running on traefik 1.7).
````
version: '3'
services:
# Frontend
web:
image: jitsi/web
#traefik
#ports:
# - '${HTTP_PORT}:80'
# - '${HTTPS_PORT}:443'
#traefik end
volumes:
- ${CONFIG}/web:/config
- ${CONFIG}/web/letsencrypt:/etc/letsencrypt
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts
environment:
- ENABLE_AUTH
- ENABLE_GUESTS
- ENABLE_LETSENCRYPT
- ENABLE_HTTP_REDIRECT
- ENABLE_TRANSCRIPTIONS
- DISABLE_HTTPS
- JICOFO_AUTH_USER
- LETSENCRYPT_DOMAIN
- LETSENCRYPT_EMAIL
- PUBLIC_URL
- XMPP_DOMAIN
- XMPP_AUTH_DOMAIN
- XMPP_BOSH_URL_BASE
- XMPP_GUEST_DOMAIN
- XMPP_MUC_DOMAIN
- XMPP_RECORDER_DOMAIN
- ETHERPAD_URL_BASE
- TZ
- JIBRI_BREWERY_MUC
- JIBRI_PENDING_TIMEOUT
- JIBRI_XMPP_USER
- JIBRI_XMPP_PASSWORD
- JIBRI_RECORDER_USER
- JIBRI_RECORDER_PASSWORD
- ENABLE_RECORDING
networks:
#traefik
web:
#traefik end
meet.jitsi:
aliases:
- ${XMPP_DOMAIN}
#traefik
labels:
- "traefik.docker.network=web"
- "traefik.enable=true"
- "traefik.backend=jc_backend"
- "traefik.basic.frontend.rule=Host:your.host.name"
- "traefik.basic.port=80"
#traefik end
# XMPP server
prosody:
image: jitsi/prosody
expose:
- '5222'
- '5347'
- '5280'
volumes:
- ${CONFIG}/prosody:/config
environment:
- AUTH_TYPE
- ENABLE_AUTH
- ENABLE_GUESTS
- GLOBAL_MODULES
- GLOBAL_CONFIG
- LDAP_URL
- LDAP_BASE
- LDAP_BINDDN
- LDAP_BINDPW
- LDAP_FILTER
- LDAP_AUTH_METHOD
- LDAP_VERSION
- LDAP_USE_TLS
- LDAP_TLS_CIPHERS
- LDAP_TLS_CHECK_PEER
- LDAP_TLS_CACERT_FILE
- LDAP_TLS_CACERT_DIR
- LDAP_START_TLS
- XMPP_DOMAIN
- XMPP_AUTH_DOMAIN
- XMPP_GUEST_DOMAIN
- XMPP_MUC_DOMAIN
- XMPP_INTERNAL_MUC_DOMAIN
- XMPP_MODULES
- XMPP_MUC_MODULES
- XMPP_INTERNAL_MUC_MODULES
- XMPP_RECORDER_DOMAIN
- JICOFO_COMPONENT_SECRET
- JICOFO_AUTH_USER
- JICOFO_AUTH_PASSWORD
- JVB_AUTH_USER
- JVB_AUTH_PASSWORD
- JIGASI_XMPP_USER
- JIGASI_XMPP_PASSWORD
- JIBRI_XMPP_USER
- JIBRI_XMPP_PASSWORD
- JIBRI_RECORDER_USER
- JIBRI_RECORDER_PASSWORD
- JWT_APP_ID
- JWT_APP_SECRET
- JWT_ACCEPTED_ISSUERS
- JWT_ACCEPTED_AUDIENCES
- JWT_ASAP_KEYSERVER
- JWT_ALLOW_EMPTY
- JWT_AUTH_TYPE
- JWT_TOKEN_AUTH_MODULE
- LOG_LEVEL
- TZ
networks:
meet.jitsi:
aliases:
- ${XMPP_SERVER}
# Focus component
jicofo:
image: jitsi/jicofo
volumes:
- ${CONFIG}/jicofo:/config
environment:
- ENABLE_AUTH
- XMPP_DOMAIN
- XMPP_AUTH_DOMAIN
- XMPP_INTERNAL_MUC_DOMAIN
- XMPP_SERVER
- JICOFO_COMPONENT_SECRET
- JICOFO_AUTH_USER
- JICOFO_AUTH_PASSWORD
- JICOFO_RESERVATION_REST_BASE_URL
- JVB_BREWERY_MUC
- JIGASI_BREWERY_MUC
- JIBRI_BREWERY_MUC
- JIBRI_PENDING_TIMEOUT
- TZ
depends_on:
- prosody
networks:
meet.jitsi:
# Video bridge
jvb:
image: jitsi/jvb
ports:
- '${JVB_PORT}:${JVB_PORT}/udp'
- '${JVB_TCP_PORT}:${JVB_TCP_PORT}'
volumes:
- ${CONFIG}/jvb:/config
environment:
- DOCKER_HOST_ADDRESS
- XMPP_AUTH_DOMAIN
- XMPP_INTERNAL_MUC_DOMAIN
- XMPP_SERVER
- JVB_AUTH_USER
- JVB_AUTH_PASSWORD
- JVB_BREWERY_MUC
- JVB_PORT
- JVB_TCP_HARVESTER_DISABLED
- JVB_TCP_PORT
- JVB_STUN_SERVERS
- JVB_ENABLE_APIS
- TZ
depends_on:
- prosody
networks:
meet.jitsi:
networks:
meet.jitsi:
#traefik
web:
external: true
#traefik end
````
Hi @SebastianKobs,
Thanks a lot for posting your traefik example! 馃憤馃徎I will try it ASAP!
Hey folks! Once you get it working what do you think about contributing the Traefik example to this excamples directory here: https://github.com/jitsi/docker-jitsi-meet/tree/master/examples
Cheers!
Hey folks! Once you get it working what do you think about contributing the Traefik example to this excamples directory here: https://github.com/jitsi/docker-jitsi-meet/tree/master/examples
Cheers!
Oh! Merged, thank you!
Hey @SebastianKobs could you please provide the .env file you used in your deployment?
Also @saghul, if you don't mind me asking. By default many of the values in the .env file are commented out, can I leave these commented out and it will just use defaults?
Thanks.
EDIT: or does it ignore them entirely?
Here is the .env file I have currently.
#
# Basic configuration options
#
# Directory where all configuration will be stored.
CONFIG=~/.jitsi-meet-cfg
# Exposed HTTP port.
HTTP_PORT=80
# Exposed HTTPS port.
HTTPS_PORT=443
# System time zone.
TZ=Europe/Amsterdam
# Public URL for the web service.
#PUBLIC_URL=https://meet.example.com
# IP address of the Docker host. See the "Running on a LAN environment" section
# in the README.
DOCKER_HOST_ADDRESS=**mypubliciphere**
#
# Let's Encrypt configuration
#
# Enable Let's Encrypt certificate generation.
ENABLE_LETSENCRYPT=0
# Domain for which to generate the certificate.
#LETSENCRYPT_DOMAIN=meet.example.com
# E-Mail for receiving important account notifications (mandatory).
#[email protected]
#
# Etherpad integration (for document sharing)
#
# Set etherpad-lite URL (uncomment to enable).
#ETHERPAD_URL_BASE=http://etherpad.meet.jitsi:9001
#
# Basic Jigasi configuration options (needed for SIP gateway support)
#
# SIP URI for incoming / outgoing calls.
#[email protected]
# Password for the specified SIP account as a clear text
#JIGASI_SIP_PASSWORD=passw0rd
# SIP server (use the SIP account domain if in doubt).
#JIGASI_SIP_SERVER=sip2sip.info
# SIP server port
#JIGASI_SIP_PORT=5060
# SIP server transport
#JIGASI_SIP_TRANSPORT=UDP
#
# Authentication configuration (see README for details)
#
# Enable authentication.
ENABLE_AUTH=1
# Enable guest access.
ENABLE_GUESTS=1
# Select authentication type: internal, jwt or ldap
AUTH_TYPE=internal
# JWT auuthentication
#
# Application identifier.
#JWT_APP_ID=my_jitsi_app_id
# Application secret known only to your token.
#JWT_APP_SECRET=my_jitsi_app_secret
# (Optional) Set asap_accepted_issuers as a comma separated list.
#JWT_ACCEPTED_ISSUERS=my_web_client,my_app_client
# (Optional) Set asap_accepted_audiences as a comma separated list.
#JWT_ACCEPTED_AUDIENCES=my_server1,my_server2
# LDAP authentication (for more information see the Cyrus SASL saslauthd.conf man page)
#
# LDAP url for connection.
#LDAP_URL=ldaps://ldap.domain.com/
# LDAP base DN. Can be empty
#LDAP_BASE=DC=example,DC=domain,DC=com
# LDAP user DN. Do not specify this parameter for the anonymous bind.
#LDAP_BINDDN=CN=binduser,OU=users,DC=example,DC=domain,DC=com
# LDAP user password. Do not specify this parameter for the anonymous bind.
#LDAP_BINDPW=LdapUserPassw0rd
# LDAP filter. Tokens example:
# %1-9 - if the input key is [email protected], then %1 is com, %2 is domain and %3 is mail.
# %s - %s is replaced by the complete service string.
# %r - %r is replaced by the complete realm string.
#LDAP_FILTER=(sAMAccountName=%u)
# LDAP authentication method
#LDAP_AUTH_METHOD=bind
# LDAP version
#LDAP_VERSION=3
# LDAP TLS using
#LDAP_USE_TLS=1
# List of SSL/TLS ciphers to allow.
#LDAP_TLS_CIPHERS=SECURE256:SECURE128:!AES-128-CBC:!ARCFOUR-128:!CAMELLIA-128-CBC:!3DES-CBC:!CAMELLIA-128-CBC
# Require and verify server certificate
#LDAP_TLS_CHECK_PEER=1
# Path to CA cert file. Used when server sertificate verify is enabled.
#LDAP_TLS_CACERT_FILE=/etc/ssl/certs/ca-certificates.crt
# Path to CA certs directory. Used when server sertificate verify is enabled.
#LDAP_TLS_CACERT_DIR=/etc/ssl/certs
# Wether to use starttls, implies LDAPv3 and requires ldap:// instead of ldaps://
# LDAP_START_TLS=1
#
# Advanced configuration options (you generally don't need to change these)
#
# Internal XMPP domain.
XMPP_DOMAIN=meet.jitsi
# Internal XMPP server
XMPP_SERVER=xmpp.meet.jitsi
# Internal XMPP server URL
XMPP_BOSH_URL_BASE=http://xmpp.meet.jitsi:5280
# Internal XMPP domain for authenticated services.
XMPP_AUTH_DOMAIN=auth.meet.jitsi
# XMPP domain for the MUC.
XMPP_MUC_DOMAIN=muc.meet.jitsi
# XMPP domain for the internal MUC used for jibri, jigasi and jvb pools.
XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
# XMPP domain for unauthenticated users.
XMPP_GUEST_DOMAIN=guest.meet.jitsi
# Custom Prosody modules for XMPP_DOMAIN (comma separated)
XMPP_MODULES=
# Custom Prosody modules for MUC component (comma separated)
XMPP_MUC_MODULES=
# Custom Prosody modules for internal MUC component (comma separated)
XMPP_INTERNAL_MUC_MODULES=
# MUC for the JVB pool.
JVB_BREWERY_MUC=jvbbrewery
# XMPP user for JVB client connections.
JVB_AUTH_USER=jvb
# XMPP password for JVB client connections.
JVB_AUTH_PASSWORD=passw0rd
# STUN servers used to discover the server's public IP.
JVB_STUN_SERVERS=stun.l.google.com:19302,stun1.l.google.com:19302,stun2.l.google.com:19302
# Media port for the Jitsi Videobridge
JVB_PORT=10000
# TCP Fallback for Jitsi Videobridge for when UDP isn't available
JVB_TCP_HARVESTER_DISABLED=true
JVB_TCP_PORT=4443
# A comma separated list of APIs to enable when the JVB is started. The default is none.
# See https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest.md for more information
#JVB_ENABLE_APIS=rest,colibri
# XMPP component password for Jicofo.
JICOFO_COMPONENT_SECRET=s3cr37
# XMPP user for Jicofo client connections. NOTE: this option doesn't currently work due to a bug.
JICOFO_AUTH_USER=focus
# XMPP password for Jicofo client connections.
JICOFO_AUTH_PASSWORD=passw0rd
# Base URL of Jicofo's reservation REST API
#JICOFO_RESERVATION_REST_BASE_URL=http://reservation.example.com
# XMPP user for Jigasi MUC client connections.
JIGASI_XMPP_USER=jigasi
# XMPP password for Jigasi MUC client connections.
JIGASI_XMPP_PASSWORD=passw0rd
# MUC name for the Jigasi pool.
JIGASI_BREWERY_MUC=jigasibrewery
# Minimum port for media used by Jigasi.
JIGASI_PORT_MIN=20000
# Maximum port for media used by Jigasi.
JIGASI_PORT_MAX=20050
# Enable SDES srtp
#JIGASI_ENABLE_SDES_SRTP=1
# Keepalive method
#JIGASI_SIP_KEEP_ALIVE_METHOD=OPTIONS
# Health-check extension
#JIGASI_HEALTH_CHECK_SIP_URI=keepalive
# Health-check interval
#JIGASI_HEALTH_CHECK_INTERVAL=300000
#
# Enable Jigasi transcription.
ENABLE_TRANSCRIPTIONS=0
# Jigasi will recordord an audio when transcriber is on. Default false.
#JIGASI_TRANSCRIBER_RECORD_AUDIO=true
# Jigasi will send transcribed text to the chat when transcriber is on. Default false.
#JIGASI_TRANSCRIBER_SEND_TXT=true
# Jigasi post to the chat an url with transcription file. Default false.
#JIGASI_TRANSCRIBER_ADVERTISE_URL=true
# Credentials for connect to Cloud Google API from Jigasi
# Please read https://cloud.google.com/text-to-speech/docs/quickstart-protocol section "Before you begin" from 1 to 5 paragraph.
# Copy the values from the json to the related env vars
#GC_PROJECT_ID=
#GC_PRIVATE_KEY_ID=
#GC_PRIVATE_KEY=
#GC_CLIENT_EMAIL=
#GC_CLIENT_ID=
#GC_CLIENT_CERT_URL=
# Enable recording
ENABLE_RECORDING=0
# XMPP domain for the jibri recorder
XMPP_RECORDER_DOMAIN=recorder.meet.jitsi
# XMPP recorder user for Jibri client connections.
JIBRI_RECORDER_USER=recorder
# XMPP recorder password for Jibri client connections.
JIBRI_RECORDER_PASSWORD=passw0rd
# Directory for recordings inside Jibri container.
JIBRI_RECORDING_DIR=/config/recordings
# The finalizing script. Will run after recording is complete.
JIBRI_FINALIZE_RECORDING_SCRIPT_PATH=/config/finalize.sh
# XMPP user for Jibri client connections.
JIBRI_XMPP_USER=jibri
# XMPP password for Jibri client connections.
JIBRI_XMPP_PASSWORD=passw0rd
# MUC name for the Jibri pool.
JIBRI_BREWERY_MUC=jibribrewery
# MUC connection timeout
JIBRI_PENDING_TIMEOUT=90
# When jibri gets a request to start a service for a room, the room
# jid will look like: [email protected]_domain
# We'll build the url for the call by transforming that into:
# https://xmpp_domain/subdomain/roomName
# So if there are any prefixes in the jid (like jitsi meet, which
# has its participants join a muc at conference.xmpp_domain) then
# list that prefix here so it can be stripped out to generate
# the call url correctly.
JIBRI_STRIP_DOMAIN_JID=muc
# Directory for logs inside Jibri container.
JIBRI_LOGS_DIR=/config/logs
# Disable HTTPS. This can be useful if TLS connections are going to be handled outside of this setup.
DISABLE_HTTPS=1
# Redirects HTTP traffic to HTTPS. Only works with the standard HTTPS port (443).
#ENABLE_HTTP_REDIRECT=1
@Dextroz sure
````bash
#
#
CONFIG=~/.jitsi-meet-cfg
HTTP_PORT=8000
HTTPS_PORT=8443
TZ=Europe/Amsterdam
PUBLIC_URL="https://my.domain.tld"
DOCKER_HOST_ADDRESS=1.2.3.4
#
#
ENABLE_LETSENCRYPT=0
#
#
#
#
#
#
ENABLE_AUTH=1
ENABLE_GUESTS=1
AUTH_TYPE=internal
#
#
#
#
XMPP_DOMAIN=meet.jitsi
XMPP_SERVER=xmpp.meet.jitsi
XMPP_BOSH_URL_BASE=http://xmpp.meet.jitsi:5280
XMPP_AUTH_DOMAIN=auth.meet.jitsi
XMPP_MUC_DOMAIN=muc.meet.jitsi
XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
XMPP_GUEST_DOMAIN=guest.meet.jitsi
XMPP_MODULES=
XMPP_MUC_MODULES=
XMPP_INTERNAL_MUC_MODULES=
JVB_BREWERY_MUC=jvbbrewery
JVB_AUTH_USER=jvb
JVB_AUTH_PASSWORD=passw0rd
JVB_STUN_SERVERS=stun.l.google.com:19302,stun1.l.google.com:19302,stun2.l.google.com:19302
JVB_PORT=10000
JVB_TCP_HARVESTER_DISABLED=true
JVB_TCP_PORT=4443
JICOFO_COMPONENT_SECRET=s3cr37
JICOFO_AUTH_USER=focus
JICOFO_AUTH_PASSWORD=passw0rd
JIGASI_XMPP_USER=jigasi
JIGASI_XMPP_PASSWORD=passw0rd
JIGASI_BREWERY_MUC=jigasibrewery
JIGASI_PORT_MIN=20000
JIGASI_PORT_MAX=20050
#
XMPP_RECORDER_DOMAIN=recorder.meet.jitsi
JIBRI_RECORDER_USER=recorder
JIBRI_RECORDER_PASSWORD=passw0rd
JIBRI_RECORDING_DIR=/config/recordings
JIBRI_FINALIZE_RECORDING_SCRIPT_PATH=/config/finalize.sh
JIBRI_XMPP_USER=jibri
JIBRI_XMPP_PASSWORD=passw0rd
JIBRI_BREWERY_MUC=jibribrewery
JIBRI_PENDING_TIMEOUT=90
JIBRI_STRIP_DOMAIN_JID=muc
JIBRI_LOGS_DIR=/config/logs
````
I do ssl via traefik. comment out and set the public url.
@SebastianKobs the only differences I can see between our two .env files are:
DISABLE_HTTPS=1 uncommented as I want traefik to handle HTTPS.You can ignore the DISABLE_HTTPS setting(i did). Traefik is bound to port 80. The ports are irrelevant too, no host binds needed for traefik. It will be the public url. Mandatory if not in private space. The README is not clear at all with the distinction between local and public hosting. and the naming is a bit iffy on DOCKER_HOST_ADDRESS me thinks. Will propably file another pull request for that, if I find some time.
Ok thanks @SebastianKobs. I have set them to the ports I am using just in-case anyways.
EDIT: I see now. The traefik compose file you created, doesn't use the .env files for the ports.
If you change the .env, remove the config directory ~/.jitsi-meet-cfg otherwise it won't pick up your changes. Just in case you've missed that step in the readme ;)
@SebastianKobs Don't I do that only if I make changes once I have deployed Jitsi?
@Dextroz I assumed you did for testing your setup. config gets written on docker-compose up -d, if not present, afterwards it stays the same.
Going to attempt the deployment now.
Deployment was successful. Thanks @SebastianKobs 馃槃
Hello,
Sorry:) can you help with traefik configuration? Which ports should be exposed on traefik? Could you pose traefik docker-compose.yml
@levasc On the traefik container itself?
The example compose file which @SebastianKobs made can be found here
This compose setup assumes you already have Traefik deployed.
If you need information about deploying Traefik itself, I found this guide from digitalocean most useful. Obviously, you don't have to follow all of the steps in this guide as they are not a nessesity, for example, exposing the Traefik dashboard.
Thank you :) Yes, the traefik container itself. For example, according to this example:
https://docs.traefik.io/user-guides/docker-compose/basic-example/
Which ports should be opened on the traefic container itself (sections ports and entrypoints) for jitsi-meet to work
now that Traefik supports UDP, do we need to expose 10000/udp as well?
Most helpful comment
Hi, working example(at least for me) with traefik.
I've added comments to the relevant parts, otherwise it's the default.
Make sure to uncomment and add your host ip in .env :
DOCKER_HOST_ADDRESS=1.2.3.4Example docker-compose.yml with traefik(still running on traefik 1.7).
````
version: '3'
services:
# Frontend
web:
image: jitsi/web
#traefik
#ports:
# - '${HTTP_PORT}:80'
# - '${HTTPS_PORT}:443'
#traefik end
volumes:
- ${CONFIG}/web:/config
- ${CONFIG}/web/letsencrypt:/etc/letsencrypt
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts
environment:
- ENABLE_AUTH
- ENABLE_GUESTS
- ENABLE_LETSENCRYPT
- ENABLE_HTTP_REDIRECT
- ENABLE_TRANSCRIPTIONS
- DISABLE_HTTPS
- JICOFO_AUTH_USER
- LETSENCRYPT_DOMAIN
- LETSENCRYPT_EMAIL
- PUBLIC_URL
- XMPP_DOMAIN
- XMPP_AUTH_DOMAIN
- XMPP_BOSH_URL_BASE
- XMPP_GUEST_DOMAIN
- XMPP_MUC_DOMAIN
- XMPP_RECORDER_DOMAIN
- ETHERPAD_URL_BASE
- TZ
- JIBRI_BREWERY_MUC
- JIBRI_PENDING_TIMEOUT
- JIBRI_XMPP_USER
- JIBRI_XMPP_PASSWORD
- JIBRI_RECORDER_USER
- JIBRI_RECORDER_PASSWORD
- ENABLE_RECORDING
networks:
#traefik
web:
#traefik end
meet.jitsi:
aliases:
- ${XMPP_DOMAIN}
#traefik
labels:
- "traefik.docker.network=web"
- "traefik.enable=true"
- "traefik.backend=jc_backend"
- "traefik.basic.frontend.rule=Host:your.host.name"
- "traefik.basic.port=80"
#traefik end
Custom network so all services can communicate using a FQDN
networks:
meet.jitsi:
#traefik
web:
external: true
#traefik end
````