FTP 到 Google 存储
FTP to Google Storage
有些文件每天都会上传到 FTP 服务器,我需要这些文件在 Google 云存储中。我不想让上传文件的用户安装任何额外的软件,只是让他们继续使用他们的 FTP 客户端。
有没有办法将 GCS 用作 FTP 服务器?如果没有,我如何创建一个定期从 FTP 位置获取文件并将它们放入 GCS 的作业?
换句话说:最好和最简单的方法是什么?
您可以自己编写一个 FTP 服务器上传到 GCS,例如基于 pyftpdlib
定义一个自定义处理程序,在收到文件时将其存储到 GCS
import os
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
from pyftpdlib.authorizers import DummyAuthorizer
from google.cloud import storage
class MyHandler:
def on_file_received(self, file):
storage_client = storage.Client()
bucket = storage_client.get_bucket('your_gcs_bucket')
blob = bucket.blob(file[5:]) # strip leading /tmp/
blob.upload_from_filename(file)
os.remove(file)
def on_... # implement other events
def main():
authorizer = DummyAuthorizer()
authorizer.add_user('user', 'password', homedir='/tmp', perm='elradfmw')
handler = MyHandler
handler.authorizer = authorizer
handler.masquerade_address = add.your.public.ip
handler.passive_ports = range(60000, 60999)
server = FTPServer(("127.0.0.1", 21), handler)
server.serve_forever()
if __name__ == "__main__":
main()
我已经在 Google Container Engine 上成功 运行(它需要一些努力才能让被动 FTP 正常工作),但在 Compute Engine 上应该很简单。根据以上配置,在防火墙上开放21端口和60000-60999端口
到 运行 它,python my_ftp_server.py
- 如果你想监听端口 21,你需要 root 权限。
您可以使用 gsutil rsync or open source rclone tool.
在 FTP 服务器和 Google 云存储之间设置 cron 和 rsync
如果您不能定期在 FTP 服务器上 运行 这些命令,您可以将 FTP 服务器挂载为本地文件系统或驱动器 (Linux, Windows)
我已经使用 Google 计算中的虚拟机中的 gcsfs 成功地设置了一个 FTP 代理到 GCS(jkff 在对我的问题的评论中提到),这些说明:
http://ilyapimenov.com/blog/2015/01/19/ftp-proxy-to-gcs.html
不过需要进行一些更改:
- 在/etc/vsftpd.conf中将#write_enable=YES
改为
write_enable=是
- 在您的 GC 项目中添加防火墙规则以允许
访问端口 21 和被动端口 15393 到 15592 (https://console.cloud.google.com/networking/firewalls/list)
一些可能的问题:
- 如果使用本地ip可以访问FTP服务器,远程ip不能访问,可能是你没有设置防火墙规则
- 如果您可以访问 ftp 服务器,但无法写入,可能是因为您需要 write_enable=YES
- 如果您正在阅读您在 /mnt 上创建的文件夹,但出现 I/O 错误,可能是因为 gcsfs_config 中的存储桶不正确。
此外,您的 ftp 客户端需要使用设置为 "passive" 的传输模式。
在 google 云中设置虚拟机,使用一些 *nix 风格。在上面设置ftp,指向文件夹abc。使用 google fuse 将 abc 挂载为 GCS bucket。瞧 - 在 gcs / ftp 之间来回切换,无需编写任何软件。
(小字:如果你推送太多数据,保险丝会卷起来死掉,所以定期反弹,每周一次或每天一次;你可能还需要设置挂载或保险丝以允许所有用户的权限)
有些文件每天都会上传到 FTP 服务器,我需要这些文件在 Google 云存储中。我不想让上传文件的用户安装任何额外的软件,只是让他们继续使用他们的 FTP 客户端。 有没有办法将 GCS 用作 FTP 服务器?如果没有,我如何创建一个定期从 FTP 位置获取文件并将它们放入 GCS 的作业? 换句话说:最好和最简单的方法是什么?
您可以自己编写一个 FTP 服务器上传到 GCS,例如基于 pyftpdlib
定义一个自定义处理程序,在收到文件时将其存储到 GCS
import os
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
from pyftpdlib.authorizers import DummyAuthorizer
from google.cloud import storage
class MyHandler:
def on_file_received(self, file):
storage_client = storage.Client()
bucket = storage_client.get_bucket('your_gcs_bucket')
blob = bucket.blob(file[5:]) # strip leading /tmp/
blob.upload_from_filename(file)
os.remove(file)
def on_... # implement other events
def main():
authorizer = DummyAuthorizer()
authorizer.add_user('user', 'password', homedir='/tmp', perm='elradfmw')
handler = MyHandler
handler.authorizer = authorizer
handler.masquerade_address = add.your.public.ip
handler.passive_ports = range(60000, 60999)
server = FTPServer(("127.0.0.1", 21), handler)
server.serve_forever()
if __name__ == "__main__":
main()
我已经在 Google Container Engine 上成功 运行(它需要一些努力才能让被动 FTP 正常工作),但在 Compute Engine 上应该很简单。根据以上配置,在防火墙上开放21端口和60000-60999端口
到 运行 它,python my_ftp_server.py
- 如果你想监听端口 21,你需要 root 权限。
您可以使用 gsutil rsync or open source rclone tool.
在 FTP 服务器和 Google 云存储之间设置 cron 和 rsync如果您不能定期在 FTP 服务器上 运行 这些命令,您可以将 FTP 服务器挂载为本地文件系统或驱动器 (Linux, Windows)
我已经使用 Google 计算中的虚拟机中的 gcsfs 成功地设置了一个 FTP 代理到 GCS(jkff 在对我的问题的评论中提到),这些说明: http://ilyapimenov.com/blog/2015/01/19/ftp-proxy-to-gcs.html
不过需要进行一些更改:
- 在/etc/vsftpd.conf中将#write_enable=YES
改为 write_enable=是 - 在您的 GC 项目中添加防火墙规则以允许 访问端口 21 和被动端口 15393 到 15592 (https://console.cloud.google.com/networking/firewalls/list)
一些可能的问题:
- 如果使用本地ip可以访问FTP服务器,远程ip不能访问,可能是你没有设置防火墙规则
- 如果您可以访问 ftp 服务器,但无法写入,可能是因为您需要 write_enable=YES
- 如果您正在阅读您在 /mnt 上创建的文件夹,但出现 I/O 错误,可能是因为 gcsfs_config 中的存储桶不正确。
此外,您的 ftp 客户端需要使用设置为 "passive" 的传输模式。
在 google 云中设置虚拟机,使用一些 *nix 风格。在上面设置ftp,指向文件夹abc。使用 google fuse 将 abc 挂载为 GCS bucket。瞧 - 在 gcs / ftp 之间来回切换,无需编写任何软件。 (小字:如果你推送太多数据,保险丝会卷起来死掉,所以定期反弹,每周一次或每天一次;你可能还需要设置挂载或保险丝以允许所有用户的权限)