---
title: "Installation"
id: "1746"
type: "page"
slug: "install"
published_at: "2026-09-20T21:16:30+00:00"
modified_at: "2026-09-21T01:36:28+00:00"
url: "https://xedant.com/agents/analytics/install"
markdown_url: "https://xedant.com/agents/analytics/install.md"
excerpt: "Xedant Analytics Agent is a self-hosted web application for fast data analysis and visualization. It…"
---

# Installation

[https://xedant.com/agents/analytics/install.md](https://xedant.com/agents/analytics/install.md)

Don’t want to read all this? Just drop a link to [https://xedant.com/agents/analytics/install.md](https://xedant.com/agents/analytics/install.md)
 or to [https://xedant.com/llms.txt](https://xedant.com/llms.txt)
 into any AI chat (Claude, ChatGPT, etc.) and ask it to generate the config files and commands. It will read the docs, ask you a few questions about your setup, and hand you a ready-to-use configuration. Save time — let the model do the reading for you.

 You can also reach me on Telegram — I’m always glad to help. And that’s not just politeness — I genuinely enjoy talking to like-minded people, especially if you love coding as much as I do.

 Xedant Analytics Agent is a self-hosted web application for fast data analysis and visualization. It deploys as a single Docker container (Docker is a tool that packages an app with everything it needs, so it runs the same way on any server), and keeps all permanent data in the `/data` volume. Python for Jupyter Notebooks is already built into the image. Reports are plain JSON files: version them in Git and move them by simply copying.

## Minimum requirements

Any Linux host with Docker is enough. Everything else is already in the image:

- ASP.NET Core 9 runtime — the application’s web server;
- Python 3 + venv + pip — for running Jupyter Notebooks;
- sqlite3 and other file utilities for working with data.

No database server required: report documents live as files in the volume, and data sources (SQLite, PostgreSQL, ClickHouse) connect as needed through the interface.

## Docker Compose

Create a `compose.yml` file and run `docker compose up -d`:

```
services:
  analytics-agent:
    image: xedant/analytics-agent:latest
    container_name: analytics-agent
    ports:
      - "5010:80"
    volumes:
      - analytics-agent-data:/data
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - ASPNETCORE_URLS=http://+:80
      - ANALYTICS_DATA_PATH=/data
      - ANALYTICS_SECRET_KEY=change-me-in-production
      - ANALYTICS_ADMIN_LOGIN=admin
      - ANALYTICS_ADMIN_PASSWORD={sha256-hash-of-your-password}
    restart: unless-stopped
    sysctls:
      fs.inotify.max_user_watches: "524288"
      fs.inotify.max_user_instances: "512"

volumes:
  analytics-agent-data:
```

After launch, the interface is available on port `5010`: `http://localhost:5010`.

The sysctls raise the inotify limits — the file watcher needs them to track changes in report files, so edits are picked up instantly, without a reload. Without these limits, the watcher may miss some changes when there are many documents.

## Environment variables

- **ANALYTICS_ADMIN_LOGIN** — the administrator login (default `admin` from appsettings).
- **ANALYTICS_ADMIN_PASSWORD** — the **SHA-256 hash** of the password, not the password itself. Compute it with `echo -n "your-password" | sha256sum`. On sign-in the app hashes the entered password and compares it with this value.
- **ANALYTICS_SECRET_KEY** — the key that signs JWT tokens (default `default-secret-key-change-in-production` — be sure to replace it in production).
- **ANALYTICS_DATA_PATH** — the data folder (default `/project/data`; inside the container, `/data`).
- **ANALYTICS_BRAND** — brand and interface language: `xedant` (English, the default) or `pastukhov` (Russian).
- **ANALYTICS_LAKEHOUSE_PATH** — the Lakehouse root folder (default `/lakehouse`).
- **ANALYTICS_TEMPLATES_PATH** and **ANALYTICS_TEMPLATES_RU_PATH** — the English and Russian versions of the analysis template library (defaults: `templates` and `templates_ru` next to the project; change them only if you move the library).
- **ANALYTICS_BASE_PATH** — when the app lives not at the domain root but in a subfolder (for example, `/analytics`): a path with a leading slash and no trailing one. The same result can be achieved with a reverse proxy that passes the folder in the `X-Forwarded-Prefix` header.
- **AGENT_API_URL** and **AGENT_API_KEY** — the URL and API key of Xedant Agent for the AI features. Without them the AI buttons are hidden; everything else works.

Without `ANALYTICS_ADMIN_LOGIN` and `ANALYTICS_ADMIN_PASSWORD` set, signing in to the app is impossible. The JWT token lives 90 days (129,600 minutes); the session, 1 hour.

## Data storage

All permanent data lives in the `/data` volume and survives container recreation. The volume is mandatory — without it you will lose your reports and environment settings on the very first `docker compose down`.

- `/data/documents/` — report documents as JSON files;
- `/data/alerting/` — alerting settings: rules, contact points, silences, history;
- `/data/requirements.txt` — Python dependencies for Jupyter Notebooks: seeded on first launch, and you can add your own libraries to it;
- `ANALYTICS_LAKEHOUSE_PATH` — Lakehouse data files: Parquet, SQLite, Markdown.

## First sign-in

Use the login and password set by the `ANALYTICS_ADMIN_LOGIN` and `ANALYTICS_ADMIN_PASSWORD` variables (the variable holds the hash; at sign-in you enter the password itself). After signing in you can immediately change the interface language and theme. The home screen shows the “New document” button and the report catalog.

## Setup after launch

Data sources — SQLite, PostgreSQL and ClickHouse — are connected in the “Data Sources” section of the web interface: creating, connection checks, schema auto-detection. Details in the [Data Sources](/agents/analytics/docs/data-sources)
 section.

AI features are enabled with the `AGENT_API_URL` and `AGENT_API_KEY` variables: the buttons for adding blocks in plain language and “Fix with AI” appear, plus the “Use this template” button in the analysis template library. The list of AI models comes from the `data/models.txt` file, and model colors come from Xedant Agent. Details in the [agent in the report](/agents/analytics/docs/agent)
 section.

## Docker CLI with a .env file

You can also run Analytics Agent without compose — with a `docker run` command, keeping the environment variables in a `.env` file:

```
# .env
ASPNETCORE_ENVIRONMENT=Production
ASPNETCORE_URLS=http://+:80
ANALYTICS_DATA_PATH=/data
ANALYTICS_SECRET_KEY=a-long-random-string
ANALYTICS_ADMIN_LOGIN=admin
ANALYTICS_ADMIN_PASSWORD=sha256-hash-of-the-password
# optional: AI features via Xedant Agent
# AGENT_API_URL=
# AGENT_API_KEY=
```

```
docker run -d \
  --name analytics-agent \
  --env-file .env \
  -p 5010:80 \
  -v analytics-agent-data:/data \
  --sysctl fs.inotify.max_user_watches=524288 \
  --sysctl fs.inotify.max_user_instances=512 \
  --restart unless-stopped \
  xedant/analytics-agent:latest
```

The `--env-file` flag reads all the variables from the file. Individual values can be overridden with extra `-e` flags after it, for example `-e ANALYTICS_BRAND=xedant`.

[← Back to the Analytics Agent home page](/agents/analytics)
