Кроссплатформенный инструмент для синхронизации файлов в реальном времени «из коробки», основанный на Golang.
Сначала необходимо установить Go (требуется версия 1.22+), после чего можно использовать следующую команду для установки gofs
.
go install github.com/no-src/gofs/...@latest
Вы можете использовать скрипт build-docker.sh
для сборки образа Docker и сначала клонировать этот репозиторий и перейти в корневой каталог репозитория.
$ ./scripts/build-docker.sh
Или вы можете напрямую загрузить образ Docker с DockerHub с помощью следующей команды.
$ docker pull nosrc/gofs
Дополнительные сведения о скриптах, связанных с выпуском и Docker, см. в каталоге scripts
.
На Windows вы можете установить программу для запуска в фоновом режиме с помощью следующей команды:
go install -ldflags="-H windowsgui" github.com/no-src/gofs/...@latest
Пожалуйста, убедитесь, что исходный каталог и целевой каталог существуют, замените следующий путь на ваш реальный путь.
$ mkdir source dest
Создайте файлы сертификатов TLS и ключей для тестирования.
Файлы сертификатов TLS и ключи используются только File Server и Remote Disk Server.
$ go run $GOROOT/src/crypto/tls/generate_cert.go --host 127.0.0.1
2021/12/30 17:21:54 wrote cert.pem
2021/12/30 17:21:54 wrote key.pem
Просмотрите наше рабочее пространство.
$ ls
cert.pem key.pem source dest
Синхронизируйте файлы между дисками с помощью Local Disk.
Синхронизируйте файлы с сервера с помощью Remote Disk Server и Remote Disk Client.
Синхронизируйте файлы на сервер с помощью Remote Push Server и Remote Push Client.
Синхронизируйте файлы с SFTP-сервера с помощью SFTP Pull Client. C ->> SS: pull file
C передаёт запрос SS на извлечение файла.
SS ->> SSD: read file
SS передаёт запрос SSD на чтение файла.
SSD ->> SS: return file
SSD возвращает файл в SS.
SS ->> C: send file
SS отправляет файл клиенту C.
C ->> CD: write file
Клиент C записывает полученный файл на диск CD.
Синхронизируйте файлы с SFTP-сервером, используя SFTP Push Client.
Синхронизируйте файлы с сервера MinIO, используя MinIO Pull Client.
Синхронизируйте файлы на сервер MinIO, используя MinIO Push Client.
Запустите Task Client для подписки на Task Server, затем получите задачу и выполните её. В качестве примера возьмём From Server.
Мониторинг исходного каталога и синхронизация изменённых файлов в целевой каталог.
Вы можете использовать флаг logically_delete
, чтобы включить логическое удаление и избежать случайного удаления файлов.
Установите флаг checkpoint_count
, чтобы использовать контрольные точки в файле для уменьшения передачи немодифицированных фрагментов файла. По умолчанию checkpoint_count=10
, что означает максимум 10+2
контрольных точек. Есть две дополнительные контрольные точки в начале и конце. Первая контрольная точка равна размеру фрагмента, она необязательна. Последняя контрольная точка равна размеру файла, она обязательна. Смещение контрольной точки, установленное checkpoint_count
, всегда больше размера фрагмента, если только размер файла не меньше или равен размеру фрагмента, тогда checkpoint_count
будет равен нулю, поэтому он необязателен.
По умолчанию, если размер файла и время модификации файла совпадают с исходным файлом, то текущий перенос файла игнорируется. Вы можете использовать флаг force_checksum
, чтобы принудительно включить контрольную сумму для сравнения равенства файлов.
Алгоритм контрольной суммы по умолчанию — md5
, вы можете использовать флаг checksum_algorithm
, чтобы изменить алгоритм хеширования по умолчанию. Текущие поддерживаемые алгоритмы: md5
, sha1
, sha256
, sha512
, crc32
, crc64
, adler32
, fnv-1-32
, fnv-1a-32
, fnv-1-64
, fnv-1a-64
, fnv-1-128
, fnv-1a-128
.
Если вы хотите уменьшить частоту синхронизации, вы можете использовать sync_delay
, чтобы включить задержку синхронизации. Начните синхронизацию, когда количество событий равно или превышает sync_delay_events
, или подождите интервал времени sync_delay_time
с момента последней синхронизации. Флаг прогресса для печати индикатора выполнения синхронизации файлов.
$ gofs -source=./source -dest=./dest
Можно использовать флаг encrypt
, чтобы включить шифрование, и указать каталог в качестве рабочего пространства шифрования с помощью флага encrypt_path
. Все файлы в каталоге будут зашифрованы, а затем синхронизированы с целевым путём.
$ gofs -source=./source -dest=./dest -encrypt -encrypt_path=./source/encrypt -encrypt_secret=mysecret_16bytes
Можно использовать флаг decrypt
для расшифровки зашифрованных файлов по указанному пути.
$ gofs -decrypt -decrypt_path=./dest/encrypt -decrypt_secret=mysecret_16bytes -decrypt_out=./decrypt_out
Синхронизировать весь путь сразу из исходного каталога в целевой каталог.
$ gofs -source=./source -dest=./dest -sync_once
Синхронно синхронизировать весь путь из исходного каталога в целевой каталог по расписанию с помощью cron.
# Синхронно каждые 30 секунд синхронизировать весь путь из source directory в dest directory
$ gofs -source=./source -dest=./dest -sync_cron="*/30 * * * * *"
Запустить демон для создания подпроцесса для работы и записи информации о pid в файл pid.
$ gofs -source=./source -dest=./dest -daemon -daemon_pid
Запустите файловый сервер для исходного и целевого каталогов.
Файловый сервер использует HTTPS по умолчанию, установите флаги tls_cert_file
и tls_key_file
, чтобы настроить файлы сертификата и ключа.
Вы можете отключить HTTPS, установив для флага tls
значение false
, если он вам не нужен.
Если вы установите для флага tls
значение true
, порт файлового сервера по умолчанию — 443
, в противном случае это 80
, и вы можете настроить порт по умолчанию с флагом server_addr
, например -server_addr=":443"
.
Если вы включите флаг tls
на стороне сервера, вы можете контролировать, будет ли клиент пропускать проверку цепочки сертификатов сервера и имени хоста, с помощью флага tls_insecure_skip_verify
, значение по умолчанию — true
.
Если вы уже включили флаг tls
, то можете использовать флаг http3
для включения протокола HTTP3 на стороне сервера и клиента.
Вам следует установить флаг rand_user_count
, чтобы автоматически создать несколько случайных пользователей, или установить флаг users
, чтобы настроить пользователей сервера из соображений безопасности.
Пользователи сервера будут выводиться в журнал, если вы установите флаг rand_user_count
больше нуля.
Если вам нужно сжать файлы, добавьте флаг server_compress
, чтобы включить сжатие gzip для ответа, но сейчас это не быстро и может снизить эффективность передачи в локальной сети.
Вы можете переключить режим хранилища сеансов для файлового сервера с помощью флага session_connection
, в настоящее время поддерживаются память и redis, по умолчанию используется память. Если вы хотите использовать redis в качестве хранилища сеансов, вот пример строки подключения к сеансу redis: redis://127.0.0.1:6379?password=redis_password&db=10&max_idle=10&secret=redis_secret
.
# Запустить файловый сервер и создать трёх случайных пользователей
# В рабочей среде замените реальные файлы сертификатов `tls_cert_file` и `tls_key_file`
$ gofs -source=./source -dest=./dest -server -tls_cert_file=cert.pem -tls_key_file=key.pem -rand_user_count=3
Используйте флаг max_tran_rate
, чтобы ограничить максимальную скорость передачи на сервере и клиенте, и это ожидаемое значение, а не абсолютное.
Например, ограничьте максимальную скорость передачи до 1048576 байт, что означает 1 МБ.
$ gofs -source=./source -dest=./dest -max_tran_rate=1048576
Запустите удалённый дисковый сервер в качестве удалённого источника файлов.
Подробности о флаге source
см. в разделе Протокол источника удалённого сервера.
Обратите внимание, что пользователи удалённого дискового сервера должны иметь как минимум разрешение на чтение, например -users="gofs|password|r"
.
Вы можете использовать флаги checkpoint_count
и sync_delay
, как в Локальном диске. Флаг log_dir используется для установки каталога файла журнала, по умолчанию это ./logs/.
Флаг log_flush позволяет включить автоматическую очистку журнала с интервалом, по умолчанию true.
Флагом log_flush_interval устанавливается интервал длительности очистки журнала, значение по умолчанию 3s.
С помощью флага log_event можно включить журнал событий и запись в файл, по умолчанию false.
Флажок log_sample_rate используется для настройки частоты выборки для выборочного регистратора, значение может быть от 0 до 1, по умолчанию — 1.
Флаг log_format применяется для настройки формата вывода журнала, в настоящее время поддерживаются значения text и json, по умолчанию text.
Log_split_date разделяет файл журнала по дате, по умолчанию false.
# настройка конфигурации логгера в режиме «Локальный диск»
$ gofs -source=./source -dest=./dest -log_file -log_level=0 -log_dir="./logs/" -log_flush -log_flush_interval=3s -log_event
При желании вы можете использовать файл конфигурации для замены всех флагов. В настоящее время поддерживается формат json и yaml.
Все поля конфигурации совпадают с флагами, вы можете обратиться к примеру конфигурации (/conf/example) или ответу API конфигурации (#config-api).
$ gofs -conf=./gofs.yaml
Вы можете использовать флаг checksum для вычисления контрольной суммы файла и вывода результата.
Флаги chunk_size, checkpoint_count и checksum_algorithm действуют здесь так же, как и в режиме «Локальный диск».
$ gofs -source=./gofs -checksum
$ gofs -h
$ gofs -v
$ gofs -about
gofs-webui (https://github.com/no-src/gofs-webui) — это веб-инструмент для gofs, который позволяет создавать конфигурационный файл gofs через веб-интерфейс, упрощая использование gofs.
Быстрое внесение вклада с использованием облачных сред разработки.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )