# =================================================================== # eXo Platform Community Edition - Docker Compose Configuration # Version: 7.1 # # WARNING: This configuration is designed for DEMONSTRATION PURPOSES ONLY # Not suitable for production environments without modifications # # Features included: # - eXo Platform 7.1.0 # - MySQL 8.4.3 database # - Elasticsearch 8.14.3 for search # - ONLYOFFICE Document Server 8.2 # - Nginx 1.26 reverse proxy # # =================================================================== # SECURITY NOTICE: # 1. This configuration uses default credentials that MUST be changed # 2. SSL/TLS is not configured - HTTPS is strongly recommended # 3. Database ports are exposed with default passwords # 4. JWT secrets are hardcoded in this configuration # # Before deployment: # 1. Add 'exoapp.local' to your hosts file (or configure proper DNS) # Example: 127.0.0.1 exoapp.local # 2. Configure firewall rules for ports 80 (HTTP) and 443 (HTTPS) # 3. Generate proper SSL certificates for production use # 4. Replace all default passwords and secrets # # Production recommendations: # 1. Use external secret management # 2. Implement proper backup strategy # 3. Configure resource limits # 4. Set up monitoring and logging # 5. Enable HTTPS with Let's Encrypt or other CA # =================================================================== name: "exo-community" services: web: image: nginx:1.28-alpine expose: - "80" ports: - "80:80" volumes: - ./conf/nginx.conf:/etc/nginx/nginx.conf:ro links: - exo - onlyoffice networks: default: aliases: - ${EXO_PROXY_VHOST:-exoapp.local} exo: image: exoplatform/exo-community:7.1.0 environment: EXO_PROXY_VHOST: ${EXO_PROXY_VHOST:-exoapp.local} EXO_PROXY_PORT: 80 EXO_DB_HOST: mysql EXO_PROXY_SSL: "false" EXO_DB_TYPE: mysql EXO_DB_NAME: exo EXO_DB_USER: exo EXO_DB_PASSWORD: my-secret-pw EXO_JVM_LOG_GC_ENABLED: "true" EXO_ES_HOST: es JAVA_OPTS: >- -Donlyoffice.documentserver.host=${EXO_PROXY_VHOST:-exoapp.local} -Donlyoffice.documentserver.schema=${EXO_PROXY_SCHEMA:-http} -Donlyoffice.documentserver.allowedhosts=localhost,${EXO_PROXY_VHOST:-exoapp.local} -Donlyoffice.documentserver.accessOnly=false -Donlyoffice.documentserver.secret=${ONLYOFFICE_JWT_SECRET:-d24079cba6ea93aab7a0efcde5143673e8e4cd32be51519112ca604cf4f9bbb6} volumes: - exo_data:/srv/exo - exo_codec:/etc/exo/codec:rw - exo_logs:/var/log/exo depends_on: - mysql - es - onlyoffice mysql: image: mysql:8.4.7 environment: MYSQL_ROOT_PASSWORD: my-super-secret-pw MYSQL_DATABASE: exo MYSQL_USER: exo MYSQL_PASSWORD: my-secret-pw volumes: - mysql_data:/var/lib/mysql es: image: elasticsearch:8.14.3 volumes: - search_data:/usr/share/elasticsearch/data:rw environment: - ES_JAVA_OPTS=-Xms2048m -Xmx2048m - node.name=exo - cluster.name=exo - cluster.initial_master_nodes=exo - network.host=_site_ - xpack.security.enabled=false onlyoffice: image: onlyoffice/documentserver:9.1 container_name: onlyoffice environment: JWT_ENABLED: "true" JWT_SECRET: ${ONLYOFFICE_JWT_SECRET:-d24079cba6ea93aab7a0efcde5143673e8e4cd32be51519112ca604cf4f9bbb6} SECURE_LINK_SECRET: fe6c434c36ee04031718b3c53b1d803739da880a142baf17b8f56dc2520877dd ALLOW_PRIVATE_IP_ADDRESS: "true" volumes: exo_data: exo_codec: exo_logs: mysql_data: search_data: