# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: MongoDB (Replica Set)
spec:
    description: The high-availability MongoDB replica set deployment template.
    coverImage: https://miro.medium.com/v2/resize:fit:1200/0*BmLKgrU_qFtakYsB.png
    icon: https://cdn.zeabur.com/marketplace/mongodb.svg
    tags:
        - Database
    readme: |-
        MongoDB is an open source NoSQL database management program. NoSQL (Not only SQL) is used as an alternative to traditional relational databases. NoSQL databases are quite useful for working with large sets of distributed data. MongoDB is a tool that can manage document-oriented information, store or retrieve information.

        MongoDB is used for high-volume data storage, helping organizations store large amounts of data while still performing rapidly. Organizations also use MongoDB for its ad-hoc queries, indexing, load balancing, aggregation, server-side JavaScript execution and other features.

        ## Deployment

        After the deployment, follow the steps to complete your ReplicaSet:

        First, edit the "replSetName" in "/etc/mongo/mongod.conf" to your real replica set name. [For more information, check this documentation.](https://www.mongodb.com/resources/products/compatibilities/deploying-a-mongodb-cluster-with-docker)

        Then, regenerate the key in the "/etc/mongo-keyfile" in the Config Editor to your pasword. [For more information, check this documentation.](https://www.mongodb.com/docs/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/)

        You can generate a safe key with the following command:

        ```bash
        openssl rand -base64 756
        ```

        Finally, Run [`rs.initialize()`](https://www.mongodb.com/docs/manual/reference/method/rs.reconfigure/) in the "Terminal":

        ```bash
        mongosh -u "${MONGO_USERNAME}" -p "${MONGO_PASSWORD}"
        ```

        and then run the following command to initialize the replica set:

        ```javascript
        rs.initiate({
            _id: "rs0",
            members: [
                { _id: 0, host: "<public-ip-1>:<port-1>" },
                { _id: 1, host: "<public-ip-2>:<port-2>" },
                { _id: 2, host: "<public-ip-3>:<port-3>" },
            ]
        })
        ```

        Note that the `rs0` should be changed to the `replSetName` you set if you have changed it in `mongod.conf`.
    services:
        - name: mongodb
          icon: https://cdn.zeabur.com/marketplace/mongodb.svg
          template: PREBUILT
          spec:
            source:
                image: mongo:8
                command:
                    - sh
                args:
                    - /usr/local/bin/docker-entrypoint-patched.sh
            ports:
                - id: database
                  port: 27017
                  type: TCP
            volumes:
                - id: data
                  dir: /data/db
            instructions:
                - title: Command to connect to your MongoDB
                  content: mongosh "mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@${PORT_FORWARDED_HOSTNAME}:${DATABASE_PORT_FORWARDED_PORT}"
                - title: MongoDB connection string
                  content: mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@${PORT_FORWARDED_HOSTNAME}:${DATABASE_PORT_FORWARDED_PORT}
                - title: MongoDB username
                  content: ${MONGO_USERNAME}
                - title: MongoDB password
                  content: ${MONGO_PASSWORD}
                - title: MongoDB host
                  content: ${PORT_FORWARDED_HOSTNAME}
                - title: MongoDB port
                  content: ${DATABASE_PORT_FORWARDED_PORT}
            env:
                MONGO_CONNECTION_STRING:
                    default: mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@${MONGO_HOST}:${MONGO_PORT}
                    expose: true
                MONGO_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                MONGO_INITDB_ROOT_PASSWORD:
                    default: ${PASSWORD}
                MONGO_INITDB_ROOT_USERNAME:
                    default: mongo
                MONGO_PASSWORD:
                    default: ${MONGO_INITDB_ROOT_PASSWORD}
                    expose: true
                MONGO_PORT:
                    default: ${DATABASE_PORT}
                    expose: true
                MONGO_URI:
                    default: ${MONGO_CONNECTION_STRING}
                    expose: true
                MONGO_USERNAME:
                    default: ${MONGO_INITDB_ROOT_USERNAME}
                    expose: true
            configs:
                - path: /etc/mongo-keyfile
                  template: |
                    MBjKcsyYFck5dy9RZtoq9YoLdQl/KzgFAJMJiyhgcRJGaKa+phM1k7/hr/WkedMx
                    ZlvDzR+ZuWhioZk8vRgj2CIIsN5lFuvh4HVguUUqomhPH4rCP9qfj8VXcGhBsD9F
                    QzaQNT5wXg0yfMdRFw8ycPKtCRf/4PmBigBR3vz0rw+95iscqEkXoIToc6yOrbtf
                    76LgEmedzEzRqcZWRA7zPIZJuU+XXNWCV5Ii50AbjYFEpwpeNMhUAf0oKXil5Fjh
                    Cf3b2I2FsiB45prh9KGVXLoBDLL+TkedUj6Kc+ZgHxbFrTHZ1n82i0jQr9A8gaaV
                    gns/cs2/oOMyNRSFC9MqJncMVHAjw5utJq5grpT0t2bl36ajMd9gO3piATQuIw0s
                    ibKaVMgehtP/pl1rpc4CQYC5E9mwHJqYBS3QiteIrJGqTZVOqbXnZkcV0sPMJWr2
                    B/AhMjqrIaVRcx2SRby8eXO3+BAbplH53eXXsEhiWiedbksYx3rxPEL77aRScRZE
                    zgcxLcb7BFGXOA5Y08ir6uL/NCs6s2RVEhgCCR0/PNxAHT/DswJ9uGRLm7d4p24l
                    yU232iK2ZvGtoLPVmVRV2zRDrBYUsCEfsfx3vb92KI7roNJmnuZ40Lmk94mwkojK
                    f8fro3dScWQrAEZC1eeB2MyukCYp9NaLJ9upPt0Rg3N2ikJlmDaL1llL/KnjcYr6
                    t0UlorJcv7F10dLounF+R9q7OZvFJD8aGcCBv4JFmJW/wmRn4EHJpAnXseez7uoh
                    /H26rcdYazb+iKnSbykFfP32ezNIbQf/lTjPTlL89xAkmsjADGTdq/NHaOQdEZpI
                    h7WGs8fA5IxaoMoP80A/gNbl1Chp5MjSjIrqtaUzYv4qwoie1hNDcyb0i/+DfbG5
                    0zRC+1K0s1Oi2tCgfOa5/2d74oRUhJ3lI6yEkEVjDgEAJt7CaCBA39a916UulVLn
                    5lUpY1+Fz0CcisaG7+5dWUg93dwoOqKBgBGj2ABVyYdR30Ch
                  permission: 256
                  envsubst: null
                - path: /etc/mongo/mongod.conf
                  template: |
                    security:
                        keyFile: /etc/mongo-keyfile
                    replication:
                        replSetName: rs0
                  permission: null
                  envsubst: null
                - path: /usr/local/bin/docker-entrypoint-patched.sh
                  template: |
                    #!/bin/sh
                    set -ex

                    sed -i '10,23d' /usr/local/bin/docker-entrypoint.sh
                    exec docker-entrypoint.sh mongod --config /etc/mongo/mongod.conf
                  permission: null
                  envsubst: null
localization:
    es-ES:
        description: Plantilla de implementación de un conjunto de réplicas de MongoDB de alta disponibilidad.
        readme: |-
            MongoDB es un programa de gestión de bases de datos NoSQL de código abierto. NoSQL (No solo SQL) se utiliza como alternativa a las bases de datos relacionales tradicionales. Las bases de datos NoSQL son muy útiles para trabajar con grandes conjuntos de datos distribuidos. MongoDB es una herramienta que puede gestionar información orientada a documentos, almacenar o recuperar información.

            MongoDB se utiliza para el almacenamiento de datos de gran volumen, ayudando a las organizaciones a almacenar grandes cantidades de datos sin dejar de funcionar con rapidez. Las organizaciones también utilizan MongoDB por sus consultas ad-hoc, indexación, equilibrio de carga, agregación, ejecución de JavaScript del lado del servidor y otras características.

            ## Despliegue

            Después del despliegue, siga los pasos para completar su ReplicaSet:

            Primero, edite el "replSetName" en "/etc/mongo/mongod.conf" a su nombre real de conjunto de réplicas. [Para más información, consulte esta documentación.](https://www.mongodb.com/resources/products/compatibilities/deploying-a-mongodb-cluster-with-docker)

            Luego, regenere la clave en el "/etc/mongo-keyfile" en el Editor de Configuración a su contraseña. [Para más información, consulte esta documentación.](https://www.mongodb.com/docs/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/)

            Puede generar una clave segura con el siguiente comando:

            ```bash
            openssl rand -base64 756
            ```

            Finalmente, ejecute [`rs.initialize()`](https://www.mongodb.com/docs/manual/reference/method/rs.reconfigure/) en la "Terminal":

            ```bash
            mongosh -u "${MONGO_USERNAME}" -p "${MONGO_PASSWORD}"
            ```

            y luego ejecute el siguiente comando para inicializar el conjunto de réplicas:

            ```javascript
            rs.initiate({
                _id: "rs0",
                members: [
                    { _id: 0, host: "<public-ip-1>:<port-1>" },
                    { _id: 1, host: "<public-ip-2>:<port-2>" },
                    { _id: 2, host: "<public-ip-3>:<port-3>" },
                ]
            })
            ```

            Tenga en cuenta que el `rs0` debe cambiarse por el `replSetName` que estableció si lo ha cambiado en `mongod.conf`.
    ja-JP:
        description: 高可用性 MongoDB レプリカセットのデプロイメントテンプレート。
        readme: |-
            MongoDB は、オープンソースの NoSQL データベース管理プログラムです。NoSQL (Not only SQL) は、従来のリレーショナルデータベースの代替として使用されます。NoSQL データベースは、大規模な分散データセットを扱うのに非常に便利です。MongoDB は、ドキュメント指向の情報を管理し、情報を保存または取得できるツールです。

            MongoDB は、大容量データストレージに使用され、組織が大量のデータを保存しながら迅速にパフォーマンスを発揮するのに役立ちます。組織はまた、アドホッククエリ、インデックス作成、負荷分散、集計、サーバーサイド JavaScript の実行などの機能のために MongoDB を使用しています。

            ## デプロイメント

            デプロイ後、以下の手順に従ってレプリカセットを完成させてください。

            まず、"/etc/mongo/mongod.conf" の "replSetName" を実際のレプリカセット名に編集します。[詳細については、こちらのドキュメントをご覧ください。](https://www.mongodb.com/resources/products/compatibilities/deploying-a-mongodb-cluster-with-docker)

            次に、設定エディタで "/etc/mongo-keyfile" のキーをパスワードに再生成します。[詳細については、こちらのドキュメントをご覧ください。](https://www.mongodb.com/docs/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/)

            次のコマンドで安全なキーを生成できます。

            ```bash
            openssl rand -base64 756
            ```

            最後に、「ターミナル」で [`rs.initialize()`](https://www.mongodb.com/docs/manual/reference/method/rs.reconfigure/) を実行します。

            ```bash
            mongosh -u "${MONGO_USERNAME}" -p "${MONGO_PASSWORD}"
            ```

            次に、以下のコマンドを実行してレプリカセットを初期化します。

            ```javascript
            rs.initiate({
                _id: "rs0",
                members: [
                    { _id: 0, host: "<public-ip-1>:<port-1>" },
                    { _id: 1, host: "<public-ip-2>:<port-2>" },
                    { _id: 2, host: "<public-ip-3>:<port-3>" },
                ]
            })
            ```

            `mongod.conf` で `replSetName` を変更した場合、`rs0` を設定した `replSetName` に変更する必要があることに注意してください。
    zh-CN:
        description: 高可用性的 MongoDB 副本集部署模板。
        readme: |-
            MongoDB 是一个开源的 NoSQL 数据库管理程序。NoSQL (不仅是 SQL) 被用作传统关系数据库的替代品。NoSQL 数据库对于处理大型分布式数据集非常有用。MongoDB 是一个可以管理面向文档的信息、存储或检索信息的工具。

            MongoDB 用于高容量数据存储，帮助组织在存储大量数据的同时仍能快速执行。组织也使用 MongoDB 的即席查询、索引、负载均衡、聚合、服务器端 JavaScript 执行等功能。

            ## 部署

            部署完成后，请按照以下步骤完成您的副本集设置：

            首先，在 "/etc/mongo/mongod.conf" 中将 "replSetName" 编辑为您实际的副本集名称。[更多信息，请参阅此文档。](https://www.mongodb.com/resources/products/compatibilities/deploying-a-mongodb-cluster-with-docker)

            然后，在配置编辑器中重新生成 "/etc/mongo-keyfile" 中的密钥作为您的密码。[更多信息，请参阅此文档。](https://www.mongodb.com/docs/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/)

            您可以使用以下命令生成一个安全的密钥：

            ```bash
            openssl rand -base64 756
            ```

            最后，在“终端”中运行 [`rs.initialize()`](https://www.mongodb.com/docs/manual/reference/method/rs.reconfigure/)：

            ```bash
            mongosh -u "${MONGO_USERNAME}" -p "${MONGO_PASSWORD}"
            ```

            然后运行以下命令来初始化副本集：

            ```javascript
            rs.initiate({
                _id: "rs0",
                members: [
                    { _id: 0, host: "<public-ip-1>:<port-1>" },
                    { _id: 1, host: "<public-ip-2>:<port-2>" },
                    { _id: 2, host: "<public-ip-3>:<port-3>" },
                ]
            })
            ```

            请注意，如果您在 `mongod.conf` 中更改了 `replSetName`，则应将 `rs0` 更改为您设置的 `replSetName`。
    zh-TW:
        description: 高可用性的 MongoDB 副本集部署模板。
        readme: |-
            MongoDB 是一個開源的 NoSQL 資料庫管理程式。NoSQL (不僅是 SQL) 被用作傳統關聯式資料庫的替代品。NoSQL 資料庫對於處理大型分散式資料集非常有用。MongoDB 是一個可以管理文件導向資訊、儲存或檢索資訊的工具。

            MongoDB 用於高容量資料儲存，幫助組織在儲存大量資料的同時仍能快速執行。組織也使用 MongoDB 的臨時查詢、索引、負載平衡、聚合、伺服器端 JavaScript 執行等功能。

            ## 部署

            部署完成後，請按照以下步驟完成您的副本集設定：

            首先，在 "/etc/mongo/mongod.conf" 中將 "replSetName" 編輯為您實際的副本集名稱。[更多資訊，請參閱此文件。](https://www.mongodb.com/resources/products/compatibilities/deploying-a-mongodb-cluster-with-docker)

            然後，在設定編輯器中重新生成 "/etc/mongo-keyfile" 中的金鑰作為您的密碼。[更多資訊，請參閱此文件。](https://www.mongodb.com/docs/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/)

            您可以使用以下指令產生一個安全的金鑰：

            ```bash
            openssl rand -base64 756
            ```

            最後，在「終端機」中執行 [`rs.initialize()`](https://www.mongodb.com/docs/manual/reference/method/rs.reconfigure/)：

            ```bash
            mongosh -u "${MONGO_USERNAME}" -p "${MONGO_PASSWORD}"
            ```

            然後執行以下指令來初始化副本集：

            ```javascript
            rs.initiate({
                _id: "rs0",
                members: [
                    { _id: 0, host: "<public-ip-1>:<port-1>" },
                    { _id: 1, host: "<public-ip-2>:<port-2>" },
                    { _id: 2, host: "<public-ip-3>:<port-3>" },
                ]
            })
            ```

            請注意，如果您在 `mongod.conf` 中變更了 `replSetName`，則應將 `rs0` 變更為您設定的 `replSetName`。
