docker-compose.yml 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. version: '2'
  2. services:
  3. ### Applications Code Container #############################
  4. applications:
  5. image: tianon/true
  6. volumes:
  7. - ${APPLICATION}:/var/www
  8. ### Workspace Utilities Container ###########################
  9. workspace:
  10. build:
  11. context: ./workspace
  12. args:
  13. - INSTALL_XDEBUG=${WORKSPACE_INSTALL_XDEBUG}
  14. - INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE}
  15. - INSTALL_SOAP=${WORKSPACE_INSTALL_SOAP}
  16. - INSTALL_MONGO=${WORKSPACE_INSTALL_MONGO}
  17. - INSTALL_MSSQL=${WORKSPACE_INSTALL_MSSQL}
  18. - INSTALL_NODE=${WORKSPACE_INSTALL_NODE}
  19. - INSTALL_YARN=${WORKSPACE_INSTALL_YARN}
  20. - INSTALL_DRUSH=${WORKSPACE_INSTALL_DRUSH}
  21. - INSTALL_AEROSPIKE=${WORKSPACE_INSTALL_AEROSPIKE}
  22. - INSTALL_V8JS=${WORKSPACE_INSTALL_V8JS}
  23. - COMPOSER_GLOBAL_INSTALL=${WORKSPACE_COMPOSER_GLOBAL_INSTALL}
  24. - INSTALL_WORKSPACE_SSH=${WORKSPACE_INSTALL_WORKSPACE_SSH}
  25. - INSTALL_LARAVEL_ENVOY=${WORKSPACE_INSTALL_LARAVEL_ENVOY}
  26. - INSTALL_LARAVEL_INSTALLER=${WORKSPACE_INSTALL_LARAVEL_INSTALLER}
  27. - INSTALL_DEPLOYER=${WORKSPACE_INSTALL_DEPLOYER}
  28. - INSTALL_LINUXBREW=${WORKSPACE_INSTALL_LINUXBREW}
  29. - INSTALL_MC=${WORKSPACE_INSTALL_MC}
  30. - PUID=${WORKSPACE_PUID}
  31. - PGID=${WORKSPACE_PGID}
  32. - NODE_VERSION=${WORKSPACE_NODE_VERSION}
  33. - YARN_VERSION=${WORKSPACE_YARN_VERSION}
  34. - TZ=${WORKSPACE_TIMEZONE}
  35. - BLACKFIRE_CLIENT_ID=${BLACKFIRE_CLIENT_ID}
  36. - BLACKFIRE_CLIENT_TOKEN=${BLACKFIRE_CLIENT_TOKEN}
  37. dockerfile: "Dockerfile-${PHP_VERSION}"
  38. volumes_from:
  39. - applications
  40. extra_hosts:
  41. - "dockerhost:${DOCKER_HOST_IP}"
  42. ports:
  43. - "${WORKSPACE_SSH_PORT}:22"
  44. tty: true
  45. networks:
  46. - frontend
  47. - backend
  48. ### PHP-FPM Container #######################################
  49. php-fpm:
  50. build:
  51. context: ./php-fpm
  52. args:
  53. - INSTALL_XDEBUG=${PHP_FPM_INSTALL_XDEBUG}
  54. - INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE}
  55. - INSTALL_SOAP=${PHP_FPM_INSTALL_SOAP}
  56. - INSTALL_MONGO=${PHP_FPM_INSTALL_MONGO}
  57. - INSTALL_MSSQL=${PHP_FPM_INSTALL_MSSQL}
  58. - INSTALL_ZIP_ARCHIVE=${PHP_FPM_INSTALL_ZIP_ARCHIVE}
  59. - INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH}
  60. - INSTALL_PHPREDIS=${PHP_FPM_INSTALL_PHPREDIS}
  61. - INSTALL_MEMCACHED=${PHP_FPM_INSTALL_MEMCACHED}
  62. - INSTALL_OPCACHE=${PHP_FPM_INSTALL_OPCACHE}
  63. - INSTALL_EXIF=${PHP_FPM_INSTALL_EXIF}
  64. - INSTALL_AEROSPIKE=${PHP_FPM_INSTALL_AEROSPIKE}
  65. - INSTALL_MYSQLI=${PHP_FPM_INSTALL_MYSQLI}
  66. - INSTALL_TOKENIZER=${PHP_FPM_INSTALL_TOKENIZER}
  67. - INSTALL_INTL=${PHP_FPM_INSTALL_INTL}
  68. - INSTALL_GHOSTSCRIPT=${PHP_FPM_INSTALL_GHOSTSCRIPT}
  69. - INSTALL_LDAP=${PHP_FPM_INSTALL_LDAP}
  70. - INSTALL_SWOOLE=${PHP_FPM_INSTALL_SWOOLE}
  71. dockerfile: "Dockerfile-${PHP_VERSION}"
  72. volumes_from:
  73. - applications
  74. volumes:
  75. - ./php-fpm/php${PHP_VERSION}.ini:/usr/local/etc/php/php.ini
  76. expose:
  77. - "9000"
  78. depends_on:
  79. - workspace
  80. extra_hosts:
  81. - "dockerhost:${DOCKER_HOST_IP}"
  82. environment:
  83. - PHP_IDE_CONFIG=${PHP_IDE_CONFIG}
  84. networks:
  85. - backend
  86. ### PHP Worker Container #####################################
  87. php-worker:
  88. build:
  89. context: ./php-worker
  90. volumes_from:
  91. - applications
  92. depends_on:
  93. - workspace
  94. extra_hosts:
  95. - "dockerhost:${DOCKER_HOST_IP}"
  96. networks:
  97. - backend
  98. ### Nginx Server Container ##################################
  99. nginx:
  100. build:
  101. context: ./nginx
  102. args:
  103. - PHP_UPSTREAM=php-fpm
  104. volumes_from:
  105. - applications
  106. volumes:
  107. - ${NGINX_HOST_LOG_PATH}:/var/log/nginx
  108. - ${NGINX_SITES_PATH}:/etc/nginx/sites-available
  109. ports:
  110. - "${NGINX_HOST_HTTP_PORT}:80"
  111. - "${NGINX_HOST_HTTPS_PORT}:443"
  112. depends_on:
  113. - php-fpm
  114. networks:
  115. - frontend
  116. - backend
  117. ### Blackfire Container #################################
  118. blackfire:
  119. image: blackfire/blackfire
  120. environment:
  121. - BLACKFIRE_SERVER_ID=${BLACKFIRE_SERVER_ID}
  122. - BLACKFIRE_SERVER_TOKEN=${BLACKFIRE_SERVER_TOKEN}
  123. depends_on:
  124. - php-fpm
  125. networks:
  126. - backend
  127. ### Apache Server Container #################################
  128. apache2:
  129. build:
  130. context: ./apache2
  131. args:
  132. - PHP_SOCKET=${PHP_SOCKET}
  133. volumes_from:
  134. - applications
  135. volumes:
  136. - ${APACHE_HOST_LOG_PATH}:/var/log/apache2
  137. - ./apache2/sites:/etc/apache2/sites-available
  138. ports:
  139. - "${APACHE_HOST_HTTP_PORT}:80"
  140. - "${APACHE_HOST_HTTPS_PORT}:443"
  141. depends_on:
  142. - php-fpm
  143. networks:
  144. - frontend
  145. - backend
  146. ### HHVM Container ##########################################
  147. hhvm:
  148. build: ./hhvm
  149. volumes_from:
  150. - applications
  151. expose:
  152. - "9000"
  153. depends_on:
  154. - workspace
  155. networks:
  156. - frontend
  157. - backend
  158. ### Minio Container #########################################
  159. minio:
  160. build: ./minio
  161. volumes:
  162. - minio:/export
  163. ports:
  164. - "${MINIO_PORT}:9000"
  165. environment:
  166. - MINIO_ACCESS_KEY=access
  167. - MINIO_SECRET_KEY=secretkey
  168. networks:
  169. - frontend
  170. ### MySQL Container #########################################
  171. mysql:
  172. build:
  173. context: ./mysql
  174. environment:
  175. - MYSQL_DATABASE=${MYSQL_DATABASE}
  176. - MYSQL_USER=${MYSQL_USER}
  177. - MYSQL_PASSWORD=${MYSQL_PASSWORD}
  178. - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
  179. volumes:
  180. - ${DATA_SAVE_PATH}/mysql:/var/lib/mysql
  181. - ./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
  182. ports:
  183. - "${MYSQL_PORT}:3306"
  184. networks:
  185. - backend
  186. ### Percona Container #########################################
  187. percona:
  188. build:
  189. context: ./percona
  190. environment:
  191. - MYSQL_DATABASE=${PERCONA_DATABASE}
  192. - MYSQL_USER=${PERCONA_USER}
  193. - MYSQL_PASSWORD=${PERCONA_PASSWORD}
  194. - MYSQL_ROOT_PASSWORD=${PERCONA_ROOT_PASSWORD}
  195. volumes:
  196. - ${DATA_SAVE_PATH}/percona:/var/lib/mysql
  197. - ./percona/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
  198. ports:
  199. - "${PERCONA_PORT}:3306"
  200. networks:
  201. - backend
  202. ### MSSQL Container #########################################
  203. mssql:
  204. build:
  205. context: ./mssql
  206. environment:
  207. - MSSQL_DATABASE=${MSSQL_DATABASE}
  208. - SA_PASSWORD=${MSSQL_PASSWORD}
  209. - ACCEPT_EULA=Y
  210. volumes:
  211. - ${DATA_SAVE_PATH}/mssql:/var/opt/mssql
  212. ports:
  213. - "${MSSQL_PORT}:1433"
  214. networks:
  215. - backend
  216. ### MariaDB Container #######################################
  217. mariadb:
  218. build: ./mariadb
  219. volumes:
  220. - ${DATA_SAVE_PATH}/mariadb:/var/lib/mysql
  221. - ./mariadb/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
  222. ports:
  223. - "${MARIADB_PORT}:3306"
  224. environment:
  225. - MYSQL_DATABASE=${MARIADB_DATABASE}
  226. - MYSQL_USER=${MARIADB_USER}
  227. - MYSQL_PASSWORD=${MARIADB_PASSWORD}
  228. - MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
  229. networks:
  230. - backend
  231. ### PostgreSQL Container ####################################
  232. postgres:
  233. build: ./postgres
  234. volumes:
  235. - ${DATA_SAVE_PATH}/postgres:/var/lib/postgresql/data
  236. ports:
  237. - "${POSTGRES_PORT}:5432"
  238. environment:
  239. - POSTGRES_DB=${POSTGRES_DB}
  240. - POSTGRES_USER=${POSTGRES_USER}
  241. - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  242. networks:
  243. - backend
  244. ### PostgreSQL PostGis Container ############################
  245. postgres-postgis:
  246. build: ./postgres-postgis
  247. volumes:
  248. - ${DATA_SAVE_PATH}/postgres:/var/lib/postgresql/data
  249. ports:
  250. - "${POSTGRES_PORT}:5432"
  251. environment:
  252. - POSTGRES_DB=${POSTGRES_DB}
  253. - POSTGRES_USER=${POSTGRES_USER}
  254. - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  255. networks:
  256. - backend
  257. ### Neo4j Container #########################################
  258. neo4j:
  259. build: ./neo4j
  260. ports:
  261. - "7474:7474"
  262. - "1337:1337"
  263. environment:
  264. - NEO4J_AUTH=default:secret
  265. volumes:
  266. - ${DATA_SAVE_PATH}/neo4j:/var/lib/neo4j/data
  267. networks:
  268. - backend
  269. ### MongoDB Container #######################################
  270. mongo:
  271. build: ./mongo
  272. ports:
  273. - "${MONGODB_PORT}:27017"
  274. volumes:
  275. - ${DATA_SAVE_PATH}/mongo:/data/db
  276. networks:
  277. - backend
  278. ### RethinkDB Container #######################################
  279. rethinkdb:
  280. build: ./rethinkdb
  281. ports:
  282. - "${RETHINKDB_PORT}:8080"
  283. volumes:
  284. - ${DATA_SAVE_PATH}/rethinkdb:/data/rethinkdb_data
  285. networks:
  286. - backend
  287. ### Redis Container #########################################
  288. redis:
  289. build: ./redis
  290. volumes:
  291. - ${DATA_SAVE_PATH}/redis:/data
  292. ports:
  293. - "6379:6379"
  294. networks:
  295. - backend
  296. ### Aerospike c Container ###################################
  297. aerospike:
  298. build: ./aerospike
  299. volumes_from:
  300. - workspace
  301. volumes:
  302. - ${DATA_SAVE_PATH}/aerospike:/opt/aerospike/data
  303. ports:
  304. - "${AEROSPIKE_SERVICE_PORT}:3000"
  305. - "${AEROSPIKE_FABRIC_PORT}:3001"
  306. - "${AEROSPIKE_HEARTBEAT_PORT}:3002"
  307. - "${AEROSPIKE_INFO_PORT}:3003"
  308. networks:
  309. - backend
  310. ### Memcached Container #####################################
  311. memcached:
  312. build: ./memcached
  313. volumes:
  314. - ${DATA_SAVE_PATH}/memcached:/var/lib/memcached
  315. ports:
  316. - "${MEMCACHED_HOST_PORT}:11211"
  317. depends_on:
  318. - php-fpm
  319. networks:
  320. - backend
  321. ### Beanstalkd Container ####################################
  322. beanstalkd:
  323. build: ./beanstalkd
  324. ports:
  325. - "${BEANSTALKD_HOST_PORT}:11300"
  326. privileged: true
  327. depends_on:
  328. - php-fpm
  329. networks:
  330. - backend
  331. ### RabbitMQ Container ######################################
  332. rabbitmq:
  333. build: ./rabbitmq
  334. ports:
  335. - "${RABBITMQ_NODE_HOST_PORT}:5672"
  336. - "${RABBITMQ_MANAGEMENT_HTTP_HOST_PORT}:15672"
  337. - "${RABBITMQ_MANAGEMENT_HTTPS_HOST_PORT}:15671"
  338. privileged: true
  339. environment:
  340. - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER}
  341. - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS}
  342. depends_on:
  343. - php-fpm
  344. networks:
  345. - backend
  346. ### Beanstalkd Console Container ############################
  347. beanstalkd-console:
  348. build: ./beanstalkd-console
  349. ports:
  350. - "2080:2080"
  351. depends_on:
  352. - beanstalkd
  353. networks:
  354. - backend
  355. ### Caddy Server Container ##################################
  356. caddy:
  357. build: ./caddy
  358. volumes_from:
  359. - applications
  360. volumes:
  361. - ${CADDY_CUSTOM_CADDYFILE}:/etc/Caddyfile
  362. - ${CADDY_HOST_LOG_PATH}:/var/log/caddy
  363. - ${DATA_SAVE_PATH}:/root/.caddy
  364. ports:
  365. - "${CADDY_HOST_HTTP_PORT}:80"
  366. - "${CADDY_HOST_HTTPS_PORT}:443"
  367. depends_on:
  368. - php-fpm
  369. networks:
  370. - frontend
  371. - backend
  372. ### phpMyAdmin Container ####################################
  373. phpmyadmin:
  374. build: ./phpmyadmin
  375. environment:
  376. - PMA_ARBITRARY=1
  377. - MYSQL_USER=${PMA_USER}
  378. - MYSQL_PASSWORD=${PMA_PASSWORD}
  379. - MYSQL_ROOT_PASSWORD=${PMA_ROOT_PASSWORD}
  380. ports:
  381. - "${PMA_PORT}:80"
  382. depends_on:
  383. - "${PMA_DB_ENGINE}"
  384. networks:
  385. - frontend
  386. - backend
  387. ### Adminer Container ####################################
  388. adminer:
  389. build:
  390. context: ./adminer
  391. args:
  392. - INSTALL_MSSQL=${ADM_INSTALL_MSSQL}
  393. ports:
  394. - "${ADM_PORT}:8080"
  395. depends_on:
  396. - php-fpm
  397. networks:
  398. - frontend
  399. - backend
  400. ### pgAdmin Container #######################################
  401. pgadmin:
  402. build: ./pgadmin
  403. ports:
  404. - "5050:5050"
  405. depends_on:
  406. - postgres
  407. networks:
  408. - frontend
  409. - backend
  410. ### ElasticSearch Container #################################
  411. elasticsearch:
  412. build: ./elasticsearch
  413. volumes:
  414. - elasticsearch-data:/usr/share/elasticsearch/data
  415. - elasticsearch-plugins:/usr/share/elasticsearch/plugins
  416. ports:
  417. - "${ELASTICSEARCH_HOST_HTTP_PORT}:9200"
  418. - "${ELASTICSEARCH_HOST_TRANSPORT_PORT}:9300"
  419. depends_on:
  420. - php-fpm
  421. networks:
  422. - frontend
  423. - backend
  424. ### Kibana Container #######################################
  425. kibana:
  426. build: ./kibana
  427. ports:
  428. - "${KIBANA_HTTP_PORT}:5601"
  429. depends_on:
  430. - elasticsearch
  431. networks:
  432. - frontend
  433. - backend
  434. ### Certbot Container ##################################
  435. certbot:
  436. build:
  437. context: ./certbot
  438. volumes:
  439. - ./data/certbot/certs/:/var/certs
  440. - ./certbot/letsencrypt/:/var/www/letsencrypt
  441. environment:
  442. - CN="fake.domain.com"
  443. - EMAIL="fake.email@gmail.com"
  444. networks:
  445. - frontend
  446. ### Mailhog Container #########################################
  447. mailhog:
  448. build: ./mailhog
  449. ports:
  450. - "1025:1025"
  451. - "8025:8025"
  452. networks:
  453. - frontend
  454. ### Selenium Container ########################################
  455. selenium:
  456. build: ./selenium
  457. ports:
  458. - "${SELENIUM_PORT}:4444"
  459. volumes:
  460. - /dev/shm:/dev/shm
  461. networks:
  462. - frontend
  463. ### Varnish Proxy 1 ##########################################
  464. proxy:
  465. build: ./varnish
  466. expose:
  467. - ${VARNISH_PORT}
  468. environment:
  469. - VARNISH_CONFIG=${VARNISH_CONFIG}
  470. - CACHE_SIZE=${VARNISH_PROXY1_CACHE_SIZE}
  471. - VARNISHD_PARAMS=${VARNISHD_PARAMS}
  472. - VARNISH_PORT=${VARNISH_PORT}
  473. - BACKEND_HOST=${VARNISH_PROXY1_BACKEND_HOST}
  474. - BACKEND_PORT=${VARNISH_BACKEND_PORT}
  475. - VARNISH_SERVER=${VARNISH_PROXY1_SERVER}
  476. links:
  477. - workspace
  478. networks:
  479. - frontend
  480. ### Varnish Proxy 2 ##########################################
  481. proxy2:
  482. build: ./varnish
  483. expose:
  484. - ${VARNISH_PORT}
  485. environment:
  486. - VARNISH_CONFIG=${VARNISH_CONFIG}
  487. - CACHE_SIZE=${VARNISH_PROXY2_CACHE_SIZE}
  488. - VARNISHD_PARAMS=${VARNISHD_PARAMS}
  489. - VARNISH_PORT=${VARNISH_PORT}
  490. - BACKEND_HOST=${VARNISH_PROXY2_BACKEND_HOST}
  491. - BACKEND_PORT=${VARNISH_BACKEND_PORT}
  492. - VARNISH_SERVER=${VARNISH_PROXY2_SERVER}
  493. links:
  494. - workspace
  495. networks:
  496. - frontend
  497. ### Balancer Haproxy ##########################################
  498. balancer:
  499. build: ./haproxy
  500. ports:
  501. - "${HAPROXY_HOST_HTTP_PORT}:8085"
  502. volumes:
  503. - /var/run/docker.sock:/var/run/docker.sock
  504. links:
  505. - proxy
  506. - proxy2
  507. ### Jenkins ###################################################
  508. jenkins:
  509. build: ./jenkins
  510. environment:
  511. JAVA_OPTS: "-Djava.awt.headless=true"
  512. ports:
  513. - "${JENKINS_HOST_SLAVE_AGENT_PORT}:50000"
  514. - "${JENKINS_HOST_HTTP_PORT}:8080"
  515. privileged: true
  516. volumes:
  517. - ${JENKINS_HOME}:/var/jenkins_home
  518. - /var/run/docker.sock:/var/run/docker.sock
  519. networks:
  520. - frontend
  521. - backend
  522. ### Laravel Echo Server #######################################
  523. laravel-echo-server:
  524. build:
  525. context: ./laravel-echo-server
  526. volumes:
  527. - ./laravel-echo-server/laravel-echo-server.json:/app/laravel-echo-server.json:ro
  528. ports:
  529. - "${LARAVEL_ECHO_SERVER_PORT}:6001"
  530. links:
  531. - redis
  532. networks:
  533. - frontend
  534. - backend
  535. ### Networks Setup ############################################
  536. networks:
  537. frontend:
  538. driver: "bridge"
  539. backend:
  540. driver: "bridge"
  541. ### Volumes Setup #############################################
  542. volumes:
  543. mysql:
  544. driver: "local"
  545. percona:
  546. driver: "local"
  547. mssql:
  548. driver: "local"
  549. postgres:
  550. driver: "local"
  551. memcached:
  552. driver: "local"
  553. redis:
  554. driver: "local"
  555. neo4j:
  556. driver: "local"
  557. mariadb:
  558. driver: "local"
  559. mongo:
  560. driver: "local"
  561. minio:
  562. driver: "local"
  563. rethinkdb:
  564. driver: "local"
  565. phpmyadmin:
  566. driver: "local"
  567. adminer:
  568. driver: "local"
  569. aerospike:
  570. driver: "local"
  571. caddy:
  572. driver: "local"
  573. elasticsearch-data:
  574. driver: "local"
  575. elasticsearch-plugins:
  576. driver: "local"