From 468102d53e11cb24cd499cdbe6c707da3b97447b Mon Sep 17 00:00:00 2001 From: wanghe Date: Wed, 2 Aug 2023 16:54:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20sftpgo=20(#269)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sftpgo/README.md | 69 ++++++++++++++++++++++++++ apps/sftpgo/data.yml | 20 ++++++++ apps/sftpgo/logo.png | Bin 0 -> 2541 bytes apps/sftpgo/v2.5.4/data.yml | 58 ++++++++++++++++++++++ apps/sftpgo/v2.5.4/docker-compose.yml | 28 +++++++++++ 5 files changed, 175 insertions(+) create mode 100644 apps/sftpgo/README.md create mode 100755 apps/sftpgo/data.yml create mode 100644 apps/sftpgo/logo.png create mode 100755 apps/sftpgo/v2.5.4/data.yml create mode 100644 apps/sftpgo/v2.5.4/docker-compose.yml diff --git a/apps/sftpgo/README.md b/apps/sftpgo/README.md new file mode 100644 index 00000000..9595e86a --- /dev/null +++ b/apps/sftpgo/README.md @@ -0,0 +1,69 @@ +# SFTPGo + +功能齐全、高度可配置化、支持自定义 HTTP/S,FTP/S 和 WebDAV 的 SFTP 服务。 +一些存储后端支持:本地文件系统、加密本地文件系统、S3(兼容)对象存储,Google Cloud 存储,Azure Blob 存储,SFTP。 + +## 创建第一个管理员 + +开始使用 SFTPGo,你需要创建一个管理员用户: + +- 通过 web 管理员界面。默认 URL 是 [http://127.0.0.1:8080/web/admin](http://127.0.0.1:8080/web/admin) + +## 用户和目录管理 + +在启动 SFTPGo 之后,你可以管理用户和目录使用: + +- [基于 Web 的管理员界面](https://github.com/drakkan/sftpgo/blob/main/docs/web-admin.md) + +## 教程 + +一些手把手教程可以在源码文件树中的 [howto](https://github.com/drakkan/sftpgo/blob/main/docs/howto "How-to") 目录找到。 + +## 虚拟目录 + +用户 home 文件夹外或者基于不同存储提供的目录,可以作为虚拟目录进行暴露,详细信息参考 [虚拟目录](https://github.com/drakkan/sftpgo/blob/main/docs/virtual-folders.md)。 + +## 存储后端 + +### S3/GCP/Azure + +每个用户可以被映射到 [S3 兼容对象存储](https://github.com/drakkan/sftpgo/blob/main/docs/s3.md) /[Google Cloud 存储](https://github.com/drakkan/sftpgo/blob/main/docs/google-cloud-storage.md)/[Azure Blob 存储](https://github.com/drakkan/sftpgo/blob/main/docs/azure-blob-storage.md) bucket 或者一个 bucket 虚拟目录,通过 SFTP/SCP/FTP/WebDAV 进行暴露。 + +### SFTP 后端 + +每个用户可以被映射到另一个 SFTP 服务器账户或者它的子目录。更多的信息可以参考 [sftpfs](https://github.com/drakkan/sftpgo/blob/main/docs/sftpfs.md)。 + +### 加密后端 + +数据静态加密通过 [cryptfs 后端](https://github.com/drakkan/sftpgo/blob/main/docs/dare.md) 进行支持。 + +### 其它存储后端 + +添加新的存储后端非常简单: + +- 实现 [Fs 接口](./vfs/vfs.go#L28 "interface for filesystem backends") +- 更新用户方法 `GetFilesystem` 返回新的后端 +- 更新 web 接口和 REST API CLI +- 为新的存储后端添加向 `portable` 模式添加 flags + +无论如何,一些后端需要按次付费账户(或者他们提供限制期限内提供免费账户)。为了能够添加这些账户支持或者预览 PRs,请提供一个测试账户。测试账户必须在提供足够长时间维护此后端,并且支持每一次新的发行版之前做基本测试。 + +## 强力保护 + +SFTPGo 支持内置 [防护](https://github.com/drakkan/sftpgo/blob/main/docs/defender.md)。 + +你可以使用 [连接失败日志](https://github.com/drakkan/sftpgo/blob/main/docs/logs.md) 在诸如 [Fail2ban](http://www.fail2ban.org/) 进行工具内集成。[jails](./fail2ban/jails) 和 [filters](./fail2ban/filters) 示例,在 fail2ban 目录中与 `systemd`/`journald` 是可以同时工作的。 + +## 账户配置属性 + +关于账户配置属性的细节信息,请参考 [账户](https://github.com/drakkan/sftpgo/blob/main/docs/account.md)。 + +## 性能 + +SFTPGo 在没有特殊配置的情况下,可以实现低端硬件轻松达到 GB 量级连接,对于大多数场景足够使用了。 + +更多深度性能分析可以参考 [性能](https://github.com/drakkan/sftpgo/blob/main/docs/performance.md)。 + +## 许可证 + +GNU AGPL-3.0-only \ No newline at end of file diff --git a/apps/sftpgo/data.yml b/apps/sftpgo/data.yml new file mode 100755 index 00000000..534b6d88 --- /dev/null +++ b/apps/sftpgo/data.yml @@ -0,0 +1,20 @@ +name: SFTPGo +tags: + - 工具 +title: 支持自定义 HTTP/S,FTP/S 和 WebDAV 的 SFTP 服务 +type: 工具 +description: 支持自定义 HTTP/S,FTP/S 和 WebDAV 的 SFTP 服务 +additionalProperties: + key: sftpgo + name: SFTPGo + tags: + - Tool + shortDescZh: 支持自定义 HTTP/S,FTP/S 和 WebDAV 的 SFTP 服务 + shortDescEn: Support for custom HTTP/S, FTP/S, and WebDAV in SFTP service + type: tool + crossVersionUpdate: false + limit: 1 + recommend: 0 + website: https://sftpgo.com/ + github: https://github.com/drakkan/sftpgo/ + document: https://github.com/drakkan/sftpgo/blob/main/docs/howto/getting-started.md diff --git a/apps/sftpgo/logo.png b/apps/sftpgo/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3ac9d2548c4c8e3e7f109b0ccf187f6874f0fa GIT binary patch literal 2541 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 + edit: true + envKey: FTP_EXTERNAL_IP + labelEn: FTP External Ip (must change item) + labelZh: FTP 外部地址 (必改项) + required: true + rule: paramCommon + type: text + - default: 10080 + edit: true + envKey: WEBDAV_PORT + labelEn: WebDAV Port + labelZh: WebDAV 端口 + required: true + rule: paramPort + type: number diff --git a/apps/sftpgo/v2.5.4/docker-compose.yml b/apps/sftpgo/v2.5.4/docker-compose.yml new file mode 100644 index 00000000..f51d4eb1 --- /dev/null +++ b/apps/sftpgo/v2.5.4/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3' +services: + sftpgo: + image: drakkan/sftpgo:v2.5.4-alpine + container_name: ${CONTAINER_NAME} + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + - ${SFTP_PORT}:${SFTP_PORT} + - ${FTP_PORT}:${FTP_PORT} + - ${PASSIVE_PORT_RANGE_START}-${PASSIVE_PORT_RANGE_END}:${PASSIVE_PORT_RANGE_START}-${PASSIVE_PORT_RANGE_END} + - ${WEBDAV_PORT}:${WEBDAV_PORT} + environment: + SFTPGO_FTPD__BINDINGS__0__PORT: ${FTP_PORT} + SFTPGO_WEBDAVD__BINDINGS__0__PORT: ${WEBDAV_PORT} + SFTPGO_SFTPD__BINDINGS__0__PORT: ${SFTP_PORT} + SFTPGO_FTPD__BINDINGS__0__FORCE_PASSIVE_IP: ${FTP_EXTERNAL_IP} + SFTPGO_FTPD__PASSIVE_PORT_RANGE__START: ${PASSIVE_PORT_RANGE_START} + SFTPGO_FTPD__PASSIVE_PORT_RANGE__END: ${PASSIVE_PORT_RANGE_END} + volumes: + - ./data/data:/srv/sftpgo + - ./data/config:/var/lib/sftpgo + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true \ No newline at end of file