├── README.md ├── project.json └── template └── docker-compose.yml /README.md: -------------------------------------------------------------------------------- 1 | ## What is this? 2 | 3 | Boilr is a tool for generating your projects boilerplate files. This template repository provides templates for generating docker-compose.yml for PHP projects. 4 | 5 | These templates are configued based on MY personal opinion on how docker-compose works best for PHP projects 6 | 7 | After the YAML files are generated, you may need to tweak slightly (Node entrypoint, etc) 8 | 9 | ## Installation 10 | 11 | ### Install boilr 12 | 13 | Download the latest binary from: https://github.com/tmrts/boilr/releases 14 | 15 | ### Install this template 16 | 17 | `$ boilr template download rawkode/boilr-docker-compose-php dcphp` 18 | 19 | ## Use this template 20 | 21 | `$ boilr template use dcphp ` 22 | -------------------------------------------------------------------------------- /project.json: -------------------------------------------------------------------------------- 1 | { 2 | "php_version": [ 3 | "5.6-apache", 4 | "7-apache", 5 | "5-fpm-alpine", 6 | "7-fpm-alpine" 7 | ], 8 | "php_expose_port": "80", 9 | 10 | "mysql_version": [ 11 | "None", 12 | "latest", 13 | "8", 14 | "5.7", 15 | "5.6", 16 | "5.5" 17 | ], 18 | 19 | "postgres_version": [ 20 | "None", 21 | "latest", 22 | "9.6-alpine", 23 | "9.5-alpine" 24 | ], 25 | 26 | "redis_version": [ 27 | "None", 28 | "latest", 29 | "3.2-alpine" 30 | ], 31 | 32 | "memcached_version": [ 33 | "None", 34 | "latest", 35 | "1-alpine" 36 | ], 37 | 38 | "node_version": [ 39 | "None", 40 | "latest", 41 | "7-alpine", 42 | "6-alpine" 43 | ], 44 | "node_output_directory": "web/assets", 45 | 46 | "elasticsearch_version": [ 47 | "None", 48 | "2", 49 | "5" 50 | ], 51 | 52 | "rabbitmq_version": [ 53 | "None", 54 | "latest", 55 | "management", 56 | "alpine", 57 | "management-alpine" 58 | ], 59 | 60 | "neo4j_version": [ 61 | "None", 62 | "latest", 63 | "enterprise" 64 | ], 65 | 66 | "application_log_directory": "app/logs", 67 | "application_cache_directory": "app/cache" 68 | } 69 | 70 | -------------------------------------------------------------------------------- /template/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "2.1" 2 | 3 | networks: 4 | public: 5 | driver: "bridge" 6 | private: 7 | driver: "bridge" 8 | 9 | volumes: 10 | cache: 11 | driver: "local" 12 | logs: 13 | driver: "local" 14 | {{- if ne node_version "None" }} 15 | node_modules: 16 | driver: "local" 17 | node_output: 18 | driver: "local" 19 | {{- end }} 20 | 21 | services: 22 | php: 23 | image: "php:{{ php_version }}" 24 | working_dir: "/var/www" 25 | volumes: 26 | - ".:/var/www:ro" 27 | - "cache:/var/www/{{ application_cache_directory | trimSpace }}:rw" 28 | - "logs:/var/www/{{ application_log_directory | trimSpace }}:rw" 29 | networks: 30 | - "public" 31 | - "private" 32 | {{- if or (eq php_version "5.6-apache") (eq php_version "7-apache") }} 33 | ports: 34 | - "{{ if ne php_expose_port "None" }}{{ php_expose_port }}:{{ end }}80"{{ end }} 35 | depends_on: 36 | {{- if ne mysql_version "None"}} 37 | mysql: 38 | condition: service_healthy 39 | {{- end -}} 40 | 41 | {{- if and (ne php_version "5.6-apache") (ne php_version "7-apache") }} 42 | 43 | nginx: 44 | image: "nginx:latest" 45 | volumes_from: 46 | - "php" 47 | ports: 48 | - "{{ php_expose_port }}:80" 49 | networks: 50 | - "public" 51 | - "private"{{ end -}} 52 | 53 | {{- if ne node_version "None" }} 54 | 55 | node: 56 | image: "node:{{ node_version }}" 57 | working_dir: "/var/www" 58 | entrypoint: "npm" 59 | command: "run develop" 60 | volumes_from: 61 | - php 62 | volumes: 63 | - "node_modules:/var/www/node_modules:rw" 64 | - "node_output:/var/www/{{ node_output_directory }}:rw" 65 | networks: 66 | - "private"{{ end -}} 67 | 68 | {{- if ne mysql_version "None" }} 69 | 70 | mysql: 71 | image: "mysql:{{ mysql_version }}" 72 | environment: 73 | MYSQL_DATABASE: "database" 74 | MYSQL_USER: "user" 75 | MYSQL_PASSWORD: "password" 76 | MYSQL_RANDOM_ROOT_PASSWORD: "true" 77 | networks: 78 | - "private" 79 | healthcheck: 80 | test: ["CMD-SHELL", "mysql -uuser -ppassword -e 'SHOW TABLES' database"] 81 | interval: 2s 82 | retries: 10 83 | timeout: 1s{{ end -}} 84 | 85 | {{- if ne postgres_version "None" }} 86 | 87 | postgresql: 88 | image: "postgres:{{ postgres_version }}" 89 | environment: 90 | POSTGRES_DB: "database" 91 | POSTGRES_USER: "user" 92 | POSTGRES_PASSWORD: "password" 93 | networks: 94 | - "private"{{ end -}} 95 | 96 | {{- if ne memcached_version "None" }} 97 | 98 | memcached: 99 | image: "memcached:{{ memcached_version }}" 100 | networks: 101 | - "private"{{ end -}} 102 | 103 | {{- if ne redis_version "None" }} 104 | 105 | redis: 106 | image: "redis:{{ redis_version }}" 107 | networks: 108 | - "private"{{ end -}} 109 | 110 | {{- if ne elasticsearch_version "None" }} 111 | 112 | elasticsearch: 113 | image: elasticsearch:{{ elasticsearch_version }} 114 | networks: 115 | - "private"{{ end -}} 116 | 117 | {{- if ne rabbitmq_version "None" }} 118 | 119 | rabbitmq: 120 | image: "rabbitmq:{{ rabbitmq_version }}" 121 | ports: 122 | - "15672" 123 | environment: 124 | RABBITMQ_DEFAULT_USER: "user" 125 | RABBITMQ_DEFAULT_PASS: "password" 126 | networks: 127 | - "private"{{ end -}} 128 | 129 | {{- if ne neo4j_version "None" }} 130 | 131 | neo4j: 132 | image: "neo4j:{{ neo4j_version }}" 133 | networks: 134 | - "private"{{ end -}} 135 | 136 | --------------------------------------------------------------------------------