filerun 搭建和使用 以及常见问题

# 对比和感受

2023-0519 补充:filerun免费版可以说是目前 最强大且最简单易用的 最流畅 细节做的最好 适合中小团和个人的网盘程序。

  • cloudreve 界面起来漂亮,但是实际使用小问题很多,甚至视频播放都没有方便的返回键。webdav有严重问题,反馈很多次作者无视觉得自己很好。不支持硬盘文件扫描
  • seafile 这。。。蛋疼的玩意,丑且功能弱鸡,性能也拉跨
  • filebrower 小巧灵活,但是功能少太多了,只适合简单的场合使用 或者路由器等硬件受限的情况
  • alist 它的本地文件管理功能,只能说是凑合。毕竟它只是顺带做了一下,人家专业不在这里
  • nextcloud/owncloud 很强,php8以后性能也完全ok,但是webui 真的太卡了。
  • unraid 这个还是aio平台,他的所谓nas功能只是弱鸡,作为aio是pve的弟弟,作为nas核心功能和性能也被一众免费软件吊打
  • 群晖 很优秀 ,但是也仅适合linux小白管理员,可以几乎无脑搭建一个功能完善的nas+网盘程序。灵活性不足,黑群晖不稳定。
    filerun的比这些网盘程序优秀的地方:
  • webui极度流畅舒适!成熟度高
  • 硬件性能要求低,树莓派,N1 等都可流畅运行,一般x86的软路由器更不在话下
  • 性能优化卓越,新版本基于php8.1 性能爆发式增长,在这种io密集应用上,性能已经和go的基本持平。firerun的旧版在早已经可以轻松跑慢千兆,万兆下也有8-900MB/s的速度
  • 保持本地目录结构,可以方便的扩充磁盘 。以及和smb nfs sftp ftp协议的扩展。
  • 手机客户端可以用免费的nextcloud/owncloud 的app 解决同步问题,当然也有很多支持webdav的程序
  • 优秀的缩略图配置,包括视频的可以设置N秒的自动截图。其他图片和office 文本文件 默认配置就已经很优秀。nextcloud/owncloud 也有同样的功能和配置参数,但是相对复杂一些
  • 简单易用并安全的在线office配置,同样的只有 nextcloud/owncloud 和 seafile 可以比肩。cloudreve最近才支持,但是对应的权限部分cloudreve并不支持。 而且cloudreve的webui连个返回按钮都没有。
  • 自定义文件名文件名后缀的编辑器和预览,目前只有 nextcloud/owncloud 是同水平的。 其他要么没有,要么支持的格式或者编辑器预览工具太少
  • 极度完善的几乎所有格式的文件的在线预览和编辑接口的支持,包括3d文件 ,ps文件等,参考上条。
  • 极度舒适的视频在线播放 只有nextcloud/owncloud 是同水平的
  • 优秀方便的音频播放器 只有nextcloud/owncloud 是同水平的
  • webui 个性化定制功能善,当然收费版本功能非常完善,免费版的简单一些,但是也够用
  • 完善的webdav支持,很多号称支持webdav的网盘程序,实际上wevdav都有一些问题。
  • 手机客户端的完善支持,filerun的api兼容nextcloud/owncloud 可以直接使用nextcloud/owncloud 的手机客户端app。当然其他支持webdav等协议的app更没问题。
  • 文件同步功能完善,因为兼容nextcloud/owncloud 的api可以直接使用他们的客户端。另外因为filerun是为数不多的可以对webdav的完善支持的软件,所以也可以使用rclone kopia等优秀第三方软件 。另外因为文件储存接口是本地硬盘的结构

filerun相对的缺点:

  • 基于php 就决定了他的依赖复杂,整体磁盘占用要比go语言的的那些大一写,go的几M到几十M,pythone类的也就几百几十M就够了。 毕竟一个裸机linux+php相关依赖 已经到1.5G左右的磁盘占用了。在独立lxc运行的时候,这个磁盘占用就明显了。 在磁盘紧张的硬路由上不适合。
  • 数据库只可以用mysql/mariadb,不支持文件类型数据库(比如sqlite),和pgsql等其他数据库。这就意味着,低性能的老式路由器 就别想了。但是树莓派之类的arm还是可以i的。
  • 非开源软件 ,虽然成熟度很高,但是作为一个免费用户,你如果想去掉版权特征之类的还是略微有一点麻烦。
  • 非国产软件,这算优点还是缺点呢?
  • 免费版默认5用户,注册后可以10用户,但是注册需要公网可访问,且更换域名需要重新注册。
  • 用户配额管理以及一些高级功能是收费功能,除了nextcloud/owncloud 其他的网盘程序相关功能也基本都是收费的。
  • 中文社区支持不好,需要你自己会一点linux docker的知识,后面有手把手的教程 可以完成中文汉化和office中文缩略图等。
  • 基于磁盘的文件结构,在大量小文件的时候会性能下滑这是所有此类文件结构的网盘的通病。但是这里的大量是指的同目录下的万级
  • 目前版本还是没有自带网络云储存的支持,甚至都不支持常见的S3协议,你需要另外用alist/rclone 挂载。

# 原文:

在nas系统的这几年的折腾中,遇到很多问题,最终决定随大流,迁移到 nextcloud的怀抱,但是nextcloud webui卡顿很烦。所以决定先用filerun,慢慢研究nextcloud的优化。 filerun 基本上相当于nextcloud的 轻量优化版本。 最大的优势 就是使用简单 速度快。缺点 不开源 限制多 功能少很多。 我大概看了一下免费版filerun对开源版nextcloud 比较常用功能缺失的有:即时通讯聊天软件功能、日历功能、邮件中心、账户限额、最多10人的限制
其实最大的不同 就是 10人限制 和 配额的问题。其实这个问题可以 用 sftpgo 或者rclone serve模式搞定,以后或许会写一个文章。
另外filerun 不支持sqlite,只支持 mysql/mariadb,也就是说哪怕就你一个人用,你也要跑一个数据库服务(filerun也不支持postgreSql)。

# 准备安装

我这里是pve平台,用lxc套娃docker方式。性能几乎没有损耗。要比虚拟机方式好很多。 硬盘直通:硬盘是 在pve上 /dev/sda1 机械硬盘

# 新建CT容器

当然你用虚拟机或者直接docker 都可以。alpine3.17 2G 8G 特权容器 ,内存给多一点. CT id为 10083 分别IP 10.1.1.83/24 创建完成后不要启动

# 解决特权容器嵌套docker的问题。

在这个容器的 选项功能里面 勾选上 嵌套,最好Fuse smb nfs也勾选上

1
2
3
4
5
6
# pve执行
export lxcid=10083 #修改这个id
echo "lxc.apparmor.profile: unconfined">> /etc/pve/lxc/${lxcid}.conf
echo "lxc.cgroup.devices.allow: a">> /etc/pve/lxc/${lxcid}.conf
echo "lxc.cap.drop:">> /etc/pve/lxc/${lxcid}.conf
cat /etc/pve/lxc/${lxcid}.conf

# 直通硬盘

1
2
3
# pve执行
export lxcid=10083 #修改这个id
pct set ${lxcid} -mp0 /dev/sda1,mp=/mnt/sda1  # mp0 mp1 mp2 ··· mpN 可直通多个硬盘

# alpine系统准备

其他系统一样自行替换命令,容器开机后 登录,在容器内执行

# 源和时区

1
2
3
4
5
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
apk add tzdata 
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone
apk del tzdata

# 开启ssh

1
2
3
4
apk add openssh
rc-update add sshd boot
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config #允许root密码登陆
service sshd restart

# 安装docker

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
apk add docker  docker-compose
rc-update add docker boot
mkdir /etc/docker/
cat > /etc/docker/daemon.json  << EOF
{
  "registry-mirrors": [
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
EOF
service docker restart && sleep 2s
docker version

# 安装filerun

因为php写的依赖实在太多,我这里直接docker来跑。 如果你环境里已经有 mysql/mariadb 可以调整一下下面的文件。

# 用官网推荐的

直接用官网的方式安装即可 https://docs.filerun.com/docker 其中全文搜索,我这边部署出错,不确定具体原因。加上我这里确实用不到,没有继续研究,就用了基础安装。 主意把里面的 路径修改为实际路径。另外就是 filerun的版本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
docker stop filerun_web_1 && docker rm filerun_web_1
docker stop filerun_db_1 && docker rm filerun_db_1
rm -rf ~/filerun && mkdir -p ~/filerun/html  && mkdir -p ~/filerun/db
cat > ~/filerun/docker-compose.yml<< \EOF
version: '2'
services:
  db:
    image: mariadb:10.1
    environment:
      TZ: 'Asia/Shanghai'
      MYSQL_ROOT_PASSWORD: root_psw_T2Z6hpD9iJtppQ
      MYSQL_USER: fr_username
      MYSQL_PASSWORD: fr_db_psw_FKsAPdjaqUug48
      MYSQL_DATABASE: filerun_db
    volumes:
      - ~/filerun/db:/var/lib/mysql

  web:
    image: filerun/filerun:8.1
    environment:
      TZ: 'Asia/Shanghai'
      FR_DB_HOST: db
      FR_DB_PORT: 3306
      FR_DB_NAME: filerun_db
      FR_DB_USER: fr_username
      FR_DB_PASS: fr_db_psw_FKsAPdjaqUug48
      APACHE_RUN_USER: www-data
      APACHE_RUN_USER_ID: 33
      APACHE_RUN_GROUP: www-data
      APACHE_RUN_GROUP_ID: 33
    depends_on:
      - db
    links:
      - db:db
    ports:
      - "80:80"
    volumes:
      - ~/filerun/html:/var/www/html
      - /mnt/sda1:/user-files
EOF
cd ~/filerun && docker-compose up -d

2023 -05-22 filerun已经关闭免费用户,大概是作者可能感受到了一些免费用户的不太愉快的语言后,就直接关闭了。 2023.1版本免费版本的最后一个版本,并且 是不可用的状态。同时在作者发布公告之前,他删除了旧版的docker镜像!

闭源个人软件 还是谨慎一些,不过好在支持本地目录储存。可以方便的平滑迁移到nextcloud

2023-05-05补:filerun在创建的时候,Apache可以指定用户。解决和smb冲突的权限问题。 修改前面的 APACHE_RUN_USER 和APACHE_RUN_GROUP_ID
另外 volumes根据你的实际情况自己修改一下

# 启动filerun

1
docker-compose up -d # 要先cd到docker-compose.yml 所在目录

如果无法启动成功,查看一下

1
2
docker logs -f filerun_web_1 # 可以看到少目录
mkdir -p  ~/filerun/html/system/data/temp/

# 配置

访问 http://10.1.1.83/ 一路下一步即可, 最后创建了 一个超级用户 superuser 记住密码 去 登录

# 修改密码

点左下角 Control panel 进入后台面板,在点右上角 Admin user ,找到superuser 修改掉 用户名和密码 , 保存后 重新刷新页面,重新登录即可

# 关于重启后无法启动的问题

上面的 docker-compose 命令的问题,修复一下

1
2
docker ps -a -q # 查看 容器的id
docker update --restart=always   容器的id

# 中文

filerun切换中文语言 获取语言包并上传方法

# onlyoffice 使用

filerun 内置了多种office的接口,一般情况下 启用 google 和 onlyoffice 就足够用了。
onlyoffice 兼容性很好,而且支持私有化部署。google的话需要科学环境和申请api
onlyoffice的部分 可以本站搜索
这里提供一个 使用nginx过滤 onlyoffice wopi的来源的 一个配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
upstream docservice {
  server 10.1.1.84:8080;
}

map $http_host $this_host {
    "" $host;
    default $http_host;
}

map $http_x_forwarded_proto $the_scheme {
     default $http_x_forwarded_proto;
     "" $scheme;
}

map $http_x_forwarded_host $the_host {
    default $http_x_forwarded_host;
    "" $this_host;
}

map $http_upgrade $proxy_connection {
  default upgrade;
  "" close;
}

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

#陷阱主机
server {
  listen       10011 ssl;
  server_name  trap.jia.leiyanhui.com;
  include /etc/nginx/sites-enabled/ssl-jia.leiyanhui.com.conf.noAutoLoad; 
  root /usr/share/nginx/html;
}
#真实主机
server {
  listen       10011 ssl;
  server_name  office-XXXXXXXX.jia.leiyanhui.com;
  server_tokens off;
  include /etc/nginx/sites-enabled/ssl-jia.leiyanhui.com.conf.noAutoLoad; 
  add_header Strict-Transport-Security "max-age=1209600; includeSubDomains" always;
  add_header X-Content-Type-Options nosniff;
  location /hosting/wopi {
        if ( $args ~ wopisrc=https%3A%2F%2Fpan.jia.leiyanhui.com%3A ) {
                proxy_pass http://docservice;
                }
        proxy_http_version 1.1;
  }
  location / {
        valid_referers none blocked *.jia.leiyanhui.com;
        if ($invalid_referer) {return 403;} 
        proxy_pass http://docservice ;
        proxy_http_version 1.1;
  }
}

# nginx反代 并且加ssl

nginx 反代 需要注意 文件大小 超时 等 参考我的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
server {
  server_name XXXX;
    listen 50443 ssl http2;
    ssl_certificate /root/ssl/XXX;
    ssl_certificate_key /root/ssl/XXX;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    listen 50442;
    if ($scheme = http) {
    return 301 https://:50443;
    }
    error_page 497 https://$host:50443;
  location / {
    add_header Cache-Control no-cache;
    add_header Cache-Control private;
    expires -1s;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Range $http_range;
    proxy_set_header If-Range $http_if_range;
    proxy_connect_timeout 36000s;
    proxy_read_timeout 36000s;
    proxy_send_timeout 36000s;
    proxy_request_buffering off;
    send_timeout 36000s;
    proxy_redirect off;
    proxy_pass http://10.1.1.80:5212/;
    client_max_body_size 20000m;
  }
 
}

# 从其他系统导入文件

直接移动到 /mnt/sda1/filerun_files 即可,但需要修改一下权限

1
docker exec -it filerun-docker_web_1 chown -R www-data:www-data  /user-files

# 预览和编辑部分 中文乱码

需要处理字体

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
docker exec -it filerun-docker_web_1 bash
----------------
apt update
apt install wget unzip
mkdir /usr/share/fonts/truetype/winfonts && cd /usr/share/fonts/truetype/winfonts
wget -c https://ghproxy.com/https://github.com/joyanhui/file.leiyanhui.com/archive/refs/heads/windows_font.zip
unzip windows_font.zip
mv file.leiyanhui.com-windows_font/* .
rm -rf file.leiyanhui.com-windows_font
rm -rf windows_font.zip
fc-cache -f
rm -rf /user-files/.filerun.*
exit
----------
docker restart filerun-docker_web_1  # 重启docker

之后新上传的文档 就可以了显示中中文了。如果还有文件不可以 ,就要docker 里面 清理掉 和文档同一个目录的 .filerun.* 文件夹。或者

1
2
3
4
docker exec -it filerun-docker_web_1 bash
----------------
cd /user-files/
find . -name '.filerun.*' -type d | xargs rm -rf  # 注意安全!!!!

# doc文件缩略图的方块

暂时不知道 怎么处理 ,留个坑

1
apt install fonts-wqy-zenhei  # 貌似搞定

# 时区修改

https://docs.filerun.com/time_zone

# 定义样式

https://docs.filerun.com/custom_css

# 备份

我这里是lxc运行的。只需要备份 lxc的 conf 以及 docker-compose.yml 就好了。
因为 filerun 可以自动扫描硬盘的文件,加上 我们是免费用户,所以用户数也不会多,数据库 可以不备份。 只需要我们备份 filerun 的配置文件即可。
也就是 XXXX:/var/www/html 目录 数据库存在mysql里面也可以导出备份

也可以 整个lxc 备份到 压缩包

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计