feat(services): update and add new service templates (#11217)

This commit is contained in:
🏔️ Peak authored and GitHub committed 2026-09-28 00:56:55 +02:00
commit fe5bddfefb
62 files changed
+1688 -1256

No files matched your search

+1 -1
View File
@@ -1154,7 +1154,7 @@ class Service extends BaseModel
break;
case $image->contains('coollabsio/openclaw'):
$data = collect([]);
$username = $this->environment_variables()->where('key', 'AUTH_USERNAME')->first();
$username = $this->environment_variables()->where('key', 'SERVICE_USER_OPENCLAW')->first();
$password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_OPENCLAW')->first();
$gateway_token = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_64_GATEWAYTOKEN')->first();
if ($username) {
+11
View File
@@ -0,0 +1,11 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="32" height="32" rx="6" fill="url(#gradient)"/>
<text x="16" y="24" font-family="system-ui, -apple-system, sans-serif" font-size="20" font-weight="700" fill="white" text-anchor="middle">9</text>
<defs>
<linearGradient id="gradient" x1="0" y1="0" x2="32" y2="32" gradientUnits="userSpaceOnUse">
<stop stop-color="#f97815"/>
<stop offset="1" stop-color="#c2590a"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 533 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 891 B

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

+36
View File
@@ -0,0 +1,36 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 995.73 163.32">
<defs>
<style>
.cls-1 {
mask: url(#mask);
}
.cls-2 {
fill: #1A1C1E;
}
.cls-2, .cls-3 {
stroke-width: 0px;
}
.cls-3 {
fill: #fff;
}
</style>
<mask id="mask" x="-10.78" y="-24.14" width="114.88" height="198.1" maskUnits="userSpaceOnUse">
<rect class="cls-3" x="-10.78" y="-24.14" width="114.88" height="198.1"/>
</mask>
</defs>
<g class="cls-1">
<path class="cls-2" d="M30.05,84.26s0,0-.01.01h0s0,0,.01-.01Z"/>
</g>
<g>
<path class="cls-2" d="M193.01,3.19v56.41h-39.58V3.19h-48.82c-.17,0-.34,0-.51,0-27.82,0-53.74,14.9-67.78,38.91-6.22,3.78-10.42,6.42-10.51,6.46-12.12,6.61-18.17,12.91-21.14,17.9-2.31.04-4.3,1.75-4.63,4.11-.37,2.6,1.45,5.02,4.06,5.39,2.61.37,5.02-1.45,5.39-4.06.19-1.34-.21-2.64-.99-3.62,4.39-7.08,13.65-12.91,19.32-16,.98-.53,55.9-33.8,60.02-32.98.69.14,1.69.51,2.48,2.14,2.17,4.51-17.82,17.87-21.9,20.31-3.9,2.34-7.34,4.83-10.32,7.49-6.31,5.62-10.52,11.93-12.56,18.85-1.23,4.18-4.74,16.19-13.25,19.18-.6-1.34-1.82-2.39-3.37-2.71-2.58-.54-5.11,1.12-5.64,3.7-.51,2.44.94,4.83,3.28,5.54,5.87,38.08,38.48,66.31,77.5,66.33v.03h49.36v-65.96h39.58v65.96h49.36V3.19h-49.36ZM60.02,53.22c-.18,2.44-.75,5.24-2.12,7.07-1.45,1.92-4.2,3.55-6.66,4.7,1.95-4.19,4.89-8.12,8.79-11.77ZM104.07,107.71h-19.35c-2.06,0-3.74,1.67-3.74,3.74,0,1.03.42,1.97,1.1,2.64.68.68,1.61,1.09,2.64,1.09h19.35v40.69c-36.93-.01-67.79-26.74-73.33-62.79.57-.41,1.04-.94,1.39-1.57,7.05-2.52,12.38-6,17.14-21.16,2.56-.89,8.93-3.43,12.01-7.52,3.1-4.11,3.14-10.53,3.01-13.2,1.94-1.48,4.05-2.9,6.33-4.26,13.03-7.8,27.09-18.42,23.53-25.78-1.17-2.43-3.06-3.97-5.46-4.44-4.51-.89-27.07,11.84-43.88,21.84,13.92-18.43,35.88-29.57,59.27-29.58v100.3Z"/>
<ellipse class="cls-2" cx="79.09" cy="69.12" rx="8.08" ry="12.53"/>
<path class="cls-2" d="M369.18,7.05c10.39,4.7,17.93,12.89,22.63,24.57,4.7,11.68,7.05,28.36,7.05,50.04s-2.35,38.37-7.05,50.04c-4.7,11.68-12.25,19.87-22.63,24.57-10.39,4.7-24.91,7.05-43.56,7.05s-32.95-2.35-43.33-7.05c-10.39-4.7-17.93-12.89-22.63-24.57-4.7-11.68-7.05-28.36-7.05-50.04s2.35-38.36,7.05-50.04c4.7-11.68,12.24-19.86,22.63-24.57,10.39-4.7,24.83-7.05,43.33-7.05s33.17,2.35,43.56,7.05ZM312.54,40.38c-2.96,2.5-5.04,6.9-6.26,13.19-1.22,6.29-1.82,15.66-1.82,28.09s.6,21.8,1.82,28.09c1.21,6.29,3.3,10.69,6.26,13.19s7.31,3.75,13.08,3.75,10.12-1.25,13.08-3.75,5.04-6.9,6.26-13.19c1.21-6.29,1.82-15.66,1.82-28.09s-.61-21.8-1.82-28.09c-1.22-6.29-3.3-10.69-6.26-13.19s-7.32-3.75-13.08-3.75-10.12,1.25-13.08,3.75Z"/>
<path class="cls-2" d="M553.31,143.08c0,5.61-1.44,9.86-4.32,12.74-2.88,2.88-7.13,4.32-12.74,4.32h-18.88c-4.7,0-8.3-1.06-10.8-3.18-2.5-2.12-5.27-5.84-8.3-11.15l-34.12-53.91c-3.79-6.82-7.28-15.77-10.46-26.84h-1.59c1.51,10.62,2.27,20.17,2.27,28.66v66.42h-45.49V20.24c0-5.61,1.44-9.86,4.32-12.74s7.13-4.32,12.74-4.32h18.88c4.7,0,8.26,1.06,10.69,3.18,2.42,2.13,5.23,5.84,8.42,11.15l32.76,51.41c4.09,7.28,8.11,16.23,12.06,26.84h1.59c-1.36-11.52-2.05-21-2.05-28.43l-.23-64.15h45.27v139.89Z"/>
<path class="cls-2" d="M662.72,1.82c7.13.91,14.86,2.5,23.2,4.78l-3.64,35.94c-3.49,0-6.14-.07-7.96-.23l-40.03-.23c-5.31,0-9.33,1.1-12.06,3.3-2.73,2.2-4.63,6.07-5.69,11.6-1.06,5.54-1.59,13.76-1.59,24.68s.53,19.15,1.59,24.68c1.06,5.54,2.96,9.4,5.69,11.6,2.73,2.2,6.75,3.3,12.06,3.3,12.43,0,22.33-.11,29.68-.34,7.35-.23,14.59-.72,21.72-1.48l3.64,35.94c-8.04,2.73-16.15,4.66-24.34,5.8-8.19,1.14-18.43,1.71-30.71,1.71-17.59,0-31.54-2.62-41.85-7.85-10.31-5.23-17.78-13.72-22.41-25.48-4.63-11.75-6.94-27.71-6.94-47.88s2.31-36.13,6.94-47.88c4.62-11.75,12.09-20.24,22.41-25.48,10.31-5.23,24.26-7.85,41.85-7.85,11.83,0,21.3.45,28.43,1.36Z"/>
<path class="cls-2" d="M839.24,3.18v156.95h-49.36v-65.97h-39.58v65.97h-49.36V3.18h49.36v56.41h39.58V3.18h49.36Z"/>
<path class="cls-2" d="M966.05,7.05c10.39,4.7,17.93,12.89,22.63,24.57,4.7,11.68,7.05,28.36,7.05,50.04s-2.35,38.37-7.05,50.04c-4.7,11.68-12.25,19.87-22.63,24.57-10.39,4.7-24.91,7.05-43.56,7.05s-32.95-2.35-43.33-7.05c-10.39-4.7-17.93-12.89-22.63-24.57-4.7-11.68-7.05-28.36-7.05-50.04s2.35-38.36,7.05-50.04c4.7-11.68,12.24-19.86,22.63-24.57,10.39-4.7,24.83-7.05,43.33-7.05s33.17,2.35,43.56,7.05ZM909.41,40.38c-2.96,2.5-5.04,6.9-6.26,13.19-1.22,6.29-1.82,15.66-1.82,28.09s.6,21.8,1.82,28.09c1.21,6.29,3.3,10.69,6.26,13.19s7.31,3.75,13.08,3.75,10.12-1.25,13.08-3.75,5.04-6.9,6.26-13.19c1.21-6.29,1.82-15.66,1.82-28.09s-.61-21.8-1.82-28.09c-1.22-6.29-3.3-10.69-6.26-13.19s-7.32-3.75-13.08-3.75-10.12,1.25-13.08,3.75Z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" viewBox="0 0 1020 1020"><g transform="translate(0 .267)"><circle cx="510" cy="509.7" r="410"/><defs><circle id="a" cx="510" cy="509.7" r="410"/></defs><clipPath id="b"><use xlink:href="#a" style="overflow:visible"/></clipPath><path d="m850.1 31.2 23.5 14.4 23.2-14.4V2.4L873.6-12 850.1 2.4zM803.7 2.4 780.5-12 757.3 2.4v28.9l23.2 14.4 23.2-14.4V2.4L826.9-12l23.2 14.4m-46.4 28.8 23.2 14.4 23.2-14.4m-46.4 57.5v28.9l23.2 14.4 23.2-14.4V88.7l-23.2-14.2-23.2 14.2-23.2-14.2-23.2 14.2m92.8 28.9 23.5 14.4 23.2-14.4V88.7l-23.2-14.2-23.5 14.2m23.5-43v28.9m-46.7-28.9v28.9m69.9-72.2L920-12.1l23.2 14.4 23.2-14.4 23.2 14.4 23.2-14.4L1036 2.3v28.9l23.2 14.4v28.9L1036 88.7v28.9l23.2 14.4v28.9l-23.2 14.4v28.9l23.2 14.4v28.9l-23.2 14.2v28.9l23.2 14.4v28.9l-23.2 14.4v28.9l23.2 14.4v28.9l-23.2 14.2v28.9l23.2 14.4v28.9l-23.2 14.4v28.9l23.2 14.4v28.9l-23.2 14.2v28.9l23.2 14.4v28.9l-23.2 14.4v28.9l23.2 14.4v28.9l-23.2 14.2v28.9l23.2 14.4v28.9l-23.2 14.4v28.9l23.2 14.4v28.9l-23.2 14.2v28.9l23.2 14.4v28.9l-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.5 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.5 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.5 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4-23.9 14.3-23.2-14.4-23.2 14.4-23.2-14.4-23.2 14.4-23.2-14.4v-28.9l-23.2-14.4v-28.9l23.2-14.2v-28.9l-23.2-14.4v-28.9l23.2-14.4v-28.9l-23.2-14.4v-28.9l23.2-14.2v-28.9l-23.2-14.4v-28.9l23.2-14.4v-28.9l-23.2-14.4v-28.9l23.2-14.2v-28.9l-23.2-14.4v-28.9l23.2-14.5v-28.9l-23.2-14.4v-28.9l23.2-14.2v-28.9L-79.2 377v-28.9l23.2-14.4V305l-23.2-14.4v-28.9l23.2-14.2v-28.9l-23.2-14.4v-28.9l23.2-14.4V132l-23.2-14.4V88.7L-56 74.5V45.7l-23.2-14.4V2.4L-56-12l23.2 14.4L-9.6-12 13.6 2.4 36.8-12 60 2.4 83.5-12l23.2 14.4L129.9-12l23.2 14.4L176.3-12l23.2 14.4L222.7-12 246 2.4 269.2-12l23.2 14.4L315.9-12l23.2 14.4L362.3-12l23.2 14.4L408.7-12 432 2.4 455.2-12l23.2 14.4L501.6-12l23.2 14.4L548-12.1l23.2 14.4 23.2-14.4 23.2 14.4 23.5-14.4 23.2 14.4 23.2-14.4 23.2 14.4L734-12.1l23.2 14.4m-46.4.1v28.9L734 45.7l23.2-14.4m-46.4 57.4v28.9L734 132l23.2-14.4V88.7L734 74.5l-23.2 14.2-23.2-14.2-23.2 14.2m116.1-43v28.9M734 45.7v28.9m23.3 100.7v28.9l23.2 14.4 23.2-14.4v-28.9l-23.2-14.4-23.2 14.4-23.3-14.4-23.2 14.4v28.9l23.2 14.4 23.2-14.4m46.5-86.6L780.5 132v28.9m-23.2-43.3 23.2 14.4m-46.5 0v28.9m0 57.7v28.9l23.2 14.2 23.2-14.2v-28.9m46.5-86.6v28.9l23.2 14.4 23.5-14.4V132m-46.7 28.9-23.2 14.4m-23.2 72.2 23.2 14.2 23.2-14.2v-28.9l-23.2-14.4m46.4-28.9v28.9l23.5 14.4 23.2-14.4v-28.9l-23.2-14.4m0 57.7v28.9l23.2 14.2 23.2-14.2v-28.9l-23.2-14.4m-69.9 14.4 23.2-14.4M664.4 2.4v28.9l23.2 14.4 23.2-14.4M571.3 2.4v28.9l23.2 14.4 23.2-14.4V2.4m0 28.8 23.5 14.4 23.2-14.4m-46.7 57.5v28.9l23.5 14.4 23.2-14.4V88.7l-23.2-14.2-23.5 14.2-23.2-14.2-23.2 14.2v28.9l23.2 14.4 23.2-14.4m-23.2-71.9v28.9m93.1-28.9v28.9m-46.4-28.9v28.9M524.8 2.4v28.9L548 45.7l23.2-14.4M478.4 2.4v28.9l23.2 14.4 23.2-14.4m-23.2 43.2-23.2 14.2v28.9l23.2 14.4 23.2-14.4V88.7zm69.7 14.2L548 74.5l-23.2 14.2m-23.2-43v28.9M548 45.7v28.9m23.3 43L548 132v28.9l23.2 14.4 23.2-14.4V132m-92.8 0v28.9l23.2 14.4 23.2-14.4m-46.4 86.6 23.2 14.2 23.2-14.2v-28.9l-23.2-14.4-23.2 14.4v28.9l-23.2 14.2v28.9l23.2 14.4 23.2-14.4v-28.9m23.2-43.1 23.2-14.4v-28.9m-46.4-57.7L548 132m-23.2 72.2v-28.9M641.2 132v28.9l23.2 14.4 23.2-14.4V132l-23.2-14.4m-93.1 86.6 23.2 14.4 23.2-14.4v-28.9l-23.2-14.4m46.7 0-23.5 14.4m23.5 72.2 23.2 14.2 23.2-14.2v-28.9l-23.2-14.4-23.2 14.4v28.9l-23.5 14.2v28.9L594.5 305v28.9l23.2 14.4 23.5-14.4V305l-23.5-14.4M548 247.5l23.2 14.2 23.2-14.2v-28.9m23.3-14.4 23.5 14.4m23.2-14.4v-28.9m0 86.4v28.9l23.2 14.4 23.2-14.4v-28.9l-23.2-14.2m-69.9 100.8v28.9l23.5 14.4 23.2-14.4v-28.9l-23.2-14.4m23.2 43.2 23.2 14.4 23.2-14.4v-28.9l-23.2-14.4-23.2 14.4M641.2 305l23.2-14.4m23.2 14.4v28.9M594.5 305l-23.2-14.4L548 305v28.9l23.2 14.4 23.2-14.4m-23.1-43.4v-28.9m-69.7 72.2-23.2 14.4v28.9l23.2 14.4 23.2-14.4v-28.9zm23.2 43.3 23.2 14.4 23.2-14.4v-28.9M501.6 305v28.9m46.4-.1-23.2 14.4m0-57.7L548 305m0 115.5-23.2 14.2v28.9L548 478l23.2-14.4v-28.9zm0-28.9v28.9m-46.4-28.9v28.9l23.2 14.2m0 28.8-23.2 14.4v28.9l23.2 14.5 23.2-14.5v-28.9m116.4-43.3v28.9l23.2 14.4 23.2-14.4v-28.9l-23.2-14.2zm23.2-43v28.9m-69.9-43.4-23.2 14.4v28.9l23.2 14.2 23.5-14.2v-28.9m-69.9 72 23.2 14.4 23.2-14.4v-28.9m46.7 28.9-23.2 14.4v28.9l23.2 14.5 23.2-14.5v-28.9M548 506.8l23.2 14.5 23.2-14.5v-28.9m23.3-14.4 23.5 14.4m0-57.4 23.2 14.2m-93.1-57.6 23.2 14.4m0 29-23.2 14.2m302.3-187.2-23.5 14.2v28.9l23.5 14.4 23.2-14.4v-28.9m-93.1 0v28.9l23.2 14.4 23.2-14.4m-46.4 86.5 23.2 14.4 23.2-14.4v-28.9l-23.2-14.4-23.2 14.4v28.9l-23.2 14.4v28.9m69.6-43.3 23.5 14.4 23.2-14.4v-28.9l-23.2-14.4-23.5 14.4m23.5-43.2v28.9M826.9 305v28.9m-69.7-72.2v28.9l23.2 14.4 23.2-14.4m-92.8Line truncated

After

Width:  |  Height:  |  Size: 42 KiB

+1
View File
@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Linkwarden</title><path d="M24 4.328v15.344A4.33 4.33 0 0 1 19.672 24H4.328A4.33 4.33 0 0 1 0 19.672V4.328A4.33 4.33 0 0 1 4.328 0h15.344A4.33 4.33 0 0 1 24 4.328m-9.552 5.355V3.06a.328.328 0 0 0-.595-.19l-6.907 9.705a.328.328 0 0 0 .267.518h5.305a.328.328 0 0 0 0-.656h-4.67l5.944-8.35v5.596a.328.328 0 0 0 .656 0m-4.852 4.678v6.623a.328.328 0 0 0 .595.19l6.907-9.705a.328.328 0 0 0-.267-.518h-5.305a.328.328 0 0 0 0 .656h4.669l-5.944 8.35v-5.596a.328.328 0 0 0-.655 0"/></svg>

After

Width:  |  Height:  |  Size: 557 B

+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<polygon points="50,4 78,22 88,56 68,92 32,92 12,56 22,22" fill="#7C3AED"/>
<polygon points="50,4 22,22 32,52 50,38" fill="#9F67FF" opacity="0.7"/>
<polygon points="50,4 78,22 68,52 50,38" fill="#4C1D95" opacity="0.6"/>
<polygon points="32,52 68,52 68,92 32,92" fill="#5B21B6" opacity="0.5"/>
<line x1="50" y1="4" x2="50" y2="38" stroke="#C4B5FD" stroke-width="1.5" opacity="0.8"/>
</svg>

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+4
View File
@@ -0,0 +1,4 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.545 38.3037C21.2011 42.7136 30.2574 41.9863 36.1218 36.1218C39.5128 32.7309 41.1862 28.2728 41.142 23.8286L47.1855 17.7851C49.3237 25.7919 47.252 34.6891 40.9705 40.9706C31.598 50.3431 16.402 50.3431 7.02943 40.9706C6.20631 40.1474 5.45548 39.2794 4.77693 38.3743L12.7873 30.364H22.4848L14.545 38.3037Z" fill="#1E1E1E"/>
<path d="M7.02943 7.02944C0.747934 13.3109 -1.32371 22.2081 0.814515 30.2149L6.85799 24.1714C6.81382 19.7272 8.48721 15.2691 11.8782 11.8782C17.7426 6.01373 26.7988 5.28643 33.455 9.69629L25.5152 17.636H35.2127L43.223 9.62566C42.5445 8.7206 41.7937 7.85256 40.9705 7.02944C31.598 -2.34315 16.402 -2.34315 7.02943 7.02944Z" fill="#1E1E1E"/>
</svg>

After

Width:  |  Height:  |  Size: 777 B

+3
View File
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Gravit.io -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 1000 1000" width="1000pt" height="1000pt"><defs><clipPath id="_clipPath_NaDFcABDqKTMKzlf06KDE6XhrEyDoRke"><rect width="1000" height="1000"/></clipPath></defs><g clip-path="url(#_clipPath_NaDFcABDqKTMKzlf06KDE6XhrEyDoRke)"><rect width="1000" height="1000" style="fill:rgb(0,0,0)" fill-opacity="0"/><path d=" M 373.467 557.247 L 55.226 271.52 L 55.226 385.564 C 55.226 398.153 62.453 415.6 71.355 424.501 L 107.525 460.671 C 116.426 469.573 123.653 487.02 123.653 499.609 L 123.653 682.08 C 123.655 718.462 133.336 750.017 152.047 778.668 L 373.467 557.247 Z " fill="rgb(219,45,84)"/><path d=" M 626.533 557.247 L 944.774 271.52 L 944.774 396.969 C 944.774 403.263 941.16 411.987 936.709 416.437 L 884.411 468.736 C 879.96 473.186 876.347 481.91 876.347 488.204 L 876.347 682.08 C 876.345 718.462 866.664 750.017 847.953 778.668 L 626.533 557.247 Z " fill="rgb(219,45,84)"/><path d=" M 500 638.743 L 500 638.743 C 466.206 638.738 448.855 625.316 424.448 603.033 L 197.809 829.672 C 261.382 884.635 364.213 931.859 500 990 Q 500 990 500 990 C 635.787 931.859 738.618 884.635 802.191 829.672 L 575.552 603.033 C 551.145 625.316 533.794 638.738 500 638.743 Z " fill="rgb(219,45,84)"/><path d=" M 483.028 563.647 L 63.713 187.183 C 59.029 182.978 55.226 174.454 55.226 168.159 L 55.226 122.542 C 55.226 116.247 60.206 109.988 66.339 108.573 L 215.181 74.225 C 221.314 72.809 226.293 76.77 226.293 83.065 L 226.293 176.92 L 352.034 147.895 C 358.167 146.479 363.147 140.219 363.147 133.925 L 363.147 51.483 C 363.147 45.189 368.126 38.93 374.259 37.514 L 488.888 11.061 C 495.021 9.646 504.979 9.646 511.112 11.061 L 625.741 37.514 C 631.874 38.93 636.853 45.189 636.853 51.483 L 636.853 133.925 C 636.853 140.219 641.833 146.479 647.966 147.895 L 773.707 176.92 L 773.707 83.065 C 773.707 76.77 778.686 72.809 784.819 74.225 L 933.661 108.573 C 939.794 109.988 944.774 116.247 944.774 122.542 L 944.774 168.159 C 944.774 174.454 940.971 182.978 936.287 187.183 L 516.972 563.647 C 507.605 572.056 492.395 572.056 483.028 563.647 Z " fill="rgb(219,45,84)"/></g></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg fill="#F1680D" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>PeerTube</title><path d="M12 6.545v10.91L20.727 12M3.273 12v12L12 17.455M3.273 0v12L12 6.545"/></svg>

After

Width:  |  Height:  |  Size: 194 B

+4
View File
@@ -0,0 +1,4 @@
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="512" height="512" fill="#FF6600"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M248.163 125.41C241.201 126.191 233.22 128.685 226.504 132.178C209.268 141.143 197.047 157.181 192.754 176.472C191.775 180.869 191.107 186.952 191.176 190.834L191.215 193.021L190.095 192.789C179.256 190.536 166.254 191.324 156.07 194.849C154.244 195.481 150.567 197.094 147.896 198.433C127.989 208.415 114.631 227.901 112.259 250.417C111.537 257.265 112.358 266.755 114.289 273.886C118.393 289.047 127.978 302.283 141.216 311.073C147.971 315.557 155.343 318.622 163.954 320.525L168.435 321.515L192.522 321.651C205.769 321.726 216.819 321.861 217.075 321.951C217.332 322.041 217.542 322.265 217.542 322.448C217.542 322.631 215.753 325.551 213.566 328.937C211.379 332.323 208.13 337.375 206.346 340.163C204.561 342.951 199.686 350.555 195.511 357.06C176.789 386.234 177.163 385.626 177.283 386.665L177.398 387.664L201.713 387.761L226.028 387.857L232.066 378.503C235.387 373.359 238.318 368.971 238.579 368.753C238.904 368.481 252.307 368.314 281.045 368.221C322.396 368.088 323.103 368.073 327.331 367.264C341.722 364.51 353.992 359.132 365.388 350.581C370.155 347.004 378.745 338.314 382.459 333.312C395.171 316.19 401.286 295.449 399.774 274.587C399.12 265.559 397.695 258.542 394.958 250.867C386.154 226.179 366.911 206.666 342.474 197.647C337.801 195.922 330.036 193.949 325.651 193.371C320.388 192.678 320.791 192.907 320.83 190.634C320.939 184.136 319.441 175.082 317.183 168.587C315.939 165.011 312.723 158.364 310.654 155.097C304.842 145.919 294.945 136.905 285.363 132.06C274.006 126.319 260.918 123.979 248.163 125.41ZM270.891 239.791C270.576 240.162 260.346 256.097 248.159 275.2C235.972 294.304 224.804 311.793 223.342 314.065C219.178 320.534 218.905 321.031 219.3 321.428C219.527 321.656 237.736 321.742 268.92 321.663C317.775 321.537 318.209 321.53 321.422 320.733C335.505 317.243 346.316 307.546 351.086 294.126C354.741 283.843 354.148 272.55 349.435 262.682C344.18 251.681 334.497 243.639 322.554 240.357L318.929 239.361L295.197 239.239C272.731 239.123 271.434 239.152 270.891 239.791Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

+28
View File
@@ -0,0 +1,28 @@
# documentation: https://github.com/decolua/9router
# slogan: Free AI coding gateway. Routes Claude Code, Codex, Cursor, Cline, Copilot requests to 40+ LLM providers with auto-fallback and token savings.
# category: ai
# tags: ai, gateway, routing, coding, llm, providers
# logo: svgs/9router.svg
# port: 20128
services:
9router:
image: decolua/9router:0.5.65
volumes:
- '9router:/app/data'
environment:
- SERVICE_URL_9ROUTER_20128
- DATA_DIR=/app/data
- INITIAL_PASSWORD=${SERVICE_PASSWORDWITHSYMBOLS_PASSWORD}
- JWT_SECRET=${SERVICE_PASSWORDWITHSYMBOLS_64_JWTSECRET}
- API_KEY_SECRET=${SERVICE_PASSWORDWITHSYMBOLS_KEYSECRET}
- MACHINE_ID_SALT=${SERVICE_HEX_64_HMACSALT}
healthcheck:
test:
- CMD
- wget
- --spider
- 'http://127.0.0.1:20128/'
interval: 5s
timeout: 10s
retries: 5
+5 -7
View File
@@ -78,15 +78,13 @@ services:
image: pgvector/pgvector:pg16
volumes:
- affine-postgres-data:/var/lib/postgresql/data
healthcheck:
test:
- CMD-SHELL
- 'pg_isready -U affine'
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
- POSTGRES_DB=${POSTGRES_DB:-affine}
- PGDATA=/var/lib/postgresql/data/pgdata
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 20s
retries: 10
File diff suppressed because it is too large. Load diff
+4 -4
View File
@@ -7,7 +7,7 @@
services:
authentik-server:
image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2025.10.3}
image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2026.5.6}
restart: unless-stopped
command: server
environment:
@@ -27,13 +27,13 @@ services:
- AUTHENTIK_EMAIL__TIMEOUT=${AUTHENTIK_EMAIL__TIMEOUT}
- AUTHENTIK_EMAIL__FROM=${AUTHENTIK_EMAIL__FROM}
volumes:
- ./media:/media
- ./data:/data
- ./custom-templates:/templates
depends_on:
postgresql:
condition: service_healthy
authentik-worker:
image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2025.10.3}
image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2026.5.6}
restart: unless-stopped
command: worker
environment:
@@ -60,7 +60,7 @@ services:
user: root
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./media:/media
- ./data:/data
- ./certs:/certs
- ./custom-templates:/templates
depends_on:
+24 -3
View File
@@ -7,12 +7,13 @@
services:
autobase:
image: autobase/console_ui:2.5.2
image: autobase/console_ui:2.11.0
platform: linux/amd64
environment:
- SERVICE_FQDN_AUTOBASE_80
- PG_CONSOLE_AUTHORIZATION_TOKEN=${SERVICE_PASSWORD_UI}
- PG_CONSOLE_API_HOST=autobase-api
- PG_CONSOLE_DBDESK_STUDIO_HOST=dbdesk-studio
healthcheck:
test: [ "CMD", "curl", "http://localhost:80/" ]
interval: 10s
@@ -23,7 +24,7 @@ services:
condition: service_healthy
autobase-db:
image: autobase/console_db:2.5.2
image: autobase/console_db:2.11.0
platform: linux/amd64
environment:
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
@@ -36,7 +37,7 @@ services:
retries: 10
autobase-api:
image: autobase/console_api:2.5.2
image: autobase/console_api:2.11.0
platform: linux/amd64
environment:
- PG_CONSOLE_DB_HOST=autobase-db
@@ -58,3 +59,23 @@ services:
depends_on:
autobase-db:
condition: service_healthy
dbdesk-studio:
image: docker.io/bhavikagarwal2001/dbdesk-studio:0.1.5
container_name: dbdesk-studio
environment:
- PORT=6789
- CORS_ORIGIN=${CORS_ORIGIN:-*}
- NODE_ENV=production
- DEFAULT_SSL_MODE=require
- STORAGE_PATH=/opt/dbdesk-studio/data
volumes:
- dbdesk_studio_data:/opt/dbdesk-studio
healthcheck:
test: ["CMD", "curl", "-fsS", "http://localhost:6789/health"]
interval: 10s
timeout: 5s
retries: 5
depends_on:
autobase-api:
condition: service_healthy
+4 -4
View File
@@ -6,16 +6,16 @@
services:
beszel-agent:
image: 'henrygd/beszel-agent:0.18.7' # Released on 6 April 2026
image: 'henrygd/beszel-agent:0.19.0' # Released on 3 September 2026
network_mode: host # Network stats graphs won't work if agent cannot access host system network stack
environment:
# Required
- LISTEN=/beszel_socket/beszel.sock
- HUB_URL=$SERVICE_URL_BESZEL
- LISTEN=${LISTEN:-/beszel_socket/beszel.sock} # Must stay inside the beszel_socket volume
- HUB_URL=${HUB_URL:-$SERVICE_URL_BESZEL} # Defaults to the hub from the beszel template
- TOKEN=${TOKEN} # From hub token settings
- KEY=${KEY} # SSH public key(s) from hub
# Optional
- DISABLE_SSH=${DISABLE_SSH:-false} # Disable SSH
- DISABLE_SSH=${DISABLE_SSH:-false} # Disable SSH
- LOG_LEVEL=${LOG_LEVEL:-warn} # Logging level
- SKIP_GPU=${SKIP_GPU:-false} # Skip GPU monitoring
- SYSTEM_NAME=${SYSTEM_NAME} # Custom system name
+2 -17
View File
@@ -90,7 +90,6 @@ services:
- WORKER_UPSTREAM_URL=http://worker-service:4003
- MINIO_UPSTREAM_URL=http://minio-service:9000
- COUCHDB_UPSTREAM_URL=http://couchdb-service:5984
- WATCHTOWER_UPSTREAM_URL=http://watchtower-service:8080
- RESOLVER=127.0.0.11
depends_on:
- minio-service
@@ -105,7 +104,7 @@ services:
start_period: 10s
couchdb-service:
image: budibase/couchdb
image: budibase/database
environment:
- COUCHDB_PASSWORD=$SERVICE_PASSWORD_COUCHDB
- COUCHDB_USER=$SERVICE_USER_COUCHDB
@@ -117,7 +116,7 @@ services:
retries: 5
start_period: 10s
volumes:
- couchdb3_data:/opt/couchdb/data
- couchdb3_data:/data
redis-service:
image: redis
@@ -131,17 +130,3 @@ services:
timeout: 15s
retries: 5
start_period: 10s
watchtower-service:
restart: always
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --debug --http-api-update bbapps bbworker bbproxy
environment:
- WATCHTOWER_HTTP_API=true
- WATCHTOWER_HTTP_API_TOKEN=$SERVICE_PASSWORD_WATCHTOWER
- WATCHTOWER_CLEANUP=true
labels:
- "com.centurylinklabs.watchtower.enable=false"
exclude_from_hc: true
+19 -8
View File
@@ -10,10 +10,10 @@ services:
image: 'mysql:latest'
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT}
- MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}
- MYSQL_DATABASE=${MYSQL_DATABASE:-bugsink}
- MYSQL_USER=${SERVICE_USER_BUGSINK}
- MYSQL_PASSWORD=${SERVICE_PASSWORD_BUGSINK}
- MYSQL_USER=${SERVICE_USER_MYSQL}
- MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
volumes:
- my-datavolume:/var/lib/mysql
healthcheck:
@@ -26,21 +26,32 @@ services:
interval: 5s
timeout: 20s
retries: 10
web:
image: bugsink/bugsink
restart: unless-stopped
environment:
- SECRET_KEY=$SERVICE_PASSWORD_64_BUGSINK
- CREATE_SUPERUSER=admin:$SERVICE_PASSWORD_BUGSINK
- CREATE_SUPERUSER=${BUGSINK_ADMIN_EMAIL:?}:$SERVICE_PASSWORD_BUGSINK
- SERVICE_URL_BUGSINK_8000
- BASE_URL=$SERVICE_URL_BUGSINK
- DATABASE_URL=mysql://${SERVICE_USER_BUGSINK}:$SERVICE_PASSWORD_BUGSINK@mysql:3306/${MYSQL_DATABASE:-bugsink}
- DATABASE_URL=mysql://${SERVICE_USER_MYSQL}:$SERVICE_PASSWORD_MYSQL@mysql:3306/${MYSQL_DATABASE:-bugsink}
- BEHIND_HTTPS_PROXY=True
depends_on:
mysql:
condition: service_healthy
- SITE_TITLE=${SITE_TITLE:-Bugsink}
- TIME_ZONE=${TIME_ZONE:-UTC}
- PHONEHOME=${PHONEHOME:-False}
- EMAIL_HOST=${EMAIL_HOST}
- EMAIL_PORT=${EMAIL_PORT:-587}
- EMAIL_HOST_USER=${EMAIL_HOST_USER}
- EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD}
- EMAIL_USE_TLS=${EMAIL_USE_TLS:-True}
- EMAIL_USE_SSL=${EMAIL_USE_SSL:-False}
- DEFAULT_FROM_EMAIL=${DEFAULT_FROM_EMAIL}
healthcheck:
test: ["CMD-SHELL", "python -c 'import requests; requests.get(\"http://localhost:8000/\").raise_for_status()'"]
interval: 5s
timeout: 20s
retries: 10
depends_on:
mysql:
condition: service_healthy
+23
View File
@@ -0,0 +1,23 @@
# documentation: https://bulwarkmail.org/docs
# slogan: Modern webmail platform
# category: Mail
# tags: mail,webmail,jmap,email,messaging
# logo: svgs/bulwark.svg
# port: 3000
services:
bulwark:
image: 'ghcr.io/bulwarkmail/webmail:v1.8.1'
environment:
- SERVICE_URL_BULWARK_3000
- JMAP_SERVER_URL='${JMAP_SERVER_URL:?}'
- SESSION_SECRET='${SERVICE_HEX_64_BULWARK}'
volumes:
- 'bulwark-config:/app/data/admin'
- 'bulwark-state:/app/data/admin-state'
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:3000/api/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
+1 -1
View File
@@ -16,7 +16,7 @@ services:
- RELAY_URL=wss://${SERVICE_FQDN_BUZZ}
- BUZZ_MEDIA_BASE_URL=${SERVICE_URL_BUZZ}/media
- BUZZ_MEDIA_SERVER_DOMAIN=${SERVICE_FQDN_BUZZ}
- BUZZ_CORS_ORIGINS=${SERVICE_URL_BUZZ}
- BUZZ_CORS_ORIGINS=${SERVICE_URL_BUZZ},tauri://localhost,http://tauri.localhost
- DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-buzz}
- REDIS_URL=redis://:${SERVICE_PASSWORD_REDIS}@redis:6379
- BUZZ_S3_ENDPOINT=http://minio:9000
+1 -1
View File
@@ -84,7 +84,7 @@ services:
volumes:
- rails-data:/app/storage
healthcheck:
test: ["CMD-SHELL", "bundle exec rails runner 'puts Sidekiq.redis(&:info)' > /dev/null 2>&1"]
test: ["CMD-SHELL", "bundle exec sidekiqmon processes | grep -q 'sidekiq'"]
interval: 30s
timeout: 10s
retries: 3
+1 -1
View File
@@ -50,7 +50,7 @@ services:
retries: 3
start_period: 10s
volumes:
- uploads:/app/uploads:ro
- chibisafe-uploads:/app/uploads:ro
- type: bind
source: ./Caddyfile
target: /etc/caddy/Caddyfile
+3 -3
View File
@@ -3,14 +3,14 @@
# category: security
# tags: encryption, encoding, compression, data analysis, tools, development
# logo: svgs/cyberchef.jpeg
# port: 80
# port: 8080
services:
cyberchef:
image: ghcr.io/gchq/cyberchef:latest
platform: linux/amd64
environment:
- SERVICE_URL_CYBERCHEF_80
- SERVICE_URL_CYBERCHEF_8080
volumes:
- cyberchef-data:/app/data
healthcheck:
@@ -18,7 +18,7 @@ services:
- CMD
- curl
- '-f'
- 'http://127.0.0.1:80'
- 'http://127.0.0.1:8080'
interval: 30s
timeout: 10s
retries: 3
@@ -2,7 +2,7 @@
# slogan: The Denoland key-value database
# category: database
# tags: deno, kv, key-value, database
# logo: svgs/denokv.svg
# logo: svgs/deno-kv.svg
# port: 4512
services:
+25
View File
@@ -0,0 +1,25 @@
# documentation: https://github.com/DS4SD/docling-serve
# slogan: Convert documents (PDF, DOCX, PPTX, images, HTML) to Markdown, JSON, and more using AI-powered document processing.
# category: ai
# tags: ai, document, pdf, ocr, markdown, extraction, ibm, rag, nlp
# logo: svgs/docling.png
# port: 5001
services:
docling-serve:
image: ghcr.io/docling-project/docling-serve-cpu:latest
environment:
- SERVICE_URL_DOCLING_5001
- DOCLING_SERVE_ENABLE_UI=${DOCLING_SERVE_ENABLE_UI:-true}
- DOCLING_SERVE_LOG_LEVEL=${DOCLING_SERVE_LOG_LEVEL:-WARNING}
- DOCLING_NUM_THREADS=${DOCLING_NUM_THREADS:-4}
healthcheck:
test:
- CMD
- wget
- "-qO-"
- "http://127.0.0.1:5001/health"
interval: 30s
timeout: 30s
retries: 10
start_period: 120s
+1 -1
View File
@@ -22,7 +22,7 @@ services:
admin:
email: test@email.com
name: Admin
# A sha-256 hash of the password you want to use. Can be computed with "echo -n password | shasum -a 256". Default password is "Test".
# A bcrypt hash of the password you want to use. Can be computed with "python3 -c 'import bcrypt;print(bcrypt.hashpw(b"your-password",bcrypt.gensalt(11)).decode())' ". Default password is "test".
password: $2a$11$viucCvFLlHWvBNOOI6uypuVU.D09UWb.zswRxEg0MkDPi1q/bKbdG
healthcheck:
+1 -1
View File
@@ -7,7 +7,7 @@
services:
emqx:
image: emqx/emqx-enterprise:6.2.0
image: emqx/emqx-enterprise:6.2.2
environment:
- SERVICE_URL_EMQX_18083
- EMQX_DASHBOARD__DEFAULT_PASSWORD=${SERVICE_PASSWORD_EMQX}
+41
View File
@@ -0,0 +1,41 @@
# documentation: https://github.com/Gentleman-Programming/engram
# slogan: Persistent memory sync server for AI coding agents (MCP).
# category: ai
# tags: ai, memory, mcp, agents, self-hosted, postgres
# logo: svgs/engram.png
# port: 8080
services:
engram:
image: ghcr.io/gentleman-programming/engram:1.20.0
command:
- cloud
- serve
environment:
- SERVICE_FQDN_ENGRAM_8080
- ENGRAM_CLOUD_HOST=0.0.0.0
- ENGRAM_PORT=8080
- ENGRAM_DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgresql:5432/${POSTGRES_DB}?sslmode=disable
- ENGRAM_JWT_SECRET=${SERVICE_BASE64_64_JWTSECRET}
- ENGRAM_CLOUD_TOKEN=${SERVICE_PASSWORD_64_CLOUDTOKEN}
- ENGRAM_CLOUD_ADMIN=${SERVICE_PASSWORD_64_ADMIN}
- ENGRAM_CLOUD_ALLOWED_PROJECTS=${ENGRAM_CLOUD_ALLOWED_PROJECTS:-*}
depends_on:
postgresql:
condition: service_healthy
postgresql:
image: postgres:18-alpine
environment:
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
- POSTGRES_DB=${POSTGRES_DB:-engram-db}
volumes:
- engram-postgresql-data:/var/lib/postgresql
healthcheck:
test:
- CMD-SHELL
- "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"
interval: 5s
timeout: 20s
retries: 10
+1 -1
View File
@@ -10,7 +10,7 @@ services:
image: getfider/fider:stable
environment:
- SERVICE_URL_FIDER_3000
- BASE_URL=$SERVICE_URL_FIDER_3000
- BASE_URL=$SERVICE_URL_FIDER
- DATABASE_URL=postgres://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@database:5432/fider?sslmode=disable
- JWT_SECRET=$SERVICE_PASSWORD_64_FIDER
- EMAIL_NOREPLY=${EMAIL_NOREPLY:-noreply@example.com}
+9 -1
View File
@@ -7,7 +7,12 @@
services:
garage:
image: dxflrs/garage:v2.1.0
image: dxflrs/garage:v2.3.0
command:
- /garage
- server
- '--single-node'
- '--default-bucket'
environment:
- GARAGE_S3_API_URL=$GARAGE_S3_API_URL
- GARAGE_WEB_URL=$GARAGE_WEB_URL
@@ -16,6 +21,9 @@ services:
- GARAGE_ADMIN_TOKEN=$SERVICE_PASSWORD_GARAGE
- GARAGE_METRICS_TOKEN=$SERVICE_PASSWORD_GARAGEMETRICS
- GARAGE_ALLOW_WORLD_READABLE_SECRETS=true
- GARAGE_DEFAULT_ACCESS_KEY=${SERVICE_USER_GARAGE}
- GARAGE_DEFAULT_SECRET_KEY=${SERVICE_PASSWORD_64_GARAGE}
- GARAGE_DEFAULT_BUCKET=${GARAGE_DEFAULT_BUCKET:-default}
- RUST_LOG=${RUST_LOG:-garage=info}
volumes:
- garage-meta:/var/lib/garage/meta
+66 -49
View File
@@ -1,49 +1,66 @@
# documentation: https://github.com/nesquena/hermes-webui
# slogan: Hermes Agent — autonomous AI agent with persistent memory, scheduling, and a self-hosted web chat UI.
# category: ai
# tags: ai, agent, llm, chatbot, hermes, openrouter, anthropic, openai
# logo: svgs/hermes-agent.png
# port: 8787
services:
hermes-agent:
image: 'nousresearch/hermes-agent@sha256:2f1f2f1725e5dc9a61cf6a2dea5aca52a776ec4d022cb29679e6aa3ff303e77a' # v2026.5.29
command: gateway run
environment:
- HERMES_HOME=/home/hermes/.hermes
- HERMES_UID=1000
- HERMES_GID=1000
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- OPENAI_API_KEY=${OPENAI_API_KEY}
- GOOGLE_API_KEY=${GOOGLE_API_KEY}
volumes:
- hermes-home:/home/hermes/.hermes
- hermes-agent-src:/opt/hermes
healthcheck:
test: ["CMD-SHELL", "test -d /home/hermes/.hermes || exit 1"]
interval: 10s
timeout: 5s
retries: 5
hermes-webui:
image: ghcr.io/nesquena/hermes-webui:0.51.92
depends_on:
- hermes-agent
environment:
- SERVICE_URL_HERMESWEBUI_8787
- HERMES_WEBUI_HOST=0.0.0.0
- HERMES_WEBUI_PORT=8787
- HERMES_WEBUI_STATE_DIR=/home/hermeswebui/.hermes/webui
- WANTED_UID=1000
- WANTED_GID=1000
- HERMES_WEBUI_PASSWORD=${SERVICE_PASSWORD_HERMESWEBUI}
volumes:
- hermes-home:/home/hermeswebui/.hermes
- hermes-agent-src:/home/hermeswebui/.hermes/hermes-agent:ro
- hermes-workspace:/workspace
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:8787/health"]
interval: 30s
timeout: 5s
retries: 3
# documentation: https://github.com/nesquena/hermes-webui
# slogan: Hermes Agent - autonomous AI agent with persistent memory, scheduling, and a self-hosted web chat UI.
# category: ai
# tags: ai, agent, llm, chatbot, hermes, openrouter, anthropic, openai
# logo: svgs/hermes-agent.png
# port: 8787
services:
hermes-agent:
image: 'nousresearch/hermes-agent:v2026.6.5'
command: 'gateway run'
environment:
- HERMES_HOME=/home/hermes/.hermes
- WIKI_PATH=/home/hermes/.hermes/wiki
- GATEWAY_ALLOW_ALL_USERS=true
- HERMES_REDACT_SECRETS=true
- HERMES_UID=1000
- HERMES_GID=1000
- 'HERMES_ENABLE_PROJECT_PLUGINS=${HERMES_ENABLE_PROJECT_PLUGINS:-true}'
- 'HERMES_OPTIONAL_SKILLS=${HERMES_OPTIONAL_SKILLS:-}'
- 'HERMES_ALLOW_PRIVATE_URLS=${HERMES_ALLOW_PRIVATE_URLS:-false}'
- 'FIRECRAWL_API_KEY=${FIRECRAWL_API_KEY:-}'
- 'FIRECRAWL_API_URL=${FIRECRAWL_API_URL:-https://api.firecrawl.dev}'
- 'OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-}'
- 'ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}'
- 'OPENAI_API_KEY=${OPENAI_API_KEY:-}'
- 'GOOGLE_API_KEY=${GOOGLE_API_KEY:-}'
volumes:
- 'hermes-home:/home/hermes/.hermes'
- 'hermes-skills:/home/hermes/.hermes/skills'
- 'hermes-agent-src:/opt/hermes'
healthcheck:
test:
- CMD-SHELL
- 'test -d /home/hermes/.hermes || exit 1'
interval: 10s
timeout: 5s
retries: 5
hermes-webui:
image: 'ghcr.io/nesquena/hermes-webui:0.51.489'
depends_on:
- hermes-agent
environment:
- SERVICE_URL_HERMESWEBUI_8787
- SERVICE_USER_HERMESWEBUI
- SERVICE_PASSWORD_HERMESWEBUI
- HERMES_WEBUI_HOST=0.0.0.0
- HERMES_WEBUI_PORT=8787
- HERMES_WEBUI_STATE_DIR=/home/hermeswebui/.hermes/webui
- WANTED_UID=1000
- WANTED_GID=1000
- HERMES_WEBUI_USERNAME=${SERVICE_USER_HERMESWEBUI}
- HERMES_WEBUI_PASSWORD=${SERVICE_PASSWORD_HERMESWEBUI}
volumes:
- 'hermes-home:/home/hermeswebui/.hermes'
- 'hermes-agent-src:/home/hermeswebui/.hermes/hermes-agent:ro'
- 'hermes-workspace:/workspace'
healthcheck:
test:
- CMD
- curl
- '-f'
- 'http://127.0.0.1:8787/health'
interval: 30s
timeout: 5s
retries: 3
+41
View File
@@ -0,0 +1,41 @@
# documentation: https://github.com/NousResearch/hermes-agent
# slogan: Hermes Agent - autonomous AI agent with persistent memory, scheduling, and built-in web dashboard.
# category: ai
# tags: ai, agent, llm, chatbot, hermes, openrouter, anthropic, openai
# logo: svgs/hermes-agent.png
# port: 9119
services:
hermes-agent:
image: 'nousresearch/hermes-agent:v2026.8.3'
command: 'gateway run'
environment:
- SERVICE_URL_HERMESAGENT_9119
- HERMES_DASHBOARD=1
- HERMES_DASHBOARD_HOST=0.0.0.0
- HERMES_DASHBOARD_PORT=9119
- 'HERMES_DASHBOARD_BASIC_AUTH_USERNAME=${SERVICE_USER_HERMESAGENT}'
- 'HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=${SERVICE_PASSWORD_HERMESAGENT}'
- 'HERMES_DASHBOARD_BASIC_AUTH_SECRET=${SERVICE_BASE64_64_HERMESAGENT}'
- HERMES_HOME=/opt/data
- GATEWAY_ALLOW_ALL_USERS=true
- HERMES_REDACT_SECRETS=true
- HERMES_UID=1000
- HERMES_GID=1000
- 'HERMES_ENABLE_PROJECT_PLUGINS=${HERMES_ENABLE_PROJECT_PLUGINS:-true}'
- 'HERMES_ALLOW_PRIVATE_URLS=${HERMES_ALLOW_PRIVATE_URLS:-false}'
- 'FIRECRAWL_API_KEY=${FIRECRAWL_API_KEY:-}'
- 'FIRECRAWL_API_URL=${FIRECRAWL_API_URL:-https://api.firecrawl.dev}'
- 'OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-}'
- 'ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}'
- 'OPENAI_API_KEY=${OPENAI_API_KEY:-}'
- 'GOOGLE_API_KEY=${GOOGLE_API_KEY:-}'
volumes:
- 'hermes-home:/opt/data'
healthcheck:
test:
- CMD-SHELL
- 'test -d /opt/data || exit 1'
interval: 10s
timeout: 5s
retries: 5
+2 -1
View File
@@ -7,8 +7,9 @@
services:
homarr:
image: ghcr.io/homarr-labs/homarr:v1.40.0
image: ghcr.io/homarr-labs/homarr:v1.74.0
environment:
- SECRET_ENCRYPTION_KEY=$SERVICE_HEX_64_ENCRYPTION
- SERVICE_URL_HOMARR_7575
- 'SECRET_ENCRYPTION_KEY=${SERVICE_HEX_64_HOMARR}'
volumes:
+74
View File
@@ -0,0 +1,74 @@
# documentation: https://honcho.dev/docs/v3/contributing/self-hosting
# slogan: Honcho is a developer tool to build personalized AI agents with production-ready memory, dialectic reasoning, and stateful dialogue.
# category: ai
# tags: ai, memory, llm, agents, rag, postgres, pgvector, redis
# logo: svgs/honcho.svg
# port: 8000
services:
api:
image: ghcr.io/plastic-labs/honcho:v3.0.12
entrypoint: ["sh", "docker/entrypoint.sh"]
environment:
- SERVICE_URL_API_8000
- DB_CONNECTION_URI=postgresql+psycopg://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@database:5432/postgres
- CACHE_URL=redis://redis:6379/0?suppress=true
- CACHE_ENABLED=true
- LOG_LEVEL=${LOG_LEVEL:-INFO}
- AUTH_USE_AUTH=false
- LLM_OPENAI_API_KEY=${LLM_OPENAI_API_KEY}
- VECTOR_STORE_TYPE=pgvector
healthcheck:
test: ["CMD", "/app/.venv/bin/python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health', timeout=2).read()"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
depends_on:
database:
condition: service_healthy
redis:
condition: service_healthy
deriver:
image: ghcr.io/plastic-labs/honcho:v3.0.12
entrypoint: ["/app/.venv/bin/python", "-m", "src.deriver"]
environment:
- DB_CONNECTION_URI=postgresql+psycopg://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@database:5432/postgres
- CACHE_URL=redis://redis:6379/0?suppress=true
- CACHE_ENABLED=true
- LOG_LEVEL=${LOG_LEVEL:-INFO}
- AUTH_USE_AUTH=false
- LLM_OPENAI_API_KEY=${LLM_OPENAI_API_KEY}
- VECTOR_STORE_TYPE=pgvector
depends_on:
api:
condition: service_healthy
database:
condition: service_healthy
redis:
condition: service_healthy
database:
image: pgvector/pgvector:pg15
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
volumes:
- honcho_pgdata:/var/lib/postgresql/data/
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:8.2
volumes:
- honcho_redis_data:/data
healthcheck:
test: ["CMD-SHELL", "redis-cli ping"]
interval: 5s
timeout: 5s
retries: 5
+5 -5
View File
@@ -7,7 +7,7 @@
services:
web:
image: ghcr.io/karakeep-app/karakeep:release
image: ghcr.io/karakeep-app/karakeep:0.33.2
volumes:
- karakeep-data:/data
environment:
@@ -22,17 +22,17 @@ services:
- DATA_DIR=/data
chrome:
image: gcr.io/zenika-hub/alpine-chrome:124
image: ghcr.io/karakeep-app/karakeep-chrome:release
command:
- '--no-sandbox'
- '--disable-gpu'
- '--disable-dev-shm-usage'
- '--remote-debugging-address=0.0.0.0'
- '--remote-debugging-port=9222'
- '--hide-scrollbars'
- '--disable-blink-features=AutomationControlled'
- '--window-size=1440,900'
meilisearch:
image: getmeili/meilisearch:v1.13.3
image: getmeili/meilisearch:v1.41.0
environment:
- MEILI_NO_ANALYTICS=${MEILI_NO_ANALYTICS:-true}
- NEXTAUTH_SECRET=${SERVICE_PASSWORD_KARAKEEPNEXTAUTH}
+28
View File
@@ -0,0 +1,28 @@
# documentation: https://hub.docker.com/r/linuxserver/lidarr
# slogan: Lidarr - a music collection manager for Usenet and BitTorrent users
# category: media
# tags: media, server, music, audio
# logo: svgs/lidarr.svg
# port: 8686
services:
lidarr:
image: 'lscr.io/linuxserver/lidarr:3.1.0.4875-ls40'
environment:
- SERVICE_URL_LIDARR_8686
- PUID=1000
- PGID=1000
- 'TZ=${TZ:-America/Toronto}'
volumes:
- 'lidarr-config:/config'
- 'lidarr-music:/music'
- 'lidarr-downloads:/downloads'
healthcheck:
test:
- CMD
- curl
- '-f'
- 'http://localhost:8686'
interval: 2s
timeout: 10s
retries: 15
+54
View File
@@ -0,0 +1,54 @@
# documentation: https://docs.linkwarden.app/self-hosting/setup
# slogan: A self-hostable collaborative bookmark manager to collect, organize, and preserve web pages.
# category: productivity
# tags: bookmarks,collaboration,archive,links,self-hosted
# logo: svgs/linkwarden.svg
# port: 3000
services:
linkwarden:
image: ghcr.io/linkwarden/linkwarden:v2.16.1
environment:
- SERVICE_URL_LINKWARDEN_3000
- NEXTAUTH_URL=${SERVICE_URL_LINKWARDEN_3000}/api/v1/auth
- NEXTAUTH_SECRET=${SERVICE_PASSWORD_LINKWARDENNEXTAUTH}
- MEILI_MASTER_KEY=${SERVICE_PASSWORD_MEILI}
- DATABASE_URL=postgresql://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgresql:5432/${POSTGRES_DB:-linkwarden}
volumes:
- linkwarden-data:/data/data
depends_on:
postgresql:
condition: service_healthy
meilisearch:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 10s
timeout: 20s
retries: 10
postgresql:
image: postgres:16-alpine
volumes:
- postgresql-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=$SERVICE_USER_POSTGRES
- POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES
- POSTGRES_DB=${POSTGRES_DB:-linkwarden}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 20s
retries: 10
meilisearch:
image: getmeili/meilisearch:v1.12.8
environment:
- MEILI_MASTER_KEY=${SERVICE_PASSWORD_MEILI}
volumes:
- meilisearch-data:/meili_data
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:7700/health"]
interval: 5s
timeout: 10s
retries: 10
+1
View File
@@ -4,6 +4,7 @@
# tags: mattermost,slack,alternative
# logo: svgs/mattermost.svg
# port: 8065
# amd_only: true
services:
mattermost:
+30
View File
@@ -0,0 +1,30 @@
# documentation: https://docs.linuxserver.io/images/docker-obsidian
# slogan: Note-taking app with linking, organizing, and hundreds of plugins - runs in your browser via remote desktop
# category: productivity
# tags: notes,obsidian,markdown,desktop,gui,productivity
# logo: svgs/obsidian.svg
# port: 3000
services:
obsidian:
image: lscr.io/linuxserver/obsidian:latest
environment:
- SERVICE_URL_OBSIDIAN_3000
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-Etc/UTC}
- CUSTOM_USER=${SERVICE_USER_OBSIDIAN}
- PASSWORD=${SERVICE_PASSWORD_OBSIDIAN}
volumes:
- obsidian-config:/config
# Required for Electron/Chromium shared memory
shm_size: "1gb"
# Needed on hosts with older kernels or libseccomp; safe to remove on modern hosts
security_opt:
- seccomp=unconfined
healthcheck:
test: ["CMD", "curl", "-s", "-o", "/dev/null", "http://127.0.0.1:3000/"]
interval: 5s
timeout: 20s
retries: 10
start_period: 90s
@@ -0,0 +1,113 @@
# documentation: https://github.com/rmyndharis/OpenWA
# slogan: Production OpenWA with PostgreSQL, Redis, and bundled dashboard.
# category: messaging
# tags: whatsapp,api,gateway,messaging,automation,webhooks,postgresql,redis
# logo: svgs/openwa.png
# port: 2785
# Production stack with PostgreSQL + Redis. Coolify/Traefik handle routing; no docker-proxy needed.
services:
openwa:
image: ghcr.io/rmyndharis/openwa:0.23.1
restart: unless-stopped
stop_grace_period: 45s
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- CHOWN
- DAC_OVERRIDE
- FOWNER
- SETGID
- SETUID
read_only: true
tmpfs:
- /tmp
pids_limit: ${OPENWA_PIDS_LIMIT:-2048}
mem_limit: ${OPENWA_MEM_LIMIT:-2g}
environment:
- SERVICE_URL_OPENWA_2785
- NODE_ENV=production
- HOME=/tmp
- XDG_CONFIG_HOME=/tmp/.config
- XDG_CACHE_HOME=/tmp/.cache
- PORT=2785
- LOG_LEVEL=${LOG_LEVEL:-info}
- BASE_URL=${SERVICE_URL_OPENWA}
- DASHBOARD_URL=${SERVICE_URL_OPENWA}
- API_MASTER_KEY=${SERVICE_PASSWORD_OPENWA}
- DATABASE_TYPE=postgres
- DATABASE_HOST=postgresql
- DATABASE_PORT=5432
- DATABASE_USERNAME=$SERVICE_USER_POSTGRES
- DATABASE_PASSWORD=$SERVICE_PASSWORD_POSTGRES
- DATABASE_NAME=${POSTGRES_DB:-openwa}
- DATABASE_SYNCHRONIZE=false
- POSTGRES_SCHEMA=public
- ENGINE_TYPE=${ENGINE_TYPE:-whatsapp-web.js}
- SESSION_DATA_PATH=./data/sessions
- PUPPETEER_HEADLESS=true
- PUPPETEER_ARGS=--no-sandbox,--disable-setuid-sandbox,--disable-dev-shm-usage
- PUPPETEER_EXECUTABLE_PATH=/usr/local/bin/puppeteer-chrome
- STORAGE_TYPE=local
- STORAGE_LOCAL_PATH=./data/media
- REDIS_ENABLED=true
- REDIS_HOST=openwa-redis
- REDIS_PORT=6379
- QUEUE_ENABLED=true
- CACHE_ENABLED=true
- AUTO_START_SESSIONS=${AUTO_START_SESSIONS:-false}
volumes:
- openwa-data:/app/data
depends_on:
postgresql:
condition: service_healthy
openwa-redis:
condition: service_healthy
healthcheck:
test:
- CMD
- node
- -e
- "require('http').get('http://localhost:2785/api/health/ready', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"
interval: 30s
timeout: 10s
retries: 3
start_period: 45s
postgresql:
image: postgres:16-alpine
restart: unless-stopped
security_opt:
- no-new-privileges:true
environment:
- POSTGRES_USER=$SERVICE_USER_POSTGRES
- POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES
- POSTGRES_DB=${POSTGRES_DB:-openwa}
volumes:
- postgresql-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 3s
retries: 5
openwa-redis:
image: redis:7-alpine
restart: unless-stopped
security_opt:
- no-new-privileges:true
command: redis-server --appendonly yes --maxmemory-policy noeviction
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 5
volumes:
openwa-data:
postgresql-data:
redis-data:
+63
View File
@@ -0,0 +1,63 @@
# documentation: https://github.com/rmyndharis/OpenWA
# slogan: Free, open source, self-hosted WhatsApp API gateway with bundled dashboard.
# category: messaging
# tags: whatsapp,api,gateway,messaging,automation,webhooks,open,source
# logo: svgs/openwa.png
# port: 2785
services:
openwa:
image: ghcr.io/rmyndharis/openwa:0.23.1
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- CHOWN
- DAC_OVERRIDE
- FOWNER
- SETGID
- SETUID
read_only: true
tmpfs:
- /tmp
pids_limit: ${OPENWA_PIDS_LIMIT:-2048}
mem_limit: ${OPENWA_MEM_LIMIT:-2g}
environment:
- SERVICE_URL_OPENWA_2785
- NODE_ENV=production
- HOME=/tmp
- XDG_CONFIG_HOME=/tmp/.config
- XDG_CACHE_HOME=/tmp/.cache
- PORT=2785
- LOG_LEVEL=${LOG_LEVEL:-info}
- BASE_URL=${SERVICE_URL_OPENWA}
- DASHBOARD_URL=${SERVICE_URL_OPENWA}
- API_MASTER_KEY=${SERVICE_PASSWORD_OPENWA}
- DATABASE_TYPE=sqlite
- DATABASE_NAME=./data/openwa.sqlite
- DATABASE_SYNCHRONIZE=true
- DATABASE_LOGGING=false
- ENGINE_TYPE=${ENGINE_TYPE:-whatsapp-web.js}
- SESSION_DATA_PATH=./data/sessions
- PUPPETEER_HEADLESS=true
- PUPPETEER_ARGS=--no-sandbox,--disable-setuid-sandbox,--disable-dev-shm-usage
- PUPPETEER_EXECUTABLE_PATH=/usr/local/bin/puppeteer-chrome
- STORAGE_TYPE=local
- STORAGE_LOCAL_PATH=./data/media
- REDIS_ENABLED=false
- QUEUE_ENABLED=false
- CACHE_ENABLED=false
- AUTO_START_SESSIONS=${AUTO_START_SESSIONS:-false}
volumes:
- openwa-data:/app/data
healthcheck:
test:
- CMD
- node
- -e
- "require('http').get('http://localhost:2785/api/health/ready', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
+1
View File
@@ -1,3 +1,4 @@
# ignore: true
# documentation: https://docs.osticket.com/en/latest/
# slogan: osTicket is a widely-used open source support ticket system.
# category: helpdesk
+84
View File
@@ -0,0 +1,84 @@
# documentation: https://docs.joinpeertube.org/install/docker
# slogan: Free, open-source and decentralized video platform.
# category: media
# tags: video,fediverse,activitypub,youtube,streaming,self-hosted
# logo: svgs/peertube.svg
# port: 9000
services:
peertube:
image: chocobozzz/peertube:v8.2.4
environment:
- SERVICE_URL_PEERTUBE_9000
- PEERTUBE_WEBSERVER_HOSTNAME=${SERVICE_FQDN_PEERTUBE}
- PEERTUBE_WEBSERVER_PORT=${PEERTUBE_WEBSERVER_PORT:-443}
- PEERTUBE_WEBSERVER_HTTPS=${PEERTUBE_WEBSERVER_HTTPS:-true}
- PEERTUBE_TRUST_PROXY=["127.0.0.1", "loopback", "172.16.0.0/12"]
- PEERTUBE_SECRET=${SERVICE_HEX_32_PEERTUBESECRET}
- PEERTUBE_DB_HOSTNAME=postgres
- PEERTUBE_DB_USERNAME=${SERVICE_USER_POSTGRESQL}
- PEERTUBE_DB_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
- PEERTUBE_DB_NAME=${POSTGRES_DB:-peertube}
- PEERTUBE_DB_SSL=false
- PEERTUBE_REDIS_HOSTNAME=redis
- PEERTUBE_SMTP_HOSTNAME=postfix
- PEERTUBE_SMTP_PORT=25
- PEERTUBE_SMTP_FROM=noreply@${SERVICE_FQDN_PEERTUBE}
- PEERTUBE_SMTP_TLS=false
- PEERTUBE_SMTP_DISABLE_STARTTLS=false
- PEERTUBE_ADMIN_EMAIL=${PEERTUBE_ADMIN_EMAIL:?}
volumes:
- peertube-data:/data
- peertube-config:/config
healthcheck:
test:
- CMD
- curl
- -f
- http://localhost:9000/api/v1/ping
interval: 10s
timeout: 5s
retries: 5
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
restart: always
postgres:
image: postgres:17-alpine
environment:
- POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
- POSTGRES_DB=${POSTGRES_DB:-peertube}
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test:
- CMD-SHELL
- pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB:-peertube}
interval: 5s
timeout: 5s
retries: 10
restart: always
redis:
image: redis:8-alpine
volumes:
- redis-data:/data
healthcheck:
test:
- CMD
- redis-cli
- ping
interval: 5s
timeout: 5s
retries: 10
restart: always
postfix:
image: mwader/postfix-relay:1.2.17
environment:
- POSTFIX_myhostname=${SERVICE_FQDN_PEERTUBE}
restart: always
+14 -4
View File
@@ -68,14 +68,24 @@ services:
- plausible-events-data:/var/lib/clickhouse
- type: bind
source: ./clickhouse/clickhouse-config.xml
target: /etc/clickhouse-server/config.d/logging.xml
target: /etc/clickhouse-server/config.d/logs.xml
read_only: true
content: '<clickhouse><logger><level>warning</level><console>true</console></logger><query_thread_log remove="remove"/><query_log remove="remove"/><text_log remove="remove"/><trace_log remove="remove"/><metric_log remove="remove"/><asynchronous_metric_log remove="remove"/><session_log remove="remove"/><part_log remove="remove"/></clickhouse>'
content: '<clickhouse><logger><level>warning</level><console>true</console></logger><query_log replace="1"><database>system</database><table>query_log</table><engine>ENGINE = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + interval 30 day SETTINGS ttl_only_drop_parts=1</engine><flush_interval_milliseconds>7500</flush_interval_milliseconds></query_log><query_thread_log remove="remove"/><text_log remove="remove"/><trace_log remove="remove"/><metric_log remove="remove"/><asynchronous_metric_log remove="remove"/><session_log remove="remove"/><part_log remove="remove"/></clickhouse>'
- type: bind
source: ./clickhouse/clickhouse-ipv4-only.xml
target: /etc/clickhouse-server/config.d/ipv4-only.xml
read_only: true
content: '<clickhouse><listen_host>0.0.0.0</listen_host></clickhouse>'
- type: bind
source: ./clickhouse/clickhouse-low-resources.xml
target: /etc/clickhouse-server/config.d/low-resources.xml
read_only: true
content: '<clickhouse><mark_cache_size>524288000</mark_cache_size></clickhouse>'
- type: bind
source: ./clickhouse/clickhouse-user-config.xml
target: /etc/clickhouse-server/users.d/logging.xml
target: /etc/clickhouse-server/users.d/default-profile-low-resources-overrides.xml
read_only: true
content: '<clickhouse><profiles><default><log_queries>0</log_queries><log_query_threads>0</log_query_threads></default></profiles></clickhouse>'
content: '<clickhouse><profiles><default><max_threads>1</max_threads><max_block_size>8192</max_block_size><max_download_threads>1</max_download_threads><input_format_parallel_parsing>0</input_format_parallel_parsing><output_format_parallel_formatting>0</output_format_parallel_formatting></default></profiles></clickhouse>'
ulimits:
nofile:
soft: 262144
+61
View File
@@ -0,0 +1,61 @@
# documentation: https://portabase.io/docs
# slogan: Self-hosted database backup & monitoring platform
# tags: backup, database, monitoring,open-source
# logo: svgs/portabase.svg
# port: 80
services:
portabase:
image: portabase/portabase:1.28.1
restart: always
environment:
- SERVICE_URL_PORTABASE_80
- 'PROJECT_URL=$SERVICE_URL_PORTABASE'
- PROJECT_SECRET=$SERVICE_PASSWORD_64_PORTABASE
- 'DATABASE_URL=postgresql://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgres:5432/${POSTGRES_DB:-portabase}?schema=public'
- PROJECT_NAME=${PROJECT_NAME:-Portabase}
- TZ=${TZ:-Europe/Paris}
- LOG_LEVEL=${LOG_LEVEL:-info}
- RETENTION_CRON=${RETENTION_CRON:-0 7 * * *}
- STALE_BACKUP_THRESHOLD_HOURS=${STALE_BACKUP_THRESHOLD_HOURS:-6}
- BACKUP_FOLDER_NAME=${BACKUP_FOLDER_NAME:-backups}
- TELEMETRY=${TELEMETRY:-true}
- SKIP_ONBOARDING=${SKIP_ONBOARDING:-false}
- API_ENABLED=${API_ENABLED:-false}
- OPENAPI_ENABLED=${OPENAPI_ENABLED:-false}
- MCP_ENABLED=${MCP_ENABLED:-false}
- SMTP_HOST=${SMTP_HOST}
- SMTP_PORT=${SMTP_PORT}
- SMTP_USER=${SMTP_USER}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- SMTP_FROM=${SMTP_FROM}
- SMTP_SECURE=${SMTP_SECURE:-false}
volumes:
- portabase-data:/data
depends_on:
postgres:
condition: service_healthy
healthcheck:
test:
- CMD-SHELL
- 'curl -f http://localhost/api/health'
interval: 30s
timeout: 5s
retries: 3
start_period: 60s
postgres:
image: 'postgres:18-alpine'
volumes:
- 'postgres-data:/var/lib/postgresql'
environment:
- POSTGRES_DB=${POSTGRES_DB:-portabase}
- POSTGRES_USER=$SERVICE_USER_POSTGRES
- POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES
healthcheck:
test:
- CMD-SHELL
- 'pg_isready -U $POSTGRES_USER -d ${POSTGRES_DB}'
interval: 10s
timeout: 5s
retries: 5
+1 -2
View File
@@ -1,4 +1,3 @@
# ignore: true
# documentation: https://pterodactyl.io/
# slogan: Pterodactyl is a free, open-source game server management panel
# category: media
@@ -33,7 +32,7 @@ services:
retries: 3
pterodactyl:
image: ghcr.io/pterodactyl/panel:v1.12.0
image: ghcr.io/pterodactyl/panel:v1.12.3
volumes:
- "panel-var:/app/var/"
- "panel-nginx:/etc/nginx/http.d/"
@@ -1,4 +1,3 @@
# ignore: true
# documentation: https://pterodactyl.io/
# slogan: Pterodactyl is a free, open-source game server management panel
# category: media
@@ -34,7 +33,7 @@ services:
timeout: 1s
retries: 3
pterodactyl:
image: 'ghcr.io/pterodactyl/panel:v1.12.0'
image: 'ghcr.io/pterodactyl/panel:v1.12.3'
volumes:
- 'panel-var:/app/var/'
- 'panel-nginx:/etc/nginx/http.d/'
+11 -6
View File
@@ -7,9 +7,9 @@
services:
rallly_db:
image: postgres:14.2
image: postgres:18
volumes:
- rallly_db_data:/var/lib/postgresql/data
- postgres-data:/var/lib/postgresql
environment:
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
@@ -25,23 +25,28 @@ services:
rallly:
image: lukevella/rallly:latest
platform: linux/amd64
depends_on:
rallly_db:
condition: service_healthy
environment:
- SERVICE_URL_RALLLY_3000
- PROXY_MODE=external
- DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@rallly_db:5432/${POSTGRES_DB:-rallly}
- SECRET_PASSWORD=${SERVICE_PASSWORD_64_RALLLY}
- NEXT_PUBLIC_BASE_URL=${SERVICE_URL_RALLLY}
- REGISTRATION_ENABLED=${REGISTRATION_ENABLED:-true}
- INITIAL_ADMIN_EMAIL=${INITIAL_ADMIN_EMAIL:?}
- ALLOWED_EMAILS=${ALLOWED_EMAILS}
- SUPPORT_EMAIL=${SUPPORT_EMAIL:-support@example.com}
- SUPPORT_EMAIL=${SUPPORT_EMAIL:?}
- SMTP_HOST=${SMTP_HOST}
- SMTP_PORT=${SMTP_PORT}
- SMTP_SECURE=${SMTP_SECURE:-false}
- SMTP_USER=${SMTP_USER}
- SMTP_PWD=${SMTP_PWD}
- SMTP_TLS_ENABLED=${SMTP_TLS_ENABLED:-false}
- BETTER_AUTH_TRUSTED_ORIGINS=${SERVICE_URL_RALLLY}
healthcheck:
test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/3000' || exit 1"]
interval: 5s
timeout: 20s
retries: 10
depends_on:
rallly_db:
condition: service_healthy
+173 -437
View File
@@ -7,7 +7,7 @@
services:
init-clickhouse:
image: clickhouse/clickhouse-server:25.5.6-alpine
image: clickhouse/clickhouse-server:25.12.5-alpine
command:
- bash
- -c
@@ -19,7 +19,6 @@ services:
cd /tmp
wget -O histogram-quantile.tar.gz "https://github.com/SigNoz/signoz/releases/download/histogram-quantile%2F$${version}/histogram-quantile_$${node_os}_$${node_arch}.tar.gz"
tar -xvzf histogram-quantile.tar.gz
mkdir -p /var/lib/clickhouse/user_scripts/histogramQuantile
mv histogram-quantile /var/lib/clickhouse/user_scripts/histogramQuantile
restart: on-failure
exclude_from_hc: true
@@ -27,6 +26,10 @@ services:
options:
max-size: 50m
max-file: "3"
volumes:
- type: volume
source: user-scripts
target: /var/lib/clickhouse/user_scripts
zookeeper:
image: signoz/zookeeper:3.9.3
@@ -51,8 +54,7 @@ services:
- ZOO_PROMETHEUS_METRICS_PORT_NUMBER=${ZOO_PROMETHEUS_METRICS_PORT_NUMBER:-9141}
clickhouse:
# addding non LTS version due to this fix https://github.com/ClickHouse/ClickHouse/commit/32caf8716352f45c1b617274c7508c86b7d1afab
image: clickhouse/clickhouse-server:25.5.6-alpine
image: clickhouse/clickhouse-server:25.12.5-alpine
tty: true
depends_on:
init-clickhouse:
@@ -63,8 +65,8 @@ services:
test:
- CMD
- wget
- --spider
- -q
- -O-
- 0.0.0.0:8123/ping
interval: 30s
timeout: 5s
@@ -79,11 +81,15 @@ services:
max-size: 50m
max-file: "3"
environment:
- "CLICKHOUSE_SKIP_USER_SETUP=1"
- CLICKHOUSE_SKIP_USER_SETUP=1
volumes:
- type: volume
source: clickhouse
target: /var/lib/clickhouse/
- type: volume
source: user-scripts
target: /var/lib/clickhouse/user_scripts
read_only: true
- type: bind
source: ./clickhouse/custom-function.xml
target: /etc/clickhouse-server/custom-function.xml
@@ -115,329 +121,52 @@ services:
content: |
<?xml version="1.0"?>
<clickhouse>
<!-- ZooKeeper is used to store metadata about replicas, when using Replicated tables.
Optional. If you don't use replicated tables, you could omit that.
See https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replication/
-->
<zookeeper>
<node index="1">
<host>zookeeper</host>
<port>2181</port>
</node>
</zookeeper>
<!-- Configuration of clusters that could be used in Distributed tables.
https://clickhouse.com/docs/en/operations/table_engines/distributed/
-->
<remote_servers>
<cluster>
<!-- Inter-server per-cluster secret for Distributed queries
default: no secret (no authentication will be performed)
If set, then Distributed queries will be validated on shards, so at least:
- such cluster should exist on the shard,
- such cluster should have the same secret.
And also (and which is more important), the initial_user will
be used as current user for the query.
Right now the protocol is pretty simple and it only takes into account:
- cluster name
- query
Also it will be nice if the following will be implemented:
- source hostname (see interserver_http_host), but then it will depends from DNS,
it can use IP address instead, but then the you need to get correct on the initiator node.
- target hostname / ip address (same notes as for source hostname)
- time-based security tokens
-->
<!-- <secret></secret> -->
<shard>
<!-- Optional. Whether to write data to just one of the replicas. Default: false (write data to all replicas). -->
<!-- <internal_replication>false</internal_replication> -->
<!-- Optional. Shard weight when writing data. Default: 1. -->
<!-- <weight>1</weight> -->
<replica>
<host>clickhouse</host>
<port>9000</port>
<!-- Optional. Priority of the replica for load_balancing. Default: 1 (less value has more priority). -->
<!-- <priority>1</priority> -->
</replica>
</shard>
<!-- <shard>
<replica>
<host>clickhouse-2</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<host>clickhouse-3</host>
<port>9000</port>
</replica>
</shard> -->
</cluster>
</remote_servers>
</clickhouse>
- type: bind
source: ./clickhouse/users.xml
target: /etc/clickhouse-server/users.xml
content: |
<?xml version="1.0"?>
<clickhouse>
<!-- See also the files in users.d directory where the settings can be overridden. -->
<!-- Profiles of settings. -->
<profiles>
<!-- Default settings. -->
<default>
<!-- Maximum memory usage for processing single query, in bytes. -->
<max_memory_usage>10000000000</max_memory_usage>
<!-- How to choose between replicas during distributed query processing.
random - choose random replica from set of replicas with minimum number of errors
nearest_hostname - from set of replicas with minimum number of errors, choose replica
with minimum number of different symbols between replica's hostname and local hostname
(Hamming distance).
in_order - first live replica is chosen in specified order.
first_or_random - if first replica one has higher number of errors, pick a random one from replicas with minimum number of errors.
-->
<load_balancing>random</load_balancing>
</default>
<!-- Profile that allows only read queries. -->
<readonly>
<readonly>1</readonly>
</readonly>
</profiles>
<!-- Users and ACL. -->
<users>
<!-- If user name was not specified, 'default' user is used. -->
<default>
<!-- See also the files in users.d directory where the password can be overridden.
Password could be specified in plaintext or in SHA256 (in hex format).
If you want to specify password in plaintext (not recommended), place it in 'password' element.
Example: <password>qwerty</password>.
Password could be empty.
If you want to specify SHA256, place it in 'password_sha256_hex' element.
Example: <password_sha256_hex>65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5</password_sha256_hex>
Restrictions of SHA256: impossibility to connect to ClickHouse using MySQL JS client (as of July 2019).
If you want to specify double SHA1, place it in 'password_double_sha1_hex' element.
Example: <password_double_sha1_hex>e395796d6546b1b65db9d665cd43f0e858dd4303</password_double_sha1_hex>
If you want to specify a previously defined LDAP server (see 'ldap_servers' in the main config) for authentication,
place its name in 'server' element inside 'ldap' element.
Example: <ldap><server>my_ldap_server</server></ldap>
If you want to authenticate the user via Kerberos (assuming Kerberos is enabled, see 'kerberos' in the main config),
place 'kerberos' element instead of 'password' (and similar) elements.
The name part of the canonical principal name of the initiator must match the user name for authentication to succeed.
You can also place 'realm' element inside 'kerberos' element to further restrict authentication to only those requests
whose initiator's realm matches it.
Example: <kerberos />
Example: <kerberos><realm>EXAMPLE.COM</realm></kerberos>
How to generate decent password:
Execute: PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
In first line will be password and in second - corresponding SHA256.
How to generate double SHA1:
Execute: PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha1sum | tr -d '-' | xxd -r -p | sha1sum | tr -d '-'
In first line will be password and in second - corresponding double SHA1.
-->
<password></password>
<!-- List of networks with open access.
To open access from everywhere, specify:
<ip>::/0</ip>
To open access only from localhost, specify:
<ip>::1</ip>
<ip>127.0.0.1</ip>
Each element of list has one of the following forms:
<ip> IP-address or network mask. Examples: 213.180.204.3 or 10.0.0.1/8 or 10.0.0.1/255.255.255.0
2a02:6b8::3 or 2a02:6b8::3/64 or 2a02:6b8::3/ffff:ffff:ffff:ffff::.
<host> Hostname. Example: server01.clickhouse.com.
To check access, DNS query is performed, and all received addresses compared to peer address.
<host_regexp> Regular expression for host names. Example, ^server\d\d-\d\d-\d\.clickhouse\.com$
To check access, DNS PTR query is performed for peer address and then regexp is applied.
Then, for result of PTR query, another DNS query is performed and all received addresses compared to peer address.
Strongly recommended that regexp is ends with $
All results of DNS requests are cached till server restart.
-->
<networks>
<ip>::/0</ip>
</networks>
<!-- Settings profile for user. -->
<profile>default</profile>
<!-- Quota for user. -->
<quota>default</quota>
<!-- User can create other users and grant rights to them. -->
<!-- <access_management>1</access_management> -->
</default>
</users>
<!-- Quotas. -->
<quotas>
<!-- Name of quota. -->
<default>
<!-- Limits for time interval. You could specify many intervals with different limits. -->
<interval>
<!-- Length of interval. -->
<duration>3600</duration>
<!-- No limits. Just calculate resource usage for time interval. -->
<queries>0</queries>
<errors>0</errors>
<result_rows>0</result_rows>
<read_rows>0</read_rows>
<execution_time>0</execution_time>
</interval>
</default>
</quotas>
</clickhouse>
- type: bind
source: ./clickhouse/config.xml
target: /etc/clickhouse-server/config.xml
content: |
<?xml version="1.0"?>
<clickhouse>
<max_connections>4096</max_connections>
<keep_alive_timeout>3</keep_alive_timeout>
<max_concurrent_queries>100</max_concurrent_queries>
<mark_cache_size>5368709120</mark_cache_size>
<mmap_cache_size>1000</mmap_cache_size>
<compiled_expression_cache_size>134217728</compiled_expression_cache_size>
<compiled_expression_cache_elements_size>10000</compiled_expression_cache_elements_size>
<custom_settings_prefixes></custom_settings_prefixes>
<dictionaries_config>*_dictionary.xml</dictionaries_config>
<user_defined_executable_functions_config>*function.xml</user_defined_executable_functions_config>
<user_scripts_path>/var/lib/clickhouse/user_scripts/</user_scripts_path>
<http_port>8123</http_port>
<tcp_port>9000</tcp_port>
<mysql_port>9004</mysql_port>
<postgresql_port>9005</postgresql_port>
<interserver_http_port>9009</interserver_http_port>
<logger>
<level>information</level>
<formatting>
<type>json</type>
</formatting>
</logger>
<macros>
<shard>01</shard>
<replica>example01-01-1</replica>
</macros>
<prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port>
<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
<status_info>true</status_info>
</prometheus>
<opentelemetry_span_log>
<engine>engine MergeTree
partition by toYYYYMM(finish_date)
order by (finish_date, finish_time_us, trace_id)</engine>
</opentelemetry_span_log>
<query_masking_rules>
<rule>
<name>hide encrypt/decrypt arguments</name>
<regexp>((?:aes_)?(?:encrypt|decrypt)(?:_mysql)?)\s*\(\s*(?:'(?:\\'|.)+'|.*?)\s*\)</regexp>
<replace>\1(???)</replace>
</rule>
</query_masking_rules>
<send_crash_reports>
<enabled>false</enabled>
<anonymize>false</anonymize>
<endpoint>https://6f33034cfe684dd7a3ab9875e57b1c8d@o388870.ingest.sentry.io/5226277</endpoint>
</send_crash_reports>
<merge_tree_metadata_cache>
<lru_cache_size>268435456</lru_cache_size>
<continue_if_corrupted>true</continue_if_corrupted>
</merge_tree_metadata_cache>
<user_directories>
<users_xml>
<!-- Path to configuration file with predefined users. -->
<path>users.xml</path>
</users_xml>
<local_directory>
<!-- Path to folder where users created by SQL commands are stored. -->
<path>/var/lib/clickhouse/access/</path>
</local_directory>
</user_directories>
<default_profile>default</default_profile>
<distributed_ddl>
<!-- Path in ZooKeeper to queue with DDL queries -->
<path>/clickhouse/task_queue/ddl</path>
</distributed_ddl>
<macros>
<shard>01</shard>
<replica>replica01</replica>
</macros>
<user_scripts_path>/var/lib/clickhouse/user_scripts/</user_scripts_path>
<user_defined_executable_functions_config>*function.xml</user_defined_executable_functions_config>
</clickhouse>
signoz:
image: signoz/signoz:v0.97.1
image: signoz/signoz:v0.137.1
depends_on:
clickhouse:
condition: service_healthy
schema-migrator-sync:
telemetrystore-migrator:
condition: service_completed_successfully
logging:
options:
max-size: 50m
max-file: "3"
command:
- --config=/root/config/prometheus.yml
volumes:
- type: bind
source: ./prometheus.yml
target: /root/config/prometheus.yml
content: |
# my global config
global:
scrape_interval: 5s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files: []
# - "first_rules.yml"
# - "second_rules.yml"
# - 'alerts.yml'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs: []
remote_read:
- url: tcp://clickhouse:9000/signoz_metrics
- type: volume
source: sqlite
target: /var/lib/signoz/
environment:
- SERVICE_URL_SIGNOZ_8080
- SIGNOZ_JWT_SECRET=${SERVICE_REALBASE64_JWTSECRET}
- SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_TOKENIZER_JWT_SECRET=${SERVICE_REALBASE64_JWTSECRET}
- SIGNOZ_SQLSTORE_PROVIDER=sqlite
- SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db
- DASHBOARDS_PATH=/root/config/dashboards
- STORAGE=clickhouse
- SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse
- SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000
- GODEBUG=netdns=go
- DEPLOYMENT_TYPE=docker-standalone-amd
- SIGNOZ_STATSREPORTER_ENABLED=${SIGNOZ_STATSREPORTER_ENABLED:-true}
@@ -463,12 +192,37 @@ services:
timeout: 5s
retries: 3
otel-collector:
image: signoz/signoz-otel-collector:v0.129.7
telemetrystore-migrator:
image: signoz/signoz-otel-collector:v0.144.8
depends_on:
clickhouse:
condition: service_healthy
schema-migrator-sync:
entrypoint:
- /bin/sh
- -c
command:
- |
/signoz-otel-collector migrate bootstrap --clickhouse-dsn tcp://clickhouse:9000 &&
/signoz-otel-collector migrate sync up --clickhouse-dsn tcp://clickhouse:9000 &&
/signoz-otel-collector migrate async up --clickhouse-dsn tcp://clickhouse:9000
environment:
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m
restart: on-failure
exclude_from_hc: true
logging:
options:
max-size: 50m
max-file: "3"
otel-collector:
image: signoz/signoz-otel-collector:v0.144.8
depends_on:
clickhouse:
condition: service_healthy
telemetrystore-migrator:
condition: service_completed_successfully
signoz:
condition: service_healthy
@@ -476,153 +230,135 @@ services:
options:
max-size: 50m
max-file: "3"
entrypoint:
- /bin/sh
command:
- --config=/etc/otel-collector-config.yaml
- --manager-config=/etc/manager-config.yaml
- --copy-path=/var/tmp/collector-config.yaml
- --feature-gates=-pkg.translator.prometheus.NormalizeName
volumes:
- type: bind
source: ./otel-collector-config.yaml
target: /etc/otel-collector-config.yaml
content: |
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
prometheus:
config:
global:
scrape_interval: 60s
scrape_configs:
- job_name: otel-collector
static_configs:
- targets:
- localhost:8888
labels:
job_name: otel-collector
processors:
batch:
send_batch_size: 10000
send_batch_max_size: 11000
timeout: 10s
resourcedetection:
# Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels.
detectors: [env, system]
timeout: 2s
signozspanmetrics/delta:
metrics_exporter: signozclickhousemetrics
metrics_flush_interval: 60s
latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s ]
dimensions_cache_size: 100000
aggregation_temporality: AGGREGATION_TEMPORALITY_DELTA
enable_exp_histogram: true
dimensions:
- name: service.namespace
default: default
- name: deployment.environment
default: default
# This is added to ensure the uniqueness of the timeseries
# Otherwise, identical timeseries produced by multiple replicas of
# collectors result in incorrect APM metrics
- name: signoz.collector.id
- name: service.version
- name: browser.platform
- name: browser.mobile
- name: k8s.cluster.name
- name: k8s.node.name
- name: k8s.namespace.name
- name: host.name
- name: host.type
- name: container.name
- -c
- |
set -e
cat > /tmp/otel-config.yaml <<'SIGNOZ_CFG'
connectors:
signozmeter:
metrics_flush_interval: 1h
dimensions:
- name: service.name
- name: deployment.environment
- name: host.name
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
auth:
authenticator: basicauth/server
processors:
batch:
send_batch_size: 50000
send_batch_max_size: 55000
timeout: 5s
batch/meter:
send_batch_size: 20000
send_batch_max_size: 25000
timeout: 5s
signozspanmetrics/delta:
metrics_exporter: signozclickhousemetrics
metrics_flush_interval: 60s
latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s]
dimensions_cache_size: 100000
aggregation_temporality: AGGREGATION_TEMPORALITY_DELTA
enable_exp_histogram: true
dimensions:
- name: service.namespace
default: default
- name: deployment.environment
default: default
# This is added to ensure the uniqueness of the timeseries
# Otherwise, identical timeseries produced by multiple replicas of
# collectors result in incorrect APM metrics
- name: signoz.collector.id
- name: service.version
exporters:
clickhousetraces:
datasource: tcp://clickhouse:9000/signoz_traces
low_cardinal_exception_grouping: false
use_new_schema: true
timeout: 45s
sending_queue:
enabled: false
signozclickhousemetrics:
dsn: tcp://clickhouse:9000/signoz_metrics
timeout: 45s
sending_queue:
enabled: false
clickhouselogsexporter:
dsn: tcp://clickhouse:9000/signoz_logs
use_new_schema: true
timeout: 45s
sending_queue:
enabled: false
signozclickhousemeter:
dsn: tcp://clickhouse:9000/signoz_meter
timeout: 45s
sending_queue:
enabled: false
metadataexporter:
enabled: true
dsn: tcp://clickhouse:9000/signoz_metadata
timeout: 45s
cache:
provider: in_memory
extensions:
signoz_health_check:
endpoint: 0.0.0.0:13133
pprof:
endpoint: 0.0.0.0:1777
basicauth/server:
htpasswd:
inline: "$${env:OTEL_BASIC_AUTH}\n"
service:
telemetry:
logs:
encoding: json
extensions:
health_check:
endpoint: 0.0.0.0:13133
pprof:
endpoint: 0.0.0.0:1777
exporters:
clickhousetraces:
datasource: tcp://clickhouse:9000/signoz_traces
low_cardinal_exception_grouping: ${env:LOW_CARDINAL_EXCEPTION_GROUPING}
use_new_schema: true
signozclickhousemetrics:
dsn: tcp://clickhouse:9000/signoz_metrics
clickhouselogsexporter:
dsn: tcp://clickhouse:9000/signoz_logs
timeout: 10s
use_new_schema: true
service:
telemetry:
logs:
encoding: json
extensions:
- health_check
- pprof
pipelines:
traces:
receivers: [otlp]
processors: [signozspanmetrics/delta, batch]
exporters: [clickhousetraces]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [signozclickhousemetrics]
metrics/prometheus:
receivers: [prometheus]
processors: [batch]
exporters: [signozclickhousemetrics]
logs:
receivers: [otlp]
processors: [batch]
exporters: [clickhouselogsexporter]
- type: bind
source: ./otel-collector-opamp-config.yaml
target: /etc/manager-config.yaml
content: |
server_endpoint: ws://signoz:4320/v1/opamp
- signoz_health_check
- pprof
- basicauth/server
pipelines:
traces:
receivers: [otlp]
processors: [signozspanmetrics/delta, batch]
exporters: [clickhousetraces, signozmeter, metadataexporter]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [signozclickhousemetrics, signozmeter, metadataexporter]
logs:
receivers: [otlp]
processors: [batch]
exporters: [clickhouselogsexporter, signozmeter, metadataexporter]
metrics/meter:
receivers: [signozmeter]
processors: [batch/meter]
exporters: [signozclickhousemeter]
SIGNOZ_CFG
cat > /tmp/opamp-config.yaml <<'SIGNOZ_OPAMP'
server_endpoint: ws://signoz:4320/v1/opamp
SIGNOZ_OPAMP
/signoz-otel-collector migrate sync check
exec /signoz-otel-collector --config=/tmp/otel-config.yaml --manager-config=/tmp/opamp-config.yaml --copy-path=/var/tmp/collector-config.yaml
environment:
- SERVICE_URL_OTELCOLLECTORHTTP_4318
- OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux
- LOW_CARDINAL_EXCEPTION_GROUPING=false
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m
- OTEL_BASIC_AUTH=signoz:${SERVICE_PASSWORD_64_OTELAUTH}
healthcheck:
test: bash -c "exec 6<> /dev/tcp/localhost/13133"
interval: 30s
timeout: 5s
retries: 3
schema-migrator-sync:
image: signoz/signoz-schema-migrator:v0.129.7
command:
- sync
- --dsn=tcp://clickhouse:9000
- --up=
depends_on:
clickhouse:
condition: service_healthy
restart: on-failure
exclude_from_hc: true
logging:
options:
max-size: 50m
max-file: "3"
schema-migrator-async:
image: signoz/signoz-schema-migrator:v0.129.7
depends_on:
clickhouse:
condition: service_healthy
schema-migrator-sync:
condition: service_completed_successfully
restart: on-failure
exclude_from_hc: true
logging:
options:
max-size: 50m
max-file: "3"
command:
- async
- --dsn=tcp://clickhouse:9000
- --up=
+65
View File
@@ -0,0 +1,65 @@
# documentation: https://snipe-it.readme.io/docs/introduction
# slogan: Snipe-IT is an open-source asset management platform built for IT departments.
# category: productivity
# tags: inventory, open-source
# logo: svgs/snipe-it.webp
# port: 80
services:
app:
image: snipe/snipe-it:v8.7.1
environment:
- SERVICE_URL_SNIPEIT_80
- APP_ENV=production
- APP_DEBUG=false
- APP_KEY=base64:${SERVICE_REALBASE64_32_APPKEY}
- APP_URL=${SERVICE_URL_SNIPEIT}
- APP_TIMEZONE=${APP_TIMEZONE:-UTC}
- APP_LOCALE=${APP_LOCALE:-en-US}
- DB_CONNECTION=mysql
- DB_HOST=mariadb
- DB_PORT=3306
- DB_DATABASE=${MYSQL_DATABASE:-snipeit}
- DB_USERNAME=${SERVICE_USER_MARIADB}
- DB_PASSWORD=${SERVICE_PASSWORD_MARIADB}
- MAIL_MAILER=${MAIL_MAILER:-smtp}
- MAIL_HOST=${MAIL_HOST:-null}
- MAIL_PORT=${MAIL_PORT:-1025}
- MAIL_USERNAME=${MAIL_USERNAME:-null}
- MAIL_PASSWORD=${MAIL_PASSWORD:-null}
- MAIL_FROM_ADDR=${MAIL_FROM_ADDR:-you@example.com}
- MAIL_FROM_NAME=${MAIL_FROM_NAME:-Snipe-IT}
volumes:
- storage:/var/lib/snipeit
healthcheck:
test:
- CMD
- curl
- -f
- http://localhost/health
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
depends_on:
mariadb:
condition: service_healthy
mariadb:
image: mariadb:11.8
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE:-snipeit}
- MYSQL_USER=${SERVICE_USER_MARIADB}
- MYSQL_PASSWORD=${SERVICE_PASSWORD_MARIADB}
- MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT}
volumes:
- db_data:/var/lib/mysql
healthcheck:
test:
- CMD
- healthcheck.sh
- --connect
- --innodb_initialized
interval: 5s
timeout: 1s
retries: 5
+12 -12
View File
@@ -7,20 +7,20 @@
services:
terraria-server:
image: 'hexlo/terraria-server-docker:1.4.4.9'
image: hexlo/terraria-server-docker:1.4.5.0
stdin_open: true
tty: true
ports:
- '7777:7777'
- 7777:7777
volumes:
- 'terraria-server:/root/.local/share/Terraria/Worlds'
- terraria-server:/root/.local/share/Terraria/Worlds
environment:
- 'WORLD=${WORLD:-/root/.local/share/Terraria/Worlds/world1.wld}'
- 'AUTOCREATE=${AUTOCREATE:-2}'
- 'WORLDNAME=${WORLDNAME:-world1}'
- 'DIFFICULTY=${DIFFICULTY:-1}'
- 'MAXPLAYERS=${MAXPLAYERS:-8}'
- 'PASSWORD=${PASSWORD:-mypassword}'
- 'MOTD=${MOTD:-Welcome to the server!}'
- 'LANGUAGE=${LANGUAGE:-en/US}'
- 'SECURE=${SECURE:-1}'
- worldpath=${WORLDPATH:-/root/.local/share/Terraria/Worlds}
- autocreate=${AUTOCREATE:-2}
- world=${WORLD:-world1.wld}
- difficulty=${DIFFICULTY:-1}
- maxplayers=${MAXPLAYERS:-8}
- password=${SERVICE_PASSWORD_TERRARIA}
- motd=${MOTD:-Welcome to the server!}
- language=${LANGUAGE:-en/US}
- secure=${SECURE:-1}
+1 -6
View File
@@ -8,18 +8,13 @@
services:
triliumnext:
image: ghcr.io/triliumnext/trilium:stable
platform: linux/amd64 # https://github.com/TriliumNext/Trilium/issues/6390
environment:
- SERVICE_URL_TRILIUMNEXT_8080
- TZ=${TZ:-Europe/Berlin}
volumes:
- triliumnext_data:/home/node/trilium-data
healthcheck:
test:
[
"CMD-SHELL",
"wget --quiet --tries=1 --spider http://127.0.0.1:8080/api/health-check || exit 1",
]
test: ["CMD", "node", "/usr/src/app/docker_healthcheck.cjs"]
interval: 5s
timeout: 20s
retries: 10
-1
View File
@@ -64,7 +64,6 @@ services:
volumes:
- twenty-local-storage:/app/packages/twenty-server/.local-storage
environment:
- SERVICE_URL_TWENTY_3000
- SERVER_URL=${SERVICE_URL_TWENTY}
- FRONT_BASE_URL=${SERVICE_URL_TWENTY}
- APP_SECRET=${SERVICE_BASE64_32_SECRET}
+1 -1
View File
@@ -11,7 +11,7 @@ services:
environment:
- SERVICE_URL_VAULTWARDEN
- DOMAIN=${SERVICE_URL_VAULTWARDEN}
- DATABASE_URL=${VAULTWARDEN_DB_URL:-data/db.sqlite3}
- DATABASE_URL=${VAULTWARDEN_DB_URL:-sqlite:///data/db.sqlite3}
- SIGNUPS_ALLOWED=${SIGNUP_ALLOWED:-true}
- ADMIN_TOKEN=${SERVICE_PASSWORD_64_ADMIN}
- IP_HEADER=X-Forwarded-For
@@ -11,7 +11,7 @@ services:
environment:
- SERVICE_URL_VIKUNJA
- VIKUNJA_SERVICE_PUBLICURL=$SERVICE_URL_VIKUNJA
- VIKUNJA_SERVICE_JWTSECRET=$SERVICE_PASSWORD_JWTSECRET
- VIKUNJA_SERVICE_SECRET=$SERVICE_PASSWORD_JWTSECRET
- VIKUNJA_SERVICE_ENABLEREGISTRATION=true
- VIKUNJA_DATABASE_TYPE=postgres
- VIKUNJA_DATABASE_HOST=postgresql
@@ -20,9 +20,16 @@ services:
- VIKUNJA_DATABASE_DATABASE=${POSTGRESQL_DATABASE}
volumes:
- vikunja-data:/app/vikunja/
healthcheck:
test: [ "CMD", "/app/vikunja/vikunja", "healthcheck" ]
interval: 30s
timeout: 5s
retries: 3
start_period: 15s
depends_on:
postgresql:
condition: service_healthy
postgresql:
image: postgres:16-alpine
volumes:
+10 -2
View File
@@ -11,7 +11,7 @@ services:
environment:
- SERVICE_URL_VIKUNJA
- VIKUNJA_SERVICE_PUBLICURL=$SERVICE_URL_VIKUNJA
- VIKUNJA_SERVICE_JWTSECRET=$SERVICE_PASSWORD_JWTSECRET
- VIKUNJA_SERVICE_SECRET=$SERVICE_PASSWORD_JWTSECRET
- VIKUNJA_SERVICE_ENABLEREGISTRATION=true
- VIKUNJA_DATABASE_PATH=/db/vikunja.db
- VIKUNJA_DATABASE_TYPE=sqlite
@@ -20,9 +20,17 @@ services:
- vikunja-sqlite-data:/db
depends_on:
- init
healthcheck:
test: [ "CMD", "/app/vikunja/vikunja", "healthcheck" ]
interval: 30s
timeout: 5s
retries: 3
start_period: 15s
init:
image: busybox
restart: no
volumes:
- vikunja-data:/app/vikunja
- vikunja-sqlite-data:/db
command: ["sh", "-c", "touch /db/vikunja.db && chown -R 1000 /db"]
command: ["sh", "-c", "touch /db/vikunja.db && chown -R 1000 /db && chown -R 1000 /app/vikunja"]
+54
View File
@@ -0,0 +1,54 @@
# documentation: https://zero.rocicorp.dev/docs/deployment
# slogan: Query-driven sync engine for TypeScript apps backed by Postgres.
# category: backend
# tags: sync, realtime, postgres, typescript, local-first
# logo: svgs/zero.svg
# port: 4848
services:
zero:
image: rocicorp/zero:1.6.2
# stop_grace_period: 10m
environment:
- SERVICE_URL_ZERO_4848
- ZERO_UPSTREAM_DB=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_64_POSTGRES}@postgres:5432/${POSTGRES_DB}
- ZERO_CVR_DB=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_64_POSTGRES}@postgres:5432/${POSTGRES_DB}
- ZERO_CHANGE_DB=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_64_POSTGRES}@postgres:5432/${POSTGRES_DB}
- ZERO_REPLICA_FILE=/data/replica.db
- ZERO_ADMIN_PASSWORD=${SERVICE_PASSWORD_64_ADMIN}
- ZERO_QUERY_URL=${ZERO_QUERY_URL:?Set the URL of your API /query endpoint}
- ZERO_MUTATE_URL=${ZERO_MUTATE_URL:?Set the URL of your API /mutate endpoint}
- ZERO_ENABLE_CRUD_MUTATIONS=${ZERO_ENABLE_CRUD_MUTATIONS:-false}
- ZERO_NUM_SYNC_WORKERS=${ZERO_NUM_SYNC_WORKERS:-1}
- ZERO_APP_ID=${ZERO_APP_ID:-zero}
- ZERO_LOG_LEVEL=${ZERO_LOG_LEVEL:-info}
- ZERO_ENABLE_TELEMETRY=${ZERO_ENABLE_TELEMETRY:-true}
- ZERO_LAZY_STARTUP=${ZERO_LAZY_STARTUP:-false}
- ZERO_QUERY_API_KEY=${ZERO_QUERY_API_KEY:-}
- ZERO_MUTATE_API_KEY=${ZERO_MUTATE_API_KEY:-}
volumes:
- zero-data:/data
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:4848/keepalive"]
interval: 5s
timeout: 20s
retries: 10
start_period: 60s
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:18-alpine
command: ["postgres", "-c", "wal_level=logical"]
environment:
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_64_POSTGRES}
- POSTGRES_DB=${POSTGRES_DB:-zero-db}
volumes:
- postgres-data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 10s
timeout: 20s
retries: 10