Minio compatible store with Digital Ocean Spaces

I’m having trouble connecting to external Digital Ocean Spaces via Gitea’s storage settings to offload things like attachments in issues to cheap object storage.

I’ve tried several variations of the following settings in custom/conf/app.ini:

[storage]
STORAGE_TYPE = minio
MINIO_ENDPOINT = mybucket.nyc3.digitaloceanspaces.com
MINIO_BUCKET = mybucket
MINIO_LOCATION = nyc3
MINIO_ACCESS_KEY_ID = redacted
MINIO_SECRET_ACCESS_KEY = redacted
MINIO_INSECURE_SKIP_VERIFY = true

If I do MINIO_ENDPOINT = https://mybucket.nyc3.digitaloceanspaces.com it logs:

routers/init.go:60:mustInit() [F] code.gitea.io/gitea/modules/storage.Init failed: Endpoint url cannot have fully qualified paths.

If I do MINIO_ENDPOINT = mybucket.nyc3.digitaloceanspaces.com it logs:

...les/storage/minio.go:86:NewMinioStorage() [I] Creating Minio storage at mybucket.nyc3.digitaloceanspaces.com:mybucket with base path attachments/
routers/init.go:60:mustInit() [F] code.gitea.io/gitea/modules/storage.Init failed: 302 Found

If I try to do MINIO_ENDPOINT = nyc3.digitaloceanspaces.com or MINIO_ENDPOINT = digitaloceanspaces.com it logs:

routers/init.go:60:mustInit() [F] code.gitea.io/gitea/modules/storage.Init failed: permission denied

If I try to set a blank bucket name like MINIO_BUCKET = " " it logs:

routers/init.go:60:mustInit() [F] code.gitea.io/gitea/modules/storage.Init failed: Bucket name cannot be empty

Is it obvious what I’m doing wrong, or is it possible that Gitea doesn’t support DO Spaces for object storage? I appreciate any nudge in the right direction. Thank you!

MINIO_ENDPOINT = nyc3.digitaloceanspaces.com seems right. Check the bucket name and the permissions on the key.

Hmm using that MINIO_ENDPOINT and the correct bucket name logs the following in log/gitea.log:

routers/init.go:60:mustInit() [F] code.gitea.io/gitea/modules/storage.Init failed: 302 Found
...les/setting/cache.go:75:loadCacheFrom() [I] Cache Service Enabled
...les/setting/cache.go:90:loadCacheFrom() [I] Last Commit Cache Service Enabled
...s/setting/session.go:77:loadSessionFrom() [I] Session Service Enabled
...ules/setting/cors.go:32:loadCorsFrom() [I] CORS Service Enabled
...es/setting/mailer.go:237:loadMailerFrom() [I] Mail Service Enabled
...es/setting/mailer.go:259:loadNotifyMailFrom() [I] Notify Mail Service Enabled
...s/storage/storage.go:176:initAttachments() [I] Initialising Attachment storage with type: minio
...les/storage/minio.go:86:NewMinioStorage() [I] Creating Minio storage at nyc3.digitaloceanspaces.com:mybucket with base path attachments/
routers/init.go:60:mustInit() [F] code.gitea.io/gitea/modules/storage.Init failed: 302 Found

Running initAttachments seems to be failing:

This is a different error from what you said above… what did you change?

It’s the same as the second error I initially posted, I’m just included more of the log this time. When I originally posted the issue I had done a bunch of testing with variations to the settings and I think I might have accidentally said that MINIO_ENDPOINT = nyc3.digitaloceanspaces.com produces permission denied when it actually logs 302 Found - my apologies for the mistake. Either that or some combination of MINIO_BUCKET and MINIO_LOCATION caused the difference. Sorry for the confusion, here are my settings for the last error:

[storage]
STORAGE_TYPE = minio
MINIO_ENDPOINT = nyc3.digitaloceanspaces.com
MINIO_BUCKET = mybucket
MINIO_ACCESS_KEY_ID = redacted
MINIO_SECRET_ACCESS_KEY = redacted

Thank you!