feat(services): update and add new service templates (#11217)
No files matched your search
@@ -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) {
|
||||
|
||||
@@ -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 |
|
Before Width: | Height: | Size: 891 B After Width: | Height: | Size: 891 B |
|
After Width: | Height: | Size: 258 KiB |
|
After Width: | Height: | Size: 47 KiB |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
|
After Width: | Height: | Size: 205 KiB |
|
After Width: | Height: | Size: 16 KiB |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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:
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -4,6 +4,7 @@
|
||||
# tags: mattermost,slack,alternative
|
||||
# logo: svgs/mattermost.svg
|
||||
# port: 8065
|
||||
# amd_only: true
|
||||
|
||||
services:
|
||||
mattermost:
|
||||
|
||||
@@ -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:
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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,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/'
|
||||
|
||||
@@ -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
|
||||
@@ -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=
|
||||
@@ -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
|
||||
@@ -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}
|
||||
@@ -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
|
||||
@@ -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}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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"]
|
||||
@@ -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
|
||||