March 22nd, 2021

masked, myself

Не только игровой сервер

Продолжаю настройку домашнего сервера. Хотелось научиться запускать на нём небольшие домашние self-hosted сервисы.

Перво-наперво я себе поставил KeyBase, в котором есть встроенный приватный git, где удобно хранить конфигурацию. Также он менеджер ключей, чатик, и крипто-кошелёк, кто ещё там - стучитесь, законнектимся.

Установил официальный Docker for Windows. На удивление он оказался вполне неплох: на месте и GUI и командная строка и даже docker-compose, которым я и воспользовался.

Несколько лет назад я открыл для себя удивительную софтинку Traefik - хитрую HTTP-прокси, которая умеет интегрироваться с Docker'ом, позволяя на лету конфигурировать виртуальные хосты из запущенных docker-сервисов. Через неё одно удовольствие на лету поднимать/опускать разные микросервисы.

Каждому микросервису выдам свой под-домен. Публичные сервисы будут жить на настоящих под-доменах, а домашние сервисы будут жить в доменах *.home, которыми будет управлять PiHole. Заодно - порежу нафик все шпионские и рекламные домены через PiHole.

Далее пригодился листочек с нарисованной схемой: по одной крышей мы поднимем Traefik как reverse proxy, PiHole как локальный DNS сервер, и Portainer для управления контейнерами. Заводим такой магический "docker-compose.yaml":

version: '3.8'

networks:
  whisper: { internal: true }
  shout:   { }

services:
  traefik:
    image: traefik:v2.3
    container_name: traefik
    command:
      - "--api"
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.http.address=:80"
      - "--entrypoints.https.address=:443"
    networks: [shout, whisper]
    ports:
      - "80:80"
      - "443:443"
    labels:
      traefik.enable: true
      traefik.http.routers.dashboard.rule: "Host(`traefik.nexus.home`) || Host(`traefik.192.168.1.3.xip.io`)"
      traefik.http.routers.dashboard.service: "api@internal"
      traefik.http.routers.http-catchall.rule: "hostregexp(`{host:.+\\.rocks}`)"
      traefik.http.routers.http-catchall.entrypoints: http
      traefik.http.routers.http-catchall.middlewares: redirect-to-https
      traefik.http.middlewares.redirect-to-https.redirectscheme.scheme: https
      traefik.http.middlewares.redirect-to-https.redirectscheme.permanent: true
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  pihole:
    image: pihole/pihole:latest
    container_name: pihole
    networks: [shout]
    ports:
      - '53:53/tcp'
      - '53:53/udp'
      - '8053:80'
    volumes:
      - D:/homelab/etc/pihole:/etc/pihole/
      - D:/homelab/etc/dnsmasq.d:/etc/dnsmasq.d/
      - D:/homelab/var/log/:/var/log/
      - D:/homelab/var/log/lighttpd/:/var/log/lighttpd/
    dns:
        - 1.1.1.1
        - 1.0.0.1
    environment:
      PROXY_LOCATION: pihole
      TZ: 'America/New_York'
    restart: unless-stopped
    labels:
       traefik.enable: true
       traefik.port: 80
       traefik.http.routers.pihole.rule: "Host(`pihole.nexus.home`) || Host(`pihole.192.168.1.3.xip.io`)"
       traefik.docker.network: shout
       traefik.http.services.pihole.loadbalancer.server.port: 80

  portainer:
    image: portainer/portainer
    container_name: portainer
    labels:
      traefik.enable: true
      traefik.http.services.portainer.loadbalancer.server.port: 9000
      traefik.http.routers.portainer.rule: "Host(`portainer.nexus.home`) || Host(`portainer.192.168.1.3.xip.io`)"
      traefik.http.routers.portainer.entrypoints: http
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    networks: [whisper]

Осталась одна тонкость - в .../etc/dnsmasq.d/ кладём конфигурационный файлик с address=/.nexus.home/192.168.1.3. И можно всё поднимать!

Проверяем PiHole через оставленную дырочку по адресу http://localhost:8053/admin и убеждаемся что всё работает. Настраиваем PiHole по вкусу. И устанавливаем `192.168.1.3` как DNS-сервер на локальном сетевом адаптере.

Теперь, когда у нас есть DNS-сервер и обратный прокси - можно смотреть локальные сайты на http://traefik.nexus.home и http://portainer.nexus.home. А если всё работает - выставить наш `192.168.1.3` для DNS на роутере и наслаждаться отсутствием рекламы и доступом к сервисам на *.nexus.home. Правда надо бы не забыть законопатить доступ к сторонним DNS на роутере. А может быть, даже настроить нормальный DoH для домашней сети.

А на досуге надо будет повыбирать DNS провайдера. А выбор там есть: Couldflare c 1.1.1.1 и 1.0.0.1 (которые вроде бы самые шустрые), Google с 8.8.8.8 и 8.8.4.4, Quad9 c 9.9.9.9 и 149.112.112.112, Yandex для любителей посконного с 77.88.8.8 и 77.88.8.1, или платный NextDNS?

Итак, фундамент для домашних сервисов заложен. Можно удовлеворённо выпить кофе и обдумать дальнейшую стратегию.

promo recoder august 1, 2018 12:09 36
Buy for 100 tokens
Не так давно Фейсбук научил меня ещё одной классификации людей, в дополнение к стратегам и тактикам, интерналистам и экстерналистам, и разным морально-политическим приверженцам. Впервые эта классификация описана ещё двадцать лет назад Картером и Сэнджером в книге The Programmer's Stone…