добавлен goatcounter для веб-аналитики
Linting / YAML Lint (push) Canceled after 0s
Linting / Ansible Lint (push) Canceled after 0s

- один инстанс на два сайта, gc-main и gc-photo: нужный выбирается по Host
- домены ведутся в goatcounter_sites (group_vars), оттуда же рендерятся имена в Caddyfile
- сайты и первый пользователь заводятся идемпотентно, креды из vault
This commit is contained in:
av
2026-08-21 22:06:06 +03:00
parent af14732652
commit 889c8a565e
8 changed files with 499 additions and 231 deletions
@@ -0,0 +1,45 @@
# GoatCounter — веб-аналитика (github.com/arp242/goatcounter).
# See versions: https://hub.docker.com/r/arp242/goatcounter/tags
#
# Образ ходит от собственного пользователя goatcounter (uid 1000 из alpine),
# поэтому подменяем его на системного владельца смонтированного каталога.
# Бинарник собран с osusergo/netgo и записи в /etc/passwd не требует.
#
# CMD образа — `serve -automigrate`, его не переопределяем: миграции должны
# накатываться сами при обновлении версии. Остальные флаги идут через
# GOATCOUNTER_<FLAG> (дефис в имени флага -> подчёркивание). Неизвестная
# переменная с этим префиксом валит старт, так что новые добавлять только
# сверяясь с `goatcounter help serve`.
#
# Рабочая директория в образе — /home/goatcounter, БД по умолчанию лежит в
# ./goatcounter-data/db.sqlite3, то есть внутри смонтированного data.
services:
goatcounter_app:
image: arp242/goatcounter:2.7.0
container_name: goatcounter_app
restart: unless-stopped
user: "{{ app_owner_uid }}:{{ app_owner_gid }}"
networks:
- "web_proxy_network"
volumes:
- "{{ data_dir }}:/home/goatcounter/goatcounter-data"
environment:
# TLS терминирует Caddy. `http` — не поднимать собственный TLS и не
# ходить за ACME-сертификатом; https goatcounter определяет по
# X-Forwarded-Proto, IP клиента — по X-Forwarded-For (их шлёт Caddy).
- GOATCOUNTER_TLS=http
- GOATCOUNTER_LISTEN=:8080
# Почта (Yandex Cloud Postbox, те же секреты, что у outline/wakapi):
# сброс пароля и еженедельные отчёты. STARTTLS — схема smtp://, а не
# smtps://. Экранированные логин/пароль приходят из плейбука.
- GOATCOUNTER_SMTP=smtp://{{ postbox_user_enc }}:{{ postbox_pass_enc }}@{{ postbox_host }}:{{ postbox_port }}
# Без явного -email-from goatcounter зовёт user.Current() и падает,
# потому что подменённого uid нет в /etc/passwd образа.
- GOATCOUNTER_EMAIL_FROM=goatcounter@vakhrushev.me
networks:
web_proxy_network:
external: true