--- ## ## ------------------------- ## | D E V I L S T A C K | ## ------------------------- ## ## Local LAMP/LEMP stack ## ## ## ${VARIABLE:-default} will evaluate to default if VARIABLE is unset or empty. ## ${VARIABLE-default} will evaluate to default only if VARIABLE is unset. ## ## ## -- DO NOT EDIT THIS FILE -- ## ## Copy 'docker-compose.override.yml-example' to 'docker-compose.override.yml' ## and edit this file with your custom changes (override or even new services). ## ## Edit '.env' for configuration. ## ## If '.env' does not exist, copy 'env-example' to '.env' ## $ cp env-example .env ## version: '2.3' ################################################################################ # SERVICES ################################################################################ services: # ------------------------------------------------------------ # Bind (DNS Server) # ------------------------------------------------------------ bind: image: cytopia/bind:alpine-0.35 hostname: bind restart: always ports: # [local-machine:]local-port:docker-port - "${LOCAL_LISTEN_ADDR}${HOST_PORT_BIND:-1053}:53/tcp" - "${LOCAL_LISTEN_ADDR}${HOST_PORT_BIND:-1053}:53/udp" environment: ## ## Debug? ## - DEBUG_ENTRYPOINT=${DEBUG_ENTRYPOINT:-2} ## ## Memory consumption ## - MAX_CACHE_SIZE=${BIND_MAX_CACHE_SIZE:-90%} ## ## Bind wildcard/host settings ## - DNS_A=*.${TLD_SUFFIX:-loc}=127.0.0.1,${EXTRA_HOSTS:-} ## ## Forwarding ## - DNS_FORWARDER=${BIND_DNS_RESOLVER:-8.8.8.8,8.8.4.4} ## ## Security ## - DNSSEC_VALIDATE=${BIND_DNSSEC_VALIDATE:-no} ## ## Time settings ## - TTL_TIME=${BIND_TTL_TIME} - REFRESH_TIME=${BIND_REFRESH_TIME} - RETRY_TIME=${BIND_RETRY_TIME} - EXPIRY_TIME=${BIND_EXPIRY_TIME} - MAX_CACHE_TIME=${BIND_MAX_CACHE_TIME} ## ## Query log ## - DOCKER_LOGS=${BIND_LOG_DNS_QUERIES} dns: - 127.0.0.1 # MacOS and Windows have this by default, this hack also allows it for Linux extra_hosts: docker.for.lin.host.internal: 172.16.238.1 docker.for.lin.localhost: 172.16.238.1 networks: app_net: ipv4_address: 172.16.238.100 # ------------------------------------------------------------ # PHP # ------------------------------------------------------------ php: image: devilbox/php-fpm:${PHP_SERVER}-work-release-0.150 hostname: php ## ## All .env variables ## ## Source all variables defined in .env ## This also makes any custom variable available in each PHP/HHVM container ## env_file: - ./.env environment: ## ## Supervisord Management (to connect to HTTPD supvervisord) ## - SVCTL_LISTEN_PORT=9001 - SVCTL_USER=${DEVILBOX_HTTPD_MGMT_USER:-supervisor} - SVCTL_PASS=${DEVILBOX_HTTPD_MGMT_PASS:-mypassword} ## ## Debug/Logging ## - DEBUG_ENTRYPOINT=${DEBUG_ENTRYPOINT:-2} - DOCKER_LOGS ## ## Tools ## - COMPOSER_MEMORY_LIMIT=-1 ## ## UserID and GroupID ## - NEW_UID - NEW_GID ## ## Adjust timezone ## - TIMEZONE ## ## Enable/Disable PHP Modules ## - ENABLE_MODULES=${PHP_MODULES_ENABLE} - DISABLE_MODULES=${PHP_MODULES_DISABLE} ## ## Mail-catching ## - ENABLE_MAIL=${PHP_MAIL_CATCH_ALL:-2} ## ## Enable 127.0.0.1 Port-forwarding ## - FORWARD_PORTS_TO_LOCALHOST=80:httpd:80,443:httpd:443,3306:mysql:3306,5432:pgsql:5432,6379:redis:6379,11211:memcd:11211,27017:mongo:27017 ## ## MySQL Backups ## - MYSQL_BACKUP_USER=root - MYSQL_BACKUP_PASS=${MYSQL_ROOT_PASSWORD} - MYSQL_BACKUP_HOST=mysql dns: - 172.16.238.100 # MacOS and Windows have this by default, this hack also allows it for Linux extra_hosts: docker.for.lin.host.internal: 172.16.238.1 docker.for.lin.localhost: 172.16.238.1 networks: app_net: ipv4_address: 172.16.238.10 volumes: # ---- Format: ---- # HOST-DIRECTORY : DOCKER-DIRECTORY # Mount custom intranet - ${DEVILBOX_PATH}/.devilbox/www:/var/www/default:ro${MOUNT_OPTIONS} # Mount custom mass virtual hosting - ${HOST_PATH_HTTPD_DATADIR}:/shared/httpd:rw${MOUNT_OPTIONS} # Mount logs - ${DEVILBOX_PATH}/log/php-fpm-${PHP_SERVER}:/var/log/php:rw${MOUNT_OPTIONS} # Mount Mail directory - devilbox-mail:/var/mail:rw${MOUNT_OPTIONS} # Mount DB Backup directory - ${HOST_PATH_BACKUPDIR:-./backups}:/shared/backups:rw${MOUNT_OPTIONS} # Mount devilbox user-defined *.ini files in order # to overwrite the default PHP.ini configuration - ${DEVILBOX_PATH}/cfg/php-ini-${PHP_SERVER}:/etc/php-custom.d:ro${MOUNT_OPTIONS} # Mount devilbox user-defined PHP-FPM *.conf files in order # to overwrite the default PHP-FPM configuration - ${DEVILBOX_PATH}/cfg/php-fpm-${PHP_SERVER}:/etc/php-fpm-custom.d:ro${MOUNT_OPTIONS} # Mount devilbox user-defined PHP-FPM startup *.sh scripts - ${DEVILBOX_PATH}/cfg/php-startup-${PHP_SERVER}:/startup.1.d:rw${MOUNT_OPTIONS} - ${DEVILBOX_PATH}/autostart:/startup.2.d:rw${MOUNT_OPTIONS} # Mount devilbox user-defined bash config - ${DEVILBOX_PATH}/bash:/etc/bashrc-devilbox.d:rw${MOUNT_OPTIONS} # Mount devilbox user-defined supervisord config - ${DEVILBOX_PATH}/supervisor:/etc/supervisor/custom.d:rw${MOUNT_OPTIONS} # Certificate Authority public key - ${DEVILBOX_PATH}/ca:/ca:rw${MOUNT_OPTIONS} # Users SSH directory (read-only) - ${HOST_PATH_SSH_DIR}:/home/devilbox/.ssh:ro${MOUNT_OPTIONS} depends_on: - bind # ------------------------------------------------------------ # Web Server # ------------------------------------------------------------ httpd: image: devilbox/${HTTPD_SERVER}:${HTTPD_FLAVOUR:-alpine}-1.0 hostname: httpd environment: ## ## Supervisord Management ## - SVCTL_ENABLE=1 - SVCTL_LISTEN_ADDR=0.0.0.0 - SVCTL_LISTEN_PORT=9001 - SVCTL_REMOTE_LOGS_ENABLE=1 - SVCTL_USER=${DEVILBOX_HTTPD_MGMT_USER:-supervisor} - SVCTL_PASS=${DEVILBOX_HTTPD_MGMT_PASS:-mypassword} ## ## Debug/Logging ## - DEBUG_ENTRYPOINT=${DEBUG_ENTRYPOINT:-2} - DEBUG_RUNTIME=1 - DOCKER_LOGS ## ## Adjust timezone ## - TIMEZONE ## ## UserID and GroupID ## - NEW_UID - NEW_GID ## ## Nginx specific worker/connection settings ## - WORKER_PROCESSES=${HTTPD_NGINX_WORKER_PROCESSES:-auto} - WORKER_CONNECTIONS=${HTTPD_NGINX_WORKER_CONNECTIONS:-1024} ## ## Globally enable/disable HTTP/2 ## - HTTP2_ENABLE=${HTTPD_HTTP2_ENABLE:-1} ## ## Disable default vhost? ## - MAIN_VHOST_ENABLE=${DEVILBOX_UI_ENABLE} - MAIN_VHOST_STATUS_ENABLE=1 - MAIN_VHOST_STATUS_ALIAS=/devilbox-httpd-status - MAIN_VHOST_SSL_TYPE=${HTTPD_VHOST_SSL_TYPE:-both} - MAIN_VHOST_SSL_GEN=1 - MAIN_VHOST_SSL_CN=${DEVILBOX_UI_SSL_CN:-localhost} - MAIN_VHOST_BACKEND=conf:phpfpm:tcp:172.16.238.10:9000 - MAIN_VHOST_BACKEND_TIMEOUT=${HTTPD_BACKEND_TIMEOUT:-180} - MAIN_VHOST_ALIASES_ALLOW=/devilbox-api/:/var/www/default/api, /vhost.d/:/etc/httpd ## ## Enable Mass Vhosts ## - MASS_VHOST_ENABLE=1 - MASS_VHOST_TLD_SUFFIX=.${TLD_SUFFIX} - MASS_VHOST_DOCROOT_DIR=${HTTPD_DOCROOT_DIR} - MASS_VHOST_TEMPLATE_DIR=${HTTPD_TEMPLATE_DIR} - MASS_VHOST_SSL_TYPE=${HTTPD_VHOST_SSL_TYPE:-both} - MASS_VHOST_SSL_GEN=1 - MASS_VHOST_BACKEND=conf:phpfpm:tcp:172.16.238.10:9000 - MASS_VHOST_BACKEND_REWRITE=file:backend.cfg - MASS_VHOST_BACKEND_TIMEOUT=${HTTPD_BACKEND_TIMEOUT:-180} - MASS_VHOST_ALIASES_ALLOW=/devilbox-api/:/var/www/default/api:http(s)?://(.*)$$ ports: # ---- Format: ---- # [HOST-ADDR : ] HOST-PORT : DOCKER-PORT - "${LOCAL_LISTEN_ADDR}${HOST_PORT_HTTPD}:80" - "${LOCAL_LISTEN_ADDR}${HOST_PORT_HTTPD_SSL}:443" networks: app_net: ipv4_address: 172.16.238.11 volumes: # ---- Format: ---- # HOST-DIRECTORY : DOCKER-DIRECTORY # Mount custom intranet - ${DEVILBOX_PATH}/.devilbox/www:/var/www/default:ro${MOUNT_OPTIONS} # Mount custom mass virtual hosting - ${HOST_PATH_HTTPD_DATADIR}:/shared/httpd:rw${MOUNT_OPTIONS} # Mount custom web server config directory - ${DEVILBOX_PATH}/cfg/${HTTPD_SERVER}:/etc/httpd-custom.d:rw${MOUNT_OPTIONS} # Mount custom vhost-templates - ${DEVILBOX_PATH}/cfg/vhost-gen:/etc/vhost-gen.d:rw${MOUNT_OPTIONS} # Mount logs - ${DEVILBOX_PATH}/log/${HTTPD_SERVER}:/var/log/httpd:rw${MOUNT_OPTIONS} # Certificate Authority public key - ${DEVILBOX_PATH}/ca:/ca:rw${MOUNT_OPTIONS} depends_on: - bind - php # ------------------------------------------------------------ # MySQL Database # ------------------------------------------------------------ mysql: image: devilbox/mysql:${MYSQL_SERVER}-0.21 hostname: mysql environment: - MYSQL_ROOT_PASSWORD - MYSQL_ALLOW_EMPTY_PASSWORD=yes ports: # [local-machine:]local-port:docker-port - "${LOCAL_LISTEN_ADDR}${HOST_PORT_MYSQL}:3306" networks: app_net: ipv4_address: 172.16.238.12 volumes: # ---- Format: ---- # HOST-DIRECTORY : DOCKER-DIRECTORY # Mount devilbox user-defined cnf files in order # to overwrite the MySQL server configuration - ${DEVILBOX_PATH}/.devilbox/cfg/mysql.cnf:/etc/mysql/conf.d/devilbox.cnf:ro${MOUNT_OPTIONS} - ${DEVILBOX_PATH}/cfg/${MYSQL_SERVER}:/etc/mysql/docker-default.d:ro${MOUNT_OPTIONS} # Mount MySQL Data directory - devilbox-${MYSQL_SERVER}:/var/lib/mysql:rw${MOUNT_OPTIONS} depends_on: - bind - php - httpd # ------------------------------------------------------------ # PostgreSQL # ------------------------------------------------------------ pgsql: image: postgres:${PGSQL_SERVER} hostname: pgsql environment: - POSTGRES_USER=${PGSQL_ROOT_USER} - POSTGRES_PASSWORD=${PGSQL_ROOT_PASSWORD} - POSTGRES_HOST_AUTH_METHOD=${PGSQL_HOST_AUTH_METHOD:-trust} - PGDATA=/var/lib/postgresql/data/pgdata ports: # [local-machine:]local-port:docker-port - "${LOCAL_LISTEN_ADDR}${HOST_PORT_PGSQL}:5432" networks: app_net: ipv4_address: 172.16.238.13 volumes: # ---- Format: ---- # HOST-DIRECTORY : DOCKER-DIRECTORY # Mount PostgreSQL Data directory - devilbox-pgsql-${PGSQL_SERVER}:/var/lib/postgresql/data/pgdata:rw${MOUNT_OPTIONS} depends_on: - bind - php - httpd # ------------------------------------------------------------ # Redis # ------------------------------------------------------------ redis: image: redis:${REDIS_SERVER} hostname: redis # Apply custom arguments to redis startup command: redis-server ${REDIS_ARGS:- } environment: - REDIS_ARGS=${REDIS_ARGS:- } ports: # [local-machine:]local-port:docker-port - "${LOCAL_LISTEN_ADDR}${HOST_PORT_REDIS}:6379" networks: app_net: ipv4_address: 172.16.238.14 depends_on: - bind - php - httpd # ------------------------------------------------------------ # Memcached # ------------------------------------------------------------ memcd: image: memcached:${MEMCD_SERVER} hostname: memcd ports: # [local-machine:]local-port:docker-port - "${LOCAL_LISTEN_ADDR}${HOST_PORT_MEMCD}:11211" networks: app_net: ipv4_address: 172.16.238.15 depends_on: - bind - php - httpd # ------------------------------------------------------------ # MongoDB # ------------------------------------------------------------ mongo: image: mongo:${MONGO_SERVER} hostname: mongo ports: # [local-machine:]local-port:docker-port - "${LOCAL_LISTEN_ADDR}${HOST_PORT_MONGO}:27017" networks: app_net: ipv4_address: 172.16.238.16 volumes: # ---- Format: ---- # HOST-DIRECTORY : DOCKER-DIRECTORY # Mount MongoDB Data directory - devilbox-mongo-${MONGO_SERVER}:/data/db:rw${MOUNT_OPTIONS} depends_on: - bind - php - httpd ################################################################################ # NETWORK ################################################################################ networks: app_net: driver: bridge driver_opts: com.docker.network.enable_ipv6: "false" ipam: driver: default config: - subnet: 172.16.238.0/24 gateway: 172.16.238.1 ################################################################################ # VOLUMES ################################################################################ volumes: # ------------------------------------------------------------ # Misc # ------------------------------------------------------------ devilbox-mail: # ------------------------------------------------------------ # MySQL # ------------------------------------------------------------ devilbox-mysql-5.5: devilbox-mysql-5.6: devilbox-mysql-5.7: devilbox-mysql-8.0: devilbox-mariadb-5.5: devilbox-mariadb-10.0: devilbox-mariadb-10.1: devilbox-mariadb-10.2: devilbox-mariadb-10.3: devilbox-mariadb-10.4: devilbox-mariadb-10.5: devilbox-mariadb-10.6: devilbox-mariadb-10.7: devilbox-mariadb-10.8: devilbox-mariadb-10.9: devilbox-mariadb-10.10: devilbox-percona-5.5: devilbox-percona-5.6: devilbox-percona-5.7: devilbox-percona-8.0: # ------------------------------------------------------------ # Postgres # ------------------------------------------------------------ devilbox-pgsql-9.0: devilbox-pgsql-9.1: devilbox-pgsql-9.2: devilbox-pgsql-9.2-alpine: devilbox-pgsql-9.3: devilbox-pgsql-9.3-alpine: devilbox-pgsql-9.4: devilbox-pgsql-9.4-alpine: devilbox-pgsql-9.5: devilbox-pgsql-9.5-alpine: devilbox-pgsql-9.6: devilbox-pgsql-9.6-alpine: devilbox-pgsql-10: devilbox-pgsql-10-alpine: devilbox-pgsql-11: devilbox-pgsql-11-alpine: devilbox-pgsql-12: devilbox-pgsql-12-alpine: devilbox-pgsql-13: devilbox-pgsql-13-alpine: devilbox-pgsql-14: devilbox-pgsql-14-alpine: devilbox-pgsql-15: devilbox-pgsql-15-alpine: devilbox-pgsql-latest: devilbox-pgsql-alpine: # ------------------------------------------------------------ # MongoDB # ------------------------------------------------------------ devilbox-mongo-2.8: devilbox-mongo-3.0: devilbox-mongo-3.2: devilbox-mongo-3.4: devilbox-mongo-3.6: devilbox-mongo-4.0: devilbox-mongo-4.2: devilbox-mongo-4.4: devilbox-mongo-5.0: devilbox-mongo-latest: