112 lines
4.2 KiB
YAML
112 lines
4.2 KiB
YAML
services:
|
|
mongodb-fix-permission-container:
|
|
image: docker.io/mongodb/mongodb-community-server:${MONGODB_VERSION:-8.2}-ubi8
|
|
restart: on-failure
|
|
user: "0"
|
|
volumes:
|
|
- ${MONGODB_HOST_PATH:-mongodb_data}:/data/db:rw
|
|
environment:
|
|
MONGODB_USER_ID: ${MONGODB_USER_ID:-1001}
|
|
entrypoint: |
|
|
sh -xc '
|
|
owner="$(stat -c %u /data/db)";
|
|
# for fresh installs
|
|
if [ "$$owner" != "$$MONGODB_USER_ID" ]; then
|
|
echo "=====> Fixing directory ownership to uid $$MONGODB_USER_ID"
|
|
chown -R "$$MONGODB_USER_ID" /data/db;
|
|
else echo "=====> Nothing to do"; fi;
|
|
'
|
|
# TODO: add user creation here
|
|
mongodb-init-container:
|
|
image: docker.io/mongodb/mongodb-community-server:${MONGODB_VERSION:-8.2}-ubi8
|
|
restart: on-failure
|
|
# depends_on:
|
|
# mongodb:
|
|
# condition: service_healthy
|
|
user: "0"
|
|
environment:
|
|
MONGODB_REPLICA_SET_NAME: ${MONGODB_REPLICA_SET_NAME:-rs0}
|
|
MONGODB_PORT_NUMBER: ${MONGODB_PORT_NUMBER:-27017}
|
|
MONGODB_URI: ${MONGODB_URI:-mongodb://mongodb:27017/?directConnection=true}
|
|
MONGODB_ADVERTISED_HOSTNAME: ${MONGODB_ADVERTISED_HOSTNAME:-mongodb}
|
|
volumes:
|
|
- ${MONGODB_HOST_PATH:-mongodb_data}:/data/db:rw
|
|
logging:
|
|
driver: "json-file"
|
|
labels:
|
|
container_tag: "${COMPOSE_PROJECT_NAME:-rocketchat}#mongodb-init-container"
|
|
entrypoint: |
|
|
sh -xc '
|
|
echo "=====> Waiting for MongoDB to be healthy before initiating replica set...";
|
|
until mongosh "$$MONGODB_URI" --eval "db.adminCommand(\"ping\")" >/dev/null 2>&1; do
|
|
echo "=====> MongoDB not ready yet, retrying in 5 seconds...";
|
|
sleep 5;
|
|
done;
|
|
echo "=====> Initiating ReplSet $$MONGODB_REPLICA_SET_NAME at $$MONGODB_ADVERTISED_HOSTNAME:$$MONGODB_PORT_NUMBER...";
|
|
mongosh "$$MONGODB_URI" --eval "rs.initiate({_id: \"$$MONGODB_REPLICA_SET_NAME\", members: [{ _id: 0, host: \"$$MONGODB_ADVERTISED_HOSTNAME:$$MONGODB_PORT_NUMBER\" }]})";
|
|
echo "=====> Initiating ReplSet done...";
|
|
'
|
|
|
|
mongodb:
|
|
image: docker.io/mongodb/mongodb-community-server:${MONGODB_VERSION:-8.2}-ubi8
|
|
restart: always
|
|
# depends_on:
|
|
# mongodb-fix-permission-container:
|
|
# condition: service_completed_successfully
|
|
volumes:
|
|
- ${MONGODB_HOST_PATH:-mongodb_data}:/data/db:rw
|
|
user: "${MONGODB_USER_ID:-1001}"
|
|
entrypoint:
|
|
- sh
|
|
- -ec
|
|
- |
|
|
echo "=====> Waiting for /data/db to be owned by uid=$$MONGODB_USER_ID (mongodb user) ...";
|
|
for i in $(seq 1 60); do
|
|
owner="$(stat -c %u /data/db 2>/dev/null || true)";
|
|
if [ "$$owner" = "$$MONGODB_USER_ID" ]; then
|
|
echo "=====> /data/db ownership OK ($$owner) - starting MongoDB";
|
|
exec mongod --replSet "$$MONGODB_REPLICA_SET_NAME" --bind_ip_all;
|
|
fi;
|
|
echo "=====> /data/db owner is '$$owner' (expected $$MONGODB_USER_ID), retrying in 5 seconds...";
|
|
sleep 5;
|
|
done;
|
|
echo "=====> Giving up waiting for /data/db ownership after 5 minutes";
|
|
exit 1
|
|
environment:
|
|
MONGODB_USER_ID: ${MONGODB_USER_ID:-1001}
|
|
MONGODB_REPLICA_SET_NAME: ${MONGODB_REPLICA_SET_NAME:-rs0}
|
|
MONGODB_PORT_NUMBER: ${MONGODB_PORT_NUMBER:-27017}
|
|
MONGODB_ADVERTISED_HOSTNAME: ${MONGODB_ADVERTISED_HOSTNAME:-mongodb}
|
|
ALLOW_EMPTY_PASSWORD: ${ALLOW_EMPTY_PASSWORD:-yes}
|
|
logging:
|
|
driver: "json-file"
|
|
labels:
|
|
container_tag: "${COMPOSE_PROJECT_NAME:-rocketchat}#mongodb"
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- mongosh
|
|
- "mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_PORT_NUMBER:-27017}/?directConnection=true"
|
|
- --eval
|
|
- '"db.adminCommand(''ping'')"'
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 10
|
|
start_period: 30s
|
|
ports:
|
|
- "${MONGODB_BIND_IP:-127.0.0.1}:${MONGODB_PORT_NUMBER:-27017}:${MONGODB_PORT_NUMBER:-27017}"
|
|
|
|
mongodb-exporter:
|
|
image: docker.io/percona/mongodb_exporter:${MONGODB_EXPORTER_VERSION:-0.44.0}
|
|
depends_on:
|
|
- mongodb
|
|
expose:
|
|
- 9216
|
|
command:
|
|
- --mongodb.uri=${MONGODB_URI:-mongodb://mongodb:27017}
|
|
- --collect-all
|
|
- --compatible-mode
|
|
|
|
volumes:
|
|
mongodb_data: {driver: local}
|