services: webapp: build: context: . dockerfile: Dockerfile image: pyrowman/nntmux extra_hosts: - 'host.docker.internal:host-gateway' ports: - '${APP_PORT:-80}:80' environment: TZ: ${APP_TIMEZONE} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:${APP_PORT:-80}"] interval: 10s timeout: 5s retries: 5 start_period: 30s env_file: - .env volumes: - 'install:/app/_install' - 'storage:/app/storage' networks: - nntmux depends_on: mariadb: condition: service_healthy redis: condition: service_healthy worker: command: > sh -c "php artisan tmux-ui:start & php artisan horizon" image: pyrowman/nntmux extra_hosts: - 'host.docker.internal:host-gateway' tty: true environment: TZ: ${APP_TIMEZONE} env_file: - .env volumes: - 'install:/app/_install' - 'storage:/app/storage' networks: - nntmux depends_on: webapp: condition: service_healthy scheduler: image: pyrowman/nntmux extra_hosts: - 'host.docker.internal:host-gateway' tty: true env_file: - .env environment: TZ: ${APP_TIMEZONE} volumes: - 'install:/app/_install' - 'storage:/app/storage' networks: - nntmux depends_on: webapp: condition: service_healthy command: > sh -c "while [ true ]; do php artisan schedule:run; sleep 60; done" mariadb: image: 'mariadb:12.3' ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: TZ: ${APP_TIMEZONE} MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_ROOT_HOST: '%' MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' command: --max_allowed_packet=128M --group_concat_max_len=16384 --max_connections=200 volumes: - 'mariadb:/var/lib/mysql' - './vendor/laravel/sail/database/mariadb/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh' networks: - nntmux healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s retries: 3 timeout: 5s start_period: 15s redis: image: 'redis:alpine' ports: - '${FORWARD_REDIS_PORT:-6379}:6379' environment: TZ: ${APP_TIMEZONE} volumes: - 'redis:/data' networks: - nntmux healthcheck: test: - CMD - redis-cli - ping retries: 3 timeout: 5s manticore: image: manticoresearch/manticore:28.4.4 profiles: - manticore environment: TZ: ${APP_TIMEZONE} EXTRA: 1 restart: always ports: - 9306:9306 - 9308:9308 ulimits: nproc: 65535 nofile: soft: 65535 hard: 65535 memlock: soft: -1 hard: -1 volumes: - 'manticore:/var/lib/manticore/data' - ./config/manticore.conf:/etc/manticoresearch/manticore.conf networks: - nntmux healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-P", "9306"] interval: 15s timeout: 5s retries: 3 start_period: 15s deploy: resources: limits: memory: 1g mailpit: image: 'axllent/mailpit:latest' ports: - '${FORWARD_MAILPIT_PORT:-1025}:1025' - '${FORWARD_MAILPIT_DASHBOARD_PORT:-8025}:8025' networks: - nntmux elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0 profiles: - elasticsearch environment: - TZ=${APP_TIMEZONE} - discovery.type=single-node - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ports: - 9200:9200 - 9300:9300 volumes: - elasticsearch:/usr/share/elasticsearch/data networks: - nntmux healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9200/_cluster/health"] interval: 15s timeout: 5s retries: 3 start_period: 30s deploy: resources: limits: memory: 1g networks: nntmux: driver: bridge volumes: mariadb: redis: elasticsearch: manticore: storage: resources: install: