일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- cluster
- esp32
- 코스피
- 매터
- ConnectedHomeIP
- Python
- 힐스테이트 광교산
- 국내주식
- 월패드
- 파이썬
- 홈네트워크
- RS-485
- 미국주식
- 티스토리챌린지
- Apple
- Bestin
- SK텔레콤
- 현대통신
- raspberry pi
- Espressif
- 배당
- 오블완
- Home Assistant
- homebridge
- matter
- MQTT
- 해외주식
- 나스닥
- 공모주
- 애플
- Today
- Total
YOGYUI
라즈베리파이 - Home Assistant 컨테이너 설치하기 본문
Install Home Assistant Container on Raspberry Pi (Docker)
Home Assistant OS 상에서 내가 구현한 Python 기반 Bestin 홈네트워크 스크립트를 구동하는게 조금 복잡한 감이 있어서, 기존 OS(Raspbian)에 Home Assistant 컨테이너를 설치해서 구축하는 방법도 알아봤다
(일단 깃헙 저장소 관리부터 까다롭더라 ㅎㅎ...)
1. Docker 설치
컨테이너 플랫폼으로는 Docker를 설치해줘야 한다 (docker, docker-compose 설치)
라즈베리파이에 설치하는 방법은 다음 링크 참고
터미널에서 다음 명령어 입력해서 제대로 설치되었는지 확인
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 애드온도 존재한다..)
[참고]
'홈네트워크(IoT) > 일반' 카테고리의 다른 글
Let's Encrypt로 발급받은 SSL 인증서 갱신하기 (2) | 2022.05.28 |
---|---|
ipTime 공유기 시스템에서 SSL 인증서 발급하기 (Let's Encrypt) (0) | 2022.02.20 |
라즈베리파이 - Home Assistant OS 설치하기 (0) | 2022.02.17 |
Apple 홈킷 - 외부 대기오염(Air-quality) 센서 추가하기 (0) | 2022.01.14 |
라즈베리파이로 Apple HomeKit 카메라 만들기 (Homebridge) (0) | 2021.08.04 |