Giter VIP home page Giter VIP logo

hassio-compose's Introduction

Hass.io with docker-compose

This is a simple docker compose file to run a full Hass.io system using docker-compose. The motivation for doing so is to avoid having to install additional packages on the host system. Also, in order to simplify installation on plain container OSes, like Container OS or RancherOS. It comes with a few limitations however, make sure to read about them below.

Caveats and limitations

Nothing is perfect, so here are few general things you need to know:

  • Currently only for x86_64 hosts (based on qemux86-64-homeassistant)
  • AppArmor not supported (maybe later)
  • You will get an error regarding rauc during startup (you can ignore it)
  • Since HassOS is not used, upgrade of OS is not supported (related to point above)

The supervisor in particular has a few quriks:

  • As it launches containers dynamically (e.g. homeassistant and all the addons), docker-compose will not be aware of these containers and cannot mange them them (e.g. stop or remove them)
  • It is designed to run on a system where no one can mess with docker. It will restart containers that crash, but if a container is manually stopped or removed (whilst the supervisor is running), it will treat that as a non-error and do nothing. So if you fiddle with the containers, you are on your down!
  • It keeps track of the last system boot. So if you restart only the supervisor, it will realize that and skip doing things (like re-creating containers). I found this to be a bit annoying, so the last boot tag is reset every time the supervisor is restarted. This makes sure that containers are re-created properly with the sacrifice of a tad slower startup time and maybe a few warnings about containers already running (that can be safely ignored). Just be aware of this.

Other things, like installing addons, upgrading Home Assistant and dealing with snapshots works correctly though ๐Ÿ˜Š

Installation

  1. Install docker-compose according to your operating system, e.g. apt-get or pip install docker-compose in a virtual environment.

  2. Clone this repository:

$ git clone https://github.com/postlund/hassio-compose.git
  1. Create a .env file with SUPERVISOR_SHARE pointing to the directory where you want to store all configuration data. THIS MUST BE AN ABSOLUTE PATH!!!!
$ cd hassio-compose
$ echo "SUPERVISOR_SHARE=/home/$USER/hassio-config" > .env
  1. Start Hass.io using docker-compose:
$ docker-compose up
Recreating hassio_supervisor ... done
Attaching to hassio_supervisor
hassio_supervisor | Resetting last boot...
hassio_supervisor | Starting hassio...
hassio_supervisor | 19-05-02 14:29:00 INFO (MainThread) [__main__] Initialize Hass.io setup
hassio_supervisor | 19-05-02 14:29:00 INFO (MainThread) [__main__] Setup HassIO
hassio_supervisor | 19-05-02 14:29:00 INFO (SyncWorker_0) [hassio.docker.supervisor] Attach to Supervisor homeassistant/amd64-hassio-supervisor with version 162
hassio_supervisor | 19-05-02 14:29:00 INFO (SyncWorker_0) [hassio.docker.supervisor] Connect Supervisor to Hass.io Network
hassio_supervisor | 19-05-02 14:29:00 INFO (MainThread) [hassio.utils.gdbus] Introspect org.freedesktop.systemd1 on /org/freedesktop/systemd1
hassio_supervisor | 19-05-02 14:29:00 INFO (MainThread) [hassio.utils.gdbus] Connect to dbus: org.freedesktop.systemd1 - /org/freedesktop/systemd1
hassio_supervisor | 19-05-02 14:29:00 INFO (MainThread) [hassio.utils.gdbus] Introspect org.freedesktop.hostname1 on /org/freedesktop/hostname1
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.utils.gdbus] Connect to dbus: org.freedesktop.hostname1 - /org/freedesktop/hostname1
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.utils.gdbus] Introspect de.pengutronix.rauc on /
hassio_supervisor | 19-05-02 14:29:01 ERROR (MainThread) [hassio.utils.gdbus] DBus return error: b'Error: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name de.pengutronix.rauc was not provided by any .service files\n'
hassio_supervisor | 19-05-02 14:29:01 WARNING (MainThread) [hassio.dbus.rauc] Can't connect to rauc
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.host.info] Update local host information
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.utils.gdbus] Call org.freedesktop.DBus.Properties.GetAll on /org/freedesktop/hostname1
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.host.services] Update service information
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.utils.gdbus] Call org.freedesktop.systemd1.Manager.ListUnits on /org/freedesktop/systemd1
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.host.apparmor] Load AppArmor Profiles: set()
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.host.apparmor] AppArmor is not enabled on host
hassio_supervisor | 19-05-02 14:29:01 INFO (SyncWorker_2) [hassio.docker.interface] Attach to homeassistant/qemux86-64-homeassistant with version 0.92.1
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.addons.git] Load add-on /data/addons/core repository
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.addons.git] Load add-on /data/addons/git/a0d7b954 repository
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.addons] Load add-ons: 57 all - 57 new - 0 remove
hassio_supervisor | 19-05-02 14:29:01 INFO (MainThread) [hassio.updater] Fetch update data from https://s3.amazonaws.com/hassio-version/stable.json
hassio_supervisor | 19-05-02 14:29:02 INFO (MainThread) [hassio.snapshots] Found 0 snapshot files
hassio_supervisor | 19-05-02 14:29:02 INFO (MainThread) [hassio.discovery] Load 0 messages
hassio_supervisor | 19-05-02 14:29:02 INFO (MainThread) [hassio.ingress] Load 0 ingress session
hassio_supervisor | 19-05-02 14:29:02 INFO (MainThread) [__main__] Run Hass.io
hassio_supervisor | 19-05-02 14:29:02 INFO (MainThread) [hassio.misc.dns] Start DNS port forwarding for host add-ons
hassio_supervisor | 19-05-02 14:29:02 INFO (MainThread) [hassio.api] Start API on 172.30.32.2
hassio_supervisor | 19-05-02 14:29:02 INFO (MainThread) [hassio.addons] Startup initialize run 0 add-ons
hassio_supervisor | 19-05-02 14:29:02 INFO (MainThread) [hassio.addons] Startup system run 0 add-ons
hassio_supervisor | 19-05-02 14:29:02 INFO (MainThread) [hassio.addons] Startup services run 0 add-ons
hassio_supervisor | 19-05-02 14:29:02 INFO (SyncWorker_2) [hassio.docker.interface] Restart homeassistant/qemux86-64-homeassistant
hassio_supervisor | 19-05-02 14:29:17 INFO (MainThread) [hassio.homeassistant] Detect a running Home Assistant instance
hassio_supervisor | 19-05-02 14:29:17 INFO (MainThread) [hassio.addons] Startup application run 0 add-ons
hassio_supervisor | 19-05-02 14:29:17 INFO (MainThread) [hassio.tasks] All core tasks are scheduled
hassio_supervisor | 19-05-02 14:29:17 INFO (MainThread) [hassio.core] Hass.io is up and running
  1. Integrate with however you run your docker instances (out of scope)

Tips & tricks

Stopping Containers

To stop the supervisor, just run:

$ docker-compose down

This will not stop Home Assistant or any addons. To do that, run:

$ docker stop homeassistant
$ docker ps | grep " addon_" | cut -f 1 -d ' ' | xargs docker stop

Removing Containers

To remove the containers (stop them first), just do:

$ docker-compose rm
$ docker ps | grep " addon_" | cut -f 1 -d ' ' | xargs docker rm

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.