Установка и настройка MongoDB — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Установка и настройка MongoDB = == 1. Подготовка системы == * Войдите в систему под учетной за…»)
 
 
Строка 6: Строка 6:
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
  
== 2. Установка MongoDB ===
+
== 2. Установка MongoDB ==
  
 
=== Обновление системы ===
 
=== Обновление системы ===
  
 
1. Обновите систему:
 
1. Обновите систему:
<code>sudo apt update</code>
+
<pre>sudo apt update</pre>
  
 
2. Установите необходимые пакеты:
 
2. Установите необходимые пакеты:
<code>sudo apt install -y wget curl gnupg2 software-properties-common</code>
+
<pre>sudo apt install -y wget curl gnupg2 software-properties-common</pre>
  
 
=== Установка MongoDB Community Edition ===
 
=== Установка MongoDB Community Edition ===
  
 
1. Импортируйте публичный ключ MongoDB:
 
1. Импортируйте публичный ключ MongoDB:
<code>wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -</code>
+
<pre>wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -</pre>
  
 
2. Добавьте репозиторий MongoDB:
 
2. Добавьте репозиторий MongoDB:
<code>echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list</code>
+
<pre>echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list</pre>
  
 
3. Обновите список пакетов:
 
3. Обновите список пакетов:
<code>sudo apt update</code>
+
<pre>sudo apt update</pre>
  
 
4. Установите MongoDB:
 
4. Установите MongoDB:
<code>sudo apt install -y mongodb-org</code>
+
<pre>sudo apt install -y mongodb-org</pre>
  
 
5. Проверьте версию:
 
5. Проверьте версию:
<code>mongod --version</code>
+
<pre>mongod --version</pre>
  
 
=== Запуск MongoDB ===
 
=== Запуск MongoDB ===
  
 
1. Запустите и включите автозапуск:
 
1. Запустите и включите автозапуск:
<code>sudo systemctl start mongod</code>
+
<pre>sudo systemctl start mongod</pre>
<code>sudo systemctl enable mongod</code>
+
<pre>sudo systemctl enable mongod</pre>
  
 
2. Проверьте статус:
 
2. Проверьте статус:
<code>sudo systemctl status mongod</code>
+
<pre>sudo systemctl status mongod</pre>
  
 
3. Проверьте подключение:
 
3. Проверьте подключение:
<code>mongosh</code>
+
<pre>mongosh</pre>
  
== 3. Базовая конфигурация ===
+
== 3. Базовая конфигурация ==
  
 
=== Создание резервной копии ===
 
=== Создание резервной копии ===
  
 
1. Создайте резервную копию оригинального файла:
 
1. Создайте резервную копию оригинального файла:
<code>sudo cp /etc/mongod.conf /etc/mongod.conf.backup</code>
+
<pre>sudo cp /etc/mongod.conf /etc/mongod.conf.backup</pre>
  
 
=== Основная конфигурация ===
 
=== Основная конфигурация ===
  
 
1. Отредактируйте конфигурационный файл:
 
1. Отредактируйте конфигурационный файл:
<code>sudo nano /etc/mongod.conf</code>
+
<pre>sudo nano /etc/mongod.conf</pre>
  
 
2. Настройте основные параметры:
 
2. Настройте основные параметры:
<code># Где хранить данные
+
<pre>\# Где хранить данные
 
storage:
 
storage:
 
   dbPath: /var/lib/mongodb
 
   dbPath: /var/lib/mongodb
Строка 64: Строка 64:
 
     enabled: true
 
     enabled: true
  
# Где записывать логи
+
\# Где записывать логи
 
systemLog:
 
systemLog:
 
   destination: file
 
   destination: file
Строка 70: Строка 70:
 
   path: /var/log/mongodb/mongod.log
 
   path: /var/log/mongodb/mongod.log
  
# Сетевые интерфейсы
+
\# Сетевые интерфейсы
 
net:
 
net:
 
   port: 27017
 
   port: 27017
 
   bindIp: 127.0.0.1
 
   bindIp: 127.0.0.1
  
# Процесс
+
\# Процесс
 
processManagement:
 
processManagement:
 
   timeZoneInfo: /usr/share/zoneinfo
 
   timeZoneInfo: /usr/share/zoneinfo
  
# Операционная система
+
\# Операционная система
 
operationProfiling:
 
operationProfiling:
 
   slowOpThresholdMs: 100
 
   slowOpThresholdMs: 100
 
   mode: slowOp
 
   mode: slowOp
</code>
+
</pre>
  
 
=== Настройка безопасности ===
 
=== Настройка безопасности ===
  
 
1. Создайте администратора:
 
1. Создайте администратора:
<code>mongosh</code>
+
<pre>mongosh</pre>
  
 
2. В MongoDB shell выполните:
 
2. В MongoDB shell выполните:
<code>use admin
+
<pre>use admin
 
db.createUser({
 
db.createUser({
 
   user: "admin",
 
   user: "admin",
Строка 97: Строка 97:
 
   roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]
 
   roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]
 
})
 
})
</code>
+
</pre>
  
 
3. Включите аутентификацию в конфигурации:
 
3. Включите аутентификацию в конфигурации:
<code>security:
+
<pre>security:
 
   authorization: enabled
 
   authorization: enabled
</code>
+
</pre>
  
 
4. Перезапустите MongoDB:
 
4. Перезапустите MongoDB:
<code>sudo systemctl restart mongod</code>
+
<pre>sudo systemctl restart mongod</pre>
  
== 4. Управление MongoDB ===
+
== 4. Управление MongoDB ==
  
 
=== Основные команды ===
 
=== Основные команды ===
  
 
1. '''Запуск MongoDB''':
 
1. '''Запуск MongoDB''':
<code>sudo systemctl start mongod</code>
+
<pre>sudo systemctl start mongod</pre>
  
 
2. '''Остановка MongoDB''':
 
2. '''Остановка MongoDB''':
<code>sudo systemctl stop mongod</code>
+
<pre>sudo systemctl stop mongod</pre>
  
 
3. '''Перезапуск MongoDB''':
 
3. '''Перезапуск MongoDB''':
<code>sudo systemctl restart mongod</code>
+
<pre>sudo systemctl restart mongod</pre>
  
 
4. '''Проверка статуса''':
 
4. '''Проверка статуса''':
<code>sudo systemctl status mongod</code>
+
<pre>sudo systemctl status mongod</pre>
  
 
5. '''Подключение к MongoDB''':
 
5. '''Подключение к MongoDB''':
<code>mongosh</code>
+
<pre>mongosh</pre>
  
 
=== Управление базами данных ===
 
=== Управление базами данных ===
  
 
1. '''Создание базы данных''':
 
1. '''Создание базы данных''':
<code>use mydatabase</code>
+
<pre>use mydatabase</pre>
  
 
2. '''Просмотр баз данных''':
 
2. '''Просмотр баз данных''':
<code>show dbs</code>
+
<pre>show dbs</pre>
  
 
3. '''Переключение на базу данных''':
 
3. '''Переключение на базу данных''':
<code>use mydatabase</code>
+
<pre>use mydatabase</pre>
  
 
4. '''Удаление базы данных''':
 
4. '''Удаление базы данных''':
<code>db.dropDatabase()</code>
+
<pre>db.dropDatabase()</pre>
  
== 5. Работа с коллекциями ===
+
== 5. Работа с коллекциями ==
  
 
=== Создание и управление коллекциями ===
 
=== Создание и управление коллекциями ===
  
 
1. '''Создание коллекции''':
 
1. '''Создание коллекции''':
<code>db.createCollection("users")</code>
+
<pre>db.createCollection("users")</pre>
  
 
2. '''Просмотр коллекций''':
 
2. '''Просмотр коллекций''':
<code>show collections</code>
+
<pre>show collections</pre>
  
 
3. '''Вставка документов''':
 
3. '''Вставка документов''':
<code>db.users.insertOne({
+
<pre>db.users.insertOne({
 
   name: "John Doe",
 
   name: "John Doe",
 
   email: "john@example.com",
 
   email: "john@example.com",
 
   age: 30
 
   age: 30
})</code>
+
})</pre>
  
 
4. '''Вставка нескольких документов''':
 
4. '''Вставка нескольких документов''':
<code>db.users.insertMany([
+
<pre>db.users.insertMany([
 
   { name: "Jane Smith", email: "jane@example.com", age: 25 },
 
   { name: "Jane Smith", email: "jane@example.com", age: 25 },
 
   { name: "Bob Johnson", email: "bob@example.com", age: 35 }
 
   { name: "Bob Johnson", email: "bob@example.com", age: 35 }
])</code>
+
])</pre>
  
 
=== Поиск и обновление данных ===
 
=== Поиск и обновление данных ===
  
 
1. '''Поиск всех документов''':
 
1. '''Поиск всех документов''':
<code>db.users.find()</code>
+
<pre>db.users.find()</pre>
  
 
2. '''Поиск с условием''':
 
2. '''Поиск с условием''':
<code>db.users.find({ age: { $gt: 30 } })</code>
+
<pre>db.users.find({ age: { $gt: 30 } })</pre>
  
 
3. '''Обновление документа''':
 
3. '''Обновление документа''':
<code>db.users.updateOne(
+
<pre>db.users.updateOne(
 
   { name: "John Doe" },
 
   { name: "John Doe" },
 
   { $set: { age: 31 } }
 
   { $set: { age: 31 } }
)</code>
+
)</pre>
  
 
4. '''Удаление документа''':
 
4. '''Удаление документа''':
<code>db.users.deleteOne({ name: "John Doe" })</code>
+
<pre>db.users.deleteOne({ name: "John Doe" })</pre>
  
== 6. Настройка репликации ===
+
== 6. Настройка репликации ==
  
 
=== Создание реплика-сета ===
 
=== Создание реплика-сета ===
  
 
1. Остановите MongoDB:
 
1. Остановите MongoDB:
<code>sudo systemctl stop mongod</code>
+
<pre>sudo systemctl stop mongod</pre>
  
 
2. Обновите конфигурацию для реплика-сета:
 
2. Обновите конфигурацию для реплика-сета:
<code>sudo nano /etc/mongod.conf</code>
+
<pre>sudo nano /etc/mongod.conf</pre>
  
 
3. Добавьте настройки репликации:
 
3. Добавьте настройки репликации:
<code>replication:
+
<pre>replication:
 
   replSetName: "rs0"
 
   replSetName: "rs0"
</code>
+
</pre>
  
 
4. Запустите MongoDB:
 
4. Запустите MongoDB:
<code>sudo systemctl start mongod</code>
+
<pre>sudo systemctl start mongod</pre>
  
 
5. Инициализируйте реплика-сет:
 
5. Инициализируйте реплика-сет:
<code>mongosh</code>
+
<pre>mongosh</pre>
  
 
6. В MongoDB shell выполните:
 
6. В MongoDB shell выполните:
<code>rs.initiate()</code>
+
<pre>rs.initiate()</pre>
  
 
7. Добавьте вторичные серверы:
 
7. Добавьте вторичные серверы:
<code>rs.add("secondary-server:27017")</code>
+
<pre>rs.add("secondary-server:27017")</pre>
  
 
=== Настройка вторичного сервера ===
 
=== Настройка вторичного сервера ===
  
 
1. На вторичном сервере настройте конфигурацию:
 
1. На вторичном сервере настройте конфигурацию:
<code>replication:
+
<pre>replication:
 
   replSetName: "rs0"
 
   replSetName: "rs0"
</code>
+
</pre>
  
 
2. Запустите MongoDB:
 
2. Запустите MongoDB:
<code>sudo systemctl start mongod</code>
+
<pre>sudo systemctl start mongod</pre>
  
== 7. Настройка шардинга ===
+
== 7. Настройка шардинга ==
  
 
=== Настройка конфиг-серверов ===
 
=== Настройка конфиг-серверов ===
  
 
1. Создайте конфигурацию для конфиг-сервера:
 
1. Создайте конфигурацию для конфиг-сервера:
<code>sudo nano /etc/mongod.conf</code>
+
<pre>sudo nano /etc/mongod.conf</pre>
  
 
2. Добавьте настройки:
 
2. Добавьте настройки:
<code>sharding:
+
<pre>sharding:
 
   clusterRole: configsvr
 
   clusterRole: configsvr
 
replication:
 
replication:
 
   replSetName: "configReplSet"
 
   replSetName: "configReplSet"
</code>
+
</pre>
  
 
=== Настройка шард-серверов ===
 
=== Настройка шард-серверов ===
  
 
1. Настройте шард-сервер:
 
1. Настройте шард-сервер:
<code>sharding:
+
<pre>sharding:
 
   clusterRole: shardsvr
 
   clusterRole: shardsvr
 
replication:
 
replication:
 
   replSetName: "shardReplSet"
 
   replSetName: "shardReplSet"
</code>
+
</pre>
  
 
=== Настройка mongos ===
 
=== Настройка mongos ===
  
 
1. Установите mongos:
 
1. Установите mongos:
<code>sudo apt install -y mongodb-mongosh</code>
+
<pre>sudo apt install -y mongodb-mongosh</pre>
  
 
2. Создайте конфигурацию mongos:
 
2. Создайте конфигурацию mongos:
<code>sudo nano /etc/mongos.conf</code>
+
<pre>sudo nano /etc/mongos.conf</pre>
  
 
3. Добавьте настройки:
 
3. Добавьте настройки:
<code>sharding:
+
<pre>sharding:
 
   configDB: configReplSet/config1:27017,config2:27017,config3:27017
 
   configDB: configReplSet/config1:27017,config2:27017,config3:27017
 
net:
 
net:
 
   port: 27017
 
   port: 27017
 
   bindIp: 0.0.0.0
 
   bindIp: 0.0.0.0
</code>
+
</pre>
  
 
4. Запустите mongos:
 
4. Запустите mongos:
<code>sudo mongos --config /etc/mongos.conf</code>
+
<pre>sudo mongos --config /etc/mongos.conf</pre>
  
== 8. Мониторинг и оптимизация ===
+
== 8. Мониторинг и оптимизация ==
  
 
=== Настройка мониторинга ===
 
=== Настройка мониторинга ===
  
 
1. '''Просмотр статистики''':
 
1. '''Просмотр статистики''':
<code>db.serverStatus()</code>
+
<pre>db.serverStatus()</pre>
  
 
2. '''Просмотр статистики базы данных''':
 
2. '''Просмотр статистики базы данных''':
<code>db.stats()</code>
+
<pre>db.stats()</pre>
  
 
3. '''Просмотр статистики коллекции''':
 
3. '''Просмотр статистики коллекции''':
<code>db.users.stats()</code>
+
<pre>db.users.stats()</pre>
  
 
4. '''Просмотр активных операций''':
 
4. '''Просмотр активных операций''':
<code>db.currentOp()</code>
+
<pre>db.currentOp()</pre>
  
 
=== Настройка индексов ===
 
=== Настройка индексов ===
  
 
1. '''Создание индекса''':
 
1. '''Создание индекса''':
<code>db.users.createIndex({ email: 1 })</code>
+
<pre>db.users.createIndex({ email: 1 })</pre>
  
 
2. '''Создание составного индекса''':
 
2. '''Создание составного индекса''':
<code>db.users.createIndex({ name: 1, age: -1 })</code>
+
<pre>db.users.createIndex({ name: 1, age: -1 })</pre>
  
 
3. '''Просмотр индексов''':
 
3. '''Просмотр индексов''':
<code>db.users.getIndexes()</code>
+
<pre>db.users.getIndexes()</pre>
  
 
4. '''Удаление индекса''':
 
4. '''Удаление индекса''':
<code>db.users.dropIndex({ email: 1 })</code>
+
<pre>db.users.dropIndex({ email: 1 })</pre>
  
 
=== Оптимизация производительности ===
 
=== Оптимизация производительности ===
  
 
1. '''Анализ медленных запросов''':
 
1. '''Анализ медленных запросов''':
<code>db.setProfilingLevel(2, { slowms: 100 })
+
<pre>db.setProfilingLevel(2, { slowms: 100 })
db.system.profile.find().sort({ ts: -1 }).limit(5)</code>
+
db.system.profile.find().sort({ ts: -1 }).limit(5)</pre>
  
 
2. '''Настройка кэша''':
 
2. '''Настройка кэша''':
<code># В конфигурации MongoDB
+
<pre>\# В конфигурации MongoDB
 
storage:
 
storage:
 
   wiredTiger:
 
   wiredTiger:
 
     engineConfig:
 
     engineConfig:
 
       cacheSizeGB: 2
 
       cacheSizeGB: 2
</code>
+
</pre>
  
== 9. Резервное копирование ===
+
== 9. Резервное копирование ==
  
 
=== Создание резервной копии ===
 
=== Создание резервной копии ===
  
 
1. '''Полное резервное копирование''':
 
1. '''Полное резервное копирование''':
<code>mongodump --host localhost:27017 --db mydatabase --out /backup/mongodb/</code>
+
<pre>mongodump --host localhost:27017 --db mydatabase --out /backup/mongodb/</pre>
  
 
2. '''Резервное копирование всех баз данных''':
 
2. '''Резервное копирование всех баз данных''':
<code>mongodump --host localhost:27017 --out /backup/mongodb/</code>
+
<pre>mongodump --host localhost:27017 --out /backup/mongodb/</pre>
  
 
3. '''Сжатое резервное копирование''':
 
3. '''Сжатое резервное копирование''':
<code>mongodump --host localhost:27017 --db mydatabase --gzip --archive=/backup/mongodb/mydatabase.gz</code>
+
<pre>mongodump --host localhost:27017 --db mydatabase --gzip --archive=/backup/mongodb/mydatabase.gz</pre>
  
 
4. '''Резервное копирование с аутентификацией''':
 
4. '''Резервное копирование с аутентификацией''':
<code>mongodump --host localhost:27017 --username admin --password your_password --authenticationDatabase admin --db mydatabase --out /backup/mongodb/</code>
+
<pre>mongodump --host localhost:27017 --username admin --password your_password --authenticationDatabase admin --db mydatabase --out /backup/mongodb/</pre>
  
 
=== Восстановление из резервной копии ===
 
=== Восстановление из резервной копии ===
  
 
1. '''Восстановление базы данных''':
 
1. '''Восстановление базы данных''':
<code>mongorestore --host localhost:27017 --db mydatabase /backup/mongodb/mydatabase/</code>
+
<pre>mongorestore --host localhost:27017 --db mydatabase /backup/mongodb/mydatabase/</pre>
  
 
2. '''Восстановление из сжатого архива''':
 
2. '''Восстановление из сжатого архива''':
<code>mongorestore --host localhost:27017 --gzip --archive=/backup/mongodb/mydatabase.gz</code>
+
<pre>mongorestore --host localhost:27017 --gzip --archive=/backup/mongodb/mydatabase.gz</pre>
  
 
3. '''Восстановление с заменой''':
 
3. '''Восстановление с заменой''':
<code>mongorestore --host localhost:27017 --db mydatabase --drop /backup/mongodb/mydatabase/</code>
+
<pre>mongorestore --host localhost:27017 --db mydatabase --drop /backup/mongodb/mydatabase/</pre>
  
 
=== Автоматическое резервное копирование ===
 
=== Автоматическое резервное копирование ===
  
 
1. Создайте скрипт резервного копирования:
 
1. Создайте скрипт резервного копирования:
<code>sudo nano /usr/local/bin/mongodb-backup.sh</code>
+
<pre>sudo nano /usr/local/bin/mongodb-backup.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<pre>\#!/bin/bash
  
 
BACKUP_DIR="/backup/mongodb"
 
BACKUP_DIR="/backup/mongodb"
 
DATE=$(date +%Y%m%d_%H%M%S)
 
DATE=$(date +%Y%m%d_%H%M%S)
  
# Создание директории для бэкапа
+
\# Создание директории для бэкапа
 
mkdir -p $BACKUP_DIR
 
mkdir -p $BACKUP_DIR
  
# Резервное копирование всех баз данных
+
\# Резервное копирование всех баз данных
 
mongodump --host localhost:27017 --out $BACKUP_DIR/mongodb-$DATE
 
mongodump --host localhost:27017 --out $BACKUP_DIR/mongodb-$DATE
  
# Сжатие архива
+
\# Сжатие архива
 
tar -czf $BACKUP_DIR/mongodb-$DATE.tar.gz -C $BACKUP_DIR mongodb-$DATE
 
tar -czf $BACKUP_DIR/mongodb-$DATE.tar.gz -C $BACKUP_DIR mongodb-$DATE
  
# Удаление несжатой директории
+
\# Удаление несжатой директории
 
rm -rf $BACKUP_DIR/mongodb-$DATE
 
rm -rf $BACKUP_DIR/mongodb-$DATE
  
# Удаление старых бэкапов (старше 7 дней)
+
\# Удаление старых бэкапов (старше 7 дней)
 
find $BACKUP_DIR -name "mongodb-*.tar.gz" -mtime +7 -delete
 
find $BACKUP_DIR -name "mongodb-*.tar.gz" -mtime +7 -delete
  
 
echo "MongoDB backup completed: $DATE"
 
echo "MongoDB backup completed: $DATE"
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/mongodb-backup.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/mongodb-backup.sh</pre>
  
 
4. Добавьте в crontab:
 
4. Добавьте в crontab:
<code>sudo crontab -e</code>
+
<pre>sudo crontab -e</pre>
  
 
5. Добавьте задачу:
 
5. Добавьте задачу:
<code>0 2 * * * /usr/local/bin/mongodb-backup.sh</code>
+
<pre>0 2 * * * /usr/local/bin/mongodb-backup.sh</pre>
  
== 10. Настройка файрвола ===
+
== 10. Настройка файрвола ==
  
 
=== Настройка UFW ===
 
=== Настройка UFW ===
  
 
1. Разрешите порт MongoDB:
 
1. Разрешите порт MongoDB:
<code>sudo ufw allow 27017/tcp</code>
+
<pre>sudo ufw allow 27017/tcp</pre>
  
 
2. Проверьте статус:
 
2. Проверьте статус:
<code>sudo ufw status</code>
+
<pre>sudo ufw status</pre>
  
 
=== Настройка iptables ===
 
=== Настройка iptables ===
  
 
1. Разрешите порт через iptables:
 
1. Разрешите порт через iptables:
<code>sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT</code>
+
<pre>sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT</pre>
  
 
2. Сохраните правила:
 
2. Сохраните правила:
<code>sudo iptables-save > /etc/iptables/rules.v4</code>
+
<pre>sudo iptables-save > /etc/iptables/rules.v4</pre>
  
== 11. Безопасность ===
+
== 11. Безопасность ==
  
 
=== Настройка SSL/TLS ===
 
=== Настройка SSL/TLS ===
  
 
1. Создайте SSL сертификаты:
 
1. Создайте SSL сертификаты:
<code>sudo mkdir -p /etc/mongodb/ssl
+
<pre>sudo mkdir -p /etc/mongodb/ssl
sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/mongodb/ssl/mongodb.key -out /etc/mongodb/ssl/mongodb.crt -subj "/CN=mongodb-server"</code>
+
sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/mongodb/ssl/mongodb.key -out /etc/mongodb/ssl/mongodb.crt -subj "/CN=mongodb-server"</pre>
  
 
2. Настройте SSL в конфигурации:
 
2. Настройте SSL в конфигурации:
<code>net:
+
<pre>net:
 
   port: 27017
 
   port: 27017
 
   bindIp: 0.0.0.0
 
   bindIp: 0.0.0.0
Строка 402: Строка 402:
 
     PEMKeyFile: /etc/mongodb/ssl/mongodb.crt
 
     PEMKeyFile: /etc/mongodb/ssl/mongodb.crt
 
     PEMKeyFile: /etc/mongodb/ssl/mongodb.key
 
     PEMKeyFile: /etc/mongodb/ssl/mongodb.key
</code>
+
</pre>
  
 
=== Настройка аутентификации ===
 
=== Настройка аутентификации ===
  
 
1. Создайте пользователей с ограниченными правами:
 
1. Создайте пользователей с ограниченными правами:
<code>use mydatabase
+
<pre>use mydatabase
 
db.createUser({
 
db.createUser({
 
   user: "readonly",
 
   user: "readonly",
Строка 419: Строка 419:
 
   roles: ["readWrite"]
 
   roles: ["readWrite"]
 
})
 
})
</code>
+
</pre>
  
== 12. Устранение неполадок ===
+
== 12. Устранение неполадок ==
  
 
=== Частые проблемы ===
 
=== Частые проблемы ===
  
 
1. '''MongoDB не запускается''':
 
1. '''MongoDB не запускается''':
* Проверьте логи: <code>sudo journalctl -u mongod</code>
+
* Проверьте логи: <pre>sudo journalctl -u mongod</pre>
 
* Проверьте права доступа к директориям
 
* Проверьте права доступа к директориям
* Проверьте конфигурацию: <code>mongod --config /etc/mongod.conf --configExpand rest</code>
+
* Проверьте конфигурацию: <pre>mongod --config /etc/mongod.conf --configExpand rest</pre>
  
 
2. '''Проблемы с подключением''':
 
2. '''Проблемы с подключением''':
Строка 443: Строка 443:
  
 
1. '''Проверка статуса''':
 
1. '''Проверка статуса''':
<code>sudo systemctl status mongod</code>
+
<pre>sudo systemctl status mongod</pre>
  
 
2. '''Проверка портов''':
 
2. '''Проверка портов''':
<code>sudo netstat -tlnp | grep :27017</code>
+
<pre>sudo netstat -tlnp | grep :27017</pre>
  
 
3. '''Проверка логов''':
 
3. '''Проверка логов''':
<code>sudo tail -f /var/log/mongodb/mongod.log</code>
+
<pre>sudo tail -f /var/log/mongodb/mongod.log</pre>
  
 
4. '''Проверка подключения''':
 
4. '''Проверка подключения''':
<code>mongosh --host localhost:27017</code>
+
<pre>mongosh --host localhost:27017</pre>
  
 
== Заключение ==
 
== Заключение ==

Текущая версия на 10:43, 15 октября 2025

Содержание

Установка и настройка MongoDB

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что у вас есть доступ к серверу через SSH или консоль.

2. Установка MongoDB

Обновление системы

1. Обновите систему:

sudo apt update

2. Установите необходимые пакеты:

sudo apt install -y wget curl gnupg2 software-properties-common

Установка MongoDB Community Edition

1. Импортируйте публичный ключ MongoDB:

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

2. Добавьте репозиторий MongoDB:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

3. Обновите список пакетов:

sudo apt update

4. Установите MongoDB:

sudo apt install -y mongodb-org

5. Проверьте версию:

mongod --version

Запуск MongoDB

1. Запустите и включите автозапуск:

sudo systemctl start mongod
sudo systemctl enable mongod

2. Проверьте статус:

sudo systemctl status mongod

3. Проверьте подключение:

mongosh

3. Базовая конфигурация

Создание резервной копии

1. Создайте резервную копию оригинального файла:

sudo cp /etc/mongod.conf /etc/mongod.conf.backup

Основная конфигурация

1. Отредактируйте конфигурационный файл:

sudo nano /etc/mongod.conf

2. Настройте основные параметры:

\# Где хранить данные
storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true

\# Где записывать логи
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

\# Сетевые интерфейсы
net:
  port: 27017
  bindIp: 127.0.0.1

\# Процесс
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

\# Операционная система
operationProfiling:
  slowOpThresholdMs: 100
  mode: slowOp

Настройка безопасности

1. Создайте администратора:

mongosh

2. В MongoDB shell выполните:

use admin
db.createUser({
  user: "admin",
  pwd: "your_password",
  roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]
})

3. Включите аутентификацию в конфигурации:

security:
  authorization: enabled

4. Перезапустите MongoDB:

sudo systemctl restart mongod

4. Управление MongoDB

Основные команды

1. Запуск MongoDB:

sudo systemctl start mongod

2. Остановка MongoDB:

sudo systemctl stop mongod

3. Перезапуск MongoDB:

sudo systemctl restart mongod

4. Проверка статуса:

sudo systemctl status mongod

5. Подключение к MongoDB:

mongosh

Управление базами данных

1. Создание базы данных:

use mydatabase

2. Просмотр баз данных:

show dbs

3. Переключение на базу данных:

use mydatabase

4. Удаление базы данных:

db.dropDatabase()

5. Работа с коллекциями

Создание и управление коллекциями

1. Создание коллекции:

db.createCollection("users")

2. Просмотр коллекций:

show collections

3. Вставка документов:

db.users.insertOne({
  name: "John Doe",
  email: "john@example.com",
  age: 30
})

4. Вставка нескольких документов:

db.users.insertMany([
  { name: "Jane Smith", email: "jane@example.com", age: 25 },
  { name: "Bob Johnson", email: "bob@example.com", age: 35 }
])

Поиск и обновление данных

1. Поиск всех документов:

db.users.find()

2. Поиск с условием:

db.users.find({ age: { $gt: 30 } })

3. Обновление документа:

db.users.updateOne(
  { name: "John Doe" },
  { $set: { age: 31 } }
)

4. Удаление документа:

db.users.deleteOne({ name: "John Doe" })

6. Настройка репликации

Создание реплика-сета

1. Остановите MongoDB:

sudo systemctl stop mongod

2. Обновите конфигурацию для реплика-сета:

sudo nano /etc/mongod.conf

3. Добавьте настройки репликации:

replication:
  replSetName: "rs0"

4. Запустите MongoDB:

sudo systemctl start mongod

5. Инициализируйте реплика-сет:

mongosh

6. В MongoDB shell выполните:

rs.initiate()

7. Добавьте вторичные серверы:

rs.add("secondary-server:27017")

Настройка вторичного сервера

1. На вторичном сервере настройте конфигурацию:

replication:
  replSetName: "rs0"

2. Запустите MongoDB:

sudo systemctl start mongod

7. Настройка шардинга

Настройка конфиг-серверов

1. Создайте конфигурацию для конфиг-сервера:

sudo nano /etc/mongod.conf

2. Добавьте настройки:

sharding:
  clusterRole: configsvr
replication:
  replSetName: "configReplSet"

Настройка шард-серверов

1. Настройте шард-сервер:

sharding:
  clusterRole: shardsvr
replication:
  replSetName: "shardReplSet"

Настройка mongos

1. Установите mongos:

sudo apt install -y mongodb-mongosh

2. Создайте конфигурацию mongos:

sudo nano /etc/mongos.conf

3. Добавьте настройки:

sharding:
  configDB: configReplSet/config1:27017,config2:27017,config3:27017
net:
  port: 27017
  bindIp: 0.0.0.0

4. Запустите mongos:

sudo mongos --config /etc/mongos.conf

8. Мониторинг и оптимизация

Настройка мониторинга

1. Просмотр статистики:

db.serverStatus()

2. Просмотр статистики базы данных:

db.stats()

3. Просмотр статистики коллекции:

db.users.stats()

4. Просмотр активных операций:

db.currentOp()

Настройка индексов

1. Создание индекса:

db.users.createIndex({ email: 1 })

2. Создание составного индекса:

db.users.createIndex({ name: 1, age: -1 })

3. Просмотр индексов:

db.users.getIndexes()

4. Удаление индекса:

db.users.dropIndex({ email: 1 })

Оптимизация производительности

1. Анализ медленных запросов:

db.setProfilingLevel(2, { slowms: 100 })
db.system.profile.find().sort({ ts: -1 }).limit(5)

2. Настройка кэша:

\# В конфигурации MongoDB
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2

9. Резервное копирование

Создание резервной копии

1. Полное резервное копирование:

mongodump --host localhost:27017 --db mydatabase --out /backup/mongodb/

2. Резервное копирование всех баз данных:

mongodump --host localhost:27017 --out /backup/mongodb/

3. Сжатое резервное копирование:

mongodump --host localhost:27017 --db mydatabase --gzip --archive=/backup/mongodb/mydatabase.gz

4. Резервное копирование с аутентификацией:

mongodump --host localhost:27017 --username admin --password your_password --authenticationDatabase admin --db mydatabase --out /backup/mongodb/

Восстановление из резервной копии

1. Восстановление базы данных:

mongorestore --host localhost:27017 --db mydatabase /backup/mongodb/mydatabase/

2. Восстановление из сжатого архива:

mongorestore --host localhost:27017 --gzip --archive=/backup/mongodb/mydatabase.gz

3. Восстановление с заменой:

mongorestore --host localhost:27017 --db mydatabase --drop /backup/mongodb/mydatabase/

Автоматическое резервное копирование

1. Создайте скрипт резервного копирования:

sudo nano /usr/local/bin/mongodb-backup.sh

2. Добавьте содержимое:

\#!/bin/bash

BACKUP_DIR="/backup/mongodb"
DATE=$(date +%Y%m%d_%H%M%S)

\# Создание директории для бэкапа
mkdir -p $BACKUP_DIR

\# Резервное копирование всех баз данных
mongodump --host localhost:27017 --out $BACKUP_DIR/mongodb-$DATE

\# Сжатие архива
tar -czf $BACKUP_DIR/mongodb-$DATE.tar.gz -C $BACKUP_DIR mongodb-$DATE

\# Удаление несжатой директории
rm -rf $BACKUP_DIR/mongodb-$DATE

\# Удаление старых бэкапов (старше 7 дней)
find $BACKUP_DIR -name "mongodb-*.tar.gz" -mtime +7 -delete

echo "MongoDB backup completed: $DATE"

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/mongodb-backup.sh

4. Добавьте в crontab:

sudo crontab -e

5. Добавьте задачу:

0 2 * * * /usr/local/bin/mongodb-backup.sh

10. Настройка файрвола

Настройка UFW

1. Разрешите порт MongoDB:

sudo ufw allow 27017/tcp

2. Проверьте статус:

sudo ufw status

Настройка iptables

1. Разрешите порт через iptables:

sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT

2. Сохраните правила:

sudo iptables-save > /etc/iptables/rules.v4

11. Безопасность

Настройка SSL/TLS

1. Создайте SSL сертификаты:

sudo mkdir -p /etc/mongodb/ssl
sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/mongodb/ssl/mongodb.key -out /etc/mongodb/ssl/mongodb.crt -subj "/CN=mongodb-server"

2. Настройте SSL в конфигурации:

net:
  port: 27017
  bindIp: 0.0.0.0
  ssl:
    mode: requireSSL
    PEMKeyFile: /etc/mongodb/ssl/mongodb.crt
    PEMKeyFile: /etc/mongodb/ssl/mongodb.key

Настройка аутентификации

1. Создайте пользователей с ограниченными правами:

use mydatabase
db.createUser({
  user: "readonly",
  pwd: "password",
  roles: ["read"]
})

db.createUser({
  user: "readwrite",
  pwd: "password",
  roles: ["readWrite"]
})

12. Устранение неполадок

Частые проблемы

1. MongoDB не запускается:

  • Проверьте логи:
    sudo journalctl -u mongod
  • Проверьте права доступа к директориям
  • Проверьте конфигурацию:
    mongod --config /etc/mongod.conf --configExpand rest

2. Проблемы с подключением:

  • Проверьте файрвол
  • Проверьте настройки bindIp
  • Проверьте аутентификацию

3. Проблемы с производительностью:

  • Проверьте индексы
  • Проверьте настройки кэша
  • Проанализируйте медленные запросы

Диагностика

1. Проверка статуса:

sudo systemctl status mongod

2. Проверка портов:

sudo netstat -tlnp | grep :27017

3. Проверка логов:

sudo tail -f /var/log/mongodb/mongod.log

4. Проверка подключения:

mongosh --host localhost:27017

Заключение

MongoDB успешно установлен и настроен! Теперь у вас есть мощная NoSQL база данных с возможностями репликации, шардинга и мониторинга.

Для размещения ваших MongoDB баз данных на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой MongoDB и оптимизацией производительности ваших баз данных!