1Panel中重建Flarum镜像导致插件丢失
环境信息
面板:1Panel
镜像:
crazymax/flarum:1.8.10Flarum:使用1panel官方应用商店一键安装的
又是什么鸟问题?
旷课了被辅导员发现了,有点暴躁 不好意思
在1panel商店更新或者重建flarum镜像后,flarum论坛插件消失
刚看了一下 docker-compose.yml 文件,默认挂载了/data 目录。
插件丢失,很有可能是安装的插件目录不在/data下,Panel 的 Flarum 应用默认只挂载了 /data 目录,而插件的核心文件存放在 vendor 和 extensions 目录,这些默认并未包含在内
networks:
1panel-network:
external: true
services:
flarum:
container_name: ${CONTAINER_NAME}
deploy:
resources:
limits:
cpus: ${CPUS}
memory: ${MEMORY_LIMIT}
environment:
- TZ=Asia/Shanghai
- PUID=1000
- PGID=1000
- MEMORY_LIMIT=256M
- UPLOAD_MAX_SIZE=256M
- CLEAR_ENV=yes
- OPCACHE_MEM_SIZE=128M
- LISTEN_IPV6=true
- REAL_IP_FROM=0.0.0.0/32
- DB_HOST=${PANEL_DB_HOST}
- DB_PORT=${PANEL_DB_PORT}
- DB_NAME=${PANEL_DB_NAME}
- DB_USER=${PANEL_DB_USER}
- DB_PASSWORD=${PANEL_DB_USER_PASSWORD}
- DB_PREFIX=${PANEL_DB_PREFIX}
- DB_NOPREFIX=false
- DB_TIMEOUT=60
- FLARUM_BASE_URL=${FLARUM_EXTERNAL_URL}
image: crazymax/flarum:1.8.10
labels:
createdBy: Apps
networks:
- 1panel-network
ports:
- ${HOST_IP}:${PANEL_APP_PORT_HTTP}:8000
restart: always
volumes:
- ./data:/data #重点在这里 你看 他只持久化了data目录
但 Flarum 的插件实际存放在容器内的 /opt/flarum/ 下:
容器内目录结构:
/
├── data/ ← 已持久化(用户数据、帖子、配置)
└── opt/
└── flarum/
├── composer.json ← 插件清单(未持久化)
├── composer.lock ← 插件版本锁(未持久化)
├── vendor/ ← 插件核心代码(未持久化)⚠️
└── extensions/ → 软链接 → /data/extensions(已持久化)✅
一些发现:
extensions/ 目录好像是软链接,指向 /data/extensions,已经持久化了,不需要再额外处理,这里我其实是有疑问的,为啥?
真正需要持久化的是 vendor/composer.jsoncomposer.lock
解决步骤
第一步:备份现有数据
# 备份整个应用目录 如果目录不同、记得替换为你的应用目录
cp -r /opt/1panel/apps/flarum /opt/1panel/apps/flarum_backup_$(date +%Y%m%d)第二步:确认容器名和目录
# 我先看看容器名
docker ps | grep flarum
# 我看看先、确认应用目录
ls /opt/1panel/apps/flarum/flarum/第三步:从容器复制关键文件到宿主机
CONTAINER=1Panel-flarum-TESe # 兄弟记得替换为你的容器名
APP_DIR=/opt/1panel/apps/flarum/flarum # 记得替换为你的应用目录
# 复制插件清单
docker cp $CONTAINER:/opt/flarum/composer.json $APP_DIR/
docker cp $CONTAINER:/opt/flarum/composer.lock $APP_DIR/
# 复制插件核心代码
docker cp $CONTAINER:/opt/flarum/vendor $APP_DIR/
⚠️ 注意
extensions不需要复制,它是软链接,已经通过/data持久化了。
第四步:验证文件已复制
ls /opt/1panel/apps/flarum/flarum/
# 应该看到:composer.json composer.lock data data.yml docker-compose.yml vendor第五步:修改 docker-compose.yml
# 先备份原文件
cp $APP_DIR/docker-compose.yml $APP_DIR/docker-compose.yml.bak
# 追加新的挂载配置
cat >> $APP_DIR/docker-compose.yml << 'EOF'
- ./vendor:/opt/flarum/vendor
- ./composer.json:/opt/flarum/composer.json
- ./composer.lock:/opt/flarum/composer.lock
EOF修改后的 volumes 部分应该是这样:
volumes:
- ./data:/data # 原有,不动
- ./vendor:/opt/flarum/vendor # 新增
- ./composer.json:/opt/flarum/composer.json # 新增
- ./composer.lock:/opt/flarum/composer.lock # 新增第六步:去GUI重建容器验证
我自己测试的 没问题了 插件都还在,但是我是同版本重建哈,如果需要更新请备份!
原理说明
composer.json 和 composer.lock 是插件的配方:
# 有了这两个文件,任何时候都能完整还原所有插件
# 官方的 docker-compose没有持久化插件 配方 和 目录 所以你重建或者更新 插件就会消失,但是我发现一般插件数据都是存在数据库的,你也不用担心
# 确实丢失了重新给插件一个一个install回来就好了
composer install # 如果你备份了composer.json 和 composer.lock 可以根据 lock 文件精确还原安装
# vendor/ 是插件的"实体",直接挂载可以跳过重新下载的过程,恢复最快。
1Panel中重建Flarum镜像导致插件丢失
https://wlw301.top//archives/CvPnqJPk