docker-compose.yml 12 KB

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