# 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_ (дефис в имени флага -> подчёркивание). Неизвестная # переменная с этим префиксом валит старт, так что новые добавлять только # сверяясь с `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