diff --git a/audiobookshelf/audiobookshelf.container b/audiobookshelf/audiobookshelf.container new file mode 100644 index 0000000..922327e --- /dev/null +++ b/audiobookshelf/audiobookshelf.container @@ -0,0 +1,21 @@ +# audiobookshelf.container +[Unit] +Description=Audiobookshelf Server + +[Container] +ContainerName=audiobookshelf +Image=ghcr.io/advplyr/audiobookshelf:latest +AutoUpdate=registry +NoNewPrivileges=true +PublishPort=13378:80 +Volume=/media/CONTAINER/Audiobooks:/audiobooks +Volume=/media/CONTAINER/Books:/books +Volume=/media/CONTAINER/Podcasts:/podcasts +Volume=audiobookshelf-config:/config:Z +Volume=audiobookshelf-metadata:/metadata:Z + +[Service] +Restart=unless-stopped + +[Install] +WantedBy=default.target diff --git a/ejabberd/certs/accounts/acme-v02.api.letsencrypt.org/directory/3bdd82b805b1708ea9f5912e15595fdc/meta.json b/ejabberd/certs/accounts/acme-v02.api.letsencrypt.org/directory/3bdd82b805b1708ea9f5912e15595fdc/meta.json new file mode 100644 index 0000000..45a2d43 --- /dev/null +++ b/ejabberd/certs/accounts/acme-v02.api.letsencrypt.org/directory/3bdd82b805b1708ea9f5912e15595fdc/meta.json @@ -0,0 +1 @@ +{"creation_dt": "2026-02-07T06:54:40Z", "creation_host": "b37698d34d1a"} \ No newline at end of file diff --git a/ejabberd/certs/accounts/acme-v02.api.letsencrypt.org/directory/3bdd82b805b1708ea9f5912e15595fdc/private_key.json b/ejabberd/certs/accounts/acme-v02.api.letsencrypt.org/directory/3bdd82b805b1708ea9f5912e15595fdc/private_key.json new file mode 100644 index 0000000..55b54cf --- /dev/null +++ b/ejabberd/certs/accounts/acme-v02.api.letsencrypt.org/directory/3bdd82b805b1708ea9f5912e15595fdc/private_key.json @@ -0,0 +1 @@ +{"n": "zZcWncvoS2Rh2qmFX_RPwj2GeXvT5NGttMA48jDStRbBom4840QuWfx2Gv85FHA-bIXyNXue95S81cv4wbmLmbNnHxAez3VGT3gXDl7iu4kR2U3kmDEtIzZbQLt7C3Bd3WdmXQU4bOVO7xS4Tw8APMqaj-Mm2ryUqwXF3nHH-vcw--672Tn9BgK_j2Cm9lY3Npv9CydPG9RVqsKfYBfdEoIQOhqpxjLSohxkXN8b8jR8TysMtdYBTDw7mdSpXvgNx935mHrj0JjHLCrLDpXShb1rB-xb7OoaIRABZYpjb8XVbRk9nM9ZXtrKBqSkSv1GV2Y4ic8ao-UlQH4gTeXcFw", "e": "AQAB", "d": "YUTtt2TFF_57abgw2VA--DihyhJzE1y9IbqcdsHwvyrwHEip2CDnCT4wJt_AAtKERlYtXW6KrLqbiU_C9u0xhlviG0lGOoNS68B2sB7miTH11ulKkVMa9wD9tae-NJBKaLlGLhaNNsBbUzRra0Q-qYR2EkO3m2ADutK1ZmRQ6IR3xrtn8r21o9pHEEsmllZitWmbvFXzsQAEOYhpiLiR3B4xA82D1P7qFdZPfNKsdCaL-Qi_cTgLpogeKO-CH-PrxJdbgKUjWdaqIoluxv7mvb6r9fiQIVK_-BFap5IFFrqY3lIBnwmh9eWIrX4bFJA4rZz-95XKRAP20bKplI2lyQ", "p": "-K_ghTRzqxhRSQ_VhmndN6Vq2pGn_uWenrCGDSdRVujOovPUdNEpt1Hr3sPZGd1lUSE4U0yb4GO0xTASa0W5HrHkDuQJ2AY04AcfVgxVAPZLQjTJ0gTHXGU6Pz2IA0MwgvwqyrDC8XFZHJMGI-OvBTNp2Mrc7CTFxFtX4Xv6kMM", "q": "06LG8tWSWBdazFmHt-Ob2wj-urYNBcQYVD7MkSfXVlACXQBn6WRn0jcDW5bPOdhZXkF8D-2UA88HFMh6BE9n-FY5ln3YpzSbK43NkOULoEYT802BBZXpx3pA2hVYPjOz5efjR1yrUCVBr-_AvlpACQhldEH7cCSqbkf9GBz3Uh0", "dp": "eEzkSKvJ9I9r6vMM8NvPVrbfjOH_KZA8fjmYb06Ay5ENPMjFEsmH65Vmi7mkER4HgAqY67rYgODatrT9hAUTeyTE1Os9U9IUy_bGEuMeT7vVRi6xHraPFkQlvCfw3tsm4YZI0QpXE2Mon2kEBGKE7PglEOl5m4ZiYQ1q4roNyO8", "dq": "sw5NdLbtkkpwL-Svxw1zl-YMXrwYWICIdP6M5WLn9cbLuRPW1sh0bo7M8Hiv6yj4s56D8JX5XR-Txim30l28gYeyQXlIDG-duUPIYIbpRzkDOB6iwq8LlBIDPIBCoJ3t3t5KlN36s1xSLyCR2ntRIlNQQwRwT3k2GQgfQn9_YKE", "qi": "SQZlV2NTPAfG7LG_FhrQ4PwcHLNnTEJ11zFbKaOOWAdEHRfhWhnOzgBI-5LlfAWWrRE6QUlOP6c9A4tbeym4ObMDQ9qQra-Q7MoTZxzRMTAyvN3xckZ8GZlzl6PXZHeVmjo7gWqiY7gict7USNEAndD2_ahDCFRyRSGCYUf_DMk", "kty": "RSA"} \ No newline at end of file diff --git a/ejabberd/certs/accounts/acme-v02.api.letsencrypt.org/directory/3bdd82b805b1708ea9f5912e15595fdc/regr.json b/ejabberd/certs/accounts/acme-v02.api.letsencrypt.org/directory/3bdd82b805b1708ea9f5912e15595fdc/regr.json new file mode 100644 index 0000000..70310f8 --- /dev/null +++ b/ejabberd/certs/accounts/acme-v02.api.letsencrypt.org/directory/3bdd82b805b1708ea9f5912e15595fdc/regr.json @@ -0,0 +1 @@ +{"body": {}, "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/3039074176"} \ No newline at end of file diff --git a/ejabberd/certs/ejabberd.key b/ejabberd/certs/ejabberd.key new file mode 100644 index 0000000..cecfee5 --- /dev/null +++ b/ejabberd/certs/ejabberd.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCniaT8P47a49aE +OV/fJL75HMNCDwUPsNBaBQ0Cvu1bR2CpN8B1ko2CxfJ45x92uPJMoA0RcEFzSDXQ +ID3vMtfiG255uITPDk/HfkxwYGsiq+CzhsaS2pHPpq6QUf3VC6SsMQlq7TgkPgZx +jEuazvPX/wJrKq7RNoRswloyvNHF/m6NdnY/E6/xNGOsyacAHsa6z0os8iETZWvK +6BwwJDA5xnbylYJlbgG/5jU+QgBnSP9u3YGlU6iYxUGvI93B/FJtIUm1aVuMMnaH +dW4XQGspPhLzHW5fXvMOSd4axMOb2VKfbf5ELIbVpK+zAL4Py7e+2c/3TOqFGeqo +41R6fssRAgMBAAECggEANhy7mKuwqNthDIj5gbm9IvnaySnPwS8jRIgQGTxwroRB +4LX8qBzjLwNfWxSPcYmv3Pbu8Zx3z1PZ6bSYPHuIBeRFTPQ/lR7yvqT47Gz//Y1V +QLb9yS3mXZLhHAUXfqnJkMIv4ATplq8f5qnhO4mvcarQbau2FiXNJNGrT2r0OEX9 +RlFOTc1nGPT1MI7EotdviNf5u6QmnfwzS+foKHHP3YibkZst4pGbYjpd0G8Ogr8i +HsomgsyGJwi/5E0o0bnBjBMl8HcsnOOKntdp1S8kxOUmn7ViRvmXer0DVoFGrjj4 +W7IQAZ1Lg+aSU4ztoW5Yt7eSC5RCH3xCYZjzUXhmTwKBgQDRM0BJiOCkcKEBba8J +sDbNYI6bdN0K+nDeWBkCg9AUz/QjN4T74EDJeLB6B/b0nL8JRaFxvJaQSzkLe3lZ +oL4WZsZOkVv57LWNPf4iubKEzOg15CIIswNxdkRyKXXbKM3bmePUKwct2S0QBD/A +KmgAavwQDl3Bt2STioORZ8hIZwKBgQDNBGjgmMQgO6te14Nh8PksV/RmCefjS4Eh +QpykrvvJbINJETgjtxa2pPpQGpfneBxFPqfoKB95aTz150SAbjPTA7qHkzsso2w0 +Cp56FVwAIe80CMijhhTcDyEPxJPAPKA+lscUXPcotFyaXaeGkO5nBDxaFSJYSBz/ +7CyCM6eFxwKBgQCLWCz5DiA7x/2mmu2dcW9/a1Jx/+yANILbxyiZgT0nr8B5eLCu +qRfeWvKJxiZbltC0l1nLDYfogwJzQIJ7DdOvzjNHABGYrm/brbBKZxCe3nHJ+7Qj +wUGI4PMEa9Nh8JL2NFIJ78MvadpXMc1Y7aYqqRhOhZMzxjlLAVdTkiJY/wKBgQCC ++jc6jb52zUgtfkfccYPu9X4ZFmkECD/GDPVgLL6FL4MsUgjooFatdvbH6EV1xoFh +J6dDpSZ+fWJJw2c7GayYOgCYDtK2MO22zbXzTuQI3aUhPB9agRWghTXdCfxOyyyg +79jdxIrOgXPL1ttpF/yG6ejYsDnR5rhINA03XWLADwKBgDcxmnmfHlzyPv/Ydx4k +awpj70lCCf6Q2JIotk67LaODpIHoOM1D0ZC0pbLa7nQVb8fvprEkYgWyX0TuaQw+ +1ZKFLptI4p/KGuqCKO0zxFOR4jDPuKyWHRqqAO0K4uw0BJLNyZlDEmrEpDHR9jhG +cZzdI5Vi2j6poXcxiXdKkWwl +-----END PRIVATE KEY----- diff --git a/ejabberd/certs/ejabberd.pem b/ejabberd/certs/ejabberd.pem new file mode 100644 index 0000000..996d3aa --- /dev/null +++ b/ejabberd/certs/ejabberd.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqTCCApGgAwIBAgIUSIL3OlIkNfLyilidMJdR1k6OJQUwDQYJKoZIhvcNAQEL +BQAwZDELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0dlb3JnaWExEDAOBgNVBAcMB0F0 +bGFudGExEzARBgNVBAoMCkxveHRoZWxpb24xHDAaBgNVBAMME3htcHAubG94dGhl +bGlvbi5jb20wHhcNMjYwMjA3MDI1NzI3WhcNMjcwMjA3MDI1NzI3WjBkMQswCQYD +VQQGEwJVUzEQMA4GA1UECAwHR2VvcmdpYTEQMA4GA1UEBwwHQXRsYW50YTETMBEG +A1UECgwKTG94dGhlbGlvbjEcMBoGA1UEAwwTeG1wcC5sb3h0aGVsaW9uLmNvbTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKeJpPw/jtrj1oQ5X98kvvkc +w0IPBQ+w0FoFDQK+7VtHYKk3wHWSjYLF8njnH3a48kygDRFwQXNINdAgPe8y1+Ib +bnm4hM8OT8d+THBgayKr4LOGxpLakc+mrpBR/dULpKwxCWrtOCQ+BnGMS5rO89f/ +AmsqrtE2hGzCWjK80cX+bo12dj8Tr/E0Y6zJpwAexrrPSizyIRNla8roHDAkMDnG +dvKVgmVuAb/mNT5CAGdI/27dgaVTqJjFQa8j3cH8Um0hSbVpW4wydod1bhdAayk+ +EvMdbl9e8w5J3hrEw5vZUp9t/kQshtWkr7MAvg/Lt77Zz/dM6oUZ6qjjVHp+yxEC +AwEAAaNTMFEwHQYDVR0OBBYEFFJbx5cuSLiGACF/S9bPc1JIzVslMB8GA1UdIwQY +MBaAFFJbx5cuSLiGACF/S9bPc1JIzVslMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAIfbIIhHVvMMeBjZa3YW5obyD/2k7TMj3+2UNJ85NZUSJHVZ +zSg33dLGTUUDsiNDfRPu7MDZDePiRcigHgmr8THv8feJOL715Yc10r4pmYENlB+8 +xferjhD04GOm2hbNWuCQKYTByNoBzWwVy6ihLKDqrF/P6m2Y3PXVXVohfD+LbpSY +affUML+KtXiAVLgCpiQ3iaEL5tJ3Rav8IXA9KKrC88A6vRKbTCvExbJVL5lmSVHu +F3SNygMNdY5AdgEKQQdq9aNTkjeN61Das+3WztDuKeDfKJwoLlG/m3vnuL3gmFuk +yncuyfLU4bmLTnnopn6DwDFe45CizlicLPfqGpA= +-----END CERTIFICATE----- diff --git a/ejabberd/certs/xmpp.crt b/ejabberd/certs/xmpp.crt new file mode 100644 index 0000000..596ba41 --- /dev/null +++ b/ejabberd/certs/xmpp.crt @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFHTCCAwWgAwIBAgIUWPSfA+ASwbBMAS9QWtQ4W4lcDmswDQYJKoZIhvcNAQEL +BQAwHjEcMBoGA1UEAwwTeG1wcC5sb3h0aGVsaW9uLmNvbTAeFw0yNjAyMDcwMjUx +NThaFw0yNzAyMDcwMjUxNThaMB4xHDAaBgNVBAMME3htcHAubG94dGhlbGlvbi5j +b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDFZSYYtvdY7h0x4t3q +WehvFU3FZFhXQ0Qmk797Jl4T8Vrkx+XvCK+1Eu/UqyZcIHb12r9eFPZILIVLLF4t +n+B1Qwnxg63rTpZ7DjDnV7zECZLxz4WND1iUC0ec71FvBQJm1fee1z/45F6q8idY +2VIRK4zAHSae0Mfgl7wEErTw2vmHCVXU4PKzIE7BnpYIUflM6hOjb9M/I6EBwjiN +/kZ85caAf31azAyHT94xbdbSkgsCBZYh5yVh/Qtfz6MCfYHxyxMlc6fyyoOdJMqG +/XDKmck7LpEHZzCLXdguR2egB27Nr3bjkds2nPB4WuYCUVFR02ZO3zyzWkBj4gT8 +OT3PZJ37Kc0q6kPqAFTKIhihofZuc2sAklXxH2TQ9TtL+qlpPjEW+P/eOsZW2l9F +bWMYwdLthkMqpUncXTptXFGdxEHjPlQuJivA6KgKgv+HbEY11bzvbYEUbLftJYey +SL3v/mAZhVVfKFKD47mDXvgIG+pS4e5/kZoCyVfvbl0zrFjqf05LMDO0QND9XzDt +pmId2lYBStT4SJP1goup6M1/1A5F/ffb58czIumoS4hgoJ+6z9KIkoldCjHPijmB +o0cKQ7P5+9FKyc7dqKPRp0e/DGUKIzd11Niv26JIfOrthO9vpLse326NyauubWs2 +VXW7KNaqKzS2secL9yDwPqhpkwIDAQABo1MwUTAdBgNVHQ4EFgQUDujcZlS4N5wA +dAS5YkeEOv8h+9AwHwYDVR0jBBgwFoAUDujcZlS4N5wAdAS5YkeEOv8h+9AwDwYD +VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAUqMEjctOcZ+3gE3v3fgf +CeP/7ehBAOGtRhjeOlzCKJjrPA+aMv7ZWhocvYI7pNgKgrpNdozsX5rf22Bn4Ate +8bXLemVXOTlmI39qltDGRTgiYrTv38lfeYHPKEM9hbsYNH9PcYqGEAkFG0rkfJN/ +unaW6ec5RwWxn67R/IjKn3ETdqSkbfMDzy1ntTOJX4X0tkTDTjNZHM+v/6o9F+sS +xvne3mV6ZGET1z/Ssg+Qdv0u4ydYixwKBq0AoyDQikJKd8W4/mLxkkS4cHUfujXm +Qz2A6UsIk4QxIyBBfU7HJ/AEv+6FJmIUuwgHaYKuy3A557bx0yOweMov613FQ9AL +U6krk8MBHgCPMtl3HvFxMz1KdB0xYqnI1tNd+uE/p8AuC5hgVJHT3dll8JKYCR9J +yjq2O4dt3iRJW8/nNBnOVu6Jp0HCgT9yOaLoTNuOAuJFUG4dIZrpGRROR3YL62Hc +YVHOf7n7YF+arSJo/5T5+c4goppsPlmIf8z2s9HzfbKoeeOqg+MX8VNmg61kuIo/ +QOkLA9H2hgCv2sJG90h/ym+Jqr3d0kWrDRINWFoGwdWsFEjW4MsVMRZcQMUV0WW6 +wWo4I5cFas/2qhUGomDnxrLsOKxxlje9o42eofYZPFECtkp34uA2Loe5Iip8x33s +wWAuQ6y/fv921/Lqf+aov5U= +-----END CERTIFICATE----- diff --git a/ejabberd/certs/xmpp.key b/ejabberd/certs/xmpp.key new file mode 100644 index 0000000..bdac4b1 --- /dev/null +++ b/ejabberd/certs/xmpp.key @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +MIIJQQIBADANBgkqhkiG9w0BAQEFAASCCSswggknAgEAAoICAQDFZSYYtvdY7h0x +4t3qWehvFU3FZFhXQ0Qmk797Jl4T8Vrkx+XvCK+1Eu/UqyZcIHb12r9eFPZILIVL +LF4tn+B1Qwnxg63rTpZ7DjDnV7zECZLxz4WND1iUC0ec71FvBQJm1fee1z/45F6q +8idY2VIRK4zAHSae0Mfgl7wEErTw2vmHCVXU4PKzIE7BnpYIUflM6hOjb9M/I6EB +wjiN/kZ85caAf31azAyHT94xbdbSkgsCBZYh5yVh/Qtfz6MCfYHxyxMlc6fyyoOd +JMqG/XDKmck7LpEHZzCLXdguR2egB27Nr3bjkds2nPB4WuYCUVFR02ZO3zyzWkBj +4gT8OT3PZJ37Kc0q6kPqAFTKIhihofZuc2sAklXxH2TQ9TtL+qlpPjEW+P/eOsZW +2l9FbWMYwdLthkMqpUncXTptXFGdxEHjPlQuJivA6KgKgv+HbEY11bzvbYEUbLft +JYeySL3v/mAZhVVfKFKD47mDXvgIG+pS4e5/kZoCyVfvbl0zrFjqf05LMDO0QND9 +XzDtpmId2lYBStT4SJP1goup6M1/1A5F/ffb58czIumoS4hgoJ+6z9KIkoldCjHP +ijmBo0cKQ7P5+9FKyc7dqKPRp0e/DGUKIzd11Niv26JIfOrthO9vpLse326Nyauu +bWs2VXW7KNaqKzS2secL9yDwPqhpkwIDAQABAoICABak2c/v/UPoXNUCL27YzX8g +tIE2V6P7BXBfdpHL/vLOtxyTid734iAlgfmlgIsE9mCRrW4/fVkeMlRDTLJzKq6I ++DUKZAMgSsbnA9kmCXN7na27nphl8EVbXeW01mSj8HiXhwZjruUAXZPCn5zjoTRz +CHxpW6rQTH2JKnpVIwiWNhW1jnETNQQzapVvecqOjMiz+XjANT2C+s9W1mIDj1Z4 +jWLkPR8TVUSYdua4sPIK6tRai7Rr7a/l9U4SZaK9fxCbuSCMufFyJdL7C3iczjmP +lrQBTYXJ4pm6NDhq3IpRD/bsb/j/HGSRcEx+MPCHH4sBczUNCsuQSN6saOH+NwbF +399QsxpzIvZH9Uup3dc2oESbF1Riuijo+O210EdvZ+1fpU/oznsqYefylCmFy49T +E5IUKHJoPKuR/Q+mamCZS/e6ZwoFaa+pYQSLZc1L5r8XXju2ZWoR4TP/L8qnPMIb +muM9Dgyv3keNgxxn08nYqXPawbRe/x8KSDgitUskQUeN74/zvl2YV3wX9zZP6l5D +ZvN/Ssio/UAyJzJZ7Sl8cdqwtqKPgYfECyjldS93VQJG/VxyZwvY1kAbLmGh8jQ8 +/quN3N24GOREHoSpvYS6zrgRxwU2KBmTNTptW/8tBCuKNzA4YBlucI4ziHZ1bivU +Yq7AsCvdwvf2v061owtxAoIBAQDtKyzE5jkc5vP00DwPUiqJ2XZ2Ww0t1Pgjv8Y+ +pl7/aybQRslKgAwbjaNoUJvA/HY1mSJtFrpYjBRK+bZLwK2gxJbEq60av+3guJk7 +Raft8LtAnRtlooc6XYo4dQnVybsKC0/vjgbR4U3i33whIe/bsr7VQtILpsbV8AAb +hEO8Y9ggbe2aytItdqAENbUkpb07FDI5wwVhKDWROIk9lXGE2GSxToKy0PY7m2pF +ZGqNcbf3QMsknuA48XWeUmdh2oqtmN5Qw6B9t2lFocAPV/9NZviv8dhGHxWkxVFp +OAAYrBYnZR7X/l4sUo2CzT7aEw8dFrgNc/rbgUrOzCZ6YhRPAoIBAQDVEYOqWmiQ +6FHz9+9JAJatngzrBGQZ+vUy4cRE6vc1JxPt7QrvuphF3hzI4pi3meDonIDxc5ZY +n2n/ki3JVEqorhgF7LqlAQB82G0cmtzHixxBcs8sieIlO+FhZn+ew6vrGnZdadkf +p4JJOQj688yBNiFstg8ozV4XQOXB8XWjqtiCdNWa6k0++GrbycSxYosO5617xz3B +1Ll+QD7vv1QyW281DXwjl6rWLiI3gzTHxfZzhDTj9MM9ds09Vmxx6ztxOyp/HMxi +Vy/XKlv0EvE++igLLFDD3nSTqRU6Bs/3wsBy0sAYUSMzlZUY+QVg8J/WIpaszmdS +3Jqe7Hj20NF9AoIBAGnJSD7LMc5idY5NE30B+VdjWCOSmV5IECZh89sd+mGTOczM +xhwk4UGo+6obyl1aPp/JnkFqUdQNJ0AKAfXoC4oaJeWzbZLw6PnDXRXDDBRlvCAl +84Jx7D9sWaq1CZ4CTRs90HnZr9EN3d/EL2nX6VTldZlKJMZtrWLfmiyr4kq1fkF4 +xvK0ZOtCbj1yd0nRY4Zmi8CX7F5ZwQr1XMHLVscafk9X5ZQ9AJe1ysEI+T3960Ct +9e5vrzO2/++Oce6DvDeSaBc+KufoV1xnuXMenRG5TFOuW/lrBAxqttVn1SMsHvWT +dR6Cpx6988DUK6S5u5QN/iqCAPLHyMZU6RTNiqECggEAQJfarp5R7PxBPBEB/cOr +6l5r1CO0pRurkg1Xjv0cjISYShz+n8aVuzimyU/ItIB16o7nmEtOXPeXDt+l+c8Q +AyskJUerHbK8Dx0dlvprzCKkIkNIA1yZrmgE355POjZfvBp9n7wjErGZkdE0o7+d +U96xK1/WIKyBxdLq1Gz7GO8GTCZXS2uUl26AFrmIY65YMeCSe1/fnQ98XIXljpEW +WV3WzOKVq8SjCeNahDHGonmlSUffMOxW9B88AUhd//ssPhuNupNkcruzySsSTWAg +utLjqN96bKbX+Jvdz4WZLqdf6G9zxOt0HINQfA2iT80i56v8uc6pDDnMtjlCQrDz +kQKCAQBzfcggoTih2y2bns0UdSB5xZ19GkhjYTHaoFcV3DltV5Nl52E9jOZe8gV4 +mmyMdnwh6Ey6RJNqKeqS/3p6WFdCzir+WM99vF5AgQSIchl1Kx2lZrY6j/ZW8hTf +uslxpxM452aBRjwlrNajE4qmAfqSWWrn+KPKMD0nUP+lmhCXEdUEsVJVMyXlNtHb +WjfwZUEqEatFWvUEvsw7ETqQ9U5AGc6kVviuQ3869+Wyy5GE3SWgPu/0h4M4Ysrj +LC7UKpE+JnFYP8J5qwqbl93xFn2TOwflLnFGvl6I7HWbkzaQmf7cr8a2nZxie2Z5 +4eUktTkrIz652OypW9p9wW2m5MXw +-----END PRIVATE KEY----- diff --git a/ejabberd/ejabberd.container b/ejabberd/ejabberd.container new file mode 100644 index 0000000..d62214e --- /dev/null +++ b/ejabberd/ejabberd.container @@ -0,0 +1,35 @@ +[Unit] +Description=ejabberd Server + +[Container] +ContainerName=ejabberd +Image=ghcr.io/processone/ejabberd:latest +AutoUpdate=registry +#For XMPP over STARTTLS +PublishPort=5222:5222 +#For XMPP over TLS +PublishPort=5223:5223 +#For XMPP Federation +PublishPort=5269:5269 +#For admin interface (admin/) +PublishPort=5280:5280 +#For admin interface with encryption, API, CAPTCHA, OAuth, Websockets, XMPP BOSH +PublishPort=5443:5443 +#For admin interface (/) +PublishPort=1880:1800 +#For MQTT PublishPort=5478:5478/udp #For UDP: STUN service +PublishPort=1883:1883 +#For SOCKS5 file transfer proxy +PublishPort=7777:7777 +Volume=./ejabberd.yml:/opt/ejabberd/conf/ejabberd.yml:Z +Volume=ejabberd-database:/opt/ejabberd/database:Z +Volume=ejabberd-uploads:/opt/ejabberd/upload:Z +Volume=/etc/letsencrypt/live/loxthelion.com:/certs: +EnvironmentFile=ejabberd.env +#Exec=live + +[Service] +Restart=unless-stopped + +[Install] +WantedBy=default.target diff --git a/ejabberd/ejabberd.env b/ejabberd/ejabberd.env new file mode 100644 index 0000000..5fd162f --- /dev/null +++ b/ejabberd/ejabberd.env @@ -0,0 +1,4 @@ +EJABBERD_MACRO_HOST=loxthelion.com +EJABBERD_MACRO_ADMIN=lyncoln@loxthelion.com +REGISTER_ADMIN_PASSWORD=oddsbodikins +CTL_ON_CREATE=register lyncoln loxthelion.com oddsbodikins diff --git a/ejabberd/ejabberd.yml b/ejabberd/ejabberd.yml new file mode 100644 index 0000000..a58342b --- /dev/null +++ b/ejabberd/ejabberd.yml @@ -0,0 +1,259 @@ +### +### ejabberd configuration file +### +### The parameters used in this configuration file are explained at +### +### https://docs.ejabberd.im/admin/configuration +### +### The configuration file is written in YAML. +### ******************************************************* +### ******* !!! WARNING !!! ******* +### ******* YAML IS INDENTATION SENSITIVE ******* +### ******* MAKE SURE YOU INDENT SECTIONS CORRECTLY ******* +### ******************************************************* +### Refer to http://en.wikipedia.org/wiki/YAML for the brief description. +### + +hosts: + - xmpp.loxthelion.com + - loxthelion.com + +loglevel: info + +## If you already have certificates, list them here +certfiles: + - /certs/fullchain.pem + - /certs/privkey.pem + +listen: + - + port: 5222 + ip: "::" + module: ejabberd_c2s + #use_proxy_protocol: true + max_stanza_size: 262144 + shaper: c2s_shaper + access: c2s + starttls_required: true + - + port: 5223 + ip: "::" + module: ejabberd_c2s + #use_proxy_protocol: true + max_stanza_size: 262144 + shaper: c2s_shaper + access: c2s + tls: true + - + port: 5269 + ip: "::" + module: ejabberd_s2s_in + use_proxy_protocol: true + max_stanza_size: 524288 + shaper: s2s_shaper + - + port: 5443 + ip: "::" + module: ejabberd_http + tls: true + request_handlers: + /admin: ejabberd_web_admin + /api: mod_http_api + /bosh: mod_bosh + /captcha: ejabberd_captcha + /upload: mod_http_upload + /ws: ejabberd_http_ws + - + port: 5280 + ip: "::" + module: ejabberd_http + request_handlers: + /admin: ejabberd_web_admin + /.well-known/acme-challenge: ejabberd_acme + - + port: 5478 + ip: "::" + transport: udp + module: ejabberd_stun + use_turn: true + ## The server's public IPv4 address: + # turn_ipv4_address: "203.0.113.3" + ## The server's public IPv6 address: + # turn_ipv6_address: "2001:db8::3" + - + port: 1883 + ip: "::" + module: mod_mqtt + backlog: 1000 + +s2s_use_starttls: optional + +#trusted_proxies: [127.0.0.1, 192.168.86.3] + +acl: + #admin: + #user: lyncoln + local: + user_regexp: "" + loopback: + ip: + - 127.0.0.0/8 + - ::1/128 + +access_rules: + local: + allow: local + c2s: + deny: blocked + allow: all + announce: + allow: admin + configure: + allow: admin + muc_create: + allow: local + pubsub_createnode: + allow: local + trusted_network: + allow: loopback + +api_permissions: + "console commands": + from: ejabberd_ctl + who: all + what: "*" + "webadmin commands": + from: ejabberd_web_admin + who: admin + what: "*" + "adhoc commands": + from: mod_adhoc_api + who: admin + what: "*" + "http access": + from: mod_http_api + who: + access: + allow: + - acl: loopback + - acl: admin + oauth: + scope: "ejabberd:admin" + access: + allow: + - acl: loopback + - acl: admin + what: + - "*" + - "!stop" + - "!start" + "public commands": + who: + ip: 127.0.0.1/8 + what: + - status + - connected_users_number + +shaper: + normal: + rate: 3000 + burst_size: 20000 + fast: 100000 + +shaper_rules: + max_user_sessions: 10 + max_user_offline_messages: + 5000: admin + 100: all + c2s_shaper: + none: admin + normal: all + s2s_shaper: fast + +modules: + mod_adhoc: {} + mod_adhoc_api: {} + mod_admin_extra: {} + mod_announce: + access: announce + mod_avatar: {} + mod_blocking: {} + mod_bosh: {} + mod_caps: {} + mod_carboncopy: {} + mod_client_state: {} + mod_configure: {} + mod_disco: {} + mod_fail2ban: {} + mod_http_api: {} + mod_http_upload: + put_url: https://@HOST_URL_ENCODE@:5443/upload + custom_headers: + "Access-Control-Allow-Origin": "https://@HOST@" + "Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS" + "Access-Control-Allow-Headers": "Content-Type" + mod_last: {} + mod_mam: + ## Mnesia is limited to 2GB, better to use an SQL backend + ## For small servers SQLite is a good fit and is very easy + ## to configure. Uncomment this when you have SQL configured: + ## db_type: sql + assume_mam_usage: true + default: always + mod_mqtt: {} + mod_muc: + access: + - allow + access_admin: + - allow: admin + access_create: muc_create + access_persistent: muc_create + access_mam: + - allow + default_room_options: + mam: true + mod_muc_admin: {} + mod_muc_occupantid: {} + mod_offline: + access_max_user_messages: max_user_offline_messages + mod_ping: {} + mod_privacy: {} + mod_private: {} + mod_proxy65: + access: local + max_connections: 5 + mod_pubsub: + access_createnode: pubsub_createnode + plugins: + - flat + - pep + force_node_config: + ## Avoid buggy clients to make their bookmarks public + storage:bookmarks: + access_model: whitelist + mod_push: {} + mod_push_keepalive: {} + mod_register: + ## Only accept registration requests from the "trusted" + ## network (see access_rules section above). + ## Think twice before enabling registration from any + ## address. See the Jabber SPAM Manifesto for details: + ## https://github.com/ge0rg/jabber-spam-fighting-manifesto + ip_access: trusted_network + mod_roster: + versioning: true + mod_s2s_bidi: {} + mod_s2s_dialback: {} + mod_shared_roster: {} + mod_stream_mgmt: + resend_on_timeout: if_offline + mod_stun_disco: {} + mod_vcard: {} + mod_vcard_xupdate: {} + mod_version: + show_os: false + +### Local Variables: +### mode: yaml +### End: +### vim: set filetype=yaml tabstop=8 diff --git a/ejabberd/newcerts/accounts/acme-v02.api.letsencrypt.org/directory/3bd2ae6cb724cbe241c1ed6e76de9e43/meta.json b/ejabberd/newcerts/accounts/acme-v02.api.letsencrypt.org/directory/3bd2ae6cb724cbe241c1ed6e76de9e43/meta.json new file mode 100644 index 0000000..a92150d --- /dev/null +++ b/ejabberd/newcerts/accounts/acme-v02.api.letsencrypt.org/directory/3bd2ae6cb724cbe241c1ed6e76de9e43/meta.json @@ -0,0 +1 @@ +{"creation_dt": "2026-02-07T07:06:13Z", "creation_host": "3d58c736bcae"} \ No newline at end of file diff --git a/ejabberd/newcerts/accounts/acme-v02.api.letsencrypt.org/directory/3bd2ae6cb724cbe241c1ed6e76de9e43/private_key.json b/ejabberd/newcerts/accounts/acme-v02.api.letsencrypt.org/directory/3bd2ae6cb724cbe241c1ed6e76de9e43/private_key.json new file mode 100644 index 0000000..b433940 --- /dev/null +++ b/ejabberd/newcerts/accounts/acme-v02.api.letsencrypt.org/directory/3bd2ae6cb724cbe241c1ed6e76de9e43/private_key.json @@ -0,0 +1 @@ +{"n": "1aMXEXdHyriZGG8MXqtzqJlGKuq7l3cSfUeDTfW4bwCjPDGHujVJXfq8XeTf0z_CtHzur96s_39p7auWaLO83rXx0Zuak4lTUROS_S-SfBHePxwssapYJelBgMYqT0RhsDEosJVxJX59KU3mjUS1zZu4rFLAbGP46vOkuRNlvWChDNjgyP45kdyVCGnqX4MeoR4Fw88vt7nGK_NGWnRNIlIm545NBXjP12NJSMA8VAvqr03WxYxVDoBy9kqQCPTYFIZkJ1T5_BddFAdLZV1EuaNxWpceW9z1Zr8mJ2In_uCmX-c_8nw36sNuZJchO6GuICSOJ4E73iIzszM-fTYDgQ", "e": "AQAB", "d": "C0XvIHCRJQEfMQMhHbjB4mZuJbMbwYcavmog42MBP7hCpNk_PoPz0mX5_SFn7zOI4HHMPZMMQXI1goFgrzc20vC6aTNjEYB4WUmlYr9ZJTtjJSTlNd3Vh3Ca0IMEdgjXd87sRP8pyI73Z0_RR-iViFs8gDlgpoeS-cDwEwUTRA4l110jOnKWTds3M6XmcLwXIKolWyUwiVTfW7NzHFm37jxWnNb9SFFkJmfmBmnKS_CfOYEjSU7mAg4jdKPbUVwSm2ZJw7R3e2xjuBRN5atGOf76qtTHPrQMNZAFAlytlrrpJZ4ycPFSylw669tbaH9q9WZCfbHJw4-HDcagmLarrQ", "p": "8gVki6j0peKibaazKvH_Ykz8U6LZ3Oj9CsLt-Wu7YOUWcKfr8QP5BFk6SwKqgMinFSZg-8Z2VdJBV3-KpF8WJ6ZU-Km86Ji0_CxI8urYvCvXuUUDcrtjVBYxDMY1hsZHnhYlD6d4Q8E_Ywgnl--nOL9o_iTHQk5YIFDPMAbWpM0", "q": "4foAdOm3UMTvDN88VuSs7DkXiMOECCtebXSetu8Rb9xQPy7qUm8LbbeQSHFw0wyX9I-UR8zKSDpwxyC1X_9qNkC2P0d2x4l66FaAxr36x2s6ncN8dSnmqIFp6eaXlRGyfOUv-6_y2uMiWKy286CQ2GaoNn-M6igv48zdGScD-YU", "dp": "Bndca1rVRoVan6FfkhsrHp4986IbPgq_kAULRKm7NOiKA_KInETl51bW9uAYXB6AUFFZMADqcnqOol7W_nNH7UFFbetjD7fcxgwM2uipZ8WoGtwcLnmROtLo9pVpIrOzgCbJULTBwtWr8uJp5GZTynFaxceHx16-fgaKspbML1U", "dq": "yXs_Zv5vnQtJ3N85jHwtlh09V4qDsUkB03PUg2Ta1jLINd2dvUwXE4dElOLYZsRmw_40hmQYw5efsFwAe4xe5eqC1B7iz_xLYtal0Q3YiG-Z_soqsMhgSUPB7HPWGWqDCwrJ4o25aeJ0YD32jXhPTTMSrizBtpGISYMCa4e26oU", "qi": "3742Zd56FAzcC64cf68kp7iyF2IhjVrFuwIraWXGSZU-ME7aH1puzH5-Udo0-H3vKbhlRyc5bAwEXsDTZvrID74lm9VH9vZBoaWAY7VUjFq6z91zaJDsrA91HYBNIXJbAFxPWvnYB42PJH9OA3h9UxF1nlpE2ppv0A79nR_ufmQ", "kty": "RSA"} \ No newline at end of file diff --git a/ejabberd/newcerts/accounts/acme-v02.api.letsencrypt.org/directory/3bd2ae6cb724cbe241c1ed6e76de9e43/regr.json b/ejabberd/newcerts/accounts/acme-v02.api.letsencrypt.org/directory/3bd2ae6cb724cbe241c1ed6e76de9e43/regr.json new file mode 100644 index 0000000..1faaffc --- /dev/null +++ b/ejabberd/newcerts/accounts/acme-v02.api.letsencrypt.org/directory/3bd2ae6cb724cbe241c1ed6e76de9e43/regr.json @@ -0,0 +1 @@ +{"body": {}, "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/3039110516"} \ No newline at end of file diff --git a/embyserver/embyserver.container b/embyserver/embyserver.container new file mode 100644 index 0000000..774e9f4 --- /dev/null +++ b/embyserver/embyserver.container @@ -0,0 +1,20 @@ +[Unit] +Description=Emby Media Server + +[Container] +ContainerName=embyserver +Image=docker.io/emby/embyserver:latest +AutoUpdate=registry +PublishPort=8096:8096 +PublishPort=8920:8920 +Network=host +Volume=emby-config:/config:Z +Volume=/media/CONTAINER/Videos:/mnt/Videos +AddDevice=/dev/dri/:/dev/dri/ +EnvironmentFile=embyserver.env + +[Service] +Restart=unless-stopped + +[Install] +WantedBy=default.target diff --git a/embyserver/embyserver.env b/embyserver/embyserver.env new file mode 100644 index 0000000..5afa5e3 --- /dev/null +++ b/embyserver/embyserver.env @@ -0,0 +1,4 @@ +#Emby Server environment configuration file +UID=1000 +GID=100 +GIDLIST=100 diff --git a/grafana/grafana.container b/grafana/grafana.container deleted file mode 100644 index eeaed36..0000000 --- a/grafana/grafana.container +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=Grafana - -[Container] -ContainerName=grafana -Image=docker.io/grafana/grafana:latest -AutoUpdate=registry -Network=bridge -PublishPort=3002:3000 -Volume=grafana-storage:/var/lib/grafana -EnvironmentFile=grafana.env - -[Service] -Restart=unless-stopped - -[Install] -WantedBy=default.target diff --git a/grafana/grafana.env b/grafana/grafana.env new file mode 100644 index 0000000..97f0102 --- /dev/null +++ b/grafana/grafana.env @@ -0,0 +1,7 @@ +GF_DASHBOARDS_MIN_REFRESH_INTERVAL=2s +#GF_SERVER_ROOT_URL= +#GF_SERVER_SERVE_FROM_SUB_PATH=true +#GF_INSTALL_PLUGINS=https://github.com/performancecopilot/grafana-pcp/releases/download/vX.Y.Z/performancecopilot-pcp-app-X.Y.Z.zip;performancecopilot-pcp-app +#GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=performancecopilot-pcp-app,pcp-valkey-datasource,pcp-vector-datasource,pcp-bpftrace-datasource,pcp-flamegraph-panel,pcp-breadcrumbs-panel,pcp-troubleshooting-panel,performancecopilot-valkey-datasource,performancecopilot-vector-datasource,performancecopilot-bpftrace-datasource,performancecopilot-flamegraph-panel,performancecopilot-breadcrumbs-panel,performancecopilot-troubleshooting-panel +#GF_INSTALL_PLUGINS="https://github.com/performancecopilot/grafana-pcp/releases/download/vX.Y.Z/performancecopilot-pcp-app-X.Y.Z.zip;performancecopilot-pcp-app" +#GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS="performancecopilot-pcp-app,pcp-valkey-datasource,pcp-vector-datasource,pcp-bpftrace-datasource,pcp-flamegraph-panel,pcp-breadcrumbs-panel,pcp-troubleshooting-panel,performancecopilot-valkey-datasource,performancecopilot-vector-datasource,performancecopilot-bpftrace-datasource,performancecopilot-flamegraph-panel,performancecopilot-breadcrumbs-panel,performancecopilot-troubleshooting-panel" diff --git a/jellyfin/jellyfin.container b/jellyfin/jellyfin.container new file mode 100644 index 0000000..d67b157 --- /dev/null +++ b/jellyfin/jellyfin.container @@ -0,0 +1,25 @@ +[Unit] +Description=Jellyfin Server + +[Container] +ContainerName=jellyfin +Image=docker.io/jellyfin/jellyfin:latest +AutoUpdate=registry +PublishPort=8097:8097/tcp +PublishPort=7359:7359/udp +UserNS=keep-id +AddDevice=/dev/dri/:/dev/dri/ +Volume=jellyfin-config:/config:Z +Volume=jellyfin-cache:/cache:Z +Volume=/media/CONTAINER/Videos:/media +EnvironmentFile=jellyfin.env + +[Service] +# Inform systemd of additional exit status +SuccessExitStatus=0 143 +Restart=unless-stopped + +[Install] +# Start by default on boot +WantedBy=default.target + diff --git a/jellyfin/jellyfin.env b/jellyfin/jellyfin.env new file mode 100644 index 0000000..0043a2c --- /dev/null +++ b/jellyfin/jellyfin.env @@ -0,0 +1,2 @@ +JELLYFIN_PORT=8097 +HEALTHCHECK_URL=http://localhost:8097/health diff --git a/plexmediaserver/plexmediaserver.container b/plexmediaserver/plexmediaserver.container new file mode 100644 index 0000000..8a7840c --- /dev/null +++ b/plexmediaserver/plexmediaserver.container @@ -0,0 +1,29 @@ +[Unit] +Description=Plex Media Server + +[Container] +ContainerName=plexmediaserver +Image=docker.io/plexinc/pms-docker:latest +AutoUpdate=registry +PublishPort=32400:32400/tcp +PublishPort=3005:3005/tcp +PublishPort=8324:8324/tcp +PublishPort=32469:32469/tcp +PublishPort=1900:1900/udp +PublishPort=32410:32410/udp +PublishPort=32412:32412/udp +PublishPort=32413:32413/udp +PublishPort=32414:32414/udp +Network=host +Volume=plex-database:/config:Z +Volume=plex-transcode:/transcode:Z +Volume=/media/CONTAINER/Videos:/videos +EnvironmentFile=plexmediaserver.env + +[Service] +Restart=unless-stopped +# Give the container a moment to shut down gracefully +TimeoutStopSec=30 + +[Install] +WantedBy=default.target diff --git a/plexmediaserver/plexmediaserver.env b/plexmediaserver/plexmediaserver.env new file mode 100644 index 0000000..8926c5f --- /dev/null +++ b/plexmediaserver/plexmediaserver.env @@ -0,0 +1,4 @@ +TZ=America/New_York +PLEX_CLAIM=claim-s5YyPw95zsGxscS-BGrz +PLEX_UID=1000 +PLEX_GID=1000 diff --git a/prometheus/prometheus.container b/prometheus/prometheus.container new file mode 100644 index 0000000..dc6a087 --- /dev/null +++ b/prometheus/prometheus.container @@ -0,0 +1,16 @@ +[Unit] +Description=Prometheus + +[Container] +ContainerName=prometheus +Image=docker.io/prom/prometheus +AutoUpdate=registry +Network=podman +PublishPort=9091:9090 +Volume=prometheus-yml:/etc/prometheus + +[Service] +Restart=unless-stopped + +[Install] +WantedBy=default.target