compose.yaml.j2 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. services:
  2. {{ service_name | default('authentik-server') }}:
  3. image: ghcr.io/goauthentik/server:2025.6.3
  4. container_name: {{ container_name | default('authentik-server') }}
  5. command: server
  6. environment:
  7. - TZ={{ container_timezone | default('UTC') }}
  8. - AUTHENTIK_REDIS__HOST={{ service_name | default('authentik') }}-redis
  9. - AUTHENTIK_POSTGRESQL__HOST={{ service_name | default('authentik') }}-postgres
  10. - AUTHENTIK_POSTGRESQL__USER={{ database_user | default('authentik') }}
  11. - AUTHENTIK_POSTGRESQL__NAME={{ database_name | default('authentik') }}
  12. - AUTHENTIK_POSTGRESQL__PASSWORD={{ database_password | default('authentik') }}
  13. {% if authentik_secret_key -%}
  14. - AUTHENTIK_SECRET_KEY={{ authentik_secret_key }}
  15. {% endif %}
  16. - AUTHENTIK_ERROR_REPORTING__ENABLED={{ authentik_error_reporting | default(false) }}
  17. {% if email_enabled -%}
  18. - AUTHENTIK_EMAIL__HOST={{ email_host }}
  19. - AUTHENTIK_EMAIL__PORT={{ email_port | default(25) }}
  20. - AUTHENTIK_EMAIL__USERNAME={{ email_username }}
  21. - AUTHENTIK_EMAIL__PASSWORD={{ email_password }}
  22. - AUTHENTIK_EMAIL__USE_TLS={{ email_use_tls | default(false) }}
  23. - AUTHENTIK_EMAIL__USE_SSL={{ email_use_ssl | default(false) }}
  24. - AUTHENTIK_EMAIL__TIMEOUT={{ email_timeout | default(10) }}
  25. - AUTHENTIK_EMAIL__FROM={{ email_from }}
  26. {% endif %}
  27. {% if ports_enabled %}
  28. ports:
  29. - "{{ ports_http | default(9000) }}:9000"
  30. - "{{ ports_https | default(9443) }}:9443"
  31. {% endif %}
  32. {% if network_enabled %}
  33. networks:
  34. - {{ network_name | default('bridge') }}
  35. {% endif %}
  36. {% if traefik_enabled %}
  37. labels:
  38. - traefik.enable=true
  39. - traefik.http.services.{{ service_name | default('authentik') }}.loadbalancer.server.port=9000
  40. - traefik.http.services.{{ service_name | default('authentik') }}.loadbalancer.server.scheme=http
  41. - traefik.http.routers.{{ service_name | default('authentik') }}.rule=Host(`{{ traefik_host }}`)
  42. {% if traefik_tls_enabled %}
  43. - traefik.http.routers.{{ service_name | default('authentik') }}.entrypoints={{ traefik_tls_entrypoint | default('websecure') }}
  44. - traefik.http.routers.{{ service_name | default('authentik') }}.tls=true
  45. - traefik.http.routers.{{ service_name | default('authentik') }}.tls.certresolver={{ traefik_tls_certresolver }}
  46. {% else %}
  47. - traefik.http.routers.{{ service_name | default('authentik') }}.entrypoints={{ traefik_entrypoint | default('web') }}
  48. {% endif %}
  49. {% endif %}
  50. volumes:
  51. - ./media:/media
  52. - ./custom-templates:/templates
  53. depends_on:
  54. - {{ service_name | default('authentik') }}-postgres
  55. - {{ service_name | default('authentik') }}-redis
  56. restart: {{ restart_policy | default('unless-stopped') }}
  57. {{ service_name | default('authentik') }}-worker:
  58. image: ghcr.io/goauthentik/server:2025.6.3
  59. container_name: {{ service_name | default('authentik') }}-worker
  60. command: worker
  61. environment:
  62. - TZ={{ container_timezone | default('UTC') }}
  63. - AUTHENTIK_REDIS__HOST={{ service_name | default('authentik') }}-redis
  64. - AUTHENTIK_POSTGRESQL__HOST={{ service_name | default('authentik') }}-postgres
  65. - AUTHENTIK_POSTGRESQL__USER={{ database_user | default('authentik') }}
  66. - AUTHENTIK_POSTGRESQL__NAME={{ database_name | default('authentik') }}
  67. - AUTHENTIK_POSTGRESQL__PASSWORD={{ database_password | default('authentik') }}
  68. {% if authentik_secret_key -%}
  69. - AUTHENTIK_SECRET_KEY={{ authentik_secret_key }}
  70. {% endif %}
  71. - AUTHENTIK_ERROR_REPORTING__ENABLED={{ authentik_error_reporting | default(false) }}
  72. {% if email_enabled -%}
  73. - AUTHENTIK_EMAIL__HOST={{ email_host }}
  74. - AUTHENTIK_EMAIL__PORT={{ email_port | default(25) }}
  75. - AUTHENTIK_EMAIL__USERNAME={{ email_username }}
  76. - AUTHENTIK_EMAIL__PASSWORD={{ email_password }}
  77. - AUTHENTIK_EMAIL__USE_TLS={{ email_use_tls | default(false) }}
  78. - AUTHENTIK_EMAIL__USE_SSL={{ email_use_ssl | default(false) }}
  79. - AUTHENTIK_EMAIL__TIMEOUT={{ email_timeout | default(10) }}
  80. - AUTHENTIK_EMAIL__FROM={{ email_from }}
  81. {% endif %}
  82. user: root
  83. volumes:
  84. - /run/docker.sock:/run/docker.sock
  85. - ./media:/media
  86. - ./certs:/certs
  87. - ./custom-templates:/templates
  88. {% if network_enabled %}
  89. networks:
  90. - {{ network_name | default('bridge') }}
  91. {% endif %}
  92. depends_on:
  93. - {{ service_name | default('authentik') }}-postgres
  94. - {{ service_name | default('authentik') }}-redis
  95. restart: {{ restart_policy | default('unless-stopped') }}
  96. {{ service_name | default('authentik') }}-redis:
  97. image: docker.io/library/redis:8.2.1
  98. container_name: {{ service_name | default('authentik') }}-redis
  99. command: --save 60 1 --loglevel warning
  100. environment:
  101. - TZ={{ container_timezone | default('UTC') }}
  102. healthcheck:
  103. test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
  104. start_period: 20s
  105. interval: 30s
  106. retries: 5
  107. timeout: 3s
  108. volumes:
  109. - redis_data:/data
  110. {% if network_enabled %}
  111. networks:
  112. - {{ network_name | default('bridge') }}
  113. {% endif %}
  114. restart: {{ restart_policy | default('unless-stopped') }}
  115. {{ if not database_external }}
  116. {{ service_name | default('authentik') }}-postgres:
  117. image: docker.io/library/postgres:17.6
  118. container_name: {{ service_name | default('authentik') }}-db
  119. environment:
  120. - POSTGRES_USER={{ database_user | default('authentik') }}
  121. - POSTGRES_PASSWORD={{ database_password | default('authentik') }}
  122. - POSTGRES_DB={{ database_name | default('authentik') }}
  123. - TZ={{ container_timezone | default('UTC') }}
  124. healthcheck:
  125. test: ['CMD-SHELL', 'pg_isready -U "{{ database_user | default('authentik') }}"']
  126. start_period: 30s
  127. interval: 10s
  128. timeout: 10s
  129. retries: 5
  130. volumes:
  131. - database_data:/var/lib/postgresql/data
  132. {% if network_enabled %}
  133. networks:
  134. - {{ network_name | default('bridge') }}
  135. {% endif %}
  136. restart: {{ restart_policy | default('unless-stopped') }}
  137. {{ endif }}
  138. volumes:
  139. database_data:
  140. driver: local
  141. redis_data:
  142. driver: local
  143. {% if network_enabled %}
  144. networks:
  145. {{ network_name | default('bridge') }}:
  146. {% if network_external %}
  147. external: true
  148. {% endif %}
  149. {% endif %}