Ansible role for starting a (RustFS) S3 storage server
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Simon Cornet 51da3941ef
All checks were successful
ci/woodpecker/push/linting Pipeline was successful
docs: improve readme
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 17:29:31 +02:00
.woodpecker chore(package): update cr.simoncor.net/dockerhub/davidanson/markdownlint-cli2 docker tag to v0.23.3 2026-09-20 05:50:57 +00:00
meta feat: remove docker and traefik dependancy 2026-05-08 15:28:15 +02:00
roles ci: migrate from gitlab ci to woodpecker 2026-05-15 14:13:51 +02:00
tasks chore: bump version to v1.0.0-beta.3 2026-05-19 17:23:01 +02:00
.ansible-lint fix: exclude only sops yml files from lint 2026-07-14 16:23:58 +02:00
.editorconfig chore: add .editorconfig and .gitattributes 2026-05-27 14:24:03 +02:00
.gitattributes chore: add .editorconfig and .gitattributes 2026-05-27 14:24:03 +02:00
.gitignore feat: initial commit 2026-04-21 17:20:24 +02:00
.markdownlint-cli2.jsonc ci: migrate from gitlab ci to woodpecker 2026-05-15 14:13:51 +02:00
.sops.yaml fix: correct sops regex to ya?ml 2026-07-14 16:02:04 +02:00
.yamllint chore: exclude .yml files from lint configs 2026-07-14 16:17:41 +02:00
ansible.cfg chore: sync linting and config files from common 2026-07-14 11:33:15 +02:00
playbook.yaml chore(playbook): run galaxy install only on first host 2026-08-13 08:49:04 +02:00
readme.md docs: improve readme 2026-10-05 17:29:31 +02:00
renovate.json feat: initial commit 2026-04-21 17:20:24 +02:00

Ansible Role: RustFS

Installs and runs RustFS, an S3 compatible object storage server, as a Docker container. The repository is named s3, the role is installed as rustfs.

Requirements

  • A Docker host. The role uses the community.docker collection.
  • Access to the registry mirror cr.simoncor.net (the image is pulled from cr.simoncor.net/dockerhub).

Dependencies

The playbook runs these roles first, as listed in roles/requirements.yml:

  • docker (https://git.simoncor.net/ansible/docker.git)
  • traefik (https://git.simoncor.net/ansible/traefik.git)
  • rustfs (this repository, https://git.simoncor.net/ansible/s3.git)

Variables

The role has no defaults/ and defines no variables of its own. It uses one variable that must come from the inventory or from one of the dependencies:

Variable Required Default Description
timezone Yes Timezone, passed to the container as TZ

Variables of the docker and traefik roles apply as documented in those repositories.

Example

timezone: "Europe/Amsterdam"

Usage

Run playbook.yaml through Semaphore. The playbook first runs ansible-galaxy install -f -r roles/requirements.yml on localhost, then runs the docker, traefik and rustfs roles in that order.

Operational notes

  • The data directory /mnt/rustfs/data is created with owner and group 10001 and mounted at /data in the container. The mount must exist and be persistent.
  • The container is called rustfs, uses image cr.simoncor.net/dockerhub/rustfs/rustfs:1.0.0-beta.3 (pinned beta), runs with host networking, restart policy unless-stopped and is pulled on every run (pull: always).
  • Ports: 9000/tcp (S3 API) and 9001/tcp (console) are published. The container sets no Traefik labels, so routing through Traefik has to be configured on the Traefik side.
  • No credentials are configured by the role: the only environment variable is TZ.
  • After starting the container, the role runs a Docker cleanup (tasks/cleanup.yaml): it prunes containers, images, networks, volumes and the builder cache and then runs docker system prune --all --force --volumes. This removes everything unused on the host, including images and volumes of stopped containers.
  • There are no tags.