Montando um sistema de arquivos pela Internet

11

Criei um aplicativo Web que roda em um servidor virtual para um de meus clientes. Ele inclui o recurso de upload de arquivos, mas agora eles querem armazenar esses arquivos em um servidor em seu escritório.

A maneira mais fácil de fazer isso seria montar o sistema de arquivos pela Internet diretamente no servidor virtual. Tenho experiência em montar o NFS em uma rede interna, mas não tenho certeza se funcionaria nesse cenário.

Alguma ideia? Eu sempre posso escrever um novo software para transferir os arquivos, mas isso seria uma solução fácil!

Nota: O servidor no escritório é o Ubuntu 12 em execução em um servidor virtual em um ambiente Windows Hyper-V. O VPS com o aplicativo da web é o Ubuntu 11.04

Ben Holness
fonte
A segurança é um problema para esses arquivos?
Adrian Cornish
rsync via cron job.
Ignacio Vazquez-Abrams
@AdrianCornish - na verdade não, embora uma solução segura seja a preferida.

Respostas:

12

Ninguém mencionou sshfs ainda. Se você estiver em uma distribuição Linux moderna e tiver acesso ssh ao host remoto, é tão simples quanto:

sshfs user@hostname:/remote/directory /local/directory

O desempenho é bastante aceitável (mas não tão rápido quanto uma sincronização transmitida como rsync, se você precisar de todo o diretório).

Andy Ross
fonte
Essa parece ser a melhor solução até agora, e as perguntas frequentes até dizem "Os recursos podem ser montados em conexões lentas e não confiáveis ​​(distantes)". Outra página da web diz que "sshfs -o reconnect server: / path / to / mount" fará com que ele seja reconectado automaticamente se a conexão cair.
3

O NFS é inerentemente inseguro. Seria uma escolha muito ruim para se conectar pela Internet.

Eu gosto do post que menciona rsync. Em vez de usar o cron para disparar a transferência, espero que você possa simplesmente executar o trabalho rsync a partir do seu código que lida com o upload do arquivo.

Quando o upload for concluído, sincronize novamente o arquivo em seu servidor.

Você precisaria configurar uma conexão segura com o servidor deles para a transferência, eu esperaria.

Se desejar, você pode colocar os arquivos recebidos em uma lista para transferência, removendo os nomes após a cópia bem-sucedida e oferecendo a si próprio algum recurso de failover, caso algo aconteça na conexão.

Como alguém já apontou, o rsync foi projetado para lidar com grupos de arquivos ou uma hierarquia (obrigado, verificação ortográfica), portanto não seria tão difícil de realizar.


fonte
1
O rsync não tem problemas ao usar o SSH como transporte.
Ignacio Vazquez-Abrams
O aplicativo da web já salva os arquivos no servidor local e faz referência a eles lá. Não haverá espaço no servidor local; portanto, eles terão que ser removidos uma vez transferidos, o que significa escrever um novo código; portanto, estou procurando uma solução montada primeiro, se possível.
1

O NFS pode ser inerentemente inseguro, mas isso não é culpa do serviço. O Telnet e o FTP também são inerentemente inseguros, mas ambos são usados ​​há décadas na Internet aberta. Se um túnel VPN criptografado for estabelecido, a falta de criptografia NFS é irrelevante.

Além disso, se um firewall estiver configurado para permitir que apenas um endereço de host remoto específico se conecte ao ponto de montagem do NFS, uma conexão NFS vazia estará protegida contra hackers, exceto pelas agências de três letras que detectam o tráfego da Internet e que têm acesso a descriptografia poderosa para quebrar suas conexões remotas criptografadas de qualquer maneira.

Vejo que algumas versões do NFS usam o UDP por padrão, o que provavelmente é de onde vêm os problemas de confiabilidade da Internet. Os pacotes UDP podem se perder se a conexão estiver congestionada e nenhuma retransmissão for tentada automaticamente. Se você deseja uma conexão confiável, verifique se o NFS está usando (ou é forçado a usar apenas) pacotes TCP na Internet.

Dale Mahalko
fonte
1
> Telnet e FTP também são inerentemente inseguros, mas ambos são usados ​​há décadas na Internet aberta. Embora seja verdade, não acho que esse seja um bom argumento, porque geralmente é considerado uma (muito) má prática usá-los na Internet. agora. A Mozilla até sugere descontinuar o http não criptografado .
Ian D. Scott,
0

O NFS pode ser feito através de um firewall. Se você pesquisar, encontrará outras pessoas que tentaram e foram bem-sucedidas nesse processo, no entanto, não é tão simples quanto abrir portas e parece depender da versão do NFS que está sendo executada.

O rsync é uma excelente sugestão e tem muita flexibilidade. No entanto, esse seria um processo executado fora do seu aplicativo. O rsync pode lidar com a sincronização de atualizações de arquivos locais e manter um diretório inteiro sincronizado com outras pastas.

O ssh seria outra opção segura e exigiria apenas a abertura de uma única porta. Eu usei isso no passado entre os sistemas Windows e Linux e funcionou bem tanto em um aplicativo quanto no agendamento do processo.

Tenho certeza de que existem outras maneiras de realizar o que você está procurando, mas precisaríamos de mais informações sobre os tipos de arquivos e se você os vincula a uma página ou os transmite com algo mais complexo.

Tim Koscielski
fonte
Entendo as alternativas, montar o sistema de arquivos seria a solução mais fácil, só não sei o quão estável é o NFS na Internet, em vez de em uma rede interna. O que acontece se a conexão cair etc., ou se houver uma alternativa mais nova projetada para ser robusta a isso.
0

As montagens NFS podem ser feitas usando o automount, que continuará a tentar a montagem com falha, mas a única maneira que eu consideraria usá-lo sobre os pipes seria com uma VPN ou alguma outra conexão segura (na verdade, eu não consideraria isso, mas você parece fixo na idéia).

Mesmo usando o automount, se houver um problema de rede, e você estiver colocando os uploads na montagem NFS, o upload provavelmente falhará ou será corrompido, a menos que você esteja armazenando o arquivo localmente e copiando com êxito.


fonte