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 000000000..9595e86a2 --- /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 000000000..534b6d883 --- /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 zcmai$X*3&%8iu3xU1?BzO~h_OQASZ}soHl%D+PrQAsSdRqVuGQcHA* zijLYN#!?;oR#l-C?ocEmfyuZIBI~#LeE-@|u0KjW;%f#WFw0|uJ z^ZD&Mot-}ii=UCT5dhGT!Tr;l_1rUsI+z;+>i(2iJ2&=rR!*koAy#l-#P?$OW-#n@ zzz^={3r8T%-us_^K%5OAP6vJ0f?;PLd{tD{&I2p0o__v*XCndoWY|=t^T%R)6imM` z*4*iqR%@DFFW#2%5TU@?J#=2q^Vq@05wK+#pPnZpKI7TZ;w7^+3;=M-T9_C)h10hR zQc$Hb0*P(lSx|o>%cX{$vmz?uZADQ(F72r=y~(eXBkHtg2x@b($Ikn21+k(A)vl`Q z)nb+OmRCx`hZ;+CRw&2X51yWi*)KAh%tedPLB5wZWFx_gjh34ZJTF7D3v42&(hVU82U&0`w$HgqQNd7CfoD5DqL`q zg9{fik#;p(uoq@n`Q=;cJ3{2|32;I~zqU)(HAMoEL(bayEWG-5PYFV@C2NW^P~o%T zY&=l@R9H~9w|_mk(_Hc_`b7=V+BPXP89k;-UeNukIhaBKVcU@&OZ)?a^ z(W7YMDoMe(W(Rj>eM~u^W|GpP9(d$9#^DB#i7{eASAa{^sDknmf0p1jo1-Kp{Lt5@(P z-xk_h&EpFjSCx8|arW1ZXC=MDMPQd*sKCS_c)dS;l*s0W1mS+((yM!c!G~J$7yK5I zMNrqetFWJ9KEaFPEmiu&#{B|jSHTSSgz)$j;u*4YGL7yw?A6HeF^Dm@=;D#rq@zmy zxTamr>crHgS)e>l`>!U$G~*&G0`aNINQf z7{*}QO^V#EH*WBn((O~}Gt5%+g`>BfXJs5|t!aCStyFxn+yGo{kD|u=jOzk=gSH@ulnp*$X5)-r#((=J&$<=g(R%jM6b~)Ku#naWQ11>0nW6fuc>2>;! zh7n&e&m}aM?ke5#hzhawU${q2f@(c@o(W;Hnp+&p?_nC1d7XzhawK%Jg&`m5Khja_ z@MDSL+~i7Ea#{1dB;lp^bw%ybScE0eUL}=p8SyDQdx1S@NNr|4{<8i30WA#*(tz+- z8=Dx2bJm22xTGDbW5U0{1(oRb+7b@OgjEg_Y{JK}mjXMcXP|DqH}zkP=EyUELQLMG%4TH3lFwb@;oX{{ zQ*)5$PWh*?1K=09v2D<9Gfag^JKMquG@VIkq8#Eji>#l|P6mwJ*2ILSCKbiqTit|# z7MD(h?~CT(v>G?Pr>tY+9|j2U)b4ihIr@|EldEZv*KC0zkd&&31efp9zQ*HH2GW=* z4O-GF>doXItOb(F#&fbaBTs%2VF9b_oj z9TbDaU)ZX{9LkLs$Quw)1^jv%<6p1Ni-nM&#I&H!0C}C%{U#v;M*1J0id0`-@vzVJ zDNV}T8#=fi#a<~X%s3n<<){C;(B?8GoKkTtX)&=oB;w{@?os;y!DH}z1B*jhA5m35 zJ8Jw?1I8Tl0&n)&sXOufPc*bAcP?{^3!$bDkA~~7{qRaIU_WaPZN1ake;Rj$ zqAU(5i>i5??5&mliltY5RLNDzU!@C2uB8x%>V=nM7Xy zbNC%*J4=MxwO&4pWeqftE{wuEp@#PM9Lzjg-C81I@(1%iJw4<};C9e-5J`E!JI*q*Kzr~>2QNA(jOns4aw+TN#AfCtbhK_Q#ZV$F zI(8NVHfxW0uvWbzZF(%VN@F3;2+-u4;*9E!gD!|lS1la->}>>!BL9l%i%x^TM_V(I zf&@1Y5Pe-Poc#w}t)Ghz54y(szU(i>h;D|aBf~pmr;TE*AV9^rd0~g>EK5p{mm + 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 000000000..f51d4eb1a --- /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