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
+
\ No newline at end of file
diff --git a/blueprints/geoserver/template.toml b/blueprints/geoserver/template.toml
new file mode 100644
index 00000000..a975cc8e
--- /dev/null
+++ b/blueprints/geoserver/template.toml
@@ -0,0 +1,18 @@
+[info]
+name = "GeoServer & PostGIS"
+description = "An open-source server for sharing geospatial data, paired with a PostGIS database. Template created and maintained by OpenGeoCity Tanzania (info@ogctz.org). For further assistance contact +255759968919 or visit https://opengeocity.org or github: https://github.com/ShabaniMagawila or linkedin: https://www.linkedin.com/in/shabani-magawila/"
+version = "2.24.1"
+
+[variables]
+GEOSERVER_ADMIN_USER = "admin"
+GEOSERVER_ADMIN_PASSWORD = "geoserver_secure"
+INITIAL_MEMORY = "2G"
+MAXIMUM_MEMORY = "4G"
+POSTGRES_USER = "postgres"
+POSTGRES_PASSWORD = "postgres_secure"
+POSTGRES_DB = "gis"
+
+[config]
+[[config.domains]]
+serviceName = "geoserver"
+port = 8080
\ No newline at end of file
diff --git a/meta.json b/meta.json
index 7ac97b0b..ffaa70e2 100644
--- a/meta.json
+++ b/meta.json
@@ -2753,6 +2753,23 @@
"object-storage"
]
},
+ {
+ "id": "geoserver",
+ "name": "GeoServer & PostGIS",
+ "version": "2.24.1",
+ "description": "An open-source server for sharing geospatial data, paired with a PostGIS database. Template created and maintained by OpenGeoCity Tanzania (info@ogctz.org). For further assistance contact +255759968919 or visit https://opengeocity.org or github: https://github.com/ShabaniMagawila or linkedin: https://www.linkedin.com/in/shabani-magawila/",
+ "logo": "logo.png",
+ "links": {
+ "github": "https://github.com/geoserver/geoserver",
+ "website": "https://geoserver.org/",
+ "docs": "https://docs.geoserver.org/"
+ },
+ "tags": [
+ "geospatial",
+ "gis",
+ "postgis"
+ ]
+ },
{
"id": "ghost",
"name": "Ghost",
From cf862fccfb40b0e3a911bcf2bb95f30e60f17ab1 Mon Sep 17 00:00:00 2001
From: MANFIT7 <123054818+MANFIT7@users.noreply.github.com>
Date: Wed, 8 Jul 2026 03:53:26 +0800
Subject: [PATCH 04/55] feat: add LibreSpeed template (#899)
---
blueprints/librespeed/docker-compose.yml | 20 ++++++++++++++++++++
blueprints/librespeed/librespeed.svg | 1 +
blueprints/librespeed/template.toml | 14 ++++++++++++++
meta.json | 18 ++++++++++++++++++
4 files changed, 53 insertions(+)
create mode 100644 blueprints/librespeed/docker-compose.yml
create mode 100644 blueprints/librespeed/librespeed.svg
create mode 100644 blueprints/librespeed/template.toml
diff --git a/blueprints/librespeed/docker-compose.yml b/blueprints/librespeed/docker-compose.yml
new file mode 100644
index 00000000..2f7e8bc1
--- /dev/null
+++ b/blueprints/librespeed/docker-compose.yml
@@ -0,0 +1,20 @@
+version: "3.8"
+
+services:
+ librespeed:
+ image: lscr.io/linuxserver/librespeed:latest
+ restart: unless-stopped
+ expose:
+ - 80
+ volumes:
+ - librespeed-config:/config
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TZ}
+ - PASSWORD=${PASSWORD}
+ - CUSTOM_RESULTS=${CUSTOM_RESULTS}
+ - DB_TYPE=sqlite
+
+volumes:
+ librespeed-config:
diff --git a/blueprints/librespeed/librespeed.svg b/blueprints/librespeed/librespeed.svg
new file mode 100644
index 00000000..c76c99ec
--- /dev/null
+++ b/blueprints/librespeed/librespeed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/blueprints/librespeed/template.toml b/blueprints/librespeed/template.toml
new file mode 100644
index 00000000..b8ed3e13
--- /dev/null
+++ b/blueprints/librespeed/template.toml
@@ -0,0 +1,14 @@
+[variables]
+main_domain = "${domain}"
+password = "${password:32}"
+
+[config]
+[[config.domains]]
+serviceName = "librespeed"
+port = 80
+host = "${main_domain}"
+
+[config.env]
+PASSWORD = "${password}"
+TZ = "UTC"
+CUSTOM_RESULTS = "false"
diff --git a/meta.json b/meta.json
index ffaa70e2..c16a0404 100644
--- a/meta.json
+++ b/meta.json
@@ -3846,6 +3846,24 @@
"object-storage"
]
},
+ {
+ "id": "librespeed",
+ "name": "LibreSpeed",
+ "version": "latest",
+ "description": "LibreSpeed is a lightweight, self-hosted HTML5 speed test for measuring download, upload, ping, and jitter in modern browsers.",
+ "logo": "librespeed.svg",
+ "links": {
+ "github": "https://github.com/librespeed/speedtest",
+ "website": "https://librespeed.org",
+ "docs": "https://docs.linuxserver.io/images/docker-librespeed/"
+ },
+ "tags": [
+ "speedtest",
+ "networking",
+ "monitoring",
+ "self-hosted"
+ ]
+ },
{
"id": "libretranslate",
"name": "LibreTranslate",
From 76ceefdd2b7ae5d7e5149a04318a7ef41c34fa45 Mon Sep 17 00:00:00 2001
From: MANFIT7 <123054818+MANFIT7@users.noreply.github.com>
Date: Wed, 8 Jul 2026 03:55:14 +0800
Subject: [PATCH 05/55] feat: add Snipe-IT template (#897)
---
blueprints/snipe-it/docker-compose.yml | 68 +++++++++++++++++++++++++
blueprints/snipe-it/snipe-it.png | Bin 0 -> 22482 bytes
blueprints/snipe-it/template.toml | 25 +++++++++
meta.json | 18 +++++++
4 files changed, 111 insertions(+)
create mode 100644 blueprints/snipe-it/docker-compose.yml
create mode 100644 blueprints/snipe-it/snipe-it.png
create mode 100644 blueprints/snipe-it/template.toml
diff --git a/blueprints/snipe-it/docker-compose.yml b/blueprints/snipe-it/docker-compose.yml
new file mode 100644
index 00000000..be3140b7
--- /dev/null
+++ b/blueprints/snipe-it/docker-compose.yml
@@ -0,0 +1,68 @@
+version: "3.8"
+
+services:
+ snipe-it:
+ image: snipe/snipe-it:v8.5.0
+ restart: unless-stopped
+ expose:
+ - 80
+ volumes:
+ - snipe-it-storage:/var/lib/snipeit
+ environment:
+ - APP_ENV=production
+ - APP_DEBUG=false
+ - APP_KEY=${APP_KEY}
+ - APP_URL=${APP_URL}
+ - APP_TIMEZONE=${APP_TIMEZONE}
+ - APP_LOCALE=${APP_LOCALE}
+ - APP_TRUSTED_PROXIES=${APP_TRUSTED_PROXIES}
+ - APP_FORCE_TLS=${APP_FORCE_TLS}
+ - SECURE_COOKIES=${SECURE_COOKIES}
+ - PRIVATE_FILESYSTEM_DISK=local
+ - PUBLIC_FILESYSTEM_DISK=local_public
+ - DB_CONNECTION=mysql
+ - DB_HOST=snipe-it-db
+ - DB_PORT=3306
+ - DB_DATABASE=${DB_DATABASE}
+ - DB_USERNAME=${DB_USERNAME}
+ - DB_PASSWORD=${DB_PASSWORD}
+ - DB_PREFIX=null
+ - DB_DUMP_PATH=/usr/bin
+ - DB_DUMP_SKIP_SSL=true
+ - DB_CHARSET=utf8mb4
+ - DB_COLLATION=utf8mb4_unicode_ci
+ - MAIL_MAILER=log
+ - MAIL_FROM_ADDR=${MAIL_FROM_ADDR}
+ - MAIL_FROM_NAME=Snipe-IT
+ - MAIL_REPLYTO_ADDR=${MAIL_FROM_ADDR}
+ - MAIL_REPLYTO_NAME=Snipe-IT
+ - ALLOW_BACKUP_DELETE=false
+ - ALLOW_DATA_PURGE=false
+ - IMAGE_LIB=gd
+ - LOG_CHANNEL=stderr
+ - CACHE_DRIVER=file
+ - SESSION_DRIVER=file
+ - QUEUE_DRIVER=sync
+ depends_on:
+ snipe-it-db:
+ condition: service_healthy
+
+ snipe-it-db:
+ image: mariadb:11.4.7
+ restart: unless-stopped
+ volumes:
+ - snipe-it-db-data:/var/lib/mysql
+ environment:
+ - MYSQL_DATABASE=${DB_DATABASE}
+ - MYSQL_USER=${DB_USERNAME}
+ - MYSQL_PASSWORD=${DB_PASSWORD}
+ - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
+ healthcheck:
+ test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
+ interval: 5s
+ timeout: 2s
+ retries: 10
+
+volumes:
+ snipe-it-storage:
+ snipe-it-db-data:
diff --git a/blueprints/snipe-it/snipe-it.png b/blueprints/snipe-it/snipe-it.png
new file mode 100644
index 0000000000000000000000000000000000000000..423a5b74906c4a1f67dab665a59a6731f0dbaa98
GIT binary patch
literal 22482
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
literal 0
HcmV?d00001
diff --git a/blueprints/snipe-it/template.toml b/blueprints/snipe-it/template.toml
new file mode 100644
index 00000000..aca258a5
--- /dev/null
+++ b/blueprints/snipe-it/template.toml
@@ -0,0 +1,25 @@
+[variables]
+main_domain = "${domain}"
+app_key = "${base64:32}"
+db_password = "${password:24}"
+mysql_root_password = "${password:24}"
+
+[config]
+[[config.domains]]
+serviceName = "snipe-it"
+port = 80
+host = "${main_domain}"
+
+[config.env]
+APP_KEY = "base64:${app_key}"
+APP_URL = "https://${main_domain}"
+APP_TIMEZONE = "UTC"
+APP_LOCALE = "en-US"
+APP_TRUSTED_PROXIES = "172.0.0.0/8"
+APP_FORCE_TLS = "true"
+SECURE_COOKIES = "true"
+DB_DATABASE = "snipeit"
+DB_USERNAME = "snipeit"
+DB_PASSWORD = "${db_password}"
+MYSQL_ROOT_PASSWORD = "${mysql_root_password}"
+MAIL_FROM_ADDR = "snipe-it@${main_domain}"
diff --git a/meta.json b/meta.json
index c16a0404..5dae84df 100644
--- a/meta.json
+++ b/meta.json
@@ -6108,6 +6108,24 @@
"authentication"
]
},
+ {
+ "id": "snipe-it",
+ "name": "Snipe-IT",
+ "version": "v8.5.0",
+ "description": "Snipe-IT is an open-source asset management system for tracking hardware, software licenses, accessories, and consumables.",
+ "logo": "snipe-it.png",
+ "links": {
+ "github": "https://github.com/grokability/snipe-it",
+ "website": "https://snipeitapp.com/",
+ "docs": "https://snipe-it.readme.io/docs"
+ },
+ "tags": [
+ "asset-management",
+ "inventory",
+ "business",
+ "self-hosted"
+ ]
+ },
{
"id": "soketi",
"name": "Soketi",
From e83e869bd3b6b030a7a22924f62c6a4acf7df735 Mon Sep 17 00:00:00 2001
From: Kokoro <100moreplus1@proton.me>
Date: Tue, 7 Jul 2026 21:55:48 +0200
Subject: [PATCH 06/55] feat: add LubeLogger template (#896)
Co-authored-by: 100more <184098138+100more@users.noreply.github.com>
---
blueprints/lubelogger/docker-compose.yml | 20 ++++++++++++++++++++
blueprints/lubelogger/lubelogger.png | Bin 0 -> 8262 bytes
blueprints/lubelogger/template.toml | 18 ++++++++++++++++++
meta.json | 18 ++++++++++++++++++
4 files changed, 56 insertions(+)
create mode 100644 blueprints/lubelogger/docker-compose.yml
create mode 100644 blueprints/lubelogger/lubelogger.png
create mode 100644 blueprints/lubelogger/template.toml
diff --git a/blueprints/lubelogger/docker-compose.yml b/blueprints/lubelogger/docker-compose.yml
new file mode 100644
index 00000000..535b8e55
--- /dev/null
+++ b/blueprints/lubelogger/docker-compose.yml
@@ -0,0 +1,20 @@
+version: "3.8"
+
+services:
+ lubelogger:
+ image: ghcr.io/hargata/lubelogger:v1.6.5
+ restart: unless-stopped
+ environment:
+ - LC_ALL=${LUBELOGGER_LOCALE}
+ - LANG=${LUBELOGGER_LOCALE}
+ - LUBELOGGER_DOMAIN=${LUBELOGGER_DOMAIN}
+ - EnableAuth=${LUBELOGGER_ENABLE_AUTH}
+ volumes:
+ - lubelogger-data:/App/data
+ - lubelogger-keys:/root/.aspnet/DataProtection-Keys
+ expose:
+ - 8080
+
+volumes:
+ lubelogger-data: {}
+ lubelogger-keys: {}
diff --git a/blueprints/lubelogger/lubelogger.png b/blueprints/lubelogger/lubelogger.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3713e8067a37d3e7a04f8d777add1d4c4c27d1b
GIT binary patch
literal 8262
zcmV-MAi3X(P)I>00001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>DAKOVpK~#8N?Oh3c
z6h-!~o+C546B2TekN_SaUVubV!YYCnf`TaGq5`gnpr9!00pbN7tcobBhzO`CceoJ*
z1SAnb5cw-0B8Lef2RX<^j=B2(zMAfFX1aQksO;)*=llIC-Bo=|cU8UjzW1uC!-5DR
zh^9kQw!a(pob(;Exze4}V7ECl_i|-Fh#>y5FeuyK1rnB)w7J5a(?XWzjI>1KcS<&h
zApWxWLj;Db5+7nXg9zeJiGUqc>A>$%I(BM(>IBML
z_yI3anVB{>V1M0Lwb-o1A1|!KpWYc(7HX0D@e(i4^&ynT((bYP26@h;`=U+mBS8f5
z=Yy`mcnQl0N^!A~#+NE;hb}5^DjzK2anraxkXMC`v?rtvJ*DDd>|ss
zz+M>@)92vARu`Zg_n>qa?fyvVElMq|7HQb!9W6fug(iqUD}(~$Ei872?0D*((`^4S
z8;g!Gv2PPN_F
zH$pZV`Lzcg85H?}dVJ062|osfCWt>9e8yp@qar_x61Ob<{&~vu#qRn#%HK)}R>9aZ
z)^Ps=w?@7i6KRNf?UPD&>a?q#%9l`DL}@D}e(jQG<578kpqj$ou;>!RI_@U
ze3Htar}QBu$6MoKpB&yd;?+=#fo<4Xcj&`)H5X-Vt>s*=Igq!eTOB6WP09MeWOf{p
zx}D5dvVR!lohhjfyXjmd>j7zl`j8&EJC*EN1-*9+y>}-i>jRU+wqNR5SgK@$_zmz8
z7=VOkGi`d!T~p0QPA&Hq7H@=78bc|G(o{;tl$wJCN>5QbMG5{3e#e9TpSD`pKHc1B
z`@VYC>*3w{?vE5<(gP9={0p+aNJPM~1CN!O0SP
zPMZM*|D@fsE;RHEkJ2-|sbqa{*QDY>%eK}-sRf1RH$o&ZU1eF`-C$#^+lazN2aeg{
znE%H>zn?;zpXnJwGe;J&Zw}hFQ~qjxuo=+nyeEnstldBuHP(Yt4tD+sz@pjBtb{5w
zLMifK=!+$6!NywnaRb~XXAe|=*|f=Y=YB=b|JAde4{^QLn$jO`UH@00ar(`fxqFJr
zoExnci9LQ-)E!iW3jR+5^elAc_BtmC3#`f$ytEmRx3-L6l68^}+IOXRtws`NM<-
za2VN*B4I%wWA%0(ZqMQcXAyNfQb7kb!U8Pc#-9Q292Az{0b!IZIo>qd;gDTJZU{GC
z)5S7FDL(5U?bwkv!(A@fHSxXEM%qUw+l6Dzfzuq?Ut$t`CJmI1vy5l{K*$mssOE4v!3a4U)?39X#dK2qM5o+PhM4pWMPP@th?Do(6Qou3qE
zynEe_TDkudC79OogZqdW)Y;q62J{V7N3}{PD1jm@BFlB0mjnRa1AayS*{iDM(XW-m
z(Z7%qLf6fLEhlXS2~2+_>wz8}1AQZll&WMsAWHX+xqIF+TXx!bswqC3!5j1&IrLtW
z8lz*?wXW=}R};!es=CrWQ^^}ULfvw+$&oik>d73+sUFyJT6d*;525pJBtdKg;g^|Q
zPx&HAlGZv5&bLCZ%BOqy!k(S>9X+(h;ctwN$y<}-?IzO@y7ypNmM)=Z^au*+t|JB}
zEjIVadqyep0S_{m*+eGGePu}^3n!P-b8a&`q){x?5n*>2=PRdrAj#4ZbB|n%?{V0&
zTW2!K@FeXbNE0J5d5?>+IhM@44;pgP?x%Vk!cX*q+BQm-qai1~6IlSI-sE%L^+xq8
z%lWjw*+unc>7I|F4-e$6%w#vGt)X45f|aGG%?{fUyD8*u`n`cBljAO3fuYWehZ*?J
zvMToI^wSuO)Qr*tbY3)VUZXUek}wQR{)nrr(zPT$#`qw0uu7#^1G?9A+B~v~D9r5>
zN)WAkkRNCUK*#LnQ0lx|3-iW;O7_&d73eS?nh6?Xav6VCvOefMv|!i%qxRQHpx)#i
z-49Q_TmI7<3#ymex2J!r7hqVlsfG={P9sMg3qG&;cIf0XbP|uy*t650Cn1?g4Wk=U
zueZte^*heoJLs7*L?$@`y~o&TWo+j18Yl=T3LiMK+YEIv`E`1~c%?{)ydpfEu@$`ME!LCWYE64c4=
zBfeOjUAw$rkFe`Sib!o6+Fb^LcbGz6Aq{rF`=}UBl76DcBL_WG`hijeCDWUv&p)We
zN-G_p0K}QV-0gSnSq35a8bE4clB!t7xRn7c$tT@GegA99qY1iYg=)DJ?bLnRO-ivvG7f8^di9c*iSb(%7Q}T?DZ4k(C
zu_}VV*Er}vw0X|q=jeb*v-`5is;Fca?w~2&BZ5!;8g-ddn%-M|z3t%)z
zhRjY@L|uEkO91IkWyc3}|Bxk9;=4dtke|M|iuXs2z>pBYaeRT2F>7nBR8;0{p#7I|
z%o~bj*+}X9gU4+Rm)=ugxc9|U2VL{&4@d2TC|yeXmkxcgY|u5Mi`MKrY?G5(7^6F+
zo4*~{GfXHnWPMIG*yJpOL1O0j-0Tw?~mBAi;m_2HHh$h
z#n;(4;OcN;gzn4l>RD-(?6~hH>n6Pb1AY^YtB0c}xnW5Kr9-2Wpx?+3C_ral`&BL9
z`lDT{*^m-%{8-8AzK8mpwCkfN964!s%LWE2;sa_+mc36rl-4fAgxTg3v2Qnp-7lhl
zc-9Rm@|=?GPVDKApsb{&8WMgYEfIzuwfgAv*Po!z7cEkvi}LUf8_5PWTKhV~p(b
zjv-624?0H5PD9;+Yr2H8#1S+!3|8W=q;}dagGp^`wM}p1OdRrmo|qJ$}XFFZc_C_v1M^zq4
z{wZg*Qse`piM6FoQlR%xpOcbj>;--YDV7=3xIUJw4J_%
zcX@;t`r+}n%UQqiC63e8d_Y?RwH*rAr?n-4(G2pQu6D96_Y|xO@
zKO+*_w-#5jo5r1Dhx2Sg`tNYcF|_IGFs320*{F4e513y!G7gIVJ#b*QXy
zIf+`ayPq#%o4(-OERN6XU73#k;W
z!m*Q1mi0=@UqlrOVOZl16)&c06y5`VSkY-${hWz$pD0B>P&Mt4-r--99^~`!{4sBB
zHBlS$3{o=6{kNzk)<(@b~%1}th{NWvvhrsZP``0IxTq7pl
ze8Nc7s(kV0+68t8`#T*1?eYhrVWuTt)JkMoz;lr2&Q2g)`*88ziW=7{qfufvT^Wio
z9%x7(5G}LQ?@uBscUS5y`3riDDXN@0->oRjCJB5Nvjc>nP9UrRFFNKMR+X8M_p2uV
z`pd&KPBMT{F*RyEr(=xy&?pu2*71(9lC-jr$E%ul-g9wRii8}L0$Od+)Tem?xwS`bSp{Q?fo-;ePMsR*OLx;MwvmHyU5LWLa3xP!c3?HA^P9q*u}c
zis;~R2OB*w92QSFUZnV$AH+l$HBm`GIlgD{%Pp@GS$6!!;XDUh_)^P!QN5xskRoF}
zJ6lVr!wBh^KfFWo9*#!Tf#rPPFxBZ~f1_+7C2(R`7aJvi@Q$=9yA~CLd1Shl#UI2W
zxyHTfVhes70x1G|_acXr4cY!(L)xSX=X~+;`WkEmbWBSLfM4mD
zxI&eVwLy=Ll~g#{_PzD&-kZa~uZ8ovezkZKru}F@z9V~daO6SKl$e^N0fd&Yhu))&
z-h0e)G4mTAZLp6|RikvZtQ4OE!E(yFw+Q)XU1qP_e+N
zifHf8d*qQDj
zjL5(;gVx>rSTXDVK%s|@;g3gP6kvWA{0mQ*QwKaOdpM74ZA|lT4*0lAN&@G@LM`J5
z*w02sr%xLE0X