getumbrel / umbrel-apps

The official app repository of the Umbrel App Store. Submit apps and updates here. Learn how → https://github.com/getumbrel/umbrel-apps#readme
https://apps.umbrel.com
517 stars 381 forks source link

Add gladys assistant #1044

Open cicoub13 opened 5 months ago

cicoub13 commented 5 months ago

App Submission

Gladys Assistant

https://gladysassistant.com/

https://github.com/gladysassistant/gladys

256x256 SVG icon

https://gladysassistant.com/fr/img/logo.svg

Gallery images

https://github.com/getumbrel/umbrel-apps/files/14981508/umbrel_gladys_screenshot_design.zip

I have tested my app on:

Pierre-Gilles commented 5 months ago

@cicoub13 Here are 3 screenshots (1440/900px as you asked)

umbrel_gladys_screenshot_design.zip

I've put all screenshots in English as Umbrel community is mainly international

nmfretz commented 5 months ago

Thanks for submitting Gladys Assistant @cicoub13! Stoked to try this out. I'll be able to review late this week. Thanks for your patience.

cicoub13 commented 5 months ago

I wanted to test in real device (RPI4 with SSD + Umbrel OS 1.1).

I'm facing an issue where dockers are not able to contact localhost ping localhost from Gladys container returns ping: bad address 'localhost'

highghlow commented 5 months ago

I have tried to ttest the app on my Umbrel 0.5.4 device and I get this error during installation:

The Compose file '/home/umbrel/umbrel/app-data/gladys-assistant/docker-compose.yml' is invalid because:
Unsupported config option for services.web: 'cgroup'

I guess it is an option that was added in docker-compose v2, which is only present in Umbrel 1.0.

cicoub13 commented 5 months ago

I guess it is an option that was added in docker-compose v2, which is only present in Umbrel 1.0.

I've targeted only Umbrel OS 1.X (as it's the default documentation). Do I need to make it compatible with previous versions ?

highghlow commented 4 months ago

I've targeted only Umbrel OS 1.X (as it's the default documentation). Do I need to make it compatible with previous versions ?

Since Umbrel v1 is now available on custom hardware installs, no.

nmfretz commented 4 months ago

Taking a look at this now @cicoub13. And thanks for diving into this @highghlow, much appreciated.

nmfretz commented 4 months ago

@cicoub13 @Pierre-Gilles, thanks very much for outlining the requirement for binding the docker daemon socket:

For the Docker daemon binding, it's needed from our side to create, restart other containers when a user adds an integration like Zigbee2Mqtt / MQTT / Node-Red. Gladys will automatically pull, configure and start a new container We try to be as smooth for the users but still managed integrations cleanly by using docker each time it's needed.

We looked into this, and binding the host's docker daemon socket is incompatible with umbrelOS's current architecture, unfortunately. Even if we made the security tradeoff for better app compatibility, mounting the host Docker socket will end up breaking things.

Here's the conflicting code:

We essentially do a Docker cleanup on boot so that Docker is always in a clean state initially, even if something didn't shut down properly in the last boot.

  1. https://github.com/getumbrel/umbrel/blob/5a042334e36e65128058f512c29e7af422f4be0c/packages/umbreld/source/index.ts#L147-L148
  2. https://github.com/getumbrel/umbrel/blob/5a042334e36e65128058f512c29e7af422f4be0c/packages/umbreld/source/modules/apps/apps.ts#L28-L52

If an app has control of the main Docker daemon and can do whatever it wants, then any containers that it sets to run on boot will trigger the logic in the code linked above every single boot. This will have two consequences: 1) any containers that were brought up will be destroyed 2) the entire umbrelOS startup will be delayed while cleanup is happening.

There are a few potential workarounds we can try to get around this if you'd consider trying them:

Option 1:

Add a Docker in Docker (DinD) container alongside Gladys, and have Gladys mount the DinD docker socket. This is effectively what we've done with the Portainer app here: https://github.com/getumbrel/umbrel-apps/blob/master/portainer/docker-compose.yml

Option 2:

Gladys could add the existing Portainer app from the app store as a dependency (or a new Docker app instead) and use that socket

Option 3:

Install Docker inside the Gladys image

Let me know if any of these sound okay to you and I can help orchestrate.