コンセプト
リモートワークにて、家にいる時間が大分長くなりました。
MTGも多いので、ロボット掃除機の停止、温度の変更などを簡単に、すぐ、できるようにしたいです。
スマートな電化製品やパソコンが増えてきました。デバイスの間のコミュニケーションがないし、それぞれのスマホのアプリで管理しないといけないし、パソコンで管理や参照できないものは多いです。
さらに、セキュリティ的に、DNS over HTTPSを使いたいですが、ルーターやそれぞれの機械が対応できません。
そして、web tracking、malwareなどに関して、ブラウザーごとにadblockをつけているだけです。
概要
Dockerで主にHome AssistantとAdguardでセキュリティを高め、ブラウザですぐ対応できるようにしました。
やり方
アプリ
難しい設定や面倒くさいメンテナンスをしたくないので、下記のアプリのdocker版を使いました。
- Adguard home : DNSフィルタリングでmalwareやtrackingをなくし、DNS over HTTPSができる
- Home assistant : スマートなものの管理ができるだけで良いですけど、スマートではないデバイスの対応も、web APIも、他のアプリとも連携できる
- watchtower : 定期的に他のDockerのバージョンを確認して、バージョンアップをする
仕事で、DBやアプリに限られてDockerを使うのは多い気がします。dockerで何でも設定しやすく、OSのバージョン、アプリのインストール、ライブラリのディフェンシーの問題がないので、どんどん追加して来ました。
- watchtower : 自動的に他のdockerをアップデートする
- miniflux : Feed Reader (休憩で、簡単んに最新情報の一覧が見える)
- nginx : homeassistantを使わずに各アプリを直接操作する
- denon : コンポへリクエストできるコンテナーです。リモコンがなくても停止できる
- goapp : 自分のgoのアプリ
サーバー
格好とスペックがわるいですけど、機械と電気代が安いし、音がしない、gigabit ethernetであり、適当に台にマウントして、テレビ台の中に入れても死なないし、やりたいことに対して、high specです。OSはDebianです。
構築
下記になります。超簡単です。
version: '3'
networks:
docker_network:
services:
nginx:
image: nginx:1.16.0-alpine
container_name: nginx
restart: unless-stopped
networks:
- docker_network
volumes:
- ./nginx/conf/:/etc/nginx/:ro
- ./nginx/html/:/html/
- /etc/localtime:/etc/localtime:ro
ports:
- "80:80"
- "443:443"
depends_on:
- homeassistant
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
ulimits:
nproc: 65535
nofile:
soft: 26677
hard: 46677
adguard:
container_name: adguard
mem_limit: 4g
network_mode: "host"
image: adguard/adguardhome:latest
restart: unless-stopped
volumes:
- ./adguard/workdir:/opt/adguardhome/work
- ./adguard/conf:/opt/adguardhome/conf
- /etc/localtime:/etc/localtime:ro
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
ulimits:
nproc: 65535
nofile:
soft: 26677
hard: 46677
homeassistant:
container_name: homeassistant
hostname: homeassistant
restart: unless-stopped
image: homeassistant/home-assistant:latest
networks:
- docker_network
ports:
- "8123:8123/tcp"
volumes:
- ./homeassistant:/config
- /etc/localtime:/etc/localtime:ro
- ./shared:/shared
- /dev/serial/by-id/:/dev/serial/by-id/
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
ulimits:
nproc: 65535
nofile:
soft: 26677
hard: 46677
denon:
container_name: denon-rest
restart: unless-stopped
build:
context: ./denon-rest-api
dockerfile: ./Dockerfile
ports:
- 8124:8000
environment:
- ADDRESS=192.168.1.17
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
ulimits:
nproc: 65535
nofile:
soft: 26677
hard: 46677
miniflux:
image: miniflux/miniflux:latest
ports:
- "8126:8080"
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
- DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
- ADMIN_USERNAME=admin
- ADMIN_PASSWORD=jemenfouX
- RUN_MIGRATIONS=1
- CREATE_ADMIN=1
db:
restart: unless-stopped
image: postgres:latest
environment:
- POSTGRES_USER=miniflux
- POSTGRES_PASSWORD=secret
volumes:
- miniflux-db:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "miniflux"]
interval: 10s
start_period: 30s
goapp:
image: golang:1.15-alpine
volumes:
- ./go-helper:/go/src/go-with-compose
- /home/franck/.ssh/:/home/franck/.ssh
working_dir: /go/src/go-with-compose
ports:
- "8127:8080"
command: go mod download
command: go run cmd/main.go
restart: unless-stopped
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
environment:
WATCHTOWER_CLEANUP: "true"
WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
volumes:
miniflux-db:
よし、Let's start!
% docker-compose up -d
Starting homeassistant ... done
Starting adguard ... done
Starting watchtower ... done
Starting denon ... done
htopで、サーバーがメモリやCPU使用率で平気だと確認しました。
Asusのルーターにサーバーのlocal IPを定義します。
設定
Home Assistant
Home Assistantで、存在しているIntegrationを追加して、簡単に設定することができます。IntegrationsがEntitiesで単体機能を提供します。
例えば、AdGuard HomeというIntegrationが停止機能、それぞれのメトリックのEntitiesを提供します。
Adguard
Adguard Homeで、DNSを定義して、色々フィルターをチェックして、完了です。
NGINX
ただの自作のhtmlで、各アプリのアクセスをOne Clickでできるようにしています。
結果
More secure
Wifiにつながる機械がすべて、下記のDNSのリクエストが下記になります。
機械がただのDNSのリクエストを行う → リクエストがRouterに行く → サーバーに行く → AdguardのDockerに行く → DNS over HTTPSで、安全的に、最高のスピードのDNSのCloudFlareにIPを取得する
そして、malware、trackingのリクエストがなくしてあります。8.09%です!
Smarter
ブラウザで色々運用できています。Air PurifierとはLevoitのHEPAフィルターです。上記のAdguardも管理できています。インターネットの状況がわかります。
Chromecast対応も可能です。
そして、なによりも、「プリンターがつけてたっけ?」という問題がなくなりました。Brotherプリンターが全くスマートではないけど、なんとなくステータスが取られています。
スマホ対応も可能です。
掃除機、コンポ、エアコンの設定が可能になりました。
Future
家の時間が長いので、ベランダに植木や花を購入していますが、植物に水をやることを自動化したいです。
Raspberry piで、センサーを使って、ポンプでやって、homeassistantに追加します!