diff --git a/apps/gowebdav/README.md b/apps/gowebdav/README.md new file mode 100644 index 00000000..94abc4e4 --- /dev/null +++ b/apps/gowebdav/README.md @@ -0,0 +1,52 @@ +# GoWebDAV + +> 使用 WebDAV 分享本地文件,轻量、易于使用 + +[English](https://github.com/117503445/GoWebDAV/blob/master/README.md) | 简体中文 + +## 特性 + +- 基于 Golang 实现,性能高。 + +- 最终编译为单二进制文件,不需要 Apache 等环境,依赖少。 + +- 支持浏览器访问。 + +- 可以在同个端口下启用多个 WebDAV 服务,各自有不同的挂载目录、用户名密码。 + +- 良好的 Docker 支持。 + +## 安全 + +GoWebDAV 使用 HTTP Basic Auth 进行验证,账号密码未经加密,毫无安全性可言。如果涉及重要文件、重要密码,请务必用 Nginx 或 Traefik 等代理服务器套一层 HTTPS。 + +GoWebDAV 目前没有直接支持 HTTPS 的计划,因为我认为 HTTPS 涉及域名、证书定期申请,这些工作都应当在上层代理服务器中完成。 + +## 使用 + +```sh +./gowebdav --help # 查看帮助 + +./gowebdav --addr 127.0.0.1 # 在 127.0.0.1 监听,默认监听 0.0.0.0 +./gowebdav --port 8080 # 在 8080 端口监听,默认监听 80 端口 + +./gowebdav --dav "/dir1,/data/dir1,user1,pass1,true" # 配置文件夹路径及属性 +``` + +`dav` 参数可以指定 WebDAV 服务的本地路径、用户验证、是否只读等属性。 + +每个本地路径都可以配置一个 WebDAV 服务,使用分号分隔。例子: + +- `"/dir1,/data/dir1,user1,pass1,true;/dir2,/data/dir2,null,null,false"` 描述了 2 个服务,分别是将文件夹 `/data/dir1` 映射至 WebDAV 服务 `/dir1`,将文件夹 `/data/dir2` 映射至 WebDAV 服务 `/dir2`。 + +对于每个服务,需要使用逗号分隔 5 个参数,分别是 `服务路径,本地路径,用户名,密码,是否只读`。其中用户名和密码都为 `null` 时表示不需要验证。例子: + +- `"/dir1,/data/dir1,user1,pass1,true"` 描述了将 `/data/dir1` 映射至 `/dir1` 服务,访问需要的用户名和密码分别为 `user1` 和 `pass1`,只读(禁止上传、更新、删除)。 +- `"/dir2,/data/dir2,null,null,false"` 描述了将 `/data/dir2` 映射至 `/dir2` 服务,访问不需要验证,可读写。 +- `"/dir3,/data/dir3,null,null,true"` 描述了将 `/data/dir3` 映射至 `/dir3` 服务,访问不需要验证,只读。 + +特别的,如果只有 1 个服务且名为 `/`,则可以直接访问 而不需要指定服务名。例子: + +- `"/,/data/dir1,user1,pass1,true"` 描述了将 `/data/dir1` 映射至 `/` 服务,访问需要的用户名和密码分别为 `user1` 和 `pass1`,只读。 + +当 `dav` 未指定时,GoWebDAV 默认使用的 `dav` 参数为 `/public-writable,./data/public-writable,null,null,false;/public-readonly,./data/public-readonly,null,null,true;/private-writable,./data/private-writable,user1,pass1,false`。 diff --git a/apps/gowebdav/data.yml b/apps/gowebdav/data.yml new file mode 100644 index 00000000..e3d57545 --- /dev/null +++ b/apps/gowebdav/data.yml @@ -0,0 +1,21 @@ +name: GoWebDAV +tags: + - 实用工具 + - 云存储 +title: 轻量易用的 WebDAV 服务器 +description: 轻量易用的 WebDAV 服务器 +additionalProperties: + key: gowebdav + name: GoWebDAV + tags: + - Storage + - Tool + shortDescZh: 轻量易用的 WebDAV 服务器 + shortDescEn: Lightweight and easy-to-use WebDAV server + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://github.com/117503445/GoWebDAV + github: https://github.com/117503445/GoWebDAV + document: https://github.com/117503445/GoWebDAV \ No newline at end of file diff --git a/apps/gowebdav/latest/.env.sample b/apps/gowebdav/latest/.env.sample new file mode 100644 index 00000000..6328d464 --- /dev/null +++ b/apps/gowebdav/latest/.env.sample @@ -0,0 +1,7 @@ +CONTAINER_NAME="gowebdav" +PANEL_APP_PORT_HTTP="40252" +DAV="/dir1,/data/dir1,user1,pass1,true;/dir2,/data/dir2,null,null,false" +DATA_PATH="./data/data" +INNER_DATA_PATH="/data" +DATA_PATH2="./data/data2" +INNER_DATA_PATH2="/data2" \ No newline at end of file diff --git a/apps/gowebdav/latest/data.yml b/apps/gowebdav/latest/data.yml new file mode 100644 index 00000000..47d510b0 --- /dev/null +++ b/apps/gowebdav/latest/data.yml @@ -0,0 +1,45 @@ +additionalProperties: + formFields: + - default: 40252 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "/dir1,/data/dir1,user1,pass1,true;/dir2,/data/dir2,null,null,false" + edit: true + envKey: DAV + labelEn: WebDAV Configuration (referring to the path inside the container) + labelZh: WebDAV 配置 (指的容器内部的路径) + required: true + type: text + - default: ./data/data + edit: true + envKey: DATA_PATH + labelEn: Data folder path + labelZh: 外部数据文件夹路径 + required: true + type: text + - default: /data + edit: true + envKey: INNER_DATA_PATH + labelEn: Path to the internal data folder corresponding to the external data + labelZh: 外部数据对应的内部数据文件夹路径 + required: true + type: text + - default: ./data/data2 + edit: true + envKey: DATA_PATH2 + labelEn: Data folder path 2 + labelZh: 外部数据文件夹路径2 + required: true + type: text + - default: /data2 + edit: true + envKey: INNER_DATA_PATH2 + labelEn: Path to internal data folder corresponding to external data2 + labelZh: 外部数据对应的内部数据文件夹路径2 + required: true + type: text \ No newline at end of file diff --git a/apps/gowebdav/latest/docker-compose.yml b/apps/gowebdav/latest/docker-compose.yml new file mode 100644 index 00000000..0e7d5b0d --- /dev/null +++ b/apps/gowebdav/latest/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3.8' +services: + gowebdav: + image: 117503445/go_webdav:latest + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:80" + environment: + - "dav=${DAV}" + volumes: + - ${DATA_PATH}:${INNER_DATA_PATH} + - ${DATA_PATH2}:${INNER_DATA_PATH2} + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/gowebdav/logo.png b/apps/gowebdav/logo.png new file mode 100644 index 00000000..9cec3e62 Binary files /dev/null and b/apps/gowebdav/logo.png differ