Uploads docker volume is owned by root
Description
I'm running Mobilizon a on a docker container. When trying to save a created or updated event with a headline picture, I obtain a popup with the "Please refresh the page and retry." message, and the form is not saved.
Steps to Reproduce
- Create or update an event
- Add a headline picture
- Click save
Expected behaviour:
The event form is saved.
Actual behaviour:
"Please refresh the page and retry." is displayed on a popip
Reproduces how often:
100%
Versions
[What Mobilizon instance you're using, and the versions of each relevant app or component, including your OS and browser.]
Additional Information
The framasoft/mobilizon:master
container, pulled at about 2pm today
Server side logs:
[...]
mobilizon_1 | 13:34:27.194 request_id=FkXaTQKxeLa1ylMAAAvB [info] Sent 200 in 674ms
mobilizon_1 | 13:34:27.282 request_id=FkXaTRGyh7c4NpkAAAxh [info] Sent 200 in 510ms
mobilizon_1 | 13:34:48.377 request_id=FkXaUhmCaP-4o5sAABiC [info] POST /api
mobilizon_1 | 13:34:48.495 request_id=FkXaUhmCaP-4o5sAABiC [info] Sent 500 in 117ms
mobilizon_1 | 13:34:48.495 [error] #PID<0.7958.0> running Mobilizon.Web.Endpoint (connection #PID<0.7957.0>, stream id 1) terminated
mobilizon_1 | Server: mobilizon.lan:80 (http)
mobilizon_1 | Request: POST /api
mobilizon_1 | ** (exit) an exception was raised:
mobilizon_1 | ** (File.CopyError) could not copy from "/tmp/plug-1604/multipart-1604928888-347881490242821-2" to "/app/uploads/9a38ea2dfdea5bc7f4c9b7ccbe088e05b42c6879930735bb810d6d9588062b88.jpg": permission denied
mobilizon_1 | (elixir 1.11.2) lib/file.ex:816: File.cp!/3
mobilizon_1 | (mobilizon 1.0.0) lib/web/upload/uploader/uploader.ex:48: Mobilizon.Web.Upload.Uploader.put_file/2
mobilizon_1 | (mobilizon 1.0.0) lib/web/upload/upload.ex:74: Mobilizon.Web.Upload.store/2
mobilizon_1 | (mobilizon 1.0.0) lib/federation/activity_pub/utils.ex:342: Mobilizon.Federation.ActivityPub.Utils.make_picture_data/2
mobilizon_1 | (mobilizon 1.0.0) lib/graphql/api/events.ex:58: Mobilizon.GraphQL.API.Events.process_picture/2
mobilizon_1 | (elixir 1.11.2) lib/map.ex:622: Map.update/4
mobilizon_1 | (mobilizon 1.0.0) lib/graphql/api/events.ex:34: Mobilizon.GraphQL.API.Events.update_event/2
mobilizon_1 | (mobilizon 1.0.0) lib/graphql/resolvers/event.ex:234: Mobilizon.GraphQL.Resolvers.Event.update_event/3
mobilizon_1 | 13:35:11.682 [info] CONNECTED TO Mobilizon.Web.GraphQLSocket in 8ms
mobilizon_1 | Transport: :websocket
mobilizon_1 | Serializer: Phoenix.Socket.V2.JSONSerializer
mobilizon_1 | Parameters: %{"token" => "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJtb2JpbGl6b24iLCJleHAiOjE2MDczNDc4MTAsImlhdCI6MTYwNDkyODYxMCwiaXNzIjoibW9iaWxpem9uIiwianRpIjoiMDAyNDJiOTItZDEzYS00Nzg4LWFmNjAtMmM0NGM4MmFlOWI2IiwibmJmIjoxNjA0OTI4NjA5LCJzdWIiOiJVc2VyOjEiLCJ0eXAiOiJhY2Nlc3MifQ.dKjR1uAG9Y9zJuapX9kL21gCGQXJwlpitIrPGurPOAODyAt5GfegOSIN-6ZMKgFRVTs8JmOE2f8ZjcIlWfyOTg", "vsn" => "2.0.0"}
mobilizon_1 | 13:36:11.710 [info] CONNECTED TO Mobilizon.Web.GraphQLSocket in 3ms
mobilizon_1 | Transport: :websocket
mobilizon_1 | Serializer: Phoenix.Socket.V2.JSONSerializer
mobilizon_1 | Parameters: %{"token" => "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJtb2JpbGl6b24iLCJleHAiOjE2MDczNDc4MTAsImlhdCI6MTYwNDkyODYxMCwiaXNzIjoibW9iaWxpem9uIiwianRpIjoiMDAyNDJiOTItZDEzYS00Nzg4LWFmNjAtMmM0NGM4MmFlOWI2IiwibmJmIjoxNjA0OTI4NjA5LCJzdWIiOiJVc2VyOjEiLCJ0eXAiOiJhY2Nlc3MifQ.dKjR1uAG9Y9zJuapX9kL21gCGQXJwlpitIrPGurPOAODyAt5GfegOSIN-6ZMKgFRVTs8JmOE2f8ZjcIlWfyOTg", "vsn" => "2.0.0"}