Files
computer-playbook/roles/web-app-shopware/templates/shopware.yaml.j2
kevinveenbirkenbachandClaude Opus 4.8 f17d68fae3 feat(web-app): SeaweedFS S3 object-store integration for 9 Tier A roles
Wire nine database-backed web-app roles to the shared SeaweedFS object store
via the engine-agnostic objstore lookup, following the existing consumer recipe
(declare the seaweedfs service, render the app S3 config from
lookup('objstore', application_id, ...), add the e2e test). Each app's S3
config keys were verified against the upstream docs/source, and all honor
SeaweedFS path-style addressing + the internal http endpoint:

- fider:     BLOB_STORAGE=s3 + BLOB_STORAGE_S3_*
- snipe-it:  split s3_private/s3_public disks, single bucket via BUCKET_ROOT, *_AWS_PATH_STYLE
- mobilizon: Uploader.S3 + ExAws (private)
- decidim:   ActiveStorage amazon service, force_path_style
- taiga:     django-storages, AWS_S3_ADDRESSING_STYLE=path
- shopware:  Flysystem amazon-s3 adapter, use_path_style_endpoint
- magento:   remote_storage driver aws-s3 + endpoint
- matrix:    s3_storage_provider module baked into the image + media_storage_providers
- gitlab:    consolidated object storage, single bucket split into per-type virtual buckets, path_style

Both object-store guards (test_database_requires_seaweedfs,
test_seaweedfs_consumer_playwright) pass; autoformat clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 15:29:55 +02:00

66 lines
2.8 KiB
Django/Jinja

---
{% if lookup('objstore', application_id, 'enabled') | bool %}
shopware:
filesystem:
public:
type: "amazon-s3"
url: "{{ lookup('objstore', application_id, 'public_url') }}"
config:
bucket: "{{ lookup('objstore', application_id, 'bucket') }}"
region: "{{ lookup('objstore', application_id, 'region') }}"
endpoint: "{{ lookup('objstore', application_id, 'url') }}"
root: "public"
use_path_style_endpoint: true
credentials:
key: "{{ lookup('objstore', application_id, 'access_key') }}"
secret: "{{ lookup('objstore', application_id, 'secret_key') }}"
private:
type: "amazon-s3"
visibility: "private"
config:
bucket: "{{ lookup('objstore', application_id, 'bucket') }}"
region: "{{ lookup('objstore', application_id, 'region') }}"
endpoint: "{{ lookup('objstore', application_id, 'url') }}"
root: "private"
use_path_style_endpoint: true
credentials:
key: "{{ lookup('objstore', application_id, 'access_key') }}"
secret: "{{ lookup('objstore', application_id, 'secret_key') }}"
theme:
type: "amazon-s3"
url: "{{ lookup('objstore', application_id, 'public_url') }}"
config:
bucket: "{{ lookup('objstore', application_id, 'bucket') }}"
region: "{{ lookup('objstore', application_id, 'region') }}"
endpoint: "{{ lookup('objstore', application_id, 'url') }}"
root: "theme"
use_path_style_endpoint: true
credentials:
key: "{{ lookup('objstore', application_id, 'access_key') }}"
secret: "{{ lookup('objstore', application_id, 'secret_key') }}"
sitemap:
type: "amazon-s3"
url: "{{ lookup('objstore', application_id, 'public_url') }}"
config:
bucket: "{{ lookup('objstore', application_id, 'bucket') }}"
region: "{{ lookup('objstore', application_id, 'region') }}"
endpoint: "{{ lookup('objstore', application_id, 'url') }}"
root: "sitemap"
use_path_style_endpoint: true
credentials:
key: "{{ lookup('objstore', application_id, 'access_key') }}"
secret: "{{ lookup('objstore', application_id, 'secret_key') }}"
asset:
type: "amazon-s3"
url: "{{ lookup('objstore', application_id, 'public_url') }}"
config:
bucket: "{{ lookup('objstore', application_id, 'bucket') }}"
region: "{{ lookup('objstore', application_id, 'region') }}"
endpoint: "{{ lookup('objstore', application_id, 'url') }}"
root: "asset"
use_path_style_endpoint: true
credentials:
key: "{{ lookup('objstore', application_id, 'access_key') }}"
secret: "{{ lookup('objstore', application_id, 'secret_key') }}"
{% endif %}