v1.2.json 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. [
  2. {
  3. "key": "general",
  4. "title": "General",
  5. "vars": [
  6. {
  7. "name": "service_name",
  8. "description": "Service name",
  9. "type": "str",
  10. "required": true
  11. },
  12. {
  13. "name": "container_name",
  14. "description": "Container name",
  15. "type": "str"
  16. },
  17. {
  18. "name": "container_hostname",
  19. "description": "Container internal hostname",
  20. "type": "str"
  21. },
  22. {
  23. "name": "container_timezone",
  24. "description": "Container timezone (e.g., Europe/Berlin)",
  25. "type": "str"
  26. },
  27. {
  28. "name": "user_uid",
  29. "description": "User UID for container process",
  30. "type": "int",
  31. "default": 1000
  32. },
  33. {
  34. "name": "user_gid",
  35. "description": "User GID for container process",
  36. "type": "int",
  37. "default": 1000
  38. },
  39. {
  40. "name": "container_loglevel",
  41. "description": "Container log level",
  42. "type": "enum",
  43. "options": ["debug", "info", "warn", "error"]
  44. },
  45. {
  46. "name": "restart_policy",
  47. "description": "Container restart policy",
  48. "type": "enum",
  49. "options": ["unless-stopped", "always", "on-failure", "no"],
  50. "default": "unless-stopped",
  51. "required": true
  52. }
  53. ]
  54. },
  55. {
  56. "key": "network",
  57. "title": "Network",
  58. "vars": [
  59. {
  60. "name": "network_mode",
  61. "description": "Docker network mode",
  62. "type": "enum",
  63. "options": ["bridge", "host", "macvlan"],
  64. "extra": "bridge=default Docker networking, host=use host network stack, macvlan=dedicated MAC address on physical network"
  65. },
  66. {
  67. "name": "network_name",
  68. "description": "Docker network name",
  69. "type": "str",
  70. "default": "bridge",
  71. "needs": "network_mode=bridge,macvlan",
  72. "required": true
  73. },
  74. {
  75. "name": "network_external",
  76. "description": "Use existing Docker network (external)",
  77. "type": "bool",
  78. "default": false,
  79. "needs": "network_mode=bridge,macvlan"
  80. },
  81. {
  82. "name": "network_macvlan_ipv4_address",
  83. "description": "Static IP address for container",
  84. "type": "str",
  85. "default": "192.168.1.253",
  86. "needs": "network_mode=macvlan",
  87. "required": true
  88. },
  89. {
  90. "name": "network_macvlan_parent_interface",
  91. "description": "Host network interface name",
  92. "type": "str",
  93. "default": "eth0",
  94. "needs": "network_mode=macvlan",
  95. "required": true
  96. },
  97. {
  98. "name": "network_macvlan_subnet",
  99. "description": "Network subnet in CIDR notation",
  100. "type": "str",
  101. "default": "192.168.1.0/24",
  102. "needs": "network_mode=macvlan",
  103. "required": true
  104. },
  105. {
  106. "name": "network_macvlan_gateway",
  107. "description": "Network gateway IP address",
  108. "type": "str",
  109. "default": "192.168.1.1",
  110. "needs": "network_mode=macvlan",
  111. "required": true
  112. }
  113. ]
  114. },
  115. {
  116. "key": "ports",
  117. "title": "Ports",
  118. "needs": "network_mode!=host,macvlan",
  119. "description": "Expose service ports to the host.",
  120. "vars": [
  121. {
  122. "name": "ports_http",
  123. "description": "HTTP port on host",
  124. "type": "int",
  125. "needs": "traefik_enabled=false",
  126. "default": 8080,
  127. "required": true
  128. },
  129. {
  130. "name": "ports_https",
  131. "description": "HTTPS port on host",
  132. "type": "int",
  133. "needs": "traefik_enabled=false",
  134. "default": 8443,
  135. "required": true
  136. },
  137. {
  138. "name": "ports_ssh",
  139. "description": "SSH port on host",
  140. "type": "int",
  141. "default": 22,
  142. "required": true
  143. },
  144. {
  145. "name": "ports_dns",
  146. "description": "DNS port on host",
  147. "type": "int",
  148. "default": 53,
  149. "required": true
  150. },
  151. {
  152. "name": "ports_dhcp",
  153. "description": "DHCP port on host",
  154. "type": "int",
  155. "default": 67,
  156. "required": true
  157. },
  158. {
  159. "name": "ports_smtp",
  160. "description": "SMTP port on host",
  161. "type": "int",
  162. "default": 25,
  163. "required": true
  164. }
  165. ]
  166. },
  167. {
  168. "key": "traefik",
  169. "title": "Traefik",
  170. "toggle": "traefik_enabled",
  171. "needs": "network_mode!=host,macvlan",
  172. "description": "Traefik routes external traffic to your service.",
  173. "vars": [
  174. {
  175. "name": "traefik_enabled",
  176. "description": "Enable Traefik reverse proxy integration",
  177. "type": "bool",
  178. "default": false
  179. },
  180. {
  181. "name": "traefik_network",
  182. "description": "Traefik network name",
  183. "type": "str",
  184. "default": "traefik",
  185. "required": true
  186. },
  187. {
  188. "name": "traefik_host",
  189. "description": "Service subdomain or full hostname (e.g., 'app' or 'app.example.com')",
  190. "type": "str",
  191. "required": true
  192. },
  193. {
  194. "name": "traefik_domain",
  195. "description": "Base domain (e.g., example.com)",
  196. "type": "str",
  197. "default": "home.arpa",
  198. "required": true
  199. },
  200. {
  201. "name": "traefik_entrypoint",
  202. "description": "HTTP entrypoint (non-TLS)",
  203. "type": "str",
  204. "default": "web",
  205. "required": true
  206. }
  207. ]
  208. },
  209. {
  210. "key": "traefik_tls",
  211. "title": "Traefik TLS/SSL",
  212. "toggle": "traefik_tls_enabled",
  213. "needs": "traefik_enabled=true;network_mode!=host,macvlan",
  214. "description": "Enable HTTPS/TLS for Traefik with certificate management.",
  215. "vars": [
  216. {
  217. "name": "traefik_tls_enabled",
  218. "description": "Enable HTTPS/TLS",
  219. "type": "bool",
  220. "default": true
  221. },
  222. {
  223. "name": "traefik_tls_entrypoint",
  224. "description": "TLS entrypoint",
  225. "type": "str",
  226. "default": "websecure",
  227. "required": true
  228. },
  229. {
  230. "name": "traefik_tls_certresolver",
  231. "description": "Traefik certificate resolver name",
  232. "type": "str",
  233. "default": "cloudflare",
  234. "required": true
  235. }
  236. ]
  237. },
  238. {
  239. "key": "volume",
  240. "title": "Volume Storage",
  241. "description": "Configure persistent storage for your service.",
  242. "vars": [
  243. {
  244. "name": "volume_mode",
  245. "description": "Volume storage backend",
  246. "type": "enum",
  247. "options": ["local", "mount", "nfs"],
  248. "default": "local",
  249. "extra": "local: Docker-managed volumes | mount: Bind mount from host | nfs: Network filesystem"
  250. },
  251. {
  252. "name": "volume_mount_path",
  253. "description": "Host path for bind mounts",
  254. "type": "str",
  255. "default": "/mnt/storage",
  256. "needs": "volume_mode=mount",
  257. "required": true
  258. },
  259. {
  260. "name": "volume_nfs_server",
  261. "description": "NFS server address",
  262. "type": "str",
  263. "default": "192.168.1.1",
  264. "needs": "volume_mode=nfs",
  265. "required": true
  266. },
  267. {
  268. "name": "volume_nfs_path",
  269. "description": "NFS export path",
  270. "type": "str",
  271. "default": "/export",
  272. "needs": "volume_mode=nfs",
  273. "required": true
  274. },
  275. {
  276. "name": "volume_nfs_options",
  277. "description": "NFS mount options (comma-separated)",
  278. "type": "str",
  279. "default": "rw,nolock,soft",
  280. "needs": "volume_mode=nfs",
  281. "required": true
  282. }
  283. ]
  284. },
  285. {
  286. "key": "resources",
  287. "title": "Resource Limits",
  288. "toggle": "resources_enabled",
  289. "description": "Set CPU and memory limits for the service.",
  290. "vars": [
  291. {
  292. "name": "resources_enabled",
  293. "description": "Enable resource limits",
  294. "type": "bool",
  295. "default": false
  296. },
  297. {
  298. "name": "resources_cpu_limit",
  299. "description": "Maximum CPU cores (e.g., 0.5, 1.0, 2.0)",
  300. "type": "str",
  301. "default": "1.0",
  302. "required": true
  303. },
  304. {
  305. "name": "resources_cpu_reservation",
  306. "description": "Reserved CPU cores",
  307. "type": "str",
  308. "default": "0.25",
  309. "needs": "swarm_enabled=true",
  310. "required": true
  311. },
  312. {
  313. "name": "resources_memory_limit",
  314. "description": "Maximum memory (e.g., 512M, 1G, 2G)",
  315. "type": "str",
  316. "default": "1G",
  317. "required": true
  318. },
  319. {
  320. "name": "resources_memory_reservation",
  321. "description": "Reserved memory",
  322. "type": "str",
  323. "default": "512M",
  324. "needs": "swarm_enabled=true",
  325. "required": true
  326. }
  327. ]
  328. },
  329. {
  330. "key": "swarm",
  331. "title": "Docker Swarm",
  332. "toggle": "swarm_enabled",
  333. "needs": "network_mode!=host,macvlan",
  334. "description": "Deploy service in Docker Swarm mode.",
  335. "vars": [
  336. {
  337. "name": "swarm_enabled",
  338. "description": "Enable Docker Swarm mode",
  339. "type": "bool",
  340. "default": false
  341. },
  342. {
  343. "name": "swarm_placement_mode",
  344. "description": "Swarm placement mode",
  345. "type": "enum",
  346. "options": ["replicated", "global"],
  347. "default": "replicated",
  348. "required": true
  349. },
  350. {
  351. "name": "swarm_replicas",
  352. "description": "Number of replicas",
  353. "type": "int",
  354. "default": 1,
  355. "needs": "swarm_placement_mode=replicated",
  356. "required": true
  357. },
  358. {
  359. "name": "swarm_placement_host",
  360. "description": "Target hostname for placement constraint",
  361. "type": "str",
  362. "default": "",
  363. "needs": "swarm_placement_mode=replicated",
  364. "extra": "Constrains service to run on specific node by hostname"
  365. }
  366. ]
  367. },
  368. {
  369. "key": "database",
  370. "title": "Database",
  371. "toggle": "database_enabled",
  372. "description": "Connect to external database (PostgreSQL or MySQL)",
  373. "vars": [
  374. {
  375. "name": "database_enabled",
  376. "description": "Enable external database integration",
  377. "type": "bool",
  378. "default": false
  379. },
  380. {
  381. "name": "database_type",
  382. "description": "Database type",
  383. "type": "enum",
  384. "options": ["default", "sqlite", "postgres", "mysql"],
  385. "default": "default",
  386. "required": true
  387. },
  388. {
  389. "name": "database_external",
  390. "description": "Use an external database server?",
  391. "extra": "skips creation of internal database container",
  392. "type": "bool",
  393. "default": false
  394. },
  395. {
  396. "name": "database_host",
  397. "description": "Database host",
  398. "type": "str",
  399. "needs": "database_external=true",
  400. "default": "database",
  401. "required": true
  402. },
  403. {
  404. "name": "database_port",
  405. "description": "Database port",
  406. "type": "int",
  407. "required": true
  408. },
  409. {
  410. "name": "database_name",
  411. "description": "Database name",
  412. "type": "str",
  413. "required": true
  414. },
  415. {
  416. "name": "database_user",
  417. "description": "Database user",
  418. "type": "str",
  419. "required": true
  420. },
  421. {
  422. "name": "database_password",
  423. "description": "Database password",
  424. "type": "str",
  425. "default": "",
  426. "sensitive": true,
  427. "autogenerated": true,
  428. "required": true
  429. }
  430. ]
  431. },
  432. {
  433. "key": "email",
  434. "title": "Email Server",
  435. "toggle": "email_enabled",
  436. "description": "Configure email server for notifications and user management.",
  437. "vars": [
  438. {
  439. "name": "email_enabled",
  440. "description": "Enable email server configuration",
  441. "type": "bool",
  442. "default": false
  443. },
  444. {
  445. "name": "email_host",
  446. "description": "SMTP server hostname",
  447. "type": "str",
  448. "required": true
  449. },
  450. {
  451. "name": "email_port",
  452. "description": "SMTP server port",
  453. "type": "int",
  454. "default": 587,
  455. "required": true
  456. },
  457. {
  458. "name": "email_username",
  459. "description": "SMTP username",
  460. "type": "str",
  461. "required": true
  462. },
  463. {
  464. "name": "email_password",
  465. "description": "SMTP password",
  466. "type": "str",
  467. "sensitive": true,
  468. "required": true
  469. },
  470. {
  471. "name": "email_from",
  472. "description": "From email address",
  473. "type": "email",
  474. "required": true
  475. },
  476. {
  477. "name": "email_use_tls",
  478. "description": "Use TLS encryption",
  479. "type": "bool",
  480. "default": true,
  481. "required": true
  482. },
  483. {
  484. "name": "email_use_ssl",
  485. "description": "Use SSL encryption",
  486. "type": "bool",
  487. "default": false,
  488. "required": true
  489. }
  490. ]
  491. },
  492. {
  493. "key": "authentik",
  494. "title": "Authentik SSO",
  495. "toggle": "authentik_enabled",
  496. "description": "Integrate with Authentik for Single Sign-On authentication.",
  497. "vars": [
  498. {
  499. "name": "authentik_enabled",
  500. "description": "Enable Authentik SSO integration",
  501. "type": "bool",
  502. "default": false
  503. },
  504. {
  505. "name": "authentik_url",
  506. "description": "Authentik base URL (e.g., https://auth.example.com)",
  507. "type": "url",
  508. "required": true
  509. },
  510. {
  511. "name": "authentik_slug",
  512. "description": "Authentik application slug",
  513. "type": "str",
  514. "required": true
  515. },
  516. {
  517. "name": "authentik_traefik_middleware",
  518. "description": "Traefik middleware name for Authentik authentication",
  519. "type": "str",
  520. "default": "authentik-middleware@file",
  521. "needs": "traefik_enabled=true",
  522. "required": true
  523. }
  524. ]
  525. }
  526. ]