Skip to content

webdav 服务器

基于 http 协议, 速度还算比较快, 最方便的是: 如果是使用 MacOS, 可以直接用 Finder 链接, 如果是 windows 可以使用资源管理器链接, 不用额外安装其他客户端

  • ugeek/webdav 基于 Nginx 的 webdav, 最容易配置, 速度快, 支持的平台多(amd/arm/Raspberry等都支持)
  • difeid/webdav-server-rs Rust 版本的 webdav-server, 速度非常快(更多功能正在开发中, 可尝鲜体验)
  • hacdias/webdav Go语言版本的 webdav 实现, 体积小, 速度较快
  • bytemark/webdav 基于 Apache 的 webdav 镜像, 虽然下载次数多, 实测容易崩溃, 下载速度也不如其他
yaml
services:
  webdav-server:
    image: ugeek/webdav:amd64 # 注意CPU指令集平台tag
    container_name: webdav-server
    restart: always
    ports:
      - 8080:80
    volumes:
      - ./data:/media
    environment:
      - USERNAME=admin
      - PASSWORD=admin123456 # 注意修改密码
      - TZ=Asia/Shanghai
      - UDI=1000
      - GID=1000

Rust 版本的 webdav-server, 可尝鲜体验

在MacOS中不知道为什么可以用 Finder 链接, 却无法用 Cyberduck 链接

txt
.
├── config                   配置目录
│   ├── htpasswd.conf        账户验证配置
│   └── webdav-server.toml   服务核心配置
├── data                     文件存放目录
│   └── 1.txt
└── docker-compose.yaml      docker-compose配置文件

3 directories, 4 files
yaml
services:
  webdav-server-rs-app:
    image: difeid/webdav-server-rs:latest
    restart: always
    ports:
      - 8080:4918
    volumes:
      - ./data:/data
      - ./config:/config
toml
# Webdav server settings.
# docs: https://github.com/difeid/webdav-server-rs
[server]
  listen = [ "0.0.0.0:4918", "[::]:4918" ]
  uid = 33
  gid = 33
  identification = "webdav-server-rs"

[accounts]
  auth-type = "htpasswd.conf"
  acct-type = "unix"
  realm = "Webdav Server"

[htpasswd.conf]
  htpasswd = "/config/htpasswd.conf"
  # username: admin
  # password: admin123456
  # generate htpasswd file online: https://hostingcanada.org/htpasswd-generator/#password

[unix]
  cache-timeout = 120
  min-uid = 1000
  supplementary-groups = false

[[location]]
  route = [ "/*path" ]
  methods = [ "webdav-rw" ]
  auth = "opportunistic"
  handler = "filesystem"
  on_notfound = "return"
  setuid = false
  directory = "/data" # webdav file save path
  autoindex = true
  hide-symlinks = true
  case-insensitive = "false"
txt
admin:$2y$10$gW9pdANvbPaYTe2kdSGlxu4ghKtd2Kuq1QC/8Tyw/nPBHPBcUEM1.
user2:$2y$10$gW9pdANvbPaYTe2kdSGlxu4ghKtd2Kuq1QC/8Tyw/nPBHPBcUEM1.

ftp 服务器

传输速度快但功能简单

yaml
services:
  vsftpd:
    image: fauria/vsftpd:latest
    container_name: vsftpd
    restart: always
    ports:
      # 链接的时候注意端口
      - "2020:20"
      - "2021:21"
      - "20000:20000"
    volumes:
      - "./data:/home/vsftpd"
    environment:
      FTP_USER: admin # 登录账号
      FTP_PASS: admin123456 # 注意修改密码
      PASV_MIN_PORT: 20000
      PASV_MAX_PORT: 20000
      PASV_ADDRESS: 127.0.0.1 # 注意修改,FTP服务地址,默认使用宿主机地址

nextcloud

功能丰富的开源网盘系统, 社区活跃, 服务端主要用 PHP 实现, 缺点是速度堪忧

yml
networks:
  nextcloud-net:

services:
  db:
    image: mysql:8
    container_name: nextcloud_mysql8
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    ports:
      - "3306:3306"
    networks:
      - nextcloud-net
    volumes:
      - ./mysql_data:/var/lib/mysql
      - ./mysql_conf:/etc/mysql # 如果不手动修改配置, 请注释这行, 否则会报错
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: root1314
      MYSQL_PASSWORD: nextcloud
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud

  app:
    image: nextcloud:stable
    container_name: nextcloud_app
    restart: always
    depends_on:
      - db
    ports:
      - 8080:80
    networks:
      - nextcloud-net
    volumes:
      - ./nextcloud:/var/www/html
    environment:
      MYSQL_PASSWORD: nextcloud
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_HOST: db

seafile

适合备份同步/协作编辑文件, 可看作开源版的坚果云

yaml
networks:
  seafile-net:

services:
  db:
    image: mariadb:10.11
    restart: always
    container_name: seafile-mysql
    hostname: database_server
    environment:
      MYSQL_ROOT_PASSWORD: root-password # mysql 服务 root 用户密码
      MYSQL_LOG_CONSOLE: true
    volumes:
      - ./seafile-mysql:/var/lib/mysql # mysql 数据
    networks:
      - seafile-net

  memcached:
    image: memcached:1.6 # 缓存服务
    restart: always
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net

  seafile:
    image: seafileltd/seafile-mc:11.0.1 # 注意版本
    restart: always
    container_name: seafile
    volumes:
      - ./seafile-data:/shared
    ports:
      - "80:80"
      #- "443:443"  # 是否使用 https 协议
    environment:
      DB_HOST: database_server
      DB_ROOT_PASSWD: root-password
      TIME_ZONE: Asia/Shanghai
      SEAFILE_ADMIN_EMAIL: your_email@example.com # 管理员账号邮箱
      SEAFILE_ADMIN_PASSWORD: your_admin_password # 管理员账号密码
      SEAFILE_SERVER_LETSENCRYPT: false
      SEAFILE_SERVER_HOSTNAME: seafile.example.com # 你的域名(csrf)
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net

cloudreve

速度非常快, 开源版本的百度网盘

sh
# 创建 docker 项目工作目录
mkdir cloudreve-driver
cd cloudreve-driver

# 创建 docker-compose.yaml 配置文件
touch docker-compose.yaml

# 创建 cloudreve 数据存放目录和一些配置文件
mkdir data && \
mkdir cloudreve && \
mkdir cloudreve/{uploads,avatar} && \
touch cloudreve/conf.ini && \
touch cloudreve/cloudreve.db && \
yaml
services:
  cloudreve:
    container_name: cloudreve
    image: cloudreve/cloudreve:latest
    restart: unless-stopped
    ports:
      # 如果部署在 阿里云/腾讯云 需要在安全组中开放端口
      - "12000:5212"
    volumes:
      - temp_data:/data
      - ./cloudreve/uploads:/cloudreve/uploads
      - ./cloudreve/avatar:/cloudreve/avatar
      - ./cloudreve/conf.ini:/cloudreve/conf.ini
      - ./cloudreve/cloudreve.db:/cloudreve/cloudreve.db
    depends_on:
      - aria2

  aria2:
    container_name: aria2
    image: p3terx/aria2-pro
    restart: unless-stopped
    environment:
      # 注意修改这个密码
      RPC_SECRET: your_password
      RPC_PORT: 6800
    volumes:
      - ./aria2/config:/config
      - temp_data:/data

volumes:
  temp_data:
    driver: local
    driver_opts:
      type: none
      device: $PWD/data
      o: bind

Released under the MIT License.