v1.1.json 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. [
  2. {
  3. "key": "general",
  4. "title": "General",
  5. "required": true,
  6. "vars": [
  7. {
  8. "name": "service_name",
  9. "description": "Service name",
  10. "type": "str"
  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. "default": "UTC"
  27. },
  28. {
  29. "name": "user_uid",
  30. "description": "User UID for container process",
  31. "type": "int",
  32. "default": 1000
  33. },
  34. {
  35. "name": "user_gid",
  36. "description": "User GID for container process",
  37. "type": "int",
  38. "default": 1000
  39. },
  40. {
  41. "name": "container_loglevel",
  42. "description": "Container log level",
  43. "type": "enum",
  44. "options": ["debug", "info", "warn", "error"],
  45. "default": "info"
  46. },
  47. {
  48. "name": "restart_policy",
  49. "description": "Container restart policy",
  50. "type": "enum",
  51. "options": ["unless-stopped", "always", "on-failure", "no"],
  52. "default": "unless-stopped"
  53. }
  54. ]
  55. },
  56. {
  57. "key": "network",
  58. "title": "Network",
  59. "vars": [
  60. {
  61. "name": "network_mode",
  62. "description": "Docker network mode",
  63. "type": "enum",
  64. "options": ["bridge", "host", "macvlan"],
  65. "default": "bridge",
  66. "extra": "bridge=default Docker networking, host=use host network stack, macvlan=dedicated MAC address on physical network"
  67. },
  68. {
  69. "name": "network_name",
  70. "description": "Docker network name",
  71. "type": "str",
  72. "default": "bridge",
  73. "needs": "network_mode=bridge,macvlan"
  74. },
  75. {
  76. "name": "network_external",
  77. "description": "Use existing Docker network (external)",
  78. "type": "bool",
  79. "default": false,
  80. "needs": "network_mode=bridge,macvlan"
  81. },
  82. {
  83. "name": "network_macvlan_ipv4_address",
  84. "description": "Static IP address for container",
  85. "type": "str",
  86. "default": "192.168.1.253",
  87. "needs": "network_mode=macvlan"
  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. },
  96. {
  97. "name": "network_macvlan_subnet",
  98. "description": "Network subnet in CIDR notation",
  99. "type": "str",
  100. "default": "192.168.1.0/24",
  101. "needs": "network_mode=macvlan"
  102. },
  103. {
  104. "name": "network_macvlan_gateway",
  105. "description": "Network gateway IP address",
  106. "type": "str",
  107. "default": "192.168.1.1",
  108. "needs": "network_mode=macvlan"
  109. }
  110. ]
  111. },
  112. {
  113. "key": "ports",
  114. "title": "Ports",
  115. "needs": "network_mode=bridge",
  116. "vars": []
  117. },
  118. {
  119. "key": "traefik",
  120. "title": "Traefik",
  121. "toggle": "traefik_enabled",
  122. "needs": "network_mode=bridge",
  123. "description": "Traefik routes external traffic to your service.",
  124. "vars": [
  125. {
  126. "name": "traefik_enabled",
  127. "description": "Enable Traefik reverse proxy integration",
  128. "type": "bool",
  129. "default": false
  130. },
  131. {
  132. "name": "traefik_network",
  133. "description": "Traefik network name",
  134. "type": "str",
  135. "default": "traefik"
  136. },
  137. {
  138. "name": "traefik_host",
  139. "description": "Domain name for your service (e.g., app.example.com)",
  140. "type": "str"
  141. },
  142. {
  143. "name": "traefik_entrypoint",
  144. "description": "HTTP entrypoint (non-TLS)",
  145. "type": "str",
  146. "default": "web"
  147. }
  148. ]
  149. },
  150. {
  151. "key": "traefik_tls",
  152. "title": "Traefik TLS/SSL",
  153. "toggle": "traefik_tls_enabled",
  154. "needs": "traefik_enabled=true;network_mode=bridge",
  155. "description": "Enable HTTPS/TLS for Traefik with certificate management.",
  156. "vars": [
  157. {
  158. "name": "traefik_tls_enabled",
  159. "description": "Enable HTTPS/TLS",
  160. "type": "bool",
  161. "default": true
  162. },
  163. {
  164. "name": "traefik_tls_entrypoint",
  165. "description": "TLS entrypoint",
  166. "type": "str",
  167. "default": "websecure"
  168. },
  169. {
  170. "name": "traefik_tls_certresolver",
  171. "description": "Traefik certificate resolver name",
  172. "type": "str",
  173. "default": "cloudflare"
  174. }
  175. ]
  176. },
  177. {
  178. "key": "swarm",
  179. "title": "Docker Swarm",
  180. "toggle": "swarm_enabled",
  181. "needs": "network_mode=bridge",
  182. "description": "Deploy service in Docker Swarm mode.",
  183. "vars": [
  184. {
  185. "name": "swarm_enabled",
  186. "description": "Enable Docker Swarm mode",
  187. "type": "bool",
  188. "default": false
  189. },
  190. {
  191. "name": "swarm_placement_mode",
  192. "description": "Swarm placement mode",
  193. "type": "enum",
  194. "options": ["replicated", "global"],
  195. "default": "replicated"
  196. },
  197. {
  198. "name": "swarm_replicas",
  199. "description": "Number of replicas",
  200. "type": "int",
  201. "default": 1,
  202. "needs": "swarm_placement_mode=replicated"
  203. },
  204. {
  205. "name": "swarm_placement_host",
  206. "description": "Target hostname for placement constraint",
  207. "type": "str",
  208. "default": "",
  209. "optional": true,
  210. "needs": "swarm_placement_mode=replicated",
  211. "extra": "Constrains service to run on specific node by hostname"
  212. },
  213. {
  214. "name": "swarm_volume_mode",
  215. "description": "Swarm volume storage backend",
  216. "type": "enum",
  217. "options": ["local", "mount", "nfs"],
  218. "default": "local",
  219. "extra": "WARNING: 'local' only works on single-node deployments!"
  220. },
  221. {
  222. "name": "swarm_volume_mount_path",
  223. "description": "Host path for bind mount",
  224. "type": "str",
  225. "default": "/mnt/storage",
  226. "needs": "swarm_volume_mode=mount",
  227. "extra": "Useful for shared/replicated storage"
  228. },
  229. {
  230. "name": "swarm_volume_nfs_server",
  231. "description": "NFS server address",
  232. "type": "str",
  233. "default": "192.168.1.1",
  234. "needs": "swarm_volume_mode=nfs",
  235. "extra": "IP address or hostname of NFS server"
  236. },
  237. {
  238. "name": "swarm_volume_nfs_path",
  239. "description": "NFS export path",
  240. "type": "str",
  241. "default": "/export",
  242. "needs": "swarm_volume_mode=nfs",
  243. "extra": "Path to NFS export on the server"
  244. },
  245. {
  246. "name": "swarm_volume_nfs_options",
  247. "description": "NFS mount options",
  248. "type": "str",
  249. "default": "rw,nolock,soft",
  250. "needs": "swarm_volume_mode=nfs",
  251. "extra": "Comma-separated NFS mount options"
  252. }
  253. ]
  254. },
  255. {
  256. "key": "database",
  257. "title": "Database",
  258. "toggle": "database_enabled",
  259. "description": "Connect to external database (PostgreSQL or MySQL)",
  260. "vars": [
  261. {
  262. "name": "database_enabled",
  263. "description": "Enable external database integration",
  264. "type": "bool",
  265. "default": false
  266. },
  267. {
  268. "name": "database_type",
  269. "description": "Database type",
  270. "type": "enum",
  271. "options": ["default", "sqlite", "postgres", "mysql"],
  272. "default": "default"
  273. },
  274. {
  275. "name": "database_external",
  276. "description": "Use an external database server?",
  277. "extra": "skips creation of internal database container",
  278. "type": "bool",
  279. "default": false
  280. },
  281. {
  282. "name": "database_host",
  283. "description": "Database host",
  284. "type": "str",
  285. "default": "database"
  286. },
  287. {
  288. "name": "database_port",
  289. "description": "Database port",
  290. "type": "int"
  291. },
  292. {
  293. "name": "database_name",
  294. "description": "Database name",
  295. "type": "str"
  296. },
  297. {
  298. "name": "database_user",
  299. "description": "Database user",
  300. "type": "str"
  301. },
  302. {
  303. "name": "database_password",
  304. "description": "Database password",
  305. "type": "str",
  306. "default": "",
  307. "sensitive": true,
  308. "autogenerated": true
  309. }
  310. ]
  311. }
  312. ]