5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

家で使っているDocker

Last updated at Posted at 2021-09-24

コンセプト

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

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

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

Screen Shot 2021-09-24 at 18.21.13.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

構築

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

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

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

Screen Shot 2021-04-19 at 17.46.18.png

設定

Home Assistant

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

Screen Shot 2021-04-19 at 19.28.55.png

Adguard

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

Screen Shot 2021-04-19 at 19.32.58.png

NGINX

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

Screen Shot 2021-09-24 at 19.03.51.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

Smarter

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

Screen Shot 2021-04-19 at 17.54.49.png

スマホ対応も可能です。

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

Screen Shot 2021-09-24 at 19.07.20.png

Future

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

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?