在 jitsi-meet Docker 环境中为 nginx 支持 PHP

步骤一:准备

安装好Docker与Docker Compose,并根据官网文档搭建好 jitsi-meet。

步骤二:修改 docker-compose.yml

可以在 web 下新增一个 php-fpm 服务(示例用 PHP 8.2,其他版本类同)

version: '3.5'

services:
    # Frontend
    web:
        image: jitsi/web:${JITSI_IMAGE_VERSION:-stable-10184}
        restart: ${RESTART_POLICY:-unless-stopped}
        ports:
            - '${HTTP_PORT}:80'
            - '${HTTPS_PORT}:443'
        volumes:
            - ${CONFIG}/web:/config:ro
            - ${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
            #- ${CONFIG}/web/custom:/usr/share/jitsi-meet
            - /var/www/meet_web:/usr/share/jitsi-meet 
        labels:
            service: "jitsi-web"
        environment:
            # ...省略一堆Jitsi的env...
        networks:
            meet.jitsi:
        depends_on:
            - jvb
            - php-fpm # <-- 依赖 php-fpm 服务
    php-fpm:
         image: php:8.2-fpm-alpine
         restart: ${RESTART_POLICY:-unless-stopped}
         expose:
             - "9000"
         volumes:
            #- ${CONFIG}/web/custom:/usr/share/jitsi-meet # PHP 文件目录与web保持一致
            - /var/www/meet_web:/usr/share/jitsi-meet # PHP 文件目录与web保持一致
         networks:
            meet.jitsi:
    # ... 你的 jitsi-meet 其他服务(如 prosody、jicofo、jvb)配置省略 ...

注意: /var/www/meet_web 是存储 jitsi-meet 前端文件的本地目录路径,可以提前将容器内的文件拷贝到这里,不然会被同步清空,根据你自己实际目录修改。你打算让 PHP 文件存在于这里。

步骤三:修改 nginx 配置让其解析 PHP

打开 ${CONFIG}/web/nginx/meet.conf,添加如下:

location ~ \.php$ {
    root /usr/share/jitsi-meet;
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
}

步骤四:重启服务并测试

在你的 docker-compose 目录下运行:

docker-compose down
docker-compose up -d

用浏览器访问 https://你的服务器:8443



(可选)php:8.2-fpm-alpine 镜像安装 mysqli

1. 在你的 Docker Compose 项目目录下新建 Dockerfile.php 内容如下:

FROM php:8.2-fpm-alpine

# 安装 mysqli 扩展需要依赖
RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \
    && docker-php-ext-install mysqli \
    && apk del .build-deps

2. docker-compose.yml 的 php-fpm 部分修改为:

php-fpm:
         #image: php:8.2-fpm-alpine
         build:
            context: .
            dockerfile: Dockerfile.php
         restart: ${RESTART_POLICY:-unless-stopped}
         expose:
             - "9000"
         volumes:
            #- ${CONFIG}/web/custom:/usr/share/jitsi-meet # PHP 文件目录与web保持一致
            - /var/www/meet_web:/usr/share/jitsi-meet
         networks:
            meet.jitsi:

3. 构建并启动:

docker-compose build php-fpm
docker-compose up -d


迁移说明

只要你迁移 /var/www/meet_web 内容和你的 docker-compose.yml 所在的目录内容到新服务器(及.env),部署环境完全一致,无需容器内改配置。


定制迁移

1. 在旧服务器操作

1.1 使用 commit 导出镜像(如果是compose启动,通常是多个服务)

docker ps 获取容器ID和名称,执行 commit

docker commit <web_容器ID或名字> gd_jitsi_web:custom
docker commit <web_容器ID或名字> gd_jitsi_php_fpm:custom
docker commit <web_容器ID或名字> gd_jitsi_prosody:custom
docker commit <web_容器ID或名字> gd_jitsi_jicofo:custom
docker commit <web_容器ID或名字> gd_jitsi_jvb:custom

1.2 save 导出镜像文件

分别导出你的自定义镜像:

docker save -o gd_jitsi_web.tar gd_jitsi_web:custom
# 其他服务同理...

1.3 打包挂载目录

sudo tar czpf jitsi_web_volume.tar.gz -C / /root/.jitsi-meet-cfg/*

1.4 修改 docker-compose.yml

先备份docker-compose.yml,再修改。

把所有服务的image:字段,指向你导入的自定义镜像(比如gd_jitsi_web:custom),不要写版本号或latest

web:
  image: gd_jitsi_web:custom
  ...
jicofo:
  image: gd_jitsi_jicofo:custom
  ...

1.5 打包 docker-compose.yml所在目录所有文件,传送到新服务器。

2. 在新服务器操作

2.1 解压挂载目录

sudo tar xzpf jitsi_web_volume.tar.gz -C /

2.2 load 导入镜像

docker load -i gd_jitsi_prosody.tar
docker load -i gd_jitsi_web.tar
docker load -i gd_jitsi_jicofo.tar
docker load -i gd_jitsi_jvb.tar
docker load -i gd_jitsi_php_fpm.tar

2.3 启动compose

docker-compose up -d
  • 这样迁移不会拉取新的官网镜像,不会覆盖你定制过的内容。
  • 所有和数据相关的卷/目录,一个都不能漏。配置、数据库、上传文件等都要一起迁移。
  • 如果有用到 docker volume,还要用docker volume lsdocker volume inspect定位卷的数据,手动拷贝(因为 volume 不会自动拷贝)。
  • 鉴于 jitsi-meet 通常依赖多个服务(web、prosody、jicofo、jvb等),每个你定制过的服务都需 export/save 镜像
  • 测试启动没问题后,再更新域名解析到新服务器。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注