diff --git a/gitea/compose.yaml b/gitea/compose.yaml index 32270cf..ad3e1f9 100644 --- a/gitea/compose.yaml +++ b/gitea/compose.yaml @@ -17,7 +17,7 @@ services: - /etc/localtime:/etc/localtime:ro labels: - traefik.enable=true - - traefik.docker.network=traefik + - traefik.docker.network=frontend - traefik.http.services.gitea_web.loadBalancer.server.port=3000 - traefik.http.routers.gitea_https.service=gitea_web - traefik.http.routers.gitea_https.rule=Host(`git.sebastiangedigk.com`) diff --git a/nginx-test/docker-compose.yml b/nginx-test/docker-compose.yml index 44df934..ea88642 100644 --- a/nginx-test/docker-compose.yml +++ b/nginx-test/docker-compose.yml @@ -11,8 +11,6 @@ services: - frontend labels: - "traefik.enable=true" - - "traefik.http.routers.nginx-http.rule=Host(`nginx.home.sebastiangedigk.com`)" - - "traefik.http.routers.nginx-http.entrypoints=web" - "traefik.http.routers.nginx-https.tls=true" - "traefik.http.routers.nginx-https.tls.certresolver=cloudflare" - "traefik.http.routers.nginx-https.entrypoints=websecure" diff --git a/plex/docker-compose.yml b/plex/docker-compose.yml new file mode 100644 index 0000000..3871ebc --- /dev/null +++ b/plex/docker-compose.yml @@ -0,0 +1,21 @@ +--- +services: + plex: + image: lscr.io/linuxserver/plex:latest + container_name: plex + networks: + - frontend + environment: + - PUID=1000 + - PGID=1000 + - TZ=Etc/UTC + - VERSION=docker + - PLEX_CLAIM= #optional + volumes: + - /volumes/extremessd/plex/plex/library:/config + - /volumes/extremessd/plex/tvseries:/tv + - /volumes/extremessd/plex/movies:/movies + restart: unless-stopped +networks: + frontend: + external: true \ No newline at end of file diff --git a/traefik/.data/certs/cloudflare-acme.json b/traefik/.data/certs/cloudflare-acme.json index a6e8db9..3d88b2e 100644 --- a/traefik/.data/certs/cloudflare-acme.json +++ b/traefik/.data/certs/cloudflare-acme.json @@ -84,6 +84,14 @@ "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR0akNDQXp1Z0F3SUJBZ0lTQldBWGhLeDFjaFh3MW1DVFlWclBWRnhuTUFvR0NDcUdTTTQ5QkFNRE1ESXgKQ3pBSkJnTlZCQVlUQWxWVE1SWXdGQVlEVlFRS0V3MU1aWFFuY3lCRmJtTnllWEIwTVFzd0NRWURWUVFERXdKRgpPREFlRncweU5qQXlNakF4TWpRMU5EZGFGdzB5TmpBMU1qRXhNalExTkRaYU1DY3hKVEFqQmdOVkJBTVRIR2RwCmRDNW9iMjFsTG5ObFltRnpkR2xoYm1kbFpHbG5heTVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUIKQndOQ0FBUkxjajNBdG9oNDgzOEhEa2Jyc250YWY2dHR4dVhuYUowY3FXbTYwdXBrbU0wMTJybjNrSis5ams2bgo5YmZpQ2cyY2xYVUQ2NWRqanFUdEFBZEJpelBDbzRJQ09qQ0NBall3RGdZRFZSMFBBUUgvQkFRREFnZUFNQk1HCkExVWRKUVFNTUFvR0NDc0dBUVVGQndNQk1Bd0dBMVVkRXdFQi93UUNNQUF3SFFZRFZSME9CQllFRkFOWGxQYjEKTkJILzlzQ3BCR2FXQlNJdEFRUkRNQjhHQTFVZEl3UVlNQmFBRkk4TkU2TDJMbjdSVUd3ekdEaGRXWTRqY3BISwpNRElHQ0NzR0FRVUZCd0VCQkNZd0pEQWlCZ2dyQmdFRkJRY3dBb1lXYUhSMGNEb3ZMMlU0TG1rdWJHVnVZM0l1CmIzSm5MekJBQmdOVkhSRUVPVEEzZ2h4bmFYUXVhRzl0WlM1elpXSmhjM1JwWVc1blpXUnBaMnN1WTI5dGdoZG4KYVhRdWMyVmlZWE4wYVdGdVoyVmthV2RyTG1OdmJUQVRCZ05WSFNBRUREQUtNQWdHQm1lQkRBRUNBVEF1QmdOVgpIUjhFSnpBbE1DT2dJYUFmaGgxb2RIUndPaTh2WlRndVl5NXNaVzVqY2k1dmNtY3ZNVEEwTG1OeWJEQ0NBUVFHCkNpc0dBUVFCMW5rQ0JBSUVnZlVFZ2ZJQThBQjNBRW1jbTJuZUhYenMvRGJlellka3ByaGJyd3FIZ0JuUlZWTDcKNmVzcDNmakRBQUFCbkh0TFMwNEFBQVFEQUVnd1JnSWhBT3A2cWlmYTFtRWFmTmxTcUJPUkFqUjQyYzZvclhSdgpYNStPZ2NNWFlwVTZBaUVBb3hJZ3diQ0V1cjRzVmFLV0ViVnBKNU1uZU5KRjhBbWZIM1VBaGxvU1UxVUFkUUFPClY1Uzg4NjZwUGpNYkxKa0hzL2VRMzV2Q1BYRXlKZDBocVNXc1ljVk9JUUFBQVp4N1MwdEVBQUFFQXdCR01FUUMKSUdUOEFnaFM0amhGdTRDZmtTdkxyMXRyejVZdmMzeFByWnREZElucTF5TXBBaUJtMlpCVkNoRC9oVkhML3ZxNQplQ0JmQkVNcHp3eWh3Z2hveWY4N0tKS2E3ekFLQmdncWhrak9QUVFEQXdOcEFEQm1BakVBaVl2NmVtNkVqbVR2Cnc4Q2tFa1ZyZTJPQmtxUCszaUh0aWQybEJqelE3ek5tZjI4bkJ2TUgvNG5kNGtvR09uTGlBakVBM0txZ09XTmsKOWJ6Q2pLQ0ZDTXU0ZHo5YWE2V2hyYmZkbkFiM3EvRmFzY0Faa2g0WFhEWkp0bmRQTEErbjd1SlYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVWakNDQWo2Z0F3SUJBZ0lRWTVXVFk4Sk9jSUp4V1JpL3c5ZnRWakFOQmdrcWhraUc5dzBCQVFzRkFEQlAKTVFzd0NRWURWUVFHRXdKVlV6RXBNQ2NHQTFVRUNoTWdTVzUwWlhKdVpYUWdVMlZqZFhKcGRIa2dVbVZ6WldGeQpZMmdnUjNKdmRYQXhGVEFUQmdOVkJBTVRERWxUVWtjZ1VtOXZkQ0JZTVRBZUZ3MHlOREF6TVRNd01EQXdNREJhCkZ3MHlOekF6TVRJeU16VTVOVGxhTURJeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkYKYm1OeWVYQjBNUXN3Q1FZRFZRUURFd0pGT0RCMk1CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCTkZsOGw3YwpTN1FNQXB6U3N2cnU2V3lyT3E0NG9mVFVPVEl6eFVMVXpETU1OTWNoSUpCd1hPaGlMeHh4czBMWGViNUdEY0hiClI2RVRvTWZmZ1Naak85U05IZlk5Z2pNeTl2UXI1L1dXT3JRVFp4aDdhejZOU05ucTN1MnViVDZIVEtPQitEQ0IKOVRBT0JnTlZIUThCQWY4RUJBTUNBWVl3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdJR0NDc0dBUVVGQndNQgpNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUF3SFFZRFZSME9CQllFRkk4TkU2TDJMbjdSVUd3ekdEaGRXWTRqCmNwSEtNQjhHQTFVZEl3UVlNQmFBRkhtMFdlWjd0dVhrQVhPQUNJaklHbGoyNlp0dU1ESUdDQ3NHQVFVRkJ3RUIKQkNZd0pEQWlCZ2dyQmdFRkJRY3dBb1lXYUhSMGNEb3ZMM2d4TG1rdWJHVnVZM0l1YjNKbkx6QVRCZ05WSFNBRQpEREFLTUFnR0JtZUJEQUVDQVRBbkJnTlZIUjhFSURBZU1CeWdHcUFZaGhab2RIUndPaTh2ZURFdVl5NXNaVzVqCmNpNXZjbWN2TUEwR0NTcUdTSWIzRFFFQkN3VUFBNElDQVFCbkUwaEdJTktzQ1lXaTBYeDF5Z3hENXFpaEVqWjAKUkkzdFRaejF3dUFUSDNad1lQSXA5N2tXRWF5YW5EMWowY0RoSVl6eTRDa0RvMmpCOEQ1dDBhNnpaV3pscjk4ZApBUUZOaDh1S0prSUhkTFNoeStuVXllWnhjNWJOZU1wMUx1MGdTekU0TWNxZm1OTXZJcGVpd1dTWU85dzgyT2I4Cm90dlhjTzJKVVlpM3N2SElXUm0zKzcwN0RVYkw1MVhNY1kyaVpkbENxNFdhOW5idWszV1RVNGdyNkxZOE16VkEKYURRRzIrNFUzZUo2cVVGMTBiQm5SMXV1VnlEWXM5Umhyd3VjUlZuZnVEajI5Q01MVHNwbE01ZjV3U1Y1aFVwbQpVd3AvdlY3TTR3NGFHdW50NzRrb1g3MW40RWRhZ0NzTC9ZazUrbUFRVTArdHVlMEpPZkFWL1I2dDFrK1hrOXMyCkhNUUZlb3hwcGZ6QVZDMDRGZEc5TStBQzJKV3htRlN0NkJDdWgzQ0VleTNmRTUyUXJqOVlNNzVydHZJanNtLzEKSGwrdS8vV3F4bnUxWlE0anBhK1ZwdVppR09sV3JxU1A5ZW9nZE9oQ0dpc255ZXdXSndSUU9xSzE2d2lHeVplUgp4cy9CZWt3NjV2d1NJYVZrQnJ1UGlUZk1PbzBaaDRnVmE4L3FKZ01iSmJ5cnd3Rzk3ei9QUmdtTEtDRGw4ejNkCnRBMFo3cXE3ZnRhMEdsMjR1eXVCMDVkcUk1SjFMdkF6S3VXZElqVDF0UDhxQ294U0UveHBpeDhoWDJkdDNoKy8KanVqVWdGUEZaMEVWWjB4U3lCTlJGM01ib0dabllYRlV4cE5qVFdQS3BhZ0RISlFtcXJBY0RtV0puTXNGWTNqUwp1MWlndjNPZWZuV2pTUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", "key": "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSVBhQjAxeHF2WmdDdTA3QmZxSVZhTHdXRVY3RkszWjMzbDFoT2pibkN0dGtvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFUzNJOXdMYUllUE4vQnc1RzY3SjdXbityYmNibDUyaWRIS2xwdXRMcVpKak5OZHE1OTVDZgp2WTVPcC9XMzRnb05uSlYxQSt1WFk0Nms3UUFIUVlzendnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=", "Store": "default" + }, + { + "domain": { + "main": "plex.home.sebastiangedigk.com" + }, + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURwVENDQXlxZ0F3SUJBZ0lTQllNdEd1dXZZVGxNQjFYczg1c1BnbWZGTUFvR0NDcUdTTTQ5QkFNRE1ESXgKQ3pBSkJnTlZCQVlUQWxWVE1SWXdGQVlEVlFRS0V3MU1aWFFuY3lCRmJtTnllWEIwTVFzd0NRWURWUVFERXdKRgpPREFlRncweU5qQXlNak14T1RJeU16VmFGdzB5TmpBMU1qUXhPVEl5TXpSYU1DZ3hKakFrQmdOVkJBTVRIWEJzClpYZ3VhRzl0WlM1elpXSmhjM1JwWVc1blpXUnBaMnN1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUVLZXVoMUJZMjN2L1Y2WXBlNDdCa1Y0ell3YnVpR0dhaW5iNDhDM2hsczQwSXZReWdjVDFUQXhubwppdkNQNExPVXdCZWF1VnVyQjN3Q2xCK3RXZ0JGcUtPQ0FpZ3dnZ0lrTUE0R0ExVWREd0VCL3dRRUF3SUhnREFUCkJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREFUQU1CZ05WSFJNQkFmOEVBakFBTUIwR0ExVWREZ1FXQkJRYzVzcXgKYkZqRi84SFkva29wQXVxaDN1bEdkekFmQmdOVkhTTUVHREFXZ0JTUERST2k5aTUrMFZCc014ZzRYVm1PSTNLUgp5akF5QmdnckJnRUZCUWNCQVFRbU1DUXdJZ1lJS3dZQkJRVUhNQUtHRm1oMGRIQTZMeTlsT0M1cExteGxibU55CkxtOXlaeTh3S0FZRFZSMFJCQ0V3SDRJZGNHeGxlQzVvYjIxbExuTmxZbUZ6ZEdsaGJtZGxaR2xuYXk1amIyMHcKRXdZRFZSMGdCQXd3Q2pBSUJnWm5nUXdCQWdFd0xRWURWUjBmQkNZd0pEQWlvQ0NnSG9ZY2FIUjBjRG92TDJVNApMbU11YkdWdVkzSXViM0puTHpjd0xtTnliRENDQVFzR0Npc0dBUVFCMW5rQ0JBSUVnZndFZ2ZrQTl3QjFBQTVYCmxMenpycWsrTXhzc21RZXo5NURmbThJOWNUSWwzU0dwSmF4aHhVNGhBQUFCbkl3cHBPMEFBQVFEQUVZd1JBSWcKQ1JsbFlPRVYwdDJSVkVZbGx6OXdjWDZIL1R3YS80emlZTEMzYVJDeWx2VUNJR1lqaHNtUXgzc01ZZTFSOG1zcwpDczFTZzFvOU85QlpST1VMcnhxS0pJR1BBSDRBcGNsNGtsMVhSaGVDaHczWWlXWUxYRlZraTMwQVFQTHNCMmhSCjBZaHBHZmNBQUFHY2pDbW9iUUFJQUFBRkFETTFmM0FFQXdCSE1FVUNJQW1mNU8vRkV6MkR4RG56WkpJQjEydk0KdUtBK1VvMWlaWDlOSXVuZzk3d3FBaUVBbzdxRU1vV0Q5bkdtQXBCUS9DL0s5RUE3WEFXVUh4RXU3Wk81aG1FLwpwa013Q2dZSUtvWkl6ajBFQXdNRGFRQXdaZ0l4QU5Ea2pPWXBsWHVuYzJrYXRCbGI2Y080emJITGt6MVZzZXFCCmFtZTVpSlhRYklEUHpxeFk3KytjbG5NV01pbEpYZ0l4QUpKeDRIMnQ3aDRNYjVTaVBxempCYzc4T1owY0J0RHgKdGlvR3JwcHp6dEdkbWtLamhSNTlpL2k0cDZRTXd4SmtCQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFVmpDQ0FqNmdBd0lCQWdJUVk1V1RZOEpPY0lKeFdSaS93OWZ0VmpBTkJna3Foa2lHOXcwQkFRc0ZBREJQCk1Rc3dDUVlEVlFRR0V3SlZVekVwTUNjR0ExVUVDaE1nU1c1MFpYSnVaWFFnVTJWamRYSnBkSGtnVW1WelpXRnkKWTJnZ1IzSnZkWEF4RlRBVEJnTlZCQU1UREVsVFVrY2dVbTl2ZENCWU1UQWVGdzB5TkRBek1UTXdNREF3TURCYQpGdzB5TnpBek1USXlNelU1TlRsYU1ESXhDekFKQmdOVkJBWVRBbFZUTVJZd0ZBWURWUVFLRXcxTVpYUW5jeUJGCmJtTnllWEIwTVFzd0NRWURWUVFERXdKRk9EQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk5GbDhsN2MKUzdRTUFwelNzdnJ1Nld5ck9xNDRvZlRVT1RJenhVTFV6RE1NTk1jaElKQndYT2hpTHh4eHMwTFhlYjVHRGNIYgpSNkVUb01mZmdTWmpPOVNOSGZZOWdqTXk5dlFyNS9XV09yUVRaeGg3YXo2TlNObnEzdTJ1YlQ2SFRLT0IrRENCCjlUQU9CZ05WSFE4QkFmOEVCQU1DQVlZd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3SUdDQ3NHQVFVRkJ3TUIKTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFBd0hRWURWUjBPQkJZRUZJOE5FNkwyTG43UlVHd3pHRGhkV1k0agpjcEhLTUI4R0ExVWRJd1FZTUJhQUZIbTBXZVo3dHVYa0FYT0FDSWpJR2xqMjZadHVNRElHQ0NzR0FRVUZCd0VCCkJDWXdKREFpQmdnckJnRUZCUWN3QW9ZV2FIUjBjRG92TDNneExta3ViR1Z1WTNJdWIzSm5MekFUQmdOVkhTQUUKRERBS01BZ0dCbWVCREFFQ0FUQW5CZ05WSFI4RUlEQWVNQnlnR3FBWWhoWm9kSFJ3T2k4dmVERXVZeTVzWlc1agpjaTV2Y21jdk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQm5FMGhHSU5Lc0NZV2kwWHgxeWd4RDVxaWhFalowClJJM3RUWnoxd3VBVEgzWndZUElwOTdrV0VheWFuRDFqMGNEaElZenk0Q2tEbzJqQjhENXQwYTZ6Wld6bHI5OGQKQVFGTmg4dUtKa0lIZExTaHkrblV5ZVp4YzViTmVNcDFMdTBnU3pFNE1jcWZtTk12SXBlaXdXU1lPOXc4Mk9iOApvdHZYY08ySlVZaTNzdkhJV1JtMys3MDdEVWJMNTFYTWNZMmlaZGxDcTRXYTluYnVrM1dUVTRncjZMWThNelZBCmFEUUcyKzRVM2VKNnFVRjEwYkJuUjF1dVZ5RFlzOVJocnd1Y1JWbmZ1RGoyOUNNTFRzcGxNNWY1d1NWNWhVcG0KVXdwL3ZWN000dzRhR3VudDc0a29YNzFuNEVkYWdDc0wvWWs1K21BUVUwK3R1ZTBKT2ZBVi9SNnQxaytYazlzMgpITVFGZW94cHBmekFWQzA0RmRHOU0rQUMySld4bUZTdDZCQ3VoM0NFZXkzZkU1MlFyajlZTTc1cnR2SWpzbS8xCkhsK3UvL1dxeG51MVpRNGpwYStWcHVaaUdPbFdycVNQOWVvZ2RPaENHaXNueWV3V0p3UlFPcUsxNndpR3laZVIKeHMvQmVrdzY1dndTSWFWa0JydVBpVGZNT28wWmg0Z1ZhOC9xSmdNYkpieXJ3d0c5N3ovUFJnbUxLQ0RsOHozZAp0QTBaN3FxN2Z0YTBHbDI0dXl1QjA1ZHFJNUoxTHZBekt1V2RJalQxdFA4cUNveFNFL3hwaXg4aFgyZHQzaCsvCmp1alVnRlBGWjBFVloweFN5Qk5SRjNNYm9HWm5ZWEZVeHBOalRXUEtwYWdESEpRbXFyQWNEbVdKbk1zRlkzalMKdTFpZ3YzT2VmbldqU1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "key": "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUhZZzIxTzN5R1RtK05XZ0ZSU1R1QTRvTGRnMHgwZUNTM24rY1JsVVJnaEpvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFS2V1aDFCWTIzdi9WNllwZTQ3QmtWNHpZd2J1aUdHYWluYjQ4QzNobHM0MEl2UXlnY1QxVApBeG5vaXZDUDRMT1V3QmVhdVZ1ckIzd0NsQit0V2dCRnFBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=", + "Store": "default" } ] } diff --git a/traefik/config/traefik.yaml b/traefik/config/traefik.yaml index a65bf03..ece1e88 100644 --- a/traefik/config/traefik.yaml +++ b/traefik/config/traefik.yaml @@ -9,17 +9,25 @@ entryPoints: permanent: true websecure: address: :443 + transport: + respondingTimeouts: + readTimeout: 600s + idleTimeout: 600s ssh: address: ":22" + providers: docker: endpoint: "unix:///var/run/docker.sock" exposedByDefault: false + file: + directory: /etc/traefik/dynamic + watch: true api: - insecure: false + insecure: true dashboard: true log: - level: DEBUG + level: INFO accesslog: filepath: /var/log/traefik.log metrics: diff --git a/traefik/docker-compose.yml b/traefik/docker-compose.yml index f53151c..075699b 100644 --- a/traefik/docker-compose.yml +++ b/traefik/docker-compose.yml @@ -28,7 +28,7 @@ services: - /var/run/docker.sock:/var/run/docker.sock - ./config/traefik.yaml:/etc/traefik/traefik.yaml:ro - .data/certs/:/var/traefik/certs/:rw - # - ./dynamic:/dynamic:ro + - ./dynamic:/etc/traefik/dynamic:ro # Traefik Dynamic configuration via Docker labels labels: @@ -36,7 +36,7 @@ services: - "traefik.enable=true" # Dashboard router - - "traefik.http.routers.dashboard.rule=Host(`traefik.home.sebastiangedigk.com`) || Host(`traefik.sebastiangedigk.com`)" + - "traefik.http.routers.dashboard.rule=Host(`traefik.home.sebastiangedigk.com`)" - "traefik.http.routers.dashboard.entrypoints=websecure" - "traefik.http.routers.dashboard.service=api@internal" - "traefik.http.routers.dashboard.tls=true" @@ -45,5 +45,5 @@ services: # Basic‑auth middleware - - "traefik.http.middlewares.dashboard-auth.basicauth.users=garry1704:$$apr1$$UcPofYFu$$4mN3Py/9BbX3GnUiti5yu." - - "traefik.http.routers.dashboard.middlewares=dashboard-auth@docker" + #- "traefik.http.middlewares.dashboard-auth.basicauth.users=garry1704:$$apr1$$UcPofYFu$$4mN3Py/9BbX3GnUiti5yu." + #- "traefik.http.routers.dashboard.middlewares=dashboard-auth@docker" diff --git a/traefik/dynamic/dynamic.yaml b/traefik/dynamic/dynamic.yaml new file mode 100644 index 0000000..1f9cace --- /dev/null +++ b/traefik/dynamic/dynamic.yaml @@ -0,0 +1,14 @@ +http: + routers: + plex: + rule: "Host(`plex.home.sebastiangedigk.com`)" + service: plex + entryPoints: + - websecure + tls: + certResolver: cloudflare + services: + plex: + loadBalancer: + servers: + - url: http://host.docker.internal:32400