mirror of
https://github.com/hanzoai/s3.git
synced 2026-10-30 14:59:09 +00:00
hanzoai/s3 was an AGPL-3.0 MinIO fork whose network-copyleft blocks embedding
and reselling as a managed service. Replace it wholesale with a fork of
SeaweedFS (github.com/seaweedfs/seaweedfs, Apache-2.0, Go) which ships a
built-in S3 gateway + Filer.
- License: AGPL-3.0 -> Apache-2.0 (upstream LICENSE kept verbatim, incl.
"Copyright 2025 Chris Lu"); NOTICE added crediting SeaweedFS. No AGPL/BUSL/
SSPL/GPL or enterprise ("ee") files remain.
- Module: go.mod path set to github.com/hanzoai/s3 with a self-replace
(replace github.com/seaweedfs/seaweedfs => ./) so the ~1800 internal Go files
keep their upstream import paths with zero churn. Internal identifiers and
import paths are intentionally NOT renamed.
- CLI rebrand: the binary is built as `s3` (was `weed`); root usage, per-command
help/usage/flag strings, shell autocomplete program name, and the product name
in CLI output now read "Hanzo S3" / `s3`. Users never see `weed`.
(e.g. `s3 server`, `s3 filer`, `s3 master`, `s3 volume`, `s3 s3`, `s3 mount`.)
- Build: `make` (or `go build -o s3 ./weed`) builds the `s3` binary green;
`cmd/weed-db` and `cmd/weed-sql` also build; `go vet ./weed/command/` clean.
- README/LLM.md rewritten for Hanzo S3; AGENTS.md/CLAUDE.md symlinks preserved.
- Dropped a 33MB prebuilt Mach-O `stress` binary upstream had committed; `.gitignore`
updated to ignore the `s3` build output.
83 lines
3.9 KiB
TOML
83 lines
3.9 KiB
TOML
# A sample TOML config file for SeaweedFS filer store
|
||
# Used by both "weed filer" or "weed server -filer" and "weed filer.replicate"
|
||
# Put this file to one of the location, with descending priority
|
||
# ./notification.toml
|
||
# $HOME/.seaweedfs/notification.toml
|
||
# /etc/seaweedfs/notification.toml
|
||
|
||
####################################################
|
||
# notification
|
||
# send and receive filer updates for each file to an external message queue
|
||
####################################################
|
||
[notification.log]
|
||
# this is only for debugging purpose and does not work with "weed filer.replicate"
|
||
enabled = false
|
||
|
||
|
||
[notification.kafka]
|
||
enabled = false
|
||
hosts = [
|
||
"localhost:9092"
|
||
]
|
||
topic = "seaweedfs_filer"
|
||
offsetFile = "./last.offset"
|
||
offsetSaveIntervalSeconds = 10
|
||
# SASL Authentication
|
||
sasl_enabled = false
|
||
sasl_mechanism = "PLAIN" # PLAIN, SCRAM-SHA-256, SCRAM-SHA-512
|
||
sasl_username = ""
|
||
sasl_password = ""
|
||
# TLS/SSL
|
||
tls_enabled = false
|
||
tls_ca_cert = "" # path to CA certificate PEM file
|
||
tls_client_cert = "" # path to client certificate PEM file (for mTLS)
|
||
tls_client_key = "" # path to client private key PEM file (for mTLS)
|
||
tls_insecure_skip_verify = false
|
||
|
||
|
||
[notification.aws_sqs]
|
||
# experimental, let me know if it works
|
||
enabled = false
|
||
aws_access_key_id = "" # if empty, loads from the shared credentials file (~/.aws/credentials).
|
||
aws_secret_access_key = "" # if empty, loads from the shared credentials file (~/.aws/credentials).
|
||
region = "us-east-2"
|
||
sqs_queue_name = "my_filer_queue" # an existing queue name
|
||
|
||
|
||
[notification.google_pub_sub]
|
||
# read credentials doc at https://cloud.google.com/docs/authentication/getting-started
|
||
enabled = false
|
||
google_application_credentials = "/path/to/x.json" # path to json credential file
|
||
project_id = "" # an existing project id
|
||
topic = "seaweedfs_filer_topic" # a topic, auto created if does not exists
|
||
|
||
[notification.gocdk_pub_sub]
|
||
# The Go Cloud Development Kit (https://gocloud.dev).
|
||
# PubSub API (https://godoc.org/gocloud.dev/pubsub).
|
||
# Supports AWS SNS/SQS, Azure Service Bus, Google PubSub, NATS and RabbitMQ.
|
||
enabled = false
|
||
# This URL will Dial the RabbitMQ server at the URL in the environment
|
||
# variable RABBIT_SERVER_URL and open the exchange "myexchange".
|
||
# The exchange must have already been created by some other means, like
|
||
# the RabbitMQ management plugin. Сreate myexchange of type fanout and myqueue then
|
||
# create binding myexchange => myqueue
|
||
topic_url = "rabbit://myexchange"
|
||
sub_url = "rabbit://myqueue"
|
||
|
||
[notification.webhook]
|
||
# Send file system events to HTTP webhook endpoints (push model)
|
||
# BEST FOR: Low to moderate traffic (< 100 events/second sustained)
|
||
# FOR HIGH TRAFFIC: Consider using Kafka, SQS, or pull-based event logs instead
|
||
# Documentation: https://github.com/seaweedfs/seaweedfs/wiki/Filer-Notification-Webhook
|
||
enabled = false
|
||
endpoint = "https://your-server.com/webhook" # required: HTTP endpoint URL
|
||
bearer_token = "" # optional: bearer token for authentication
|
||
timeout_seconds = 10 # optional: HTTP timeout (default: 10, range: 1-300)
|
||
max_retries = 3 # optional: retry attempts (default: 3, range: 0-10)
|
||
backoff_seconds = 3 # optional: initial backoff delay (default: 3, range: 1-60)
|
||
max_backoff_seconds = 30 # optional: max backoff delay (default: 30, range: backoff_seconds-300)
|
||
workers = 5 # optional: concurrent workers (default: 5, range: 1-100)
|
||
buffer_size = 10000 # optional: event buffer size (default: 10000, range: 100-1000000)
|
||
# event_types = ["create", "update", "delete", "rename"] # optional: filter by event types (default: all)
|
||
# path_prefixes = ["/important", "/data"] # optional: filter by path prefixes (default: all)
|