docker-compose.yml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. version: "3.9"
  2. volumes:
  3. pihole_config_etc:
  4. pihole_config_dnsmasq:
  5. heimdall_config:
  6. git_data:
  7. postgres_data:
  8. plex_config:
  9. plex_transcode:
  10. lidarr_config:
  11. radarr_config:
  12. sonarr_config:
  13. prowlarr_config:
  14. sabnzbd_config:
  15. nzbget_config:
  16. home_assistant_config:
  17. media_share:
  18. driver_opts:
  19. type: nfs
  20. o: addr=10.10.20.200,rw,hard
  21. device: :/mnt/media/
  22. downloads_share:
  23. driver_opts:
  24. type: nfs
  25. o: addr=10.10.20.200,rw,hard
  26. device: :/mnt/media/Downloads/
  27. downloads_incomplete_share:
  28. driver_opts:
  29. type: nfs
  30. o: addr=10.10.20.200,rw,hard
  31. device: :/mnt/media/Downloads/incomplete/
  32. services:
  33. traefik:
  34. image: traefik:v2.9
  35. # command: --log.level=debug
  36. ports:
  37. - "10.10.20.251:80:80/tcp"
  38. - "10.10.20.251:443:443/tcp"
  39. - "10.10.20.254:8080:8080/tcp"
  40. volumes:
  41. # So that Traefik can listen to the Docker events
  42. - /var/run/docker.sock:/var/run/docker.sock
  43. - ./traefik:/etc/traefik/
  44. traefik-forward-auth:
  45. image: thomseddon/traefik-forward-auth:2
  46. env_file: traefik/traefik-forward-auth.env
  47. labels: # you only need these if you're using an auth host
  48. - traefik.http.routers.auth.rule=Host(`auth.playne.au`)
  49. - traefik.http.routers.auth.entrypoints=websecure
  50. - traefik.http.routers.auth.tls=true
  51. - traefik.http.routers.auth.tls.domains[0].main=auth.playne.au
  52. - traefik.http.routers.auth.tls.certresolver=le
  53. - traefik.http.routers.auth.service=auth@docker
  54. - traefik.http.services.auth.loadbalancer.server.port=4181
  55. - traefik.http.middlewares.forward-auth.forwardauth.address=http://traefik-forward-auth:4181
  56. - traefik.http.middlewares.forward-auth.forwardauth.trustForwardHeader=true
  57. - traefik.http.middlewares.forward-auth.forwardauth.authResponseHeaders=X-Forwarded-User
  58. - traefik.http.routers.auth.middlewares=forward-auth
  59. heimdall:
  60. environment:
  61. - PGID=1000
  62. - PUID=1000
  63. image: ghcr.io/linuxserver/heimdall
  64. ports:
  65. - "10.10.20.254:80:80/tcp"
  66. restart: unless-stopped
  67. volumes:
  68. - heimdall_config:/config:rw
  69. - /etc/timezone:/etc/timezone:ro
  70. - /etc/localtime:/etc/localtime:ro
  71. labels:
  72. - traefik.http.routers.heimdall.rule=Host(`media.playne.au`)
  73. - traefik.http.routers.heimdall.tls=true
  74. - traefik.http.routers.heimdall.tls.certresolver=le
  75. - traefik.http.routers.heimdall.entrypoints=websecure
  76. - traefik.http.routers.heimdall.middlewares=forward-auth
  77. - traefik.http.services.heimdall.loadbalancer.healthCheck.path=/
  78. pihole:
  79. dns:
  80. - 202.142.142.142
  81. - 202.142.142.242
  82. environment:
  83. - PUID=1000
  84. - CONDITIONAL_FORWARDING_IP=10.10.20.1
  85. - CONDITIONAL_FORWARDING_DOMAIN=playne.id.au
  86. - DNS2=202.142.142.242
  87. - ServerIP=10.10.20.253
  88. - CONDITIONAL_FORWARDING=True
  89. - DNS1=202.142.142.142
  90. - PGID=1000
  91. - DNS_IPv6=2403:5800:c100:7802::feed
  92. - DNS_IP=10.10.20.253
  93. - IPv6=True
  94. image: pihole/pihole:latest
  95. ports:
  96. - "10.10.20.253:443:443/tcp"
  97. - "10.10.20.253:53:53/tcp"
  98. - "10.10.20.253:53:53/udp"
  99. - "10.10.20.253:80:80/tcp"
  100. restart: unless-stopped
  101. volumes:
  102. - /etc/timezone:/etc/timezone:ro
  103. - /etc/localtime:/etc/localtime:ro
  104. - pihole_config_etc:/etc/pihole:rw
  105. - pihole_config_dnsmasq:/etc/dnsmasq.d:rw
  106. labels:
  107. - traefik.enable=false
  108. - com.centurylinklabs.watchtower.enable=false
  109. git:
  110. image: gogs/gogs
  111. ports:
  112. - "10022:22"
  113. - "3000:3000"
  114. volumes:
  115. - git_data:/data
  116. labels:
  117. - traefik.http.routers.git.rule=Host(`git.playne.au`)
  118. - traefik.http.routers.git.tls=true
  119. - traefik.http.routers.git.tls.certresolver=le
  120. - traefik.http.routers.git.entrypoints=websecure
  121. - traefik.http.services.git.loadbalancer.server.port=3000
  122. # - traefik.tcp.routers.git.entrypoints[0]=gitssh
  123. # - traefik.tcp.routers.git.rule=HostSNI(`*`)
  124. # - traefik.tcp.services.git.loadbalancer.server.port=10022
  125. nextcloud:
  126. image: nextcloud
  127. restart: unless-stopped
  128. ports:
  129. - "10.10.20.252:80:80/tcp"
  130. volumes:
  131. - /mnt/documents/files/cloud/:/var/www/html
  132. environment:
  133. - POSTGRES_DB=nextcloud
  134. - POSTGRES_USER=nextcloud
  135. - POSTGRES_PASSWORD=nextcloud
  136. - POSTGRES_HOST=postgres
  137. depends_on:
  138. - postgres
  139. labels:
  140. - traefik.http.routers.nextcloud.rule=Host(`cloud.playne.au`)
  141. - traefik.http.routers.nextcloud.tls=true
  142. - traefik.http.routers.nextcloud.tls.certresolver=le
  143. - traefik.http.routers.nextcloud.middlewares=nextcloud_redirectregex
  144. - traefik.http.routers.nextcloud.entrypoints=websecure
  145. - traefik.http.middlewares.nextcloud_redirectregex.redirectregex.permanent=true
  146. - traefik.http.middlewares.nextcloud_redirectregex.redirectregex.regex='https://(.*)/.well-known/(?:card|cal)dav'
  147. - traefik.http.middlewares.nextcloud_redirectregex.redirectregex.replacement='https://$${1}/remote.php/dav'
  148. postgres:
  149. image: postgres:14
  150. ports:
  151. - "5432"
  152. volumes:
  153. - postgres_data:/var/lib/postgresql/data
  154. environment:
  155. - POSTGRES_PASSWORD=nextcloud
  156. - POSTGRES_USER=nextcloud
  157. - POSTGRES_DB=nextcloud
  158. labels:
  159. - traefik.enable=false
  160. watchtower:
  161. image: containrrr/watchtower
  162. environment:
  163. - WATCHTOWER_CLEANUP=true
  164. volumes:
  165. - /var/run/docker.sock:/var/run/docker.sock
  166. labels:
  167. - traefik.enable=false
  168. lidarr:
  169. environment:
  170. - PUID=65534
  171. - PGID=65534
  172. image: ghcr.io/linuxserver/lidarr
  173. ports:
  174. - "10.10.20.254:8686:8686/tcp"
  175. restart: unless-stopped
  176. volumes:
  177. - /etc/timezone:/etc/timezone:ro
  178. - /etc/localtime:/etc/localtime:ro
  179. - lidarr_config:/config:rw
  180. - media_share:/data
  181. labels:
  182. - traefik.http.routers.lidarr.rule=Host(`lidarr.playne.au`)
  183. - traefik.http.routers.lidarr.tls=true
  184. - traefik.http.routers.lidarr.tls.certresolver=le
  185. - traefik.http.routers.lidarr.entrypoints=websecure
  186. - traefik.http.routers.lidarr.middlewares=forward-auth
  187. sabnzbd:
  188. image: lscr.io/linuxserver/sabnzbd:latest
  189. environment:
  190. - PGID=65533
  191. - PUID=65534
  192. volumes:
  193. - sabnzbd_config:/config
  194. - media_share:/data
  195. - downloads_share:/downloads
  196. - downloads_incomplete_share:/incomplete-downloads
  197. # ports:
  198. # - 8080:8080
  199. restart: unless-stopped
  200. labels:
  201. - traefik.http.routers.sabnzbd.rule=Host(`sabnzbd.playne.au`)
  202. - traefik.http.routers.sabnzbd.tls=true
  203. - traefik.http.routers.sabnzbd.tls.certresolver=le
  204. - traefik.http.routers.sabnzbd.entrypoints=websecure
  205. - traefik.http.routers.sabnzbd.middlewares=forward-auth
  206. nzbget:
  207. environment:
  208. - PGID=65534
  209. - PUID=65534
  210. - NZBGET_USER=nzbget
  211. - NZBGET_PASS=sd9f769342krw
  212. image: ghcr.io/linuxserver/nzbget
  213. ports:
  214. - "10.10.20.254:6790:6789/tcp"
  215. restart: unless-stopped
  216. volumes:
  217. - nzbget_config:/config:rw
  218. - /etc/localtime:/etc/localtime:ro
  219. - /etc/timezone:/etc/timezone:ro
  220. - media_share:/data
  221. labels:
  222. - traefik.http.routers.nzbget.rule=Host(`nzbget.playne.au`)
  223. - traefik.http.routers.nzbget.tls=true
  224. - traefik.http.routers.nzbget.tls.certresolver=le
  225. - traefik.http.routers.nzbget.entrypoints=websecure
  226. - traefik.http.routers.nzbget.middlewares=forward-auth
  227. plex:
  228. devices:
  229. - /dev/bus/usb:/dev/bus/usb
  230. environment:
  231. - PUID=65534
  232. - PGID=65534
  233. - NVIDIA_VISIBLE_DEVICES=all
  234. - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
  235. ports:
  236. - "10.10.20.254:1900:1900/udp"
  237. - "10.10.20.254:3005:3005/tcp"
  238. - "10.10.20.254:32400:32400/tcp"
  239. - "10.10.20.254:32410:32410/udp"
  240. - "10.10.20.254:32412:32412/udp"
  241. - "10.10.20.254:32413:32413/udp"
  242. - "10.10.20.254:32414:32414/udp"
  243. - "10.10.20.254:32469:32469/tcp"
  244. # - "10.10.20.254:5353:5353/udp"
  245. - "10.10.20.254:8324:8324/tcp"
  246. image: ghcr.io/linuxserver/plex
  247. network_mode: host
  248. privileged: true
  249. deploy:
  250. resources:
  251. reservations:
  252. devices:
  253. - driver: nvidia
  254. count: 1
  255. capabilities: [ gpu ]
  256. restart: unless-stopped
  257. volumes:
  258. - /etc/timezone:/etc/timezone:ro
  259. - /etc/localtime:/etc/localtime:ro
  260. - media_share:/data
  261. - plex_config:/config
  262. - plex_transcode:/transcode
  263. labels:
  264. - traefik.enable=false
  265. radarr:
  266. environment:
  267. - PUID=65534
  268. - PGID=65534
  269. image: ghcr.io/linuxserver/radarr
  270. ports:
  271. - "10.10.20.254:7878:7878/tcp"
  272. restart: unless-stopped
  273. volumes:
  274. - radarr_config:/config:rw
  275. - /etc/timezone:/etc/timezone:ro
  276. - /etc/localtime:/etc/localtime:ro
  277. - media_share:/data
  278. labels:
  279. - traefik.http.routers.radarr.rule=Host(`radarr.playne.au`)
  280. - traefik.http.routers.radarr.tls=true
  281. - traefik.http.routers.radarr.tls.certresolver=le
  282. - traefik.http.routers.radarr.entrypoints=websecure
  283. - traefik.http.routers.radarr.middlewares=forward-auth
  284. sonarr:
  285. environment:
  286. - PGID=65534
  287. - PUID=65534
  288. image: ghcr.io/linuxserver/sonarr
  289. ports:
  290. - "10.10.20.254:8989:8989/tcp"
  291. restart: unless-stopped
  292. volumes:
  293. - /etc/timezone:/etc/timezone:ro
  294. - /etc/localtime:/etc/localtime:ro
  295. - sonarr_config:/config:rw
  296. - media_share:/data
  297. labels:
  298. - traefik.http.routers.sonarr.rule=Host(`sonarr.playne.au`)
  299. - traefik.http.routers.sonarr.tls=true
  300. - traefik.http.routers.sonarr.tls.certresolver=le
  301. - traefik.http.routers.sonarr.entrypoints=websecure
  302. - traefik.http.routers.sonarr.middlewares=forward-auth
  303. prowlarr:
  304. image: lscr.io/linuxserver/prowlarr:latest
  305. environment:
  306. - PGID=65534
  307. - PUID=65534
  308. volumes:
  309. - /etc/timezone:/etc/timezone:ro
  310. - /etc/localtime:/etc/localtime:ro
  311. - prowlarr_config:/config:rw
  312. - media_share:/data
  313. ports:
  314. - 9696:9696
  315. restart: unless-stopped
  316. labels:
  317. - traefik.http.routers.prowlarr.rule=Host(`prowlarr.playne.au`)
  318. - traefik.http.routers.prowlarr.tls=true
  319. - traefik.http.routers.prowlarr.tls.certresolver=le
  320. - traefik.http.routers.prowlarr.entrypoints=websecure
  321. - traefik.http.routers.prowlarr.middlewares=forward-auth
  322. #todo: once ipv6 is enabled, enable it here too
  323. ddns_cloudflare:
  324. image: oznu/cloudflare-ddns:latest
  325. restart: always
  326. network_mode: host
  327. environment:
  328. - API_KEY=nPHKK83fNj2bCKUtyytc3uOFqh0CukVyZWWKxH3p
  329. - ZONE=playne.id.au
  330. - SUBDOMAIN=apps
  331. - PROXIED=false
  332. # - RRTYPE=AAAA
  333. labels:
  334. - traefik.enable=false
  335. # because this service is `network_mode: host` we configure it in traefik.yml
  336. home-assistant:
  337. image: ghcr.io/home-assistant/home-assistant:stable
  338. network_mode: host
  339. privileged: true
  340. environment:
  341. - TZ=Australia/Perth
  342. volumes:
  343. - home_assistant_config:/config
  344. labels:
  345. - traefik.enable=false