299 lines
10 KiB
YAML
299 lines
10 KiB
YAML
#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@<your_host>: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}
|