{"owner":"coze-dev","repo":"coze-studio","hasDocker":true,"hasCompose":true,"hasDockerfile":false,"composePath":"docker/docker-compose.yml","servicesCount":11,"services":[{"name":"mysql","image":"mysql:8.4.5","restart":"always","environment":["MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-root}","MYSQL_DATABASE=${MYSQL_DATABASE:-opencoze}","MYSQL_USER=${MYSQL_USER:-coze}","MYSQL_PASSWORD=${MYSQL_PASSWORD:-coze123}"],"volumes":["./data/mysql:/var/lib/mysql","./volumes/mysql/schema.sql:/docker-entrypoint-initdb.d/init.sql","./atlas/opencoze_latest_schema.hcl:/opencoze_latest_schema.hcl:ro"]},{"name":"redis","image":"bitnamilegacy/redis:8.0","restart":"always","command":"bash -c \"\n  /opt/bitnami/scripts/redis/setup.sh\n  # Set proper permissions for data directories\n  chown -R redis:redis /bitnami/redis/data\n  chmod g+s /bitnami/redis/data\n\n  exec /opt/bitnami/scripts/redis/entrypoint.sh /opt/bitnami/scripts/redis/run.sh\n\"\n","environment":["REDIS_AOF_ENABLED=${REDIS_AOF_ENABLED:-no}","REDIS_PORT_NUMBER=${REDIS_PORT_NUMBER:-6379}","REDIS_IO_THREADS=${REDIS_IO_THREADS:-4}","ALLOW_EMPTY_PASSWORD=${ALLOW_EMPTY_PASSWORD:-yes}"],"volumes":["./data/bitnami/redis:/bitnami/redis/data:rw,Z"]},{"name":"elasticsearch","image":"bitnamilegacy/elasticsearch:8.18.0","restart":"always","command":"bash -c \"\n  /opt/bitnami/scripts/elasticsearch/setup.sh\n  # Set proper permissions for data directories\n  chown -R elasticsearch:elasticsearch /bitnami/elasticsearch/data\n  chmod g+s /bitnami/elasticsearch/data\n\n  # Create plugin directory\n  mkdir -p /bitnami/elasticsearch/plugins;\n\n  # Unzip plugin to plugin directory and set correct permissions\n  echo 'Installing smartcn plugin...';\n  if [ ! -d /opt/bitnami/elasticsearch/plugins/analysis-smartcn ]; then\n\n    # Download plugin package locally\n    echo 'Copying smartcn plugin...';\n    cp /opt/bitnami/elasticsearch/analysis-smartcn.zip /tmp/analysis-smartcn.zip\n\n    elasticsearch-plugin install file:///tmp/analysis-smartcn.zip\n    if [[ \"$$?\" != \"0\" ]]; then\n      echo 'Plugin installation failed, exiting operation';\n      rm -rf /opt/bitnami/elasticsearch/plugins/analysis-smartcn\n      exit 1;\n    fi;\n    rm -f /tmp/analysis-smartcn.zip;\n  fi;\n\n  # Create marker file indicating plugin installation success\n  touch /tmp/es_plugins_ready;\n  echo 'Plugin installation successful, marker file created';\n\n  # Start initialization script in background\n  (\n    echo 'Waiting for Elasticsearch to be ready...'\n    until curl -s -f http://localhost:9200/_cat/health >/dev/null 2>&1; do\n      echo 'Elasticsearch not ready, waiting...'\n      sleep 2\n    done\n    echo 'Elasticsearch is ready!'\n\n    # Run ES initialization script\n    echo 'Running Elasticsearch initialization...'\n    sed 's/\\r$$//' /setup_es.sh > /setup_es_fixed.sh\n    chmod +x /setup_es_fixed.sh\n    /setup_es_fixed.sh --index-dir /es_index_schema\n    # Create marker file indicating initialization completion\n    touch /tmp/es_init_complete\n    echo 'Elasticsearch initialization completed successfully!'\n  ) &\n\n  # Start Elasticsearch\n  exec /opt/bitnami/scripts/elasticsearch/entrypoint.sh /opt/bitnami/scripts/elasticsearch/run.sh\n  echo -e \"⏳ Adjusting Elasticsearch disk watermark settings...\"\n\"\n","environment":["TEST=1"],"volumes":["./data/bitnami/elasticsearch:/bitnami/elasticsearch/data","./volumes/elasticsearch/elasticsearch.yml:/opt/bitnami/elasticsearch/config/my_elasticsearch.yml","./volumes/elasticsearch/analysis-smartcn.zip:/opt/bitnami/elasticsearch/analysis-smartcn.zip:rw,Z","./volumes/elasticsearch/setup_es.sh:/setup_es.sh","./volumes/elasticsearch/es_index_schema:/es_index_schema"]},{"name":"minio","image":"minio/minio:RELEASE.2025-06-13T11-33-47Z-cpuv1","restart":"always","environment":["MINIO_ROOT_USER=${MINIO_ROOT_USER:-minioadmin}","MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-minioadmin123}","MINIO_DEFAULT_BUCKETS=${STORAGE_BUCKET:-opencoze},${MINIO_DEFAULT_BUCKETS:-milvus}"],"volumes":["./data/minio:/data","./volumes/minio/default_icon/:/default_icon","./volumes/minio/official_plugin_icon/:/official_plugin_icon"]},{"name":"etcd","image":"bitnamilegacy/etcd:3.5","restart":"always","command":"bash -c \"\n  /opt/bitnami/scripts/etcd/setup.sh\n  # Set proper permissions for data and config directories\n  chown -R etcd:etcd /bitnami/etcd\n  chmod g+s /bitnami/etcd\n\n  exec /opt/bitnami/scripts/etcd/entrypoint.sh /opt/bitnami/scripts/etcd/run.sh\n\"\n","environment":["ETCD_AUTO_COMPACTION_MODE=revision","ETCD_AUTO_COMPACTION_RETENTION=1000","ETCD_QUOTA_BACKEND_BYTES=4294967296","ALLOW_NONE_AUTHENTICATION=yes"],"volumes":["./data/bitnami/etcd:/bitnami/etcd:rw,Z","./volumes/etcd/etcd.conf.yml:/opt/bitnami/etcd/conf/etcd.conf.yml:ro,Z"]},{"name":"milvus","image":"milvusdb/milvus:v2.5.10","restart":"always","command":"bash -c \"\n  # Set proper permissions for data directories\n  chown -R root:root /var/lib/milvus\n  chmod g+s /var/lib/milvus\n\n  exec milvus run standalone\n\"\n","environment":["ETCD_ENDPOINTS=etcd:2379","MINIO_ADDRESS=minio:9000","MINIO_BUCKET_NAME=${MINIO_DEFAULT_BUCKETS:-milvus}","MINIO_ACCESS_KEY_ID=${MINIO_ROOT_USER:-minioadmin}","MINIO_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD:-minioadmin123}","MINIO_USE_SSL=false","LOG_LEVEL=debug"],"volumes":["./data/milvus:/var/lib/milvus:rw,Z"],"depends_on":["etcd","minio"]},{"name":"nsqlookupd","image":"nsqio/nsq:v1.2.1","restart":"always","command":"/nsqlookupd"},{"name":"nsqd","image":"nsqio/nsq:v1.2.1","restart":"always","command":"/nsqd --lookupd-tcp-address=nsqlookupd:4160 --broadcast-address=nsqd","depends_on":["nsqlookupd"]},{"name":"nsqadmin","image":"nsqio/nsq:v1.2.1","restart":"always","command":"/nsqadmin --lookupd-http-address=nsqlookupd:4161","depends_on":["nsqlookupd"]},{"name":"coze-server","image":"cozedev/coze-studio-server:latest","restart":"always","command":"/app/opencoze","volumes":[".env:/app/.env","../backend/conf:/app/resources/conf"],"depends_on":["mysql","redis","elasticsearch","minio","milvus"]},{"name":"coze-web","image":"cozedev/coze-studio-web:latest","restart":"always","ports":["${WEB_LISTEN_ADDR:-8888}:80"],"volumes":["./nginx/nginx.conf:/etc/nginx/nginx.conf:ro","./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf:ro"],"depends_on":["coze-server"]}],"exposedPorts":["8888"],"dockerRunCommand":"docker run -d --name coze-studio -p 8888:8888 --restart always cozedev/coze-studio-server:latest","podmanRunCommand":"podman run -d --name coze-studio -p 8888:8888 --restart always cozedev/coze-studio-server:latest","skopeoInspectCommand":"skopeo inspect docker://docker.io/cozedev/coze-studio-server:latest","orasPullCommand":"oras pull cozedev/coze-studio-server:latest","registryMeta":{"provider":"dockerhub","image":"cozedev/coze-studio-server","canonicalImage":"docker.io/cozedev/coze-studio-server:latest","latestTag":"latest","cliCommands":{"dockerRun":"docker run -d --name coze-studio -p 8888:8888 --restart always cozedev/coze-studio-server:latest","dockerPull":"docker pull cozedev/coze-studio-server:latest","podmanRun":"podman run -d --name coze-studio -p 8888:8888 --restart always cozedev/coze-studio-server:latest","skopeoInspect":"skopeo inspect docker://docker.io/cozedev/coze-studio-server:latest","orasPull":"oras pull cozedev/coze-studio-server:latest","composeYaml":"services:\n  coze-studio:\n    image: cozedev/coze-studio-server:latest\n    restart: unless-stopped\n    ports:\n      - \"8888:8888\""}}}