Skip to content

Replace MinIO with RustFS for artifact storage - #308

Merged
mxschmitt merged 2 commits into
mainfrom
cursor/replace-minio-with-rustfs-5ff7
Sep 2, 2026
Merged

Replace MinIO with RustFS for artifact storage#308
mxschmitt merged 2 commits into
mainfrom
cursor/replace-minio-with-rustfs-5ff7

Conversation

@mxschmitt

@mxschmitt mxschmitt commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Replaces the MinIO object store with RustFS, an S3-compatible store, for screenshots, videos, and other worker artifacts.

Changes

  • Kubernetes: minio Deployment/Service are now a standalone rustfs Deployment/Service using rustfs/rustfs:1.0.0-rc.5.
  • File service talks to storage through S3_ENDPOINT / S3_ACCESS_KEY / S3_SECRET_KEY and forces path-style bucket URLs so Caddy can keep proxying /file-uploads/*.
  • Manifest generation and CI now require RUSTFS_ACCESS_KEY and RUSTFS_SECRET_KEY instead of MINIO_ROOT_USER / MINIO_ROOT_PASSWORD.
  • The Go minio-go client stays in place as the S3 SDK; only the server was replaced.
  • k8/generate.sh deletes generated YAML whose templates no longer exist, so leftover generated-minio-*.yaml files are not applied next to RustFS.
  • Setup docs and CI delete any remaining MinIO Deployment/Service before apply.

Breaking setup change

Hosts that generate manifests need:

export RUSTFS_ACCESS_KEY="tryplaywright"
export RUSTFS_SECRET_KEY=$(openssl rand -base64 32)

instead of MINIO_ROOT_USER / MINIO_ROOT_PASSWORD.

Existing clusters should also remove MinIO:

kubectl delete deployment,service minio --ignore-not-found

Testing

  • go test ./... and go build ./...
  • File-service integration tests against a live RustFS 1.0.0-rc.5 process: bucket create, lifecycle rule, PNG upload, path-style presigned GET, and rejected non-image uploads
  • k8/generate.sh renders the RustFS Deployment/Service, file-service S3 env vars, and removes stale generated MinIO manifests
  • GitHub CI k3s e2e passed on the initial revision; a follow-up commit adds the leftover-MinIO cleanup
Open in Web Open in Cursor 

Swap the Kubernetes object store to standalone RustFS while keeping the
S3-compatible client in the file service. Path-style access is required
so Caddy can keep proxying /file-uploads to the storage service.

Co-authored-by: Max Schmitt <max@schmitt.mx>
@mxschmitt
mxschmitt marked this pull request as ready for review September 2, 2026 21:28
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-02T21:31:32.651113Z 43b9866 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 43b9866083

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +5 to +6
io.kompose.service: rustfs
name: rustfs

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Clean up MinIO during the RustFS migration

On an existing checkout that has already run k8/generate.sh, k8/generated-minio-deployment.yaml is ignored by Git and remains after pulling this change. The generator only removes output files corresponding to templates that still exist, so the deleted MinIO template's output is never cleaned and the documented kubectl apply -f k8/ deploys MinIO alongside RustFS; existing live MinIO resources are not explicitly removed either. Add upgrade cleanup for the stale generated manifest and deployed MinIO resources.

Useful? React with 👍 / 👎.

generate.sh now deletes generated YAML whose templates no longer exist,
so an old generated-minio-deployment.yaml cannot be applied next to
RustFS. The setup docs and CI also delete the MinIO Deployment/Service.

Co-authored-by: Max Schmitt <max@schmitt.mx>
@mxschmitt
mxschmitt merged commit 52defd1 into main Sep 2, 2026
12 checks passed
@mxschmitt
mxschmitt deleted the cursor/replace-minio-with-rustfs-5ff7 branch September 2, 2026 22:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants