1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/no-src-gofs

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

gofs

Кроссплатформенный инструмент для синхронизации файлов в реальном времени «из коробки», основанный на Golang.

Установка

Сначала необходимо установить Go (требуется версия 1.22+), после чего можно использовать следующую команду для установки gofs.

go install github.com/no-src/gofs/...@latest

Запуск в Docker

Вы можете использовать скрипт 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-сервера с помощью 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

Синхронизируйте файлы с SFTP-сервером, используя SFTP Push Client.

sequenceDiagram
    participant CD as Client Disk
    participant C as Client
    participant SS as SFTP Server
    participant SSD as SFTP Server Disk

    autonumber

    C ->> CD: monitor disk
    CD ->> C: notify change
    C ->> CD: read file
    CD ->> C: return file
    C ->> SS: push file
    SS ->> SSD: write file

Синхронизация файлов с сервера MinIO с помощью MinIO Pull Client

Синхронизируйте файлы с сервера MinIO, используя MinIO Pull Client.

sequenceDiagram
    participant CD as Client Disk
    participant C as Client
    participant MS as MinIO Server
    participant MSD as MinIO Server Disk

    autonumber

    C ->> MS: pull file
    MS ->> MSD: read file
    MSD ->> MS: return file
    MS ->> C: send file
    C ->> CD: write file

Синхронизация файлов на сервер MinIO с помощью MinIO Push Client

Синхронизируйте файлы на сервер MinIO, используя MinIO Push Client.

sequenceDiagram
    participant CD as Client Disk
    participant C as Client
    participant MS as MinIO Server
    participant MSD as MinIO Server Disk

    autonumber

    C ->> CD: monitor disk
    CD ->> C: notify change
    C ->> CD: read file
    CD ->> C: return file
    C ->> MS: push file
    MS ->> MSD: write file

Режим задачи

Запустите Task Client для подписки на Task Server, затем получите задачу и выполните её. В качестве примера возьмём From Server.

sequenceDiagram
    participant A as Admin
    participant TS as Task Server
    participant SD as Server Disk
    participant S as Server
    participant TC as Task Client
    participant CW as Client Worker
    participant CD as Client Disk
    participant TQ as Task Queue

    autonumber

    S ->> SD: monitor disk
    S ->> TS: start task server
    A ->> TS: create task
    TC ->> TS: subscribe task
    TS ->> TC: distribute task
    TC ->> CW: start worker
    CW ->> TQ: add to task queue
    TQ ->> CW: execute task
    activate CW
    CW ->> S: connect and auth
    loop
        SD ->> S: notify change
        S ->> CW: notify change
        CW ->> S: pull file
        S ->> SD: read file
        SD ->> S: return file
        S ->> CW: send file
        CW ->> CD: write file
    end
    deactivate CW

Функции

Локальный диск

Мониторинг исходного каталога и синхронизация изменённых файлов в целевой каталог.

Вы можете использовать флаг 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.

Вклад

Как внести вклад

%%{init: { "flowchart": {"htmlLabels": false}} }%%
flowchart TD
  PR[pull request]
  MainRepo[github.com/no-src/gofs.git] -- 1.fork --> ForkRepo[github.com/yourname/gofs.git]
  ForkRepo -- 2.git clone --> LocalRepo[local repository]
  LocalRepo -- 3.commit changes --> NewBranch[new branch]
  NewBranch -- 4.git push --> ForkRepo
  ForkRepo -- 5.create pull request --> PR
  PR -- 6.merge to --> MainRepo

Облачные среды разработки

Быстрое внесение вклада с использованием облачных сред разработки.

Github Codespaces

Open in GitHub Codespaces

Gitpod

Open in Gitpod

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Это инструмент для синхронизации файлов в режиме реального времени, разработанный на Golang и готовый к использованию сразу после установки. Расширить Свернуть
Go и 4 других языков
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/no-src-gofs.git
git@gitlife.ru:oschina-mirror/no-src-gofs.git
oschina-mirror
no-src-gofs
no-src-gofs
main