Skip to content

Commit

Permalink
MongoDB supports non-root users (#1684)
Browse files Browse the repository at this point in the history
* MongoDB supports non-root users

Signed-off-by: skiffer-git <44203734@qq.com>

* Update component.go

* Update env-template.yaml

* Update docker-compose.yml

* Update environment.sh

* Update openim.yaml

* Update mongo-init.sh

---------

Signed-off-by: skiffer-git <44203734@qq.com>
Co-authored-by: Xinwei Xiong <3293172751@qq.com>
  • Loading branch information
skiffer-git and cubxxw committed Jan 4, 2024
1 parent d3047d7 commit 6764fa5
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 31 deletions.
16 changes: 12 additions & 4 deletions deployments/templates/env-template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -84,19 +84,27 @@ OPENIM_IP=${OPENIM_IP}
# Default: ZOOKEEPER_PORT=12181
ZOOKEEPER_PORT=${ZOOKEEPER_PORT}

# Port on which MongoDB service is running.
# MongoDB service port configuration.
# Default: MONGO_PORT=37017
# MONGO_PORT=${MONGO_PORT}

# Username to authenticate with the MongoDB service.
# Username for MongoDB admin user. Used for service authentication.
# Default: MONGO_USERNAME=root
# MONGO_USERNAME=${MONGO_USERNAME}

# Password to authenticate with the MongoDB service.
# Password for MongoDB admin user. Used for service authentication.
# Default: MONGO_PASSWORD=openIM123
MONGO_PASSWORD=${MONGO_PASSWORD}

# Name of the database in MongoDB to be used.
# Username for a regular OpenIM user in MongoDB.
# Default: MONGO_OPENIM_USERNAME=openIM
MONGO_OPENIM_USERNAME=${MONGO_OPENIM_USERNAME}

# Password for a regular OpenIM user in MongoDB.
# Default: MONGO_OPENIM_PASSWORD=openIM123456
MONGO_OPENIM_PASSWORD=${MONGO_OPENIM_PASSWORD}

# Specifies the database name to be used within MongoDB.
# Default: MONGO_DATABASE=openIM_v3
MONGO_DATABASE=${MONGO_DATABASE}

Expand Down
4 changes: 2 additions & 2 deletions deployments/templates/openim.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ mongo:
# Maximum connection pool size
address: [ ${MONGO_ADDRESS}:${MONGO_PORT} ]
database: ${MONGO_DATABASE}
username: ${MONGO_USERNAME}
password: ${MONGO_PASSWORD}
username: ${MONGO_OPENIM_USERNAME}
password: ${MONGO_OPENIM_PASSWORD}
maxPoolSize: ${MONGO_MAX_POOL_SIZE}

###################### Redis configuration information ######################
Expand Down
16 changes: 7 additions & 9 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ networks:
- subnet: '${DOCKER_BRIDGE_SUBNET:-172.28.0.0/16}'
gateway: '${DOCKER_BRIDGE_GATEWAY:-172.28.0.1}'



services:
mongodb:
image: mongo:${MONGODB_IMAGE_VERSION-6.0.2}
Expand All @@ -21,13 +23,15 @@ services:
- "${DATA_DIR:-./}/components/mongodb/data/db:/data/db"
- "${DATA_DIR:-./}/components/mongodb/data/logs:/data/logs"
- "${DATA_DIR:-./}/components/mongodb/data/conf:/etc/mongo"
- ./scripts/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh:ro
- "./scripts/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh:ro"
environment:
- TZ=Asia/Shanghai
- wiredTigerCacheSizeGB=1
- MONGO_INITDB_ROOT_USERNAME=${MONGO_USERNAME:-root}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD:-openIM123}
- MONGO_INITDB_DATABASE=${MONGO_DATABASE:-openIM_v3}
- MONGO_OPENIM_USERNAME=${MONGO_OPENIM_USERNAME:-openIM} # Non-root username
- MONGO_OPENIM_PASSWORD=${MONGO_OPENIM_PASSWORD:-openIM123456} # Non-root password
restart: always
networks:
server:
Expand Down Expand Up @@ -122,9 +126,9 @@ services:
server:
ipv4_address: ${OPENIM_WEB_NETWORK_ADDRESS:-172.28.0.7}

## Uncomment and configure the following services as needed
# Uncomment and configure the following services as needed
# openim-admin:
# image: ${IMAGE_REGISTRY:-ghcr.io/openimsdk}/openim-admin:toc-base-open-docker.35
# image: ${IMAGE_REGISTRY:-ghcr.io/openimsdk}/openim-admin-front:v3.4.0
# container_name: openim-admin
# restart: always
# ports:
Expand Down Expand Up @@ -167,12 +171,6 @@ services:
# hostname: grafana
# user: root
# restart: always
# environment:
# - GF_SECURITY_ALLOW_EMBEDDING=true
# - GF_SESSION_COOKIE_SAMESITE=none
# - GF_SESSION_COOKIE_SECURE=true
# - GF_AUTH_ANONYMOUS_ENABLED=true
# - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
# ports:
# - "${GRAFANA_PORT:-13000}:3000"
# volumes:
Expand Down
4 changes: 2 additions & 2 deletions pkg/common/db/unrelation/mongo.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,9 @@ func buildMongoURI() string {
maxPoolSize = fmt.Sprint(config.Config.Mongo.MaxPoolSize)
}

uriFormat := "mongodb://%s/%s?maxPoolSize=%s&authSource=admin"
uriFormat := "mongodb://%s/%s?maxPoolSize=%s"
if username != "" && password != "" {
uriFormat = "mongodb://%s:%s@%s/%s?maxPoolSize=%s&authSource=admin"
uriFormat = "mongodb://%s:%s@%s/%s?maxPoolSize=%s"
return fmt.Sprintf(uriFormat, username, password, address, database, maxPoolSize)
}
return fmt.Sprintf(uriFormat, address, database, maxPoolSize)
Expand Down
9 changes: 7 additions & 2 deletions scripts/install/environment.sh
Original file line number Diff line number Diff line change
Expand Up @@ -171,9 +171,14 @@ def "MONGO_URI" # MongoDB的URI
def "MONGO_PORT" "37017" # MongoDB的端口
def "MONGO_ADDRESS" "${DOCKER_BRIDGE_GATEWAY}" # MongoDB的地址
def "MONGO_DATABASE" "${DATABASE_NAME}" # MongoDB的数据库名
def "MONGO_USERNAME" "${OPENIM_USER}" # MongoDB的用户名
# MongoDB的密码
def "MONGO_USERNAME" "root" # MongoDB的管理员身份用户名
# MongoDB的管理员身份密码
readonly MONGO_PASSWORD=${MONGO_PASSWORD:-"${PASSWORD}"}
# Mongo OpenIM 身份用户名
def "MONGO_OPENIM_USERNAME" "openIM"
# Mongo OpenIM 身份密码
readonly MONGO_OPENIM_PASSWORD=${MONGO_OPENIM_PASSWORD:-'openIM123456'}

def "MONGO_MAX_POOL_SIZE" "100" # 最大连接池大小

###################### Object 配置信息 ######################
Expand Down
18 changes: 12 additions & 6 deletions scripts/mongo-init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,21 @@
# See the License for the specific language governing permissions and
# limitations under the License.

mongo -- "$MONGO_INITDB_DATABASE" <<EOF
db = db.getSiblingDB('admin')
set -e

mongosh <<EOF
use admin
db.auth('$MONGO_INITDB_ROOT_USERNAME', '$MONGO_INITDB_ROOT_PASSWORD')
db = db.getSiblingDB('$MONGO_INITDB_DATABASE')
db.createUser({
user: "$MONGO_USERNAME",
pwd: "$MONGO_PASSWORD",
user: "$MONGO_OPENIM_USERNAME",
pwd: "$MONGO_OPENIM_PASSWORD",
roles: [
{ role: 'root', db: '$MONGO_INITDB_DATABASE' }
// Assign appropriate roles here
{ role: 'readWrite', db: '$MONGO_INITDB_DATABASE' }
]
})
});
EOF

11 changes: 5 additions & 6 deletions tools/component/component.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,6 @@ import (
"strings"
"time"

"github.com/minio/minio-go/v7"
"github.com/redis/go-redis/v9"
"gopkg.in/yaml.v3"

"github.com/IBM/sarama"
"github.com/OpenIMSDK/tools/errs"
"github.com/go-zookeeper/zk"
Expand All @@ -38,6 +34,9 @@ import (
"github.com/openimsdk/open-im-server/v3/pkg/common/config"

"github.com/minio/minio-go/v7/pkg/credentials"
"github.com/minio/minio-go/v7"
"github.com/redis/go-redis/v9"
"gopkg.in/yaml.v3"
)

const (
Expand Down Expand Up @@ -172,10 +171,10 @@ func buildMongoURI() string {
mongodbHosts := strings.Join(config.Config.Mongo.Address, ",")

if username != "" && password != "" {
return fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d&authSource=admin",
return fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d",
username, password, mongodbHosts, database, maxPoolSize)
}
return fmt.Sprintf("mongodb://%s/%s?maxPoolSize=%d&authSource=admin",
return fmt.Sprintf("mongodb://%s/%s?maxPoolSize=%d",
mongodbHosts, database, maxPoolSize)
}

Expand Down

0 comments on commit 6764fa5

Please sign in to comment.