YOGYUI

라즈베리파이 - Home Assistant 컨테이너 설치하기 본문

홈네트워크(IoT)/일반

라즈베리파이 - Home Assistant 컨테이너 설치하기

요겨 2022. 2. 18. 11:13
반응형

Install Home Assistant Container on Raspberry Pi (Docker)

 

Home Assistant OS 상에서 내가 구현한 Python 기반 Bestin 홈네트워크 스크립트를 구동하는게 조금 복잡한 감이 있어서, 기존 OS(Raspbian)에 Home Assistant 컨테이너를 설치해서 구축하는 방법도 알아봤다

(일단 깃헙 저장소 관리부터 까다롭더라 ㅎㅎ...)

1. Docker 설치

컨테이너 플랫폼으로는 Docker를 설치해줘야 한다 (docker, docker-compose 설치)

라즈베리파이에 설치하는 방법은 다음 링크 참고

Raspberry Pi - Docker 설치하기

 

Raspberry Pi - Docker 설치하기

Install Docker on Raspberry Pi (Raspbian OS) 컨테이너(Container) 솔루션 중 가장 널리 사용되는 Docker는 Raspbian에 번들로 포함되어 있지 않아 사용자가 수동으로 설치해줘야 한다 DevOps 플랫폼 중 하나인..

yogyui.tistory.com

 

터미널에서 다음 명령어 입력해서 제대로 설치되었는지 확인

docker version

※ HA 컨테이너 동작 위해서는 docker 버전이 19.03.9 이상이어야 한다!

이미 구버전이 설치되어 있다면 sudo apt-get upgrade 명령어로 업그레이드해준다

 

docker-compose도 제대로 설치되었는지 확인

docker-compose version

2. HA 컨테이너 설치

터미널에서 명령어 한줄로 설치할 수 있다 (설치와 동시에 실행된다)

docker run -d \
  --name homeassistant \
  --privileged \
  --restart=unless-stopped \
  -e TZ=Asia/Seoul \
  -v /home/pi/homeassistant:/config \
  --network=host \
  ghcr.io/home-assistant/home-assistant:stable

한국 외 지역이라면 타임존(TZ)를 적절하게 바꿔주면 된다 (링크)

HA configuration 파일이 존재하는 경로를 바꾸고 싶으면 -v 옵션의 /config 앞에 경로를 지정해주면 된다

(여기서는 /home/pi/homeassistant 경로를 선택)

 

만약 connection refused 에러 발생하면 명령에 앞에 sudo 추가


※ 구버전 제거 후 업그레이드 시

(1) 버전 확인

docker pull ghcr.io/home-assistant/home-assistant:stable

만약 "Image is up to date for ..." 메시지가 나오면 업그레이드할 필요가 없다

(2) 제거

docker stop homeassistant
docker rm homeassistant

(3) 설치 - 설치 명령어 그대로 입력


이제 라즈베리파이에 할당된 IP 주소 (이더넷 혹은 와이파이)에 8123 포트로 외부에서 Home Assistant에 접근할 수 있다 (설치완료!)

HA 설정 파일 (configuration.yaml)은 수동으로 건드릴 일이 매우 많다

앞서 설정한 config 폴더(/home/pi/homeassistant/)를 확인해보자

설정 변경 시 여기 저장된 configuration.yaml 파일을 설정하고 컨테이너를 재시작해주면 된다

3. 컨테이너 자동 재시작 설정

우선 도커 시스템이 자동 시작되도록 터미널에서 다음 명령어 실행

sudo systemctl enable docker

docker compose 설정파일(docker-compose.yml)을 만들어준다 (원하는 경로 아무데나 만들어도 됨)

nano 에디터를 사용해도 되고, OS 상에서 텍스트 에디터를 사용해도 된다

nano docker-compose.yml

설정 파일 내부는 다음과 같이 작성

version: '3'
services:
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - /home/pi/homeassistant:/config
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    privileged: true
    network_mode: host

restart 파라미터가 'unless-stopped'로, 사용자가 임의로 중단하지 않는다면 OS 재부팅 후에도 컨테이너가 자동으로 실행된다

설정 가능한 옵션은 다음 4개가 있다

  • no: Do not automatically restart the container. (the default)
  • on-failure: Restart the container if it exits due to an error, which manifests as a non-zero exit code. Optionally, limit the number of times the Docker daemon attempts to restart the container using the max-retries option.
  • always: Always restart the container if it stops. If it is manually stopped, it is restarted only when Docker daemon restarts or the container itself is manually restarted.
  • unless-stopped: Similar to always, except that when the container is stopped (manually or otherwise), it is not restarted even after Docker daemon restarts.

 

※ 이미 homeassistant 컨테이너를 실행했다면 다음 명령어로 서비스를 지워줘야 한다

docker stop homeassistant
docker rm homeassistant

 

이제 docker-compose.yml 파일이 존재하는 경로상에서 다음 명령어 실행

docker-compose up -d

 

재부팅후에 다음 명령어로 컨테이너가 정상적으로 시작되었는지 확인해보자

docker ps

4. 방화벽 설정

컨테이너로 설치하면 초기에는 HA가 외부 네트워크와 연결이 정상적으로 되지 않는다

Home Assistant가 사용하는 포트 8123에 대해 방화벽 설정 (접근 허용)을 해주자

※ 방화벽 설정이 찝찝한 고급 유저라면 nginx 프록시 설정을 해주면 된다

 

- 방화벽 설정 툴인 ufw 설치

sudo apt-get install ufw

- 8123 tcp 포트 접근 허용(allow) 설정

sudo ufw allow 8123/tcp

- 설정 활성화

sudo ufw enable

- 상태 확인

sudo ufw status verbose

이제 HA에서 외부 인터넷과 문제없이 접속할 수 있다

5. 결론

Home Assistant OS 상에서는 파일 시스템에 접근하거나, 내가 개발한 코드의 깃허브 저장소 clone 및 실행, 외부 USB 디바이스 접근 등을 하려면 플러그인들을 설치해줘야 되는데 상당히 번거롭다

대체 방안으로 기존 코드가 동작하고 있는 라즈베리파이에 docker를 설치한 뒤, HA 컨테이너를 설치하는 방법을 알아보았는데, 도커에 익숙하다면 상당히 쉽고 빠르게 구축을 완료할 수 있다

 

안타깝게도 컨테이너 상에서는 HA의 여러 유용한 플러그인(애드온)들을 활용할 수 없지만, 홈 네트워크의 핵심 기능인 디바이스 제어는 문제없이 할 수 있다 

 

애초에 Home Bridge가 구동되고 있는 기존 환경에 HA도 함께 구축하는 것이 목표였으므로 Bestin 홈네트워크의 안드로이드 기기 연동은 컨테이너 방식으로 진행하기로 결정!

(물론 HA에 Home Bridge 애드온도 존재한다..)

 

[참고]

https://www.home-assistant.io/installation/raspberrypi

https://m.blog.naver.com/simjk98/221983223546

반응형