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

OSCHINA-MIRROR/no-src-gofs

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

gofs

Сборка Лицензия Go Reference Go Report Card Codecov Релиз Упоминание в Awesome Go

Английский | Китайский

Кросс-платформенный инструмент реального времени для синхронизации файлов на основе Go.

Установка

Первым делом установите 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  Yöntem
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

Использование

Между дисками

Синхронизация файлов между дисками с помощью Локального диска.

последовательныйдиаграмма
    участник DA как DiskA
    участник C как Client
    участник DB как DiskB

    автонумбер

    C ->> DA: мониторинг диска
    DA ->> C: уведомление о изменениях
    C ->> DA: чтение файла
    DA ->> C: возврат файла
    C ->> DB: запись файла

Из сервера

Синхронизация файлов с сервера с помощью Удаленного сервера диска и Удаленного клиента диска.

последовательныйдиаграмма
    участник SD как Серверный диск
    участник S как Сервер
    участник C как Клиент
    участник CD как Клиентский диск
```    автонумбер

    S ->> SD: мониторинг диска
    C ->> S: соединение и аутентификация
    SD ->> S: уведомление о изменениях
    S ->> C: уведомление о изменениях
    C ->> S: получение файла
    S ->> SD: чтение файла
    SD ->> S: возврат файла
    S ->> C: отправка файла
    C ->> CD: запись файла

#### На сервер

Синхронизация файлов на сервер с помощью [Удалённого сервера отправки](#remote-push-server) и [Удалённого клиента отправки](#remote-push-client).

```mermaid
последовательныйдиаграмма
    участник CD как Клиентский диск
    участник C как Клиент
    участник S как Сервер
    участник SD как Серверный диск

    автонумбер

    C ->> CD: мониторинг диска
    CD ->> C: уведомление о изменениях
    C ->> CD: чтение файла
    CD ->> C: возврат файла
    C ->> S: отправка файла
    S ->> SD: запись файла

Из SFTP сервера

Синхронизация файлов с SFTP сервера с помощью Клиента получения SFTP.

последовательныйдиаграмма
    участник CD как Клиентский диск
    участник C как Клиент
    участник SS как SFTP Сервер
    участник SSD как SFTP Серверный диск

    автонумбер

    C ->> SS: получение файла
    SS ->> SSD: чтение файла
    SSD ->> SS: возврат файла
    SS ->> C: отправка файла
    C ->> CD: запись файла

На SFTP сервер

Синхронизация файлов на SFTP сервер с помощью Клиента отправки SFTP.

последовательныйдиаграмма
    участник CD как Клиентский диск
    участник C как Клиент
    участник SS как SFTP Сервер
    участник SSD как SFTP Серверный диск    автонумерация

    C->>CD: мониторинг диска
    CD->>C: уведомление о изменениях
    C->>CD: чтение файла
    CD->>C: возврат файла
    C->>SS: отправка файла
    SS->>SSD: запись файла
```#### Из MinIO сервера

Синхронизация файлов с MinIO сервера с помощью [клиента MinIO Pull](#minio-pull-client).

```mermaid
sequenceDiagram
    participant CD as Клиентский диск
    participant C as Клиент
    participant MS as Сервер MinIO
    participant MSD as Диск сервера MinIO

    автонумерация

    C->>MS: запросить файл
    MS->>MSD: прочитать файл
    MSD->>MS: вернуть файл
    MS->>C: отправить файл
    C->>CD: записать файл

На MinIO сервер

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

sequenceDiagram
    participant CD as Клиентский диск
    participant C as Клиент
    participant MS as Сервер MinIO
    participant MSD as Диск сервера MinIO

    автонумерация

    C->>CD: мониторинг диска
    CD->>C: уведомление о изменениях
    C->>CD: чтение файла
    CD->>C: возврат файла
    C->>MS: отправить файл
    MS->>MSD: запись файла

Режим задач

Запустите Клиент задач для подписки на Сервер задач, затем получите задачу и выполните её, используя Исходный сервер как пример.

sequenceDiagram
    participant A as Администратор
    participant TS as Сервер задач
    participant SD as Диск сервера
    participant S as Сервер
    participant TC as Клиент задач
    participant CW as Рабочий клиента
    participant CD as Клиентский диск
    participant TQ as Очередь задач

    автонумерация```markdown
    S->>SD: мониторинг диска
    S->>TS: запуск сервера задач
    A->>TS: создание задачи
    TC->>TS: подписка на задачу
    TS->>TC: распределение задачи
    TC->>CW: запуск рабочего
    CW->>TQ: добавление в очередь задач
    TQ->>CW: выполнение задачи
    активировать CW
    CW->>S: соединение и аутентификация
    цикл
        SD->>S: уведомление о изменениях
        S->>CW: уведомление о изменениях
        CW->>S: запросить файл
        S->>SD: чтение файла
        SD->>S: возврат файла
        S->>CW: отправить файл
        CW->>CD: записать файл
    конец
    деактивировать CW

Возможности

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

Мониторинг исходной директории и синхронизация изменённых файлов в целевой директории.Вы можете использовать флаг logically_delete, чтобы активировать логическое удаление и избежать случайного удаления файлов. Установите флаг checkpoint_count, чтобы использовать контрольные точки в файле для сокращения передачи незменённых фрагментов файла. По умолчанию checkpoint_count=10, что означает наличие до 10+2 контрольных точек. Две дополнительные контрольные точки находятся в начале и в конце файла. Первая контрольная точка равна размеру фрагмента (chunk_size) и является необязательной. Последняя контрольная точка равна размеру всего файла и является обязательной. Отступ от контрольной точки, установленный значением checkpoint_count, всегда больше чем chunk_size, за исключением случая, когда размер файла меньше или равен chunk_size. В этом случае значение checkpoint_count будет равно 0, поэтому это значение также является необязательным.

По умолчанию, если размер файла и время последней модификации исходного файла равны размеру и времени последней модификации целевого файла, то текущий процесс передачи файла игнорируется. Вы можете использовать флаг 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 после последней синхронизации.

Вы также можете использовать флаг progress, чтобы выводить прогресс-бар синхронизации файлов.

$ 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

Одноразовая синхронизация

Сразу синхронизировать весь путь от исходной директории до целевой директории.```bash $ gofs -source=./source -dest=./dest -sync_once


### Синхронизация по расписанию

Синхронизировать весь путь от исходной директории до целевой директории согласно расписанию.

```bash
# Каждые  Yöntem 30 секунд синхронизировать весь путь от исходной директории до целевой директории
$ 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 для активации протокола HTTP/3 на стороне сервера и клиента.Должно быть установлено значение флага 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МБ.```bash $ gofs -source=./source -dest=./dest -max_tran_rate=1048576


### Удалённый сервер файлов

Запуск удалённого сервера файлов как источника файлов.

Подробности флага `source` см. в разделе [Протокол источника удалённого сервера](#remote-server-source-protocol).

Обратите внимание, что пользователи удалённого сервера файлов должны иметь права на чтение, например, `-users="gofs|password|r"`. Вы можете использовать флаги `checkpoint_count` и `sync_delay`, как в разделе [Локальный диск](#local-disk).

```bash
# Запустите удалённый сервер диска
# Замените флаги `tls_cert_file` и `tls_key_file` своими реальными сертификатами в рабочей среде
# Замените флаг `users` сложными именами пользователя и паролями для повышения безопасности
$ gofs -source="rs://127.0.0.1:8105?mode=server&local_sync_disabled=true&path=./source&fs_server=https://127.0.0.1" -dest=./dest -users="gofs|password|r" -tls_cert_file=cert.pem -tls_key_file=key.pem -token_secret=mysecret_16bytes

Удалённый клиент диска

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

Детали флага source см. в разделе Протокол источника удалённого сервера.

Используйте флаг sync_once для немедленной синхронизации всего пути с удалённого сервера диска до локального каталога назначения, как в разделе Синхронизация однократно.

Используйте флаг sync_cron для синхронизации всего пути с удалённого сервера диска до локального каталога назначения с помощью cron, как в разделе Синхронизация cron.Используйте флаг force_checksum для принудительного включения контрольной суммы для сравнения равенства файла, как в разделе Локальный диск.

Вы можете использовать флаг sync_delay, как в разделе Локальный диск.

# Запустите удалённого клиента диска
# Замените флаг `users` вашими реальными именами пользователя и паролями
$ gofs -source="rs://127.0.0.1:8105" -dest=./dest -users="gofs|password" -tls_cert_file=cert.pem

Удалённый сервер отправки

Запустите Удалённый сервер диска как источник удалённого файла, затем активируйте удалённый сервер отправки с помощью флага push_server.

Обратите внимание, что пользователи удалённого сервера отправки должны иметь права на чтение и запись, например, -users="gofs|password|rw".

# Запустите удалённый сервер диска и активируйте удалённый сервер отправки
# Замените флаги `tls_cert_file` и `tls_key_file` своими реальными сертификатами в рабочей среде
# Замените флаг `users` сложными именами пользователя и паролями для повышения безопасности
$ gofs -source="rs://127.0.0.1:8105?mode=server&local_sync_disabled=true&path=./source&fs_server=https://127.0.0.1" -dest=./dest -users="gofs|password|rw" -tls_cert_file=cert.pem -tls_key_file=key.pem -push_server -token_secret=mysecret_16bytes

Удалённый клиент отправки

Запустите удалённый клиент отправки данных для синхронизации изменённых файлов с Удалённым сервером отправки данных.Используйте флаг chunk_size, чтобы установить размер блока большого файла для загрузки. По умолчанию значение chunk_size равно 1048576, что эквивалентно 1 МБ.

Вы можете использовать флаги checkpoint_count и sync_delay аналогично локальному диску.

Дополнительное использование флагов см. в разделе Клиент удалённого диска.

# Запустите удалённый клиент отправки данных и активируйте синхронизацию локального диска, синхронизируйте изменения файлов из исходной директории до локальной целевой директории и удалённого сервера отправки данных
# Замените флаг `users` вашими реальными именами пользователя и паролями
$ gofs -source="./source" -dest="rs://127.0.0.1:8105?local_sync_disabled=false&path=./dest" -users="gofs|password" -tls_cert_file=cert.pem

Клиент SFTP отправки данных

Запустите клиент SFTP отправки данных для синхронизации изменённых файлов с сервером SFTP.

$ gofs -source="./source" -dest="sftp://127.0.0.1:22?local_sync_disabled=false&path=./dest&remote_path=/gofs_sftp_server&ssh_user=sftp_user&ssh_pass=sftp_pwd"

Клиент SFTP получения данных

Запустите клиент SFTP получения данных для скачивания файлов с сервера SFTP в локальную целевую директорию.

$ gofs -source="sftp://127.0.0.1:22?remote_path=/gofs_sftp_server&ssh_user=sftp_user&ssh_pass=sftp_pwd" -dest="./dest" -sync_once

Клиент MinIO отправки данных

Запустите клиент MinIO отправки данных для синхронизации изменённых файлов с сервером MinIO.```bash $ gofs -source="./source" -dest="minio://127.0.0.1:9000?secure=false&local_sync_disabled=false&path=./dest&remote_path=minio-bucket" -users="minio_user|minio_pwd"


### Клиент MinIO получения данных

Запустите клиент MinIO получения данных для скачивания файлов с сервера MinIO в локальную целевую директорию.

```bash
$ gofs -source="minio://127.0.0.1:9000?secure=false&remote_path=minio-bucket" -dest="./dest" -users="minio_user|minio_pwd" -sync_once

Сервер задач

Запустите сервер задач для распределения задач клиентам.

Пример с удалённым сервером диска: создайте конфигурационный файл манифеста задач, как файл remote-disk-task.yaml. Здесь определена задача синхронизации файлов с сервера.

Затем создайте конфигурационный файл содержимого задачи run-gofs-remote-disk-client.yaml, который определён в вышеупомянутом манифесте задач, и он будет выполнен клиентом. Наконец, запустите удалённый сервер диска с флагом task_conf.

Здесь используйте conf, чтобы упростить команду и переиспользовать конфигурационные файлы тестирования интеграции.

$ cd integration
$ mkdir -p rs/source rs/dest
$ gofs -conf=./testdata/conf/run-gofs-remote-disk-server.yaml

Клиент задач

Запустите клиент задач для подписки на сервер задач, затем получите задачу и выполните её.

Используйте флаг task_client, чтобы запустить клиента задач, а флаг task_client_max_worker ограничит максимальное количество одновременно работающих рабочих процессов в стороне клиента задач.Вы можете использовать флаг task_client_labels, чтобы определить метки клиента задач, которые используются для соответствия задачам на стороне сервера задач.

Здесь используйте conf, чтобы упростить команду и переиспользовать конфигурационные файлы тестирования интеграции.

$ cd integration
$ mkdir -p rc/source rc/dest
$ gofs -conf=./testdata/conf/run-gofs-task-client.yaml

Промежуточный сервер (Релей)

Если вам требуется синхронизация файлов между двумя устройствами, которые не могут установить прямое соединение, вы можете использовать обратный прокси как сервер-перехватчик. Подробнее см. также Промежуточный сервер (Релей).

Протокол источника удаленного сервера

Протокол источника удаленного сервера основан на URI, см. RFC Yöntem 3986.

Схема

Имя схемы — rs.

Хост

Источник удаленного сервера использует 0.0.0.0 или другую локальную адресацию IP в режиме Удалённый сервер диска, и использует адрес IP или доменное имя в режиме Клиент удалённого диска.

Порт

Порт источника удаленного сервера, значение по умолчанию — 8105.

Параметры

Используются следующие параметры только в режиме Удалённый сервер диска:


Исправлено:

  • "Yöntem 3986" переведено как "RFC 3986".
  • Устранены ошибки в пунктуации и согласованиях.
  • Корректно оформлены ссылки и текст внутри них.- path — фактический локальный каталог источника удалённого сервера диска

Например, в режиме Удалённого сервера диска.```text rs://127.0.0.1:8105?mode=server&local_sync_disabled=true&path=./source&fs_server=https://127.0.0.1 _/ _/ _/ _______________________________________________________________________/ | | | | схема хост порт параметр

### Управление API

Активируйте управляемый API на основе [Файлового сервера](#файловый-сервер) с помощью флага `manage`.

По умолчанию доступ к управляемому API предоставляется только с частных адресов и адресов loopback.

Вы можете отключить его, установив флаг `manage_private` в значение `false`.

```bash
$ gofs -source=./source -dest=./dest -server -tls_cert_file=cert.pem -tls_key_file=key.pem -rand_user_count=3 -manage

Профилировочный API

URL адрес для профилирования выглядит следующим образом:

https://127.0.0.1/manage/pprof/

Конфигурационный API

Чтение конфигурации программы, по умолчанию возвращает конфигурацию в формате json, и поддерживаются форматы json и yaml.

https://127.0.0.1/manage/config

Или используйте параметр format для указания формата конфигурации.

https://127.0.0.1/manage/config?format=yaml

Отчётный API

Используйте флаг report для активации маршрута отчётного API и начала сбора данных отчёта, требуется также активация флага manage.

Дополнительные сведения об отчётном API см. в разделе Отчётный API.

https://127.0.0.1/manage/report
```### Логгер

Логгер файла и консоли активируются по умолчанию, а логгер файла можно отключить, установив флаг `log_file` в значение `false`.

Используйте флаг `log_level` для установки уровня логгирования; по умолчанию установлено значение `INFO` (`DEBUG=0` `INFO=1` `WARN=2` `ERROR=3`).

Используйте флаг `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`.

```bash
# Установите конфигурацию логгера в режиме "Local Disk"
$ gofs -source=./source -dest=./dest -log_file -log_level=0 -log_dir="./logs/" -log_flush -log_flush_interval=3s -log_event

Использование конфигурационного файлаЕсли вам это нужно, вы можете использовать конфигурационный файл для замены всех флагов. Поддерживаются форматы json и yaml. Все поля конфигурации такие же, как и флаги, вы можете обратиться к примеру конфигурации Пример Конфигурации

или ответу API Конфигурации.

$ gofs -conf=./gofs.yaml

Проверка контрольной суммы

Вы можете использовать флаг checksum для расчета контрольной суммы файла и вывода результата.

Флаги chunk_size, checkpoint_count и checksum_algorithm действуют здесь так же, как и в разделе Локальный жесткий диск.

$ gofs -source=./gofs -checksum

Для получения дополнительной информации

Информация о помощи

$ gofs -h

Информация о версии

$ gofs -v

О программе

$ gofs -about

Веб-интерфейс

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/ваш_логин/gofs.git]
  ForkRepo -- 2.git clone --> LocalRepo[локальная репозитория]
  LocalRepo -- 3.commit изменений --> NewBranch[новый ветвь]
  NewBranch -- 4.git push --> ForkRepo
  ForkRepo -- 5.create pull request --> PR
  PR -- 6.merge to --> MainRepo

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

Github Codespaces

Открыть в GitHub Codespaces

Gitpod

Открыть в Gitpod

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

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

Введение

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

Обновления (27)

все

Участники

все

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

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