步骤一:准备
安装好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 ls
和docker volume inspect
定位卷的数据,手动拷贝(因为 volume 不会自动拷贝)。 - 鉴于 jitsi-meet 通常依赖多个服务(web、prosody、jicofo、jvb等),每个你定制过的服务都需 export/save 镜像。
- 测试启动没问题后,再更新域名解析到新服务器。