docker-compose.yaml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. version: '3.2'
  2. services:
  3. portainer:
  4. container_name: portainer
  5. image: portainer/portainer-ce
  6. volumes:
  7. - /var/run/docker.sock:/var/run/docker.sock
  8. - portainer-data:/data
  9. restart: unless-stopped
  10. labels:
  11. - traefik.enable=true
  12. - traefik.http.routers.portainer.rule=Host(`${PORTAINER_VIRTUAL_HOST}`) || Host(`www.${PORTAINER_VIRTUAL_HOST}`)
  13. - traefik.http.services.portainer.loadbalancer.server.port=9000
  14. postgres:
  15. container_name: postgres
  16. image: postgres:16.3
  17. volumes:
  18. - postgres-data:/var/lib/postgresql/data
  19. - ./default/postgres:/docker-entrypoint-initdb.d
  20. environment:
  21. POSTGRES_USER: ${POSTGRES_USER}
  22. POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  23. POSTGRES_DB: ${POSTGRES_DB}
  24. PGDATA: /var/lib/postgresql/data/db-files/
  25. POSTGRES_MULTIPLE_DATABASES: ${WIKI_DB_NAME},${MATTERMOST_DB_NAME}
  26. POSTGRES_INITDB_ARGS: --encoding=UTF-8 --lc-collate=C --lc-ctype=C
  27. NETWORK_ACCESS: internal
  28. restart: unless-stopped
  29. healthcheck:
  30. test: ["CMD-SHELL", "pg_isready -U '${POSTGRES_USER}' -d '${POSTGRES_DB}'"]
  31. interval: 5s
  32. timeout: 5s
  33. retries: 5
  34. pgadmin:
  35. container_name: pgadmin
  36. image: dpage/pgadmin4:8.8
  37. environment:
  38. PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
  39. PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}
  40. labels:
  41. - traefik.enable=true
  42. - traefik.http.routers.pgadmin.rule=Host(`${PGADMIN_VIRTUAL_HOST}`) || Host(`www.${PGADMIN_VIRTUAL_HOST}`)
  43. - traefik.http.services.pgadmin.loadbalancer.server.port=80
  44. volumes:
  45. - pgadmin-data:/var/lib/pgadmin
  46. - ./default/pgadmin/servers.json:/pgadmin4/servers.json # preconfigured servers/connections
  47. restart: unless-stopped
  48. wiki:
  49. container_name: wiki
  50. image: requarks/wiki:2.5
  51. environment:
  52. DB_TYPE: postgres
  53. DB_HOST: postgres
  54. DB_PORT: 5432
  55. DB_USER: ${POSTGRES_USER}
  56. DB_PASS: ${POSTGRES_PASSWORD}
  57. DB_NAME: ${WIKI_DB_NAME}
  58. labels:
  59. - traefik.enable=true
  60. - traefik.http.routers.wiki.rule=Host(`${WIKI_VIRTUAL_HOST}`) || Host(`www.${WIKI_VIRTUAL_HOST}`)
  61. - traefik.http.services.wiki.loadbalancer.server.port=3000
  62. restart: unless-stopped
  63. depends_on:
  64. postgres:
  65. condition: service_healthy
  66. artifactshub:
  67. container_name: artifactshub
  68. image: sonatype/nexus3
  69. restart: unless-stopped
  70. volumes:
  71. - nexus-data:/nexus-data
  72. labels:
  73. - traefik.enable=true
  74. - traefik.http.routers.artifactshub.rule=Host(`${ARTIFACTSHUB_VIRTUAL_HOST}`) || Host(`www.${ARTIFACTSHUB_VIRTUAL_HOST}`)
  75. - traefik.http.services.artifactshub.loadbalancer.server.port=8081
  76. jenkins:
  77. container_name: jenkins
  78. image: jenkins/jenkins:lts-jdk17
  79. restart: unless-stopped
  80. volumes:
  81. - jenkins-docker-certs:/certs/client
  82. - jenkins-data:/var/jenkins_home
  83. labels:
  84. - traefik.enable=true
  85. - traefik.http.routers.jenkins.rule=Host(`${JENKINS_VIRTUAL_HOST}`) || Host(`www.${JENKINS_VIRTUAL_HOST}`)
  86. - traefik.http.services.jenkins.loadbalancer.server.port=8080
  87. mattermost:
  88. container_name: mattermost
  89. depends_on:
  90. postgres:
  91. condition: service_healthy
  92. image: mattermost/mattermost-team-edition:release-8.1
  93. restart: unless-stopped
  94. security_opt:
  95. - no-new-privileges:true
  96. pids_limit: 200
  97. read_only: false
  98. tmpfs:
  99. - /tmp
  100. volumes:
  101. - mattermost-config:/mattermost/config:rw
  102. - mattermost-data:/mattermost/data:rw
  103. - mattermost-logs:/mattermost/logs:rw
  104. - mattermost-plugins:/mattermost/plugins:rw
  105. - mattermost-client-plugins:/mattermost/client/plugins:rw
  106. - mattermost-bleve-indexes:/mattermost/bleve-indexes:rw
  107. environment:
  108. TZ: ${MATTERMOST_TIMEZONE}
  109. MM_SQLSETTINGS_DRIVERNAME: ${MATTERMOST_DB_TYPE}
  110. MM_SQLSETTINGS_DATASOURCE: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${MATTERMOST_DB_NAME}?sslmode=disable&connect_timeout=10
  111. MM_BLEVESETTINGS_INDEXDIR: /mattermost/bleve-indexes
  112. DOMAIN: ${MATTERMOST_HOSTNAME}
  113. MM_SERVICESETTINGS_SITEURL: ${MATTERMOST_URL}
  114. MM_SERVICESETTINGS_FORWARD80TO443: 'false'
  115. MATTERMOST_CONTAINER_READONLY: 'false'
  116. labels:
  117. - traefik.enable=true
  118. - traefik.http.routers.mattermost.rule=Host(`${MATTERMOST_VIRTUAL_HOST}`) || Host(`www.${MATTERMOST_VIRTUAL_HOST}`)
  119. - traefik.http.services.mattermost.loadbalancer.server.port=8065
  120. reverse-proxy:
  121. container_name: reverse-proxy
  122. # The official v3 Traefik docker image
  123. image: traefik:v3.0
  124. # Enables the web UI and tells Traefik to listen to docker
  125. command: --api.insecure=true --providers.docker
  126. restart: unless-stopped
  127. ports:
  128. # The HTTP port
  129. - "80:80"
  130. # The Web UI (enabled by --api.insecure=true)
  131. - "8080:8080"
  132. volumes:
  133. # So that Traefik can listen to the Docker events
  134. - /var/run/docker.sock:/var/run/docker.sock
  135. networks:
  136. dev_network:
  137. volumes:
  138. portainer-data:
  139. postgres-data:
  140. pgadmin-data:
  141. nexus-data:
  142. jenkins-docker-certs:
  143. jenkins-data:
  144. synapse-matrix-data:
  145. mattermost-config:
  146. mattermost-data:
  147. mattermost-logs:
  148. mattermost-plugins:
  149. mattermost-client-plugins:
  150. mattermost-bleve-indexes: