v1.2.json 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504
  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. },
  202. {
  203. "key": "traefik_tls",
  204. "title": "Traefik TLS/SSL",
  205. "toggle": "traefik_tls_enabled",
  206. "needs": ["traefik_enabled=true", "network_mode!=host,macvlan"],
  207. "description": "Enable HTTPS/TLS for Traefik with certificate management.",
  208. "vars": [
  209. {
  210. "name": "traefik_tls_enabled",
  211. "description": "Enable HTTPS/TLS",
  212. "type": "bool",
  213. "default": true
  214. },
  215. {
  216. "name": "traefik_tls_certresolver",
  217. "description": "Traefik certificate resolver name",
  218. "type": "str",
  219. "default": "cloudflare",
  220. "required": true
  221. }
  222. ]
  223. },
  224. {
  225. "key": "volume",
  226. "title": "Volume Storage",
  227. "description": "Configure persistent storage for your service.",
  228. "vars": [
  229. {
  230. "name": "volume_mode",
  231. "description": "Volume storage backend",
  232. "type": "enum",
  233. "options": ["local", "mount", "nfs"],
  234. "default": "local",
  235. "required": true
  236. },
  237. {
  238. "name": "volume_mount_path",
  239. "description": "Host path for bind mounts",
  240. "type": "str",
  241. "default": "/mnt/storage",
  242. "needs": ["volume_mode=mount"],
  243. "required": true
  244. },
  245. {
  246. "name": "volume_nfs_server",
  247. "description": "NFS server address",
  248. "type": "str",
  249. "default": "192.168.1.1",
  250. "needs": ["volume_mode=nfs"],
  251. "required": true
  252. },
  253. {
  254. "name": "volume_nfs_path",
  255. "description": "NFS export path",
  256. "type": "str",
  257. "default": "/export",
  258. "needs": ["volume_mode=nfs"],
  259. "required": true
  260. },
  261. {
  262. "name": "volume_nfs_options",
  263. "description": "NFS mount options (comma-separated)",
  264. "type": "str",
  265. "default": "rw,nolock,soft",
  266. "needs": ["volume_mode=nfs"],
  267. "required": true
  268. }
  269. ]
  270. },
  271. {
  272. "key": "resources",
  273. "title": "Resource Limits",
  274. "toggle": "resources_enabled",
  275. "description": "Set CPU and memory limits for the service.",
  276. "vars": [
  277. {
  278. "name": "resources_enabled",
  279. "description": "Enable resource limits",
  280. "type": "bool",
  281. "default": false
  282. },
  283. {
  284. "name": "resources_cpu_limit",
  285. "description": "Maximum CPU cores (e.g., 0.5, 1.0, 2.0)",
  286. "type": "str",
  287. "default": "1.0",
  288. "required": true
  289. },
  290. {
  291. "name": "resources_cpu_reservation",
  292. "description": "Reserved CPU cores",
  293. "type": "str",
  294. "default": "0.25",
  295. "needs": ["swarm_enabled=true"],
  296. "required": true
  297. },
  298. {
  299. "name": "resources_memory_limit",
  300. "description": "Maximum memory (e.g., 512M, 1G, 2G)",
  301. "type": "str",
  302. "default": "1G",
  303. "required": true
  304. },
  305. {
  306. "name": "resources_memory_reservation",
  307. "description": "Reserved memory",
  308. "type": "str",
  309. "default": "512M",
  310. "needs": ["swarm_enabled=true"],
  311. "required": true
  312. }
  313. ]
  314. },
  315. {
  316. "key": "swarm",
  317. "title": "Docker Swarm",
  318. "toggle": "swarm_enabled",
  319. "needs": ["network_mode!=host,macvlan"],
  320. "description": "Deploy service in Docker Swarm mode.",
  321. "vars": [
  322. {
  323. "name": "swarm_enabled",
  324. "description": "Enable Docker Swarm mode",
  325. "type": "bool",
  326. "default": false
  327. },
  328. {
  329. "name": "swarm_placement_mode",
  330. "description": "Swarm placement mode",
  331. "type": "enum",
  332. "options": ["replicated", "global"],
  333. "default": "replicated",
  334. "required": true
  335. },
  336. {
  337. "name": "swarm_replicas",
  338. "description": "Number of replicas",
  339. "type": "int",
  340. "default": 1,
  341. "needs": "swarm_placement_mode=replicated",
  342. "required": true
  343. },
  344. {
  345. "name": "swarm_placement_host",
  346. "description": "Target hostname for placement constraint",
  347. "type": "str",
  348. "default": "",
  349. "needs": "swarm_placement_mode=replicated",
  350. "extra": "Constrains service to run on specific node by hostname"
  351. }
  352. ]
  353. },
  354. {
  355. "key": "database",
  356. "title": "Database",
  357. "toggle": "database_enabled",
  358. "description": "Connect to external database (PostgreSQL or MySQL)",
  359. "vars": [
  360. {
  361. "name": "database_enabled",
  362. "description": "Enable external database integration",
  363. "type": "bool",
  364. "default": false
  365. },
  366. {
  367. "name": "database_type",
  368. "description": "Database type",
  369. "type": "enum",
  370. "options": ["default", "sqlite", "postgres", "mysql"],
  371. "default": "default",
  372. "required": true
  373. },
  374. {
  375. "name": "database_external",
  376. "description": "Use an external database server?",
  377. "extra": "skips creation of internal database container",
  378. "type": "bool",
  379. "default": false
  380. },
  381. {
  382. "name": "database_host",
  383. "description": "Database host",
  384. "type": "str",
  385. "needs": "database_external=true",
  386. "default": "database",
  387. "required": true
  388. },
  389. {
  390. "name": "database_port",
  391. "description": "Database port",
  392. "type": "int",
  393. "required": true
  394. },
  395. {
  396. "name": "database_name",
  397. "description": "Database name",
  398. "type": "str",
  399. "required": true
  400. },
  401. {
  402. "name": "database_user",
  403. "description": "Database user",
  404. "type": "str",
  405. "required": true
  406. },
  407. {
  408. "name": "database_password",
  409. "description": "Database password",
  410. "type": "str",
  411. "default": "",
  412. "sensitive": true,
  413. "autogenerated": true,
  414. "required": true
  415. }
  416. ]
  417. },
  418. {
  419. "key": "email",
  420. "title": "Email Server",
  421. "toggle": "email_enabled",
  422. "description": "Configure email server for notifications and user management.",
  423. "vars": [
  424. {
  425. "name": "email_enabled",
  426. "description": "Enable email server configuration",
  427. "type": "bool",
  428. "default": false
  429. },
  430. {
  431. "name": "email_host",
  432. "description": "SMTP server hostname",
  433. "type": "str",
  434. "required": true
  435. },
  436. {
  437. "name": "email_port",
  438. "description": "SMTP server port",
  439. "type": "int",
  440. "default": 25,
  441. "required": true
  442. },
  443. {
  444. "name": "email_username",
  445. "description": "SMTP username",
  446. "type": "str",
  447. "required": true
  448. },
  449. {
  450. "name": "email_password",
  451. "description": "SMTP password",
  452. "type": "str",
  453. "sensitive": true,
  454. "required": true
  455. },
  456. {
  457. "name": "email_from",
  458. "description": "From email address",
  459. "type": "email",
  460. "required": true
  461. },
  462. {
  463. "name": "email_encryption",
  464. "description": "Email encryption method to use",
  465. "type": "enum",
  466. "options": ["none", "starttls", "ssl"]
  467. }
  468. ]
  469. },
  470. {
  471. "key": "authentik",
  472. "title": "Authentik SSO",
  473. "toggle": "authentik_enabled",
  474. "description": "Integrate with Authentik for Single Sign-On authentication.",
  475. "vars": [
  476. {
  477. "name": "authentik_enabled",
  478. "description": "Enable Authentik SSO integration",
  479. "type": "bool",
  480. "default": false
  481. },
  482. {
  483. "name": "authentik_url",
  484. "description": "Authentik base URL (e.g., https://auth.example.com)",
  485. "type": "url",
  486. "required": true
  487. },
  488. {
  489. "name": "authentik_slug",
  490. "description": "Authentik application slug",
  491. "type": "str",
  492. "required": true
  493. },
  494. {
  495. "name": "authentik_traefik_middleware",
  496. "description": "Traefik middleware name for Authentik authentication",
  497. "type": "str",
  498. "default": "authentik-middleware@file",
  499. "needs": "traefik_enabled=true",
  500. "required": true
  501. }
  502. ]
  503. }
  504. ]