<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ftp on Lutong's Homepage</title><link>https://www.elliot98.top/tags/ftp/</link><description>Recent content in Ftp on Lutong's Homepage</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 18 Nov 2020 18:30:50 +0800</lastBuildDate><atom:link href="https://www.elliot98.top/tags/ftp/index.xml" rel="self" type="application/rss+xml"/><item><title>技术摘要| Wickftps——一个ftp(s)、www容器</title><link>https://www.elliot98.top/post/tech/wickftps/</link><pubDate>Wed, 18 Nov 2020 18:30:50 +0800</pubDate><guid>https://www.elliot98.top/post/tech/wickftps/</guid><description>&lt;h1 id="wickftps"&gt;Wickftps&lt;/h1&gt;
&lt;p&gt;因为一些服务器到期，因此我打算将一些文件管理服务进行容器化，并构建了这样一个项目。wickftps 主要包括了如下三个组件：vsftpd、nginx 以及 sshd。这样可以快速迁移我们的 ftp 文件服务而无需繁琐的配置过程。&lt;/p&gt;
&lt;p&gt;我们使用了一个“统一身份认证”系统，说白了就是以下服务全部使用统一的用户名和密码进行管理，这样还是比较方便的。&lt;/p&gt;
&lt;h2 id="1-vsftpd"&gt;1. vsftpd&lt;/h2&gt;
&lt;p&gt;对于 FTP 服务来说，大概有如下几个需求吧。首先是被动模式，在现在 NAT 重重的 ipv4 互联网中，主动模式的可行性实在是太低了，因此需要配置好服务器被动模式。其次就是 ftps 的需求，因为通常是部署在公网服务器上的，因此往往需要使用 ssl 对文件传输过程进行保护。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这里记录一个坑，以后配置 vsftpd 的 ssl 一定要记得设置 &lt;code&gt;require_ssl_reuse=NO&lt;/code&gt;，否则很多客户端会报错。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="2-nginx"&gt;2. nginx&lt;/h2&gt;
&lt;p&gt;使用 nginx 的目的很简单，那就是提供目录服务（便于我们分享一些文件），此外还可以构建一些静态网页。&lt;/p&gt;
&lt;h2 id="3-ssh"&gt;3. ssh&lt;/h2&gt;
&lt;p&gt;我把 ssh 设置为一个可选服务，可以方便我们使用 ssh 协议登录容器内部，并进行一些容器管理（不要和我说 dirty ，容器也是被人使用的）。此外 rsync 等操作也可以很方便的基于 ssh 进行。&lt;/p&gt;
&lt;h2 id="4-supervisor"&gt;4. supervisor&lt;/h2&gt;
&lt;p&gt;使用 supervisor 对上面三个服务进行管理。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;项目的地址放在了 &lt;a href="https://github.com/ertuil/wickftps/"&gt;GITHUB&lt;/a&gt; 上，并且使用了 Github Action 进行容器自动构建并推送到 &lt;a href="https://hub.docker.com/repository/docker/ertuil/wickftps"&gt;docker.io&lt;/a&gt; 上，使用命令 &lt;code&gt;docker push ertuil/wickftps:latest&lt;/code&gt; 下载。&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>