Я создал веб-приложение, которое работает на виртуальном сервере для одного из моих клиентов. Он включает в себя возможность загружать файлы, но теперь они хотят хранить эти файлы на сервере в своем офисе.
Самый простой способ сделать это - смонтировать файловую систему через Интернет прямо на виртуальный сервер. У меня есть опыт монтирования NFS во внутренней сети, но я не понимаю, будет ли это работать в этом сценарии.
Есть предположения? Я всегда могу написать новое программное обеспечение для передачи файлов, но это легко исправить!
Примечание. Сервер в офисе - это сервер Ubuntu 12, работающий на виртуальном сервере в среде Windows Hyper-V. VPS с веб-приложением - Ubuntu 11.04.
Никто не упомянул sshfs все же. Если вы используете современный дистрибутив Linux и имеете ssh-доступ к удаленному хосту, это очень просто:
sshfs user@hostname:/remote/directory /local/directory
Производительность вполне приемлемая (но не такая быстрая, как потоковая синхронизация, такая как rsync, если вам нужен весь каталог).
NFS по своей сути небезопасен. Это был бы очень плохой выбор для подключения через Интернет.
Мне нравится сообщение, в котором упоминается rsync. Я надеюсь, что вместо использования cron для запуска передачи вы можете просто запустить задание rsync из своего кода, который обрабатывает загрузку файла.
Когда загрузка завершится, выполните rsync файла на их сервер.
Я ожидал, что вам нужно будет настроить безопасное соединение с их сервером для передачи.
При желании вы можете поместить входящие файлы в список для передачи, удалив имена после успешного копирования, и дать себе некоторую возможность отработки отказа на случай, если что-то случится с соединением.
Как уже указывал кто-то другой, rsync предназначен для обработки групп файлов или иерархии (спасибо, проверка орфографии), поэтому это будет не так сложно.
NFS может быть небезопасным по своей сути, но это не вина службы. Telnet и FTP также по своей природе небезопасны, но оба они десятилетиями использовались в открытом Интернете. Если установлен зашифрованный VPN-туннель, отсутствие шифрования NFS не имеет значения.
Кроме того, если брандмауэр настроен так, чтобы разрешать подключение к точке монтирования NFS только определенному адресу удаленного хоста, то голое соединение NFS в основном защищено от взлома, за исключением трехбуквенных агентств, которые прослушивают Интернет-трафик и имеют доступ к мощным средствам дешифрования для в любом случае взломать ваши зашифрованные удаленные соединения.
Я вижу, что некоторые версии NFS по умолчанию используют UDP, что, вероятно, является причиной проблем с надежностью Интернета. Пакеты UDP могут быть потеряны, если соединение перегружено, и повторная передача не выполняется автоматически. Если вам нужно надежное соединение, убедитесь, что ваша NFS использует (или вынуждена использовать только) TCP-пакеты через Интернет.
NFS можно сделать через брандмауэр. Если вы выполните поиск, вы найдете других, кто пытался и успешно прошел этот процесс, однако это не так просто, как открытие портов, и, похоже, зависит от версии запущенной NFS.
rsync - отличное предложение, обладающее большой гибкостью. Однако это будет процесс, выполняемый вне вашего приложения. rsync может обрабатывать синхронизацию обновлений локальных файлов и поддерживать синхронизацию всего каталога с другими папками.
ssh будет еще одним безопасным вариантом и потребует открытия только одного порта. Я использовал это в прошлом между системами Windows и Linux и хорошо работал как из приложения, так и при планировании процесса.
Я уверен, что есть и другие способы выполнить то, что вы ищете, но нам понадобится дополнительная информация о типах файлов, а также о том, связываете ли вы их на странице или загружаете их с помощью чего-то более сложного.
Монтирование NFS может быть выполнено с помощью automount, который будет продолжать попытки монтирования в случае сбоя, но единственный способ, которым я мог бы рассмотреть возможность его использования по каналам, - это использование vpn или другого безопасного соединения (на самом деле, я бы не стал это рассматривать, но Вы, кажется, зациклились на идее).
Даже при использовании автомонтирования, если есть проблема с сетью, и вы помещаете их загрузки на монтирование NFS, загрузка, скорее всего, завершится ошибкой или будет повреждена, если вы не сохраняете файл локально, а затем копируете при успешной загрузке.