ReCoder (recoder) wrote,
ReCoder
recoder

  • Mood:

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

Продолжаю настройку домашнего сервера. Хотелось научиться запускать на нём небольшие домашние 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?

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

Tags: home-server, techno-fetish
Subscribe

Posts from This Journal “home-server” Tag

  • Игровой сервер

    Как известно, программист - это такой работник умственного труда, который на работе старается спрограммировать всё побыстрее, чтобы наконец…

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

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments