Merge pull request #3785 from coollabsio/new-services-2

Feat: New services and service fixes part 2
This commit is contained in:
Andras Bacsai
2024-10-10 10:29:51 +02:00
committed by GitHub
32 changed files with 1461 additions and 6 deletions

View File

@@ -0,0 +1,25 @@
<svg version="1.1" id="prefix__Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 1235.7 1235.4"
xml:space="preserve">
<style>
.prefix__st0 {
fill: #fff
}
</style>
<g id="prefix__Layer_2_1_">
<g id="prefix__Layer_2-2">
<g id="prefix__Layer_4">
<circle class="prefix__st0" cx="618.6" cy="618.6" r="618.6" id="prefix__Layer_5" />
<linearGradient id="prefix__SVGID_1_" gradientUnits="userSpaceOnUse" x1="617.37" y1="1257.3" x2="617.37"
y2="61.44" gradientTransform="matrix(1 0 0 -1 0 1278)">
<stop offset=".32" stop-color="#cd9d49" />
<stop offset=".99" stop-color="#875d27" />
</linearGradient>
<circle cx="617.4" cy="618.6" r="597.9" fill="url(#prefix__SVGID_1_)" />
</g>
<path class="prefix__st0"
d="M1005.6 574.1c-4.8-4-12.4-10-22.6-17v-79.2c0-201.9-163.7-365.6-365.6-365.6-201.9 0-365.6 163.7-365.6 365.6v79.2c-10.2 7-17.7 13-22.6 17-4.1 3.4-6.5 8.5-6.5 13.9v94.9c0 5.4 2.4 10.5 6.5 14 11.3 9.4 37.2 29.1 77.5 49.3v9.2c0 24.9 16 45 35.8 45 19.8 0 35.8-20.2 35.8-45V527.8c0-24.9-16-45-35.8-45-19 0-34.5 18.5-35.8 41.9h-.1v-46.9c0-171.6 139.1-310.7 310.7-310.7C789 167.2 928 306.3 928 477.9v46.9c-1.3-23.4-16.8-41.9-35.8-41.9-19.8 0-35.8 20.2-35.8 45v227.6c0 24.9 16 45 35.8 45 19.8 0 35.8-20.2 35.8-45v-9.2c40.3-20.2 66.2-39.9 77.5-49.3 4.2-3.5 6.5-8.6 6.5-14v-95c.1-5.4-2.3-10.5-6.4-13.9z" />
<path class="prefix__st0"
d="M489.9 969.7c23.9 0 43.3-19.4 43.3-43.3V441.6c0-23.9-19.4-43.3-43.3-43.3h-44.7c-23.9 0-43.3 19.4-43.3 43.3v484.8c0 23.9 19.4 43.3 43.3 43.3h44.7zm-71.7-455.1h98.7v10.3h-98.7v-10.3zM639.7 969.7c23.9 0 43.3-19.4 43.3-43.3V441.6c0-23.9-19.4-43.3-43.3-43.3H595c-23.9 0-43.3 19.4-43.3 43.3v484.8c0 23.9 19.4 43.3 43.3 43.3h44.7zM568 514.6h98.7v10.3H568v-10.3zM789.6 969.7c23.9 0 43.3-19.4 43.3-43.3V441.6c0-23.9-19.4-43.3-43.3-43.3h-44.7c-23.9 0-43.3 19.4-43.3 43.3v484.8c0 23.9 19.4 43.3 43.3 43.3h44.7zm-71.7-455.1h98.7v10.3h-98.7v-10.3zM327.1 984.7h580.5c18 0 32.6 14.6 32.6 32.6s-14.6 32.6-32.6 32.6H327.1c-18 0-32.6-14.6-32.6-32.6s14.6-32.6 32.6-32.6z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
public/svgs/azimutt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
public/svgs/bookstack.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

1
public/svgs/forgejo.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 212 212" width="32" height="32"><style>circle,path{fill:none;stroke:#000;stroke-width:15}path{stroke-width:25}.orange{stroke:#f60}.red{stroke:#d40000}</style><g transform="translate(6 6)"><path d="M58 168V70a50 50 0 0 1 50-50h20" class="orange"/><path d="M58 168v-30a50 50 0 0 1 50-50h20" class="red"/><circle cx="142" cy="20" r="18" class="orange"/><circle cx="142" cy="88" r="18" class="red"/><circle cx="58" cy="180" r="18" class="red"/></g></svg>

After

Width:  |  Height:  |  Size: 503 B

BIN
public/svgs/joplin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

55
public/svgs/keycloak.svg Normal file
View File

@@ -0,0 +1,55 @@
<svg viewBox="0 0 128 128" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<clipPath id="clip-path">
<path class="cls-1" d="M.02-.02H128v127.98H.02z" />
</clipPath>
<clipPath id="clip-path-3">
<path class="cls-1" d="M428 245.69h-9.77a.42.42 0 0 1-.33-.17l-.76-1-2.14-2.82-5.68-7.7-3.18-4.28a.41.41 0 0 0-.63 0l-3.33 3.71-.38.43a.4.4 0 0 0-.1.27v11.16a.41.41 0 0 1-.41.41h-8.42a.41.41 0 0 1-.41-.41v-40.55a.4.4 0 0 1 .41-.41h8.42a.41.41 0 0 1 .41.41v15.53a.4.4 0 0 0 .7.28l4.65-5L414 208l3.24-3.52a.41.41 0 0 1 .3-.13h10.34a.4.4 0 0 1 .41.42.46.46 0 0 1-.1.25l-4.66 5.17-7.74 8.61-3.23 3.58a.4.4 0 0 0 0 .5l4 5.63 3.66 5.16.45.63 2.77 3.88 2.89 4.06 2 2.82a.41.41 0 0 1-.33.63zm-38.72-.57a.41.41 0 0 1-.37.57h-8.94a.4.4 0 0 1-.37-.25l-.18-.4-3.46-8a.4.4 0 0 0-.37-.25h-16.8a.41.41 0 0 0-.38.25l-.52 1.2-3.12 7.25a.41.41 0 0 1-.36.23h-8.94a.41.41 0 0 1-.37-.57l.62-1.44 4.22-9.76.15-.34.18-.41.08-.2 1.4-3.25 10.84-25.09a.41.41 0 0 1 .37-.25h8.4a.4.4 0 0 1 .37.25l5.64 13 2.79 6.44 3.12 7.21 5.9 13.66zm-17.16-17-.59-1.38-2-4.63-2-4.57a.41.41 0 0 0-.75 0l-3.51 8.11-1.07 2.48a.4.4 0 0 0 .37.56h9.13a.4.4 0 0 0 .37-.61zm-26.51 4.66a17.7 17.7 0 0 1-.83 1.84 20.76 20.76 0 0 1-4 5.37 22.08 22.08 0 0 1-2.26 1.94 21 21 0 0 1-11.68 4.14h-1.51a21.6 21.6 0 0 1-12.1-3.42 22 22 0 0 1-3.34-2.7c-.41-.41-.81-.82-1.18-1.24a20.43 20.43 0 0 1-5.1-14 23.47 23.47 0 0 1 .27-3.6l-.19-.28.3-.45a20.05 20.05 0 0 1 5.89-10.91A22 22 0 0 1 313 207a20.33 20.33 0 0 1 7.39-3.09 23.77 23.77 0 0 1 4.92-.49 21.25 21.25 0 0 1 15.45 6.13 20.25 20.25 0 0 1 6.17 12.94c.07.74.1 1.51.1 2.28a21.76 21.76 0 0 1-1.47 7.97zm-8-8a13.54 13.54 0 0 0-3.18-9 5.22 5.22 0 0 0-.36-.43 11.34 11.34 0 0 0-8.73-3.9 12.49 12.49 0 0 0-2.67.28 11.4 11.4 0 0 0-6.06 3.62 13.44 13.44 0 0 0-3.55 9.12v.32a13.41 13.41 0 0 0 3.56 9.41 11.78 11.78 0 0 0 1.07 1 11.35 11.35 0 0 0 2.33 1.6 12.09 12.09 0 0 0 10.81-.09 11.76 11.76 0 0 0 2.87-2.18l.36-.38a13.42 13.42 0 0 0 2-2.83 13.84 13.84 0 0 0 1.53-6.55zm-34.51 12.69h-16.85a.4.4 0 0 1-.41-.4v-32.33a.4.4 0 0 0-.23-.36.35.35 0 0 0-.17 0H277a.4.4 0 0 0-.41.41v40.55a.41.41 0 0 0 .41.41h26a.41.41 0 0 0 .41-.41v-7.42a.41.41 0 0 0-.34-.46zm-45.76-34c-.67-.05-1.34-.08-2-.08a21.24 21.24 0 0 0-15.42 6.15 22.18 22.18 0 0 0-2.08 2.35 20.67 20.67 0 0 0-4.22 13 22.27 22.27 0 0 0 1.35 7.89 19.26 19.26 0 0 0 2.08 4.05 20.42 20.42 0 0 0 2.74 3.28 20.93 20.93 0 0 0 4.13 3.14c.37.21.75.42 1.13.61.38.19.56.27.85.39a23.61 23.61 0 0 0 9.6 1.88 21.39 21.39 0 0 0 3.07-.22c.64-.09 1.27-.21 1.9-.36a21.44 21.44 0 0 0 9.63-5.32c.58-.54 1.16-1.12 1.73-1.74a.41.41 0 0 0 0-.56l-5.34-5.49a.39.39 0 0 0-.36-.12.44.44 0 0 0-.24.14 13.55 13.55 0 0 1-10.84 5 12.05 12.05 0 0 1-4.18-.71 11.73 11.73 0 0 1-4.28-2.79 11.29 11.29 0 0 1-2.7-4.3 14.68 14.68 0 0 1-.79-5 12 12 0 0 1 3.21-8.7l.49-.47a12.68 12.68 0 0 1 8.91-3.4 13.35 13.35 0 0 1 10.59 5.08.4.4 0 0 0 .61 0l5.19-5.89a.42.42 0 0 0 0-.55 21.73 21.73 0 0 0-14.78-7.27zm-23.34 4.2 1.57-2.74a.4.4 0 0 0-.35-.61h-9.07a.41.41 0 0 0-.35.2l-8.22 14.15-.44.32-.33.25a.42.42 0 0 1-.17-.16l-.14-.23-.21-.35-8.12-14a.41.41 0 0 0-.35-.2h-9.07a.41.41 0 0 0-.35.61l3.93 6.88 7.12 12.44 2.87 5a.41.41 0 0 1 .06.2v15.82a.41.41 0 0 0 .41.41h8.42a.41.41 0 0 0 .41-.41v-15.79a.41.41 0 0 1 .06-.2l2-3.55 7.7-13.46 1.57-2.74 1-1.83zm-38.85 29.85H174.7a.41.41 0 0 1-.41-.41v-7.77a.41.41 0 0 1 .41-.41h17.71a.41.41 0 0 0 .41-.41v-7.06a.41.41 0 0 0-.41-.41H174.7a.41.41 0 0 1-.41-.41V213a.41.41 0 0 1 .41-.41h19.78a.41.41 0 0 0 .41-.41v-7.41a.41.41 0 0 0-.41-.41h-29a.4.4 0 0 0-.41.41v40.55a.41.41 0 0 0 .41.41h29.66a.41.41 0 0 0 .41-.41v-7.36a.41.41 0 0 0-.42-.44zm-34.82 7-3.84-5.38-3.93-5.52-.14-.21q-5.38-7.57-7.54-10.58a.4.4 0 0 1 0-.5l3.69-4.09 3-3.37 2.92-3.24 6-6.66a.4.4 0 0 0-.3-.67h-10.31a.41.41 0 0 0-.3.13l-6.4 7-8.4 9.13a.4.4 0 0 1-.7-.28v-15.55a.4.4 0 0 0-.41-.4h-8.42a.4.4 0 0 0-.41.41v40.55a.41.41 0 0 0 .41.41h8.42a.41.41 0 0 0 .41-.41v-11.16a.4.4 0 0 1 .1-.27l1.75-2 2-2.17a.41.41 0 0 1 .63 0l5.84 7.85 4.19 5.65 1.68 2.27a.4.4 0 0 0 .32.17h9.78a.41.41 0 0 0 .33-.65zM120 204.28H33.93a.78.78 0 0 0-.66.37l-.43.74-5.27 9.13-5.82 10.09a.76.76 0 0 0 0 .76l1.25 2.21 10.25 17.76a.77.77 0 0 0 .67.39H120a.85.85 0 0 0 .85-.85v-39.74a.86.86 0 0 0-.85-.86Z" id="path1576" />
</clipPath>
<linearGradient id="linear-gradient" x1="20.71" y1="225.61" x2="430.83" y2="225.61" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#e6e6e6" id="stop1579" />
<stop offset="1" stop-color="#595959" id="stop1581" />
</linearGradient>
<style id="style2007">.cls-1{fill:none}</style>
</defs>
<g id="g2460" transform="translate(.714 .07)">
<path d="M105.69 41.25a.76.76 0 0 1-.66-.38l-11.51-20a.78.78 0 0 0-.67-.38h-47a.76.76 0 0 0-.66.38l-12 20.71 4.625 6.774c-.134.236-1.199 4.644-1.065 4.88L33.19 82.29l12 20.73a.76.76 0 0 0 .66.38h47a.78.78 0 0 0 .67-.38l11.52-20a.76.76 0 0 1 .66-.38H120a.86.86 0 0 0 .86-.86V42.11a.86.86 0 0 0-.86-.86z" id="path1588" style="fill:#4d4d4d;clip-path:url(#clip-path)" clip-path="url(#clip-path)" transform="matrix(1.2527 0 0 1.2527 -23.058 -13.67)" />
<g clip-path="url(#clip-path-3)" id="g1592" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#4d4d4d">
<path id="rect1590" style="display:inline;fill:url(#linear-gradient)" d="M20.71 197.91h99.111v52.823H20.71z" />
</g>
<path d="m21.876 61.343-16.122 5.85-1.591-2.743a.952.952 0 0 1 0-.952l7.29-12.64z" id="path1594" style="fill:#e1e1e1;stroke-width:1.2527" />
<path class="cls-62" id="polygon1794" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#c8c8c8" d="M120.89 225.43v9.83l-8.48-8.62z" />
<path class="cls-61" d="m117.757 66.016 10.623 10.798v12.039a1.065 1.065 0 0 1-1.064 1.065H114.95z" id="path1798" style="fill:#c2c2c2;stroke-width:1.2527" />
<path class="cls-63" id="polygon1802" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#c7c7c7" d="m112.41 226.64-2.24 19.08H98.31l-3.59-8.66z" />
<path class="cls-64" id="polygon1804" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#cecece" d="M120.89 216.31v9.12l-8.48 1.21z" />
<path class="cls-65" d="M128.38 39.083v13.993l-10.622 12.927-8.03-27.997h17.538a1.077 1.077 0 0 1 1.114 1.077z" id="path1808" style="fill:#d3d3d3;stroke-width:1.2527" />
<path class="cls-58" id="polygon1812" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#c6c6c6" d="M98.31 245.72h-6.26l-1.62-2.33 4.29-6.33z" />
<path class="cls-66" id="polygon1814" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#d5d5d5" d="m112.41 226.64-23.47-9.93 12.34-12.43h4.73z" />
<path class="cls-67" d="m88.357 53.577 7.24 25.492 22.16-13.066Z" id="path1816" style="fill:#d0d0d0;stroke-width:1.2527" />
<path class="cls-50" id="polygon1818" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#bfbfbf" d="m90.36 245.72.07-2.33 1.62 2.33z" />
<path class="cls-68" id="polygon1820" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#d9d9d9" d="m101.28 204.28-12.34 12.43-2.23-11.12 4.77-1.31z" />
<path class="cls-69" d="m88.357 53.577-35.69 8.23 37.581 25.192Z" id="path1822" style="fill:#d4d4d4;stroke-width:1.2527" />
<path class="cls-67" d="m88.357 53.577 1.866 33.422 5.362-7.93z" id="path1824" style="fill:#d0d0d0;stroke-width:1.2527" />
<path class="cls-68" d="m85.563 39.647-32.896 22.16 35.69-8.23Z" id="path1826" style="fill:#d9d9d9;stroke-width:1.2527" />
<path class="cls-70" id="polygon1828" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#d8d8d8" d="M60.45 223.28 48.1 245.72h-7.03l-5.2-22.81z" />
<path class="cls-71" d="M36.82 38.006 21.877 61.343 18.118 39.41l.538-.927a.977.977 0 0 1 .827-.464h17.338z" id="path1830" style="fill:#e2e2e2;stroke-width:1.2527" />
<path class="cls-70" d="M28.39 89.918h-8.944a.965.965 0 0 1-.84-.489L5.754 67.194l16.122-5.85Z" id="path1832" style="fill:#d8d8d8;stroke-width:1.2527" />
<path class="cls-72" id="polygon1834" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#e4e4e4" d="m27.56 214.53 5.27-9.13 3.04 17.51z" />
<path class="cls-73" id="polygon1836" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#dedede" d="m86.71 205.59-7.91-1.31H52.67l7.78 19z" />
<path class="cls-73" id="polygon1838" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#dedede" d="m60.45 223.28-7.78-19H47.8l-11.93 18.63z" />
<path class="cls-74" id="polygon1840" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#c5c5c5" d="M84.72 245.72H90.36l.07-2.33z" />
<path class="cls-67" id="polygon1842" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#d0d0d0" d="M73.47 245.72h11.25l5.71-2.33-29.98-20.11 5.4 22.44z" />
<path class="cls-75" id="polygon1844" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#d1d1d1" d="m65.85 245.72-5.4-22.44-12.35 22.44h17.15z" />
<path class="cls-78" id="polygon1856" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#ddd" d="m86.79 204.28-.08 1.31 4.77-1.31H89.3z" />
<path class="cls-79" id="polygon1858" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#e3e3e3" d="m86.71 205.59-.73-1.31H78.8z" />
<path class="cls-71" id="polygon1860" transform="matrix(1.2527 0 0 1.2527 -23.058 -217.896)" style="fill:#e2e2e2" d="m86.71 205.59.08-1.31h-.81z" />
<path class="cls-80" d="M58.58 38.457 44.074 63.573a.84.84 0 0 0-.1.414H33.851L53.757 29.5a.79.79 0 0 1 .3.288l4.51 7.842a.864.864 0 0 1 .013.827z" id="path1862" style="fill:#00b8e3;stroke-width:1.2527" />
<path class="cls-81" d="m58.567 90.394-4.51 7.804a.877.877 0 0 1-.3.288L33.84 63.962h10.122a.777.777 0 0 0 .1.388l14.481 25.054a.852.852 0 0 1 .025.99z" id="path1864" style="fill:#33c6e9;stroke-width:1.2527" />
<path class="cls-82" d="M53.757 29.5 33.852 63.962l-5.011 8.656-4.76-8.268a.777.777 0 0 1-.1-.388.84.84 0 0 1 .1-.414l4.835-8.355 14.67-25.38a.852.852 0 0 1 .738-.438h9.032a.89.89 0 0 1 .401.125z" id="path1866" style="fill:#008aaa;stroke-width:1.2527" />
<path class="cls-80" d="M53.757 98.486a.89.89 0 0 1-.426.113h-9.007a.852.852 0 0 1-.739-.439L30.181 74.948l-1.328-2.305 5.011-8.656Z" id="path1868" style="fill:#00b8e3;stroke-width:1.2527" />
<path class="cls-82" d="M93.793 63.962 73.875 98.46a.927.927 0 0 1-.3-.288l-4.51-7.817a.864.864 0 0 1 0-.802l14.481-25.129a.84.84 0 0 0 .126-.438h10.121Z" id="path1870" style="fill:#008aaa;stroke-width:1.2527" />
<path class="cls-80" d="M103.64 63.962a.84.84 0 0 1-.126.438L84.01 98.223a.852.852 0 0 1-.727.4h-8.982a.927.927 0 0 1-.438-.112l19.93-34.55 5.011-8.643 4.735 8.218a.84.84 0 0 1 .1.426z" id="path1872" style="fill:#00b8e3;stroke-width:1.2527" />
<path class="cls-80" d="M93.793 63.962H83.66a.84.84 0 0 0-.125-.426L69.053 38.482a.852.852 0 0 1 0-.865l4.51-7.817a.927.927 0 0 1 .3-.288z" id="path1874" style="fill:#00b8e3;stroke-width:1.2527" />
<path class="cls-81" d="m98.78 55.33-5.012 8.644L73.85 29.487a.927.927 0 0 1 .439-.112h9.007a.852.852 0 0 1 .726.4z" id="path1876" style="fill:#33c6e9;stroke-width:1.2527" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="256" height="256" viewBox="0 0 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
<g>
<path d="M6.79123171,86.9648684 C25.2351716,32.4823178 76.783459,-1.43234143 131.421839,0.0464773399 L131.421839,0.0464773399 L113.909757,20.739032 C81.4957329,26.5997669 53.5072568,48.7337413 42.5072761,81.2287969 C26.140539,129.576353 53.572705,182.545803 103.779303,199.543648 C153.985902,216.538377 207.952658,191.12264 224.319395,142.7782 C235.283535,110.390667 226.589826,75.9306053 204.563374,51.5978814 L204.563374,51.5978814 L203.21701,24.4290666 C247.371203,56.4768925 267.622761,114.633895 249.208429,169.029181 C226.546194,235.970273 153.909545,271.865521 86.9684532,249.204844 C20.0273609,226.542609 -15.8694453,153.905961 6.79123171,86.9648684 Z M165.185344,11.9237762 C165.839826,11.6401671 166.594039,11.5793938 167.321762,11.8256038 C168.035459,12.0671391 168.585536,12.5580009 168.936152,13.1595015 L168.936152,13.1595015 L169.007833,13.2763734 L169.071723,13.4103864 C169.240019,13.7313945 169.383381,14.0991514 169.450388,14.5510559 C169.582343,15.4417519 169.641535,17.5358595 169.665634,19.6808502 L169.671365,20.2662434 C169.677102,20.9486534 169.679633,21.6256073 169.680171,22.2599793 L169.680173,22.7924325 C169.678741,24.5267431 169.663874,25.8268542 169.663874,25.8268542 L169.663874,25.8268542 L170.167202,44.7600977 L170.910507,66.6151379 L171.837691,104.59538 C171.837691,104.59538 171.83785,104.602367 171.838064,104.616156 L171.838772,104.677745 C171.838883,104.691349 171.838983,104.706608 171.839058,104.723498 L171.839105,104.844231 C171.832023,107.013302 171.387173,122.892918 160.122454,133.928662 C148.009853,145.795053 133.131285,144.708923 123.451177,141.433394 C113.771069,138.154749 101.293828,129.979951 98.8800345,113.195592 C96.8283098,98.9302108 104.41287,86.9390787 106.734401,83.6627102 L106.889339,83.4459953 C107.205256,83.0081712 107.389865,82.7777388 107.389865,82.7777388 L107.389865,82.7777388 L131.197445,53.1717559 L145.064682,36.2627333 L156.965355,21.5275276 C156.965355,21.5275276 158.715313,19.1834331 160.51647,16.874806 L160.876881,16.4142586 C161.477025,15.6498178 162.070275,14.9069442 162.593713,14.2737698 L162.898895,13.907734 C163.342593,13.3805415 163.71955,12.9564826 163.983901,12.6998055 C164.292443,12.4006135 164.608776,12.205827 164.918876,12.0546727 L164.918876,12.0546727 L165.146386,11.9393591 Z" fill="#0058CC" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

17
public/svgs/mautic.svg Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="349.779px" height="349.779px" viewBox="0 0 349.779 349.779" enable-background="new 0 0 349.779 349.779"
xml:space="preserve">
<path fill="#FFFFFF" d="M174.89,349.779C78.612,349.779,0,271.462,0,174.89S78.612,0,174.89,0c23.26,0,45.931,4.417,67.129,13.543
c5.889,2.65,8.833,9.422,6.478,15.605c-2.649,5.888-9.421,8.833-15.604,6.477c-18.549-7.655-37.98-11.482-58.002-11.482
c-83.323,0-151.041,67.718-151.041,151.041S91.567,326.225,174.89,326.225c83.323,0,151.041-67.718,151.041-151.041
c0-17.96-2.944-35.332-9.127-51.819c-2.355-6.183,0.883-12.955,7.066-15.31c6.183-2.355,12.954,0.883,15.31,7.066
c7.066,19.138,10.6,39.453,10.6,60.063C349.779,271.167,271.462,349.779,174.89,349.779"/>
<g>
<polygon fill="#FDB933" points="251.44,156.93 224.354,185.194 239.369,248.496 273.522,248.496 "/>
</g>
<polygon fill="#FDB933" points="240.253,73.312 249.674,82.734 174.89,161.935 110.999,96.277 74.196,248.496 108.35,248.496
128.665,163.996 174.89,214.343 273.817,106.583 283.239,116.299 292.66,63.007 "/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

51
public/svgs/onedev.svg Normal file
View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
viewBox="200 200 630 630"
height="200"
width="200"
version="1.1">
<g
transform="matrix(1.969278,0,0,1.969278,522.1972,523.64867)">
<g
paint-order="stroke">
<g
transform="matrix(1.6226969,0,0,-1.6226969,2.4340454,49.894842)">
<path
stroke-linecap="round"
d="m 0,0 c 9.013,0 16.323,3.81 16.323,8.503 0,4.697 -7.31,4.663 -16.323,4.663 -9.015,0 -16.323,0.034 -16.323,-4.663 C -16.323,3.81 -9.015,0 0,0"
transform="translate(0,-6.5830035)"
paint-order="stroke"
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
</g>
<g
transform="scale(1.6226969,-1.6226969)">
<path
stroke-linecap="round"
d="m 0,0 c -10.7,0 -19.375,-8.674 -19.375,-19.375 0,-6.235 2.958,-11.768 7.533,-15.312 -9.205,-22.861 -31.582,-39.042 -57.699,-39.042 -13.013,0 -25.101,4.021 -35.1,10.876 2.549,4.364 4.016,9.436 4.016,14.853 0,16.292 -13.208,29.5 -29.5,29.5 -0.415,0 -0.827,-0.015 -1.238,-0.031 -0.261,2.309 -0.408,4.653 -0.408,7.031 0,10.383 2.57,20.171 7.084,28.784 10.565,22.164 33.744,37.56 60.658,37.56 24.747,0 46.31,-13.023 57.838,-32.347 -1.504,-1.553 -2.434,-3.665 -2.434,-5.997 0,-4.764 3.861,-8.625 8.625,-8.625 4.764,0 8.625,3.861 8.625,8.625 0,4.088 -2.848,7.504 -6.665,8.393 -1.01,1.971 -2.089,3.902 -3.251,5.776 3.102,3.499 5.018,8.066 5.018,13.106 0,10.953 -8.882,19.832 -19.834,19.832 -5.277,0 -10.033,-2.094 -13.581,-5.459 -11.75,6.755 -25.354,10.625 -39.853,10.625 -14.169,0 -27.485,-3.705 -39.051,-10.175 -3.497,3.109 -8.082,5.009 -13.128,5.009 -10.956,0 -19.834,-8.879 -19.834,-19.832 0,-4.643 1.598,-8.91 4.273,-12.285 -7.92,-12.438 -12.533,-27.18 -12.533,-42.99 0,-4.618 0.413,-9.14 1.166,-13.547 -6.693,-5.408 -10.977,-13.679 -10.977,-22.953 0,-16.292 13.208,-29.5 29.5,-29.5 4.15,0 8.097,0.86 11.68,2.407 13.551,-10.446 30.509,-16.68 48.904,-16.68 35.091,0 64.955,22.649 75.833,54.088 7.607,2.615 13.083,9.816 13.083,18.31 C 19.375,-8.674 10.7,0 0,0"
transform="translate(70.125,11.5)"
paint-order="stroke"
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
</g>
<g
transform="matrix(1.6226969,0,0,-1.6226969,-41.533257,-8.9250313)">
<path
stroke-linecap="round"
d="m 0,0 c 3.561,1.848 7.952,0.457 9.8,-3.105 0.127,-0.246 0.205,-0.503 0.304,-0.759 1.367,9.134 -1.382,17.072 -7.088,18.88 -6.791,2.152 -15.166,-5.181 -18.713,-16.372 -3.546,-11.195 -0.915,-22.012 5.873,-24.161 6.137,-1.944 13.562,3.878 17.552,13.287 -0.323,-0.247 -0.661,-0.482 -1.032,-0.674 -3.564,-1.85 -7.951,-0.463 -9.801,3.102 C -4.953,-6.239 -3.564,-1.85 0,0"
transform="translate(3.4126028,5.2498778)"
paint-order="stroke"
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
</g>
<g
transform="matrix(1.6226969,0,0,-1.6226969,46.400783,-8.9251198)">
<path
stroke-linecap="round"
d="M 0,0 C 6.789,2.148 9.42,12.966 5.873,24.16 2.326,35.352 -6.049,42.685 -12.84,40.532 c -5.705,-1.807 -8.455,-9.746 -7.088,-18.88 0.1,0.256 0.178,0.514 0.305,0.759 1.848,3.563 6.238,4.953 9.799,3.106 3.564,-1.85 4.953,-6.24 3.105,-9.802 -1.849,-3.566 -6.236,-4.952 -9.801,-3.103 -0.371,0.193 -0.709,0.428 -1.031,0.674 C -13.563,3.878 -6.137,-1.944 0,0"
transform="translate(6.411045,-20.266777)"
paint-order="stroke"
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

12
public/svgs/paperless.svg Normal file
View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="M299,891.7c-4.2-19.8-12.5-59.6-13.6-59.6c-176.7-105.7-155.8-288.7-97.3-393.4
c12.5,131.8,245.8,222.8,109.8,383.9c-1.1,2,6.2,27.2,12.5,50.2c27.2-46,68-101.4,65.8-106.7C208.9,358.2,731.9,326.9,840.6,73.7
c49.1,244.8-25.1,623.5-445.5,719.7c-2,1.1-76.3,131.8-79.5,132.9c0-2-31.4-1.1-27.2-11.5C290.7,908.4,294.8,900.1,299,891.7
L299,891.7z M293.8,793.4c53.3-61.8-9.4-167.4-47.1-201.9C310.5,701.3,306.3,765.1,293.8,793.4L293.8,793.4z"/>
</svg>

After

Width:  |  Height:  |  Size: 869 B

View File

@@ -0,0 +1,23 @@
# documentation: https://www.audiobookshelf.org/
# slogan: Self-hosted audiobook, ebook, and podcast server
# tags: audiobooks, ebooks, podcasts, server, self-hosted
# logo: svgs/audiobookshelf.svg
# port: 80
services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:latest
environment:
- SERVICE_FQDN_AUDIOBOOKSHELF_80
- TZ=${TIMEZONE:-America/Toronto}
volumes:
- audiobookshelf-audiobooks:/audiobooks
- audiobookshelf-podcasts:/podcasts
- audiobookshelf-config:/config
- audiobookshelf-metadata:/metadata
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:80/ping || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s

View File

@@ -0,0 +1,98 @@
# ignore: true
# documentation: https://docs.azimutt.app/
# slogan: Next-Gen ERD: Design, Explore, Document and Analyze your database.
# tags: erd, entity-relationship diagram, database tool, database schema, diagram
# logo: svgs/azimutt.svg
# port: 4000
services:
postgres:
image: postgres:15
environment:
- POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRE
- POSTGRES_USER=$SERVICE_USER_POSTGRE
- POSTGRES_DB=azimutt
volumes:
- azimutt-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $SERVICE_USER_POSTGRESQL"]
interval: 10s
timeout: 5s
retries: 5
minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
environment:
- SERVICE_FQDN_MINIO_9001
- MINIO_SERVER_URL=$SERVICE_FQDN_MINIO_9001
- MINIO_BROWSER_REDIRECT_URL=$SERVICE_FQDN_MINIO_9001
- MINIO_ROOT_USER=$SERVICE_USER_MINIO
- MINIO_ROOT_PASSWORD=$SERVICE_PASSWORD_MINIO
volumes:
- azimutt-minio-data:/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
createbuckets:
image: minio/mc:latest
depends_on:
minio:
condition: service_healthy
entrypoint: >
/bin/sh -c "
/usr/bin/mc config host add myminio http://minio:9000 $SERVICE_USER_MINIO $SERVICE_PASSWORD_MINIO;
/usr/bin/mc mb -p myminio/azimutt;
/usr/bin/mc policy download myminio/azimutt;
exit 0;
"
smtp:
image: bytemark/smtp:latest
platform: linux/amd64
environment:
- SERVICE_FQDN_SMTP
- RELAY_HOST=$SERVICE_FQDN_SMTP
- RELAY_PORT=${RELAY_PORT:-587}
- RELAY_USERNAME=$SERVICE_EMAIL_SMTP
- RELAY_PASSWORD=$SERVICE_PASSWORD_SMTP
backend:
container_name: azimutt-backend
platform: linux/amd64
image: ghcr.io/azimuttapp/azimutt:main
depends_on:
postgres:
condition: service_healthy
minio:
condition: service_healthy
environment:
- SERVICE_FQDN_AZIMUTT_4000
- PHX_SERVER=true
- PHX_HOST=$SERVICE_FQDN_AZIMUTT_4000
- PORT=${PORT:-4000}
- DATABASE_URL=ecto://$SERVICE_USER_POSTGRESQL:$SERVICE_PASSWORD_POSTGRESQL@postgres/azimutt
- SECRET_KEY_BASE=$SERVICE_BASE64_64_AZIMUTT
- FILE_STORAGE_ADAPTER=${FILE_STORAGE_ADAPTER:-s3}
- AUTH_PASSWORD=${AUTH_PASSWORD:-true}
- SKIP_ONBOARDING_FUNNEL=${SKIP_ONBOARDING_FUNNEL:-true}
- SKIP_EMAIL_CONFIRMATION=${SKIP_EMAIL_CONFIRMATION:-true}
- PUBLIC_SITE=${PUBLIC_SITE:-false}
- S3_BUCKET=${S3_BUCKET}
- S3_HOST=${S3_HOST}
- S3_KEY_ID=${S3_KEY_ID}
- S3_KEY_SECRET=${S3_KEY_SECRET}
- EMAIL_ADAPTER=${EMAIL_ADAPTER:-smtp}
- SMTP_RELAY=$SERVICE_FQDN_SMTP
- SMTP_USERNAME=$SERVICE_EMAIL_SMTP
- SMTP_PASSWORD=$SERVICE_PASSWORD_SMTP
- SMTP_PORT=${SMTP_PORT:-587}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:${PORT:-4000}/ping"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s

View File

@@ -0,0 +1,59 @@
# documentation: https://www.bookstackapp.com/docs/
# slogan: BookStack is a simple, self-hosted, easy-to-use platform for organising and storing information
# tags: free-and-open-source,mfa,dark-light-themes,searchable,connected,simple-interface,diagramms,notes
# logo: svgs/bookstack.png
# port: 80
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
environment:
- SERVICE_FQDN_BOOKSTACK_80
- APP_URL=${SERVICE_FQDN_BOOKSTACK}
- PUID=1000
- PGID=1000
- TZ=${TZ:-Europe/Berlin}
- DB_HOST=mariadb
- DB_PORT=3306
- DB_USER=${SERVICE_USER_MYSQL}
- DB_PASS=${SERVICE_PASSWORD_MYSQL}
- DB_DATABASE=${MYSQL_DATABASE:-bookstackapp}
- QUEUE_CONNECTION=${QUEUE_CONNECTION}
# You will need to set up an authentication provider as described at https://www.bookstackapp.com/docs/admin/third-party-auth/.
- GITHUB_APP_ID=${GITHUB_APP_ID}
- GITHUB_APP_SECRET=${GITHUB_APP_SECRET}
volumes:
- 'bookstack-data:/config'
healthcheck:
test:
- CMD-SHELL
- 'wget -qO- http://127.0.0.1:80/'
interval: 5s
timeout: 20s
retries: 10
depends_on:
mariadb:
condition: service_healthy
mariadb:
image: lscr.io/linuxserver/mariadb:latest
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ:-Europe/Berlin}
- MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}
- MYSQL_DATABASE=${MYSQL_DATABASE:-bookstack}
- MYSQL_USER=${SERVICE_USER_MYSQL}
- MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
volumes:
- 'bookstack-mariadb-data:/config'
healthcheck:
test:
- CMD
- mysqladmin
- ping
- '-h'
- 127.0.0.1
interval: 5s
timeout: 20s
retries: 10

View File

@@ -0,0 +1,50 @@
# documentation: https://forgejo.org/docs
# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.
# tags: version control, collaboration, code, hosting, lightweight, mariadb
# logo: svgs/forgejo.svg
# port: 3000
services:
forgejo:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_FQDN_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO_3000}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
- USER_GID=1000
- FORGEJO__database__DB_TYPE=mysql
- FORGEJO__database__HOST=mariadb
- FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo}
- FORGEJO__database__USER=$SERVICE_USER_MYSQL
- FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL
volumes:
- forgejo-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
ports:
- 22222:22
depends_on:
mariadb:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 2s
timeout: 10s
retries: 15
mariadb:
image: mariadb:11
volumes:
- forgejo-mariadb-data:/var/lib/mysql
environment:
- MYSQL_USER=${SERVICE_USER_MYSQL}
- MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 5s
timeout: 20s
retries: 10

View File

@@ -0,0 +1,50 @@
# documentation: https://forgejo.org/docs
# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.
# tags: version control, collaboration, code, hosting, lightweight, mysql
# logo: svgs/forgejo.svg
# port: 3000
services:
forgejo:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_FQDN_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO_3000}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
- USER_GID=1000
- FORGEJO__database__DB_TYPE=mysql
- FORGEJO__database__HOST=mysql
- FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo}
- FORGEJO__database__USER=$SERVICE_USER_MYSQL
- FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL
volumes:
- forgejo-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
ports:
- 22222:22
depends_on:
mysql:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 2s
timeout: 10s
retries: 15
mysql:
image: mysql:8
volumes:
- forgejo-mysql-data:/var/lib/mysql
environment:
- MYSQL_USER=${SERVICE_USER_MYSQL}
- MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
interval: 5s
timeout: 20s
retries: 10

View File

@@ -0,0 +1,49 @@
# documentation: https://forgejo.org/docs
# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.
# tags: version control, collaboration, code, hosting, lightweight, postgresql
# logo: svgs/forgejo.svg
# port: 3000
services:
forgejo:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_FQDN_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO_3000}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
- USER_GID=1000
- FORGEJO__database__DB_TYPE=postgres
- FORGEJO__database__HOST=postgresql
- FORGEJO__database__NAME=${POSTGRESQL_DATABASE-forgejo}
- FORGEJO__database__USER=$SERVICE_USER_POSTGRESQL
- FORGEJO__database__PASSWD=$SERVICE_PASSWORD_POSTGRESQL
volumes:
- forgejo-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
ports:
- 22222:22
depends_on:
postgresql:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 2s
timeout: 10s
retries: 15
postgresql:
image: postgres:16-alpine
volumes:
- forgejo-postgresql-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
- POSTGRES_DB=${POSTGRESQL_DATABASE}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 20s
retries: 10

View File

@@ -0,0 +1,136 @@
# documentation: https://forgejo.org/docs
# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.
# tags: version control, collaboration, code, hosting, lightweight, runner, mariadb, actions, cicd, ci
# logo: svgs/forgejo.svg
# port: 3000
services:
forgejo:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_FQDN_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO_3000}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
- USER_GID=1000
- FORGEJO__database__DB_TYPE=mysql
- FORGEJO__database__HOST=mariadb
- FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo}
- FORGEJO__database__USER=$SERVICE_USER_MYSQL
- FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL
- RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000}
- FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true
- FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false
- FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions
volumes:
- forgejo-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
ports:
- 22222:22
depends_on:
mariadb:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 2s
timeout: 10s
retries: 15
command: >-
bash -c '
/bin/s6-svscan /etc/s6 &
sleep 10 ;
su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ;
sleep infinity
'
mariadb:
image: mariadb:11
volumes:
- forgejo-mariadb-data:/var/lib/mysql
environment:
- MYSQL_USER=${SERVICE_USER_MYSQL}
- MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 5s
timeout: 20s
retries: 10
docker-in-docker:
image: docker:dind
hostname: docker
privileged: true
healthcheck:
test: ["CMD", "pgrep", "dockerd"]
interval: 10s
timeout: 30s
retries: 10
environment:
DOCKER_TLS_CERTDIR: /certs
DOCKER_HOST: docker-in-docker
volumes:
- forgejo-did-certs:/certs
runner-register:
image: code.forgejo.org/forgejo/runner:3.5.0
restart: 'no'
links:
- docker-in-docker
- forgejo
environment:
- DOCKER_HOST=tcp://docker-in-docker:2376
- RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET}
volumes:
- forgejo-runner-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
healthcheck:
disable: true
user: 0:0
command: >-
bash -ec '
while : ; do
forgejo-runner create-runner-file --connect --instance http://forgejo:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ;
sleep 1 ;
done ;
sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ;
forgejo-runner generate-config > config.yml ;
sed -i -e "s|network: .*|network: host|" config.yml ;
sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ;
sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ;
sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ;
chown -R 1000:1000 /data ;
exit 0
'
runner:
image: code.forgejo.org/forgejo/runner:3.5.0
links:
- docker-in-docker
- forgejo
depends_on:
docker-in-docker:
condition: service_started
environment:
- DOCKER_HOST=tcp://docker:2376
- DOCKER_CERT_PATH=/certs/client
- DOCKER_TLS_VERIFY=1
user: 1000:1000
volumes:
- forgejo-runner-data:/data
- forgejo-did-certs:/certs
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
healthcheck:
test: ["CMD", "pgrep", "forgejo-runner"]
interval: 10s
timeout: 30s
retries: 10
command: >-
bash -c '
while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done
'

View File

@@ -0,0 +1,136 @@
# documentation: https://forgejo.org/docs
# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.
# tags: version control, collaboration, code, hosting, lightweight, runner, mysql, actions, cicd, ci
# logo: svgs/forgejo.svg
# port: 3000
services:
forgejo:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_FQDN_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO_3000}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
- USER_GID=1000
- FORGEJO__database__DB_TYPE=mysql
- FORGEJO__database__HOST=mysql
- FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo}
- FORGEJO__database__USER=$SERVICE_USER_MYSQL
- FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL
- RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000}
- FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true
- FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false
- FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions
volumes:
- forgejo-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
ports:
- 22222:22
depends_on:
mysql:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 2s
timeout: 10s
retries: 15
command: >-
bash -c '
/bin/s6-svscan /etc/s6 &
sleep 10 ;
su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ;
sleep infinity
'
mysql:
image: mysql:8
volumes:
- forgejo-mysql-data:/var/lib/mysql
environment:
- MYSQL_USER=${SERVICE_USER_MYSQL}
- MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
interval: 5s
timeout: 20s
retries: 10
docker-in-docker:
image: docker:dind
hostname: docker
privileged: true
healthcheck:
test: ["CMD", "pgrep", "dockerd"]
interval: 10s
timeout: 30s
retries: 10
environment:
DOCKER_TLS_CERTDIR: /certs
DOCKER_HOST: docker-in-docker
volumes:
- forgejo-did-certs:/certs
runner-register:
image: code.forgejo.org/forgejo/runner:3.5.0
restart: 'no'
links:
- docker-in-docker
- forgejo
environment:
- DOCKER_HOST=tcp://docker-in-docker:2376
- RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET}
volumes:
- forgejo-runner-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
healthcheck:
disable: true
user: 0:0
command: >-
bash -ec '
while : ; do
forgejo-runner create-runner-file --connect --instance http://forgejo:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ;
sleep 1 ;
done ;
sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ;
forgejo-runner generate-config > config.yml ;
sed -i -e "s|network: .*|network: host|" config.yml ;
sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ;
sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ;
sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ;
chown -R 1000:1000 /data ;
exit 0
'
runner:
image: code.forgejo.org/forgejo/runner:3.5.0
links:
- docker-in-docker
- forgejo
depends_on:
docker-in-docker:
condition: service_started
environment:
- DOCKER_HOST=tcp://docker:2376
- DOCKER_CERT_PATH=/certs/client
- DOCKER_TLS_VERIFY=1
user: 1000:1000
volumes:
- forgejo-runner-data:/data
- forgejo-did-certs:/certs
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
healthcheck:
test: ["CMD", "pgrep", "forgejo-runner"]
interval: 10s
timeout: 30s
retries: 10
command: >-
bash -c '
while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done
'

View File

@@ -0,0 +1,135 @@
# documentation: https://forgejo.org/docs
# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.
# tags: version control, collaboration, code, hosting, lightweight, runner, postresql, actions, cicd, ci
# logo: svgs/forgejo.svg
# port: 3000
services:
forgejo:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_FQDN_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO_3000}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
- USER_GID=1000
- FORGEJO__database__DB_TYPE=postgres
- FORGEJO__database__HOST=postgresql
- FORGEJO__database__NAME=${POSTGRESQL_DATABASE-forgejo}
- FORGEJO__database__USER=$SERVICE_USER_POSTGRESQL
- FORGEJO__database__PASSWD=$SERVICE_PASSWORD_POSTGRESQL
- RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000}
- FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true
- FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false
- FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions
volumes:
- forgejo-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
ports:
- 22222:22
depends_on:
postgresql:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 2s
timeout: 10s
retries: 15
command: >-
bash -c '
/bin/s6-svscan /etc/s6 &
sleep 10 ;
su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ;
sleep infinity
'
postgresql:
image: postgres:16-alpine
volumes:
- forgejo-postgresql-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
- POSTGRES_DB=${POSTGRESQL_DATABASE}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 20s
retries: 10
docker-in-docker:
image: docker:dind
hostname: docker
privileged: true
healthcheck:
test: ["CMD", "pgrep", "dockerd"]
interval: 10s
timeout: 30s
retries: 10
environment:
DOCKER_TLS_CERTDIR: /certs
DOCKER_HOST: docker-in-docker
volumes:
- forgejo-did-certs:/certs
runner-register:
image: code.forgejo.org/forgejo/runner:3.5.0
restart: 'no'
links:
- docker-in-docker
- forgejo
environment:
- DOCKER_HOST=tcp://docker-in-docker:2376
- RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET}
volumes:
- forgejo-runner-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
healthcheck:
disable: true
user: 0:0
command: >-
bash -ec '
while : ; do
forgejo-runner create-runner-file --connect --instance http://forgejo:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ;
sleep 1 ;
done ;
sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ;
forgejo-runner generate-config > config.yml ;
sed -i -e "s|network: .*|network: host|" config.yml ;
sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ;
sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ;
sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ;
chown -R 1000:1000 /data ;
exit 0
'
runner:
image: code.forgejo.org/forgejo/runner:3.5.0
links:
- docker-in-docker
- forgejo
depends_on:
docker-in-docker:
condition: service_started
environment:
- DOCKER_HOST=tcp://docker:2376
- DOCKER_CERT_PATH=/certs/client
- DOCKER_TLS_VERIFY=1
user: 1000:1000
volumes:
- forgejo-runner-data:/data
- forgejo-did-certs:/certs
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
healthcheck:
test: ["CMD", "pgrep", "forgejo-runner"]
interval: 10s
timeout: 30s
retries: 10
command: >-
bash -c '
while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done
'

View File

@@ -0,0 +1,113 @@
# documentation: https://forgejo.org/docs
# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.
# tags: version control, collaboration, code, hosting, lightweight, runner, actions, cicd, ci
# logo: svgs/forgejo.svg
# port: 3000
services:
forgejo:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_FQDN_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO_3000}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS:-false}
- USER_UID=1000
- USER_GID=1000
- RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000}
- FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true
- FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false
- FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions
volumes:
- forgejo-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
ports:
- 22222:22
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 2s
timeout: 10s
retries: 15
command: >-
bash -c '
/bin/s6-svscan /etc/s6 &
sleep 10 ;
su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ;
sleep infinity
'
docker-in-docker:
image: docker:dind
hostname: docker
privileged: true
healthcheck:
test: ["CMD", "pgrep", "dockerd"]
interval: 10s
timeout: 30s
retries: 10
environment:
DOCKER_TLS_CERTDIR=/certs
DOCKER_HOST=docker-in-docker
volumes:
- forgejo-did-certs:/certs
runner-register:
image: code.forgejo.org/forgejo/runner:3.5.0
restart: 'no'
links:
- docker-in-docker
- forgejo
environment:
- DOCKER_HOST=tcp://docker-in-docker:2376
- RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET}
volumes:
- forgejo-runner-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
healthcheck:
disable: true
user: 0:0
command: >-
bash -ec '
while : ; do
forgejo-runner create-runner-file --connect --instance ${SERVICE_FQDN_FORGEJO}:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ;
sleep 1 ;
done ;
sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ;
forgejo-runner generate-config > config.yml ;
sed -i -e "s|network: .*|network: host|" config.yml ;
sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ;
sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ;
sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ;
chown -R 1000:1000 /data ;
exit 0
'
runner:
image: code.forgejo.org/forgejo/runner:3.5.0
links:
- docker-in-docker
- forgejo
depends_on:
docker-in-docker:
condition: service_started
environment:
- DOCKER_HOST=tcp://docker:2376
- DOCKER_CERT_PATH=/certs/client
- DOCKER_TLS_VERIFY=1
user: 1000:1000
volumes:
- forgejo-runner-data:/data
- forgejo-did-certs:/certs
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
healthcheck:
test: ["CMD", "pgrep", "forgejo-runner"]
interval: 10s
timeout: 30s
retries: 10
command: >-
bash -c '
while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done
'

View File

@@ -0,0 +1,27 @@
# documentation: https://forgejo.org/docs
# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.
# tags: version control, collaboration, code, hosting, lightweight
# logo: svgs/forgejo.svg
# port: 3000
services:
forgejo:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_FQDN_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO_3000}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
- USER_GID=1000
ports:
- 22222:22
volumes:
- forgejo-data:/data
- forgejo-timezone:/etc/timezone:ro
- forgejo-localtime:/etc/localtime:ro
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 2s
timeout: 10s
retries: 15

View File

@@ -58,6 +58,7 @@ services:
- GITHUB_APP_ID=${GITHUB_APP_ID}
- GITHUB_APP_PRIVATE_KEY=${GITHUB_APP_PRIVATE_KEY}
- PGSSLMODE=${PGSSLMODE:-disable}
- FORCE_HTTPS=${FORCE_HTTPS:-true}
healthcheck:
disable: true

View File

@@ -0,0 +1,46 @@
# documentation: https://github.com/laurent22/joplin/blob/dev/packages/server/README.md
# slogan: Self-hosted sync server for Joplin
# tags: joplin
# logo: svgs/joplin.png
# port: 22300
services:
postgres:
image: 'postgres:16'
volumes:
- joplin-postgresql-data:/var/lib/postgresql/data'
environment:
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_64_POSTGRES}
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
- POSTGRES_DB=joplin
healthcheck:
test:
- CMD
- pg_isready
- -d
- joplin
interval: 10s
timeout: 5s
retries: 5
joplin:
image: 'joplin/server:latest'
platform: 'linux/amd64'
depends_on:
postgres:
condition: service_healthy
environment:
- SERVICE_FQDN_JOPLIN_22300
- APP_BASE_URL=${SERVICE_FQDN_JOPLIN}
- DB_CLIENT=pg
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_64_POSTGRES}
- POSTGRES_DATABASE=joplin
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
- POSTGRES_PORT=5432
- POSTGRES_HOST=postgres
# Default login is "admin@localhost" and password "admin"
healthcheck:
test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/22300' || exit 1"]
interval: 5s
timeout: 20s
retries: 3

View File

@@ -0,0 +1,54 @@
# documentation: https://www.keycloak.org
# slogan: Keycloak is an open-source Identity and Access Management tool.
# tags: keycloak,identity,access,management,iam,authentication,authorization,security,oauth2,openid-connect,sso,single-sign-on,saml,rbac,ldap,jwt,social-login
# logo: svgs/keycloak.svg
# port: 8080
services:
keycloak:
image: quay.io/keycloak/keycloak:25.0.2
command:
- start
environment:
- SERVICE_FQDN_KEYCLOAK_8080
- TZ=${TIMEZONE:-UTC}
- KEYCLOAK_ADMIN=${SERVICE_USER_ADMIN}
- KEYCLOAK_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN}
- KC_DB=postgres
- KC_DB_USERNAME=${SERVICE_USER_DATABASE}
- KC_DB_PASSWORD=${SERVICE_PASSWORD_64_DATABASE}
- KC_DB_URL_PORT=5432
- KC_DB_URL=jdbc:postgresql://postgres/${POSTGRESQL_DATABASE:-keycloak}
- KC_HOSTNAME=${SERVICE_FQDN_KEYCLOAK}
- KC_HTTP_ENABLED=${KC_HTTP_ENABLED:-true}
- KC_HEALTH_ENABLED=${KC_HEALTH_ENABLED:-true}
- KC_PROXY_HEADERS=${KC_PROXY_HEADERS:-xforwarded}
volumes:
- keycloak-data:/opt/keycloak/data
depends_on:
postgres:
condition: service_healthy
healthcheck:
test:
[
"CMD-SHELL",
"exec 3<>/dev/tcp/127.0.0.1/9000;echo -e 'GET /health/ready HTTP/1.1\r\nhost: http://localhost\r\nConnection: close\r\n\r\n' >&3;if [ $? -eq 0 ]; then echo 'Healthcheck Successful';exit 0;else echo 'Healthcheck Failed';exit 1;fi;",
]
interval: 5s
timeout: 20s
retries: 10
postgres:
image: postgres:16-alpine
volumes:
- keycloak-postgresql-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${SERVICE_USER_DATABASE}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_64_DATABASE}
- POSTGRES_DB=${POSTGRESQL_DATABASE:-keycloak}
healthcheck:
test:
- CMD-SHELL
- pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}
interval: 5s
timeout: 20s
retries: 10

View File

@@ -0,0 +1,31 @@
# documentation: https://www.keycloak.org
# slogan: Keycloak is an open-source Identity and Access Management tool.
# tags: keycloak,identity,access,management,iam,authentication,authorization,security,oauth2,openid-connect,sso,single-sign-on,saml,rbac,ldap,jwt,social-login
# logo: svgs/keycloak.svg
# port: 8080
services:
keycloak:
image: quay.io/keycloak/keycloak:25.0.2
command:
- start
environment:
- SERVICE_FQDN_KEYCLOAK_8080
- TZ=${TIMEZONE:-UTC}
- KEYCLOAK_ADMIN=${SERVICE_USER_ADMIN}
- KEYCLOAK_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN}
- KC_HOSTNAME=${SERVICE_FQDN_KEYCLOAK}
- KC_HTTP_ENABLED=${KC_HTTP_ENABLED:-true}
- KC_HEALTH_ENABLED=${KC_HEALTH_ENABLED:-true}
- KC_PROXY_HEADERS=${KC_PROXY_HEADERS:-xforwarded}
volumes:
- keycloak-data:/opt/keycloak/data
healthcheck:
test:
[
"CMD-SHELL",
"exec 3<>/dev/tcp/127.0.0.1/9000;echo -e 'GET /health/ready HTTP/1.1\r\nhost: http://localhost\r\nConnection: close\r\n\r\n' >&3;if [ $? -eq 0 ]; then echo 'Healthcheck Successful';exit 0;else echo 'Healthcheck Failed';exit 1;fi;",
]
interval: 5s
timeout: 20s
retries: 10

View File

@@ -1,22 +1,31 @@
# ignore: true
# documentation: https://docs.mattermost.com
# slogan: Mattermost is an open source, self-hosted Slack-alternative.
# tags: mattermost,slack,alternative
# logo: svgs/mattermost.svg
# port: 8065
services:
mattermost:
image: mattermost/mattermost-team-edition:9
image: mattermost/mattermost-team-edition:release-10
platform: linux/amd64
volumes:
- mattermost-data:/mattermost
environment:
- SERVICE_FQDN_MATTERMOST
- SERVICE_FQDN_MATTERMOST_8065
- MM_SERVICESETTINGS_SITEURL=${SERVICE_FQDN_MATTERMOST}
- TZ=${TZ:-UTC}
- MM_SQLSETTINGS_DRIVERNAME=postgres
- MM_SQLSETTINGS_DATASOURCE=postgres://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgres:5432/$POSTGRES_DB?sslmode=disable&connect_timeout=10
- MM_BLEVESETTINGS_INDEXDIR=/mattermost/bleve-indexes
- MM_SERVICESETTINGS_SITEURL=$SERVICE_FQDN_MATTERMOST
depends_on:
- postgres
postgres:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:8065"]
interval: 5s
timeout: 20s
retries: 10
postgres:
image: postgres:16-alpine
volumes:

View File

@@ -0,0 +1,52 @@
# documentation: https://www.mautic.org/
# slogan: Mautic v4 Open Source Marketing Automation
# tags: php,mautic,marketing,automation,email,service,4,open,source,crm
# logo: svgs/mautic.svg
# port: 80
services:
rabbitmq:
image: 'rabbitmq:3'
environment:
- 'RABBITMQ_DEFAULT_VHOST=${RABBITMQ_DEFAULT_VHOST:-mautic}'
volumes:
- 'rabbitmq-data:/var/lib/rabbitmq'
database:
image: powertic/percona-docker
environment:
MYSQL_ROOT_PASSWORD: ${SERVICE_PASSWORD_64_MYSQL}
volumes:
- mautic-database-data:/var/lib/mysql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --sql-mode=""
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 2s
timeout: 10s
retries: 15
mautic:
image: mautic/mautic:v4-fpm
volumes:
- mautic-data:/var/www/html
environment:
- SERVICE_FQDN_MAUTIC_80
- MAUTIC_DB_HOST=database
- MAUTIC_DB_USER=${SERVICE_USER_MYSQL}
- MAUTIC_DB_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}
- MAUTIC_DB_NAME=mautic4
- MAUTIC_RUN_MIGRATIONS=${MAUTIC_RUN_MIGRATIONS:-true}
- MAUTIC_RUN_CRON_JOBS=${MAUTIC_RUN_CRON_JOBS:-false}
- MAUTIC_RABIITMQ_HOST=rabbitmq
- MAUTIC_RABIITMQ_PORT=5672
- MAUTIC_RABIITMQ_USER=${SERVICE_USER_RABBITMQ}
- MAUTIC_RABIITMQ_PASSWORD=${SERVICE_PASSWORD_RABBITMQ}
- MAUTIC_RABIITMQ_VHOST=${RABBITMQ_DEFAULT_VHOST:-mautic}
- MAUTIC_ADMIN_EMAIL=${MAUTIC_ADMIN_EMAIL:-admin@example.com}
- MAUTIC_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN}
- MAUTIC_ADMIN_FIRSTNAME=${MAUTIC_ADMIN_FIRSTNAME:-Admin}
- MAUTIC_ADMIN_LASTNAME=${MAUTIC_ADMIN_LASTNAME:-User}
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:8880"]
interval: 2s
timeout: 10s
retries: 15

View File

@@ -0,0 +1,128 @@
# documentation: https://www.mautic.org/
# slogan: Mautic v5 Open Source Marketing Automation
# tags: php,mautic,marketing,automation,email,service,5,open,source,crm
# logo: svgs/mautic.svg
# port: 80
services:
mysql:
image: 'mysql:8.0'
environment:
- 'MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_64_MYSQLROOT}'
- 'MYSQL_DATABASE=${MYSQL_DATABASE:-mautic}'
- 'MYSQL_USER=${SERVICE_USER_MYSQL}'
- 'MYSQL_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}'
volumes:
- 'mysql-data:/var/lib/mysql'
healthcheck:
test: 'mysqladmin ping --silent --user=$$SERVICE_USER_MYSQL --password=$$SERVICE_PASSWORD_64_MYSQL'
start_period: 30s
interval: 10s
timeout: 5s
retries: 5
rabbitmq:
image: 'rabbitmq:3'
environment:
- 'RABBITMQ_DEFAULT_VHOST=${RABBITMQ_DEFAULT_VHOST:-mautic}'
healthcheck:
test: rabbitmq-diagnostics -q ping
interval: 5s
timeout: 30s
retries: 10
volumes:
- 'rabbitmq-data:/var/lib/rabbitmq'
mautic_web:
image: 'mautic/mautic:latest'
volumes:
- 'mautic_data/config:/var/www/html/config:z'
- 'mautic_data/logs:/var/www/html/var/logs:z'
- 'mautic_data/media/files:/var/www/html/docroot/media/files:z'
- 'mautic_data/media/images:/var/www/html/docroot/media/images:z'
- 'mautic_data/plugins:/var/www/html/docroot/plugins:z'
- 'mautic_data/vendor:/var/www/html/vendor:z'
- 'mautic_data/bin:/var/www/html/bin:z'
- 'mautic_data/cron:/opt/mautic/cron:z'
environment:
- SERVICE_FQDN_MAUTIC_80
- 'DOCKER_MAUTIC_LOAD_TEST_DATA=${MAUTIC_LOAD_TEST_DATA:-false}'
- 'DOCKER_MAUTIC_RUN_MIGRATIONS=${MAUTIC_RUN_MIGRATIONS:-false}'
- 'MAUTIC_DB_HOST=${MYSQL_HOST:-mysql}'
- 'MAUTIC_DB_PORT=${MYSQL_PORT:-3306}'
- 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE:-mautic}'
- 'MAUTIC_DB_USER=${SERVICE_USER_MYSQL}'
- 'MAUTIC_DB_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}'
- 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL:-amqp://guest:guest@rabbitmq:5672/mautic/messages}'
- 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT:-amqp://guest:guest@rabbitmq:5672/mautic/messages}'
healthcheck:
test:
- CMD
- curl
- '-f'
- 'http://localhost'
interval: 15s
timeout: 10s
retries: 15
mautic_cron:
image: 'mautic/mautic:latest'
volumes:
- 'mautic_data/config:/var/www/html/config:z'
- 'mautic_data/logs:/var/www/html/var/logs:z'
- 'mautic_data/media/files:/var/www/html/docroot/media/files:z'
- 'mautic_data/media/images:/var/www/html/docroot/media/images:z'
- 'mautic_data/plugins:/var/www/html/docroot/plugins:z'
- 'mautic_data/vendor:/var/www/html/vendor:z'
- 'mautic_data/bin:/var/www/html/bin:z'
- 'mautic_data/cron:/opt/mautic/cron:z'
environment:
- DOCKER_MAUTIC_ROLE=mautic_cron
- 'MAUTIC_DB_HOST=${MYSQL_HOST:-mysql}'
- 'MAUTIC_DB_PORT=${MYSQL_PORT:-3306}'
- 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE:-mautic}'
- 'MAUTIC_DB_USER=${SERVICE_USER_MYSQL}'
- 'MAUTIC_DB_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}'
- 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL:-amqp://guest:guest@rabbitmq:5672/mautic/messages}'
- 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT:-amqp://guest:guest@rabbitmq:5672/mautic/messages}'
depends_on:
mautic_web:
condition: service_healthy
healthcheck:
test:
- CMD
- curl
- '-f'
- 'http://localhost'
interval: 15s
timeout: 10s
retries: 15
mautic_worker:
image: 'mautic/mautic:latest'
volumes:
- 'mautic_data/config:/var/www/html/config:z'
- 'mautic_data/logs:/var/www/html/var/logs:z'
- 'mautic_data/media/files:/var/www/html/docroot/media/files:z'
- 'mautic_data/media/images:/var/www/html/docroot/media/images:z'
- 'mautic_data/plugins:/var/www/html/docroot/plugins:z'
- 'mautic_data/vendor:/var/www/html/vendor:z'
- 'mautic_data/bin:/var/www/html/bin:z'
- 'mautic_data/cron:/opt/mautic/cron:z'
environment:
- DOCKER_MAUTIC_ROLE=mautic_worker
- 'MAUTIC_DB_HOST=${MYSQL_HOST:-mysql}'
- 'MAUTIC_DB_PORT=${MYSQL_PORT:-3306}'
- 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE:-mautic}'
- 'MAUTIC_DB_USER=${SERVICE_USER_MYSQL}'
- 'MAUTIC_DB_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}'
- 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL:-amqp://guest:guest@rabbitmq:5672/mautic/messages}'
- 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT:-amqp://guest:guest@rabbitmq:5672/mautic/messages}'
depends_on:
mautic_web:
condition: service_healthy
healthcheck:
test:
- CMD
- curl
- '-f'
- 'http://localhost'
interval: 15s
timeout: 10s
retries: 15

View File

@@ -0,0 +1,43 @@
# documentation: https://docs.onedev.io/
# slogan: Git server with CI/CD, kanban, and packages. Seamless integration. Unparalleled experience.
# tags: git, scm, ci, cd, kanban, packages, devops, collaboration, code, repository, management
# logo: svgs/onedev.svg
# port: 6610
services:
onedev:
image: 1dev/server:latest
volumes:
- onedev-docker-sock:/var/run/docker.sock
- onedev-data:/opt/onedev
environment:
- SERVICE_FQDN_ONEDEV_6610
- hibernate_dialect=io.onedev.server.persistence.PostgreSQLDialect
- hibernate_connection_driver_class=org.postgresql.Driver
- hibernate_connection_url=jdbc:postgresql://postgres:5432/${POSTGRESQL_DATABASE:-onedev}
- hibernate_connection_username=${SERVICE_USER_DATABASE}
- hibernate_connection_password=${SERVICE_PASSWORD_64_DATABASE}
- initial_user=${SERVICE_USER_ONEDEV}
- initial_password=${SERVICE_PASSWORD_ONEDEV}
- initial_email=${ONEDEV_EMAIL:-mail@example.com}
- initial_server_url=${SERVICE_FQDN_ONEDEV}
- initial_ssh_root_url=${SSH_ROOT_URL:-ssh://changeme:22}
depends_on:
postgres:
condition: service_healthy
healthcheck:
test: ["CMD", "true"]
postgres:
image: postgres:16-alpine
volumes:
- onedev-postgresql-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${SERVICE_USER_DATABASE}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_64_DATABASE}
- POSTGRES_DB=${POSTGRESQL_DATABASE:-onedev}
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 5s
timeout: 20s
retries: 10

View File

@@ -0,0 +1,43 @@
# documentation: https://docs.paperless-ngx.com/configuration/
# slogan: Paperless-ngx is a community-supported open-source document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper.
# logo: svgs/paperless.svg
# port: 8000
services:
redis:
image: docker.io/library/redis:7.4
volumes:
- paperless-redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
timeout: 10s
retries: 3
paperless:
image: paperlessngx/paperless-ngx:latest
depends_on:
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- paperless-data:/usr/src/paperless/data
- paperless-media:/usr/src/paperless/media
- type: bind
source: ./export
target: /usr/src/paperless/export
is_directory: true
- type: bind
source: ./consume
target: /usr/src/paperless/consume
is_directory: true
environment:
- SERVICE_FQDN_PAPERLESS_8000
- PAPERLESS_URL=$SERVICE_FQDN_PAPERLESS_8000
- PAPERLESS_ADMIN_PASSWORD=${SERVICE_PASSWORD_PAPERLESS}
- PAPERLESS_ADMIN_USER=${SERVICE_USER_PAPERLESS}
- PAPERLESS_REDIS=redis://redis:6379
- PAPERLESS_SECRET_KEY=${SERVICE_REALBASE64_64_PAPERLESS}

View File

@@ -1940,6 +1940,7 @@ services:
- DEPLOYMENT=hobby
- SITE_URL=$SERVICE_FQDN_WEB
- SECRET_KEY=$SERVICE_BASE64_64_SECRETKEY
- 'ENCRYPTION_SALT_KEYS=${SERVICE_ENCRYPTION_SALT_KEYS:-00beef0000beef0000beef0000beef00}'
depends_on:
- db
- redis
@@ -1967,6 +1968,7 @@ services:
- DEPLOYMENT=hobby
- SITE_URL=$SERVICE_FQDN_WEB
- SECRET_KEY=$SERVICE_BASE64_64_SECRETKEY
- 'ENCRYPTION_SALT_KEYS=${SERVICE_ENCRYPTION_SALT_KEYS:-00beef0000beef0000beef0000beef00}'
depends_on:
- db
- redis
@@ -1998,6 +2000,7 @@ services:
- CLICKHOUSE_VERIFY=false
- SITE_URL=$SERVICE_FQDN_WEB
- SECRET_KEY=$SERVICE_BASE64_64_SECRETKEY
- 'ENCRYPTION_SALT_KEYS=${SERVICE_ENCRYPTION_SALT_KEYS:-00beef0000beef0000beef0000beef00}'
depends_on:
- db
- redis
@@ -2026,6 +2029,7 @@ services:
# - DEPLOYMENT=hobby
# - SITE_URL=$SERVICE_FQDN_WEB
# - SECRET_KEY=$SERVICE_BASE64_64_SECRETKEY
# - 'ENCRYPTION_SALT_KEYS=${SERVICE_ENCRYPTION_SALT_KEYS:-00beef0000beef0000beef0000beef00}'
# depends_on:
# - db
# - redis
@@ -2109,6 +2113,7 @@ services:
- DEPLOYMENT=hobby
- SITE_URL=$SERVICE_FQDN_WEB
- SECRET_KEY=$SERVICE_BASE64_64_SECRETKEY
- 'ENCRYPTION_SALT_KEYS=${SERVICE_ENCRYPTION_SALT_KEYS:-00beef0000beef0000beef0000beef00}'
- TEMPORAL_HOST=temporal
depends_on:
- db

File diff suppressed because one or more lines are too long