家で使っているDocker

# コンセプト

リモートワークにて、家にいる時間が大分長くなりました。

MTGも多いので、ロボット掃除機の停止、温度の変更などを簡単に、すぐ、できるようにしたいです。

スマートな電化製品やパソコンが増えてきました。デバイスの間のコミュニケーションがないし、それぞれのスマホのアプリで管理しないといけないし、パソコンで管理や参照できないものは多いです。

![Screen Shot 2021-09-24 at 18.21.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2040515/01a09516-905f-a805-d3ad-f90a7da91708.png)

さらに、セキュリティ的に、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です。

![PXL_20210419_081249053.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2040515/bf990b17-dcf0-ad00-f6c9-0d45f562c3ab.jpeg)


## 構築

下記になります。超簡単です。

```
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使用率で平気だと確認しました。

![Screen Shot 2021-04-19 at 16.57.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2040515/39421946-0fdf-4480-58fb-e1b5f33bc90a.png)



Asusのルーターにサーバーのlocal IPを定義します。

![Screen Shot 2021-04-19 at 17.46.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2040515/43249c02-6ec7-6b47-f660-57aaab27e50c.png)


# 設定


## Home Assistant

Home Assistantで、存在しているIntegrationを追加して、簡単に設定することができます。IntegrationsがEntitiesで単体機能を提供します。
例えば、AdGuard HomeというIntegrationが停止機能、それぞれのメトリックのEntitiesを提供します。

![Screen Shot 2021-04-19 at 19.28.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2040515/0107e902-4fbf-0198-04b1-fecae61c6fc5.png)

## Adguard

Adguard Homeで、DNSを定義して、色々フィルターをチェックして、完了です。

![Screen Shot 2021-04-19 at 19.32.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2040515/ef49b1c2-69f0-c7aa-b992-b6127de52052.png)

## NGINX

ただの自作のhtmlで、各アプリのアクセスをOne Clickでできるようにしています。

![Screen Shot 2021-09-24 at 19.03.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2040515/fa177d49-7d7b-ac13-f038-d094a105833f.png)


# 結果

## More secure

Wifiにつながる機械がすべて、下記のDNSのリクエストが下記になります。
機械がただのDNSのリクエストを行う → リクエストがRouterに行く → サーバーに行く → AdguardのDockerに行く → DNS over HTTPSで、安全的に、最高のスピードのDNSのCloudFlareにIPを取得する

そして、malware、trackingのリクエストがなくしてあります。8.09%です！

![Screen Shot 2021-04-19 at 17.52.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2040515/dced092a-1763-cdba-c52b-c795342d3e6d.png)

## Smarter

ブラウザで色々運用できています。Air PurifierとはLevoitのHEPAフィルターです。上記のAdguardも管理できています。インターネットの状況がわかります。
Chromecast対応も可能です。
そして、なによりも、「プリンターがつけてたっけ？」という問題がなくなりました。Brotherプリンターが全くスマートではないけど、なんとなくステータスが取られています。

![Screen Shot 2021-04-19 at 17.54.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2040515/1c262fc4-3dea-1bb4-d31b-16f6123d0557.png)

スマホ対応も可能です。

掃除機、コンポ、エアコンの設定が可能になりました。

![Screen Shot 2021-09-24 at 19.07.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2040515/b3a34bd2-e341-ed02-aca7-4389bc9871d9.png)

## Future

家の時間が長いので、ベランダに植木や花を購入していますが、植物に水をやることを自動化したいです。
Raspberry piで、センサーを使って、ポンプでやって、homeassistantに追加します！