docker-compose.yml 14 KB

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