# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: jitsi-meeting
spec:
    description: |
        Self-hosted Jitsi Meet stack for multi-party video conferencing.
        This is the stock Jitsi experience; anonymous users can create and join rooms just like on meet.jit.si.
    coverImage: https://raw.githubusercontent.com/jitsi/jitsi-meet/master/resources/img/jitsiLogo_square.png
    icon: https://raw.githubusercontent.com/jitsi/jitsi-meet/master/resources/img/jitsiLogo_square.png
    variables:
        - key: JITSI_DOMAIN
          type: DOMAIN
          name: Jitsi Meet Domain
          description: Public subdomain for the Jitsi Meet web service (e.g. my-jitsi).
        - key: JITSI_FOCUS_PASSWORD
          type: PASSWORD
          name: Jicofo XMPP Password
          description: Shared XMPP password for the Jicofo (focus) user.
        - key: JITSI_JVB_PASSWORD
          type: PASSWORD
          name: JVB XMPP Password
          description: Shared XMPP password for the JVB (videobridge) user.
    tags:
        - Communication
        - Video
        - Jitsi
    readme: |
        # Jitsi Meet

        This template deploys a complete, self-hosted **Jitsi Meet** stack:

        - **jitsi-prosody** — XMPP server
        - **jitsi-jicofo** — Conference focus for media routing
        - **jitsi-jvb** — Jitsi Videobridge (UDP media forwarding enabled)
        - **jitsi-web** — Jitsi Meet web UI

        The deployment uses the default Jitsi Docker image configuration. The prejoin page, language selection, authentication and other features are left to the upstream defaults; you can override them with the standard Jitsi Docker environment variables after deployment.

        After deployment, open the **Open Jitsi Meet** link from the web service instructions to start a conference.

        > Note: The JVB service enables UDP port forwarding so external participants can send/receive media. Make sure your firewall allows the forwarded UDP port.
    resourceRequirement:
        minConfig:
            cpu: 2
            ram: 2
        recommendedConfig:
            cpu: 4
            ram: 4
    services:
        - name: jitsi-prosody
          icon: https://raw.githubusercontent.com/jitsi/jitsi-meet/master/resources/img/jitsiLogo_square.png
          template: PREBUILT
          spec:
            id: jitsi-prosody
            source:
                image: ghcr.io/jitsi/prosody:stable-11146
                runAsUserID: 1000
            ports:
                - id: c2s
                  port: 5222
                  type: TCP
                - id: bosh
                  port: 5280
                  type: TCP
            volumes:
                - id: config
                  dir: /config
            env:
                DISABLE_HTTPS:
                    default: "1"
                    expose: false
                ENABLE_LETSENCRYPT:
                    default: "0"
                    expose: false
                JICOFO_AUTH_PASSWORD:
                    default: ${JITSI_FOCUS_PASSWORD}
                    expose: true
                JICOFO_AUTH_USER:
                    default: focus
                    expose: false
                JVB_AUTH_PASSWORD:
                    default: ${JITSI_JVB_PASSWORD}
                    expose: true
                JVB_AUTH_USER:
                    default: jvb
                    expose: false
                TZ:
                    default: UTC
                    expose: false
                XMPP_AUTH_DOMAIN:
                    default: auth.meet.jitsi
                    expose: false
                XMPP_DOMAIN:
                    default: meet.jitsi
                    expose: false
                XMPP_INTERNAL_MUC_DOMAIN:
                    default: internal-muc.meet.jitsi
                    expose: false
                XMPP_MUC_DOMAIN:
                    default: muc.meet.jitsi
                    expose: false
                XMPP_PORT:
                    default: "5222"
                    expose: false
                XMPP_SERVER:
                    default: localhost
                    expose: false
        - name: jitsi-jicofo
          icon: https://raw.githubusercontent.com/jitsi/jitsi-meet/master/resources/img/jitsiLogo_square.png
          dependencies:
            - jitsi-prosody
          template: PREBUILT
          spec:
            id: jitsi-jicofo
            source:
                image: ghcr.io/jitsi/jicofo:stable-11146
                runAsUserID: 1000
            volumes:
                - id: config
                  dir: /config
            env:
                JICOFO_AUTH_PASSWORD:
                    default: ${JITSI_FOCUS_PASSWORD}
                    expose: false
                JICOFO_AUTH_USER:
                    default: focus
                    expose: false
                JICOFO_MAX_MEMORY:
                    default: 128m
                    expose: false
                JVB_AUTH_PASSWORD:
                    default: ${JITSI_JVB_PASSWORD}
                    expose: false
                TZ:
                    default: UTC
                    expose: false
                XMPP_AUTH_DOMAIN:
                    default: auth.meet.jitsi
                    expose: false
                XMPP_DOMAIN:
                    default: meet.jitsi
                    expose: false
                XMPP_INTERNAL_MUC_DOMAIN:
                    default: internal-muc.meet.jitsi
                    expose: false
                XMPP_MUC_DOMAIN:
                    default: muc.meet.jitsi
                    expose: false
                XMPP_PORT:
                    default: "5222"
                    expose: false
                XMPP_SERVER:
                    default: jitsi-prosody.zeabur.internal
                    expose: false
        - name: jitsi-jvb
          icon: https://raw.githubusercontent.com/jitsi/jitsi-meet/master/resources/img/jitsiLogo_square.png
          dependencies:
            - jitsi-prosody
          template: PREBUILT
          spec:
            id: jitsi-jvb
            source:
                image: ghcr.io/jitsi/jvb:stable-11146
                runAsUserID: 1000
            ports:
                - id: media
                  port: 10000
                  type: UDP
            volumes:
                - id: config
                  dir: /config
            env:
                DISABLE_HTTPS:
                    default: "1"
                    expose: false
                JVB_ADVERTISE_PRIVATE_CANDIDATES:
                    default: "false"
                    expose: false
                JVB_AUTH_PASSWORD:
                    default: ${JITSI_JVB_PASSWORD}
                    expose: false
                JVB_AUTH_USER:
                    default: jvb
                    expose: false
                JVB_PORT:
                    default: "10000"
                    expose: false
                TZ:
                    default: UTC
                    expose: false
                VIDEOBRIDGE_MAX_MEMORY:
                    default: 256m
                    expose: false
                XMPP_AUTH_DOMAIN:
                    default: auth.meet.jitsi
                    expose: false
                XMPP_DOMAIN:
                    default: meet.jitsi
                    expose: false
                XMPP_INTERNAL_MUC_DOMAIN:
                    default: internal-muc.meet.jitsi
                    expose: false
                XMPP_PORT:
                    default: "5222"
                    expose: false
                XMPP_SERVER:
                    default: jitsi-prosody.zeabur.internal
                    expose: false
            portForwarding:
                enabled: true
        - name: jitsi-web
          icon: https://raw.githubusercontent.com/jitsi/jitsi-meet/master/resources/img/jitsiLogo_square.png
          dependencies:
            - jitsi-prosody
            - jitsi-jicofo
            - jitsi-jvb
          template: PREBUILT
          spec:
            id: jitsi-web
            source:
                image: ghcr.io/jitsi/web:stable-11146
                runAsUserID: 1000
            ports:
                - id: web
                  port: 8000
                  type: HTTP
            volumes:
                - id: config
                  dir: /config
            instructions:
                - title: Open Jitsi Meet
                  content: https://${JITSI_DOMAIN}.zeabur.app
            env:
                DISABLE_HTTPS:
                    default: "1"
                    expose: false
                ENABLE_LETSENCRYPT:
                    default: "0"
                    expose: false
                JICOFO_AUTH_PASSWORD:
                    default: ${JITSI_FOCUS_PASSWORD}
                    expose: false
                JICOFO_AUTH_USER:
                    default: focus
                    expose: false
                JVB_AUTH_PASSWORD:
                    default: ${JITSI_JVB_PASSWORD}
                    expose: false
                JVB_AUTH_USER:
                    default: jvb
                    expose: false
                PUBLIC_URL:
                    default: https://${JITSI_DOMAIN}.zeabur.app
                    expose: true
                TZ:
                    default: UTC
                    expose: false
                XMPP_AUTH_DOMAIN:
                    default: auth.meet.jitsi
                    expose: false
                XMPP_BOSH_URL_BASE:
                    default: http://jitsi-prosody.zeabur.internal:5280
                    expose: false
                XMPP_DOMAIN:
                    default: meet.jitsi
                    expose: false
                XMPP_INTERNAL_MUC_DOMAIN:
                    default: internal-muc.meet.jitsi
                    expose: false
                XMPP_MUC_DOMAIN:
                    default: muc.meet.jitsi
                    expose: false
                XMPP_PORT:
                    default: "5222"
                    expose: false
                XMPP_SERVER:
                    default: jitsi-prosody.zeabur.internal
                    expose: false
          domainKey: JITSI_DOMAIN
localization:
    zh-CN:
        description: |
            自托管 Jitsi Meet 视频会议栈，保留原生默认体验。匿名用户可像使用 meet.jit.si 一样创建/加入房间。
        variables:
            - key: JITSI_DOMAIN
              type: DOMAIN
              name: Jitsi Meet 域名
              description: Jitsi Meet Web 服务的公开子域名（例如 my-jitsi）。
            - key: JITSI_FOCUS_PASSWORD
              type: PASSWORD
              name: Jicofo XMPP 密码
              description: Jicofo（会议焦点）用户的共享 XMPP 密码。
            - key: JITSI_JVB_PASSWORD
              type: PASSWORD
              name: JVB XMPP 密码
              description: JVB（视频桥）用户的共享 XMPP 密码。
        readme: |
            # Jitsi Meet

            本模板部署完整的自托管 **Jitsi Meet** 视频会议栈：

            - **jitsi-prosody** — XMPP 服务器
            - **jitsi-jicofo** — 会议焦点，负责媒体路由
            - **jitsi-jvb** — Jitsi 视频桥，已启用 UDP 端口转发
            - **jitsi-web** — Jitsi Meet Web 界面

            部署使用 Jitsi 原生默认配置：预加入页、语言选择、认证等保持上游默认行为；部署后可通过标准 Jitsi Docker 环境变量自行覆盖。

            部署完成后，点击 web 服务说明中的 **Open Jitsi Meet** 即可开始会议。

            > 注意：JVB 已开启 UDP 端口转发，请确保防火墙放行对应的转发 UDP 端口，以便外部参会者收发媒体流。
    zh-TW:
        description: |
            自架 Jitsi Meet 視訊會議堆疊，保留原生預設體驗。匿名使用者可像使用 meet.jit.si 一樣建立/加入房間。
        variables:
            - key: JITSI_DOMAIN
              type: DOMAIN
              name: Jitsi Meet 網域
              description: Jitsi Meet Web 服務的公開子網域（例如 my-jitsi）。
            - key: JITSI_FOCUS_PASSWORD
              type: PASSWORD
              name: Jicofo XMPP 密碼
              description: Jicofo（會議焦點）使用者的共享 XMPP 密碼。
            - key: JITSI_JVB_PASSWORD
              type: PASSWORD
              name: JVB XMPP 密碼
              description: JVB（視訊橋）使用者的共享 XMPP 密碼。
        readme: |
            # Jitsi Meet

            本模板部署完整的自架 **Jitsi Meet** 視訊會議堆疊：

            - **jitsi-prosody** — XMPP 伺服器
            - **jitsi-jicofo** — 會議焦點，負責媒體路由
            - **jitsi-jvb** — Jitsi 視訊橋，已啟用 UDP 連接埠轉發
            - **jitsi-web** — Jitsi Meet Web 介面

            部署使用 Jitsi 原生預設配置：預加入頁、語言選擇、認證等保持上游預設行為；部署後可透過標準 Jitsi Docker 環境變數自行覆蓋。

            部署完成後，點擊 web 服務說明中的 **Open Jitsi Meet** 即可開始會議。

            > 注意：JVB 已開啟 UDP 連接埠轉發，請確保防火牆放行對應的轉發 UDP 連接埠，以便外部參與者收發媒體流。
