Files
infra/ansible/roles/lxc_docker_host
DmitryandClaude Sonnet 5 e24b75534e feat: decommission memoir-bot (CT 142)
Service was unused. Live steps (revoke SecondBrain deploy key, drop the Uptime
Kuma monitor, pct stop 142) were done 2026-09-02; pct destroy is deliberately
deferred a week.

- delete playbooks/pve-memoir-bot.yml.
- hosts.yml: drop the memoir-bot host and its monitoring_exporters entry.
- roles/monitoring_server/templates/prometheus.yml.j2: drop 192.168.1.26 target.
- roles/uptime_kuma/defaults: drop 192.168.1.26 from no_proxy.
- roles/lxc_docker_host/defaults: drop the memoir-bot extra-packages comment.

The registry entry, the ssh_config Host block and the status.yml unit list are
removed in the commits that also carry OpenTofu-migration / quorum changes to
those files.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012uoq5AVK8mkBgg83Mq6o5V
2026-09-03 07:04:45 +03:00
..

lxc_docker_host

Приводит непривилегированный Proxmox LXC в состояние «здесь можно запускать Docker»: пакеты, проверка /dev/fuse, storage-driver: fuse-overlayfs, запуск демона и базовый UFW.

Роль вынесена из повторяющихся блоков playbooks/pve-*.yml (gitea, vaultwarden, mihomo, adguard, memoir-bot, docker-test, grimmory, hermes-ai) — суммарно около 350 строк копипасты.

Что делает

  1. Ставит ca-certificates, curl, docker.io, fuse-overlayfs (+ lxc_docker_host_extra_packages, ufw при управлении фаерволом).
  2. stat + assert на /dev/fuse: без символьного устройства fuse-overlayfs не работает, и Docker молча деградирует до vfs. Сообщение об ошибке подсказывает, какие строки добавить в /etc/pve/lxc/<vmid>.conf на узле PVE.
  3. Пишет /etc/docker/daemon.json со storage-driver: fuse-overlayfs.
  4. systemd: dockerenabled: true, restarted при смене daemon.json, иначе started.
  5. UFW: SSH из homelab_lan_cidr и openvpn_network_cidr, node-exporter 9100/tcp с хоста мониторинга (192.168.1.30), произвольные порты сервиса из lxc_docker_host_ufw_service_rules, затем policy deny incoming. Разрешающие правила ставятся ДО включения политики — иначе прогон обрывает собственную SSH-сессию.
  6. Проверяет docker info --format '{{.Driver}}' и падает при расхождении.

Переменные

Полный список с комментариями — в defaults/main.yml. Ключевые:

Переменная По умолчанию Назначение
lxc_docker_host_extra_packages [] доп. пакеты сервиса
lxc_docker_host_require_fuse true проверять /dev/fuse
lxc_docker_host_storage_driver fuse-overlayfs драйвер хранилища
lxc_docker_host_manage_ufw true трогать ли UFW вообще
lxc_docker_host_ssh_sources LAN + OpenVPN откуда разрешён SSH
lxc_docker_host_allow_node_exporter true 9100 с хоста мониторинга
lxc_docker_host_ufw_service_rules [] порты сервиса
lxc_docker_host_ufw_enable true включать deny incoming
lxc_docker_host_verify_storage_driver true финальная проверка

Пример: как выглядела бы подготовка хоста Grimmory

- name: Prepare the Grimmory Docker host
  hosts: grimmory
  gather_facts: true
  vars:
    ansible_become: false
  roles:
    - role: lxc_docker_host
      lxc_docker_host_extra_packages:
        - mariadb-client
        - openssl
      lxc_docker_host_install_node_exporter: true
      lxc_docker_host_ufw_service_rules:
        - port: "{{ homelab_services.grimmory.ports[0].port }}"
          proto: tcp
          comment: Grimmory HTTP
          sources:
            - "{{ homelab_lan_cidr }}"
            - "{{ openvpn_network_cidr }}"

Эти 12 строк заменяют 86 строк из playbooks/pve-grimmory.yml.

Чего роль НЕ делает

  • Не создаёт LXC и не правит /etc/pve/lxc/<vmid>.conf — это роль pve_lxc и соответствующий pve-*.yml. Роль только проверяет результат.
  • Не публикует порты Docker в обход UFW. Помните: -p в Docker обходит UFW, поэтому для публикуемых портов нужны правила в цепочке DOCKER-USER (см. grimmory-docker-firewall в playbooks/pve-grimmory.yml).
  • Не ставит node-exporter по умолчанию — этим занимается monitoring_exporter.

Handlers

Их нет намеренно. Docker перезапускается прямо в задаче через state: restarted if changed else started: handler отработал бы в конце play, уже после того как compose-стек стартовал на старом драйвере хранилища.