Nomploy Nomad Packs

← All packs

seaweedfs v0.1.0

Object storage

SeaweedFS — a fast, Apache-2.0 distributed object store with an S3-compatible API. Deployed single-node all-in-one (master + volume + filer + S3 gateway in one process) as a host-networked Nomad service with a persistent Docker volume.

nomad-pack run seaweedfs --registry nomploy
1 task s3 8333master 9333volume 8080filer 8888 1 volume image chrislusf/seaweedfs:latest
Variables 13
values.hcl

Save as values.hcl, edit, then run:

nomad-pack run seaweedfs -f values.hcl --registry nomploy
# The name of the Nomad job.
job_name = "seaweedfs"

# The Nomad namespace to deploy into.
namespace = "default"

# The datacenters to deploy to.
datacenters = ["*"]

# The SeaweedFS container image. Pin a tag in production.
image = "chrislusf/seaweedfs:latest"

# Host port for the S3-compatible API — the endpoint your S3 clients use.
s3_port = 8333

# Host port for the master server + its web UI. SeaweedFS also binds the gRPC port master_port+10000 on the host.
master_port = 9333

# Host port for the volume server (+10000 for its gRPC port). Default 8080 — change it if another host service already uses 8080.
volume_port = 8080

# Host port for the filer + its web UI (+10000 for its gRPC port).
filer_port = 8888

# S3 access key for the admin identity. Leave BOTH access_key and secret_key empty to run open (Allow-All mode, anonymous access). Set both to require authentication for all S3 requests.
access_key = ""

# S3 secret key for the admin identity. Baked into the job as a rendered config — treat it as a secret.
secret_key = ""

# Docker named volume for /data (object data + master + filer metadata). This is all of SeaweedFS's state — back it up. SeaweedFS runs as root, so a fresh volume is writable.
data_volume = "seaweedfs_data"

# Placement constraints — pin to one node so the local volume stays put (this pack runs a single all-in-one alloc). On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []

# The task resources. Raise memory for large datasets — the volume server keeps needle indexes in memory.
resources = {
    cpu    = 500
    memory = 512
  }
NameTypeDefaultDescription
job_name string
"seaweedfs"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"chrislusf/seaweedfs:latest"
The SeaweedFS container image. Pin a tag in production.
s3_port number
8333
Host port for the S3-compatible API — the endpoint your S3 clients use.
master_port number
9333
Host port for the master server + its web UI. SeaweedFS also binds the gRPC port master_port+10000 on the host.
volume_port number
8080
Host port for the volume server (+10000 for its gRPC port). Default 8080 — change it if another host service already uses 8080.
filer_port number
8888
Host port for the filer + its web UI (+10000 for its gRPC port).
access_key key string
""
S3 access key for the admin identity. Leave BOTH access_key and secret_key empty to run open (Allow-All mode, anonymous access). Set both to require authentication for all S3 requests.
secret_key key string
""
S3 secret key for the admin identity. Baked into the job as a rendered config — treat it as a secret.
data_volume string
"seaweedfs_data"
Docker named volume for /data (object data + master + filer metadata). This is all of SeaweedFS's state — back it up. SeaweedFS runs as root, so a fresh volume is writable.
constraints list
[]
Placement constraints — pin to one node so the local volume stays put (this pack runs a single all-in-one alloc). On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 500
    memory = 512
  }
The task resources. Raise memory for large datasets — the volume server keeps needle indexes in memory.
Readme

seaweedfs

SeaweedFS — a fast, Apache-2.0 distributed file/object store with an S3-compatible API. A lightweight, fully open-source alternative to MinIO for object storage: backup targets, a storage backend for Loki / the zot registry / Fleet software installers, or app assets.

This pack is single-node all-in-one: it runs weed server -s3, which starts the master, a volume server, a filer and the S3 gateway in one process, host-networked, with all state on a persistent Docker volume.

Usage

nomad-pack registry add nomploy github.com/Nomploy/nomad-packs
nomad-pack run seaweedfs --registry nomploy

In nomploy: create a Compose service, type Nomad Pack, pack seaweedfs, custom registry github.com/Nomploy/nomad-packs, then Deploy.

Endpoints

SeaweedFS also binds the gRPC ports master_port+10000, volume_port+10000, filer_port+10000 on the host.

Authentication

Follows the same optional-auth pattern as the zot pack:

Key variables

Variable Default Notes
image chrislusf/seaweedfs:latest Pin a tag in production.
s3_port 8333 The S3 endpoint.
master_port / volume_port / filer_port 9333 / 8080 / 8888 Change volume_port if 8080 is taken.
access_key / secret_key "" Both empty = open; both set = auth required.
data_volume seaweedfs_data All state — back it up.
constraints [] Pin to a node so the local volume stays put.
resources cpu 500 / mem 512 Raise memory for large datasets.

Quick test

aws --endpoint-url http://<node-ip>:8333 s3 mb s3://test
aws --endpoint-url http://<node-ip>:8333 s3 cp ./file s3://test/
aws --endpoint-url http://<node-ip>:8333 s3 ls s3://test/

With auth enabled, configure the access/secret key first (aws configure) and keep --endpoint-url path-style.

Notes