> For the complete documentation index, see [llms.txt](https://utm-1.gitbook.io/utm-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/subd/mongodb/instansy/utm-mongodb8-na-utm-db4-9.md).

# utm-mongodb8 на utm-db4-9

## Общая информация

Инстанс MongoDB на utm-db4-9

MongoDB работает в контейнере Docker.

<table><thead><tr><th width="306.79998779296875">Имя</th><th>Значение</th></tr></thead><tbody><tr><td>Сервер Имя</td><td> <a href="/pages/0rweffGpEO3t6GtRLqs6">utm-db4-9</a></td></tr><tr><td>Сервер IP  </td><td> 192.168.4.9</td></tr><tr><td>Порт</td><td>27017</td></tr><tr><td>Порт мониторинга</td><td><a href="http://192.168.4.9:9216/metrics">9216</a></td></tr><tr><td>Порт Mongo Express</td><td><a href="http://192.168.4.9:8081/">8081</a></td></tr><tr><td>Версия MongoDB</td><td>8.2.2</td></tr><tr><td>БД</td><td><ul><li>system</li><li>db_test</li><li>db_dev</li></ul></td></tr><tr><td>Пользователи</td><td><ul><li>root</li><li>maxim</li><li>andrew</li><li>exporter</li><li>express</li></ul></td></tr><tr><td>Репозиторий на GitHub</td><td>db-projects</td></tr><tr><td>Папка с проектом в репозитории</td><td>utm-mongodb8</td></tr><tr><td>Имя Docker контейнера</td><td>utm-mongodb8</td></tr><tr><td>Каталог на сервере с смонтированной папкой данных</td><td>/var/lib/docker/volumes/docker_utm-mongodb8-data</td></tr></tbody></table>

## Предварительная подготовка

### Репозиторий в GitHub

Необходимо создать приватный репозиторий db-projects на GitHub.

В аккаунте GitHub должен быть прописан публичный SSH ключ для доступа к GitHub.

Склонировать репозиторий db-projects **на рабочую станцию где ведется разработка.**

### Linux cервер развертывания

<details>

<summary>Настройка Linux сервера развертывания MongoDB</summary>

На Linux сервере развертывания должно быть:

* [Установлен Docker](https://app.gitbook.com/o/ydyc10nkiaS0aa9uq3Ai/s/UHLel8CyIki7deC8qpxM/~/changes/235/instrukcii/dokumentaciya/virtualnye-servera/utm-server4/system-servers/utm-db4-9/ustanovka-docker)

```bash
docker --version
# Docker version 28.4.0, build d8eb465
```

* Установлен Git

```bash
git --version
# git version 2.43.0
```

* Группы доступа

```bash
# Группа доступа к проектам GitHub
sudo addgroup utm-github
# Добавить пользователей в группу
sudo usermod -aG utm-github maxim
sudo usermod -aG utm-github andrew
```

* Папки

```bash
# Создать папку
sudo mkdir -p /srv/github/utenkov-maxim
# Права на доступ к папке
sudo chmod -R 0775 /srv/github/utenkov-maxim
# Владелец папки
sudo chown -R root:utm-github /srv/github/utenkov-maxim
# Добавить линк в домашней папке к папке /srv/github/utenkov-maxim
ln -s /srv/github $HOME/github
```

* Настройка доступа к GitHub по SSH

Скопировать в папку $HOME/.ssh пару SSH ключей доступа к GitHub

```bash
# Права на доступ к папке
sudo chmod 600 ~/.ssh/id_ed25519_github_utenkov-maxim
# Настроить config для SSH
sudo nano ~/.ssh/config
```

Добавить следующее содержимое:

```ssh-config
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github_utenkov-maxim
    IdentitiesOnly yes
```

</details>

## Подготовка файлов проекта

Предварительно должен быть склонирован репозиторий db-projects из GitHub.

В папке `db-projects` создать папку проекта `utm-mongodb8/docker` и создать следующие файлы:

**compose.yaml**

<details>

<summary>Содержимое файла compose.yaml</summary>

```yaml
volumes:
  utm-mongodb8-data:
  # utm-phpmyadmin-sessions:

services:
  # MongoDB 8.2
  utm-mongodb8:
    image: mongo:8.2.2
    container_name: utm-mongodb8
    restart: always
    environment:
      # Main variabels
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
      MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
      # Databases
      MONGODB_DATABASE1_DEV: ${MONGODB_DATABASE1_DEV}
      MONGODB_DATABASE2_DEV: ${MONGODB_DATABASE2_DEV}
      # Addition users
      MONGODB_USER1: ${MONGODB_USER1}
      MONGODB_USER1_PASSWORD: ${MONGODB_USER1_PASSWORD}
      MONGODB_USER2: ${MONGODB_USER2}
      MONGODB_USER2_PASSWORD: ${MONGODB_USER2_PASSWORD}
      # Exporter for Prometheus
      MONGODB_USER_EXPORTER: ${MONGODB_USER_EXPORTER}
      MONGODB_USER_EXPORTER_PASSWORD: ${MONGODB_USER_EXPORTER_PASSWORD}
      # Express
      MONGODB_EXPRESS_ADMINUSERNAME: ${MONGODB_EXPRESS_ADMINUSERNAME}
      MONGODB_EXPRESS_ADMINPASSWORD: ${MONGODB_EXPRESS_ADMINPASSWORD}
    volumes:
      - utm-mongodb8-data:/data/db
      - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    ports:
      - "27017:27017"
    healthcheck:  
      test: "echo 'db.runCommand(\"ping\").ok'" 
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s

  # Mongo Express
  utm-mongo-express:
    image: mongo-express:latest
    container_name: utm-mongoexpress
    restart: always
    depends_on:
      - utm-mongodb8
    ports:
      - '8081:8081'
    environment:
      ME_CONFIG_MONGODB_ENABLE_ADMIN: true
      ME_CONFIG_BASICAUTH_USERNAME: ${ME_CONFIG_BASICAUTH_USERNAME}
      ME_CONFIG_BASICAUTH_PASSWORD: ${ME_CONFIG_BASICAUTH_PASSWORD}
      ME_CONFIG_MONGODB_ADMINUSERNAME: ${MONGODB_EXPRESS_ADMINUSERNAME}
      ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGODB_EXPRESS_ADMINPASSWORD}
      ME_CONFIG_MONGODB_URL: mongodb://${MONGODB_EXPRESS_ADMINUSERNAME}:${MONGODB_EXPRESS_ADMINPASSWORD}@utm-mongodb8:27017/${MONGO_INITDB_DATABASE}?authSource=admin&ssl=false&directConnection=true

```

</details>

**.env**

<details>

<summary>Содержимое файла <strong>.env</strong></summary>

```apache
# Main variabels
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=<пароль для пользователя root>
MONGO_INITDB_DATABASE=system

# Databases
MONGODB_DATABASE1_DEV=db_dev
MONGODB_DATABASE2_DEV=db_test

# Addition users
MONGODB_USER1=maxim
MONGODB_USER1_PASSWORD=<пароль для пользователя maxim>
MONGODB_USER2=andrew
MONGODB_USER2_PASSWORD=<пароль для пользователя andrew>

# Exporter for Prometheus
MONGODB_USER_EXPORTER=exporter
MONGODB_USER_EXPORTER_PASSWORD=<пароль для пользователя exporter>

# Express
ME_CONFIG_BASICAUTH_USERNAME=uexpress
ME_CONFIG_BASICAUTH_PASSWORD=<пароль для пользователя uexpress>
MONGODB_EXPRESS_ADMINUSERNAME=express
MONGODB_EXPRESS_ADMINPASSWORD=<пароль для пользователя express>
```

</details>

В папке `utm-mongodb8/docker` создать подпапку `docker-entrypoint-initdb.d` для инициализации сервера и создать следующие файлы:

**mongo-init.sh**

<details>

<summary>Содержимое файла init-db.sh</summary>

```sh
#!/bin/bash

mongosh -- "$MONGO_INITDB_DATABASE" <<EOF

db = db.getSiblingDB('admin')
db.auth('$MONGO_INITDB_ROOT_USERNAME', '$MONGO_INITDB_ROOT_PASSWORD')

use $MONGODB_DATABASE1_DEV;
use $MONGODB_DATABASE2_DEV;
use admin;

db.createUser({
  user: "$MONGODB_USER1",
  pwd: "$MONGODB_USER1_PASSWORD",
  roles: [
    { role: 'root', db: 'admin' },
    { role: 'root', db: '$MONGO_INITDB_DATABASE' },
    { role: 'root', db: '$MONGODB_DATABASE1_DEV' },
    { role: 'root', db: '$MONGODB_DATABASE2_DEV' }
  ]
});

db.createUser({
  user: "$MONGODB_USER2",
  pwd: "$MONGODB_USER2_PASSWORD",
  roles: [
    { role: 'root', db: 'admin' },
    { role: 'root', db: '$MONGO_INITDB_DATABASE' },
    { role: 'root', db: '$MONGODB_DATABASE1_DEV' },
    { role: 'root', db: '$MONGODB_DATABASE2_DEV' }
  ]
});

db.createUser({
  user: "$MONGODB_USER_EXPORTER",
  pwd: "$MONGODB_USER_EXPORTER_PASSWORD",
  roles: [
    { role: 'read', db: 'admin' },
    { role: 'read', db: '$MONGO_INITDB_DATABASE' },
    { role: 'root', db: '$MONGODB_DATABASE1_DEV' },
    { role: 'root', db: '$MONGODB_DATABASE2_DEV' }
  ]
});

db.createUser({
  user: "$MONGODB_EXPRESS_ADMINUSERNAME",
  pwd: "$MONGODB_EXPRESS_ADMINPASSWORD",
  roles: [
    { role: 'root', db: 'admin' },
    { role: 'root', db: '$MONGO_INITDB_DATABASE' },
    { role: 'root', db: '$MONGODB_DATABASE1_DEV' },
    { role: 'root', db: '$MONGODB_DATABASE2_DEV' }
  ]
});

EOF
```

</details>

В папке `db-projects` создать папку проекта `utm-mongodb8/docker-mongodb-exporter` и создать следующие файлы:

**compose.yaml**

<details>

<summary>Содержимое файла <strong>compose.yaml</strong></summary>

```yaml
services:
  mongodb-exporter:
    image: percona/mongodb_exporter
    restart: always
    container_name: mongodb-exporter-utm-mongodb8
    command:
      - '--mongodb.uri=mongodb://${MONGODB_USER_EXPORTER}:${MONGODB_USER_EXPORTER_PASSWORD}@192.168.4.9:27017'
    ports:
      - "9216:9216"
```

</details>

**.env**

<details>

<summary>Содержимое файла <strong>.env</strong></summary>

```apache
# Exporter for Prometheus
MONGODB_USER_EXPORTER=exporter
MONGODB_USER_EXPORTER_PASSWORD=<пароль для пользователя exporter>
```

</details>

Сделать коммит в GitHub со всеми изменениями в репозитории db-projects.

## Запуск Docker контейнеров с MongoDB и Mongo Express

<details>

<summary>Выполнение запуска Docker контейнеров с MongoDB и Mongo Express</summary>

Подключение репозитория db-projects:

```bash
# Перейти в общую папку
cd  ~/github/utenkov-maxim
# Выполнить клонирование репозитория
git clone git@github.com:utenkov-maxim/db-projects.git
# Перейти в папку репозитория db-projects
cd db-projects/utm-mongodb8/docker
```

Обновление репозитория:

```bash
# Перейти в папку репозитория db-projects
cd  ~/github/utenkov-maxim/db-projects
# Получить свежие данные из репозитория
git pull
# Перейти в папку проекта 
cd  ~/github/utenkov-maxim/db-projects/utm-mongodb8/docker
```

Запустить контейнеры

```bash
# Запустить
docker compose up -d
```

Проверки:

```bash
# Посмотреть запущенные контейнеры
docker ps

# Посмотреть каталог с volume с данными БД который примонтирован к контейнеру
sudo su
cd /var/lib/docker/volumes/docker_utm-mongodb8-data
```

Дополнительные команды:

```bash
# Логи запуска контейнера
docker logs utm-mongodb8
docker logs utm-mongoexpress

# Остановить контейнер
docker stop utm-mongodb8
docker stop utm-mongoexpress

# Список всех контейнеров, включая остановленные
docker ps -a

# Удалить контейнер
docker rm utm-mongodb8

# Список volumes
docker volume ls

# Удалить volume docker_utm-mongodb8-data
docker volume rm docker_utm-mongodb8-data

# Список volumes примонтированных к контейнеру
docker inspect utm-mongodb8 | grep -i "Mounts"

# Перезапуск контейнера
docker restart utm-mongodb8
```

</details>

Mongo Express: <http://192.168.4.9:8081/>

## Дополнительная настройка MongoDB

<details>

<summary>Действия после первого запуска Docker контейнера с MongoDB</summary>

После первоначального запуска в Docker контейнера utm-mongodb8 выполняется первоначальная инициализация сервера MongoDB. При этом выполняются все скрипты из папки `docker-entrypoint-initdb.d`.

Создаются пользователи:

* root
* maxim
* andrew
* exporter
* express

Базы данных:

* system
* db\_test
* db\_dev

Пользователи создаются с паролями, указанными в файле compose.yaml

Поэтому после инициализации необходимо сменить пароли для этих пользователей.

Для этого необходимо подключиться через MongoDB Compass к серверу и выполнить следующие команды:

```sql
use admin  
db.changeUserPassword("root", "new_password")
db.changeUserPassword("maxim", "new_password")
db.changeUserPassword("andrew", "new_password")
```

</details>

## Создание пользователя exporter на сервере MongoDB

Пользователь exporter создается скриптом **mongo-init.sh** при инициализации Docker контейнера с MongoDB

## Запуск Docker контейнера с mongodb-exporter

<details>

<summary>Выполнение запуска Docker контейнера с mongodb-exporter</summary>

Перейти в папку проекта docker-mongodb-exporter:

```bash
cd  ~/github/utenkov-maxim/db-projects/utm-mongodb8/docker-mongodb-exporter
```

Запустить контейнер

```bash
# Запустить
docker compose up -d
```

Дополнительные команды:

```bash
# Посмотреть запущенные контейнеры
docker ps

# Остановить контейнер
docker stop mongodb-exporter-utm-mongodb8

# Список всех контейнеров, включая остановленные
docker ps -a

# Удалить контейнер
docker rm mongodb-exporter-utm-mongodb8

# Перезапуск контейнера
docker restart mongodb-exporter-utm-mongodb8
```

Проверка метрик

```bash
curl "http://localhost:9216/metrics"
```

Через браузер: <http://192.168.4.9:9216/metrics>

</details>

## Настройка Prometheus и Grafana

Настройка Prometheus и Grafana [описана тут](/utm-docs/dokumentaciya/utm-it/resheniya/monitoring/prometheus/monitoring-mongodb.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/subd/mongodb/instansy/utm-mongodb8-na-utm-db4-9.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
