template.yaml 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. ---
  2. kind: compose
  3. metadata:
  4. icon:
  5. provider: selfh
  6. id: pi-hole
  7. name: Pihole
  8. description: 'Network-wide advertisement and internet tracker blocking application that functions as a DNS blackhole.
  9. Provides DNS-level content filtering for all network devices, improving browsing performance, privacy, and security.
  10. Supports custom blocklists, whitelists, and seamless integration with existing network infrastructure.
  11. ## Prerequisites
  12. - :warning: Pi-hole uses local storage and configuration files and does NOT support running multiple replicas.
  13. This template enforces a single replica with node placement constraints to ensure stable DNS resolution.
  14. ## References
  15. - **Project:** https://pi-hole.net/
  16. - **Documentation:** https://docs.pi-hole.net/
  17. - **GitHub:** https://github.com/pi-hole/pi-hole
  18. '
  19. version: 2025.11.1
  20. author: Christian Lempa
  21. date: '2025-12-11'
  22. tags:
  23. - traefik
  24. - swarm
  25. - network
  26. - volume
  27. next_steps: 'Log in with your initial admin user:
  28. ```bash
  29. Username: admin
  30. Password: {{ webpassword }}
  31. ```'
  32. schema: '1.2'
  33. spec:
  34. general:
  35. vars:
  36. service_name:
  37. default: pihole
  38. container_name:
  39. default: pihole
  40. container_hostname:
  41. type: str
  42. container_timezone:
  43. type: str
  44. user_uid:
  45. type: int
  46. default: 1000
  47. user_gid:
  48. type: int
  49. default: 1000
  50. restart_policy:
  51. type: enum
  52. options:
  53. - unless-stopped
  54. - always
  55. - on-failure
  56. - 'no'
  57. default: unless-stopped
  58. required: true
  59. admin_settings:
  60. description: Admin Pi-hole Settings
  61. required: true
  62. vars:
  63. webpassword:
  64. description: Web interface admin password
  65. type: str
  66. sensitive: true
  67. autogenerated: true
  68. ports:
  69. vars:
  70. ports_dns:
  71. description: DNS port for Pi-hole
  72. type: int
  73. default: 53
  74. required: true
  75. ports_http:
  76. description: HTTP port for Pi-hole
  77. type: int
  78. default: 80
  79. ports_https:
  80. description: HTTPS port for Pi-hole
  81. type: int
  82. default: 443
  83. ports_ntp:
  84. description: External NTP port
  85. type: int
  86. default: 123
  87. required: true
  88. traefik:
  89. vars:
  90. traefik_host:
  91. default: pihole
  92. traefik_network:
  93. default: traefik
  94. type: str
  95. required: true
  96. traefik_domain:
  97. default: home.arpa
  98. type: str
  99. required: true
  100. traefik_enabled:
  101. type: bool
  102. default: false
  103. description: Enable Traefik integration
  104. traefik_tls:
  105. vars:
  106. traefik_tls_certresolver:
  107. type: str
  108. default: cloudflare
  109. required: true
  110. traefik_tls_enabled:
  111. type: bool
  112. default: false
  113. description: Enable Traefik TLS
  114. network:
  115. vars:
  116. network_mode:
  117. extra: 'If you need DHCP functionality, use ''host'' or ''macvlan'' mode. NOTE: Swarm only supports ''bridge'' mode!"
  118. '
  119. network_name:
  120. default: pihole_network
  121. network_macvlan_ipv4_address:
  122. type: str
  123. default: 192.168.1.253
  124. needs:
  125. - network_mode=macvlan
  126. required: true
  127. network_macvlan_parent_interface:
  128. type: str
  129. default: eth0
  130. needs:
  131. - network_mode=macvlan
  132. required: true
  133. network_macvlan_subnet:
  134. type: str
  135. default: 192.168.1.0/24
  136. needs:
  137. - network_mode=macvlan
  138. required: true
  139. network_macvlan_gateway:
  140. type: str
  141. default: 192.168.1.1
  142. needs:
  143. - network_mode=macvlan
  144. required: true
  145. network_external:
  146. type: bool
  147. default: false
  148. description: Whether the network is external
  149. swarm:
  150. vars:
  151. swarm_placement_host:
  152. required: true
  153. optional: false
  154. needs: null
  155. swarm_replicas:
  156. description: Number of replicas for Swarm mode
  157. type: int
  158. default: 1
  159. swarm_enabled:
  160. type: bool
  161. default: false
  162. description: Enable Docker Swarm mode
  163. swarm_placement_mode:
  164. type: str
  165. default: replicated
  166. description: The placement mode
  167. volume:
  168. vars:
  169. volume_mode:
  170. type: enum
  171. options:
  172. - local
  173. - mount
  174. - nfs
  175. default: local
  176. required: true
  177. volume_mount_path:
  178. type: str
  179. default: /mnt/storage
  180. needs:
  181. - volume_mode=mount
  182. required: true
  183. volume_nfs_server:
  184. type: str
  185. default: 192.168.1.1
  186. needs:
  187. - volume_mode=nfs
  188. required: true
  189. volume_nfs_path:
  190. type: str
  191. default: /export
  192. needs:
  193. - volume_mode=nfs
  194. required: true
  195. volume_nfs_options:
  196. type: str
  197. default: rw,nolock,soft
  198. needs:
  199. - volume_mode=nfs
  200. required: true