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:
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
+1
-2
@@ -193,14 +193,13 @@ services:
|
|||||||
|
|
||||||
grafana:
|
grafana:
|
||||||
image: grafana/grafana:11.5.2-ubuntu
|
image: grafana/grafana:11.5.2-ubuntu
|
||||||
user: root
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- prometheus
|
- prometheus
|
||||||
ports:
|
ports:
|
||||||
- 3000:3000
|
- 3000:3000
|
||||||
volumes:
|
volumes:
|
||||||
- grafana_lib:/var/lib/grafana
|
- grafana_lib:/var/lib/grafana
|
||||||
- ./configs/grafana/provisioning/:/etc/grafana/provisioning/
|
- ./configs/grafana/provisioning/:/etc/grafana/provisioning/:ro
|
||||||
# container_name: grafana
|
# container_name: grafana
|
||||||
# hostname: grafana
|
# hostname: grafana
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|||||||
Executable → Regular
@@ -258,5 +258,30 @@ curl -s -X POST -u admin:admin http://localhost:3000/api/admin/provisioning/aler
|
|||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
- `etl_pipeline` падает с ошибкой схемы: сначала запустить `ddl_init`.
|
- `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`.
|
- После `docker compose down -v` нужно повторно прогнать: `ddl_init` -> `kafka_load` -> `etl_pipeline`.
|
||||||
- Для демо по умолчанию использовать малый срез данных; полный прогон делать осознанно.
|
- Для демо по умолчанию использовать малый срез данных; полный прогон делать осознанно.
|
||||||
|
|||||||
Reference in New Issue
Block a user