A Docker Swarm Deployment Manager
Project description
Ṣeto
Ṣeto is a command-line orchestration tool that automates the setup, management, and synchronization of shared storage volumes using an NFS driver. It provides a simple workflow for managing stack-based deployments across multiple hosts — from setup to mounting and unmounting volumes.
Overview
Ṣeto streamlines distributed storage management by automating:
- Remote setup of manager and replica nodes.
- Creation and synchronization of shared volumes.
- Automated mounting/unmounting of NFS volumes.
- Resolution of Docker Compose stacks before deployment.
This tool is ideal for environments using Docker Swarm, Compose stacks, or custom orchestrations that depend on synchronized shared storage.
Supported Operating Systems
Ṣeto has been tested and validated on the following Linux distributions:
| Distribution | Versions Tested | Package Manager | Status |
|---|---|---|---|
| Debian | 11 (Bullseye), 12 (Bookworm) | apt-get |
✅ Supported |
| Fedora | 39, 40 | dnf |
✅ Supported |
Note: Other Linux distributions (RHEL, Ubuntu, AlmaLinux) may work but are not officially tested. All remote nodes must have SSH, Docker, and NFS client utilities installed.
Features
- Compose Command – Resolves and validates Docker Compose files.
- Setup Command – Configures manager and replica nodes.
- Create Volumes Command – Creates and synchronizes NFS volumes.
- Mount Volumes Command – Mounts volumes on replicas.
- Unmount Volumes Command – Safely detaches shared volumes.
Global Options
These options apply to all subcommands:
| Option | Description | Example |
|---|---|---|
--stack |
Stack name for grouping resources. | --stack my-stack |
--driver |
Driver URI for shared storage. | --driver nfs://user:pass@host |
Subcommands
1. Compose Command
Resolves Docker Compose files before deployment.
seto --stack <stack-name> --driver <driver-uri> compose
Example
seto --stack my-stack --driver nfs://user:pass@host compose
2. Setup Command
Sets up manager and replica nodes for NFS synchronization.
seto --stack <stack-name> --driver <driver-uri> \
setup --replica <replica-connection-strings>
| Option | Description |
|---|---|
--replica |
Required. Replica connections: user:pass@hostname. |
Example
seto --stack my-stack --driver nfs://user:pass@host \
setup --replica user:pass@replica1 user:pass@replica2
3. Create Volumes Command
Creates and synchronizes shared NFS volumes across nodes.
seto --stack <stack-name> --driver <driver-uri> \
create-volumes --replica <replica-strings> [--force]
| Option | Description |
|---|---|
--replica |
Required. Nodes for volume creation. |
--force |
Optional. Forces re-synchronization. |
Example
seto --stack my-stack --driver nfs://user:pass@host \
create-volumes --replica user:pass@replica1 user:pass@replica2 --force
4. Mount Volumes Command
Mounts shared NFS volumes on replicas.
seto --stack <stack-name> --driver <driver-uri> \
mount-volumes --replica <replica-strings>
| Option | Description |
|---|---|
--replica |
Required. Nodes where volumes are mounted. |
Example
seto --stack my-stack --driver nfs://user:pass@host \
mount-volumes --replica user:pass@replica1 user:pass@replica2
5. Unmount Volumes Command
Unmounts shared NFS volumes from replicas.
seto --stack <stack-name> --driver <driver-uri> \
unmount-volumes --replica <replica-strings>
| Option | Description |
|---|---|
--replica |
Required. Nodes where volumes are unmounted. |
Example
seto --stack my-stack --driver nfs://user:pass@host \
unmount-volumes --replica user:pass@replica1 user:pass@replica2
Example Workflow
Typical end-to-end workflow:
# 1. Setup manager and replicas
seto --stack my-stack --driver nfs://user:pass@host \
setup --replica user:pass@replica1 user:pass@replica2
# 2. Create and sync volumes
seto --stack my-stack --driver nfs://user:pass@host \
create-volumes --replica user:pass@replica1 user:pass@replica2 --force
# 3. Mount volumes for usage
seto --stack my-stack --driver nfs://user:pass@host \
mount-volumes --replica user:pass@replica1 user:pass@replica2
# 4. Deploy stack after mounting
seto --stack my-stack --manager nfs://user@manager-host deploy
# 5. Unmount volumes when finished
seto --stack my-stack --driver nfs://user:pass@host \
unmount-volumes --replica user:pass@replica1 user:pass@replica2
Error Handling
Ṣeto provides reliable error handling:
- Missing or invalid arguments exit with a non-zero status.
- Remote errors are captured and clearly reported.
- Commands are idempotent — safe to re-run if interrupted.
- Execution stops immediately on critical errors.
Notes
- NFS authentication uses the URI:
nfs://username:password@hostname - Replica connections follow:
username:password@hostname - Future versions will support GlusterFS, CephFS, and CIFS.
Environment Setup
-
See cloud-init.yaml file for prerequisites to install.
-
Load environment
At the top-level of your project run:
direnv allowThe next time you will launch your terminal and enter the top-level of your project,
direnvwill check for changes and will automatically load the Devbox environment. -
Install dependencies
make install -
Start environment
make shellThis will starts a preconfigured Tmux session. Please see the .tmuxinator.yml file.
Makefile Targets
Please see the Makefile for the full list of targets.
Docker Swarm Setup
To set up Docker Swarm, you'll first need to ensure you have Docker installed on your machines. Then, you can initialize Docker Swarm on one of your machines to act as the manager node, and join other machines as worker nodes. Below are the general steps to set up Docker Swarm:
-
Install Docker
Make sure Docker is installed on all machines that will participate in the Swarm cluster. You can follow the official Docker installation guide for your operating system.
-
Choose Manager Node
Select one of your machines to act as the manager node. This machine will be responsible for managing the Swarm cluster.
-
Initialize Swarm
SSH into the chosen manager node and run the following command to initialize Docker Swarm:
docker swarm init --advertise-addr <MANAGER_IP>
Replace
<MANAGER_IP>with the IP address of the manager node. This command initializes a new Docker Swarm cluster with the manager node. -
Join Worker Nodes
After initializing the Swarm, Docker will output a command to join other nodes to the cluster as worker nodes. Run this command on each machine you want to join as a worker node.
docker swarm join --token <TOKEN> <MANAGER_IP>:<PORT>
Replace
<TOKEN>with the token generated by thedocker swarm initcommand and<MANAGER_IP>:<PORT>with the IP address and port of the manager node. -
Verify Swarm Status
Once all nodes have joined the Swarm, you can verify the status of the Swarm by running the following command on the manager node:
docker node ls
This command will list all nodes in the Swarm along with their status.
License
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file seto-3.7.0rc4.tar.gz.
File metadata
- Download URL: seto-3.7.0rc4.tar.gz
- Upload date:
- Size: 19.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b29eb9f1a72cdf15b409d2ede43244828d32e23dbca9d03d5abddcc2ae32e86b
|
|
| MD5 |
2205cac689ee84292a0d51fd5d4da446
|
|
| BLAKE2b-256 |
339d3cce0797c55c024bc6f38ab60e04e4fa069c2749fd02864dfddcf345d500
|
File details
Details for the file seto-3.7.0rc4-py3-none-any.whl.
File metadata
- Download URL: seto-3.7.0rc4-py3-none-any.whl
- Upload date:
- Size: 36.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e94d0825ea2bea4b8ce2b4c16a8ddf1f41cd62b8b91892b8c2619319c772fac6
|
|
| MD5 |
8d19f7ebc79689da1341c0ed10e7eac2
|
|
| BLAKE2b-256 |
0490439aea3d5a3be62e3cf12b5dc3ae9b00998a5da81521d87ceb6f1ee7faa9
|