docker-compose-tls.yaml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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.routers.jenkins.service=jenkins-service
  87. - traefik.http.services.jenkins-service.loadbalancer.server.port=8080
  88. - traefik.tcp.routers.jenkins-agent.rule=HostSNI(`*`)
  89. - traefik.tcp.routers.jenkins-agent.entryPoints=jenkins-agents
  90. - traefik.tcp.routers.jenkins-agent.service=jenkins-agent-service
  91. - traefik.tcp.services.jenkins-agent-service.loadbalancer.server.port=50000
  92. mattermost:
  93. container_name: mattermost
  94. depends_on:
  95. postgres:
  96. condition: service_healthy
  97. image: mattermost/mattermost-team-edition:release-8.1
  98. restart: unless-stopped
  99. security_opt:
  100. - no-new-privileges:true
  101. pids_limit: 200
  102. read_only: false
  103. tmpfs:
  104. - /tmp
  105. volumes:
  106. - mattermost-config:/mattermost/config:rw
  107. - mattermost-data:/mattermost/data:rw
  108. - mattermost-logs:/mattermost/logs:rw
  109. - mattermost-plugins:/mattermost/plugins:rw
  110. - mattermost-client-plugins:/mattermost/client/plugins:rw
  111. - mattermost-bleve-indexes:/mattermost/bleve-indexes:rw
  112. environment:
  113. TZ: ${MATTERMOST_TIMEZONE}
  114. MM_SQLSETTINGS_DRIVERNAME: ${MATTERMOST_DB_TYPE}
  115. MM_SQLSETTINGS_DATASOURCE: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${MATTERMOST_DB_NAME}?sslmode=disable&connect_timeout=10
  116. MM_BLEVESETTINGS_INDEXDIR: /mattermost/bleve-indexes
  117. DOMAIN: ${MATTERMOST_HOSTNAME}
  118. MM_SERVICESETTINGS_SITEURL: ${MATTERMOST_URL}
  119. MM_SERVICESETTINGS_FORWARD80TO443: 'false'
  120. MATTERMOST_CONTAINER_READONLY: 'false'
  121. labels:
  122. - traefik.enable=true
  123. - traefik.http.routers.mattermost.rule=Host(`${MATTERMOST_VIRTUAL_HOST}`) || Host(`${MATTERMOST_EXTERNAL_HOST}`)
  124. - traefik.http.routers.mattermost.tls=true
  125. - traefik.http.routers.mattermost.tls.certresolver=mymattermost
  126. - traefik.http.routers.mattermost.tls.domains[0].main=${MATTERMOST_EXTERNAL_HOST}
  127. - traefik.http.routers.mattermost.tls.domains[0].sans=${MATTERMOST_VIRTUAL_HOST}
  128. - traefik.http.services.mattermost.loadbalancer.server.port=8065
  129. reverse-proxy:
  130. container_name: reverse-proxy
  131. # The official v3 Traefik docker image
  132. image: traefik:v3.0
  133. command:
  134. - "--accesslog=true"
  135. - "--accesslog.filePath=/var/log/traefik/access.log"
  136. - "--log=true"
  137. - "--log.filePath=/var/log/traefik/traefik.log"
  138. - "--log.level=info"
  139. - "--api.insecure=true"
  140. - "--providers.docker"
  141. # spcificare i due entrypoints per la porta 80 e per la 443 (con ssl)
  142. - "--entryPoints.web.address=:80"
  143. - "--entryPoints.websecure.address=:443"
  144. - "--entryPoints.jenkins-agents.address=:50000"
  145. - "--certificatesresolvers.mymattermost.acme.tlschallenge=true"
  146. #- "--certificatesresolvers.mymattermost.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
  147. - "--certificatesresolvers.mymattermost.acme.email=progettoemed@gmail.com"
  148. - "--certificatesresolvers.mymattermost.acme.storage=/etc/letsencrypt/acme.json"
  149. restart: unless-stopped
  150. ports:
  151. # The HTTP port
  152. - "80:80"
  153. # The HTTPS port
  154. - "443:443"
  155. # The Web UI (enabled by --api.insecure=true)
  156. - "8080:8080"
  157. # The jenkins agents port
  158. - "50000:50000"
  159. volumes:
  160. # So that Traefik can listen to the Docker events
  161. - /var/run/docker.sock:/var/run/docker.sock
  162. # posizione standard dei file letsencrypt
  163. - /etc/letsencrypt:/etc/letsencrypt
  164. # posizione log traefik (default to console)
  165. - /var/log/traefik:/var/log/traefik
  166. # posizione file di configurazione per il log
  167. #- ./traefik.yml:/etc/traefik/traefik.yml
  168. networks:
  169. dev_network:
  170. volumes:
  171. portainer-data:
  172. postgres-data:
  173. pgadmin-data:
  174. nexus-data:
  175. jenkins-docker-certs:
  176. jenkins-data:
  177. synapse-matrix-data:
  178. mattermost-config:
  179. mattermost-data:
  180. mattermost-logs:
  181. mattermost-plugins:
  182. mattermost-client-plugins:
  183. mattermost-bleve-indexes: