app_versions.json 64 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086
  1. {
  2. "1.0.93": {
  3. "healthy": true,
  4. "supported": true,
  5. "healthy_error": null,
  6. "location": "/__w/apps/apps/trains/community/invoice-ninja/1.0.93",
  7. "last_update": "2025-09-04 12:07:56",
  8. "required_features": [],
  9. "human_version": "5.12.26_1.0.93",
  10. "version": "1.0.93",
  11. "app_metadata": {
  12. "app_version": "5.12.26",
  13. "capabilities": [
  14. {
  15. "description": "Invoice Ninja, Scheduler, Worker are able to change file ownership arbitrarily",
  16. "name": "CHOWN"
  17. },
  18. {
  19. "description": "Invoice Ninja, Scheduler, Worker are able to bypass file permission checks",
  20. "name": "DAC_OVERRIDE"
  21. },
  22. {
  23. "description": "Invoice Ninja, Scheduler, Worker are able to bypass permission checks for file operations",
  24. "name": "FOWNER"
  25. },
  26. {
  27. "description": "Invoice Ninja, Scheduler, Worker are able to bind to privileged ports (< 1024)",
  28. "name": "NET_BIND_SERVICE"
  29. },
  30. {
  31. "description": "Invoice Ninja, Scheduler, Worker are able to change group ID of processes",
  32. "name": "SETGID"
  33. },
  34. {
  35. "description": "Invoice Ninja, Scheduler, Worker are able to change user ID of processes",
  36. "name": "SETUID"
  37. }
  38. ],
  39. "categories": [
  40. "productivity"
  41. ],
  42. "changelog_url": "https://github.com/invoiceninja/dockerfiles/releases",
  43. "date_added": "2025-01-09",
  44. "description": "Invoices, Expenses and Tasks built with Laravel, Flutter and React",
  45. "home": "https://invoiceninja.com/",
  46. "host_mounts": [],
  47. "icon": "https://media.sys.truenas.net/apps/invoice-ninja/icons/icon.png",
  48. "keywords": [
  49. "finance"
  50. ],
  51. "lib_version": "2.1.49",
  52. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  53. "maintainers": [
  54. {
  55. "email": "dev@ixsystems.com",
  56. "name": "truenas",
  57. "url": "https://www.truenas.com/"
  58. }
  59. ],
  60. "name": "invoice-ninja",
  61. "run_as_context": [
  62. {
  63. "description": "Invoice Ninja runs as non-root user.",
  64. "gid": 999,
  65. "group_name": "invoice-ninja",
  66. "uid": 999,
  67. "user_name": "invoice-ninja"
  68. },
  69. {
  70. "description": "Invoice Ninja Worker runs as non-root user.",
  71. "gid": 999,
  72. "group_name": "invoice-ninja",
  73. "uid": 999,
  74. "user_name": "invoice-ninja"
  75. },
  76. {
  77. "description": "Invoice Ninja Scheduler runs as non-root user.",
  78. "gid": 999,
  79. "group_name": "invoice-ninja",
  80. "uid": 999,
  81. "user_name": "invoice-ninja"
  82. },
  83. {
  84. "description": "MariaDB runs as non-root user.",
  85. "gid": 999,
  86. "group_name": "mariadb",
  87. "uid": 999,
  88. "user_name": "mariadb"
  89. },
  90. {
  91. "description": "Redis runs as any non-root user.",
  92. "gid": 568,
  93. "group_name": "redis",
  94. "uid": 568,
  95. "user_name": "redis"
  96. }
  97. ],
  98. "screenshots": [],
  99. "sources": [
  100. "https://github.com/invoiceninja/dockerfiles",
  101. "https://hub.docker.com/r/invoiceninja/invoiceninja-octane"
  102. ],
  103. "title": "Invoice Ninja",
  104. "train": "community",
  105. "version": "1.0.93"
  106. },
  107. "schema": {
  108. "groups": [
  109. {
  110. "name": "Invoice Ninja Configuration",
  111. "description": "Configure Invoice Ninja"
  112. },
  113. {
  114. "name": "Network Configuration",
  115. "description": "Configure Network for Invoice Ninja"
  116. },
  117. {
  118. "name": "Storage Configuration",
  119. "description": "Configure Storage for Invoice Ninja"
  120. },
  121. {
  122. "name": "Labels Configuration",
  123. "description": "Configure Labels for Invoice Ninja"
  124. },
  125. {
  126. "name": "Resources Configuration",
  127. "description": "Configure Resources for Invoice Ninja"
  128. }
  129. ],
  130. "questions": [
  131. {
  132. "variable": "invoice_ninja",
  133. "label": "",
  134. "group": "Invoice Ninja Configuration",
  135. "schema": {
  136. "type": "dict",
  137. "attrs": [
  138. {
  139. "variable": "db_password",
  140. "label": "Database Password",
  141. "description": "The password for Invoice Ninja.",
  142. "schema": {
  143. "type": "string",
  144. "default": "",
  145. "required": true,
  146. "private": true
  147. }
  148. },
  149. {
  150. "variable": "db_root_password",
  151. "label": "Database Root Password",
  152. "description": "The root password for Invoice Ninja.",
  153. "schema": {
  154. "type": "string",
  155. "default": "",
  156. "required": true,
  157. "private": true
  158. }
  159. },
  160. {
  161. "variable": "redis_password",
  162. "label": "Redis Password",
  163. "description": "The password for Invoice Ninja.",
  164. "schema": {
  165. "type": "string",
  166. "default": "",
  167. "required": true,
  168. "private": true
  169. }
  170. },
  171. {
  172. "variable": "app_key",
  173. "label": "App Key",
  174. "description": "The app key for Invoice Ninja.</br>\nMust be exactly 32 characters long.</br>\n",
  175. "schema": {
  176. "type": "string",
  177. "min_length": 32,
  178. "max_length": 32,
  179. "default": "",
  180. "required": true,
  181. "private": true
  182. }
  183. },
  184. {
  185. "variable": "app_url",
  186. "label": "App URL",
  187. "description": "The base URL for Invoice Ninja.</br>\nExamples:</br>\nhttps://firefly.example.com </br>\nhttp://192.168.1.100:30064\n",
  188. "schema": {
  189. "type": "uri",
  190. "default": ""
  191. }
  192. },
  193. {
  194. "variable": "initial_user_email",
  195. "label": "Initial User Email",
  196. "description": "The initial user email for Invoice Ninja.",
  197. "schema": {
  198. "type": "string",
  199. "default": "",
  200. "required": true
  201. }
  202. },
  203. {
  204. "variable": "initial_user_password",
  205. "label": "Initial User Password",
  206. "description": "The initial user password for Invoice Ninja.",
  207. "schema": {
  208. "type": "string",
  209. "default": "",
  210. "private": true,
  211. "required": true
  212. }
  213. },
  214. {
  215. "variable": "additional_envs",
  216. "label": "Additional Environment Variables",
  217. "schema": {
  218. "type": "list",
  219. "default": [],
  220. "items": [
  221. {
  222. "variable": "env",
  223. "label": "Environment Variable",
  224. "schema": {
  225. "type": "dict",
  226. "attrs": [
  227. {
  228. "variable": "name",
  229. "label": "Name",
  230. "schema": {
  231. "type": "string",
  232. "required": true
  233. }
  234. },
  235. {
  236. "variable": "value",
  237. "label": "Value",
  238. "schema": {
  239. "type": "string"
  240. }
  241. }
  242. ]
  243. }
  244. }
  245. ]
  246. }
  247. }
  248. ]
  249. }
  250. },
  251. {
  252. "variable": "network",
  253. "label": "",
  254. "group": "Network Configuration",
  255. "schema": {
  256. "type": "dict",
  257. "attrs": [
  258. {
  259. "variable": "web_port",
  260. "label": "WebUI Port",
  261. "schema": {
  262. "type": "dict",
  263. "attrs": [
  264. {
  265. "variable": "bind_mode",
  266. "label": "Port Bind Mode",
  267. "description": "The port bind mode.</br>\n- Publish: The port will be published on the host for external access.</br>\n- Expose: The port will be exposed for inter-container communication.</br>\n- None: The port will not be exposed or published.</br>\nNote: If the Dockerfile defines an EXPOSE directive,\nthe port will still be exposed for inter-container communication regardless of this setting.\n",
  268. "schema": {
  269. "type": "string",
  270. "default": "published",
  271. "enum": [
  272. {
  273. "value": "published",
  274. "description": "Publish port on the host for external access"
  275. },
  276. {
  277. "value": "exposed",
  278. "description": "Expose port for inter-container communication"
  279. },
  280. {
  281. "value": "",
  282. "description": "None"
  283. }
  284. ]
  285. }
  286. },
  287. {
  288. "variable": "port_number",
  289. "label": "Port Number",
  290. "schema": {
  291. "type": "int",
  292. "default": 31105,
  293. "min": 1,
  294. "max": 65535,
  295. "required": true
  296. }
  297. },
  298. {
  299. "variable": "host_ips",
  300. "label": "Host IPs",
  301. "description": "IPs on the host to bind this port",
  302. "schema": {
  303. "type": "list",
  304. "show_if": [
  305. [
  306. "bind_mode",
  307. "=",
  308. "published"
  309. ]
  310. ],
  311. "default": [],
  312. "items": [
  313. {
  314. "variable": "host_ip",
  315. "label": "Host IP",
  316. "schema": {
  317. "type": "string",
  318. "required": true,
  319. "$ref": [
  320. "definitions/node_bind_ip"
  321. ]
  322. }
  323. }
  324. ]
  325. }
  326. }
  327. ]
  328. }
  329. }
  330. ]
  331. }
  332. },
  333. {
  334. "variable": "storage",
  335. "label": "",
  336. "group": "Storage Configuration",
  337. "schema": {
  338. "type": "dict",
  339. "attrs": [
  340. {
  341. "variable": "storage",
  342. "label": "Invoice Ninja Storage",
  343. "description": "The path to store Invoice Ninja Storage.",
  344. "schema": {
  345. "type": "dict",
  346. "attrs": [
  347. {
  348. "variable": "type",
  349. "label": "Type",
  350. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  351. "schema": {
  352. "type": "string",
  353. "required": true,
  354. "default": "ix_volume",
  355. "enum": [
  356. {
  357. "value": "host_path",
  358. "description": "Host Path (Path that already exists on the system)"
  359. },
  360. {
  361. "value": "ix_volume",
  362. "description": "ixVolume (Dataset created automatically by the system)"
  363. }
  364. ]
  365. }
  366. },
  367. {
  368. "variable": "ix_volume_config",
  369. "label": "ixVolume Configuration",
  370. "description": "The configuration for the ixVolume dataset.",
  371. "schema": {
  372. "type": "dict",
  373. "show_if": [
  374. [
  375. "type",
  376. "=",
  377. "ix_volume"
  378. ]
  379. ],
  380. "$ref": [
  381. "normalize/ix_volume"
  382. ],
  383. "attrs": [
  384. {
  385. "variable": "acl_enable",
  386. "label": "Enable ACL",
  387. "description": "Enable ACL for the storage.",
  388. "schema": {
  389. "type": "boolean",
  390. "default": false
  391. }
  392. },
  393. {
  394. "variable": "dataset_name",
  395. "label": "Dataset Name",
  396. "description": "The name of the dataset to use for storage.",
  397. "schema": {
  398. "type": "string",
  399. "required": true,
  400. "hidden": true,
  401. "default": "storage"
  402. }
  403. },
  404. {
  405. "variable": "acl_entries",
  406. "label": "ACL Configuration",
  407. "schema": {
  408. "type": "dict",
  409. "show_if": [
  410. [
  411. "acl_enable",
  412. "=",
  413. true
  414. ]
  415. ],
  416. "attrs": []
  417. }
  418. }
  419. ]
  420. }
  421. },
  422. {
  423. "variable": "host_path_config",
  424. "label": "Host Path Configuration",
  425. "schema": {
  426. "type": "dict",
  427. "show_if": [
  428. [
  429. "type",
  430. "=",
  431. "host_path"
  432. ]
  433. ],
  434. "attrs": [
  435. {
  436. "variable": "acl_enable",
  437. "label": "Enable ACL",
  438. "description": "Enable ACL for the storage.",
  439. "schema": {
  440. "type": "boolean",
  441. "default": false
  442. }
  443. },
  444. {
  445. "variable": "acl",
  446. "label": "ACL Configuration",
  447. "schema": {
  448. "type": "dict",
  449. "show_if": [
  450. [
  451. "acl_enable",
  452. "=",
  453. true
  454. ]
  455. ],
  456. "attrs": [],
  457. "$ref": [
  458. "normalize/acl"
  459. ]
  460. }
  461. },
  462. {
  463. "variable": "path",
  464. "label": "Host Path",
  465. "description": "The host path to use for storage.",
  466. "schema": {
  467. "type": "hostpath",
  468. "show_if": [
  469. [
  470. "acl_enable",
  471. "=",
  472. false
  473. ]
  474. ],
  475. "required": true
  476. }
  477. }
  478. ]
  479. }
  480. }
  481. ]
  482. }
  483. },
  484. {
  485. "variable": "mariadb_data",
  486. "label": "Invoice Ninja MariaDB Data Storage",
  487. "description": "The path to store Invoice Ninja MariaDB Data.",
  488. "schema": {
  489. "type": "dict",
  490. "attrs": [
  491. {
  492. "variable": "type",
  493. "label": "Type",
  494. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  495. "schema": {
  496. "type": "string",
  497. "required": true,
  498. "default": "ix_volume",
  499. "enum": [
  500. {
  501. "value": "host_path",
  502. "description": "Host Path (Path that already exists on the system)"
  503. },
  504. {
  505. "value": "ix_volume",
  506. "description": "ixVolume (Dataset created automatically by the system)"
  507. }
  508. ]
  509. }
  510. },
  511. {
  512. "variable": "ix_volume_config",
  513. "label": "ixVolume Configuration",
  514. "description": "The configuration for the ixVolume dataset.",
  515. "schema": {
  516. "type": "dict",
  517. "show_if": [
  518. [
  519. "type",
  520. "=",
  521. "ix_volume"
  522. ]
  523. ],
  524. "$ref": [
  525. "normalize/ix_volume"
  526. ],
  527. "attrs": [
  528. {
  529. "variable": "acl_enable",
  530. "label": "Enable ACL",
  531. "description": "Enable ACL for the storage.",
  532. "schema": {
  533. "type": "boolean",
  534. "default": false
  535. }
  536. },
  537. {
  538. "variable": "dataset_name",
  539. "label": "Dataset Name",
  540. "description": "The name of the dataset to use for storage.",
  541. "schema": {
  542. "type": "string",
  543. "required": true,
  544. "hidden": true,
  545. "default": "mariadb_data"
  546. }
  547. },
  548. {
  549. "variable": "acl_entries",
  550. "label": "ACL Configuration",
  551. "schema": {
  552. "type": "dict",
  553. "show_if": [
  554. [
  555. "acl_enable",
  556. "=",
  557. true
  558. ]
  559. ],
  560. "attrs": []
  561. }
  562. }
  563. ]
  564. }
  565. },
  566. {
  567. "variable": "host_path_config",
  568. "label": "Host Path Configuration",
  569. "schema": {
  570. "type": "dict",
  571. "show_if": [
  572. [
  573. "type",
  574. "=",
  575. "host_path"
  576. ]
  577. ],
  578. "attrs": [
  579. {
  580. "variable": "acl_enable",
  581. "label": "Enable ACL",
  582. "description": "Enable ACL for the storage.",
  583. "schema": {
  584. "type": "boolean",
  585. "default": false
  586. }
  587. },
  588. {
  589. "variable": "acl",
  590. "label": "ACL Configuration",
  591. "schema": {
  592. "type": "dict",
  593. "show_if": [
  594. [
  595. "acl_enable",
  596. "=",
  597. true
  598. ]
  599. ],
  600. "attrs": [],
  601. "$ref": [
  602. "normalize/acl"
  603. ]
  604. }
  605. },
  606. {
  607. "variable": "path",
  608. "label": "Host Path",
  609. "description": "The host path to use for storage.",
  610. "schema": {
  611. "type": "hostpath",
  612. "show_if": [
  613. [
  614. "acl_enable",
  615. "=",
  616. false
  617. ]
  618. ],
  619. "required": true
  620. }
  621. }
  622. ]
  623. }
  624. }
  625. ]
  626. }
  627. },
  628. {
  629. "variable": "additional_storage",
  630. "label": "Additional Storage",
  631. "schema": {
  632. "type": "list",
  633. "default": [],
  634. "items": [
  635. {
  636. "variable": "storageEntry",
  637. "label": "Storage Entry",
  638. "schema": {
  639. "type": "dict",
  640. "attrs": [
  641. {
  642. "variable": "type",
  643. "label": "Type",
  644. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.</br>\nSMB Share: Is a SMB share that is mounted to as a volume.\n",
  645. "schema": {
  646. "type": "string",
  647. "required": true,
  648. "default": "ix_volume",
  649. "enum": [
  650. {
  651. "value": "host_path",
  652. "description": "Host Path (Path that already exists on the system)"
  653. },
  654. {
  655. "value": "ix_volume",
  656. "description": "ixVolume (Dataset created automatically by the system)"
  657. },
  658. {
  659. "value": "cifs",
  660. "description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
  661. }
  662. ]
  663. }
  664. },
  665. {
  666. "variable": "read_only",
  667. "label": "Read Only",
  668. "description": "Mount the volume as read only.",
  669. "schema": {
  670. "type": "boolean",
  671. "default": false
  672. }
  673. },
  674. {
  675. "variable": "mount_path",
  676. "label": "Mount Path",
  677. "description": "The path inside the container to mount the storage.",
  678. "schema": {
  679. "type": "path",
  680. "required": true
  681. }
  682. },
  683. {
  684. "variable": "host_path_config",
  685. "label": "Host Path Configuration",
  686. "schema": {
  687. "type": "dict",
  688. "show_if": [
  689. [
  690. "type",
  691. "=",
  692. "host_path"
  693. ]
  694. ],
  695. "attrs": [
  696. {
  697. "variable": "acl_enable",
  698. "label": "Enable ACL",
  699. "description": "Enable ACL for the storage.",
  700. "schema": {
  701. "type": "boolean",
  702. "default": false
  703. }
  704. },
  705. {
  706. "variable": "acl",
  707. "label": "ACL Configuration",
  708. "schema": {
  709. "type": "dict",
  710. "show_if": [
  711. [
  712. "acl_enable",
  713. "=",
  714. true
  715. ]
  716. ],
  717. "attrs": [],
  718. "$ref": [
  719. "normalize/acl"
  720. ]
  721. }
  722. },
  723. {
  724. "variable": "path",
  725. "label": "Host Path",
  726. "description": "The host path to use for storage.",
  727. "schema": {
  728. "type": "hostpath",
  729. "show_if": [
  730. [
  731. "acl_enable",
  732. "=",
  733. false
  734. ]
  735. ],
  736. "required": true
  737. }
  738. }
  739. ]
  740. }
  741. },
  742. {
  743. "variable": "ix_volume_config",
  744. "label": "ixVolume Configuration",
  745. "description": "The configuration for the ixVolume dataset.",
  746. "schema": {
  747. "type": "dict",
  748. "show_if": [
  749. [
  750. "type",
  751. "=",
  752. "ix_volume"
  753. ]
  754. ],
  755. "$ref": [
  756. "normalize/ix_volume"
  757. ],
  758. "attrs": [
  759. {
  760. "variable": "acl_enable",
  761. "label": "Enable ACL",
  762. "description": "Enable ACL for the storage.",
  763. "schema": {
  764. "type": "boolean",
  765. "default": false
  766. }
  767. },
  768. {
  769. "variable": "dataset_name",
  770. "label": "Dataset Name",
  771. "description": "The name of the dataset to use for storage.",
  772. "schema": {
  773. "type": "string",
  774. "required": true,
  775. "default": "storage_entry"
  776. }
  777. },
  778. {
  779. "variable": "acl_entries",
  780. "label": "ACL Configuration",
  781. "schema": {
  782. "type": "dict",
  783. "show_if": [
  784. [
  785. "acl_enable",
  786. "=",
  787. true
  788. ]
  789. ],
  790. "attrs": [],
  791. "$ref": [
  792. "normalize/acl"
  793. ]
  794. }
  795. }
  796. ]
  797. }
  798. },
  799. {
  800. "variable": "cifs_config",
  801. "label": "SMB Configuration",
  802. "description": "The configuration for the SMB dataset.",
  803. "schema": {
  804. "type": "dict",
  805. "show_if": [
  806. [
  807. "type",
  808. "=",
  809. "cifs"
  810. ]
  811. ],
  812. "attrs": [
  813. {
  814. "variable": "server",
  815. "label": "Server",
  816. "description": "The server to mount the SMB share.",
  817. "schema": {
  818. "type": "string",
  819. "required": true
  820. }
  821. },
  822. {
  823. "variable": "path",
  824. "label": "Path",
  825. "description": "The path to mount the SMB share.",
  826. "schema": {
  827. "type": "string",
  828. "required": true
  829. }
  830. },
  831. {
  832. "variable": "username",
  833. "label": "Username",
  834. "description": "The username to use for the SMB share.",
  835. "schema": {
  836. "type": "string",
  837. "required": true
  838. }
  839. },
  840. {
  841. "variable": "password",
  842. "label": "Password",
  843. "description": "The password to use for the SMB share.",
  844. "schema": {
  845. "type": "string",
  846. "required": true,
  847. "private": true
  848. }
  849. },
  850. {
  851. "variable": "domain",
  852. "label": "Domain",
  853. "description": "The domain to use for the SMB share.",
  854. "schema": {
  855. "type": "string"
  856. }
  857. }
  858. ]
  859. }
  860. }
  861. ]
  862. }
  863. }
  864. ]
  865. }
  866. }
  867. ]
  868. }
  869. },
  870. {
  871. "variable": "labels",
  872. "label": "",
  873. "group": "Labels Configuration",
  874. "schema": {
  875. "type": "list",
  876. "default": [],
  877. "items": [
  878. {
  879. "variable": "label",
  880. "label": "Label",
  881. "schema": {
  882. "type": "dict",
  883. "attrs": [
  884. {
  885. "variable": "key",
  886. "label": "Key",
  887. "schema": {
  888. "type": "string",
  889. "required": true
  890. }
  891. },
  892. {
  893. "variable": "value",
  894. "label": "Value",
  895. "schema": {
  896. "type": "string",
  897. "required": true
  898. }
  899. },
  900. {
  901. "variable": "containers",
  902. "label": "Containers",
  903. "description": "Containers where the label should be applied",
  904. "schema": {
  905. "type": "list",
  906. "items": [
  907. {
  908. "variable": "container",
  909. "label": "Container",
  910. "schema": {
  911. "type": "string",
  912. "required": true,
  913. "enum": [
  914. {
  915. "value": "invoice-ninja",
  916. "description": "invoice-ninja"
  917. },
  918. {
  919. "value": "worker",
  920. "description": "worker"
  921. },
  922. {
  923. "value": "scheduler",
  924. "description": "scheduler"
  925. },
  926. {
  927. "value": "mariadb",
  928. "description": "mariadb"
  929. },
  930. {
  931. "value": "redis",
  932. "description": "redis"
  933. }
  934. ]
  935. }
  936. }
  937. ]
  938. }
  939. }
  940. ]
  941. }
  942. }
  943. ]
  944. }
  945. },
  946. {
  947. "variable": "resources",
  948. "label": "",
  949. "group": "Resources Configuration",
  950. "schema": {
  951. "type": "dict",
  952. "attrs": [
  953. {
  954. "variable": "limits",
  955. "label": "Limits",
  956. "schema": {
  957. "type": "dict",
  958. "attrs": [
  959. {
  960. "variable": "cpus",
  961. "label": "CPUs",
  962. "description": "CPUs limit for Invoice Ninja.",
  963. "schema": {
  964. "type": "int",
  965. "default": 2,
  966. "required": true
  967. }
  968. },
  969. {
  970. "variable": "memory",
  971. "label": "Memory (in MB)",
  972. "description": "Memory limit for Invoice Ninja.",
  973. "schema": {
  974. "type": "int",
  975. "default": 4096,
  976. "required": true
  977. }
  978. }
  979. ]
  980. }
  981. }
  982. ]
  983. }
  984. }
  985. ]
  986. },
  987. "readme": "<h1>Invoice Ninja</h1> <p><a href=\"https://invoiceninja.com/\">Invoice Ninja</a> is a source-available invoice, quote, project and time-tracking app built with Laravel</p>",
  988. "changelog": null,
  989. "chart_metadata": {
  990. "app_version": "5.12.26",
  991. "capabilities": [
  992. {
  993. "description": "Invoice Ninja, Scheduler, Worker are able to change file ownership arbitrarily",
  994. "name": "CHOWN"
  995. },
  996. {
  997. "description": "Invoice Ninja, Scheduler, Worker are able to bypass file permission checks",
  998. "name": "DAC_OVERRIDE"
  999. },
  1000. {
  1001. "description": "Invoice Ninja, Scheduler, Worker are able to bypass permission checks for file operations",
  1002. "name": "FOWNER"
  1003. },
  1004. {
  1005. "description": "Invoice Ninja, Scheduler, Worker are able to bind to privileged ports (< 1024)",
  1006. "name": "NET_BIND_SERVICE"
  1007. },
  1008. {
  1009. "description": "Invoice Ninja, Scheduler, Worker are able to change group ID of processes",
  1010. "name": "SETGID"
  1011. },
  1012. {
  1013. "description": "Invoice Ninja, Scheduler, Worker are able to change user ID of processes",
  1014. "name": "SETUID"
  1015. }
  1016. ],
  1017. "categories": [
  1018. "productivity"
  1019. ],
  1020. "changelog_url": "https://github.com/invoiceninja/dockerfiles/releases",
  1021. "date_added": "2025-01-09",
  1022. "description": "Invoices, Expenses and Tasks built with Laravel, Flutter and React",
  1023. "home": "https://invoiceninja.com/",
  1024. "host_mounts": [],
  1025. "icon": "https://media.sys.truenas.net/apps/invoice-ninja/icons/icon.png",
  1026. "keywords": [
  1027. "finance"
  1028. ],
  1029. "lib_version": "2.1.49",
  1030. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  1031. "maintainers": [
  1032. {
  1033. "email": "dev@ixsystems.com",
  1034. "name": "truenas",
  1035. "url": "https://www.truenas.com/"
  1036. }
  1037. ],
  1038. "name": "invoice-ninja",
  1039. "run_as_context": [
  1040. {
  1041. "description": "Invoice Ninja runs as non-root user.",
  1042. "gid": 999,
  1043. "group_name": "invoice-ninja",
  1044. "uid": 999,
  1045. "user_name": "invoice-ninja"
  1046. },
  1047. {
  1048. "description": "Invoice Ninja Worker runs as non-root user.",
  1049. "gid": 999,
  1050. "group_name": "invoice-ninja",
  1051. "uid": 999,
  1052. "user_name": "invoice-ninja"
  1053. },
  1054. {
  1055. "description": "Invoice Ninja Scheduler runs as non-root user.",
  1056. "gid": 999,
  1057. "group_name": "invoice-ninja",
  1058. "uid": 999,
  1059. "user_name": "invoice-ninja"
  1060. },
  1061. {
  1062. "description": "MariaDB runs as non-root user.",
  1063. "gid": 999,
  1064. "group_name": "mariadb",
  1065. "uid": 999,
  1066. "user_name": "mariadb"
  1067. },
  1068. {
  1069. "description": "Redis runs as any non-root user.",
  1070. "gid": 568,
  1071. "group_name": "redis",
  1072. "uid": 568,
  1073. "user_name": "redis"
  1074. }
  1075. ],
  1076. "screenshots": [],
  1077. "sources": [
  1078. "https://github.com/invoiceninja/dockerfiles",
  1079. "https://hub.docker.com/r/invoiceninja/invoiceninja-octane"
  1080. ],
  1081. "title": "Invoice Ninja",
  1082. "train": "community",
  1083. "version": "1.0.93"
  1084. }
  1085. }
  1086. }