From dee12fc12b203e068dfc433adf42f433a28f3cc0 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 10 Apr 2024 11:48:37 +0800 Subject: [PATCH] Optimize Docker configuration and script. --- docker-compose-1.yml | 298 ---------------------------------------- docker-compose.yml | 2 +- scripts/create-topic.sh | 47 +++++-- scripts/mongo-init.sh | 36 +++-- 4 files changed, 67 insertions(+), 316 deletions(-) delete mode 100644 docker-compose-1.yml diff --git a/docker-compose-1.yml b/docker-compose-1.yml deleted file mode 100644 index ed852fd29..000000000 --- a/docker-compose-1.yml +++ /dev/null @@ -1,298 +0,0 @@ -#fixme Clone openIM Server project before using docker-compose,project address:https://github.com/openimsdk/open-im-server.git -# The command that triggers this file to pull the image is "docker compose up -f" -version: '3' - -networks: - server: - driver: bridge - ipam: - driver: default - config: - - 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} - ports: - - "${MONGO_PORT:-37017}:27017" - container_name: mongo - command: ["/bin/bash", "-c", "/docker-entrypoint-initdb.d/mongo-init.sh || true; docker-entrypoint.sh mongod --wiredTigerCacheSizeGB 1 --auth"] - volumes: - - "${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" - 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: - ipv4_address: ${MONGO_NETWORK_ADDRESS:-172.28.0.2} - - redis: - image: redis:${REDIS_IMAGE_VERSION:-7.0.0} - container_name: redis - ports: - - "${REDIS_PORT:-16379}:6379" - volumes: - - "${DATA_DIR:-./}/components/redis/data:/data" - - "${DATA_DIR:-./}/components/redis/config/redis.conf:/usr/local/redis/config/redis.conf" - environment: - TZ: Asia/Shanghai - restart: always - sysctls: - net.core.somaxconn: 1024 - command: redis-server --requirepass ${REDIS_PASSWORD:-openIM123} --appendonly yes - networks: - server: - ipv4_address: ${REDIS_NETWORK_ADDRESS:-172.28.0.3} - - zookeeper: - image: bitnami/zookeeper:${ZOOKEEPER_IMAGE_VERSION:-3.8} - container_name: zookeeper - ports: - - "${ZOOKEEPER_PORT:-12181}:2181" - volumes: - - "/etc/localtime:/etc/localtime" - environment: - - ALLOW_ANONYMOUS_LOGIN=yes - - TZ="Asia/Shanghai" - restart: always - networks: - server: - ipv4_address: ${ZOOKEEPER_NETWORK_ADDRESS:-172.28.0.5} - - kafka: - image: 'bitnami/kafka:${KAFKA_IMAGE_VERSION:-3.5.1}' - container_name: kafka - restart: always - user: ${KAFKA_USER:-root} - ports: - - "${KAFKA_PORT:-19094}:9094" - volumes: - - ./scripts/create-topic.sh:/opt/bitnami/kafka/create-topic.sh - - "${DATA_DIR:-./}/components/kafka:/bitnami/kafka" - command: > - bash -c "/opt/bitnami/scripts/kafka/run.sh & sleep 5; /opt/bitnami/kafka/create-topic.sh; wait" - environment: - - TZ=Asia/Shanghai - - KAFKA_CFG_NODE_ID=0 - - KAFKA_CFG_PROCESS_ROLES=controller,broker - - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@:9093 - - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094 - - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://${DOCKER_BRIDGE_GATEWAY:-172.28.0.1}:${KAFKA_PORT:-19094} - # - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://127.0.0.1:${KAFKA_PORT:-19094} # Mac Deployment - - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT - - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER - networks: - server: - ipv4_address: ${KAFKA_NETWORK_ADDRESS:-172.28.0.4} - - minio: - image: minio/minio:${MINIO_IMAGE_VERSION:-RELEASE.2024-01-11T07-46-16Z} - ports: - - "${MINIO_PORT:-10005}:9000" - - "9090:9090" - container_name: minio - volumes: - - "${DATA_DIR:-./}/components/mnt/data:/data" - - "${DATA_DIR:-./}/components/mnt/config:/root/.minio" - environment: - MINIO_ROOT_USER: "${MINIO_ACCESS_KEY:-root}" - MINIO_ROOT_PASSWORD: "${MINIO_SECRET_KEY:-openIM123}" - restart: always - command: minio server /data --console-address ':9090' - networks: - server: - ipv4_address: ${MINIO_NETWORK_ADDRESS:-172.28.0.6} - - openim-web: - image: ${IMAGE_REGISTRY:-ghcr.io/openimsdk}/openim-web:${OPENIM_WEB_IMAGE_VERSION:-v3.5.0-docker} - container_name: openim-web - platform: linux/amd64 - restart: always - ports: - - "${OPENIM_WEB_PORT:-11001}:80" - networks: - server: - ipv4_address: ${OPENIM_WEB_NETWORK_ADDRESS:-172.28.0.7} - - openim-admin: - # https://github.com/openimsdk/open-im-server/issues/1662 - image: ${IMAGE_REGISTRY:-ghcr.io/openimsdk}/openim-admin:${ADMIN_FRONT_VERSION:-toc-base-open-docker.35} - container_name: openim-admin - platform: linux/amd64 - restart: always - ports: - - "${OPENIM_ADMIN_FRONT_PORT:-11002}:80" - networks: - server: - ipv4_address: ${OPENIM_ADMIN_FRONT_NETWORK_ADDRESS:-172.28.0.13} - - prometheus: - image: prom/prometheus - container_name: prometheus - hostname: prometheus - restart: always - volumes: - - "${DATA_DIR:-./}/config/instance-down-rules.yml:/etc/prometheus/instance-down-rules.yml" - - "${DATA_DIR:-./}/config/prometheus.yml:/etc/prometheus/prometheus.yml" - ports: - - "${PROMETHEUS_PORT:-19090}:9090" - networks: - server: - ipv4_address: ${PROMETHEUS_NETWORK_ADDRESS:-172.28.0.10} - - alertmanager: - image: prom/alertmanager - container_name: alertmanager - hostname: alertmanager - restart: always - volumes: - - ${DATA_DIR:-./}/config/alertmanager.yml:/etc/alertmanager/alertmanager.yml - - ${DATA_DIR:-./}/config/email.tmpl:/etc/alertmanager/email.tmpl - ports: - - "${ALERT_MANAGER_PORT:-19093}:9093" - networks: - server: - ipv4_address: ${ALERT_MANAGER_NETWORK_ADDRESS:-172.28.0.14} - - grafana: - image: grafana/grafana - container_name: grafana - hostname: grafana - user: root - restart: always - ports: - - "${GRAFANA_PORT:-13000}:3000" - volumes: - - "${DATA_DIR:-./}/components/grafana:/var/lib/grafana" - networks: - server: - ipv4_address: ${GRAFANA_NETWORK_ADDRESS:-172.28.0.11} - - node-exporter: - image: quay.io/prometheus/node-exporter - container_name: node-exporter - hostname: node-exporter - restart: always - ports: - - "${NODE_EXPORTER_PORT:-19100}:9100" - networks: - server: - ipv4_address: ${NODE_EXPORTER_NETWORK_ADDRESS:-172.28.0.12} - -### Source code deployment does not require pulling the following mirrors - - # openim-server: - # image: ${IMAGE_REGISTRY:-ghcr.io/openimsdk}/openim-server:${SERVER_IMAGE_VERSION:-main} - # container_name: openim-server - # ports: - # - "${OPENIM_WS_PORT:-10001}:${OPENIM_WS_PORT:-10001}" - # - "${API_OPENIM_PORT:-10002}:${API_OPENIM_PORT:-10002}" - # - "${API_PROM_PORT:-20100}:${API_PROM_PORT:-20100}" - # - "${USER_PROM_PORT:-20110}:${USER_PROM_PORT:-20110}" - # - "${FRIEND_PROM_PORT:-20120}:${FRIEND_PROM_PORT:-20120}" - # - "${MESSAGE_PROM_PORT:-20130}:${MESSAGE_PROM_PORT:-20130}" - # - "${MSG_GATEWAY_PROM_PORT:-20140}:${MSG_GATEWAY_PROM_PORT:-20140}" - # - "${GROUP_PROM_PORT:-20150}:${GROUP_PROM_PORT:-20150}" - # - "${AUTH_PROM_PORT:-20160}:${AUTH_PROM_PORT:-20160}" - # - "${PUSH_PROM_PORT:-20170}:${PUSH_PROM_PORT:-20170}" - # - "${CONVERSATION_PROM_PORT:-20230}:${CONVERSATION_PROM_PORT:-20230}" - # - "${RTC_PROM_PORT:-21300}:${RTC_PROM_PORT:-21300}" - # - "${THIRD_PROM_PORT:-21301}:${THIRD_PROM_PORT:-21301}" - # - "21400-21403:21400-21403" - # healthcheck: - # test: ["CMD", "/openim/openim-server/scripts/check-all.sh"] - # interval: 120s - # timeout: 30s - # retries: 5 - # env_file: - # - .env - # environment: - # - OPENIM_IP=${OPENIM_IP:-127.0.0.1} - # volumes: - # - "${DATA_DIR:-./}/openim-server/logs:/openim/openim-server/logs" - # - "${DATA_DIR:-./}/openim-server/_output/logs:/openim/openim-server/_output/logs" - # - "${DATA_DIR:-./}/openim-server/config:/openim/openim-server/config" - # restart: always - # depends_on: - # - kafka - # - mysql - # - mongodb - # - redis - # - minio - # logging: - # driver: json-file - # options: - # max-size: "1g" - # max-file: "2" - # networks: - # server: - # ipv4_address: ${OPENIM_SERVER_NETWORK_ADDRESS:-172.28.0.8} - - ### TODO: mysql is required to deploy the openim-chat component - # mysql: - # image: mysql:${MYSQL_IMAGE_VERSION:-5.7} - # platform: linux/amd64 - # ports: - # - "${MYSQL_PORT:-13306}:3306" - # container_name: mysql - # volumes: - # - "${DATA_DIR:-./}/components/mysql/data:/var/lib/mysql" - # - "/etc/localtime:/etc/localtime" - # environment: - # MYSQL_ROOT_PASSWORD: "${MYSQL_PASSWORD:-openIM123}" - # restart: always - # networks: - # server: - # ipv4_address: ${MYSQL_NETWORK_ADDRESS:-172.28.0.15} - - # openim-chat: - # image: ${IMAGE_REGISTRY:-ghcr.io/openimsdk}/openim-chat:${CHAT_IMAGE_VERSION:-main} - # container_name: openim-chat - # healthcheck: - # test: ["CMD", "/openim/openim-chat/scripts/check_all.sh"] - # interval: 60s - # timeout: 30s - # retries: 5 - # env_file: - # - .env - # environment: - # - ZOOKEEPER_ADDRESS=${DOCKER_BRIDGE_GATEWAY:-172.28.0.1} - # - ZOOKEEPER_PORT=${ZOOKEEPER_PORT:-12181} - # - OPENIM_SERVER_ADDRESS=http://${OPENIM_SERVER_ADDRESS:-172.28.0.1} - # - API_OPENIM_PORT=${API_OPENIM_PORT:-10002} - # - MYSQL_ADDRESS=${DOCKER_BRIDGE_GATEWAY:-172.28.0.1} - # - MYSQL_PORT=${MYSQL_PORT:-13306} - # - REDIS_ADDRESS=${DOCKER_BRIDGE_GATEWAY:-172.28.0.1} - # - REDIS_PORT=${REDIS_PORT:-16379} - # ports: - # - "${OPENIM_CHAT_API_PORT:-10008}:10008" - # - "${OPENIM_ADMIN_API_PORT:-10009}:10009" - # volumes: - # - "${DATA_DIR:-./}/components/openim-chat/logs:/openim/openim-chat/logs" - # - "${DATA_DIR:-./}/components/openim-chat/_output/logs:/openim/openim-chat/_output/logs" - # - "${DATA_DIR:-./}/components/openim-chat/config:/openim/openim-chat/config" - # restart: always - # # user: root:root - # depends_on: - # - mysql - # - kafka - # - redis - # - zookeeper - # logging: - # driver: json-file - # options: - # max-size: "1g" - # max-file: "2" - # networks: - # server: - # ipv4_address: ${OPENIM_CHAT_NETWORK_ADDRESS:-172.28.0.9} diff --git a/docker-compose.yml b/docker-compose.yml index b263388e0..ff449ae2f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ services: ports: - "37017:27017" container_name: mongo - command: ["/bin/bash", "-c", "/docker-entrypoint-initdb.d/mongo-init.sh || true; docker-entrypoint.sh mongod --wiredTigerCacheSizeGB 1 --auth"] + command: ["/bin/bash", "-c", "/docker-entrypoint-initdb.d/mongo-init.sh; docker-entrypoint.sh mongod --wiredTigerCacheSizeGB 1 --auth"] volumes: - "${DATA_DIR}/components/mongodb/data/db:/data/db" - "${DATA_DIR}/components/mongodb/data/logs:/data/logs" diff --git a/scripts/create-topic.sh b/scripts/create-topic.sh index 5c291ff08..ea9ae56fd 100755 --- a/scripts/create-topic.sh +++ b/scripts/create-topic.sh @@ -14,14 +14,45 @@ # limitations under the License. # Wait for Kafka to be ready -until /opt/bitnami/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092; do - echo "Waiting for Kafka to be ready..." - sleep 2 + +#!/bin/bash + +KAFKA_SERVER=localhost:9092 + +MAX_ATTEMPTS=300 +attempt_num=1 + +echo "Waiting for Kafka to be ready..." + +# 尝试连接Kafka服务,最多重试MAX_ATTEMPTS次 +until /opt/bitnami/kafka/bin/kafka-topics.sh --list --bootstrap-server $KAFKA_SERVER; do + echo "Attempt $attempt_num of $MAX_ATTEMPTS: Kafka not ready yet..." + if [ $attempt_num -eq $MAX_ATTEMPTS ]; then + echo "Kafka not ready after $MAX_ATTEMPTS attempts, exiting" + exit 1 + fi + attempt_num=$((attempt_num+1)) + sleep 1 done -# Create topics -/opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 8 --topic latestMsgToRedis -/opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 8 --topic msgToPush -/opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 8 --topic offlineMsgToMongoMysql +echo "Kafka is ready. Creating topics..." + + +topics=("toRedis" "toMongo" "toPush") +partitions=8 +replicationFactor=1 + +for topic in "${topics[@]}"; do + if /opt/bitnami/kafka/bin/kafka-topics.sh --create \ + --bootstrap-server $KAFKA_SERVER \ + --replication-factor $replicationFactor \ + --partitions $partitions \ + --topic $topic + then + echo "Topic $topic created." + else + echo "Failed to create topic $topic." + fi +done -echo "Topics created." \ No newline at end of file +echo "All topics created or attempted." diff --git a/scripts/mongo-init.sh b/scripts/mongo-init.sh index 41d9ca0aa..01199c480 100755 --- a/scripts/mongo-init.sh +++ b/scripts/mongo-init.sh @@ -12,19 +12,37 @@ # See the License for the specific language governing permissions and # limitations under the License. -set -e - mongosh <