92 lines
3.9 KiB
Markdown
92 lines
3.9 KiB
Markdown
# MongoDB ReplicaSet Setup
|
|
|
|
This repository contains the necessary scripts and configurations to set up a MongoDB ReplicaSet using Docker. The setup
|
|
includes initializing the ReplicaSet, creating a database user, and configuring MongoDB to run with authentication and a
|
|
key file for secure communication between replica set members.
|
|
|
|
## Table of Contents
|
|
|
|
- [Prerequisites](#prerequisites)
|
|
- [Configuration](#configuration)
|
|
- [Usage](#usage)
|
|
- [Scripts](#scripts)
|
|
- [Dockerfile](#dockerfile)
|
|
|
|
## Prerequisites
|
|
|
|
- Docker installed on your machine.
|
|
- A Docker registry to push the built image (optional).
|
|
- Environment variables configured for MongoDB setup.
|
|
|
|
## Configuration
|
|
|
|
The following environment variables are required for the setup:
|
|
|
|
| Variable | Type | Description |
|
|
|-----------------------------------|--------|---------------------------------------------------------------------|
|
|
| `MONGO_DOMAIN` | string | The domain or IP address of the MongoDB instance. |
|
|
| `MONGO_PORT` | number | The port on which MongoDB will run. |
|
|
| `MONGO_REPLICA_SET_NAME` | string | The name of the MongoDB ReplicaSet. |
|
|
| `MONGO_INITDB_DATABASE` | string | The initial database to create. |
|
|
| `MONGO_INITDB_ROOT_USERNAME_FILE` | secret | Path to the file containing the root username. |
|
|
| `MONGO_INITDB_ROOT_PASSWORD_FILE` | secret | Path to the file containing the root password. |
|
|
| `MONGO_PROJECTDB_USERNAME_FILE` | secret | Path to the file containing the project database username. |
|
|
| `MONGO_PROJECTDB_PASSWORD_FILE` | secret | Path to the file containing the project database password. |
|
|
| `MONGO_KEY_FILE_PATH` | secret | Path to the key file for MongoDB authentication. |
|
|
| `MONGO_KEY_FILE_TARGET_PATH` | secret | Target path where the key file will be copied inside the container. |
|
|
|
|
## Usage
|
|
|
|
1. **Clone the repository:**
|
|
```bash
|
|
git clone https://git.n08i40k.ru/n08i40k/mongodb-replset.git
|
|
cd mongodb-replset
|
|
```
|
|
|
|
2. **Build the Docker image:**
|
|
```bash
|
|
docker build -t mongodb-replset .
|
|
```
|
|
|
|
3. **Run the Docker container:**
|
|
```bash
|
|
docker run -d \
|
|
--name mongodb-replset \
|
|
-e MONGO_DOMAIN=mongodb.example.tdl \
|
|
-e MONGO_PORT=27017 \
|
|
-e MONGO_REPLICA_SET_NAME=rs0 \
|
|
-e MONGO_INITDB_DATABASE=example \
|
|
-e MONGO_INITDB_ROOT_USERNAME_FILE=/run/secrets/db_root_username \
|
|
-e MONGO_INITDB_ROOT_PASSWORD_FILE=/run/secrets/db_root_password \
|
|
-e MONGO_PROJECTDB_USERNAME_FILE=/run/secrets/db_username \
|
|
-e MONGO_PROJECTDB_PASSWORD_FILE=/run/secrets/db_password \
|
|
-e MONGO_KEY_FILE_PATH=/run/secrets/db_key_file \
|
|
-e MONGO_KEY_FILE_TARGET_PATH=/root/db_key_file \
|
|
mongodb-replset
|
|
```
|
|
|
|
## Scripts
|
|
|
|
### `rs-init.sh`
|
|
|
|
This script initializes the MongoDB ReplicaSet and creates a user with read-write permissions on the specified database.
|
|
|
|
### `start.sh`
|
|
|
|
This script is the entry point for the Docker container. It checks if the ReplicaSet is already initialized and, if not,
|
|
initializes it using `rs-init.sh`. It also copies the key file to the specified location and starts the MongoDB instance
|
|
with the appropriate configuration.
|
|
|
|
## Dockerfile
|
|
|
|
The `Dockerfile` is based on the official MongoDB image and includes the necessary scripts and configurations to set up
|
|
a MongoDB ReplicaSet. It sets the working directory, copies the scripts, and defines the entry point and command to
|
|
start MongoDB with the required options.
|
|
|
|
## Contributing
|
|
|
|
Contributions are welcome! Please open an issue or submit a pull request for any improvements or bug fixes.
|
|
|
|
## License
|
|
|
|
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details. |