version: "3" services: ############# External services memcached: image: memcached:1.4.38 restart: unless-stopped mongodb: image: mongo:3.2.16 # Use WiredTiger in all environments, just like at edx.org command: mongod --smallfiles --nojournal --storageEngine wiredTiger restart: unless-stopped volumes: - ./data/mongodb:/data/db mysql: image: mysql:5.6.36 command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci restart: unless-stopped volumes: - ./data/mysql:/var/lib/mysql env_file: ./config/mysql/auth.env elasticsearch: image: elasticsearch:1.5.2 environment: - "ES_JAVA_OPTS=-Xms1g -Xmx1g" - "cluster.name=openedx" - "bootstrap.memory_lock=true" ulimits: memlock: soft: -1 hard: -1 restart: "unless-stopped" volumes: - ./data/elasticsearch:/usr/share/elasticsearch/data nginx: image: nginx:1.13 restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./config/nginx:/etc/nginx/conf.d/ - ./data/lms:/openedx/data/lms:ro - ./data/cms:/openedx/data/cms:ro - ./data/letsencrypt:/etc/letsencrypt/:ro rabbitmq: image: rabbitmq:3.6.10 volumes: - ./data/rabbitmq:/var/lib/rabbitmq # Simple SMTP server smtp: image: namshi/smtp restart: unless-stopped ############# Forum forum: image: regis/openedx-forum:hawthorn build: context: ./forum environment: API_KEY: "forumapikey" SEARCH_SERVER: "http://elasticsearch:9200" MONGOHQ_URL: "mongodb://mongodb/cs_comments_service" restart: unless-stopped depends_on: - elasticsearch - mongodb ############# LMS and CMS lms: image: regis/openedx:hawthorn build: context: ./openedx environment: SERVICE_VARIANT: lms restart: unless-stopped volumes: - ./config/openedx:/openedx/config - ./data/lms:/openedx/data depends_on: - elasticsearch - forum - memcached - mongodb - mysql - rabbitmq - smtp cms: image: regis/openedx:hawthorn build: context: ./openedx environment: SERVICE_VARIANT: cms restart: unless-stopped volumes: - ./config/openedx:/openedx/config - ./data/cms:/openedx/data depends_on: - memcached - mongodb - mysql - rabbitmq - smtp ############# LMS and CMS workers # We could probably create one service per queue here. For small instances, it is not necessary. lms_worker: image: regis/openedx:hawthorn build: context: ./openedx environment: SERVICE_VARIANT: lms command: ./manage.py lms celery worker --loglevel=info --hostname=edx.lms.core.default.%%h --maxtasksperchild 100 restart: unless-stopped environment: C_FORCE_ROOT: "1" # run celery tasks as root #nofear volumes: - ./config/openedx:/openedx/config - ./data/lms_worker:/openedx/data depends_on: - lms cms_worker: image: regis/openedx:hawthorn build: context: ./openedx environment: SERVICE_VARIANT: cms command: ./manage.py cms celery worker --loglevel=info --hostname=edx.cms.core.default.%%h --maxtasksperchild 100 restart: unless-stopped environment: C_FORCE_ROOT: "1" # run celery tasks as root #nofear volumes: - ./config/openedx:/openedx/config - ./data/cms_worker:/openedx/data depends_on: - cms