fix(infra): harden grafana permissions and document recovery

- Why:
  - students hit permission denied after pull and grafana restart-loop with readonly db
- What:
  - run grafana as default non-root user
  - mount provisioning directory as read-only
  - add troubleshooting for git permission issues and grafana volume reset
  - normalize file modes for data jsonl and docs/DE-task.md to 100644
- Check:
  - docker compose config
  - docker compose up -d grafana
  - curl -u admin:admin http://localhost:3000/api/health
This commit is contained in:
2026-02-08 21:38:23 +03:00
parent ae593fd08c
commit afdfc98eef
7 changed files with 26 additions and 2 deletions
Executable → Regular
View File
+25
View File
@@ -258,5 +258,30 @@ curl -s -X POST -u admin:admin http://localhost:3000/api/admin/provisioning/aler
## Troubleshooting
- `etl_pipeline` падает с ошибкой схемы: сначала запустить `ddl_init`.
- `git pull` падает с `Permission denied` на `data/*` или `configs/grafana/provisioning/*`:
- Причина: локально есть файлы/каталоги не вашего пользователя (часто после запуска контейнеров с root-пользователем).
- Диагностика:
```bash
ls -ld data configs/grafana/provisioning
ls -l data | head -n 20
```
- Быстрое восстановление:
```bash
# Владелец и права для рабочей копии репозитория
sudo chown -R "$USER:$USER" .
find . -type d -exec chmod u+rwx {} \;
find . -type f -exec chmod u+rw {} \;
```
- После восстановления повторить `git pull --ff-only`.
- Не запускать `git` через `sudo`.
- `grafana` перезапускается с ошибкой `attempt to write a readonly database`:
- Причина: старый `grafana_lib` содержит `grafana.db`, созданный root-пользователем.
- Простой recovery (сбросить только volume Grafana):
```bash
docker compose stop grafana
docker volume ls | grep grafana_lib
docker volume rm <project>_grafana_lib
docker compose up -d grafana
```
- После `docker compose down -v` нужно повторно прогнать: `ddl_init` -> `kafka_load` -> `etl_pipeline`.
- Для демо по умолчанию использовать малый срез данных; полный прогон делать осознанно.