Pass Multiple parameter to jitsi-meet apt package when installing via dockerfile RUN command

Here is a portion of docker file I am using to build my docker image:

RUN printf "yes\nlocalhost\n1\n" | apt-get install jitsi-meet

I am using ubuntu as base image and added jitsi meet repository. The installation of jitsi-meet package takes in 2 inputs. The first one specifies the host for JVB(Jitsi video bridge) and the second parameter i.e. 1 specifies that I want to generate a SSL certificate from Lets Encrypt. The yes is provided for the apt-get installation prompt. The issue here is that it doesn’t take in 1 as the parameter and just waits for the input indefinitely. I have read this https://stackoverflow.com/questions/50195301/auto-input-to-make-multiple-chooses-of-a-script-in-dockerfile question which is very similar but the answer there suggests to modify the script which takes input to read environment variables which in my case I can’t. The logs after running the last step can be found here https://github.com/MUCCHU/OutputLog/blob/main/log.txt. Any help is appreciated. Thank You.

You’ll need to look in the code for the name of the prompt and then you can set it like so: db_set jitsi-videobridge/jvb-hostname "localhost"

On a related note: we’ve spent quite some time in our Docker images (GitHub - jitsi/docker-jitsi-meet: Jitsi Meet on Docker) any reason why you can’t use those?

Hi @saghul. Harsh is my friend. We both are building a video calling app with Django Rest framework. I had posted a different question to which I didn’t receive an answer so I asked harsh to post this time around and see if anyone finds time to respond.

To answer your question , we faced problems with docker-jitsi meet since we were making changes to the local files and they weren’t reflecting in the containers. Docker volumes used to get overwritten every time we stopped and re-ran the containers.

Our end goal is to Integrate Jitsi with our Backend Django REST API with a custom UI on the front-end using Flutter. We wish to initiate a conference(a video call) from our Django backend to Jitsi backend running as a separate container. Django will be used for database meeting records. We tried docker jitsi with no success.

Right now we are exploring the lib-jitsi-api and have started to create a docker file to install the api package. But the core dilemma we are facing is

  1. Do all the features of jitsi meet docker get retained (videobridge, xmpp server etc) here including the security features like e2ee ?

  2. Since Django REST is a widely used framework is there a tutorial on how to go about it with lib-jitsi-meet api.

Sorry for replying on behalf of Harsh, he’s currently in college and I was itching to reply to get a solution out of this.

Yes. In fact I’d recommend you use our setup just for getting the whole backend and lib-jitsi-meet JS. Your app can then source it on your web app.

Not that I know of. LJM is a pure JS library, so there would be mostly client side code there, no Django AFAIS.

What do you intend to use Django for here?

1 Like

Yes. In fact I’d recommend you use our setup just for getting the whole backend and lib-jitsi-meet JS. Your app can then source it on your web app.

  • By this you mean the jitsi docker spawning all containers ? . We are unable to make changes as the docker files are getting overwritten.

Im using django for my social app which needs to have a video calling feature. But im scracthing my head around this. It needs to communicate with jitsi to initiate the call and and manage call records in django alongwith user records. Im not sure the best approach for this. The front end im using the versatile flutter which also includes rhe web component.

Actually we have our user authentication and some other features set up in django application. So we would like to integrate jitsi-meet and modify it so as to use the features of our django application. As of now we have planned that we will modify the frontend container accordingly so that we can integrate it seamlessly with our django app. Please suggest a better approach if you feel we are going the wrong way.

What changes do you want to make?

Have you considered the iframe API?

If you have auth in your app it’s likely that you’ll end up using JWT to authenticate with Jitsi, and generate the JWT in your Django backend.

I’d say the simplest way to start would be to use the iframe API, this would allow you to get started really quickly since the frontend is already built and there is a ton of configurability.

Once you have it all ready you can then consider replacing the Jitsi Meet UI with your own built on top of LJM.

My 2 ceents.

As saghul mentioned, your best bet to get an initial integration working would be to use the IFrame API + JWT auth.

Your django app will handle user auth, and to initiate a call you’d generate the room name and JWT token and load the conference in an IFrame.

You can get call records back into the app by installing prosody plugins that send room events to your app API. This was briefly discussed in the following post:

1 Like

What changes do you want to make ?
User interface changes to the web front-end. When we spawned the containers, the default jitsi web worked very well. Howver when we made changes to the following in the local volumes and composed the containers again

  1. NGINX.conf
  2. Interface-config.js
  3. Config.js

They got overwritten. Im sure we are doing something wrong. Hence our next step was to build a custom docker image of the jitsi web and try changes to see if they are being reflected - but we are stuck - reference to the Question we asked.

We would want customizations to reflect in the docker containers when we make changes locally. Unfortunately , that isnt happening.

Those files are overwritten in purpose, since the container should always have the same config given the same env vars.

Depending on what you want to change there may be a way, specially for config files, but you haven’t mentioned what you are changing exactly.

@shawn @saghul @Harsh_Wasnik

Hello. Thanks for this. A little clarification required.
I need to use : JWT for authentication so only authenticated users from my Django App can start the call-in this use case , my front end flutter app needs to connect only to the Prosody server and initiate the meeting while Prosody passes the Meeting data to my backend Django app using event_synch_module.

Correct me if I’m wrong, my flutter app will initiate the call/meeting but since flutter has its own web component, I only need my flutter app to initiate the meeting and end it when necessary, everything handled by the jitsi-docker containers running together with my backend django API ?

I haven’t included the docker-jitsi web container here in the statements above since I believe my frontend app needs to communicate with the XMPP server prosody directly and rest is handled automatically at the backend by Jitsi ? - Further to this, I’m looking for the specific API/Module of the backend Jitsi-docker to initiate, manage & end the meetings so that I can connect my flutter app to it.

So to cut a long story short

Flutter app frontend connected to Jitsi-Docker Backend with My django social API running for real time meeting data synch & authentication using JWT. I’m not sure currently whether docker-jitsi-web should be part of this.

Hoping for an answer soon.

That sounds alright. Besides some configuration there is no need to customize container images thus far.

Yes, sounds that way indeed.

No. Based on my experience with customers using similar setups the optimal way seems to be to use the external API. You’d have your backend generating the tokens, then in your Flutter app you use the external API to integrate the Jitsi Meet running on the container and will pass the token. Your Flutter app can then interact with the meeting via external API commands / events.

I think this is what best suits you: IFrame API | Jitsi Meet

1 Like

I think this is what best suits you: IFrame API | Jitsi Meet

Thank you for the step by step revert. I have the following last questions before I close this thread
1.In the docs, the Iframe api is mentioned to be used for embedding. Does that mean, my flutter app will render a WebView inside the user interface that I create in flutter ? If yes, will that be good for User Experience ?

2.Its also mentioned , incase custom GUI is required , I need to install the lib-jitsi-meet api. What does this mean in my use case ? → Since I’ll be using flutter which includes Web user interfacce component to be designed separately & connected to Jitsi API (either Iframe or lib-jitsi-meet ?)

3.I also happen to bump into the following for flutter integrating Jitsi_meet api

jitsi_meet | Flutter Package (pub.dev)

I’m not sure which API of Jitsi it uses - Iframe or lib-Jitsi-meet ?

Ah I thought you were doing a web app in Flutter. If you are going mobile then the scenario is very similar, except that you’d use a wrapper over our native SDK.

The mobile UI is built with React Native, so you could eitherr modify that and rebuild the SDK or do it from scratch on top of lib-jitsi-meet. I wouldn’t recommend the latter since it’s a huge undertaking.

Oh yes - the end goal is Flutter- mobile and web with a custom User interface since when i give the task to a freelance designer, he will design it at the same time. Although ,I’m just trying to figure now how to initialize a meeting and manage it on flutter end and which service to connect to in the docker container through an API. With 2 separate API’s for Jitsi it gotten me thinking which one to use and what purpose it serves. From my limited understanding , this is what I have penned down :

  1. For mobile flutter with a custom UI, I will have to connect to the backend using a plugin which wraps the SDK’s for android & iOS - & then initiates and manages the call using the same sdk functions ?
  2. For Flutter-Web with a custom user interface which will be created the same time around mobile - use the iFrame API to connect to the Backend ? As far as I’ve understood, the iFrame is used to connect to the Web UI uploaded in the docker container designed by jitsi.org itself ? Hence you recommended me to replace the Web UI component in the backend with my custom UI(which is the end goal).

For both cases you have 2 options:

1- Use lib-jitsi-meet and build your own UI on top
2a- On web: use the iframe API which embeds the current UI we have and has some customizability
2b- On mobile: use the mobile SDK which embeds the current native view

1- Use lib-jitsi-meet and build your own UI on top

  • Is this recommended for building a custom UI with Flutter for both mobile and web ?

Also, since the documentation mentions libjitsimeet low level api to build a custom gui for a “WEB” App. Kindly notice the word Web here please. Important to know before i start coding. Waiting for your reply. @saghul @shawn @damencho

Generally I don’t recommend this to anyone because people end up building a UI that’s almost exactly what we have and the time spent doing that can probably better spent in other areas of the product.

Hello,
As per your recommendation , I’m on-route integrating the events synch module & reservations module. It is much needed for integrating it with mt Django rest api. The events_synch module describes it as

Sends HTTP POST to external API when occupant or room events triggered

I have 2 important questions.

What do I put in the following 2 places →

1)events_synch_module

api_prefix = "http://external_app.mydomain.com/api"

Will the above be the django endpoint which I will be using to update events on my Django backend API using JWT ?

2)reservations_module

VirtualHost "jitmeet.example.com"
    -- ....
    modules_enabled = {
        -- ....
        "reservations";
    }
    reservations_api_prefix = "http://reservation.example.com"

It mentions

The URL base is used to construct the request URL. Currently, only ‘/conference’ endpoint is supported, so all request will go to:

http://reservation.example.com/conference

Again, there is a api_prefix above as well.

In my limited understanding, my Django REST api endpoint should be conference since Jitsi needs to request for authorization of room from the Django end ?