version: '3.5' networks: frontend: driver: ${NETWORKS_DRIVER} backend: driver: ${NETWORKS_DRIVER} volumes: mysql: driver: ${VOLUMES_DRIVER} redis: driver: ${VOLUMES_DRIVER} smtp: driver: ${VOLUMES_DRIVER} phpmyadmin: driver: ${VOLUMES_DRIVER} docker-in-docker: driver: ${VOLUMES_DRIVER} services: ### Workspace Utilities ################################## workspace: restart: always build: context: ./workspace args: - LARADOCK_PHP_VERSION=${PHP_VERSION} - PUID=${PUID} - PGID=${PGID} - CHROME_DRIVER_VERSION=${WORKSPACE_CHROME_DRIVER_VERSION} - TZ=${TIMEZONE} - INSTALL_DOCKER_CLIENT=${WORKSPACE_INSTALL_DOCKER_CLIENT} - http_proxy - https_proxy - no_proxy volumes: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} - ./php-worker/supervisord.d:/etc/supervisord.d extra_hosts: - "dockerhost:${DOCKER_HOST_IP}" ports: - "127.0.0.1:${WORKSPACE_SSH_PORT}:22" tty: true environment: - PHP_IDE_CONFIG=${PHP_IDE_CONFIG} - DOCKER_HOST=tcp://docker-in-docker:2376 - DOCKER_TLS_VERIFY=1 - DOCKER_TLS_CERTDIR=/certs - DOCKER_CERT_PATH=/certs/client networks: - frontend - backend links: - docker-in-docker ### highcharts ########################################### highcharts: restart: always build: context: ./highcharts args: - PUID=${PUID} - PGID=${PGID} - TZ=${TIMEZONE} tty: true ports: - "127.0.0.1:${HIGHCHARTS_PORT}:8080" networks: - backend ### PHP-FPM ############################################## php-fpm: restart: always build: context: ./php-fpm args: - CHANGE_SOURCE=${CHANGE_SOURCE} - BASE_IMAGE_TAG_PREFIX=${PHP_FPM_BASE_IMAGE_TAG_PREFIX} - LARADOCK_PHP_VERSION=${PHP_VERSION} - INSTALL_BZ2=${PHP_FPM_INSTALL_BZ2} - INSTALL_ENCHANT=${PHP_FPM_INSTALL_ENCHANT} - INSTALL_GMP=${PHP_FPM_INSTALL_GMP} - INSTALL_SSH2=${PHP_FPM_INSTALL_SSH2} - INSTALL_XSL=${PHP_FPM_INSTALL_XSL} - INSTALL_IMAP=${PHP_FPM_INSTALL_IMAP} - INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH} - INSTALL_PHPREDIS=${PHP_FPM_INSTALL_PHPREDIS} - INSTALL_MEMCACHED=${PHP_FPM_INSTALL_MEMCACHED} - INSTALL_OPCACHE=${PHP_FPM_INSTALL_OPCACHE} - INSTALL_EXIF=${PHP_FPM_INSTALL_EXIF} - INSTALL_MYSQLI=${PHP_FPM_INSTALL_MYSQLI} - INSTALL_INTL=${PHP_FPM_INSTALL_INTL} - INSTALL_GHOSTSCRIPT=${PHP_FPM_INSTALL_GHOSTSCRIPT} - INSTALL_IMAGE_OPTIMIZERS=${PHP_FPM_INSTALL_IMAGE_OPTIMIZERS} - INSTALL_IMAGEMAGICK=${PHP_FPM_INSTALL_IMAGEMAGICK} - INSTALL_CALENDAR=${PHP_FPM_INSTALL_CALENDAR} - INSTALL_FAKETIME=${PHP_FPM_INSTALL_FAKETIME} - INSTALL_APCU=${PHP_FPM_INSTALL_APCU} - INSTALL_CACHETOOL=${PHP_FPM_INSTALL_CACHETOOL} - INSTALL_YAML=${PHP_FPM_INSTALL_YAML} - INSTALL_GETTEXT=${PHP_FPM_INSTALL_GETTEXT} - INSTALL_ADDITIONAL_LOCALES=${PHP_FPM_INSTALL_ADDITIONAL_LOCALES} - INSTALL_MYSQL_CLIENT=${PHP_FPM_INSTALL_MYSQL_CLIENT} - INSTALL_PING=${PHP_FPM_INSTALL_PING} - INSTALL_SSHPASS=${PHP_FPM_INSTALL_SSHPASS} - INSTALL_MAILPARSE=${PHP_FPM_INSTALL_MAILPARSE} - INSTALL_PCNTL=${PHP_FPM_INSTALL_PCNTL} - ADDITIONAL_LOCALES=${PHP_FPM_ADDITIONAL_LOCALES} - INSTALL_WKHTMLTOPDF=${PHP_FPM_INSTALL_WKHTMLTOPDF} - DOWNGRADE_OPENSSL_TLS_AND_SECLEVEL=${PHP_DOWNGRADE_OPENSSL_TLS_AND_SECLEVEL} - PUID=${PUID} - PGID=${PGID} - TZ=${TIMEZONE} - IMAGEMAGICK_VERSION=${PHP_FPM_IMAGEMAGICK_VERSION} - LOCALE=${PHP_FPM_DEFAULT_LOCALE} - INSTALL_DOCKER_CLIENT=${PHP_FPM_INSTALL_DOCKER_CLIENT} - http_proxy - https_proxy - no_proxy volumes: - ./php-fpm/php${PHP_VERSION}.ini:/usr/local/etc/php/php.ini - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} ports: - "${PHP_FPM_XDEBUG_PORT}:9003" expose: - "9000" extra_hosts: - "dockerhost:${DOCKER_HOST_IP}" environment: - PHP_IDE_CONFIG=${PHP_IDE_CONFIG} - DOCKER_HOST=tcp://docker-in-docker:2376 - DOCKER_TLS_VERIFY=1 - DOCKER_TLS_CERTDIR=/certs - DOCKER_CERT_PATH=/certs/client - FAKETIME=${PHP_FPM_FAKETIME} depends_on: - workspace networks: - backend links: - docker-in-docker ### PHP Worker ############################################ php-worker: restart: always build: context: ./php-worker args: - CHANGE_SOURCE=${CHANGE_SOURCE} - LARADOCK_PHP_VERSION=${PHP_VERSION} - INSTALL_BZ2=${PHP_WORKER_INSTALL_BZ2} - INSTALL_GD=${PHP_WORKER_INSTALL_GD} - INSTALL_IMAGEMAGICK=${PHP_WORKER_INSTALL_IMAGEMAGICK} - INSTALL_GMP=${PHP_WORKER_INSTALL_GMP} - INSTALL_BCMATH=${PHP_WORKER_INSTALL_BCMATH} - INSTALL_MEMCACHED=${PHP_WORKER_INSTALL_MEMCACHED} - INSTALL_ZIP_ARCHIVE=${PHP_WORKER_INSTALL_ZIP_ARCHIVE} - INSTALL_MYSQL_CLIENT=${PHP_WORKER_INSTALL_MYSQL_CLIENT} - INSTALL_AMQP=${PHP_WORKER_INSTALL_AMQP} - INSTALL_GHOSTSCRIPT=${PHP_WORKER_INSTALL_GHOSTSCRIPT} - INSTALL_REDIS=${PHP_WORKER_INSTALL_REDIS} - PUID=${PUID} - PGID=${PGID} - TZ=${TIMEZONE} - IMAGEMAGICK_VERSION=${PHP_WORKER_IMAGEMAGICK_VERSION} volumes: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} - ./php-worker/supervisord.d:/etc/supervisord.d depends_on: - workspace extra_hosts: - "dockerhost:${DOCKER_HOST_IP}" networks: - backend ### NGINX Server ######################################### nginx: restart: always build: context: ./nginx args: - CHANGE_SOURCE=${CHANGE_SOURCE} - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER} - PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT} - PUID=${PUID} - PGID=${PGID} - TZ=${TIMEZONE} - http_proxy - https_proxy - no_proxy volumes: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} - ${DATA_PATH_HOST}/logs/nginx:/var/log/nginx - ${NGINX_SITES_PATH}:/etc/nginx/sites-available - ${NGINX_SSL_PATH}:/etc/nginx/ssl ports: - "${NGINX_HOST_HTTP_PORT}:80" depends_on: - php-fpm networks: - frontend - backend labels: - traefik.port=80 - traefik.backend=nginx - traefik.frontend.rule=Host:opensem.docker.localhost - traefik.http.routers.nginx.rule=Host(`opensem.docker.localhost`) ### MySQL ################################################ mysql: restart: always build: context: ./mysql args: - MYSQL_VERSION=${MYSQL_VERSION} environment: - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - TZ=${TIMEZONE} volumes: - ${DATA_PATH_HOST}/mysql:/var/lib/mysql - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d ports: - "127.0.0.1:${MYSQL_PORT}:3306" networks: - backend ### MySQL ################################################ mysql-slave1: build: context: ./mysql-slave1 args: - MYSQL_VERSION=${MYSQL_VERSION} environment: - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - TZ=${TIMEZONE} volumes: - ${DATA_PATH_HOST}/mysql-slave1:/var/lib/mysql - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d ports: - "127.0.0.1:3307:3306" networks: - backend ### Redis ################################################ redis: restart: always build: ./redis volumes: - ${DATA_PATH_HOST}/redis:/data command: redis-server --requirepass ${REDIS_PASSWORD} ports: - "127.0.0.1:${REDIS_PORT}:6379" networks: - backend ### SMTP ################################################ smtp: restart: always build: ./smtp ports: - "${SMTP_PORT}:25" networks: - frontend - backend tty: true ### phpMyAdmin ########################################### phpmyadmin: build: ./phpmyadmin environment: - PMA_ARBITRARY=1 - MYSQL_USER=${PMA_USER} - MYSQL_PASSWORD=${PMA_PASSWORD} - MYSQL_ROOT_PASSWORD=${PMA_ROOT_PASSWORD} - MAX_EXECUTION_TIME=${PMA_MAX_EXECUTION_TIME} - MEMORY_LIMIT=${PMA_MEMORY_LIMIT} - UPLOAD_LIMIT=${PMA_UPLOAD_LIMIT} ports: - "127.0.0.1:${PMA_PORT}:80" depends_on: - "${PMA_DB_ENGINE}" networks: - frontend - backend ### Certbot ######################################### certbot: build: context: ./certbot volumes: - ./data/certbot/certs/:/var/certs - ./certbot/letsencrypt/:/var/www/letsencrypt environment: - CN="jardinenvie.com" - EMAIL="ludo@huma.net" networks: - frontend ### Docker-in-Docker ################################################ docker-in-docker: image: docker:19.03-dind environment: DOCKER_TLS_SAN: DNS:docker-in-docker privileged: true volumes: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER} - docker-in-docker:/certs/client expose: - 2375 networks: - backend ### Soketi ########################################### soketi: restart: unless-stopped image: 'quay.io/soketi/soketi:1.0-16-debian' ports: - '127.0.0.1:${SOKETI_PORT:-6001}:6001' - '127.0.0.1:${SOKETI_METRICS_SERVER_PORT:-9601}:9601' environment: - SOKETI_DEBUG=1 - SOKETI_DEFAULT_APP_ID=${PUSHER_APP_ID} - SOKETI_DEFAULT_APP_KEY=${PUSHER_APP_KEY} - SOKETI_DEFAULT_APP_SECRET=${PUSHER_APP_SECRET} - SOKETI_DEFAULT_APP_ENABLE_CLIENT_MESSAGES=true - DEFAULT_APP_USER_AUTHENTICATION=true extra_hosts: - "dockerhost:${DOCKER_HOST_IP}" networks: - backend - frontend links: - docker-in-docker ### Laravel Horizon ############################################ laravel-horizon: build: context: ./laravel-horizon args: - CHANGE_SOURCE=${CHANGE_SOURCE} - LARADOCK_PHP_VERSION=${PHP_VERSION} - INSTALL_BZ2=${LARAVEL_HORIZON_INSTALL_BZ2} - INSTALL_GD=${LARAVEL_HORIZON_INSTALL_GD} - INSTALL_GMP=${LARAVEL_HORIZON_INSTALL_GMP} - INSTALL_GNUPG=${LARAVEL_HORIZON_INSTALL_GNUPG} - INSTALL_LDAP=${LARAVEL_HORIZON_INSTALL_LDAP} - INSTALL_IMAGEMAGICK=${LARAVEL_HORIZON_INSTALL_IMAGEMAGICK} - INSTALL_PGSQL=${PHP_FPM_INSTALL_PGSQL} - INSTALL_ZIP_ARCHIVE=${LARAVEL_HORIZON_INSTALL_ZIP_ARCHIVE} - INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH} - INSTALL_MEMCACHED=${PHP_FPM_INSTALL_MEMCACHED} - INSTALL_SOCKETS=${LARAVEL_HORIZON_INSTALL_SOCKETS} - INSTALL_YAML=${LARAVEL_HORIZON_INSTALL_YAML} - INSTALL_CASSANDRA=${LARAVEL_HORIZON_INSTALL_CASSANDRA} - INSTALL_PHPREDIS=${LARAVEL_HORIZON_INSTALL_PHPREDIS} - INSTALL_MONGO=${LARAVEL_HORIZON_INSTALL_MONGO} - INSTALL_FFMPEG=${LARAVEL_HORIZON_INSTALL_FFMPEG} - INSTALL_AUDIOWAVEFORM=${LARAVEL_HORIZON_INSTALL_AUDIOWAVEFORM} - PUID=${PUID} - PGID=${PGID} - IMAGEMAGICK_VERSION=${LARAVEL_HORIZON_IMAGEMAGICK_VERSION} volumes: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER} - ./laravel-horizon/supervisord.d:/etc/supervisord.d depends_on: - workspace extra_hosts: - "dockerhost:${DOCKER_HOST_IP}" networks: - backend ### Meilisearch meilisearch: container_name: meilisearch image: getmeili/meilisearch:latest environment: - http_proxy - https_proxy - MEILI_MASTER_KEY=${MEILI_MASTER_KEY:-masterKey} # - MEILI_NO_ANALYTICS=${MEILI_NO_ANALYTICS:-true} # - MEILI_ENV=${MEILI_ENV:-development} # - MEILI_LOG_LEVEL # - MEILI_DB_PATH=${MEILI_DB_PATH:-/data.ms} ports: - ${MEILI_PORT:-7700}:7700 networks: - backend volumes: - ${DATA_PATH_HOST}/meili_data:/meili_data restart: unless-stopped