Droppy 教程 | 轻量级的文件共享服务

唠唠闲话

在数字化时代,文件共享成为了日常工作的重要组成部分。特别是对于那些需要快速、高效地分享大文件的人来说,拥有一个简单、可靠且易于管理的平台至关重要。

本篇介绍的是 Droppy,一个轻量级、功能强大的自托管文件共享服务。教程将介绍如何使用 Docker 和 Nginx 来部署 Droppy,打造一个既方便又高效的文件共享环境。

项目地址:https://github.com/droppyjs/droppy

测试环境

以下是个人的测试环境

uname -i
x86_64

❯ docker -v
Docker version 24.0.5, build 24.0.5-0ubuntu1~20.04.1

❯ docker-compose -v
docker-compose version 1.28.5, build c4eb3a1f

Docker 配置 Droppy

首先,通过 docker-compose 来快速部署 Droppy:

version: '3'
services:
  droppy:
    container_name: droppy-fileserver
    image: silverwind/droppy
    ports:
      - "8989:8989"
    volumes:
      - ./files:/files
      - ./config:/config
    restart: unless-stopped

在这个配置中,文件将存储在当前目录下的 files 文件夹中,配置信息则保存在 config 文件夹中。

文件说明:

  1. files 文件夹:存储文件,所有用户共享这一文件夹
  2. config/db.json:存储 Droppy 的配置信息,包括用户信息、权限等
  3. config/config.json:存储服务启动的配置信息,包括端口、访问限制等

Nginx 配置

接下来配置 Nginx,80 端口进行重定向

server {
    listen 80;
    server_name droppy.wzhecnu.cn;
    return 301 https://$host$request_uri;
}

主要在配置 443 端口,配置如下:

server {
    listen 443 ssl;
    server_name droppy.wzhecnu.cn;
    ssl_certificate /etc/letsencrypt/live/wzhecnu.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/wzhecnu.cn/privkey.pem;
    location / {
      proxy_pass http://127.0.0.1:8989;
      proxy_set_header Host $host;
      proxy_set_header Upgrade $http_upgrade; # required for ws!
      proxy_set_header Connection $http_connection;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Real-Port $remote_port;
      proxy_http_version 1.1;
      proxy_cache off;
      proxy_buffering off;
      proxy_redirect off;
      proxy_request_buffering off;
      proxy_ignore_client_abort on;
      proxy_connect_timeout 7200;
      proxy_read_timeout 7200;
      proxy_send_timeout 7200;
      client_max_body_size 0;
   }
}

各项指令的作用如下。

请求头设置:

  • proxy_set_header Host $host;:将请求头中的 Host 字段设置为客户端请求的 Host
  • proxy_set_header Upgrade $http_upgrade;:这个指令对于 WebSocket 支持是必须的。如果 Droppy 使用了 WebSocket,这将确保升级请求被正确传递
  • proxy_set_header Connection $http_connection;:传递正确的 Connection 头,这对于一些特殊协议(如 WebSocket)的连接是必需的
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:将用户的真实 IP 地址传递给 Droppy,这在日志和一些网络策略中非常有用
  • proxy_set_header X-Forwarded-Proto $scheme;:传递原始请求的协议(如 http 或 https)
  • proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Real-Port $remote_port;:分别传递用户的 IP 地址和端口

其他设置:

  • proxy_http_version 1.1;:设置 HTTP 协议版本为 1.1
  • proxy_cache off;proxy_buffering off;proxy_request_buffering off;:这些指令禁用了代理层面的缓存和缓冲,有助于减少内存使用,并允许大文件流式传输
  • proxy_redirect off;:禁用代理重定向,避免修改后端服务器的重定向
  • proxy_ignore_client_abort on;:即使客户端中断连接,也会继续向后端 Droppy 服务器发送请求
  • proxy_connect_timeout 7200;proxy_read_timeout 7200;proxy_send_timeout 7200;:设置连接、读取和发送超时时间,这里设置为 7200 秒,以便支持长时间连接
  • client_max_body_size 0;:这里设置为 0,表示取消上传文件大小的限制

ssl 证书的获取可以参考 『{% post_link server/nginx/lets-encrpt-ssl %}』。

使用 Droppy

部署完成后,通过浏览器访问 Droppy。

  1. 首次访问,登录界面如下,输入用户名和密码即可登录,默认为管理员账号:

    20240126152512

  2. 文件上传,左上角四个按钮分别为上传文件、文件夹,创建文件、文件夹:

    20240126152820

  3. 点击文件或文件夹右侧按钮,进行下载、分享或删除操作:

    20240126152905

  4. 管理员账号还可以设置用户权限,创建用户,删除用户,重置密码等。这些操作可以通过右上角的设置进入:

    20240126152957

通常情况下,新增用户分配为普通权限就够了。

结语

以上,Droppy 结合 Docker + Nginx ,提供一个强大的文件共享和存储解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

致宏Rex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值