docker-compose.yml.yyy 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. version: "3.4"
  2. ### NB! First create "traefik-network" :) docker network.
  3. ### $ docker network create -d overlay traefik-network
  4. services:
  5. traefik:
  6. image: "traefik:v2.11"
  7. ports:
  8. - target: 80
  9. published: 80
  10. mode: host
  11. - target: 443
  12. published: 443
  13. mode: host
  14. # - target: 8080
  15. # published: 8080
  16. # mode: host
  17. command:
  18. ### Log level: ERROR, DEBUG, PANIC, FATAL, WARN, INFO
  19. - "--log.level=DEBUG"
  20. ### API Settings
  21. # - "--api.insecure=false" # <-- Not for production server !!!
  22. - "--api.insecure=true"
  23. - "--api.dashboard=true"
  24. - "--api.debug=true"
  25. ### Providers.Docker Settings
  26. - "--providers.docker=true"
  27. - "--providers.docker.exposedbydefault=false" # don't expose all containers
  28. - "--providers.docker.network=my-traefik-network" # default traefik docker network for all exposed containers
  29. ### Entrypoints Settings
  30. - "--entrypoints.web.address=:80"
  31. - "--entrypoints.websecure.address=:443"
  32. ### Certificate Settings (Let's Encrypt -- DNS-01 challenge)
  33. - "--certificatesResolvers.mychallenge.acme.dnschallenge=true"
  34. - "--certificatesResolvers.mychallenge.acme.dnschallenge.provider=digitalocean"
  35. - "--certificatesResolvers.mychallenge.acme.storage=/letsencrypt/acme.json"
  36. - "--certificatesResolvers.mychallenge.acme.email=ardo@odamus.com"
  37. ### Enable Prometheus metrics
  38. - "--metrics.prometheus=true"
  39. ### Enable the access log, with HTTP requests
  40. - "--accesslog"
  41. ### Enable the Traefik log, for configurations and errors
  42. - "--log"
  43. ### Enable the Dashboard and API
  44. - "--api"
  45. ### When exposing containers that are configured with host networking,
  46. ### the IP address of the host is resolved as follows
  47. # - "--add-host=host.docker.internal:172.17.0.1"
  48. ### Docker Provider koos Swarm Mode'iga (v2 süntaks!)
  49. - "--providers.docker=true"
  50. - "--providers.docker.swarmMode=true" # v2 jaoks
  51. - "--providers.docker.endpoint=unix:///var/run/docker.sock"
  52. - "--providers.docker.exposedbydefault=false"
  53. - "--providers.docker.network=my-traefik-network"
  54. ### File Provider
  55. - "--providers.file.filename=/letsencrypt/dynamic_conf.yml"
  56. - "--providers.file.watch=true"
  57. #ardo
  58. # EEMALDA Docker/Swarm provider
  59. # Kasuta AINULT file provider
  60. environment:
  61. ### DigitalOcean API-KEY for DNS-01 challenge
  62. - "DO_AUTH_TOKEN=644121bb69116ae2dec66a50e97a7af3d464aa8a261330dedd7c030b064955ad"
  63. volumes:
  64. - "traefik_certs:/letsencrypt" # Certs: DNS-01
  65. - "/var/run/docker.sock:/var/run/docker.sock:ro"
  66. - "tmp:/tmp"
  67. # - "./config/dynamic_conf.yml:/letsencrypt/new_dynamic_conf.yml"
  68. # - ./traefik.toml:/traefik.toml
  69. networks:
  70. - traefik-network
  71. - traefik-external
  72. deploy:
  73. mode: replicated
  74. replicas: 1
  75. placement:
  76. constraints:
  77. - node.hostname == hetzner
  78. - node.role == manager
  79. labels:
  80. ### Create HTTP-to-HTTPS redirect Middleware
  81. - "traefik.http.middlewares.http-to-https.redirectscheme.scheme=https"
  82. ### Dashboard
  83. - "traefik.enable=true"
  84. ### HTTP-to-HTTPS Middleware attachment (if you want automatic redirection)
  85. - "traefik.http.routers.api.middlewares=http-to-https"
  86. # traefik.odamus.com
  87. ### HTTP router
  88. - "traefik.http.routers.api.rule=Host(`traefik.odamus.com`)"
  89. - "traefik.http.routers.api.entrypoints=web"
  90. - "traefik.http.routers.api.service=api@internal"
  91. ### HTTPS router
  92. - "traefik.http.routers.api-secure.rule=Host(`traefik.odamus.com`) && PathPrefix(`/api`, `/dashboard`)"
  93. - "traefik.http.routers.api-secure.entrypoints=websecure"
  94. - "traefik.http.routers.api-secure.service=api@internal"
  95. - "traefik.http.routers.api-secure.tls.certresolver=mychallenge"
  96. ### ardo
  97. ### Define the port inside of the Docker service to use
  98. - "traefik.http.services.traefik-network.loadbalancer.server.port=8080"
  99. ### Using the environment variables USERNAME and HASHED_PASSWORD
  100. - "traefik.http.middlewares.traefik-auth.basicauth.users=ardo:$$apr1$$U6JrtDD/$$Z9U3bdtKCx2OvOaVNnAw80"
  101. ### Enable HTTP Basic auth, using the middleware created above
  102. - "traefik.http.routers.api-secure.middlewares=traefik-auth"
  103. configs:
  104. - source: dynamic_conf
  105. target: /letsencrypt/dynamic_conf.yml
  106. # uid: '0'
  107. # gid: '0'
  108. # mode: 0440
  109. configs:
  110. dynamic_conf:
  111. file: ./config/dynamic_conf.yml
  112. ### Networks used by this composition
  113. networks:
  114. traefik-network:
  115. external:
  116. name: traefik-network
  117. traefik-external:
  118. external:
  119. name: traefik-external
  120. volumes:
  121. # traefik-data:
  122. # name: '{{.Service.Name}}-{{.Task.Slot}}-certs'
  123. # driver: local
  124. traefik_certs:
  125. external: true
  126. tmp: