docker-compose deploy replicaSet in standalone MongoDB cluster and with auth


經過兩天的折騰,終於實現了自己想要的效果,就是通過docker-compose 部署最新的mongodb replicaSet, 主要是為了測試 4.2 最新的多文檔事務,下面將整個步驟分享一下:

docker-compose.yml 內容如下:

version: '3.4'

services:
    mongo:
        container_name: mongodb
        image: mongo:latest
        hostname: mongodb
        volumes:
          - /data/mongodb/mongod.conf:/etc/mongod.conf
          - /data/mongodb/data/db/:/data/db/
          - /data/mongodb/data/log/:/var/log/mongodb/
          - /data/mongodb/initdb.d/:/docker-entrypoint-initdb.d/
        environment:
          - MONGO_INITDB_ROOT_USERNAME=root
          - MONGO_INITDB_ROOT_PASSWORD=123456
        ports:
            - "27017:27017"
        healthcheck:
            test: test $$(echo "rs.initiate().ok || rs.status().ok" | mongo -u root -p '123456' --quiet) -eq 1
            interval: 10s
            start_period: 30s
        command: ["--replSet", "rs0", "--bind_ip_all"]

  

說明:

1、 /data/mongodb/mongod.conf  文件需要提前建好,內容如下,主要是啟用驗證,如果不掛載這個文件,replicaset 是在裸奔的

     

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /data/db
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1


# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

security:
  authorization: enabled

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options:

#auditLog:

#snmp:

  

2、 /data/mongodb/initdb.d  此目錄下的腳本是用來初始化的,前提是沒有任何數據前執行,我在該目錄下創建了create-app-user.sh 來初始化自定義數據庫【yourdb】以及用戶名【yourAdmin】密碼【123456】,內容如下:

#!/usr/bin/env bash
echo "Creating mongo users..."

mongo admin -u root -p 123456 << EOF
db.createUser({user: 'admin', pwd: '123456', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]});
db.grantRolesToUser(
   "admin",
   [ "clusterAdmin" ]
);
EOF

mongo admin -u admin -p 123456 << EOF
use yourdb
db.createUser({user: 'yourdbAdmin', pwd: '123456', roles:[{role:'readWrite',db:'yourdb'}]})
EOF
echo "Mongo users created for yourdb."

 

3、可以用monog client 測試登錄:

   

mongo -u root -p 123456

 登錄成功后,是這個樣子滴:

執行 show dbs; 可以看到自己建了的數據庫,測試自己建了的用戶和密碼,可以使用:

mongo -u yourdbAdmin -p 123456 --authenticationDatabase yourdb

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM