Files
pet-project-server/roles/owner
av c5217607b1
Linting / YAML Lint (push) Canceled after 0s
Linting / Ansible Lint (push) Canceled after 0s
owner: группа docker убрана у сервисных пользователей
- 20 приложений её не получают: контейнерами рулит ansible от root, а
  членство в группе docker равносильно root на хосте
- у gitea, miniflux и outline группа осталась — их backup.sh дампит базу
  через docker compose exec из-под самого приложения
- задача service-users-docker-group закрыта, остаток вынесен в новую
  backup-dump-without-docker-group
2026-08-22 19:40:57 +03:00
..

owner

Заводит системного пользователя и группу под одно приложение: фиксированные uid/gid, ssh-ключи и переменные окружения в ~/.env.

Один сервис — один пользователь: контейнеры приложения работают от его uid/gid, и файлы в base_dir принадлежат ему же. Роль вызывается первой задачей почти каждого playbook-<app>.yml.

Что делает

  1. Группа и пользователь. Создаёт группу owner_group с owner_gid и пользователя owner_name с owner_uid и шеллом /bin/bash. Номера задаёт плейбук приложения (соглашение по нумерации — в AGENTS.md).
  2. SSH-ключи. Прописывает owner_ssh_keys в authorized_keys.
  3. Переменные окружения. Рендерит ~/.env из owner_env плюс USER_UID и USER_GID — их подставляют docker-compose шаблоны приложений. В .bashrc добавляет строку, подгружающую ~/.env целиком, и вычищает старые построчные export-ы, оставшиеся от прежней схемы.

Результат для плейбука

Роль регистрирует owner_create_result — результат модуля user. Плейбуки и compose-шаблоны берут оттуда owner_create_result.uid и owner_create_result.group (это gid) для user: в docker-compose.

Переменные

Полный список и значения по умолчанию — в defaults/main.yml.

Переменная Обязательная Описание
owner_name да Имя пользователя; по умолчанию оно же имя группы
owner_uid да Uid пользователя
owner_group нет Имя группы, по умолчанию owner_name
owner_gid нет Gid группы, по умолчанию owner_uid
owner_extra_groups нет Дополнительные группы; по умолчанию пусто
owner_ssh_keys нет Список публичных ключей для authorized_keys
owner_env нет Словарь переменных окружения, попадающих в ~/.env

Про группу docker

Членство в группе docker равносильно root на хосте (docker run -v /:/host), поэтому сервисным пользователям её не выдаём: контейнерами рулит Ansible от root. Исключение — приложения, чей backup.sh дампит базу через docker compose exec: оркестратор бэкапов запускает такие скрипты от имени самого приложения. См. docs/backlog/backup-dump-without-docker-group.md.

Пример использования

- name: "Create user and environment"
  ansible.builtin.import_role:
    name: owner
  vars:
    owner_name: "{{ app_user }}"
    owner_uid: "{{ app_owner_uid }}"
    owner_gid: "{{ app_owner_gid }}"