Compare commits
10 Commits
f95a6b62a0
...
d831236843
| Author | SHA1 | Date | |
|---|---|---|---|
| d831236843 | |||
| fd17f81815 | |||
|
|
4d3466d5bf | ||
|
|
617bec0a50 | ||
|
|
44116c613b | ||
|
|
549947620e | ||
|
|
76202b70b1 | ||
|
|
5e297f3879 | ||
|
|
e127e5d43c | ||
|
|
3a2d488aa3 |
24
.github/workflows/ci.yml
vendored
24
.github/workflows/ci.yml
vendored
@@ -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
|
||||
|
||||
88
.github/workflows/release-stable.yml
vendored
88
.github/workflows/release-stable.yml
vendored
@@ -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
|
||||
|
||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@@ -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.'
|
||||
|
||||
98
.github/workflows/unstable.yml
vendored
98
.github/workflows/unstable.yml
vendored
@@ -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 }}
|
||||
|
||||
87
README.md
87
README.md
@@ -1,39 +1,80 @@
|
||||
# Jitsi Meet on Docker
|
||||
# Jitsi Meet Docker Deployment
|
||||
|
||||

|
||||
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.
|
||||

|
||||
|
||||
[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
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||
@@ -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 && \
|
||||
|
||||
@@ -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
|
||||
|
||||
15
env.example
15
env.example
@@ -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
|
||||
|
||||
@@ -158,6 +158,9 @@ jicofo {
|
||||
video-layers-allocation {
|
||||
enabled = {{ .Env.ENABLE_VLA | default "0" | toBool }}
|
||||
}
|
||||
mid {
|
||||
enabled = {{ .Env.JICOFO_ENABLE_MID | default "1" | toBool }}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
666
log-analyser/grafana-provisioning/dashboards/rtcstats.json
Normal file
666
log-analyser/grafana-provisioning/dashboards/rtcstats.json
Normal 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": ""
|
||||
}
|
||||
@@ -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
31
rtcstats.yml
Normal 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
83
rtcstats/README.md
Normal 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
23
rtcstats/env.example
Normal 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
|
||||
49
rtcstats/localstack/README.md
Normal file
49
rtcstats/localstack/README.md
Normal 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
|
||||
```
|
||||
38
rtcstats/localstack/localstack.yml
Normal file
38
rtcstats/localstack/localstack.yml
Normal 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
1
rtcstats/mongodb/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
data/
|
||||
29
rtcstats/mongodb/README.md
Normal file
29
rtcstats/mongodb/README.md
Normal 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
|
||||
```
|
||||
13
rtcstats/mongodb/mongodb.yml
Normal file
13
rtcstats/mongodb/mongodb.yml
Normal 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
|
||||
3
rtcstats/rtc-visualizer/.data/users.json
Normal file
3
rtcstats/rtc-visualizer/.data/users.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"admin": "CHANGE_ME"
|
||||
}
|
||||
5
rtcstats/rtc-visualizer/env.example
Normal file
5
rtcstats/rtc-visualizer/env.example
Normal file
@@ -0,0 +1,5 @@
|
||||
# rtc-visualizer
|
||||
#RTCSTATS_FILES_ENDPOINT=
|
||||
#RTCSTATS_JWT_PUBLIC_KEY=
|
||||
#RTCSTATS_JWT_EGHT_PUBLIC_KEY=
|
||||
USERS_FILE=.data/users.json
|
||||
37
rtcstats/rtcstats-server/env.example
Normal file
37
rtcstats/rtcstats-server/env.example
Normal 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
BIN
screenshots/app.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 95 KiB |
BIN
screenshots/intro.png
Normal file
BIN
screenshots/intro.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.7 MiB |
@@ -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/ {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
##
|
||||
|
||||
@@ -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 }}';
|
||||
|
||||
Reference in New Issue
Block a user