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
linux
filesystems
internet
nfs
Ben Holness
fonte
fonte
Respostas:
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:
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).
fonte
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
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.
fonte
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.
fonte
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