Compare commits

..

10 Commits

Author SHA1 Message Date
d831236843 update README.md
Some checks failed
Close stale issues and PRs / stale (push) Has been cancelled
Unstable Build / version (push) Has been cancelled
Unstable Build / base-arch (map[arch:amd64 os:ubuntu-24.04]) (push) Has been cancelled
Unstable Build / base-arch (map[arch:arm64 os:ubuntu-24.04-arm]) (push) Has been cancelled
Unstable Build / base (push) Has been cancelled
Unstable Build / base-java-arch (map[arch:amd64 os:ubuntu-24.04]) (push) Has been cancelled
Unstable Build / base-java-arch (map[arch:arm64 os:ubuntu-24.04-arm]) (push) Has been cancelled
Unstable Build / base-java (push) Has been cancelled
Unstable Build / jibri-arch (map[arch:amd64 os:ubuntu-24.04]) (push) Has been cancelled
Unstable Build / web (push) Has been cancelled
Unstable Build / jibri-arch (map[arch:arm64 os:ubuntu-24.04-arm]) (push) Has been cancelled
Unstable Build / jibri (push) Has been cancelled
Unstable Build / jicofo-arch (map[arch:amd64 os:ubuntu-24.04]) (push) Has been cancelled
Unstable Build / jicofo-arch (map[arch:arm64 os:ubuntu-24.04-arm]) (push) Has been cancelled
Unstable Build / jicofo (push) Has been cancelled
Unstable Build / jigasi-arch (map[arch:amd64 os:ubuntu-24.04]) (push) Has been cancelled
Unstable Build / jigasi-arch (map[arch:arm64 os:ubuntu-24.04-arm]) (push) Has been cancelled
Unstable Build / jigasi (push) Has been cancelled
Unstable Build / jvb-arch (map[arch:amd64 os:ubuntu-24.04]) (push) Has been cancelled
Unstable Build / jvb-arch (map[arch:arm64 os:ubuntu-24.04-arm]) (push) Has been cancelled
Unstable Build / jvb (push) Has been cancelled
Unstable Build / prosody-arch (map[arch:amd64 os:ubuntu-24.04]) (push) Has been cancelled
Unstable Build / prosody-arch (map[arch:arm64 os:ubuntu-24.04-arm]) (push) Has been cancelled
Unstable Build / prosody (push) Has been cancelled
Unstable Build / web-arch (map[arch:amd64 os:ubuntu-24.04]) (push) Has been cancelled
Unstable Build / web-arch (map[arch:arm64 os:ubuntu-24.04-arm]) (push) Has been cancelled
2026-04-23 12:10:01 +03:30
fd17f81815 customize docker-compose.yml file 2026-04-23 12:00:45 +03:30
Boris Grozev
4d3466d5bf Pin GitHub Actions to SHA hashes
- ci.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- ci.yml: actions/setup-node@v4 -> 49933ea5288caeca8642d1e84afbd3f7d6820020
- ci.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- ci.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- ci.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- ci.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- ci.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- ci.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- ci.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- ci.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- ci.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- ci.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- release-stable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- release-stable.yml: stefanzweifel/git-auto-commit-action@v5 -> b863ae1933cb653a53c021fe36dbb774e1fb9403
- release-stable.yml: softprops/action-gh-release@v2 -> 3bb12739c298aeb8a4eeaf626c5b8d85266b0e65
- release-stable.yml: stefanzweifel/git-auto-commit-action@v5 -> b863ae1933cb653a53c021fe36dbb774e1fb9403
- release-stable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- release-stable.yml: docker/setup-qemu-action@v3 -> c7c53464625b32c7a7e944ae62b3e17d2b600130
- release-stable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- release-stable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- release-stable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- release-stable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- release-stable.yml: docker/setup-qemu-action@v3 -> c7c53464625b32c7a7e944ae62b3e17d2b600130
- release-stable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- release-stable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- release-stable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- release-stable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- release-stable.yml: docker/setup-qemu-action@v3 -> c7c53464625b32c7a7e944ae62b3e17d2b600130
- release-stable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- release-stable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- release-stable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- release-stable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- release-stable.yml: docker/setup-qemu-action@v3 -> c7c53464625b32c7a7e944ae62b3e17d2b600130
- release-stable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- release-stable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- release-stable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- release-stable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- release-stable.yml: docker/setup-qemu-action@v3 -> c7c53464625b32c7a7e944ae62b3e17d2b600130
- release-stable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- release-stable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- release-stable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- release-stable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- release-stable.yml: docker/setup-qemu-action@v3 -> c7c53464625b32c7a7e944ae62b3e17d2b600130
- release-stable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- release-stable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- release-stable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- release-stable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- release-stable.yml: docker/setup-qemu-action@v3 -> c7c53464625b32c7a7e944ae62b3e17d2b600130
- release-stable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- release-stable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- release-stable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- release-stable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- release-stable.yml: docker/setup-qemu-action@v3 -> c7c53464625b32c7a7e944ae62b3e17d2b600130
- release-stable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- release-stable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- release-stable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- stale.yml: actions/stale@v8 -> 1160a2240286f5da8ec72b1c0816ce2481aabf84
- unstable.yml: myci-actions/add-deb-repo@11 -> 43408b9f0225d1c64ba667d59e337c6140383bbe
- unstable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- unstable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: int128/docker-manifest-create-action@v2 -> 44422a4b046d55dc036df622039ed3aec43c613c
- unstable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- unstable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: int128/docker-manifest-create-action@v2 -> 44422a4b046d55dc036df622039ed3aec43c613c
- unstable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- unstable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: int128/docker-manifest-create-action@v2 -> 44422a4b046d55dc036df622039ed3aec43c613c
- unstable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- unstable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: int128/docker-manifest-create-action@v2 -> 44422a4b046d55dc036df622039ed3aec43c613c
- unstable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- unstable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: int128/docker-manifest-create-action@v2 -> 44422a4b046d55dc036df622039ed3aec43c613c
- unstable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- unstable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: int128/docker-manifest-create-action@v2 -> 44422a4b046d55dc036df622039ed3aec43c613c
- unstable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- unstable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: int128/docker-manifest-create-action@v2 -> 44422a4b046d55dc036df622039ed3aec43c613c
- unstable.yml: actions/checkout@v4 -> 34e114876b0b11c390a56381ad16ebd13914f8d5
- unstable.yml: docker/setup-buildx-action@v3 -> 8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: docker/build-push-action@v6 -> 10e90e3645eae34f1e60eeb005ba3a3d33f178e8
- unstable.yml: docker/login-action@v3 -> c94ce9fb468520275223c153574b00df6fe4bcc9
- unstable.yml: int128/docker-manifest-create-action@v2 -> 44422a4b046d55dc036df622039ed3aec43c613c
2026-04-16 15:51:49 +02:00
bgrozev
617bec0a50 feat(jicofo): add MID RTP header extension support, enabled by default (#2245) 2026-04-14 11:03:16 -05:00
damencho
44116c613b misc: working on unstable 2026-03-30 15:11:23 +00:00
damencho
549947620e release: stable-10888 2026-03-30 15:11:17 +00:00
tomtit
76202b70b1 fix(base) bump tpl to 1.5.0 2026-03-20 13:58:39 +01:00
Kota Nakagawa
5e297f3879 feat(rtcstats): add rtcstats support (#2116)
* feat(rtcstats): add rtcstats support

* chore(rtcstats): update users.json to use placeholder password

* chore(rtcstats): update RTCSTATS_STORE_LOGS in env.example

* chore(rtcstats): add expose ports

* feat(rtcstats): add mongodb support

* docs(rtcstats): add readme for mongodb integration

* chore(rtcstats): fix readme

* feat(rtcstats): add grafana dashboard for prometheus metrics

* chore(rtcstats): update readme

* chore(rtcstats): fix readme

* chore(rtcstats): add troubleshooting to localstack readme

* fix(rtcstats): improve accuracy of dashboard graphs

* fix(rtcstats): fix typo in dashboard display name

* fix(rtcstats): simplify and clean up localstack configuration

* docs(rtcstats): improve localstack readme

---------

Co-authored-by: Andrei Gavrilescu <51706180+andrei-gavrilescu@users.noreply.github.com>
2026-03-16 23:34:22 +02:00
emrah
e127e5d43c refactor(prosody): get prosody-contrib-plugins tag programatically 2026-03-06 18:09:58 +01:00
emrah
3a2d488aa3 fix(web): dont mix tabs and spaces 2026-03-04 08:00:42 +01:00
27 changed files with 1248 additions and 153 deletions

View File

@@ -11,8 +11,8 @@ jobs:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
- name: Check Node / npm versions
run: |
node -v
@@ -81,14 +81,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
with:
driver: docker
- name: Build base
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: ./base
load: true
@@ -98,7 +98,7 @@ jobs:
JITSI_RELEASE=unstable
- name: Build base-java
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: ./base-java
load: true
@@ -106,7 +106,7 @@ jobs:
jitsi/base-java:latest
- name: Build jibri
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: ./jibri
load: true
@@ -114,7 +114,7 @@ jobs:
jitsi/jibri:latest
- name: Build jicofo
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: ./jicofo
load: true
@@ -122,7 +122,7 @@ jobs:
jitsi/jicofo:latest
- name: Build jigasi
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: ./jigasi
load: true
@@ -130,7 +130,7 @@ jobs:
jitsi/jigasi:latest
- name: Build jvb
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: ./jvb
load: true
@@ -138,7 +138,7 @@ jobs:
jitsi/jvb:latest
- name: Build prosody
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: ./prosody
load: true
@@ -146,7 +146,7 @@ jobs:
jitsi/prosody:latest
- name: Build web
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: ./web
load: true

View File

@@ -15,21 +15,21 @@ jobs:
# Give the default GITHUB_TOKEN write permission to commit and push the changed files back to the repository.
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- run: |
sed -i".bak" -e "s/unstable/stable-${{ github.event.inputs.version }}/" *.yml
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@b863ae1933cb653a53c021fe36dbb774e1fb9403 # v5
with:
commit_message: "release: stable-${{ github.event.inputs.version }}"
- name: release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2
with:
tag_name: stable-${{ github.event.inputs.version }}
generate_release_notes: true
make_latest: true
- run: |
sed -i".bak" -e "s/stable-${{ github.event.inputs.version }}/unstable/" *.yml
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@b863ae1933cb653a53c021fe36dbb774e1fb9403 # v5
with:
commit_message: "misc: working on unstable"
@@ -37,20 +37,20 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
with:
platforms: linux/amd64,linux/arm64
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./base
@@ -68,20 +68,20 @@ jobs:
needs: base
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
with:
platforms: linux/amd64,linux/arm64
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./base-java
@@ -100,20 +100,20 @@ jobs:
needs: base-java
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
with:
platforms: linux/amd64,linux/arm64
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./jibri
@@ -132,20 +132,20 @@ jobs:
needs: base-java
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
with:
platforms: linux/amd64,linux/arm64
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./jicofo
@@ -164,20 +164,20 @@ jobs:
needs: base-java
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
with:
platforms: linux/amd64,linux/arm64
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./jigasi
@@ -196,20 +196,20 @@ jobs:
needs: base-java
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
with:
platforms: linux/amd64,linux/arm64
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./jvb
@@ -228,20 +228,20 @@ jobs:
needs: base
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
with:
platforms: linux/amd64,linux/arm64
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./prosody
@@ -260,20 +260,20 @@ jobs:
needs: base
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
with:
platforms: linux/amd64,linux/arm64
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./web

View File

@@ -7,7 +7,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v8
- uses: actions/stale@1160a2240286f5da8ec72b1c0816ce2481aabf84 # v8
with:
stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'
stale-pr-message: 'This PR has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'

View File

@@ -30,7 +30,7 @@ jobs:
id: prosody_repo
run: echo "deb [signed-by=/etc/apt/keyrings/prosody.gpg] https://packages.prosody.im/debian bookworm main" | sudo tee /etc/apt/sources.list.d/prosody.list
- name: Jitsi repo
uses: myci-actions/add-deb-repo@11
uses: myci-actions/add-deb-repo@43408b9f0225d1c64ba667d59e337c6140383bbe # 11
with:
repo: deb https://download.jitsi.org/ unstable/
repo-name: jitsi
@@ -65,18 +65,18 @@ jobs:
needs: version
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
with:
driver: docker
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./base
@@ -91,12 +91,12 @@ jobs:
needs: [version, base-arch]
steps:
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create Docker Manifest
uses: int128/docker-manifest-create-action@v2
uses: int128/docker-manifest-create-action@44422a4b046d55dc036df622039ed3aec43c613c # v2
with:
tags: |
${{ secrets.JITSI_REPO }}/base:${{ needs.version.outputs.base }}
@@ -116,18 +116,18 @@ jobs:
needs: [version, base]
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
with:
driver: docker
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./base-java
@@ -143,12 +143,12 @@ jobs:
needs: [version, base-java-arch]
steps:
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create Docker Manifest
uses: int128/docker-manifest-create-action@v2
uses: int128/docker-manifest-create-action@44422a4b046d55dc036df622039ed3aec43c613c # v2
with:
tags: |
${{ secrets.JITSI_REPO }}/base-java:${{ needs.version.outputs.base }}
@@ -168,18 +168,18 @@ jobs:
needs: [version, base-java]
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
with:
driver: docker
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./jibri
@@ -196,12 +196,12 @@ jobs:
needs: [version, jibri-arch]
steps:
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create Docker Manifest
uses: int128/docker-manifest-create-action@v2
uses: int128/docker-manifest-create-action@44422a4b046d55dc036df622039ed3aec43c613c # v2
with:
tags: |
${{ secrets.JITSI_REPO }}/jibri:${{ needs.version.outputs.base }}
@@ -222,18 +222,18 @@ jobs:
needs: [version, base-java]
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
with:
driver: docker
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./jicofo
@@ -250,12 +250,12 @@ jobs:
needs: [version, jicofo-arch]
steps:
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create Docker Manifest
uses: int128/docker-manifest-create-action@v2
uses: int128/docker-manifest-create-action@44422a4b046d55dc036df622039ed3aec43c613c # v2
with:
tags: |
${{ secrets.JITSI_REPO }}/jicofo:${{ needs.version.outputs.base }}
@@ -276,18 +276,18 @@ jobs:
needs: [version, base-java]
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
with:
driver: docker
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./jigasi
@@ -304,12 +304,12 @@ jobs:
needs: [version, jigasi-arch]
steps:
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create Docker Manifest
uses: int128/docker-manifest-create-action@v2
uses: int128/docker-manifest-create-action@44422a4b046d55dc036df622039ed3aec43c613c # v2
with:
tags: |
${{ secrets.JITSI_REPO }}/jigasi:${{ needs.version.outputs.base }}
@@ -330,18 +330,18 @@ jobs:
needs: [version, base-java]
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
with:
driver: docker
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./jvb
@@ -358,12 +358,12 @@ jobs:
needs: [version, jvb-arch]
steps:
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create Docker Manifest
uses: int128/docker-manifest-create-action@v2
uses: int128/docker-manifest-create-action@44422a4b046d55dc036df622039ed3aec43c613c # v2
with:
tags: |
${{ secrets.JITSI_REPO }}/jvb:${{ needs.version.outputs.base }}
@@ -384,18 +384,18 @@ jobs:
needs: [version, base]
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
with:
driver: docker
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./prosody
@@ -412,12 +412,12 @@ jobs:
needs: [version, prosody-arch]
steps:
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create Docker Manifest
uses: int128/docker-manifest-create-action@v2
uses: int128/docker-manifest-create-action@44422a4b046d55dc036df622039ed3aec43c613c # v2
with:
tags: |
${{ secrets.JITSI_REPO }}/prosody:${{ needs.version.outputs.base }}
@@ -438,18 +438,18 @@ jobs:
needs: [version, base]
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
with:
driver: docker
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
push: true
context: ./web
@@ -466,12 +466,12 @@ jobs:
needs: [version, web-arch]
steps:
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create Docker Manifest
uses: int128/docker-manifest-create-action@v2
uses: int128/docker-manifest-create-action@44422a4b046d55dc036df622039ed3aec43c613c # v2
with:
tags: |
${{ secrets.JITSI_REPO }}/web:${{ needs.version.outputs.base }}

View File

@@ -1,39 +1,80 @@
# Jitsi Meet on Docker
# Jitsi Meet Docker Deployment
![](resources/jitsi-docker.png)
This repository provides a ready-to-deploy, dockerized setup for Jitsi Meet. It is based on the official Jitsi Docker release with specific modifications to accommodate custom SSL certificates and specific environments.
[Jitsi](https://jitsi.org/) is a set of Open Source projects that allows you to easily build and deploy secure videoconferencing solutions.
![intro](./screenshots/intro.png)
[Jitsi Meet](https://jitsi.org/jitsi-meet/) is a fully encrypted, 100% Open Source video conferencing solution that you can use all day, every day, for free — with no account needed.
## Features
- Fully dockerized deployment.
- Pre-configured volume mapping for custom SSL certificates.
- Minimal configuration required.
This repository contains the necessary tools to run a Jitsi Meet stack on [Docker](https://www.docker.com) using [Docker Compose](https://docs.docker.com/compose/).
## Prerequisites
- Docker and Docker Compose installed on your server.
- Custom SSL certificates (e.g., from your CDN provider).
- A domain name pointing to your server's IP address.
All our images are published on [DockerHub](https://hub.docker.com/u/jitsi/).
## Quick Start
## Supported architectures
### 1. Configure Environment Variables
Copy the sample environment file and create your own `.env` file:
```bash
cp env.sample .env
```
Starting with `stable-7439` the published images are available for `amd64` and `arm64`.
Open `.env` in your preferred text editor and modify the following essential variables:
```env
# Exposed HTTP port
HTTP_PORT=80
## Tags
# Exposed HTTPS port
HTTPS_PORT=443
These are the currently published tags for all our images:
# Public URL of your Jitsi Meet instance
PUBLIC_URL=https://meet.yourdomain.com
Tag | Description
-- | --
`stable` | Points to the latest stable release
`stable-NNNN-X` | A stable release
`unstable` | Points to the latest unstable release
`unstable-YYYY-MM-DD` | Daily unstable release
`latest` | Deprecated, no longer updated (will be removed)
# Disable Let's Encrypt automatic SSL (since we use custom certs)
ENABLE_LETSENCRYPT=0
## Installation
# Enable redirect http to https
ENABLE_HTTP_REDIRECT=1
```
The installation manual is available [here](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker).
### 2. Configure Custom SSL Certificates
The `docker-compose.yml` is already modified to accept custom SSL certificates. You just need to place your certificates in the correct directory.
### Kubernetes
Create the configuration directory:
```bash
mkdir -p ~/.jitsi-meet-cfg/web/certs
```
If you plan to install the jitsi-meet stack on a Kubernetes cluster you can find tools and tutorials in the project [Jitsi on Kubernetes](https://github.com/jitsi-contrib/jitsi-kubernetes).
Copy your certificate files to the newly created directory (adjust the source paths to match your actual files):
```bash
cp /path/to/your/fullchain.pem ~/.jitsi-meet-cfg/web/certs/cert.crt
cp /path/to/your/private.key ~/.jitsi-meet-cfg/web/certs/cert.key
```
## TODO
Set the appropriate permissions for the security keys:
```bash
chmod 644 ~/.jitsi-meet-cfg/web/certs/cert.crt
chmod 600 ~/.jitsi-meet-cfg/web/certs/cert.key
```
* Builtin TURN server.
### 3. Generate Passwords and Run
Jitsi requires internal passwords to securely connect its different components. Generate these automatically by running:
```bash
./gen-passwords.sh
```
Finally, start the deployment in detached mode:
```bash
docker compose up --build -d
```
Your Jitsi Meet instance should now be accessible at your configured `PUBLIC_URL`.
## Client Applications
![app](./screenshots/app.png)
Jitsi Meet is cross-platform. Once your server is up and running, users can connect via standard web browsers or download the official desktop and mobile applications for Windows, macOS, Linux, Android, and iOS from the official Jitsi website.

View File

@@ -14,7 +14,7 @@ RUN \
esac && \
apt-dpkg-wrap apt-get update && \
apt-dpkg-wrap apt-get install -y apt-transport-https apt-utils ca-certificates gnupg wget curl && \
wget -qO /usr/bin/tpl https://github.com/jitsi/tpl/releases/download/v1.4.0/tpl-linux-${TPL_ARCH} && \
wget -qO /usr/bin/tpl https://github.com/jitsi/tpl/releases/download/v1.5.0/tpl-linux-${TPL_ARCH} && \
# Workaround S6 bug when /bin is a symlink
wget -qO /tmp/s6.tar.gz https://github.com/just-containers/s6-overlay/releases/download/v1.22.1.0/s6-overlay-${S6_ARCH}.tar.gz && \
mkdir /tmp/s6 && \

View File

@@ -3,11 +3,12 @@ services:
web:
image: jitsi/web:${JITSI_IMAGE_VERSION:-unstable}
restart: ${RESTART_POLICY:-unless-stopped}
ports:
- '${HTTP_PORT}:80'
- '${HTTPS_PORT}:443'
#ports:
# - '${HTTP_PORT}:80'
# - '${HTTPS_PORT}:443'
volumes:
- ${CONFIG}/web:/config:Z
- ${CONFIG}/web/certs:/config/keys:Z
- ${CONFIG}/web/crontabs:/var/spool/cron/crontabs:Z
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z
- ${CONFIG}/web/load-test:/usr/share/jitsi-meet/load-test:Z
@@ -138,6 +139,13 @@ services:
- RESOLUTION_MIN
- RESOLUTION_WIDTH
- RESOLUTION_WIDTH_MIN
- RTCSTATS_ENABLED
- RTCSTATS_STORE_LOGS
- RTCSTATS_POLL_INTERVAL
- RTCSTATS_SEND_SDP
- RTCSTATS_URL_BASE
- RTC_VISUALIZER_URL_BASE
- RTC_VISUALIZER_PATH
- START_AUDIO_MUTED
- START_AUDIO_ONLY
- START_SILENT
@@ -187,6 +195,7 @@ services:
- WHITEBOARD_COLLAB_SERVER_URL_BASE
networks:
meet.jitsi:
caddy_proxy:
depends_on:
- jvb
@@ -509,3 +518,5 @@ services:
# Custom network so all services can communicate using a FQDN
networks:
meet.jitsi:
caddy_proxy:
external: true

View File

@@ -82,6 +82,21 @@ TZ=UTC
# Set etherpad-lite public URL, including /p/ pad path fragment (uncomment to enable)
#ETHERPAD_PUBLIC_URL=https://etherpad.my.domain/p/
#
# rtcstats integration
#
# Enable rtcstats analytics (uncomment to enable)
#RTCSTATS_ENABLED=true
# Send the console logs to the rtcstats server
#RTCSTATS_STORE_LOGS=true
# The interval at which rtcstats will poll getStats, defaults to 10000ms.
#RTCSTATS_POLL_INTERVAL=10000
# Send the SDP to the rtcstats server
#RTCSTATS_SEND_SDP=true
#
# Whiteboard integration

View File

@@ -158,6 +158,9 @@ jicofo {
video-layers-allocation {
enabled = {{ .Env.ENABLE_VLA | default "0" | toBool }}
}
mid {
enabled = {{ .Env.JICOFO_ENABLE_MID | default "1" | toBool }}
}
}
}

View File

@@ -0,0 +1,666 @@
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "grafana",
"uid": "-- Grafana --"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"links": [],
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"decimals": 0,
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": [
{
"matcher": {
"id": "byFrameRefID",
"options": "session count"
},
"properties": [
{
"id": "displayName",
"value": "Session Count"
},
{
"id": "thresholds",
"value": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
}
}
]
},
{
"matcher": {
"id": "byFrameRefID",
"options": "error count"
},
"properties": [
{
"id": "displayName",
"value": "Session Error Count"
},
{
"id": "thresholds",
"value": {
"mode": "absolute",
"steps": [
{
"color": "red",
"value": null
}
]
}
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 0
},
"id": 2,
"options": {
"colorMode": "value",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"textMode": "auto"
},
"pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"disableTextWrap": false,
"editorMode": "code",
"exemplar": false,
"expr": "increase(rtcstats_session_count[$__range])",
"format": "time_series",
"fullMetaSearch": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "session count",
"useBackend": false
},
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"disableTextWrap": false,
"editorMode": "code",
"expr": "increase(rtcstats_session_error_count[$__range])",
"format": "time_series",
"fullMetaSearch": false,
"hide": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "error count",
"useBackend": false
}
],
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "left",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": [
{
"matcher": {
"id": "byFrameRefID",
"options": "A"
},
"properties": [
{
"id": "displayName",
"value": "websocket connections"
}
]
},
{
"matcher": {
"id": "byFrameRefID",
"options": "B"
},
"properties": [
{
"id": "displayName",
"value": "websocket connections error"
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 0
},
"id": 1,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"disableTextWrap": false,
"editorMode": "code",
"expr": "rtcstats_websocket_connections",
"fullMetaSearch": false,
"hide": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "A",
"useBackend": false
},
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"disableTextWrap": false,
"editorMode": "code",
"expr": "rate(rtcstats_websocket_connection_error[$__rate_interval])",
"fullMetaSearch": false,
"hide": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "B",
"useBackend": false
}
],
"title": "Websocket Connection",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": [
{
"matcher": {
"id": "byFrameRefID",
"options": "rtcstats"
},
"properties": [
{
"id": "displayName",
"value": "rtcstats client"
}
]
},
{
"matcher": {
"id": "byFrameRefID",
"options": "jvb"
},
"properties": [
{
"id": "displayName",
"value": "jvb"
}
]
},
{
"matcher": {
"id": "byFrameRefID",
"options": "jicofo"
},
"properties": [
{
"id": "displayName",
"value": "jicofo"
}
]
},
{
"matcher": {
"id": "byFrameRefID",
"options": "jibri"
},
"properties": [
{
"id": "displayName",
"value": "jibri"
}
]
},
{
"matcher": {
"id": "byFrameRefID",
"options": "jigasi"
},
"properties": [
{
"id": "displayName",
"value": "jigasi"
}
]
},
{
"matcher": {
"id": "byFrameRefID",
"options": "unknown"
},
"properties": [
{
"id": "displayName",
"value": "unknown"
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 8
},
"id": 4,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"disableTextWrap": false,
"editorMode": "code",
"expr": "increase(rtcstats_dump_size_bytes_count[$__rate_interval])",
"fullMetaSearch": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "rtcstats",
"useBackend": false
},
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"disableTextWrap": false,
"editorMode": "code",
"expr": "increase(jvb_dump_size_bytes_count[$__rate_interval])",
"fullMetaSearch": false,
"hide": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "jvb",
"useBackend": false
},
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"editorMode": "code",
"expr": "increase(jicofo_dump_size_bytes_count[$__rate_interval])",
"hide": false,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "jicofo"
},
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"editorMode": "code",
"expr": "increase(jibri_dump_size_bytes_count[$__rate_interval])",
"hide": false,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "jibri"
},
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"editorMode": "code",
"expr": "increase(jigasi_dump_size_bytes_count[$__rate_interval])",
"hide": false,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "jigasi"
},
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"editorMode": "code",
"expr": "increase(unknown_dump_size_bytes_count[$__rate_interval])",
"hide": false,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "unknown"
}
],
"title": "Dump Size Bytes Count",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 8
},
"id": 3,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": false
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "d301145e-8c4e-4027-bf6e-43e81f095020"
},
"disableTextWrap": false,
"editorMode": "code",
"exemplar": false,
"expr": "rtcstats_disk_queue_size",
"format": "time_series",
"fullMetaSearch": false,
"hide": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "A",
"useBackend": false
}
],
"title": "Disk Queue Size",
"type": "timeseries"
}
],
"refresh": "30s",
"schemaVersion": 38,
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {},
"timezone": "",
"title": "rtcstats",
"uid": "e4e8c548-c977-4f95-bc91-995d0a757f8e",
"version": 2,
"weekStart": ""
}

View File

@@ -27,7 +27,6 @@ LABEL org.opencontainers.image.url="https://prosody.im/"
LABEL org.opencontainers.image.source="https://github.com/jitsi/docker-jitsi-meet"
LABEL org.opencontainers.image.documentation="https://jitsi.github.io/handbook/"
ARG VERSION_JITSI_CONTRIB_PROSODY_PLUGINS="20260227"
ARG VERSION_MATRIX_USER_VERIFICATION_SERVICE_PLUGIN="1.8.0"
ARG PROSODY_PACKAGE="prosody"
ARG PROSODY_PACKAGE_VERSION="13.*"
@@ -62,11 +61,11 @@ RUN set -x && \
mv prosody-mod-auth-matrix-user-verification-$VERSION_MATRIX_USER_VERIFICATION_SERVICE_PLUGIN/mod_auth_matrix_user_verification.lua /prosody-plugins && \
mv prosody-mod-auth-matrix-user-verification-$VERSION_MATRIX_USER_VERIFICATION_SERVICE_PLUGIN/mod_matrix_power_sync.lua /prosody-plugins && \
rm -rf prosody-mod-auth-matrix-user-verification-$VERSION_MATRIX_USER_VERIFICATION_SERVICE_PLUGIN v$VERSION_MATRIX_USER_VERIFICATION_SERVICE_PLUGIN.tar.gz && \
wget -q https://github.com/jitsi-contrib/prosody-plugins/archive/refs/tags/v$VERSION_JITSI_CONTRIB_PROSODY_PLUGINS.tar.gz && \
tar -xf v$VERSION_JITSI_CONTRIB_PROSODY_PLUGINS.tar.gz && \
VERSION_PROSODY_CONTRIB_PLUGINS=$(wget -q -O - https://api.github.com/repos/jitsi-contrib/prosody-plugins/tags | grep -m 1 '"name":' | cut -d '"' -f4) && \
wget -q https://github.com/jitsi-contrib/prosody-plugins/archive/refs/tags/$VERSION_PROSODY_CONTRIB_PLUGINS.tar.gz && \
mkdir /prosody-plugins-contrib && \
cp -a prosody-plugins-$VERSION_JITSI_CONTRIB_PROSODY_PLUGINS/* /prosody-plugins-contrib && \
rm -rf prosody-plugins-$VERSION_JITSI_CONTRIB_PROSODY_PLUGINS v$VERSION_JITSI_CONTRIB_PROSODY_PLUGINS.tar.gz && \
tar --strip-components=1 -C /prosody-plugins-contrib -xf $VERSION_PROSODY_CONTRIB_PLUGINS.tar.gz && \
rm -f $VERSION_PROSODY_CONTRIB_PLUGINS.tar.gz && \
(apt-cache policy prosody | grep Installed | grep -Eq " 13\." && sed -i '/idna_to_ascii/d' /usr/share/lua/5.4/prosody/util/jid.lua || true)
COPY rootfs/ /

31
rtcstats.yml Normal file
View File

@@ -0,0 +1,31 @@
services:
rtcstats-server:
image: jitsi/rtcstats-server
restart: ${RESTART_POLICY:-unless-stopped}
expose:
- '3000'
- '8095'
env_file:
- ./rtcstats/.env
- ./rtcstats/rtcstats-server/.env
networks:
meet.jitsi:
aliases:
- rtcstats-server.meet.jitsi
rtc-visualizer:
image: jitsi/rtcstats-visualizer
restart: ${RESTART_POLICY:-unless-stopped}
expose:
- '8087'
volumes:
- ./rtcstats/rtc-visualizer/.data:/rtc-visualizer/.data
env_file:
- ./rtcstats/.env
- ./rtcstats/rtc-visualizer/.env
networks:
meet.jitsi:
aliases:
- rtc-visualizer.meet.jitsi

83
rtcstats/README.md Normal file
View File

@@ -0,0 +1,83 @@
# Meeting stats with rtcstats
## Overview
This project demonstrates how to use rtcstats with Jitsi Meet to gather detailed information about meeting quality and logs.
## Getting Started
### Setup
1. **Update Jitsi Meet Docker Compose Configuration**
Edit `.env` in your `docker-jitsi-meet` directory to enable rtcstats.
```
#
# rtcstats integration
#
# Enable rtcstats analytics (uncomment to enable)
RTCSTATS_ENABLED=true
# Send the console logs to the rtcstats server
RTCSTATS_STORE_LOGS=false
# The interval at which rtcstats will poll getStats, defaults to 10000ms.
RTCSTATS_POLL_INTERVAL=10000
# Send the SDP to the rtcstats server
RTCSTATS_SEND_SDP=true
```
2. **Configure rtcstats**
Copy the example environment files and edit them according to your environment.
```shell
docker-jitsi-meet/rtcstats$ cp env.example .env
docker-jitsi-meet/rtcstats$ cp ./rtcstats-server/env.example ./rtcstats-server/.env
docker-jitsi-meet/rtcstats$ cp ./rtc-visualizer/env.example ./rtc-visualizer/.env
```
Next, edit `rtc-visualizer/.data/users.json` to add your users. The default credential is `admin:CHANGE_ME`.
```json
{
"Alice": "XXX",
"Bob": "YYY"
}
```
4. **Run Docker Compose**
From your `docker-jitsi-meet` directory, run the following command to start all services.
```shell
docker compose -f docker-compose.yml -f rtcstats.yml up -d
```
## Usage
1. **View RTC Visualizer**
Open [https://localhost:8443/rtc-visualizer](https://localhost:8443/rtc-visualizer) (or `PUBLIC_URL/rtc-visualizer`) in your browser.
## Monitoring with Prometheus
1. **Update Prometheus Configuration**
Add the rtcstats-server endpoint to `prometheus/prometheus.yml`.
```yml
scrape_configs:
- job_name: "prometheus"
# ... other configurations
static_configs:
- targets: ["...","rtcstats-server:8095"]
```
2. **Run Docker Compose**
Restart your environment with the `prometheus.yml` and `grafana.yml` files to launch the monitoring services.
```shell
docker compose -f docker-compose.yml -f rtcstats.yml -f prometheus.yml -f grafana.yml up -d
```

23
rtcstats/env.example Normal file
View File

@@ -0,0 +1,23 @@
# Set the service type. Can be "AWS" or "MongoDB".
RTCSTATS_SERVICE_TYPE=AWS
# For AWS credentials
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
# For local S3 and DynamoDB
RTCSTATS_S3_ENDPOINT=
RTCSTATS_DYNAMODB_ENDPOINT=
# DynamoDB Table for rtcstats
RTCSTATS_METADATA_TABLE=rtcstats-meta-table-local
# S3 Bucket for rtcstats
RTCSTATS_S3_BUCKET=jitsi-micros-rtcstats-server
# For MongoDB
#RTCSTATS_MONGODB_URI=mongodb://root:root@mongodb.meet.jitsi:27017
#RTCSTATS_MONGODB_NAME=rtcstats-db
#RTCSTATS_METADATA_COLLECTION=rtcstats-meta-collection
#RTCSTATS_GRIDFS_BUCKET=rtcstats-dump-file-bucket

View File

@@ -0,0 +1,49 @@
## Using Localstack
This section describes how to use Localstack to test and verify your rtcstats setup. Localstack simulates AWS cloud services (like S3) on your local machine, allowing you to confirm that statistics are being saved correctly without needing an actual AWS account.
### Setup
1. **Configure Network Alias for Custom S3 Bucket**
If you are using a custom S3 bucket name, you must add it as a network alias in `localstack.yml`. This allows the rtcstats-server and rtc-visualizer to resolve the bucket's address to the Localstack container.
Edit the `networks` section for the `localstack` service in `rtcstats/localstack/localstack.yml`:
```yml
services:
localstack:
# ... (other settings)
networks:
meet.jitsi:
aliases:
# - jitsi-micros-rtcstats-server.s3.localstack # Default example
- YOUR_RTCSTATS_S3_BUCKET.s3.localstack
```
**Note:** Replace `YOUR_RTCSTATS_S3_BUCKET` with the actual bucket name you defined in your environment variables.
To enable the AWS SDK to make Virtual-Hosted-Style requests to S3, you need to also configure the endpoints in `rtcstats/.env` as follows:
```
RTCSTATS_S3_ENDPOINT=http://s3.localstack:4566
RTCSTATS_DYNAMODB_ENDPOINT=http://localstack:4566
```
2. **Run Docker Compose with Localstack**
From your `docker-jitsi-meet` directory, run the following command to start all services, including Jitsi Meet, rtcstats, and Localstack.
```shell
docker compose -f docker-compose.yml -f rtcstats.yml -f ./rtcstats/localstack/localstack.yml up -d
```
### Troubleshooting
- **502 Bad Gateway on RTC Visualizer**
If you encounter a `502 Bad Gateway` error when accessing the RTC Visualizer, you may need to restart the `jitsi/web` container.
Run the following command from your docker-jitsi-meet directory to resolve the issue:
```shell
docker compose restart web
```

View File

@@ -0,0 +1,38 @@
services:
rtcstats-setup:
image: jitsi/rtcstats-server
env_file:
- ./rtcstats/.env
entrypoint: /bin/sh
command: >
-c '
node ./infra-samples/aws/create-dynamodb-table.js &&
node ./infra-samples/aws/create-s3-bucket.js
'
networks:
meet.jitsi:
depends_on:
- localstack
localstack:
container_name: localstack
image: localstack/localstack
ports:
- 4566:4566
env_file:
- ./rtcstats/.env
environment:
# LocalStack configuration: https://docs.localstack.cloud/references/configuration/
- SERVICES=s3,dynamodb
- DEBUG=${DEBUG:-1}
- AWS_ACCESS_KEY_ID=dummy
- AWS_SECRET_ACCESS_KEY=dummy
- AWS_DEFAULT_REGION=us-east-1
- AWS_DEFAULT_OUTPUT=json
- AWS_ENDPOINT_URL=http://localstack:4566
networks:
meet.jitsi:
aliases:
- jitsi-micros-rtcstats-server.s3.localstack

1
rtcstats/mongodb/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
data/

View File

@@ -0,0 +1,29 @@
## Using MongoDB
This section describes how to use MongoDB for rtcstats.
### Setup
1. **Configure Environment Variables**
Edit the MongoDB environment variables in `rtcstats/.env`:
```
# Set the service type. Can be "AWS" or "MongoDB".
RTCSTATS_SERVICE_TYPE=MongoDB
...
# For MongoDB
RTCSTATS_MONGODB_URI=mongodb://root:root@mongodb.meet.jitsi:27017
RTCSTATS_MONGODB_NAME=rtcstats-db
RTCSTATS_METADATA_COLLECTION=rtcstats-meta-collection
RTCSTATS_GRIDFS_BUCKET=rtcstats-dump-file-bucket
```
2. **Run Docker Compose with MongoDB**
From your `docker-jitsi-meet` directory, run the following command to start all services, including Jitsi Meet, rtcstats, and Localstack.
```shell
docker compose -f docker-compose.yml -f rtcstats.yml -f ./rtcstats/mongodb/mongodb.yml up -d
```

View File

@@ -0,0 +1,13 @@
services:
mongodb:
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
volumes:
- ./rtcstats/mongodb/data:/data/db
networks:
meet.jitsi:
aliases:
- mongodb.meet.jitsi

View File

@@ -0,0 +1,3 @@
{
"admin": "CHANGE_ME"
}

View File

@@ -0,0 +1,5 @@
# rtc-visualizer
#RTCSTATS_FILES_ENDPOINT=
#RTCSTATS_JWT_PUBLIC_KEY=
#RTCSTATS_JWT_EGHT_PUBLIC_KEY=
USERS_FILE=.data/users.json

View File

@@ -0,0 +1,37 @@
# rtcstats-server: server config
#RTCSTATS_LOG_LEVEL
#RTCSTATS_ENVIRONMENT
#RTCSTATS_KEYPATH=./certs/key.pem
#RTCSTATS_CERTPATH=./certs/cert.pem
#RTCSTATS_TEMPPATH=temp
RTCSTATS_HTTPS=false
#RTCSTATS_SKIP_LOAD_BALANCER_IP
#RTCSTATS_JSON_CONSOLE_LOG
# rtcstats-server: amplitude
# RTCSTATS_AMPLITUDE_KEY=
# rtcstats-server: firehose
#RTCSTATS_FIREHOSE_AWS_REGION
#RTCSTATS_FIREHOSE_MEETING_STREAM
#RTCSTATS_FIREHOSE_PC_STREAM
#RTCSTATS_FIREHOSE_TRACKS_STREAM
#RTCSTATS_FIREHOSE_E2E_PING_STREAM
#RTCSTATS_FIREHOSE_FACE_LANDMARKS_STREAM
#RTCSTATS_FIREHOSE_MEETING_EVENT_STREAM
# rtcstats-server: s3
#RTCSTATS_S3_ACCESSKEYID
#RTCSTATS_S3_SECRETACCESSKEY
RTCSTATS_S3_AWS_REGION=us-east-1
RTCSTATS_S3_USEIAMAUTH=true
#RTCSTATS_S3_SIGNEDLINKEXPIRATIONSEC
# rtcstats-server: webhooks
#RTCSTATS_WEBHOOK_ENDPOINT
#RTCSTATS_JWT_AUDIENCE
#RTCSTATS_JWT_ISSUER
# rtcstats-server: secretmanager
#RTCSTATS_AWS_SECRET_REGION
#RTCSTATS_JWT_SECRET_ID

BIN
screenshots/app.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

BIN
screenshots/intro.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

View File

@@ -9,6 +9,10 @@
{{ $XMPP_DOMAIN := .Env.XMPP_DOMAIN | default "meet.jitsi" -}}
{{ $XMPP_BOSH_URL_BASE := .Env.XMPP_BOSH_URL_BASE | default "http://xmpp.meet.jitsi:5280" -}}
{{ $CORS_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN := .Env.CORS_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN | default "*" }}
{{ $RTCSTATS_ENABLED := .Env.RTCSTATS_ENABLED | default "false" | toBool -}}
{{ $RTCSTATS_URL_BASE := .Env.RTCSTATS_URL_BASE | default "http://rtcstats-server.meet.jitsi:3000" -}}
{{ $RTC_VISUALIZER_URL_BASE := .Env.RTC_VISUALIZER_URL_BASE | default "http://rtc-visualizer.meet.jitsi:8087" -}}
{{ $RTC_VISUALIZER_PATH := .Env.RTC_VISUALIZER_PATH | default "rtc-visualizer" -}}
server_name _;
@@ -139,6 +143,36 @@ location ^~ /etherpad/ {
}
{{ end }}
{{ if $RTCSTATS_ENABLED }}
# rtcstats websockets
location = /rtcstats-ws/ {
tcp_nodelay on;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass {{ $RTCSTATS_URL_BASE }}/;
}
# rtc-visualizer
location = /{{ $RTC_VISUALIZER_PATH }} {
return 301 $scheme://$http_host$request_uri/;
}
location ^~ /{{ $RTC_VISUALIZER_PATH }}/ {
tcp_nodelay on;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass {{ $RTC_VISUALIZER_URL_BASE }}/;
}
{{ end }}
{{ if .Env.WHITEBOARD_COLLAB_SERVER_URL_BASE }}
# whiteboard (excalidraw-backend)
location = /socket.io/ {

View File

@@ -33,28 +33,28 @@ http {
include /etc/nginx/mime.types;
types {
# add support for the wav MIME type that is requried to playback wav files in Firefox.
audio/wav wav;
audio/wav wav;
}
default_type application/octet-stream;
##
# Logging Settings
##
# Matches any URI or Referer with some matches and redacts the whole
# query string. log_format and map must be at the http context level.
map $request_uri $loggable_uri {
~^(?P<path>[^?]*)\?.*(?:jwt|token)= "${path}?[params_redacted]";
default $request_uri;
}
# Matches any URI or Referer with some matches and redacts the whole
# query string. log_format and map must be at the http context level.
map $request_uri $loggable_uri {
~^(?P<path>[^?]*)\?.*(?:jwt|token)= "${path}?[params_redacted]";
default $request_uri;
}
map $http_referer $loggable_referer {
~^(?P<url>[^?]*)\?.*(?:jwt|token)= "${url}?[params_redacted]";
default $http_referer;
}
map $http_referer $loggable_referer {
~^(?P<url>[^?]*)\?.*(?:jwt|token)= "${url}?[params_redacted]";
default $http_referer;
}
log_format jitsi_log '$remote_addr - $remote_user [$time_local] '
'"$request_method $loggable_uri $server_protocol" '
'$status $body_bytes_sent "$loggable_referer" "$http_user_agent"';
log_format jitsi_log '$remote_addr - $remote_user [$time_local] '
'"$request_method $loggable_uri $server_protocol" '
'$status $body_bytes_sent "$loggable_referer" "$http_user_agent"';
access_log /dev/stdout jitsi_log;
error_log /dev/stderr;
@@ -73,7 +73,7 @@ http {
##
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
'' close;
}
##

View File

@@ -33,6 +33,7 @@
{{ $ENABLE_JAAS_COMPONENTS := .Env.ENABLE_JAAS_COMPONENTS | default "0" | toBool }}
{{ $HIDE_PREJOIN_DISPLAY_NAME := .Env.HIDE_PREJOIN_DISPLAY_NAME | default "false" | toBool -}}
{{ $PUBLIC_URL := .Env.PUBLIC_URL | default "https://localhost:8443" -}}
{{ $PUBLIC_URL_DOMAIN := .Env.PUBLIC_URL | default "https://localhost:8443" | trimPrefix "https://" | trimSuffix "/" -}}
{{ $RESOLUTION := .Env.RESOLUTION | default "720" -}}
{{ $RESOLUTION_MIN := .Env.RESOLUTION_MIN | default "180" -}}
{{ $RESOLUTION_WIDTH := .Env.RESOLUTION_WIDTH | default "1280" -}}
@@ -67,6 +68,10 @@
{{ $CODEC_ORDER_JVB_MOBILE := .Env.CODEC_ORDER_JVB_MOBILE | default "[\"VP8\", \"VP9\", \"H264\", \"AV1\"]" -}}
{{ $CODEC_ORDER_P2P := .Env.CODEC_ORDER_JVB | default "[\"AV1\", \"VP9\", \"VP8\", \"H264\"]" -}}
{{ $CODEC_ORDER_P2P_MOBILE := .Env.CODEC_ORDER_JVB_MOBILE | default "[\"VP8\", \"VP9\", \"H264\", \"AV1\"]" -}}
{{ $RTCSTATS_ENABLED := .Env.RTCSTATS_ENABLED | default "false" | toBool -}}
{{ $RTCSTATS_STORE_LOGS := .Env.RTCSTATS_STORE_LOGS | default "false" | toBool -}}
{{ $RTCSTATS_POLL_INTERVAL := .Env.RTCSTATS_POLL_INTERVAL | default 10000 -}}
{{ $RTCSTATS_SEND_SDP := .Env.RTCSTATS_SEND_SDP | default "false" | toBool -}}
// Video configuration.
//
@@ -215,6 +220,15 @@ config.localRecording = {
config.analytics = {};
{{ if $RTCSTATS_ENABLED -}}
// RTCStats configuration.
config.analytics.rtcstatsEnabled = true;
config.analytics.rtcstatsStoreLogs = {{ $RTCSTATS_STORE_LOGS }};
config.analytics.rtcstatsEndpoint = 'wss://{{ $PUBLIC_URL_DOMAIN }}/rtcstats-ws';
config.analytics.rtcstatsPollInterval = {{ $RTCSTATS_POLL_INTERVAL }};
config.analytics.rtcstatsSendSdp = {{ $RTCSTATS_SEND_SDP }};
{{ end -}}
{{ if .Env.AMPLITUDE_ID -}}
// The Amplitude APP Key:
config.analytics.amplitudeAPPKey = '{{ .Env.AMPLITUDE_ID }}';