X

部署 filerun 踩坑

2022/2/28

最近都在研究各种文件管理系统 试装了三四个 最后终于找到了舒适的一款

FileRun 是一个支持nextcloud协议的selfhost云盘 感觉体验上比next cloud要好不少

屏幕截图 2022-03-01 003611.png屏幕截图 2022-03-01 003504.png

我是两个compose 用了caddy的docker反向代理 mysql使用了Nas里安装好的

FileRun的docker-compose.yml如下:

version: "3"
networks: 
  default:
    external:
       name: app-net
services:
  web:
    image: filerun/filerun
    environment:
      FR_DB_HOST: 10.0.0.100
      FR_DB_PORT: xxx
      FR_DB_NAME: xxx
      FR_DB_USER: xxx
      FR_DB_PASS: xxx
      APACHE_RUN_USER: pi
      APACHE_RUN_USER_ID: 1000
      APACHE_RUN_GROUP: pi
      APACHE_RUN_GROUP_ID: 1000
    volumes:
      - /share/CACHEDEV3_DATA/cells/trash:/trash
      - /share/CACHEDEV3_DATA/cells/html:/var/www/html
      - /share/CACHEDEV3_DATA/cells/user-files:/user-files

部署过程中也遇到了一些问题

0x0 无法删除文件

  1. 配置一下trash

编辑html/customizables/config.php 没有就新建一个

添加$config['path']['trash']="自定义目录";

  1. chownchmod 确保你有权限写入该目录

0x1 无法创建文件

一样是权限问题 ssh 到你的nas 看看docker上绑定的是哪个目录

然后检查用户组和权限是不是对的

0x2 上传的头像显示失败

网上有类似问题

Avatar Not Show AND Share To Download Error

这个应该是指的文字头像 我的文字头像是正常的 所以出问题的是docker里面的apach没有正确访问到静态资源

好在我们有caddy docker不行 那就让caddy去做这件事情就好了

  1. 首先需要把对应的avatar目录mount到caddy容器

这里贴下docker-compose.yml配置:

version: '3'

services:
  caddy:
    image: reverie89/caddy:latest
    restart: unless-stopped
    environment:
      - CLOUDFLARE_API_TOKEN={cloudflare_token}
    ports:
      - "2:2"
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - "/etc/localtime:/etc/localtime:ro"
      - "/share/CACHEDEV3_DATA/cells/caddy/Caddyfile:/etc/caddy/Caddyfile"
      - /share/CACHEDEV3_DATA/cells/html/system/data/avatars:/data/avatar
      - "./config:/config"
      - "./data:/data"
networks: 
  default:
    external:
       name: app-net

这里 - /xxx/html/system/data/avatars:/data/avatar 就是FileRun的头像文件夹

  1. 配置caddyfile

思路是 判断是不是头像的链接 就先去尝试本地文件 失败后反代到后端

其实最先打算先反代到后端 报错后尝试本地文件 但看文档 handle_errors 不能捕获到反代返回的错误

参见:handle-errors

Note that certain directives, for example reverse_proxy which may write a response with an HTTP status which is classified as an error, will not trigger the error routes.

所以优先本地文件然后捕获报错

缺点就是假设 重置头像不会删除静态文件 测试重置头像会删除文件 不会有bug

以下是caddy配置:

example.com {
    import cf
    @notav {
       not {
         path /a/
         query uid=*
       }
       not path /avatar/*
    }
    rewrite /a/ /avatar/{query.uid}.png
    file_server   {
        root /data/
    }
    route @notav {
        reverse_proxy http://web {
            transport http
        }
    }
    handle_errors {
        reverse_proxy http://web {
            transport http
        }
    }
}
Commit