Compare commits

...

242 Commits

Author SHA1 Message Date
d65b34a605 schema: update app-template.schema.json for v1.7.5.2 2026-10-01 13:01:33 +02:00
e80f9b6eb8 docs: update CONTRIBUTING_APPS.md for v1.7.5.2 2026-10-01 13:01:32 +02:00
bc51913e94 chore(store): sync vaultwarden/docker-compose.yml for v1.7.5.2 2026-10-01 13:01:31 +02:00
875378de86 chore(store): sync vaultwarden/app.json for v1.7.5.2 2026-10-01 13:01:30 +02:00
efaa3cabfc chore(store): sync retroarch/docker-compose.yml for v1.7.5.2 2026-10-01 13:01:29 +02:00
0fdeb37d85 chore(store): sync retroarch/app.json for v1.7.5.2 2026-10-01 13:01:27 +02:00
af321e42fd chore(store): sync qbittorrent/docker-compose.yml for v1.7.5.2 2026-10-01 13:01:26 +02:00
aafa7baaff chore(store): sync qbittorrent/app.json for v1.7.5.2 2026-10-01 13:01:25 +02:00
123444aa15 chore(store): sync portainer/docker-compose.yml for v1.7.5.2 2026-10-01 13:01:24 +02:00
522522b031 chore(store): sync portainer/app.json for v1.7.5.2 2026-10-01 13:01:23 +02:00
eccc990416 chore(store): sync plex/docker-compose.yml for v1.7.5.2 2026-10-01 13:01:21 +02:00
b90021d70b chore(store): sync plex/app.json for v1.7.5.2 2026-10-01 13:01:20 +02:00
b778083e0f chore(store): sync nextcloud/docker-compose.yml for v1.7.5.2 2026-10-01 13:01:18 +02:00
af352acc62 chore(store): sync nextcloud/app.json for v1.7.5.2 2026-10-01 13:01:17 +02:00
aef1088c95 chore(store): sync jellyfin/docker-compose.yml for v1.7.5.2 2026-10-01 13:01:16 +02:00
e21c28ce2a chore(store): sync jellyfin/app.json for v1.7.5.2 2026-10-01 13:01:15 +02:00
4e91044395 chore(store): sync immich/docker-compose.yml for v1.7.5.2 2026-10-01 13:01:13 +02:00
a42f319f29 chore(store): sync immich/app.json for v1.7.5.2 2026-10-01 13:01:11 +02:00
b091eb48db chore(store): sync homeassistant/docker-compose.yml for v1.7.5.2 2026-10-01 13:01:10 +02:00
98389c4a2d chore(store): sync homeassistant/app.json for v1.7.5.2 2026-10-01 13:01:08 +02:00
556b0b5586 chore(store): sync adguard-home/docker-compose.yml for v1.7.5.2 2026-10-01 13:01:07 +02:00
45a2ea1588 chore(store): sync adguard-home/app.json for v1.7.5.2 2026-10-01 13:01:06 +02:00
9020c2c64f schema: update app-template.schema.json for v1.7.5.1 2026-10-01 12:10:15 +02:00
c824f9d189 docs: update CONTRIBUTING_APPS.md for v1.7.5.1 2026-10-01 12:10:14 +02:00
3fe61eefb3 chore(store): sync vaultwarden/docker-compose.yml for v1.7.5.1 2026-10-01 12:10:13 +02:00
cdec479d62 chore(store): sync vaultwarden/app.json for v1.7.5.1 2026-10-01 12:10:11 +02:00
78c1ccdae0 chore(store): sync retroarch/docker-compose.yml for v1.7.5.1 2026-10-01 12:10:10 +02:00
2fba7716da chore(store): sync retroarch/app.json for v1.7.5.1 2026-10-01 12:10:09 +02:00
bc9e8ad55a chore(store): sync qbittorrent/docker-compose.yml for v1.7.5.1 2026-10-01 12:10:08 +02:00
4d47bbdd54 chore(store): sync qbittorrent/app.json for v1.7.5.1 2026-10-01 12:10:07 +02:00
f06cbe68e4 chore(store): sync portainer/docker-compose.yml for v1.7.5.1 2026-10-01 12:10:06 +02:00
6eb3f4b99b chore(store): sync portainer/app.json for v1.7.5.1 2026-10-01 12:10:05 +02:00
42682b60b1 chore(store): sync plex/docker-compose.yml for v1.7.5.1 2026-10-01 12:10:04 +02:00
438a42bcb3 chore(store): sync plex/app.json for v1.7.5.1 2026-10-01 12:10:03 +02:00
010584c7e5 chore(store): sync nextcloud/docker-compose.yml for v1.7.5.1 2026-10-01 12:10:01 +02:00
6eb6b76db9 chore(store): sync nextcloud/app.json for v1.7.5.1 2026-10-01 12:10:00 +02:00
4e04d8fe11 chore(store): sync jellyfin/docker-compose.yml for v1.7.5.1 2026-10-01 12:09:59 +02:00
5fecf9ba6b chore(store): sync jellyfin/app.json for v1.7.5.1 2026-10-01 12:09:58 +02:00
ecd85f401d chore(store): sync immich/docker-compose.yml for v1.7.5.1 2026-10-01 12:09:57 +02:00
ee42583c3e chore(store): sync immich/app.json for v1.7.5.1 2026-10-01 12:09:56 +02:00
2f118450b5 chore(store): sync homeassistant/docker-compose.yml for v1.7.5.1 2026-10-01 12:09:54 +02:00
d76e447a9c chore(store): sync homeassistant/app.json for v1.7.5.1 2026-10-01 12:09:53 +02:00
2d69ba148f chore(store): sync adguard-home/docker-compose.yml for v1.7.5.1 2026-10-01 12:09:53 +02:00
7f8b674c07 chore(store): sync adguard-home/app.json for v1.7.5.1 2026-10-01 12:09:51 +02:00
6975217c47 schema: update app-template.schema.json for v1.7.5.1 2026-10-01 09:25:14 +02:00
459b6fd81f docs: update CONTRIBUTING_APPS.md for v1.7.5.1 2026-10-01 09:25:13 +02:00
f8edceba3d chore(store): sync vaultwarden/docker-compose.yml for v1.7.5.1 2026-10-01 09:25:12 +02:00
9e8f15095c chore(store): sync vaultwarden/app.json for v1.7.5.1 2026-10-01 09:25:11 +02:00
b36cabfc99 chore(store): sync retroarch/docker-compose.yml for v1.7.5.1 2026-10-01 09:25:10 +02:00
03071d4fd8 chore(store): sync retroarch/app.json for v1.7.5.1 2026-10-01 09:25:09 +02:00
f9e028ea9d chore(store): sync qbittorrent/docker-compose.yml for v1.7.5.1 2026-10-01 09:25:08 +02:00
7056efb809 chore(store): sync qbittorrent/app.json for v1.7.5.1 2026-10-01 09:25:07 +02:00
244631b5fa chore(store): sync portainer/docker-compose.yml for v1.7.5.1 2026-10-01 09:25:06 +02:00
c390a7557b chore(store): sync portainer/app.json for v1.7.5.1 2026-10-01 09:25:05 +02:00
68d83c751d chore(store): sync plex/docker-compose.yml for v1.7.5.1 2026-10-01 09:25:04 +02:00
eeb8b4cc76 chore(store): sync plex/app.json for v1.7.5.1 2026-10-01 09:25:03 +02:00
09b1b7a1f6 chore(store): sync nextcloud/docker-compose.yml for v1.7.5.1 2026-10-01 09:25:02 +02:00
c60e0c00c1 chore(store): sync nextcloud/app.json for v1.7.5.1 2026-10-01 09:25:01 +02:00
5797650363 chore(store): sync jellyfin/docker-compose.yml for v1.7.5.1 2026-10-01 09:24:59 +02:00
12de3157ab chore(store): sync jellyfin/app.json for v1.7.5.1 2026-10-01 09:24:58 +02:00
57062be9ac chore(store): sync immich/docker-compose.yml for v1.7.5.1 2026-10-01 09:24:57 +02:00
9ab72d9153 chore(store): sync immich/app.json for v1.7.5.1 2026-10-01 09:24:56 +02:00
edafa6e75e chore(store): sync homeassistant/docker-compose.yml for v1.7.5.1 2026-10-01 09:24:55 +02:00
d2609f60fe chore(store): sync homeassistant/app.json for v1.7.5.1 2026-10-01 09:24:53 +02:00
507b446d61 chore(store): sync adguard-home/docker-compose.yml for v1.7.5.1 2026-10-01 09:24:52 +02:00
fa491a7856 chore(store): sync adguard-home/app.json for v1.7.5.1 2026-10-01 09:24:51 +02:00
dbb4e70922 schema: update app-template.schema.json for v1.7.5.1 2026-10-01 08:25:46 +02:00
1c583373d2 docs: update CONTRIBUTING_APPS.md for v1.7.5.1 2026-10-01 08:25:45 +02:00
f3cdd5f241 chore(store): sync vaultwarden/docker-compose.yml for v1.7.5.1 2026-10-01 08:25:44 +02:00
ca8c9772ae chore(store): sync vaultwarden/app.json for v1.7.5.1 2026-10-01 08:25:42 +02:00
0688ef2ea4 chore(store): sync retroarch/docker-compose.yml for v1.7.5.1 2026-10-01 08:25:41 +02:00
d60372f9c9 chore(store): sync retroarch/app.json for v1.7.5.1 2026-10-01 08:25:40 +02:00
fa40e98fb0 chore(store): sync qbittorrent/docker-compose.yml for v1.7.5.1 2026-10-01 08:25:39 +02:00
f3ee9bc683 chore(store): sync qbittorrent/app.json for v1.7.5.1 2026-10-01 08:25:38 +02:00
1df1d6fe77 chore(store): sync portainer/docker-compose.yml for v1.7.5.1 2026-10-01 08:25:33 +02:00
91f678c127 chore(store): sync portainer/app.json for v1.7.5.1 2026-10-01 08:25:32 +02:00
862a53a6df chore(store): sync plex/docker-compose.yml for v1.7.5.1 2026-10-01 08:25:31 +02:00
8e055d082a chore(store): sync plex/app.json for v1.7.5.1 2026-10-01 08:25:30 +02:00
090da0b113 chore(store): sync nextcloud/docker-compose.yml for v1.7.5.1 2026-10-01 08:25:29 +02:00
3117cec29e chore(store): sync nextcloud/app.json for v1.7.5.1 2026-10-01 08:25:28 +02:00
bdf1562b23 chore(store): sync jellyfin/docker-compose.yml for v1.7.5.1 2026-10-01 08:25:27 +02:00
c1be2b45f0 chore(store): sync jellyfin/app.json for v1.7.5.1 2026-10-01 08:25:26 +02:00
62577f9473 chore(store): sync immich/docker-compose.yml for v1.7.5.1 2026-10-01 08:25:25 +02:00
aa792016c1 chore(store): sync immich/app.json for v1.7.5.1 2026-10-01 08:25:24 +02:00
8e8d0e2463 chore(store): sync homeassistant/docker-compose.yml for v1.7.5.1 2026-10-01 08:25:23 +02:00
83d0310088 chore(store): sync homeassistant/app.json for v1.7.5.1 2026-10-01 08:25:22 +02:00
9ff641ba8b chore(store): sync adguard-home/docker-compose.yml for v1.7.5.1 2026-10-01 08:25:21 +02:00
f9aeadfc29 chore(store): sync adguard-home/app.json for v1.7.5.1 2026-10-01 08:25:19 +02:00
925983c63e schema: update app-template.schema.json for v1.7.5 2026-09-30 22:17:35 +02:00
935ec3dc1f docs: update CONTRIBUTING_APPS.md for v1.7.5 2026-09-30 22:17:34 +02:00
b069033829 chore(store): sync vaultwarden/docker-compose.yml for v1.7.5 2026-09-30 22:17:33 +02:00
f33e8f3e71 chore(store): sync vaultwarden/app.json for v1.7.5 2026-09-30 22:17:31 +02:00
d2fbe9f543 chore(store): sync retroarch/docker-compose.yml for v1.7.5 2026-09-30 22:17:30 +02:00
d5ed66fa23 chore(store): sync retroarch/app.json for v1.7.5 2026-09-30 22:17:29 +02:00
2821965e11 chore(store): sync qbittorrent/docker-compose.yml for v1.7.5 2026-09-30 22:17:28 +02:00
09352c20ba chore(store): sync qbittorrent/app.json for v1.7.5 2026-09-30 22:17:27 +02:00
c8094e0344 chore(store): sync portainer/docker-compose.yml for v1.7.5 2026-09-30 22:17:26 +02:00
155bbfd701 chore(store): sync portainer/app.json for v1.7.5 2026-09-30 22:17:25 +02:00
90afa9e540 chore(store): sync plex/docker-compose.yml for v1.7.5 2026-09-30 22:17:24 +02:00
3370f77a68 chore(store): sync plex/app.json for v1.7.5 2026-09-30 22:17:22 +02:00
b3c698bd78 chore(store): sync nextcloud/docker-compose.yml for v1.7.5 2026-09-30 22:17:21 +02:00
ad564c09c4 chore(store): sync nextcloud/app.json for v1.7.5 2026-09-30 22:17:20 +02:00
553be86177 chore(store): sync jellyfin/docker-compose.yml for v1.7.5 2026-09-30 22:17:19 +02:00
273caba9aa chore(store): sync jellyfin/app.json for v1.7.5 2026-09-30 22:17:18 +02:00
0853992070 chore(store): sync immich/docker-compose.yml for v1.7.5 2026-09-30 22:17:17 +02:00
4a7df84a99 chore(store): sync immich/app.json for v1.7.5 2026-09-30 22:17:16 +02:00
1970176807 chore(store): sync homeassistant/docker-compose.yml for v1.7.5 2026-09-30 22:17:15 +02:00
29390614b8 chore(store): sync homeassistant/app.json for v1.7.5 2026-09-30 22:17:14 +02:00
88d1db8c73 chore(store): sync adguard-home/docker-compose.yml for v1.7.5 2026-09-30 22:17:13 +02:00
1d68ae09f4 chore(store): sync adguard-home/app.json for v1.7.5 2026-09-30 22:17:12 +02:00
2f29f6abdd schema: update app-template.schema.json for v1.7.4 2026-09-30 20:58:13 +02:00
fecd295e76 docs: update CONTRIBUTING_APPS.md for v1.7.4 2026-09-30 20:58:12 +02:00
da0d04b80f chore(store): sync vaultwarden/docker-compose.yml for v1.7.4 2026-09-30 20:58:11 +02:00
3069b06b3d chore(store): sync vaultwarden/app.json for v1.7.4 2026-09-30 20:58:10 +02:00
a5c08791df chore(store): sync retroarch/docker-compose.yml for v1.7.4 2026-09-30 20:58:09 +02:00
fd590de2b9 chore(store): sync retroarch/app.json for v1.7.4 2026-09-30 20:58:08 +02:00
bf3254a11c chore(store): sync qbittorrent/docker-compose.yml for v1.7.4 2026-09-30 20:58:07 +02:00
972ab8d067 chore(store): sync qbittorrent/app.json for v1.7.4 2026-09-30 20:58:06 +02:00
ef5a5fa79d chore(store): sync portainer/docker-compose.yml for v1.7.4 2026-09-30 20:58:05 +02:00
47285428aa chore(store): sync portainer/app.json for v1.7.4 2026-09-30 20:58:03 +02:00
c1386a3d1e chore(store): sync plex/docker-compose.yml for v1.7.4 2026-09-30 20:58:01 +02:00
4317a4ce8d chore(store): sync plex/app.json for v1.7.4 2026-09-30 20:58:00 +02:00
be2a6a0574 chore(store): sync nextcloud/docker-compose.yml for v1.7.4 2026-09-30 20:57:59 +02:00
546681e4a6 chore(store): sync nextcloud/app.json for v1.7.4 2026-09-30 20:57:58 +02:00
d09658cec8 chore(store): sync jellyfin/docker-compose.yml for v1.7.4 2026-09-30 20:57:57 +02:00
05334196be chore(store): sync jellyfin/app.json for v1.7.4 2026-09-30 20:57:56 +02:00
c4cbfe2f24 chore(store): sync immich/docker-compose.yml for v1.7.4 2026-09-30 20:57:54 +02:00
f092ea2137 chore(store): sync immich/app.json for v1.7.4 2026-09-30 20:57:53 +02:00
c3a422a68c chore(store): sync homeassistant/docker-compose.yml for v1.7.4 2026-09-30 20:57:52 +02:00
a54457e9b0 chore(store): sync homeassistant/app.json for v1.7.4 2026-09-30 20:57:51 +02:00
da50082eb6 chore(store): sync adguard-home/docker-compose.yml for v1.7.4 2026-09-30 20:57:50 +02:00
b7fdf3102f chore(store): sync adguard-home/app.json for v1.7.4 2026-09-30 20:57:48 +02:00
324f152880 schema: update app-template.schema.json for v1.7.3 2026-09-30 18:37:53 +02:00
def101c0fa docs: update CONTRIBUTING_APPS.md for v1.7.3 2026-09-30 18:37:52 +02:00
55242e717b chore(store): sync vaultwarden/docker-compose.yml for v1.7.3 2026-09-30 18:37:51 +02:00
6b6d180019 chore(store): sync vaultwarden/app.json for v1.7.3 2026-09-30 18:37:50 +02:00
3036937c72 chore(store): sync retroarch/docker-compose.yml for v1.7.3 2026-09-30 18:37:49 +02:00
332c4479ad chore(store): sync retroarch/app.json for v1.7.3 2026-09-30 18:37:48 +02:00
da79d44b0a chore(store): sync qbittorrent/docker-compose.yml for v1.7.3 2026-09-30 18:37:47 +02:00
6c9bf4f590 chore(store): sync qbittorrent/app.json for v1.7.3 2026-09-30 18:37:46 +02:00
b9d358fa27 chore(store): sync portainer/docker-compose.yml for v1.7.3 2026-09-30 18:37:45 +02:00
13ccdbe74a chore(store): sync portainer/app.json for v1.7.3 2026-09-30 18:37:44 +02:00
1b6add9256 chore(store): sync plex/docker-compose.yml for v1.7.3 2026-09-30 18:37:43 +02:00
b1846b04b9 chore(store): sync plex/app.json for v1.7.3 2026-09-30 18:37:41 +02:00
a1b030d091 chore(store): sync nextcloud/docker-compose.yml for v1.7.3 2026-09-30 18:37:40 +02:00
0e9b0d09a2 chore(store): sync nextcloud/app.json for v1.7.3 2026-09-30 18:37:39 +02:00
0ccacb1f0c chore(store): sync jellyfin/docker-compose.yml for v1.7.3 2026-09-30 18:37:38 +02:00
574fffd485 chore(store): sync jellyfin/app.json for v1.7.3 2026-09-30 18:37:37 +02:00
c069820354 chore(store): sync immich/docker-compose.yml for v1.7.3 2026-09-30 18:37:36 +02:00
8a2e6d3ba5 chore(store): sync immich/app.json for v1.7.3 2026-09-30 18:37:35 +02:00
57870709cc chore(store): sync homeassistant/docker-compose.yml for v1.7.3 2026-09-30 18:37:34 +02:00
cbb7107fbc chore(store): sync homeassistant/app.json for v1.7.3 2026-09-30 18:37:33 +02:00
19866f6d00 chore(store): sync adguard-home/docker-compose.yml for v1.7.3 2026-09-30 18:37:32 +02:00
a0b53d0c0f chore(store): sync adguard-home/app.json for v1.7.3 2026-09-30 18:37:31 +02:00
44ac17fc26 schema: update app-template.schema.json for v1.7.2 2026-09-30 15:39:50 +02:00
6ab8ebd15c docs: update CONTRIBUTING_APPS.md for v1.7.2 2026-09-30 15:39:49 +02:00
c9e70f6f2b chore(store): sync vaultwarden/docker-compose.yml for v1.7.2 2026-09-30 15:39:48 +02:00
6bf5b6d438 chore(store): sync vaultwarden/app.json for v1.7.2 2026-09-30 15:39:47 +02:00
6440ccc500 chore(store): sync retroarch/docker-compose.yml for v1.7.2 2026-09-30 15:39:46 +02:00
a683e2a57e chore(store): sync retroarch/app.json for v1.7.2 2026-09-30 15:39:45 +02:00
ef4c6137a1 chore(store): sync qbittorrent/docker-compose.yml for v1.7.2 2026-09-30 15:39:44 +02:00
6c15d4987a chore(store): sync qbittorrent/app.json for v1.7.2 2026-09-30 15:39:42 +02:00
f4b58b10cb chore(store): sync portainer/docker-compose.yml for v1.7.2 2026-09-30 15:39:41 +02:00
f4aa1fcd39 chore(store): sync portainer/app.json for v1.7.2 2026-09-30 15:39:40 +02:00
aaa9865617 chore(store): sync plex/docker-compose.yml for v1.7.2 2026-09-30 15:39:39 +02:00
0ad1cc6184 chore(store): sync plex/app.json for v1.7.2 2026-09-30 15:39:38 +02:00
fce55a6fe1 chore(store): sync nextcloud/docker-compose.yml for v1.7.2 2026-09-30 15:39:36 +02:00
3976ab7899 chore(store): sync nextcloud/app.json for v1.7.2 2026-09-30 15:39:35 +02:00
5d8d054bb0 chore(store): sync jellyfin/docker-compose.yml for v1.7.2 2026-09-30 15:39:34 +02:00
bcb44de119 chore(store): sync jellyfin/app.json for v1.7.2 2026-09-30 15:39:33 +02:00
29e92dda9c chore(store): sync immich/docker-compose.yml for v1.7.2 2026-09-30 15:39:32 +02:00
53389d73fe chore(store): sync immich/app.json for v1.7.2 2026-09-30 15:39:31 +02:00
9bc101ef39 chore(store): sync homeassistant/docker-compose.yml for v1.7.2 2026-09-30 15:39:30 +02:00
cb2d2928f1 chore(store): sync homeassistant/app.json for v1.7.2 2026-09-30 15:39:29 +02:00
c94d35a9ae chore(store): sync adguard-home/docker-compose.yml for v1.7.2 2026-09-30 15:39:28 +02:00
f639df9006 chore(store): sync adguard-home/app.json for v1.7.2 2026-09-30 15:39:27 +02:00
765c7b60ac schema: update app-template.schema.json for v1.7.1 2026-09-30 12:56:52 +02:00
4544d1c76a docs: update CONTRIBUTING_APPS.md for v1.7.1 2026-09-30 12:56:51 +02:00
1ed62d3210 chore(store): sync vaultwarden/docker-compose.yml for v1.7.1 2026-09-30 12:56:49 +02:00
cc77f57a0c chore(store): sync vaultwarden/app.json for v1.7.1 2026-09-30 12:56:48 +02:00
ce8beba2f3 chore(store): sync retroarch/docker-compose.yml for v1.7.1 2026-09-30 12:56:47 +02:00
f77b83ca15 chore(store): sync retroarch/app.json for v1.7.1 2026-09-30 12:56:47 +02:00
8f192f2bb2 chore(store): sync qbittorrent/docker-compose.yml for v1.7.1 2026-09-30 12:56:45 +02:00
dc749d2b4b chore(store): sync qbittorrent/app.json for v1.7.1 2026-09-30 12:56:44 +02:00
7aecfc8807 chore(store): sync portainer/docker-compose.yml for v1.7.1 2026-09-30 12:56:43 +02:00
39c43097de chore(store): sync portainer/app.json for v1.7.1 2026-09-30 12:56:41 +02:00
4e70d197f2 chore(store): sync plex/docker-compose.yml for v1.7.1 2026-09-30 12:56:41 +02:00
a51d19777f chore(store): sync plex/app.json for v1.7.1 2026-09-30 12:56:40 +02:00
705b71b8d9 chore(store): sync nextcloud/docker-compose.yml for v1.7.1 2026-09-30 12:56:39 +02:00
136e3650e0 chore(store): sync nextcloud/app.json for v1.7.1 2026-09-30 12:56:38 +02:00
4f5ba10054 chore(store): sync jellyfin/docker-compose.yml for v1.7.1 2026-09-30 12:56:37 +02:00
4ebc955fb9 chore(store): sync jellyfin/app.json for v1.7.1 2026-09-30 12:56:36 +02:00
a670f624d9 chore(store): sync immich/docker-compose.yml for v1.7.1 2026-09-30 12:56:34 +02:00
84af094570 chore(store): sync immich/app.json for v1.7.1 2026-09-30 12:56:33 +02:00
62e22785bd chore(store): sync homeassistant/docker-compose.yml for v1.7.1 2026-09-30 12:56:32 +02:00
f619f3964a chore(store): sync homeassistant/app.json for v1.7.1 2026-09-30 12:56:31 +02:00
b5049fbad8 chore(store): sync adguard-home/docker-compose.yml for v1.7.1 2026-09-30 12:56:30 +02:00
d4942d89dc chore(store): sync adguard-home/app.json for v1.7.1 2026-09-30 12:56:29 +02:00
e6b679ed80 schema: update app-template.schema.json for v1.7.1 2026-09-30 12:44:26 +02:00
f24c05e59b docs: update CONTRIBUTING_APPS.md for v1.7.1 2026-09-30 12:44:25 +02:00
50e91a470d chore(store): sync vaultwarden/docker-compose.yml for v1.7.1 2026-09-30 12:44:24 +02:00
3ef4555baf chore(store): sync vaultwarden/app.json for v1.7.1 2026-09-30 12:44:23 +02:00
a873013967 chore(store): sync retroarch/docker-compose.yml for v1.7.1 2026-09-30 12:44:21 +02:00
83a2382115 chore(store): sync retroarch/app.json for v1.7.1 2026-09-30 12:44:20 +02:00
4b81c9a3eb chore(store): sync qbittorrent/docker-compose.yml for v1.7.1 2026-09-30 12:44:19 +02:00
b6236626a1 chore(store): sync qbittorrent/app.json for v1.7.1 2026-09-30 12:44:18 +02:00
f054034d73 chore(store): sync portainer/docker-compose.yml for v1.7.1 2026-09-30 12:44:16 +02:00
6f37aac403 chore(store): sync portainer/app.json for v1.7.1 2026-09-30 12:44:15 +02:00
ad6386032c chore(store): sync plex/docker-compose.yml for v1.7.1 2026-09-30 12:44:13 +02:00
5b3d840bd1 chore(store): sync plex/app.json for v1.7.1 2026-09-30 12:44:12 +02:00
aa2c63ca3e chore(store): sync nextcloud/docker-compose.yml for v1.7.1 2026-09-30 12:44:11 +02:00
cd800567da chore(store): sync nextcloud/app.json for v1.7.1 2026-09-30 12:44:10 +02:00
358db8fe4e chore(store): sync jellyfin/docker-compose.yml for v1.7.1 2026-09-30 12:44:08 +02:00
ba6d609a88 chore(store): sync jellyfin/app.json for v1.7.1 2026-09-30 12:44:07 +02:00
cce17eaef3 chore(store): sync immich/docker-compose.yml for v1.7.1 2026-09-30 12:44:06 +02:00
5ce7992110 chore(store): sync immich/app.json for v1.7.1 2026-09-30 12:44:05 +02:00
d355600d92 chore(store): sync homeassistant/docker-compose.yml for v1.7.1 2026-09-30 12:44:04 +02:00
c9d0cdd960 chore(store): sync homeassistant/app.json for v1.7.1 2026-09-30 12:44:02 +02:00
f679a6927a chore(store): sync adguard-home/docker-compose.yml for v1.7.1 2026-09-30 12:44:02 +02:00
22e5198c91 chore(store): sync adguard-home/app.json for v1.7.1 2026-09-30 12:44:00 +02:00
e140687828 schema: update app-template.schema.json for v1.7.0 2026-09-29 19:45:59 +02:00
81fddd20e6 docs: update CONTRIBUTING_APPS.md for v1.7.0 2026-09-29 19:45:58 +02:00
f877238962 chore(store): sync vaultwarden/docker-compose.yml for v1.7.0 2026-09-29 19:45:57 +02:00
7372b9b9e2 chore(store): sync vaultwarden/app.json for v1.7.0 2026-09-29 19:45:56 +02:00
e6a300f5a8 chore(store): sync retroarch/docker-compose.yml for v1.7.0 2026-09-29 19:45:55 +02:00
5491a3a92f chore(store): sync retroarch/app.json for v1.7.0 2026-09-29 19:45:53 +02:00
c703b29fed chore(store): sync qbittorrent/docker-compose.yml for v1.7.0 2026-09-29 19:45:52 +02:00
4fd9e2a11e chore(store): sync qbittorrent/app.json for v1.7.0 2026-09-29 19:45:51 +02:00
e0dab0c272 chore(store): sync portainer/docker-compose.yml for v1.7.0 2026-09-29 19:45:50 +02:00
b94ed546a6 chore(store): sync portainer/app.json for v1.7.0 2026-09-29 19:45:49 +02:00
45affb50b7 chore(store): sync plex/docker-compose.yml for v1.7.0 2026-09-29 19:45:48 +02:00
bdfade497b chore(store): sync plex/app.json for v1.7.0 2026-09-29 19:45:46 +02:00
8fe7577eae chore(store): sync nextcloud/docker-compose.yml for v1.7.0 2026-09-29 19:45:45 +02:00
02403552f4 chore(store): sync nextcloud/app.json for v1.7.0 2026-09-29 19:45:43 +02:00
62063da2d7 chore(store): sync jellyfin/docker-compose.yml for v1.7.0 2026-09-29 19:45:41 +02:00
d43f85de3f chore(store): sync jellyfin/app.json for v1.7.0 2026-09-29 19:45:40 +02:00
0dd99c559e chore(store): sync immich/docker-compose.yml for v1.7.0 2026-09-29 19:45:38 +02:00
7930d13af1 chore(store): sync immich/app.json for v1.7.0 2026-09-29 19:45:35 +02:00
80fce2005d chore(store): sync homeassistant/docker-compose.yml for v1.7.0 2026-09-29 19:45:33 +02:00
155634429c chore(store): sync homeassistant/app.json for v1.7.0 2026-09-29 19:45:31 +02:00
8604aa2e09 chore(store): sync adguard-home/docker-compose.yml for v1.7.0 2026-09-29 19:45:25 +02:00
41222212a5 chore(store): sync adguard-home/app.json for v1.7.0 2026-09-29 19:45:22 +02:00
22 changed files with 1115 additions and 49 deletions

View File

@@ -4,6 +4,24 @@ Merci de contribuer à l'écosystème **Irbis OS** ! ❄️
L'App Store d'Irbis OS est conçu pour permettre à la communauté de proposer de nouvelles applications conteneurisées (Docker) via une simple **Pull Request** sur notre dépôt public Gitea : **[https://git.nebulia.tech/SlyderSlash/Irbis_OS-Release](https://git.nebulia.tech/SlyderSlash/Irbis_OS-Release)**.
Dès que votre Pull Request est validée et fusionnée sur ce dépôt public, votre application apparaît **instantanément dans l'App Store de tous les serveurs Irbis OS connectés**, sans qu'aucune mise à jour de l'OS ne soit nécessaire !
---
## 📁 Nouvelle Architecture : 1 Dossier par Application
Chaque application possède son propre sous-dossier dans `community_apps/` nommé selon son identifiant en minuscules :
```text
community_apps/
└── mon-application/
├── app.json # Fiche descriptive de l'application & paramètres UI
├── docker-compose.yml # Stack Docker technique (services, images, réseaux, volumes)
├── icon.png # Image de garde (icône PNG ou SVG carré)
├── screenshot1.png # Capture d'écran de démo #1
└── screenshot2.png # Capture d'écran de démo #2
```
---
## 📋 Comment proposer une nouvelle application ?
@@ -13,79 +31,100 @@ L'App Store d'Irbis OS est conçu pour permettre à la communauté de proposer d
git checkout -b app/mon-application
```
2. **Créez un fichier JSON** dans le dossier `community_apps/` nommé selon l'identifiant de votre application en minuscules (ex: `community_apps/mon-application.json`).
2. **Créez un dossier** dans `community_apps/` au nom de votre application en minuscules (ex: `community_apps/mon-application/`).
3. **Remplissez la définition** en suivant le schéma officiel [`schemas/app-template.schema.json`](./schemas/app-template.schema.json).
3. **Créez le fichier `app.json`** en vous basant sur le modèle ci-dessous et le schéma officiel [`schemas/app-template.schema.json`](./schemas/app-template.schema.json).
4. **Validez localement** votre fichier avec la commande :
4. **Créez le fichier `docker-compose.yml`** contenant la définition officielle de vos conteneurs. Toutes les informations techniques lourdes (images, réseaux, restart policy) sont déléguées à ce fichier Docker Compose afin de ne pas doubler les demandes.
5. **Ajoutez vos visuels** dans le dossier (`icon.png` et les éventuelles captures de démo).
6. **Validez localement** votre application avec la commande :
```bash
pnpm validate:apps
```
5. **Ouvrez votre Pull Request** sur Gitea (`https://git.nebulia.tech/SlyderSlash/Irbis_OS-Release/pulls`) en décrivant brièvement l'application et en confirmant qu'elle a été testée localement sur Irbis OS. Dès que la PR est validée et fusionnée, l'application apparaît automatiquement dans l'App Store de tous les serveurs Irbis OS connectés !
7. **Ouvrez votre Pull Request** sur Gitea (`https://git.nebulia.tech/SlyderSlash/Irbis_OS-Release/pulls`).
---
## 🛠️ Structure du fichier JSON d'une application
Voici un modèle complet commenté :
## 🛠️ 1. Modèle de `app.json`
```json
{
"$schema": "../schemas/app-template.schema.json",
"$schema": "../../schemas/app-template.schema.json",
"id": "mon-application",
"name": "Mon Application",
"tagline": "Une phrase d'accroche courte et percutante (max 150 caractères)",
"description": "Description concise de l'application affichée sur la vignette du magasin.",
"description": "Description concise affichée sur la vignette du magasin.",
"longDescription": "Description détaillée expliquant les fonctionnalités principales, les cas d'usage et les avantages pour un serveur NAS ou Home Lab.",
"icon": "https://example.com/logo-mon-application.png",
"screenshots": [
"https://example.com/screenshot1.png"
],
"category": "productivity",
"version": "1.0.0",
"developer": "Nom du Créateur ou Projet Open Source",
"developer": "Nom du Développeur ou Équipe Open Source",
"website": "https://mon-application.org",
"rating": 4.9,
"downloads": "500K",
"sizeMb": 250,
"downloads": "250K",
"sizeMb": 180,
"license": "MIT",
"image": "mon-organisation/mon-application:latest",
"defaultPort": 8080,
"icon": "icon.png",
"screenshots": [
"screenshot1.png",
"screenshot2.png"
],
"firstStartTip": "Lors du premier accès, utilisez l'identifiant par défaut 'admin' et suivez l'assistant de configuration initial pour sécuriser vos accès.",
"composeFile": "docker-compose.yml",
"nginx": {
"recommendedSubdomain": "monapp",
"enableSsl": true,
"mainPort": 80
},
"ports": [
{
"privatePort": 8080,
"name": "Interface Web",
"description": "Port HTTP principal d'administration",
"privatePort": 80,
"defaultPublicPort": 8080,
"description": "Interface Web d'administration",
"type": "tcp"
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": true
},
{
"name": "API & WebSocket",
"description": "Flux temps réel et synchronisation",
"privatePort": 3000,
"defaultPublicPort": 3000,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": false
}
],
"volumes": [
{
"defaultHostPath": "/mnt/storage/mon-application/data",
"containerPath": "/data",
"description": "Dossier de stockage persistant",
"description": "Données persistantes de l'application",
"required": true
},
{
"defaultHostPath": "/mnt/storage/configs/mon-application",
"containerPath": "/config",
"description": "Fichiers de configuration",
"required": false
}
],
"env": [
{
"key": "ADMIN_USER",
"defaultValue": "admin",
"label": "Nom d'utilisateur administrateur",
"required": true
},
{
"key": "TZ",
"defaultValue": "Europe/Paris",
"label": "Fuseau Horaire",
"label": "Fuseau horaire",
"required": false
},
{
"key": "ADMIN_PASSWORD",
"defaultValue": "",
"label": "Mot de passe administrateur initial",
"required": true
}
]
}
@@ -93,22 +132,30 @@ Voici un modèle complet commenté :
---
## 🏷️ Catégories supportées
## 🐳 2. Modèle de `docker-compose.yml`
- `media` : Streaming, serveurs multimédia (Plex, Jellyfin, Navidrome...)
- `cloud` : Stockage distant, synchronisation (Nextcloud, Owncloud, Seafile...)
- `productivity` : Bureautique, notes, automatisation (Home Assistant, N8N...)
- `security` : Mots de passe, VPN, gestionnaires de secrets (Vaultwarden, WireGuard...)
- `utilities` : Téléchargements, sauvegardes, bases de données (qBittorrent, Duplicati...)
- `development` : Outils de dev, IDE web, CI/CD (Gitea, Code-Server...)
- `home_automation` : Domotique, gestion IoT (Zigbee2MQTT, Node-RED...)
- `network` : Serveurs DNS, proxys, pare-feu (AdGuard Home, Nginx Proxy Manager...)
```yaml
services:
mon-application:
image: mon-organisation/mon-application:latest
container_name: mon-application
restart: unless-stopped
ports:
- "${MON_APP_PORT:-8080}:80"
- "${MON_APP_API_PORT:-3000}:3000"
volumes:
- "${MON_APP_DATA_PATH:-/mnt/storage/mon-application/data}:/data"
environment:
- ADMIN_USER=${ADMIN_USER:-admin}
- TZ=${TZ:-Europe/Paris}
```
---
## 🔒 Règles et Bonnes Pratiques
## 🔒 3. Critères d'Acceptation d'une Pull Request
- **Images Docker vérifiées** : Utilisez de préférence les images officielles Docker Hub ou LinuxServer.io (`lscr.io/linuxserver/...`, `ghcr.io/...`).
- **Chemins de volumes** : Les chemins hôtes par défaut doivent impérativement commencer par `/mnt/storage/` afin d'exploiter la partition de stockage principale du NAS.
- **Ports sans collision** : Veillez à ce que le `defaultPort` n'entre pas en conflit direct avec les services système fondamentaux d'Irbis OS (`4000`, `22`, `80`, `443`).
- **Icône de qualité** : Fournissez une URL HTTPS directe vers une image PNG ou SVG au format carré (au moins 128x128 px).
Pour être validée et publiée, toute application doit :
- Utiliser une image Docker publique, réputée et maintenue.
- Ne pas nécessiter de droits root privilégiés (`privileged: true`) sauf besoin matériel justifié.
- Persister ses données sous `/mnt/storage/<id>/` pour garantir la compatibilité avec les snapshots Btrfs et les sauvegardes du NAS.
- Être validée avec succès par `pnpm validate:apps`.

View File

@@ -0,0 +1,76 @@
{
"$schema": "../../schemas/app-template.schema.json",
"id": "adguard-home",
"name": "AdGuard Home",
"tagline": "Serveur DNS anti-publicités et protection réseau",
"description": "Bloquez les publicités, trackers et logiciels malveillants sur l'ensemble de votre réseau local sans installer d'extension.",
"longDescription": "AdGuard Home fonctionne comme un résolveur DNS local qui redirige les domaines publicitaires et espions vers un trou noir. Contrôle parental, chiffrement DNS-over-HTTPS (DoH) et DNS-over-TLS (DoT) intégrés.",
"category": "network",
"version": "v0.107.52",
"developer": "AdGuard",
"website": "https://adguard.com/adguard-home.html",
"rating": 4.9,
"downloads": "2.1M",
"sizeMb": 95,
"license": "GPLv3",
"icon": "https://lh3.googleusercontent.com/aida-public/AB6AXuCBj60zmHuzKE1qGtiHzWbH-r-GphCWZzJ38IEgFQU7bjZjZVmDasLyDQNkw6nx7k_z-fil8QsDR_6FGAMYzV3ZUSkadmoELAxpSLzc3zM5mejhGTJaO4PnPmSGwz0l6PfEEC7JSWREk2-ZVqjW9ZCmNrmYsYsjseUJD1eMZgaCxJbM6T6WXvSkkpq3V2P8jR-aAhVNkcQWyaS7R1wYwS7jHi5ZJEpJ_HxYwCaUmsXCXkzlEB1x8zCH8Wc5zee3oPoZQMw",
"screenshots": [],
"firstStartTip": "Accédez au port 3000 lors du premier lancement pour suivre l'assistant d'installation et configurer vos règles de filtrage.",
"composeFile": "docker-compose.yml",
"nginx": {
"recommendedSubdomain": "adguard",
"enableSsl": true,
"mainPort": 80
},
"ports": [
{
"name": "Assistant Initial",
"description": "Assistant de bienvenue",
"privatePort": 3000,
"defaultPublicPort": 3000,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": false
},
{
"name": "Web UI",
"description": "Tableau de bord d'administration",
"privatePort": 80,
"defaultPublicPort": 8086,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": true
},
{
"name": "Serveur DNS",
"description": "Port DNS standard",
"privatePort": 53,
"defaultPublicPort": 53,
"type": "udp",
"protocol": "udp",
"isDefaultNginxTarget": false
}
],
"volumes": [
{
"defaultHostPath": "/mnt/storage/configs/adguard/work",
"containerPath": "/opt/adguardhome/work",
"description": "Statistiques et base de données de filtrage",
"required": true
},
{
"defaultHostPath": "/mnt/storage/configs/adguard/conf",
"containerPath": "/opt/adguardhome/conf",
"description": "Configuration YAML AdGuard",
"required": true
}
],
"env": [
{
"key": "TZ",
"defaultValue": "Europe/Paris",
"label": "Fuseau Horaire",
"required": false
}
]
}

View File

@@ -0,0 +1,12 @@
services:
adguard-home:
image: adguard/adguardhome:latest
container_name: adguard-home
restart: unless-stopped
ports:
- "${ADGUARD_SETUP_PORT:-3000}:3000"
- "${ADGUARD_WEBUI_PORT:-8086}:80"
- "53:53/udp"
volumes:
- "${ADGUARD_WORK_PATH:-/mnt/storage/adguard/work}:/opt/adguardhome/work"
- "${ADGUARD_CONF_PATH:-/mnt/storage/adguard/conf}:/opt/adguardhome/conf"

View File

@@ -0,0 +1,52 @@
{
"$schema": "../../schemas/app-template.schema.json",
"id": "homeassistant",
"name": "Home Assistant",
"tagline": "Domotique open-source et automatisation résidentielle locale",
"description": "Contrôlez vos objets connectés et automatisez votre maison avec un respect total de la vie privée.",
"longDescription": "Home Assistant est la référence de la domotique open-source axée sur le contrôle local et la confidentialité. Compatible avec Zigbee, Z-Wave, Matter, Thread, Philips Hue, Shelly et plus de 2000 intégrations.",
"category": "productivity",
"version": "2024.9.0",
"developer": "Nabu Casa",
"website": "https://home-assistant.io",
"rating": 4.9,
"downloads": "1.8M",
"sizeMb": 720,
"license": "Apache-2.0",
"icon": "https://lh3.googleusercontent.com/aida/AEtjO1WjnP_HXgGADBVTJOn5RqmjguJrbPFWKEFCaOvwv0rLwfj-RewhnFICVeVLWTXcCYR1nMfkOUpyJElogpPjD1PF6RQyGuTXroITu211LaHhu0Pq5PUMn5aOUz8XpZGyLRhjqL4MLwIS4ysK6TVBwcJGwTJ3Nnqh3Gn3ZR4jpzGO3DE8eNOvTgqJo8JDbJVKulZpsp8P--d3l1xIdRpEZkVvl_H_ESPZ5iI0Pwe_w3X8iUuv3PmxIrM75fM",
"screenshots": [],
"firstStartTip": "La découverte automatique des appareils de votre réseau local démarrera dès que vous aurez créé votre compte administrateur.",
"composeFile": "docker-compose.yml",
"nginx": {
"recommendedSubdomain": "domotique",
"enableSsl": true,
"mainPort": 8123
},
"ports": [
{
"name": "Web UI",
"description": "Interface Web Lovelace",
"privatePort": 8123,
"defaultPublicPort": 8123,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": true
}
],
"volumes": [
{
"defaultHostPath": "/mnt/storage/configs/homeassistant",
"containerPath": "/config",
"description": "Fichiers YAML et intégrations",
"required": true
}
],
"env": [
{
"key": "TZ",
"defaultValue": "Europe/Paris",
"label": "Fuseau Horaire",
"required": false
}
]
}

View File

@@ -0,0 +1,11 @@
services:
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: homeassistant
restart: unless-stopped
ports:
- "${HASS_PORT:-8123}:8123"
volumes:
- "${HASS_CONFIG_PATH:-/mnt/storage/homeassistant}:/config"
environment:
- TZ=${TZ:-Europe/Paris}

View File

@@ -0,0 +1,64 @@
{
"$schema": "../../schemas/app-template.schema.json",
"id": "immich",
"name": "Immich",
"tagline": "Solution de sauvegarde et gestion de photos auto-hébergée haute performance",
"description": "Alternative moderne à Google Photos avec reconnaissance faciale IA, géolocalisation et sauvegarde mobile transparente.",
"longDescription": "Immich est une solution ultra-rapide de sauvegarde et de gestion de photos et vidéos conçue pour les serveurs NAS. Elle intègre des algorithmes d'apprentissage automatique pour la détection des visages, la recherche sémantique par mots-clés et l'affichage chronologique instantané.",
"category": "media",
"version": "v1.118.0",
"developer": "FUTO / Immich Team",
"website": "https://immich.app",
"rating": 4.9,
"downloads": "1.4M",
"sizeMb": 850,
"license": "AGPLv3",
"icon": "https://lh3.googleusercontent.com/aida-public/AB6AXuAy_b2LhyUHS-M_nrXk8hHugSt-bppiAhq8zmutrhlxbvrjvwluPLGolxCoPWALQt6I66jPVrEiIrrbDLH_mmuKSriJLUOGh2dYOlGA6lgfXNQEYKHSektq5UmPU0lLaG6u8TWE9m9VDeQM2MwD_jSg60NFvQUNwYRkgJzt0Fj-HFrAI401LhBpZIXikMI1JR9k2-GL2qIOnbNYWqc8tRiQ2zPvJDlJ_wYmNMeGdv-Rfg89FEBjuKA9_g",
"screenshots": [],
"firstStartTip": "Téléchargez l'application mobile Immich (iOS / Android) et connectez-vous avec l'URL de votre serveur pour activer la sauvegarde automatique de vos photos.",
"composeFile": "docker-compose.yml",
"nginx": {
"recommendedSubdomain": "photos",
"enableSsl": true,
"mainPort": 2283
},
"ports": [
{
"name": "Web UI & API",
"description": "Interface Web et API mobile",
"privatePort": 2283,
"defaultPublicPort": 2283,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": true
}
],
"volumes": [
{
"defaultHostPath": "/mnt/storage/photos",
"containerPath": "/usr/src/app/upload",
"description": "Dossier de stockage principal des photos",
"required": true
},
{
"defaultHostPath": "/mnt/storage/database/immich",
"containerPath": "/var/lib/postgresql/data",
"description": "Base de données PostgreSQL/pgvector",
"required": true
}
],
"env": [
{
"key": "DB_DATABASE_NAME",
"defaultValue": "immich",
"label": "Nom de base de données",
"required": true
},
{
"key": "TZ",
"defaultValue": "Europe/Paris",
"label": "Fuseau Horaire",
"required": false
}
]
}

View File

@@ -0,0 +1,13 @@
services:
immich:
image: ghcr.io/immich-app/immich-server:release
container_name: immich
restart: unless-stopped
ports:
- "${IMMICH_PORT:-2283}:2283"
volumes:
- "${IMMICH_PHOTOS_PATH:-/mnt/storage/photos}:/usr/src/app/upload"
- "${IMMICH_DB_PATH:-/mnt/storage/database/immich}:/var/lib/postgresql/data"
environment:
- DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich}
- TZ=${TZ:-Europe/Paris}

View File

@@ -0,0 +1,58 @@
{
"$schema": "../../schemas/app-template.schema.json",
"id": "jellyfin",
"name": "Jellyfin Media Server",
"tagline": "Système multimédia 100% open-source sans abonnement",
"description": "Streamez tous vos films, séries, musiques et livres audio sur n'importe quel appareil sans tracking ni frais.",
"longDescription": "Jellyfin est le système multimédia gratuit qui vous donne le contrôle total de vos médias. Aucune formule payante, aucune collecte de données télémétriques, transcodage matériel Nvidia/Intel/VAAPI inclus.",
"category": "media",
"version": "10.9.11",
"developer": "Jellyfin Project",
"website": "https://jellyfin.org",
"rating": 4.9,
"downloads": "1.1M",
"sizeMb": 390,
"license": "GPLv2",
"icon": "https://lh3.googleusercontent.com/aida-public/AB6AXuAy_b2LhyUHS-M_nrXk8hHugSt-bppiAhq8zmutrhlxbvrjvwluPLGolxCoPWALQt6I66jPVrEiIrrbDLH_mmuKSriJLUOGh2dYOlGA6lgfXNQEYKHSektq5UmPU0lLaG6u8TWE9m9VDeQM2MwD_jSg60NFvQUNwYRkgJzt0Fj-HFrAI401LhBpZIXikMI1JR9k2-GL2qIOnbNYWqc8tRiQ2zPvJDlJ_wYmNMeGdv-Rfg89FEBjuKA9_g",
"screenshots": [],
"firstStartTip": "Suivez l'assistant de configuration initial pour désigner vos dossiers de films, séries et musiques situés sur /mnt/storage.",
"composeFile": "docker-compose.yml",
"nginx": {
"recommendedSubdomain": "media",
"enableSsl": true,
"mainPort": 8096
},
"ports": [
{
"name": "Web UI",
"description": "Interface Web Jellyfin HTTP",
"privatePort": 8096,
"defaultPublicPort": 8096,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": true
}
],
"volumes": [
{
"defaultHostPath": "/mnt/storage/media",
"containerPath": "/media",
"description": "Dossier de stockage des médias",
"required": true
},
{
"defaultHostPath": "/mnt/storage/configs/jellyfin",
"containerPath": "/config",
"description": "Configurations & Cache",
"required": true
}
],
"env": [
{
"key": "JELLYFIN_PUBLISHED_SERVER_URL",
"defaultValue": "",
"label": "URL publique du serveur",
"required": false
}
]
}

View File

@@ -0,0 +1,12 @@
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
ports:
- "${JELLYFIN_PORT:-8096}:8096"
volumes:
- "${JELLYFIN_CONFIG_PATH:-/mnt/storage/jellyfin/config}:/config"
- "${JELLYFIN_MEDIA_PATH:-/mnt/storage/media}:/media"
environment:
- TZ=${TZ:-Europe/Paris}

View File

@@ -0,0 +1,64 @@
{
"$schema": "../../schemas/app-template.schema.json",
"id": "nextcloud",
"name": "Nextcloud Hub",
"tagline": "Suite collaborative complète et cloud souverain privé",
"description": "Stockage de fichiers sécurisé, partage, agenda, contacts, suite bureautique et synchronisation multi-appareils.",
"longDescription": "Nextcloud Hub offre une plateforme de productivité sécurisée et souveraine sur votre propre matériel. Synchronisez automatiquement vos documents, photos et projets en toute confidentialité avec chiffrement de bout en bout.",
"category": "cloud",
"version": "29.0.5",
"developer": "Nextcloud GmbH",
"website": "https://nextcloud.com",
"rating": 4.9,
"downloads": "3.2M",
"sizeMb": 520,
"license": "AGPLv3",
"icon": "https://lh3.googleusercontent.com/aida/AEtjO1VKuphtTswgrzdubG5GP40se6rWNSEDBpT8yQaRKXCe1I4viol3q2Mf8MfVnMl7zLeHPaLKIKYiHxqE3e6wDEch1xMM4UL64N6nb-g1TaPZKldlBTdBl13Acbg7Yj1S1nRZWEToR6HcqdipU2wKDL3OJskj2RDyhWO0eQ_WsjGevNiB8CJ8l76mcBY6Oq1LEEqcg6NuUArWe5tV-wEYlnf33Rpdz5hwAK8J3giORtJIW5ewwRdW",
"screenshots": [],
"firstStartTip": "Lors de la première ouverture, créez votre compte administrateur. Vos fichiers sont automatiquement sauvegardés sur /mnt/storage/cloud.",
"composeFile": "docker-compose.yml",
"nginx": {
"recommendedSubdomain": "cloud",
"enableSsl": true,
"mainPort": 80
},
"ports": [
{
"name": "Interface Web",
"description": "Port HTTP Nextcloud",
"privatePort": 80,
"defaultPublicPort": 8080,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": true
}
],
"volumes": [
{
"defaultHostPath": "/mnt/storage/cloud/data",
"containerPath": "/var/www/html/data",
"description": "Répertoire des fichiers utilisateurs",
"required": true
},
{
"defaultHostPath": "/mnt/storage/cloud/config",
"containerPath": "/var/www/html/config",
"description": "Configuration du serveur",
"required": true
}
],
"env": [
{
"key": "MYSQL_DATABASE",
"defaultValue": "nextcloud",
"label": "Base de données",
"required": true
},
{
"key": "OVERWRITEPROTOCOL",
"defaultValue": "https",
"label": "Protocole forcé",
"required": false
}
]
}

View File

@@ -0,0 +1,13 @@
services:
nextcloud:
image: nextcloud:apache
container_name: nextcloud
restart: unless-stopped
ports:
- "${NEXTCLOUD_PORT:-8080}:80"
volumes:
- "${NEXTCLOUD_DATA_PATH:-/mnt/storage/cloud/data}:/var/www/html/data"
- "${NEXTCLOUD_CONFIG_PATH:-/mnt/storage/cloud/config}:/var/www/html/config"
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE:-nextcloud}
- OVERWRITEPROTOCOL=${OVERWRITEPROTOCOL:-https}

View File

@@ -0,0 +1,70 @@
{
"$schema": "../../schemas/app-template.schema.json",
"id": "plex",
"name": "Plex Media Server",
"tagline": "Plateforme multimédia de streaming personnel et transcodage",
"description": "Organisez vos collections vidéo et audio avec transcodage matériel haute définition et accès à distance.",
"longDescription": "Plex organise vos vidéos, musiques et photos et vous permet de les diffuser sur smart TV, smartphones, tablettes et ordinateurs avec récupération automatique des jaquettes et résumés.",
"category": "media",
"version": "1.40.4",
"developer": "Plex Inc.",
"website": "https://plex.tv",
"rating": 4.8,
"downloads": "2.5M",
"sizeMb": 450,
"license": "Propriétaire",
"icon": "https://lh3.googleusercontent.com/aida-public/AB6AXuDie89CF9NDXhXh2iF45jSzhlPVthvKISdkuigCYrgE2MDuWB9vM5PDXW9YveUs6cYM3N7jcJeIc65oJA0o3RdU7zkxBxfMyrkY-ptnzW0oXmrabRFTNjb-yZhouMULt5WPh6VkbJikBwx4UlY-w5Nq9Dgn1HpG2n9VQQ_gC9mX38oC3J2PucdHllx8ar_NpLd5VwRI76ay0YCV8fwy9-B8MdkeDjvKcCn4ty9O5_te_7Cj32fLFDH8eQ",
"screenshots": [],
"firstStartTip": "Connectez votre compte Plex et associez votre serveur pour profiter du transcodage et de l'accès distant.",
"composeFile": "docker-compose.yml",
"nginx": {
"recommendedSubdomain": "plex",
"enableSsl": true,
"mainPort": 32400
},
"ports": [
{
"name": "Web UI",
"description": "Interface Web Plex",
"privatePort": 32400,
"defaultPublicPort": 32400,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": true
}
],
"volumes": [
{
"defaultHostPath": "/mnt/storage/media/movies",
"containerPath": "/movies",
"description": "Films & Vidéos",
"required": true
},
{
"defaultHostPath": "/mnt/storage/media/tv",
"containerPath": "/tv",
"description": "Séries TV",
"required": true
},
{
"defaultHostPath": "/mnt/storage/configs/plex",
"containerPath": "/config",
"description": "Métadonnées et base Plex",
"required": true
}
],
"env": [
{
"key": "VERSION",
"defaultValue": "docker",
"label": "Version channel",
"required": false
},
{
"key": "PLEX_CLAIM",
"defaultValue": "",
"label": "Code Claim Plex.tv",
"required": false
}
]
}

View File

@@ -0,0 +1,14 @@
services:
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
restart: unless-stopped
ports:
- "${PLEX_PORT:-32400}:32400"
volumes:
- "${PLEX_CONFIG_PATH:-/mnt/storage/plex/config}:/config"
- "${PLEX_MEDIA_PATH:-/mnt/storage/media}:/media"
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ:-Europe/Paris}

View File

@@ -0,0 +1,51 @@
{
"$schema": "../../schemas/app-template.schema.json",
"id": "portainer",
"name": "Portainer CE",
"tagline": "Gestionnaire et tableau de bord de conteneurs Docker",
"description": "Interface graphique intuitive pour gérer vos conteneurs, images, volumes et réseaux Docker.",
"longDescription": "Portainer Community Edition est l'outil visuel le plus populaire pour gérer facilement les environnements Docker. Déployez des stacks Docker Compose, visualisez les logs en temps réel et surveillez l'utilisation des ressources.",
"category": "utilities",
"version": "2.21.3",
"developer": "Portainer.io",
"website": "https://portainer.io",
"rating": 4.9,
"downloads": "4.5M",
"sizeMb": 280,
"license": "zlib",
"icon": "https://lh3.googleusercontent.com/aida/AEtjO1VKuphtTswgrzdubG5GP40se6rWNSEDBpT8yQaRKXCe1I4viol3q2Mf8MfVnMl7zLeHPaLKIKYiHxqE3e6wDEch1xMM4UL64N6nb-g1TaPZKldlBTdBl13Acbg7Yj1S1nRZWEToR6HcqdipU2wKDL3OJskj2RDyhWO0eQ_WsjGevNiB8CJ8l76mcBY6Oq1LEEqcg6NuUArWe5tV-wEYlnf33Rpdz5hwAK8J3giORtJIW5ewwRdW",
"screenshots": [],
"firstStartTip": "Créez votre mot de passe administrateur dans les 5 minutes suivant le premier démarrage pour sécuriser l'accès.",
"composeFile": "docker-compose.yml",
"nginx": {
"recommendedSubdomain": "portainer",
"enableSsl": true,
"mainPort": 9443
},
"ports": [
{
"name": "Web UI",
"description": "Interface d'administration HTTPS",
"privatePort": 9443,
"defaultPublicPort": 9443,
"type": "tcp",
"protocol": "https",
"isDefaultNginxTarget": true
}
],
"volumes": [
{
"defaultHostPath": "/var/run/docker.sock",
"containerPath": "/var/run/docker.sock",
"description": "Socket Docker de l'hôte",
"required": true
},
{
"defaultHostPath": "/mnt/storage/configs/portainer",
"containerPath": "/data",
"description": "Données et configuration de Portainer",
"required": true
}
],
"env": []
}

View File

@@ -0,0 +1,10 @@
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
ports:
- "${PORTAINER_PORT:-9443}:9443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "${PORTAINER_DATA_PATH:-/mnt/storage/portainer/data}:/data"

View File

@@ -0,0 +1,58 @@
{
"$schema": "../../schemas/app-template.schema.json",
"id": "qbittorrent",
"name": "qBittorrent Web",
"tagline": "Client BitTorrent haute performance avec interface web",
"description": "Téléchargez vos fichiers et distributions Linux avec gestion avancée des vitesses et planificateur.",
"longDescription": "Client BitTorrent open source écrit en C++ avec interface web réactive, support du chiffrement, gestion des flux RSS et moteur de recherche intégré.",
"category": "utilities",
"version": "4.6.6",
"developer": "qBittorrent Project",
"website": "https://qbittorrent.org",
"rating": 4.8,
"downloads": "1.3M",
"sizeMb": 110,
"license": "GPLv2",
"icon": "https://lh3.googleusercontent.com/aida-public/AB6AXuCT_RD64GcIA6XYx304uhwSN58YeNQYcgKoGBcwIaVjUusiCgx6GeRuwQ8D58ToYJhxmiS-mJynVz630mZ3kT1bgJe4-qtEbJsMWZYSIxb7aPk-Q3zpoDxfBkEk3vrUM1qznvIDP6KMVounJoAVpka5oKZSrk6pZxlXV3mIMg5yDNqkD39D_Fg4tTStU2T5k2F1SyIYrHRcyAswaevLJDGxlEujRu6GP1CadLUl9gul1c4MheqSMKE4eg",
"screenshots": [],
"firstStartTip": "Identifiants par défaut : Nom d'utilisateur 'admin' et mot de passe temporaire affiché dans les logs du conteneur.",
"composeFile": "docker-compose.yml",
"nginx": {
"recommendedSubdomain": "torrents",
"enableSsl": true,
"mainPort": 8080
},
"ports": [
{
"name": "Web UI",
"description": "Interface Web qBittorrent",
"privatePort": 8080,
"defaultPublicPort": 8085,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": true
}
],
"volumes": [
{
"defaultHostPath": "/mnt/storage/downloads",
"containerPath": "/downloads",
"description": "Dossier des téléchargements",
"required": true
},
{
"defaultHostPath": "/mnt/storage/configs/qbittorrent",
"containerPath": "/config",
"description": "Configuration client",
"required": true
}
],
"env": [
{
"key": "WEBUI_PORT",
"defaultValue": "8080",
"label": "Port interne WebUI",
"required": false
}
]
}

View File

@@ -0,0 +1,17 @@
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
restart: unless-stopped
security_opt:
- apparmor:unconfined
ports:
- "${QBIT_WEBUI_PORT:-8085}:8080"
volumes:
- "${QBIT_CONFIG_PATH:-/mnt/storage/qbittorrent/config}:/config"
- "${QBIT_DOWNLOADS_PATH:-/mnt/storage/downloads}:/downloads"
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ:-Europe/Paris}
- WEBUI_PORT=8080

View File

@@ -0,0 +1,79 @@
{
"$schema": "../../schemas/app-template.schema.json",
"id": "retroarch",
"name": "RetroArch Cloud Gaming",
"tagline": "Émulateur multi-système avec streaming Web & saves serveur",
"description": "Jouez à vos classiques rétro (SNES, GBA, PS1, Mega Drive, Arcade) directement dans votre navigateur avec vos sauvegardes centralisées sur Irbis OS.",
"longDescription": "RetroArch est le frontend de référence pour les émulateurs de jeux vidéo. Cette intégration Docker conteneurisée pour Irbis OS permet de lancer vos jeux stockés sur le serveur tout en conservant toutes vos sauvegardes et savestates sur votre NAS, avec accès web KasmVNC/WebGL et support complet des manettes de jeu.",
"category": "media",
"version": "1.19.1",
"developer": "Libretro Team",
"website": "https://www.retroarch.com",
"rating": 4.9,
"downloads": "850K",
"sizeMb": 420,
"license": "GPLv3",
"icon": "https://raw.githubusercontent.com/libretro/RetroArch/master/media/retroarch.png",
"screenshots": [],
"firstStartTip": "Ouvrez l'application Irbis Games pour configurer votre dossier de jeux et lancer vos ROMs d'un simple clic.",
"image": "lscr.io/linuxserver/retroarch:latest",
"composeFile": "docker-compose.yml",
"nginx": {
"recommendedSubdomain": "games",
"enableSsl": true,
"mainPort": 3000
},
"ports": [
{
"name": "Web UI",
"description": "Interface Web RetroArch KasmVNC HTTP",
"privatePort": 3000,
"defaultPublicPort": 3000,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": true
},
{
"name": "HTTPS UI",
"description": "Interface Web RetroArch HTTPS",
"privatePort": 3001,
"defaultPublicPort": 3001,
"type": "tcp",
"protocol": "https"
}
],
"volumes": [
{
"defaultHostPath": "/mnt/storage/games/roms",
"containerPath": "/roms",
"description": "Dossier des ROMs de jeux",
"required": true
},
{
"defaultHostPath": "/mnt/storage/games/saves",
"containerPath": "/saves",
"description": "Dossier des sauvegardes de jeux",
"required": true
},
{
"defaultHostPath": "/mnt/storage/configs/retroarch",
"containerPath": "/config",
"description": "Configuration & Cores RetroArch",
"required": true
}
],
"env": [
{
"key": "CUSTOM_USER",
"defaultValue": "",
"label": "Utilisateur KasmVNC (Optionnel)",
"required": false
},
{
"key": "PASSWORD",
"defaultValue": "",
"label": "Mot de passe Web (Optionnel)",
"required": false
}
]
}

View File

@@ -0,0 +1,21 @@
services:
retroarch:
image: lscr.io/linuxserver/retroarch:latest
container_name: retroarch
restart: unless-stopped
security_opt:
- seccomp:unconfined
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ:-Europe/Paris}
- CUSTOM_USER=${CUSTOM_USER:-}
- PASSWORD=${PASSWORD:-}
volumes:
- "${RETROARCH_CONFIG_PATH:-/mnt/storage/configs/retroarch}:/config"
- "${RETROARCH_ROMS_PATH:-/mnt/storage/games/roms}:/roms"
- "${RETROARCH_SAVES_PATH:-/mnt/storage/games/saves}:/saves"
ports:
- "${RETROARCH_PORT:-3000}:3000"
- "${RETROARCH_HTTPS_PORT:-3001}:3001"
shm_size: "1gb"

View File

@@ -0,0 +1,67 @@
{
"$schema": "../../schemas/app-template.schema.json",
"id": "vaultwarden",
"name": "Vaultwarden",
"tagline": "Gestionnaire de mots de passe Bitwarden auto-hébergé léger",
"description": "Coffre-fort chiffré de bout en bout pour vos identifiants, cartes bancaires et notes sécurisées.",
"longDescription": "Implémentation alternative et ultra-légère de l'API Bitwarden en Rust. Compatible avec toutes les extensions officielles de navigateur, applications iOS, Android et ordinateurs de bureau.",
"category": "security",
"version": "1.32.1",
"developer": "Dani Garcia",
"website": "https://github.com/dani-garcia/vaultwarden",
"rating": 4.9,
"downloads": "950K",
"sizeMb": 85,
"license": "AGPLv3",
"icon": "https://lh3.googleusercontent.com/aida-public/AB6AXuCBj60zmHuzKE1qGtiHzWbH-r-GphCWZzJ38IEgFQU7bjZjZVmDasLyDQNkw6nx7k_z-fil8QsDR_6FGAMYzV3ZUSkadmoELAxpSLzc3zM5mejhGTJaO4PnPmSGwz0l6PfEEC7JSWREk2-ZVqjW9ZCmNrmYsYsjseUJD1eMZgaCxJbM6T6WXvSkkpq3V2P8jR-aAhVNkcQWyaS7R1wYwS7jHi5ZJEpJ_HxYwCaUmsXCXkzlEB1x8zCH8Wc5zee3oPoZQMw",
"screenshots": [],
"firstStartTip": "Pour une sécurité optimale, utilisez un nom de domaine avec SSL (HTTPS obligatoire pour le chiffrement Bitwarden). Créez ensuite votre coffre-fort.",
"composeFile": "docker-compose.yml",
"nginx": {
"recommendedSubdomain": "vault",
"enableSsl": true,
"mainPort": 80
},
"ports": [
{
"name": "Web UI & API",
"description": "Interface Web & API Vault",
"privatePort": 80,
"defaultPublicPort": 8000,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": true
},
{
"name": "WebSocket",
"description": "Notifications temps réel",
"privatePort": 3012,
"defaultPublicPort": 3012,
"type": "tcp",
"protocol": "http",
"isDefaultNginxTarget": false
}
],
"volumes": [
{
"defaultHostPath": "/mnt/storage/vaultwarden/data",
"containerPath": "/data",
"description": "Base SQLite chiffrée",
"required": true
}
],
"env": [
{
"key": "WEBSOCKET_ENABLED",
"defaultValue": "true",
"label": "Support WebSocket en direct",
"required": false
},
{
"key": "SIGNUPS_ALLOWED",
"defaultValue": "true",
"label": "Autoriser les inscriptions",
"required": false
}
]
}

View File

@@ -0,0 +1,13 @@
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
ports:
- "${VAULTWARDEN_PORT:-8000}:80"
- "${VAULTWARDEN_WS_PORT:-3012}:3012"
volumes:
- "${VAULTWARDEN_DATA_PATH:-/mnt/storage/vaultwarden/data}:/data"
environment:
- WEBSOCKET_ENABLED=${WEBSOCKET_ENABLED:-true}
- SIGNUPS_ALLOWED=${SIGNUPS_ALLOWED:-true}

View File

@@ -0,0 +1,244 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://irbis-os.org/schemas/app-template.schema.json",
"title": "Irbis OS Application Template",
"description": "Schéma de définition pour les applications communautaires de l'App Store Irbis OS",
"type": "object",
"required": [
"id",
"name",
"tagline",
"description",
"category",
"version",
"developer"
],
"additionalProperties": false,
"properties": {
"$schema": {
"type": "string",
"description": "URI du schéma JSON utilisé pour l'auto-complétion et la validation"
},
"id": {
"type": "string",
"pattern": "^[a-z0-9-]+$",
"minLength": 2,
"maxLength": 64,
"description": "Identifiant unique de l'application en minuscules (ex: nextcloud, homeassistant)"
},
"name": {
"type": "string",
"minLength": 2,
"maxLength": 100,
"description": "Nom complet d'affichage de l'application"
},
"tagline": {
"type": "string",
"minLength": 5,
"maxLength": 150,
"description": "Accroche courte résumant la fonction principale de l'application"
},
"description": {
"type": "string",
"minLength": 10,
"maxLength": 500,
"description": "Description concise de l'application (affichée sur la carte)"
},
"longDescription": {
"type": "string",
"minLength": 20,
"maxLength": 4000,
"description": "Description détaillée affichée dans la modale de l'App Store"
},
"icon": {
"type": "string",
"description": "Nom du fichier d'icône/image de garde (ex: icon.png) ou URL directe"
},
"screenshots": {
"type": "array",
"items": {
"type": "string"
},
"description": "Noms des fichiers de captures d'écran de démo (ex: screenshot1.png) ou URLs directes"
},
"firstStartTip": {
"type": "string",
"description": "Astuce et guide de premier démarrage affichés après l'installation"
},
"composeFile": {
"type": "string",
"description": "Nom du fichier Docker Compose dans le dossier de l'app (défaut: docker-compose.yml)"
},
"nginx": {
"type": "object",
"description": "Configuration du domaine et reverse proxy Nginx automatique",
"properties": {
"recommendedSubdomain": {
"type": "string",
"description": "Sous-domaine recommandé (ex: cloud, vault, media)"
},
"enableSsl": {
"type": "boolean",
"description": "Activer le certificat SSL Let's Encrypt / HTTPS par défaut"
},
"mainPort": {
"type": "integer",
"description": "Port cible principal pour le reverse proxy Nginx"
}
}
},
"category": {
"type": "string",
"enum": ["media", "cloud", "productivity", "security", "utilities", "development", "home_automation", "network"],
"description": "Catégorie de l'application dans l'App Store"
},
"version": {
"type": "string",
"pattern": "^[a-zA-Z0-9.-]+$",
"description": "Version du paquet ou du conteneur (ex: 1.0.0, stable, 2024.9.0)"
},
"developer": {
"type": "string",
"minLength": 2,
"maxLength": 100,
"description": "Nom de l'auteur, de l'entreprise ou du projet open source"
},
"website": {
"type": "string",
"format": "uri",
"description": "Site web officiel ou dépôt GitHub de l'application"
},
"rating": {
"type": "number",
"minimum": 1.0,
"maximum": 5.0,
"description": "Note moyenne indicative (entre 1.0 et 5.0)"
},
"downloads": {
"type": "string",
"description": "Indication du volume d'utilisateurs ou téléchargements (ex: 1.2M, 500K)"
},
"sizeMb": {
"type": "number",
"minimum": 1,
"maximum": 50000,
"description": "Taille estimée de l'image Docker en mégaoctets"
},
"license": {
"type": "string",
"description": "Licence logicielle (ex: MIT, AGPLv3, Apache-2.0, Propriétaire)"
},
"image": {
"type": "string",
"minLength": 3,
"maxLength": 255,
"description": "Image Docker officielle ou vérifiée (ex: nextcloud:apache, lscr.io/linuxserver/plex:latest)"
},
"defaultPort": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "Port d'écoute public principal par défaut"
},
"ports": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["privatePort", "defaultPublicPort"],
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "Nom lisible du service réseau (ex: Web UI, API, DNS)"
},
"privatePort": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "Port interne du conteneur Docker"
},
"defaultPublicPort": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "Port hôte suggéré par défaut"
},
"description": {
"type": "string",
"description": "Description du rôle du port (ex: Interface Web, Flux RTSP, WebSocket)"
},
"type": {
"type": "string",
"enum": ["tcp", "udp"],
"description": "Protocole de transport réseau du port"
},
"protocol": {
"type": "string",
"enum": ["http", "https", "tcp", "udp"],
"description": "Protocole applicatif pour la redirection Nginx"
},
"isDefaultNginxTarget": {
"type": "boolean",
"description": "Indique si ce port est la cible principale du domaine Nginx automatique"
}
}
}
},
"volumes": {
"type": "array",
"items": {
"type": "object",
"required": ["defaultHostPath", "containerPath", "required"],
"additionalProperties": false,
"properties": {
"defaultHostPath": {
"type": "string",
"pattern": "^/.*",
"description": "Chemin hôte recommandé pour les données persistantes (généralement sous /mnt/storage/...)"
},
"containerPath": {
"type": "string",
"pattern": "^/.*",
"description": "Chemin absolu de destination à l'intérieur du conteneur"
},
"description": {
"type": "string",
"description": "Explication de la destination (ex: Répertoire des photos, Base de données)"
},
"required": {
"type": "boolean",
"description": "Indique si ce volume est indispensable au bon fonctionnement"
}
}
}
},
"env": {
"type": "array",
"items": {
"type": "object",
"required": ["key", "defaultValue", "label", "required"],
"additionalProperties": false,
"properties": {
"key": {
"type": "string",
"pattern": "^[A-Z0-9_]+$",
"description": "Nom de la variable d'environnement (ex: TZ, DB_NAME)"
},
"defaultValue": {
"type": "string",
"description": "Valeur par défaut ou exemple"
},
"label": {
"type": "string",
"description": "Nom convivial affiché dans l'interface"
},
"required": {
"type": "boolean",
"description": "Indique si la variable est obligatoire"
}
}
}
}
}
}