mirror of
https://github.com/penpot/penpot-helm.git
synced 2024-12-22 05:32:59 -05:00
👶 initial code
This commit is contained in:
commit
bc96a6b4de
27 changed files with 1896 additions and 0 deletions
14
.gitignore
vendored
Normal file
14
.gitignore
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
.DS_Store
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
||||||
|
# Dependencies
|
||||||
|
charts/*.tgz
|
373
LICENSE
Normal file
373
LICENSE
Normal file
|
@ -0,0 +1,373 @@
|
||||||
|
Mozilla Public License Version 2.0
|
||||||
|
==================================
|
||||||
|
|
||||||
|
1. Definitions
|
||||||
|
--------------
|
||||||
|
|
||||||
|
1.1. "Contributor"
|
||||||
|
means each individual or legal entity that creates, contributes to
|
||||||
|
the creation of, or owns Covered Software.
|
||||||
|
|
||||||
|
1.2. "Contributor Version"
|
||||||
|
means the combination of the Contributions of others (if any) used
|
||||||
|
by a Contributor and that particular Contributor's Contribution.
|
||||||
|
|
||||||
|
1.3. "Contribution"
|
||||||
|
means Covered Software of a particular Contributor.
|
||||||
|
|
||||||
|
1.4. "Covered Software"
|
||||||
|
means Source Code Form to which the initial Contributor has attached
|
||||||
|
the notice in Exhibit A, the Executable Form of such Source Code
|
||||||
|
Form, and Modifications of such Source Code Form, in each case
|
||||||
|
including portions thereof.
|
||||||
|
|
||||||
|
1.5. "Incompatible With Secondary Licenses"
|
||||||
|
means
|
||||||
|
|
||||||
|
(a) that the initial Contributor has attached the notice described
|
||||||
|
in Exhibit B to the Covered Software; or
|
||||||
|
|
||||||
|
(b) that the Covered Software was made available under the terms of
|
||||||
|
version 1.1 or earlier of the License, but not also under the
|
||||||
|
terms of a Secondary License.
|
||||||
|
|
||||||
|
1.6. "Executable Form"
|
||||||
|
means any form of the work other than Source Code Form.
|
||||||
|
|
||||||
|
1.7. "Larger Work"
|
||||||
|
means a work that combines Covered Software with other material, in
|
||||||
|
a separate file or files, that is not Covered Software.
|
||||||
|
|
||||||
|
1.8. "License"
|
||||||
|
means this document.
|
||||||
|
|
||||||
|
1.9. "Licensable"
|
||||||
|
means having the right to grant, to the maximum extent possible,
|
||||||
|
whether at the time of the initial grant or subsequently, any and
|
||||||
|
all of the rights conveyed by this License.
|
||||||
|
|
||||||
|
1.10. "Modifications"
|
||||||
|
means any of the following:
|
||||||
|
|
||||||
|
(a) any file in Source Code Form that results from an addition to,
|
||||||
|
deletion from, or modification of the contents of Covered
|
||||||
|
Software; or
|
||||||
|
|
||||||
|
(b) any new file in Source Code Form that contains any Covered
|
||||||
|
Software.
|
||||||
|
|
||||||
|
1.11. "Patent Claims" of a Contributor
|
||||||
|
means any patent claim(s), including without limitation, method,
|
||||||
|
process, and apparatus claims, in any patent Licensable by such
|
||||||
|
Contributor that would be infringed, but for the grant of the
|
||||||
|
License, by the making, using, selling, offering for sale, having
|
||||||
|
made, import, or transfer of either its Contributions or its
|
||||||
|
Contributor Version.
|
||||||
|
|
||||||
|
1.12. "Secondary License"
|
||||||
|
means either the GNU General Public License, Version 2.0, the GNU
|
||||||
|
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||||
|
Public License, Version 3.0, or any later versions of those
|
||||||
|
licenses.
|
||||||
|
|
||||||
|
1.13. "Source Code Form"
|
||||||
|
means the form of the work preferred for making modifications.
|
||||||
|
|
||||||
|
1.14. "You" (or "Your")
|
||||||
|
means an individual or a legal entity exercising rights under this
|
||||||
|
License. For legal entities, "You" includes any entity that
|
||||||
|
controls, is controlled by, or is under common control with You. For
|
||||||
|
purposes of this definition, "control" means (a) the power, direct
|
||||||
|
or indirect, to cause the direction or management of such entity,
|
||||||
|
whether by contract or otherwise, or (b) ownership of more than
|
||||||
|
fifty percent (50%) of the outstanding shares or beneficial
|
||||||
|
ownership of such entity.
|
||||||
|
|
||||||
|
2. License Grants and Conditions
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
2.1. Grants
|
||||||
|
|
||||||
|
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||||
|
non-exclusive license:
|
||||||
|
|
||||||
|
(a) under intellectual property rights (other than patent or trademark)
|
||||||
|
Licensable by such Contributor to use, reproduce, make available,
|
||||||
|
modify, display, perform, distribute, and otherwise exploit its
|
||||||
|
Contributions, either on an unmodified basis, with Modifications, or
|
||||||
|
as part of a Larger Work; and
|
||||||
|
|
||||||
|
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
||||||
|
for sale, have made, import, and otherwise transfer either its
|
||||||
|
Contributions or its Contributor Version.
|
||||||
|
|
||||||
|
2.2. Effective Date
|
||||||
|
|
||||||
|
The licenses granted in Section 2.1 with respect to any Contribution
|
||||||
|
become effective for each Contribution on the date the Contributor first
|
||||||
|
distributes such Contribution.
|
||||||
|
|
||||||
|
2.3. Limitations on Grant Scope
|
||||||
|
|
||||||
|
The licenses granted in this Section 2 are the only rights granted under
|
||||||
|
this License. No additional rights or licenses will be implied from the
|
||||||
|
distribution or licensing of Covered Software under this License.
|
||||||
|
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||||
|
Contributor:
|
||||||
|
|
||||||
|
(a) for any code that a Contributor has removed from Covered Software;
|
||||||
|
or
|
||||||
|
|
||||||
|
(b) for infringements caused by: (i) Your and any other third party's
|
||||||
|
modifications of Covered Software, or (ii) the combination of its
|
||||||
|
Contributions with other software (except as part of its Contributor
|
||||||
|
Version); or
|
||||||
|
|
||||||
|
(c) under Patent Claims infringed by Covered Software in the absence of
|
||||||
|
its Contributions.
|
||||||
|
|
||||||
|
This License does not grant any rights in the trademarks, service marks,
|
||||||
|
or logos of any Contributor (except as may be necessary to comply with
|
||||||
|
the notice requirements in Section 3.4).
|
||||||
|
|
||||||
|
2.4. Subsequent Licenses
|
||||||
|
|
||||||
|
No Contributor makes additional grants as a result of Your choice to
|
||||||
|
distribute the Covered Software under a subsequent version of this
|
||||||
|
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||||
|
permitted under the terms of Section 3.3).
|
||||||
|
|
||||||
|
2.5. Representation
|
||||||
|
|
||||||
|
Each Contributor represents that the Contributor believes its
|
||||||
|
Contributions are its original creation(s) or it has sufficient rights
|
||||||
|
to grant the rights to its Contributions conveyed by this License.
|
||||||
|
|
||||||
|
2.6. Fair Use
|
||||||
|
|
||||||
|
This License is not intended to limit any rights You have under
|
||||||
|
applicable copyright doctrines of fair use, fair dealing, or other
|
||||||
|
equivalents.
|
||||||
|
|
||||||
|
2.7. Conditions
|
||||||
|
|
||||||
|
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
||||||
|
in Section 2.1.
|
||||||
|
|
||||||
|
3. Responsibilities
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
3.1. Distribution of Source Form
|
||||||
|
|
||||||
|
All distribution of Covered Software in Source Code Form, including any
|
||||||
|
Modifications that You create or to which You contribute, must be under
|
||||||
|
the terms of this License. You must inform recipients that the Source
|
||||||
|
Code Form of the Covered Software is governed by the terms of this
|
||||||
|
License, and how they can obtain a copy of this License. You may not
|
||||||
|
attempt to alter or restrict the recipients' rights in the Source Code
|
||||||
|
Form.
|
||||||
|
|
||||||
|
3.2. Distribution of Executable Form
|
||||||
|
|
||||||
|
If You distribute Covered Software in Executable Form then:
|
||||||
|
|
||||||
|
(a) such Covered Software must also be made available in Source Code
|
||||||
|
Form, as described in Section 3.1, and You must inform recipients of
|
||||||
|
the Executable Form how they can obtain a copy of such Source Code
|
||||||
|
Form by reasonable means in a timely manner, at a charge no more
|
||||||
|
than the cost of distribution to the recipient; and
|
||||||
|
|
||||||
|
(b) You may distribute such Executable Form under the terms of this
|
||||||
|
License, or sublicense it under different terms, provided that the
|
||||||
|
license for the Executable Form does not attempt to limit or alter
|
||||||
|
the recipients' rights in the Source Code Form under this License.
|
||||||
|
|
||||||
|
3.3. Distribution of a Larger Work
|
||||||
|
|
||||||
|
You may create and distribute a Larger Work under terms of Your choice,
|
||||||
|
provided that You also comply with the requirements of this License for
|
||||||
|
the Covered Software. If the Larger Work is a combination of Covered
|
||||||
|
Software with a work governed by one or more Secondary Licenses, and the
|
||||||
|
Covered Software is not Incompatible With Secondary Licenses, this
|
||||||
|
License permits You to additionally distribute such Covered Software
|
||||||
|
under the terms of such Secondary License(s), so that the recipient of
|
||||||
|
the Larger Work may, at their option, further distribute the Covered
|
||||||
|
Software under the terms of either this License or such Secondary
|
||||||
|
License(s).
|
||||||
|
|
||||||
|
3.4. Notices
|
||||||
|
|
||||||
|
You may not remove or alter the substance of any license notices
|
||||||
|
(including copyright notices, patent notices, disclaimers of warranty,
|
||||||
|
or limitations of liability) contained within the Source Code Form of
|
||||||
|
the Covered Software, except that You may alter any license notices to
|
||||||
|
the extent required to remedy known factual inaccuracies.
|
||||||
|
|
||||||
|
3.5. Application of Additional Terms
|
||||||
|
|
||||||
|
You may choose to offer, and to charge a fee for, warranty, support,
|
||||||
|
indemnity or liability obligations to one or more recipients of Covered
|
||||||
|
Software. However, You may do so only on Your own behalf, and not on
|
||||||
|
behalf of any Contributor. You must make it absolutely clear that any
|
||||||
|
such warranty, support, indemnity, or liability obligation is offered by
|
||||||
|
You alone, and You hereby agree to indemnify every Contributor for any
|
||||||
|
liability incurred by such Contributor as a result of warranty, support,
|
||||||
|
indemnity or liability terms You offer. You may include additional
|
||||||
|
disclaimers of warranty and limitations of liability specific to any
|
||||||
|
jurisdiction.
|
||||||
|
|
||||||
|
4. Inability to Comply Due to Statute or Regulation
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
If it is impossible for You to comply with any of the terms of this
|
||||||
|
License with respect to some or all of the Covered Software due to
|
||||||
|
statute, judicial order, or regulation then You must: (a) comply with
|
||||||
|
the terms of this License to the maximum extent possible; and (b)
|
||||||
|
describe the limitations and the code they affect. Such description must
|
||||||
|
be placed in a text file included with all distributions of the Covered
|
||||||
|
Software under this License. Except to the extent prohibited by statute
|
||||||
|
or regulation, such description must be sufficiently detailed for a
|
||||||
|
recipient of ordinary skill to be able to understand it.
|
||||||
|
|
||||||
|
5. Termination
|
||||||
|
--------------
|
||||||
|
|
||||||
|
5.1. The rights granted under this License will terminate automatically
|
||||||
|
if You fail to comply with any of its terms. However, if You become
|
||||||
|
compliant, then the rights granted under this License from a particular
|
||||||
|
Contributor are reinstated (a) provisionally, unless and until such
|
||||||
|
Contributor explicitly and finally terminates Your grants, and (b) on an
|
||||||
|
ongoing basis, if such Contributor fails to notify You of the
|
||||||
|
non-compliance by some reasonable means prior to 60 days after You have
|
||||||
|
come back into compliance. Moreover, Your grants from a particular
|
||||||
|
Contributor are reinstated on an ongoing basis if such Contributor
|
||||||
|
notifies You of the non-compliance by some reasonable means, this is the
|
||||||
|
first time You have received notice of non-compliance with this License
|
||||||
|
from such Contributor, and You become compliant prior to 30 days after
|
||||||
|
Your receipt of the notice.
|
||||||
|
|
||||||
|
5.2. If You initiate litigation against any entity by asserting a patent
|
||||||
|
infringement claim (excluding declaratory judgment actions,
|
||||||
|
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||||
|
directly or indirectly infringes any patent, then the rights granted to
|
||||||
|
You by any and all Contributors for the Covered Software under Section
|
||||||
|
2.1 of this License shall terminate.
|
||||||
|
|
||||||
|
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
||||||
|
end user license agreements (excluding distributors and resellers) which
|
||||||
|
have been validly granted by You or Your distributors under this License
|
||||||
|
prior to termination shall survive termination.
|
||||||
|
|
||||||
|
************************************************************************
|
||||||
|
* *
|
||||||
|
* 6. Disclaimer of Warranty *
|
||||||
|
* ------------------------- *
|
||||||
|
* *
|
||||||
|
* Covered Software is provided under this License on an "as is" *
|
||||||
|
* basis, without warranty of any kind, either expressed, implied, or *
|
||||||
|
* statutory, including, without limitation, warranties that the *
|
||||||
|
* Covered Software is free of defects, merchantable, fit for a *
|
||||||
|
* particular purpose or non-infringing. The entire risk as to the *
|
||||||
|
* quality and performance of the Covered Software is with You. *
|
||||||
|
* Should any Covered Software prove defective in any respect, You *
|
||||||
|
* (not any Contributor) assume the cost of any necessary servicing, *
|
||||||
|
* repair, or correction. This disclaimer of warranty constitutes an *
|
||||||
|
* essential part of this License. No use of any Covered Software is *
|
||||||
|
* authorized under this License except under this disclaimer. *
|
||||||
|
* *
|
||||||
|
************************************************************************
|
||||||
|
|
||||||
|
************************************************************************
|
||||||
|
* *
|
||||||
|
* 7. Limitation of Liability *
|
||||||
|
* -------------------------- *
|
||||||
|
* *
|
||||||
|
* Under no circumstances and under no legal theory, whether tort *
|
||||||
|
* (including negligence), contract, or otherwise, shall any *
|
||||||
|
* Contributor, or anyone who distributes Covered Software as *
|
||||||
|
* permitted above, be liable to You for any direct, indirect, *
|
||||||
|
* special, incidental, or consequential damages of any character *
|
||||||
|
* including, without limitation, damages for lost profits, loss of *
|
||||||
|
* goodwill, work stoppage, computer failure or malfunction, or any *
|
||||||
|
* and all other commercial damages or losses, even if such party *
|
||||||
|
* shall have been informed of the possibility of such damages. This *
|
||||||
|
* limitation of liability shall not apply to liability for death or *
|
||||||
|
* personal injury resulting from such party's negligence to the *
|
||||||
|
* extent applicable law prohibits such limitation. Some *
|
||||||
|
* jurisdictions do not allow the exclusion or limitation of *
|
||||||
|
* incidental or consequential damages, so this exclusion and *
|
||||||
|
* limitation may not apply to You. *
|
||||||
|
* *
|
||||||
|
************************************************************************
|
||||||
|
|
||||||
|
8. Litigation
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Any litigation relating to this License may be brought only in the
|
||||||
|
courts of a jurisdiction where the defendant maintains its principal
|
||||||
|
place of business and such litigation shall be governed by laws of that
|
||||||
|
jurisdiction, without reference to its conflict-of-law provisions.
|
||||||
|
Nothing in this Section shall prevent a party's ability to bring
|
||||||
|
cross-claims or counter-claims.
|
||||||
|
|
||||||
|
9. Miscellaneous
|
||||||
|
----------------
|
||||||
|
|
||||||
|
This License represents the complete agreement concerning the subject
|
||||||
|
matter hereof. If any provision of this License is held to be
|
||||||
|
unenforceable, such provision shall be reformed only to the extent
|
||||||
|
necessary to make it enforceable. Any law or regulation which provides
|
||||||
|
that the language of a contract shall be construed against the drafter
|
||||||
|
shall not be used to construe this License against a Contributor.
|
||||||
|
|
||||||
|
10. Versions of the License
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
10.1. New Versions
|
||||||
|
|
||||||
|
Mozilla Foundation is the license steward. Except as provided in Section
|
||||||
|
10.3, no one other than the license steward has the right to modify or
|
||||||
|
publish new versions of this License. Each version will be given a
|
||||||
|
distinguishing version number.
|
||||||
|
|
||||||
|
10.2. Effect of New Versions
|
||||||
|
|
||||||
|
You may distribute the Covered Software under the terms of the version
|
||||||
|
of the License under which You originally received the Covered Software,
|
||||||
|
or under the terms of any subsequent version published by the license
|
||||||
|
steward.
|
||||||
|
|
||||||
|
10.3. Modified Versions
|
||||||
|
|
||||||
|
If you create software not governed by this License, and you want to
|
||||||
|
create a new license for such software, you may create and use a
|
||||||
|
modified version of this License if you rename the license and remove
|
||||||
|
any references to the name of the license steward (except to note that
|
||||||
|
such modified license differs from this License).
|
||||||
|
|
||||||
|
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
||||||
|
Licenses
|
||||||
|
|
||||||
|
If You choose to distribute Source Code Form that is Incompatible With
|
||||||
|
Secondary Licenses under the terms of this version of the License, the
|
||||||
|
notice described in Exhibit B of this License must be attached.
|
||||||
|
|
||||||
|
Exhibit A - Source Code Form License Notice
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
If it is not possible or desirable to put the notice in a particular
|
||||||
|
file, then You may include the notice in a location (such as a LICENSE
|
||||||
|
file in a relevant directory) where a recipient would be likely to look
|
||||||
|
for such a notice.
|
||||||
|
|
||||||
|
You may add additional accurate notices of copyright ownership.
|
||||||
|
|
||||||
|
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
||||||
|
---------------------------------------------------------
|
||||||
|
|
||||||
|
This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||||
|
defined by the Mozilla Public License, v. 2.0.
|
36
README.md
Normal file
36
README.md
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# Penpot Helm Chart
|
||||||
|
|
||||||
|
This repository contains the Penpot Helm Chart curated by Penpot.
|
||||||
|
|
||||||
|
## Local Development
|
||||||
|
|
||||||
|
### Requirements:
|
||||||
|
|
||||||
|
- [docker](https://docs.docker.com/engine/install/)
|
||||||
|
- [kind](https://kind.sigs.k8s.io/docs/user/quick-start/#installation)
|
||||||
|
- [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)
|
||||||
|
- [helm](https://helm.sh/docs/intro/install/)
|
||||||
|
|
||||||
|
### Usage:
|
||||||
|
|
||||||
|
- Create the cluster `penpot-cluster` with a namespace `penpot`:
|
||||||
|
```shell
|
||||||
|
./scripts/cluster_create.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
- Download dependencies
|
||||||
|
```shell
|
||||||
|
helm repo add bitnami https://charts.bitnami.com/bitnami
|
||||||
|
helm dependency build ./charts/penpot
|
||||||
|
```
|
||||||
|
|
||||||
|
- Install the chart
|
||||||
|
```shell
|
||||||
|
helm install penpot ./charts/penpot -f devel/penpot.values.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
- Access to http://localhost/
|
||||||
|
> :bulb: if you disable ingress, you can exposing the app in the port 8888 with:
|
||||||
|
> ```shell
|
||||||
|
> kubectl port-forward service/penpot 8888:80
|
||||||
|
> ```
|
5
SECURITY.md
Normal file
5
SECURITY.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
Please report security issues to `support@penpot.app`
|
23
charts/penpot/.helmignore
Normal file
23
charts/penpot/.helmignore
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
9
charts/penpot/Chart.lock
Normal file
9
charts/penpot/Chart.lock
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
dependencies:
|
||||||
|
- name: postgresql
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
version: 15.5.10
|
||||||
|
- name: redis
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
version: 19.5.5
|
||||||
|
digest: sha256:1987422035eb83d10647c04826d9ee984e5675678a683013864a557301b70a2c
|
||||||
|
generated: "2024-06-25T17:19:37.004734089+02:00"
|
32
charts/penpot/Chart.yaml
Normal file
32
charts/penpot/Chart.yaml
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
apiVersion: v2
|
||||||
|
version: 0.1.0 # Chart version
|
||||||
|
appVersion: "2.0.3" # Penpot version
|
||||||
|
type: application
|
||||||
|
name: penpot
|
||||||
|
description: Helm chart for Penpot, the Open Source design and prototyping platform.
|
||||||
|
maintainers:
|
||||||
|
- name: Kaleidos INC
|
||||||
|
url: https://kaleidos.net
|
||||||
|
home: https://penpot.app
|
||||||
|
icon: https://avatars.githubusercontent.com/u/30179644?s=200&v=4
|
||||||
|
sources:
|
||||||
|
- https://github.com/penpot/penpot/tree/main
|
||||||
|
- https://github.com/penpot/penpot-helm/tree/main
|
||||||
|
keywords:
|
||||||
|
- kubernetes
|
||||||
|
- penpot
|
||||||
|
- penpotapp
|
||||||
|
- design
|
||||||
|
- designsystem
|
||||||
|
- opensource
|
||||||
|
- ux
|
||||||
|
- ui
|
||||||
|
dependencies:
|
||||||
|
- name: postgresql
|
||||||
|
version: 15.x.x # appVersion >= 16.2.0
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
condition: global.postgresqlEnabled
|
||||||
|
- name: redis
|
||||||
|
version: 19.x.x # appVersion >= 7.2.4
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
condition: global.redisEnabled
|
BIN
charts/penpot/charts/postgresql-15.5.10.tgz
Normal file
BIN
charts/penpot/charts/postgresql-15.5.10.tgz
Normal file
Binary file not shown.
BIN
charts/penpot/charts/redis-19.5.5.tgz
Normal file
BIN
charts/penpot/charts/redis-19.5.5.tgz
Normal file
Binary file not shown.
8
charts/penpot/templates/NOTES.txt
Normal file
8
charts/penpot/templates/NOTES.txt
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
Thank you for installing {{ .Chart.Name }}.
|
||||||
|
|
||||||
|
Your release is named '{{ .Release.Name }}'.
|
||||||
|
|
||||||
|
To learn more about the release, try:
|
||||||
|
|
||||||
|
$ helm status {{ .Release.Name }}
|
||||||
|
$ helm get all {{ .Release.Name }}
|
75
charts/penpot/templates/_helpers.tpl
Normal file
75
charts/penpot/templates/_helpers.tpl
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "penpot.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "penpot.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride }}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||||
|
{{- if contains $name .Release.Name }}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "penpot.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "penpot.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "penpot.chart" . }}
|
||||||
|
{{ include "penpot.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "penpot.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "penpot.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- define "penpot.frontendSelectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "penpot.name" . }}-frontend
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- define "penpot.backendSelectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "penpot.name" . }}-backend
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- define "penpot.exporterSelectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "penpot.name" . }}-exporter
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "penpot.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
{{- default (include "penpot.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else }}
|
||||||
|
{{- default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
24
charts/penpot/templates/assets-persistentvolumeclaim.yml
Normal file
24
charts/penpot/templates/assets-persistentvolumeclaim.yml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: {{ include "penpot.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.persistence.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.persistence.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
{{- range .Values.persistence.accessModes }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.persistence.size | quote }}
|
||||||
|
{{- if .Values.persistence.storageClass }}
|
||||||
|
storageClassName: "{{ .Values.persistence.storageClass }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
403
charts/penpot/templates/backend-deployment.yml
Normal file
403
charts/penpot/templates/backend-deployment.yml
Normal file
|
@ -0,0 +1,403 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "penpot.fullname" . }}-backend
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "penpot.backendSelectorLabels" . | nindent 6 }}
|
||||||
|
replicas: {{ .Values.backend.replicaCount }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: penpot-backend
|
||||||
|
{{- include "penpot.backendSelectorLabels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.global.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ include "penpot.serviceAccountName" . }}
|
||||||
|
{{- if .Values.backend.podSecurityContext.enabled }}
|
||||||
|
securityContext:
|
||||||
|
{{- omit .Values.backend.podSecurityContext "enabled" | toYaml | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
affinity:
|
||||||
|
podAffinity:
|
||||||
|
requiredDuringSchedulingIgnoredDuringExecution:
|
||||||
|
- labelSelector:
|
||||||
|
matchExpressions:
|
||||||
|
- key: app.kubernetes.io/instance
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- {{ .Release.Name }}
|
||||||
|
topologyKey: "kubernetes.io/hostname"
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}-backend
|
||||||
|
image: "{{ .Values.backend.image.repository }}:{{ .Values.backend.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.backend.image.pullPolicy }}
|
||||||
|
{{- if .Values.backend.containerSecurityContext.enabled }}
|
||||||
|
securityContext:
|
||||||
|
{{- omit .Values.backend.containerSecurityContext "enabled" | toYaml | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
env:
|
||||||
|
{{/* General settings */}}
|
||||||
|
- name: PENPOT_PUBLIC_URI
|
||||||
|
value: {{ .Values.config.publicUri | quote }}
|
||||||
|
- name: PENPOT_FLAGS
|
||||||
|
value: "$PENPOT_FLAGS {{ .Values.config.flags }}"
|
||||||
|
- name: PENPOT_SECRET_KEY
|
||||||
|
value: {{ .Values.config.apiSecretKey | quote }}
|
||||||
|
{{- if .Values.config.registrationDomainWhitelist }}
|
||||||
|
- name: PENPOT_REGISTRATION_DOMAIN_WHITELIST
|
||||||
|
value: {{ .Values.config.registrationDomainWhitelist | quote }}
|
||||||
|
{{- end }}
|
||||||
|
- name: PENPOT_TELEMETRY_ENABLED
|
||||||
|
value: {{ .Values.config.telemetryEnabled | quote }}
|
||||||
|
{{- if .Values.backend.service.prepl.enabled }}
|
||||||
|
- name: PENPOT_PREPL_HOST
|
||||||
|
value: "0.0.0.0"
|
||||||
|
{{- end }}
|
||||||
|
{{/* PosgreSQL connection settings */}}
|
||||||
|
- name: PENPOT_DATABASE_URI
|
||||||
|
{{- if .Values.config.postgresql.host }}
|
||||||
|
value: "postgresql://{{ .Values.config.postgresql.host }}:{{ .Values.config.postgresql.port }}/{{ .Values.config.postgresql.database }}"
|
||||||
|
{{- else }}
|
||||||
|
value: {{ print "postgresql://" (include "penpot.fullname" .) "-postgresql:" .Values.config.postgresql.port "/" .Values.config.postgresql.database }}
|
||||||
|
{{- end }}
|
||||||
|
- name: PENPOT_DATABASE_USERNAME
|
||||||
|
{{- if not .Values.config.postgresql.secretKeys.usernameKey }}
|
||||||
|
value: {{ .Values.config.postgresql.username | quote }}
|
||||||
|
{{- else }}
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.postgresql.existingSecret }}
|
||||||
|
key: {{ .Values.config.postgresql.secretKeys.usernameKey }}
|
||||||
|
{{- end }}
|
||||||
|
- name: PENPOT_DATABASE_PASSWORD
|
||||||
|
{{- if not .Values.config.postgresql.secretKeys.passwordKey }}
|
||||||
|
value: {{ .Values.config.postgresql.password | quote }}
|
||||||
|
{{- else }}
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.postgresql.existingSecret }}
|
||||||
|
key: {{ .Values.config.postgresql.secretKeys.passwordKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{/* Redis connection settings */}}
|
||||||
|
- name: PENPOT_REDIS_URI
|
||||||
|
{{- if .Values.config.redis.host }}
|
||||||
|
value: "redis://{{ .Values.config.redis.host }}:{{ .Values.config.redis.port }}/{{ .Values.config.redis.database }}"
|
||||||
|
{{- else }}
|
||||||
|
value: {{ print "redis://" (include "penpot.fullname" .) "-redis-master:" .Values.config.redis.port "/" .Values.config.redis.database }}
|
||||||
|
{{- end }}
|
||||||
|
{{/* Assets storage settings */}}
|
||||||
|
- name: PENPOT_ASSETS_STORAGE_BACKEND
|
||||||
|
value: {{ .Values.config.assets.storageBackend | quote }}
|
||||||
|
{{- if eq .Values.config.assets.storageBackend "assets-fs" }}
|
||||||
|
- name: PENPOT_STORAGE_ASSETS_FS_DIRECTORY
|
||||||
|
value: {{ .Values.config.assets.filesystem.directory | quote }}
|
||||||
|
{{- else if eq .Values.config.assets.storageBackend "assets-s3" }}
|
||||||
|
- name: PENPOT_STORAGE_ASSETS_S3_REGION
|
||||||
|
value: {{ .Values.config.assets.s3.region | quote }}
|
||||||
|
- name: PENPOT_STORAGE_ASSETS_S3_BUCKET
|
||||||
|
value: {{ .Values.config.assets.s3.bucket | quote }}
|
||||||
|
- name: AWS_ACCESS_KEY_ID
|
||||||
|
{{- if not .Values.config.assets.s3.secretKeys.accessKeyIDKey }}
|
||||||
|
value: {{ .Values.config.assets.s3.accessKeyID | quote }}
|
||||||
|
{{- else }}
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.assets.s3.existingSecret }}
|
||||||
|
key: {{ .Values.config.assets.s3.secretKeys.accessKeyIDKey }}
|
||||||
|
{{- end }}
|
||||||
|
- name: AWS_SECRET_ACCESS_KEY
|
||||||
|
{{- if not .Values.config.assets.s3.secretKeys.secretAccessKey }}
|
||||||
|
value: {{ .Values.config.assets.s3.secretAccessKey | quote }}
|
||||||
|
{{- else }}
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.assets.s3.existingSecret }}
|
||||||
|
key: {{ .Values.config.assets.s3.secretKeys.secretAccessKey }}
|
||||||
|
{{- end }}
|
||||||
|
- name: PENPOT_STORAGE_ASSETS_S3_ENDPOINT
|
||||||
|
{{- if not .Values.config.assets.s3.secretKeys.endpointURIKey }}
|
||||||
|
value: {{ .Values.config.assets.s3.endpointURI | quote }}
|
||||||
|
{{- else }}
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.assets.s3.existingSecret }}
|
||||||
|
key: {{ .Values.config.assets.s3.secretKeys.endpointURIKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{/* SMTP settings */}}
|
||||||
|
{{- if .Values.config.smtp.enabled }}
|
||||||
|
{{- if .Values.config.smtp.defaultFrom }}
|
||||||
|
- name: PENPOT_SMTP_DEFAULT_FROM
|
||||||
|
value: {{ .Values.config.smtp.defaultFrom | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.smtp.defaultReplyTo }}
|
||||||
|
- name: PENPOT_SMTP_DEFAULT_REPLY_TO
|
||||||
|
value: {{ .Values.config.smtp.defaultReplyTo | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.smtp.host }}
|
||||||
|
- name: PENPOT_SMTP_HOST
|
||||||
|
value: {{ .Values.config.smtp.host | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.smtp.port }}
|
||||||
|
- name: PENPOT_SMTP_PORT
|
||||||
|
value: {{ .Values.config.smtp.port | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not .Values.config.smtp.secretKeys.usernameKey }}
|
||||||
|
- name: PENPOT_SMTP_USERNAME
|
||||||
|
value: {{ .Values.config.smtp.username | quote }}
|
||||||
|
{{- else }}
|
||||||
|
- name: PENPOT_SMTP_USERNAME
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.smtp.existingSecret }}
|
||||||
|
key: {{ .Values.config.smtp.secretKeys.usernameKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not .Values.config.smtp.secretKeys.passwordKey }}
|
||||||
|
- name: PENPOT_SMTP_PASSWORD
|
||||||
|
value: {{ .Values.config.smtp.password | quote }}
|
||||||
|
{{- else }}
|
||||||
|
- name: PENPOT_SMTP_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.smtp.existingSecret }}
|
||||||
|
key: {{ .Values.config.smtp.secretKeys.passwordKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.smtp.tls }}
|
||||||
|
- name: PENPOT_SMTP_TLS
|
||||||
|
value: {{ .Values.config.smtp.tls | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.smtp.ssl }}
|
||||||
|
- name: PENPOT_SMTP_SSL
|
||||||
|
value: {{ .Values.config.smtp.ssl | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{/* Google Auth provider settings */}}
|
||||||
|
{{- if .Values.config.providers.google.enabled }}
|
||||||
|
{{- if not .Values.config.providers.secretKeys.googleClientIDKey }}
|
||||||
|
- name: PENPOT_GOOGLE_CLIENT_ID
|
||||||
|
value: {{ .Values.config.providers.google.clientID | quote }}
|
||||||
|
{{- else }}
|
||||||
|
- name: PENPOT_GOOGLE_CLIENT_ID
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.providers.existingSecret }}
|
||||||
|
key: {{ .Values.config.providers.secretKeys.googleClientIDKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not .Values.config.providers.secretKeys.googleClientSecretKey}}
|
||||||
|
- name: PENPOT_GOOGLE_CLIENT_SECRET
|
||||||
|
value: {{ .Values.config.providers.google.clientSecret | quote }}
|
||||||
|
{{- else }}
|
||||||
|
- name: PENPOT_GOOGLE_CLIENT_SECRET
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.providers.existingSecret }}
|
||||||
|
key: {{ .Values.config.providers.secretKeys.googleClientSecretKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{/* Github Auth provider settings */}}
|
||||||
|
{{- if .Values.config.providers.github.enabled }}
|
||||||
|
{{- if not .Values.config.providers.secretKeys.githubClientIDKey }}
|
||||||
|
- name: PENPOT_GITHUB_CLIENT_ID
|
||||||
|
value: {{ .Values.config.providers.github.clientID | quote }}
|
||||||
|
{{- else }}
|
||||||
|
- name: PENPOT_GITHUB_CLIENT_ID
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.providers.existingSecret }}
|
||||||
|
key: {{ .Values.config.providers.secretKeys.githubClientIDKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not .Values.config.providers.secretKeys.githubClientSecretKey }}
|
||||||
|
- name: PENPOT_GITHUB_CLIENT_SECRET
|
||||||
|
value: {{ .Values.config.providers.github.clientSecret | quote }}
|
||||||
|
{{- else }}
|
||||||
|
- name: PENPOT_GITHUB_CLIENT_SECRET
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.providers.existingSecret }}
|
||||||
|
key: {{ .Values.config.providers.secretKeys.githubClientSecretKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{/* Gitlab Auth provider settings */}}
|
||||||
|
{{- if .Values.config.providers.gitlab.enabled }}
|
||||||
|
{{- if .Values.config.providers.gitlab.baseURI }}
|
||||||
|
- name: PENPOT_GITLAB_BASE_URI
|
||||||
|
value: {{ .Values.config.providers.gitlab.baseURI | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not .Values.config.providers.secretKeys.gitlabClientIDKey }}
|
||||||
|
- name: PENPOT_GITLAB_CLIENT_ID
|
||||||
|
value: {{ .Values.config.providers.gitlab.clientID | quote }}
|
||||||
|
{{- else }}
|
||||||
|
- name: PENPOT_GITLAB_CLIENT_ID
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.providers.existingSecret }}
|
||||||
|
key: {{ .Values.config.providers.secretKeys.gitlabClientIDKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not .Values.config.providers.secretKeys.gitlabClientSecretKey }}
|
||||||
|
- name: PENPOT_GITLAB_CLIENT_SECRET
|
||||||
|
value: {{ .Values.config.providers.gitlab.clientSecret | quote }}
|
||||||
|
{{- else }}
|
||||||
|
- name: PENPOT_GITLAB_CLIENT_SECRET
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.providers.existingSecret }}
|
||||||
|
key: {{ .Values.config.providers.secretKeys.gitlabClientSecretKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{/* OIDC provider settings */}}
|
||||||
|
{{- if .Values.config.providers.oidc.enabled }}
|
||||||
|
{{- if .Values.config.providers.oidc.baseURI }}
|
||||||
|
- name: PENPOT_OIDC_BASE_URI
|
||||||
|
value: {{ .Values.config.providers.oidc.baseURI | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not .Values.config.providers.secretKeys.oidcClientIDKey }}
|
||||||
|
- name: PENPOT_OIDC_CLIENT_ID
|
||||||
|
value: {{ .Values.config.providers.oidc.clientID | quote}}
|
||||||
|
{{- else }}
|
||||||
|
- name: PENPOT_OIDC_CLIENT_ID
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.providers.existingSecret }}
|
||||||
|
key: {{ .Values.config.providers.secretKeys.oidcClientIDKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not .Values.config.providers.secretKeys.oidcClientSecretKey}}
|
||||||
|
- name: PENPOT_OIDC_CLIENT_SECRET
|
||||||
|
value: {{ .Values.config.providers.oidc.clientSecret | quote }}
|
||||||
|
{{- else }}
|
||||||
|
- name: PENPOT_OIDC_CLIENT_SECRET
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.config.providers.existingSecret }}
|
||||||
|
key: {{ .Values.config.providers.secretKeys.oidcClientSecretKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.oidc.authURI }}
|
||||||
|
- name: PENPOT_OIDC_AUTH_URI
|
||||||
|
value: {{ .Values.config.providers.oidc.authURI | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.oidc.tokenURI }}
|
||||||
|
- name: PENPOT_OIDC_TOKEN_URI
|
||||||
|
value: {{ .Values.config.providers.oidc.tokenURI | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.oidc.userURI }}
|
||||||
|
- name: PENPOT_OIDC_USER_URI
|
||||||
|
value: {{ .Values.config.providers.oidc.userURI | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.oidc.roles }}
|
||||||
|
- name: PENPOT_OIDC_ROLES
|
||||||
|
value: {{ .Values.config.providers.oidc.roles | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.oidc.rolesAttribute }}
|
||||||
|
- name: PENPOT_OIDC_ROLES_ATTR
|
||||||
|
value: {{ .Values.config.providers.oidc.rolesAttribute | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.oidc.scopes }}
|
||||||
|
- name: PENPOT_OIDC_SCOPES
|
||||||
|
value: {{ .Values.config.providers.oidc.scopes | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.oidc.nameAttribute }}
|
||||||
|
- name: PENPOT_OIDC_NAME_ATTR
|
||||||
|
value: {{ .Values.config.providers.oidc.nameAttribute | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.oidc.emailAttribute }}
|
||||||
|
- name: PENPOT_OIDC_EMAIL_ATTR
|
||||||
|
value: {{ .Values.config.providers.oidc.emailAttribute | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.oidc.userInfoSource }}
|
||||||
|
- name: PENPOT_OIDC_USER_INFO_SOURCE
|
||||||
|
value: {{ .Values.config.providers.oidc.userInfoSource | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{/* LDAP provider settings */}}
|
||||||
|
{{- if .Values.config.providers.ldap.enabled }}
|
||||||
|
{{- if .Values.config.providers.ldap.host }}
|
||||||
|
- name: PENPOT_LDAP_HOST
|
||||||
|
value: {{ .Values.config.providers.ldap.host | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.ldap.port }}
|
||||||
|
- name: PENPOT_LDAP_PORT
|
||||||
|
value: {{ .Values.config.providers.ldap.port | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.ldap.ssl }}
|
||||||
|
- name: PENPOT_LDAP_SSL
|
||||||
|
value: {{ .Values.config.providers.ldap.ssl | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.ldap.startTLS }}
|
||||||
|
- name: PENPOT_LDAP_STARTTLS
|
||||||
|
value: {{ .Values.config.providers.ldap.startTLS | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.ldap.baseDN }}
|
||||||
|
- name: PENPOT_LDAP_BASE_DN
|
||||||
|
value: {{ .Values.config.providers.ldap.baseDN | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.ldap.bindDN }}
|
||||||
|
- name: PENPOT_LDAP_BIND_DN
|
||||||
|
value: {{ .Values.config.providers.ldap.bindDN | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.ldap.bindPassword }}
|
||||||
|
- name: PENPOT_LDAP_BIND_PASSWORD
|
||||||
|
value: {{ .Values.config.providers.ldap.bindPassword | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.ldap.userQuery }}
|
||||||
|
- name: PENPOT_LDAP_USER_QUERY
|
||||||
|
value: {{ .Values.config.providers.ldap.userQuery | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.ldap.attributesUsername }}
|
||||||
|
- name: PENPOT_LDAP_ATTRS_USERNAME
|
||||||
|
value: {{ .Values.config.providers.ldap.attributesUsername | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.ldap.attributesEmail }}
|
||||||
|
- name: PENPOT_LDAP_ATTRS_EMAIL
|
||||||
|
value: {{ .Values.config.providers.ldap.attributesEmail | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.ldap.attributesFullname }}
|
||||||
|
- name: PENPOT_LDAP_ATTRS_FULLNAME
|
||||||
|
value: {{ .Values.config.providers.ldap.attributesFullname | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.config.providers.ldap.attributesPhoto }}
|
||||||
|
- name: PENPOT_LDAP_ATTRS_PHOTO
|
||||||
|
value: {{ .Values.config.providers.ldap.attributesPhoto | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /opt/data/assets
|
||||||
|
name: app-data
|
||||||
|
readOnly: false
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: {{ .Values.backend.service.http.port }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- if .Values.backend.service.prepl.enabled }}
|
||||||
|
- name: prepl
|
||||||
|
containerPort: {{ .Values.backend.service.prepl.port }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.backend.resources | nindent 12 }}
|
||||||
|
{{- with .Values.backend.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.backend.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.backend.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: app-data
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ .Values.persistence.existingClaim | default ( include "penpot.fullname" . ) }}
|
||||||
|
{{- else }}
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end }}
|
37
charts/penpot/templates/backend-service.yml
Normal file
37
charts/penpot/templates/backend-service.yml
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "penpot.fullname" . }}-backend
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
{{- include "penpot.backendSelectorLabels" . | nindent 4 }}
|
||||||
|
type: {{ .Values.backend.service.http.type }}
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.backend.service.http.port }}
|
||||||
|
targetPort: {{ .Values.backend.service.http.port }}
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
{{- if .Values.backend.service.prepl.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "penpot.fullname" . }}-backend-prepl
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
{{- include "penpot.backendSelectorLabels" . | nindent 4 }}
|
||||||
|
type: {{ .Values.backend.service.prepl.type }}
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.backend.service.prepl.port }}
|
||||||
|
targetPort: {{ .Values.backend.service.prepl.port }}
|
||||||
|
protocol: TCP
|
||||||
|
name: prepl
|
||||||
|
{{- end }}
|
75
charts/penpot/templates/exporter-deployment.yml
Normal file
75
charts/penpot/templates/exporter-deployment.yml
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "penpot.fullname" . }}-exporter
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.exporter.replicaCount }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "penpot.exporterSelectorLabels" . | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.exporterSelectorLabels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.global.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ include "penpot.serviceAccountName" . }}
|
||||||
|
{{ if .Values.exporter.podSecurityContext.enabled }}
|
||||||
|
securityContext:
|
||||||
|
{{- omit .Values.exporter.podSecurityContext "enabled" | toYaml | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}-exporter
|
||||||
|
image: "{{ .Values.exporter.image.repository }}:{{ .Values.exporter.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.exporter.image.imagePullPolicy }}
|
||||||
|
{{ if .Values.exporter.containerSecurityContext.enabled }}
|
||||||
|
securityContext:
|
||||||
|
{{- omit .Values.exporter.containerSecurityContext "enabled" | toYaml | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
env:
|
||||||
|
- name: PENPOT_PUBLIC_URI
|
||||||
|
value: {{ .Values.config.publicURI | quote }}
|
||||||
|
- name: PENPOT_REDIS_URI
|
||||||
|
{{- if .Values.config.redis.host }}
|
||||||
|
value: "redis://{{ .Values.config.redis.host }}:{{ .Values.config.redis.port }}/{{ .Values.config.redis.database }}"
|
||||||
|
{{- else }}
|
||||||
|
value: {{ print "redis://" (include "penpot.fullname" .) "-redis-master:" .Values.config.redis.port "/" .Values.config.redis.database }}
|
||||||
|
{{- end }}
|
||||||
|
- name: PENPOT_TEMPDIR
|
||||||
|
value: "/tmp/penpot-exporter"
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /tmp/penpot-exporter
|
||||||
|
name: app-data
|
||||||
|
readOnly: false
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: {{ .Values.exporter.service.port }}
|
||||||
|
protocol: TCP
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.exporter.resources | nindent 12 }}
|
||||||
|
{{- with .Values.exporter.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.exporter.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.exporter.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: app-data
|
||||||
|
{{- if .Values.exporter.persistence.enabled }}
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ .Values.exporter.persistence.existingClaim | default ( printf "%s-%s" ( include "penpot.fullname" . ) "exporter" ) }}
|
||||||
|
{{- else }}
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end }}
|
24
charts/penpot/templates/exporter-persistentvolumeclaim.yml
Normal file
24
charts/penpot/templates/exporter-persistentvolumeclaim.yml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{{- if and .Values.exporter.persistence.enabled (not .Values.exporter.persistence.existingClaim) -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: {{ include "penpot.fullname" . }}-exporter
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.exporter.persistence.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.exporter.persistence.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
{{- range .Values.exporter.persistence.accessModes }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.exporter.persistence.size | quote }}
|
||||||
|
{{- if .Values.exporter.persistence.storageClass }}
|
||||||
|
storageClassName: "{{ .Values.exporter.persistence.storageClass }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
17
charts/penpot/templates/exporter-service.yml
Normal file
17
charts/penpot/templates/exporter-service.yml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "penpot.fullname" . }}-exporter
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
type: {{ .Values.exporter.service.type }}
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.exporter.service.port }}
|
||||||
|
targetPort: {{ .Values.exporter.service.port }}
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
{{- include "penpot.exporterSelectorLabels" . | nindent 4 }}
|
||||||
|
|
74
charts/penpot/templates/frontend-deployment.yml
Normal file
74
charts/penpot/templates/frontend-deployment.yml
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "penpot.fullname" . }}-frontend
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "penpot.frontendSelectorLabels" . | nindent 6 }}
|
||||||
|
replicas: {{ .Values.frontend.replicaCount }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: penpot-frontend
|
||||||
|
{{- include "penpot.frontendSelectorLabels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.global.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ include "penpot.serviceAccountName" . }}
|
||||||
|
affinity:
|
||||||
|
podAffinity:
|
||||||
|
requiredDuringSchedulingIgnoredDuringExecution:
|
||||||
|
- labelSelector:
|
||||||
|
matchExpressions:
|
||||||
|
- key: app.kubernetes.io/instance
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- {{ .Release.Name }}
|
||||||
|
topologyKey: "kubernetes.io/hostname"
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}-frontend
|
||||||
|
image: "{{ .Values.frontend.image.repository }}:{{ .Values.frontend.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.frontend.image.pullPolicy }}
|
||||||
|
env:
|
||||||
|
- name: PENPOT_FLAGS
|
||||||
|
value: "$PENPOT_FLAGS {{ .Values.config.flags }}"
|
||||||
|
- name: PENPOT_BACKEND_URI
|
||||||
|
value: {{ print "http://" (include "penpot.fullname" .) "-backend:" .Values.backend.service.http.port }}
|
||||||
|
- name: PENPOT_EXPORTER_URI
|
||||||
|
value: {{ print "http://" (include "penpot.fullname" .) "-exporter:" .Values.exporter.service.port }}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /opt/data/assets
|
||||||
|
name: app-data
|
||||||
|
readOnly: false
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: {{ .Values.frontend.service.port }}
|
||||||
|
protocol: TCP
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.frontend.resources | nindent 12 }}
|
||||||
|
{{- with .Values.frontend.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.frontend.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.frontend.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: app-data
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ .Values.persistence.existingClaim | default ( include "penpot.fullname" . ) }}
|
||||||
|
{{- else }}
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end }}
|
16
charts/penpot/templates/frontend-service.yml
Normal file
16
charts/penpot/templates/frontend-service.yml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "penpot.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
type: {{ .Values.frontend.service.type }}
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.frontend.service.port }}
|
||||||
|
targetPort: http
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
{{- include "penpot.frontendSelectorLabels" . | nindent 4 }}
|
53
charts/penpot/templates/ingress.yml
Normal file
53
charts/penpot/templates/ingress.yml
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $fullName := include "penpot.fullname" . -}}
|
||||||
|
{{- $svcPort := .Values.frontend.service.port -}}
|
||||||
|
{{- $path := .Values.ingress.path }}
|
||||||
|
{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
|
||||||
|
{{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
|
||||||
|
{{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
apiVersion: networking.k8s.io/v1beta1
|
||||||
|
{{- else -}}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
{{- end }}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
|
||||||
|
ingressClassName: {{ .Values.ingress.className }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- .Values.ingress.tls | toYaml | nindent 4 }}
|
||||||
|
{{ end }}
|
||||||
|
rules:
|
||||||
|
{{- range $host := .Values.ingress.hosts }}
|
||||||
|
- host: {{ $host | quote }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: {{ $path }}
|
||||||
|
{{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
port:
|
||||||
|
number: {{ $svcPort }}
|
||||||
|
{{- else }}
|
||||||
|
backend:
|
||||||
|
serviceName: {{ $fullName }}
|
||||||
|
servicePort: {{ $svcPort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
13
charts/penpot/templates/serviceaccount.yml
Normal file
13
charts/penpot/templates/serviceaccount.yml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{{- if .Values.serviceAccount.enabled -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: {{ include "penpot.serviceAccountName" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "penpot.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.serviceAccount.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
516
charts/penpot/values.yaml
Normal file
516
charts/penpot/values.yaml
Normal file
|
@ -0,0 +1,516 @@
|
||||||
|
## Default values for Penpot
|
||||||
|
|
||||||
|
########################################
|
||||||
|
## @section Global parameters
|
||||||
|
########################################
|
||||||
|
|
||||||
|
## @param global.postgresqlEnabled Whether to deploy the Bitnami PostgreSQL chart as subchart. Check [the official chart](https://artifacthub.io/packages/helm/bitnami/postgresql) for configuration.
|
||||||
|
## @param global.redisEnabled Whether to deploy the Bitnami Redis chart as subchart. Check [the official chart](https://artifacthub.io/packages/helm/bitnami/redis) for configuration.
|
||||||
|
## @param global.imagePullSecrets Global Docker registry secret names as an array.
|
||||||
|
##
|
||||||
|
global:
|
||||||
|
postgresqlEnabled: false
|
||||||
|
redisEnabled: false
|
||||||
|
## E.g.
|
||||||
|
## imagePullSecrets:
|
||||||
|
## - myRegistryKeySecretName
|
||||||
|
##
|
||||||
|
imagePullSecrets: []
|
||||||
|
|
||||||
|
########################################
|
||||||
|
## @section Common parameters
|
||||||
|
########################################
|
||||||
|
|
||||||
|
## @param nameOverride String to partially override common.names.fullname
|
||||||
|
##
|
||||||
|
nameOverride: ""
|
||||||
|
## @param fullnameOverride String to fully override common.names.fullname
|
||||||
|
##
|
||||||
|
fullnameOverride: ""
|
||||||
|
## @param serviceAccount.enabled Specifies whether a ServiceAccount should be created.
|
||||||
|
## @param serviceAccount.annotations Annotations for service account. Evaluated as a template. Only used if `create` is `true`.
|
||||||
|
## @param serviceAccount.name The name of the ServiceAccount to use. If not set and enabled is true, a name is generated using the fullname template.
|
||||||
|
##
|
||||||
|
serviceAccount:
|
||||||
|
enabled: true
|
||||||
|
annotations: {}
|
||||||
|
name: "penpot"
|
||||||
|
|
||||||
|
########################################
|
||||||
|
## @section Configuration parameters
|
||||||
|
########################################
|
||||||
|
|
||||||
|
config:
|
||||||
|
## @param config.publicUri The public domain to serve Penpot on. Set `disable-secure-session-cookies` in the flags if you plan on serving it on a non HTTPS domain.
|
||||||
|
## @param config.flags The feature flags to enable. Check [the official docs](https://help.penpot.app/technical-guide/configuration/) for more info.
|
||||||
|
## @param config.apiSecretKey A random secret key needed for persistent user sessions. Generate with `python3 -c "import secrets; print(secrets.token_urlsafe(64))"` for example.
|
||||||
|
##
|
||||||
|
publicUri: "http://penpot.example.com"
|
||||||
|
flags: "enable-registration enable-login-with-password disable-email-verification enable-smtp enable-prepl-server"
|
||||||
|
apiSecretKey: "kmZ96pAxhTgk3HZvvBkPeVTspGBneKVLEpO_3ecORs_gwACENZ77z05zCe7skvPsQ3jI3QgkULQOWCuLjmjQsg"
|
||||||
|
## @param config.postgresql.host The PostgreSQL host to connect to. Empty to use dependencies.
|
||||||
|
## @param config.postgresql.port The PostgreSQL host port to use.
|
||||||
|
## @param config.postgresql.username The database username to use.
|
||||||
|
## @param config.postgresql.password The database password to use.
|
||||||
|
## @param config.postgresql.database The PostgreSQL database to use.
|
||||||
|
## @param config.postgresql.existingSecret The name of an existing secret.
|
||||||
|
## @param config.postgresql.secretKeys.usernameKey The username key to use from an existing secret.
|
||||||
|
## @param config.postgresql.secretKeys.passwordKey The password key to use from an existing secret.
|
||||||
|
##
|
||||||
|
postgresql:
|
||||||
|
host: "" # Ex.: "postgresql.penpot.svc.cluster.local"
|
||||||
|
port: 5432
|
||||||
|
username: "penpot"
|
||||||
|
password: "penpot"
|
||||||
|
database: "penpot"
|
||||||
|
existingSecret: ""
|
||||||
|
secretKeys:
|
||||||
|
usernameKey: ""
|
||||||
|
passwordKey: ""
|
||||||
|
## @param config.redis.host The Redis host to connect to. Empty to use dependencies
|
||||||
|
## @param config.redis.port The Redis host port to use.
|
||||||
|
## @param config.redis.database The Redis database to connect to.
|
||||||
|
##
|
||||||
|
redis:
|
||||||
|
host: "" # Ex.: "redis-headless.penpot.svc.cluster.local"
|
||||||
|
port: 6379
|
||||||
|
database: "0"
|
||||||
|
## @param config.assets.storageBackend The storage backend for assets to use. Use `assets-fs` for filesystem, and `assets-s3` for S3.
|
||||||
|
## @param config.assets.filesystem.directory The storage directory to use if you chose the filesystem storage backend.
|
||||||
|
## @param config.assets.s3.accessKeyID The S3 access key ID to use if you chose the S3 storage backend.
|
||||||
|
## @param config.assets.s3.secretAccessKey The S3 secret access key to use if you chose the S3 storage backend.
|
||||||
|
## @param config.assets.s3.region The S3 region to use if you chose the S3 storage backend.
|
||||||
|
## @param config.assets.s3.bucket The name of the S3 bucket to use if you chose the S3 storage backend.
|
||||||
|
## @param config.assets.s3.endpointURI The S3 endpoint URI to use if you chose the S3 storage backend.
|
||||||
|
## @param config.assets.s3.existingSecret The name of an existing secret.
|
||||||
|
## @param config.assets.s3.secretKeys.accessKeyIDKey The S3 access key ID to use from an existing secret.
|
||||||
|
## @param config.assets.s3.secretKeys.secretAccessKey The S3 secret access key to use from an existing secret.
|
||||||
|
## @param config.assets.s3.secretKeys.endpointURIKey The S3 endpoint URI to use from an existing secret.
|
||||||
|
##
|
||||||
|
assets:
|
||||||
|
storageBackend: "assets-fs"
|
||||||
|
filesystem:
|
||||||
|
directory: "/opt/data/assets"
|
||||||
|
s3:
|
||||||
|
accessKeyID: ""
|
||||||
|
secretAccessKey: ""
|
||||||
|
region: ""
|
||||||
|
bucket: ""
|
||||||
|
endpointURI: ""
|
||||||
|
existingSecret: ""
|
||||||
|
secretKeys:
|
||||||
|
accessKeyIDKey: ""
|
||||||
|
secretAccessKey: ""
|
||||||
|
endpointURIKey: ""
|
||||||
|
## @param config.telemetryEnabled Whether to enable sending of anonymous telemetry data.
|
||||||
|
##
|
||||||
|
telemetryEnabled: true
|
||||||
|
## @param config.smtp.enabled Whether to enable SMTP configuration. You also need to add the 'enable-smtp' flag to the PENPOT_FLAGS variable.
|
||||||
|
## @param config.smtp.defaultFrom The SMTP default email to send from.
|
||||||
|
## @param config.smtp.defaultReplyTo The SMTP default email to reply to.
|
||||||
|
## @param config.smtp.host The SMTP host to use.
|
||||||
|
## @param config.smtp.port The SMTP host port to use.
|
||||||
|
## @param config.smtp.username The SMTP username to use.
|
||||||
|
## @param config.smtp.password The SMTP password to use.
|
||||||
|
## @param config.smtp.tls Whether to use TLS for the SMTP connection.
|
||||||
|
## @param config.smtp.ssl Whether to use SSL for the SMTP connection.
|
||||||
|
## @param config.smtp.existingSecret The name of an existing secret.
|
||||||
|
## @param config.smtp.secretKeys.usernameKey The SMTP username to use from an existing secret.
|
||||||
|
## @param config.smtp.secretKeys.passwordKey The SMTP password to use from an existing secret.
|
||||||
|
##
|
||||||
|
smtp:
|
||||||
|
enabled: false
|
||||||
|
defaultFrom: ""
|
||||||
|
defaultReplyTo: ""
|
||||||
|
host: ""
|
||||||
|
port: ""
|
||||||
|
username: ""
|
||||||
|
password: ""
|
||||||
|
tls: true
|
||||||
|
ssl: false
|
||||||
|
existingSecret: ""
|
||||||
|
secretKeys:
|
||||||
|
usernameKey: ""
|
||||||
|
passwordKey: ""
|
||||||
|
## @param config.registrationDomainWhitelist Comma separated list of allowed domains to register. Empty to allow all domains.
|
||||||
|
##
|
||||||
|
registrationDomainWhitelist: ""
|
||||||
|
## Penpot Authentication providers parameters
|
||||||
|
##
|
||||||
|
providers:
|
||||||
|
## @param config.providers.google.enabled Whether to enable Google configuration. To enable Google auth, add `enable-login-with-google` to the flags.
|
||||||
|
## @param config.providers.google.clientID The Google client ID to use. To enable Google auth, add `enable-login-with-google` to the flags.
|
||||||
|
## @param config.providers.google.clientSecret The Google client secret to use. To enable Google auth, add `enable-login-with-google` to the flags.
|
||||||
|
##
|
||||||
|
google:
|
||||||
|
enabled: false
|
||||||
|
clientID: ""
|
||||||
|
clientSecret: ""
|
||||||
|
## @param config.providers.github.enabled Whether to enable GitHub configuration. To enable GitHub auth, also add `enable-login-with-github` to the flags.
|
||||||
|
## @param config.providers.github.clientID The GitHub client ID to use.
|
||||||
|
## @param config.providers.github.clientSecret The GitHub client secret to use.
|
||||||
|
##
|
||||||
|
github:
|
||||||
|
enabled: false
|
||||||
|
clientID: ""
|
||||||
|
clientSecret: ""
|
||||||
|
## @param config.providers.gitlab.enabled Whether to enable GitLab configuration. To enable GitLab auth, also add `enable-login-with-gitlab` to the flags.
|
||||||
|
## @param config.providers.gitlab.baseURI The GitLab base URI to use.
|
||||||
|
## @param config.providers.gitlab.clientID The GitLab client ID to use.
|
||||||
|
## @param config.providers.gitlab.clientSecret The GitLab client secret to use.
|
||||||
|
##
|
||||||
|
gitlab:
|
||||||
|
enabled: false
|
||||||
|
baseURI: "https://gitlab.com"
|
||||||
|
clientID: ""
|
||||||
|
clientSecret: ""
|
||||||
|
## @param config.providers.oidc.enabled Whether to enable OIDC configuration. To enable OpenID Connect auth, also add `enable-login-with-oidc` to the flags.
|
||||||
|
## @param config.providers.oidc.baseURI The OpenID Connect base URI to use.
|
||||||
|
## @param config.providers.oidc.clientID The OpenID Connect client ID to use.
|
||||||
|
## @param config.providers.oidc.clientSecret The OpenID Connect client secret to use.
|
||||||
|
## @param config.providers.oidc.authURI Optional OpenID Connect auth URI to use. Auto discovered if not provided.
|
||||||
|
## @param config.providers.oidc.tokenURI Optional OpenID Connect token URI to use. Auto discovered if not provided.
|
||||||
|
## @param config.providers.oidc.userURI Optional OpenID Connect user URI to use. Auto discovered if not provided.
|
||||||
|
## @param config.providers.oidc.roles Optional OpenID Connect roles to use. If no role is provided, roles checking disabled.
|
||||||
|
## @param config.providers.oidc.rolesAttribute Optional OpenID Connect roles attribute to use. If not provided, the roles checking will be disabled.
|
||||||
|
## @param config.providers.oidc.scopes Optional OpenID Connect scopes to use. This settings allow overwrite the required scopes, use with caution because penpot requres at least `name` and `email` attrs found on the user info. Optional, defaults to `openid profile`.
|
||||||
|
## @param config.providers.oidc.nameAttribute Optional OpenID Connect name attribute to use. If not provided, the `name` prop will be used.
|
||||||
|
## @param config.providers.oidc.emailAttribute Optional OpenID Connect email attribute to use. If not provided, the `email` prop will be used.
|
||||||
|
##
|
||||||
|
oidc:
|
||||||
|
enabled: false
|
||||||
|
baseURI: ""
|
||||||
|
clientID: ""
|
||||||
|
clientSecret: ""
|
||||||
|
authURI: ""
|
||||||
|
tokenURI: ""
|
||||||
|
userURI: ""
|
||||||
|
roles: "role1 role2"
|
||||||
|
rolesAttribute: ""
|
||||||
|
scopes: "scope1 scope2"
|
||||||
|
nameAttribute: ""
|
||||||
|
emailAttribute: ""
|
||||||
|
## @param config.providers.ldap.enabled Whether to enable LDAP configuration. To enable LDAP, also add `enable-login-with-ldap` to the flags.
|
||||||
|
## @param config.providers.ldap.host The LDAP host to use.
|
||||||
|
## @param config.providers.ldap.port The LDAP port to use.
|
||||||
|
## @param config.providers.ldap.ssl Whether to use SSL for the LDAP connection.
|
||||||
|
## @param config.providers.ldap.startTLS Whether to utilize StartTLS for the LDAP connection.
|
||||||
|
## @param config.providers.ldap.baseDN The LDAP base DN to use.
|
||||||
|
## @param config.providers.ldap.bindDN The LDAP bind DN to use.
|
||||||
|
## @param config.providers.ldap.bindPassword The LDAP bind password to use.
|
||||||
|
## @param config.providers.ldap.userQuery The LDAP user query to use.
|
||||||
|
## @param config.providers.ldap.attributesUsername The LDAP attributes username to use.
|
||||||
|
## @param config.providers.ldap.attributesEmail The LDAP attributes email to use.
|
||||||
|
## @param config.providers.ldap.attributesFullname The LDAP attributes fullname to use.
|
||||||
|
## @param config.providers.ldap.attributesPhoto The LDAP attributes photo format to use.
|
||||||
|
##
|
||||||
|
ldap:
|
||||||
|
enabled: false
|
||||||
|
host: "ldap"
|
||||||
|
port: 10389
|
||||||
|
ssl: false
|
||||||
|
startTLS: false
|
||||||
|
baseDN: "ou=people,dc=planetexpress,dc=com"
|
||||||
|
bindDN: "cn=admin,dc=planetexpress,dc=com"
|
||||||
|
bindPassword: "GoodNewsEveryone"
|
||||||
|
userQuery: "(&(|(uid=:username)(mail=:username))(memberOf=cn=penpot,ou=groups,dc=my-domain,dc=com))"
|
||||||
|
attributesUsername: "uid"
|
||||||
|
attributesEmail: "mail"
|
||||||
|
attributesFullname: "cn"
|
||||||
|
attributesPhoto: "jpegPhoto"
|
||||||
|
## @param config.providers.existingSecret The name of an existing secret to use.
|
||||||
|
## @param config.providers.secretKeys.googleClientIDKey The Google client ID key to use from an existing secret.
|
||||||
|
## @param config.providers.secretKeys.googleClientSecretKey The Google client secret key to use from an existing secret.
|
||||||
|
## @param config.providers.secretKeys.githubClientIDKey The GitHub client ID key to use from an existing secret.
|
||||||
|
## @param config.providers.secretKeys.githubClientSecretKey The GitHub client secret key to use from an existing secret.
|
||||||
|
## @param config.providers.secretKeys.gitlabClientIDKey The GitLab client ID key to use from an existing secret.
|
||||||
|
## @param config.providers.secretKeys.gitlabClientSecretKey The GitLab client secret key to use from an existing secret.
|
||||||
|
## @param config.providers.secretKeys.oidcClientIDKey The OpenID Connect client ID key to use from an existing secret.
|
||||||
|
## @param config.providers.secretKeys.oidcClientSecretKey The OpenID Connect client secret key to use from an existing secret.
|
||||||
|
##
|
||||||
|
existingSecret: ""
|
||||||
|
secretKeys:
|
||||||
|
googleClientIDKey: ""
|
||||||
|
googleClientSecretKey: ""
|
||||||
|
githubClientIDKey: ""
|
||||||
|
githubClientSecretKey: ""
|
||||||
|
gitlabClientIDKey: ""
|
||||||
|
gitlabClientSecretKey: ""
|
||||||
|
oidcClientIDKey: ""
|
||||||
|
oidcClientSecretKey: ""
|
||||||
|
|
||||||
|
########################################
|
||||||
|
## @section Backend parameters
|
||||||
|
########################################
|
||||||
|
|
||||||
|
backend:
|
||||||
|
## @param backend.image.repository The Docker repository to pull the image from.
|
||||||
|
## @param backend.image.tag The image tag to use.
|
||||||
|
## @param backend.image.pullPolicy The image pull policy to use.
|
||||||
|
##
|
||||||
|
image:
|
||||||
|
repository: penpotapp/backend
|
||||||
|
tag: 2.0.3
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
## @param backend.replicaCount The number of replicas to deploy.
|
||||||
|
##
|
||||||
|
replicaCount: 1
|
||||||
|
## @param backend.service.http.type The http service type to create.
|
||||||
|
## @param backend.service.http.port The http service port to use.
|
||||||
|
## @param backend.service.prepl.enabled Whether to enable the prepl service in the backend.
|
||||||
|
## @param backend.service.prepl.type The prepl service type to create.
|
||||||
|
## @param backend.service.prepl.port The prepl service port to use.
|
||||||
|
service:
|
||||||
|
http:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 6060
|
||||||
|
prepl:
|
||||||
|
enabled: false
|
||||||
|
type: ClusterIP
|
||||||
|
port: 6063
|
||||||
|
## Configure Pods Security Context
|
||||||
|
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
|
||||||
|
## @param backend.podSecurityContext.enabled Enabled Penpot pods' security context
|
||||||
|
## @param backend.podSecurityContext.fsGroup Set Penpot pod's security context fsGroup
|
||||||
|
##
|
||||||
|
podSecurityContext:
|
||||||
|
enabled: true
|
||||||
|
fsGroup: 1001
|
||||||
|
## Configure Container Security Context
|
||||||
|
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
|
||||||
|
## @param backend.containerSecurityContext.enabled Enabled Penpot containers' security context
|
||||||
|
## @param backend.containerSecurityContext.runAsUser Set Penpot containers' security context runAsUser
|
||||||
|
## @param backend.containerSecurityContext.allowPrivilegeEscalation Set Penpot containers' security context allowPrivilegeEscalation
|
||||||
|
## @param backend.containerSecurityContext.capabilities.drop Set Penpot containers' security context capabilities to be dropped
|
||||||
|
## @param backend.containerSecurityContext.readOnlyRootFilesystem Set Penpot containers' security context readOnlyRootFilesystem
|
||||||
|
## @param backend.containerSecurityContext.runAsNonRoot Set Penpot container's security context runAsNonRoot
|
||||||
|
##
|
||||||
|
containerSecurityContext:
|
||||||
|
enabled: true
|
||||||
|
runAsUser: 1001
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
capabilities:
|
||||||
|
drop:
|
||||||
|
- all
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
runAsNonRoot: true
|
||||||
|
## @param backend.affinity Affinity for Penpot pods assignment
|
||||||
|
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||||
|
##
|
||||||
|
affinity: {}
|
||||||
|
## @param backend.nodeSelector Node labels for Penpot pods assignment
|
||||||
|
## ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||||
|
##
|
||||||
|
nodeSelector: {}
|
||||||
|
## @param backend.tolerations Tolerations for Penpot pods assignment
|
||||||
|
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||||
|
##
|
||||||
|
tolerations: []
|
||||||
|
## Penpot backend resource requests and limits
|
||||||
|
## ref: https://kubernetes.io/docs/user-guide/compute-resources/
|
||||||
|
## @param backend.resources.limits The resources limits for the Penpot backend containers
|
||||||
|
## @param backend.resources.requests The requested resources for the Penpot backend containers
|
||||||
|
##
|
||||||
|
resources:
|
||||||
|
limits: {}
|
||||||
|
requests: {}
|
||||||
|
|
||||||
|
########################################
|
||||||
|
## @section Frontend parameters
|
||||||
|
########################################
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
## @param frontend.image.repository The Docker repository to pull the image from.
|
||||||
|
## @param frontend.image.tag The image tag to use.
|
||||||
|
## @param frontend.image.imagePullPolicy The image pull policy to use.
|
||||||
|
##
|
||||||
|
image:
|
||||||
|
repository: penpotapp/frontend
|
||||||
|
tag: 2.0.3
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
## @param frontend.replicaCount The number of replicas to deploy.
|
||||||
|
##
|
||||||
|
replicaCount: 1
|
||||||
|
## @param frontend.service.type The service type to create.
|
||||||
|
## @param frontend.service.port The service port to use.
|
||||||
|
##
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 80
|
||||||
|
## @param frontend.affinity Affinity for Penpot pods assignment
|
||||||
|
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||||
|
##
|
||||||
|
affinity: {}
|
||||||
|
## @param frontend.nodeSelector Node labels for Penpot pods assignment
|
||||||
|
## ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||||
|
##
|
||||||
|
nodeSelector: {}
|
||||||
|
## @param frontend.tolerations Tolerations for Penpot pods assignment
|
||||||
|
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||||
|
##
|
||||||
|
tolerations: []
|
||||||
|
## Penpot frontend resource requests and limits
|
||||||
|
## ref: https://kubernetes.io/docs/user-guide/compute-resources/
|
||||||
|
## @param frontend.resources.limits The resources limits for the Penpot frontend containers
|
||||||
|
## @param frontend.resources.requests The requested resources for the Penpot frontend containers
|
||||||
|
##
|
||||||
|
resources:
|
||||||
|
limits: {}
|
||||||
|
requests: {}
|
||||||
|
|
||||||
|
########################################
|
||||||
|
## @section Exporter parameters
|
||||||
|
########################################
|
||||||
|
|
||||||
|
exporter:
|
||||||
|
## @param exporter.image.repository The Docker repository to pull the image from.
|
||||||
|
## @param exporter.image.tag The image tag to use.
|
||||||
|
## @param exporter.image.imagePullPolicy The image pull policy to use.
|
||||||
|
##
|
||||||
|
image:
|
||||||
|
repository: penpotapp/exporter
|
||||||
|
tag: 2.0.3
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
## @param exporter.replicaCount The number of replicas to deploy. Enable exporter.persistence if you use more than 1 replicaCount
|
||||||
|
##
|
||||||
|
replicaCount: 1
|
||||||
|
## @param exporter.service.type The service type to create.
|
||||||
|
## @param exporter.service.port The service port to use.
|
||||||
|
##
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 6061
|
||||||
|
|
||||||
|
## @param exporter.persistence.enabled Enable persistence using Persistent Volume Claims. If exporter.replicaCount you have to enable it.
|
||||||
|
## @param exporter.persistence.storageClass Persistent Volume storage class. Empty is choosing the default provisioner by the provider.
|
||||||
|
## @param exporter.persistence.size Persistent Volume size.
|
||||||
|
## @param exporter.persistence.existingClaim The name of an existing PVC to use for persistence.
|
||||||
|
## @param exporter.persistence.accessModes Persistent Volume access modes.
|
||||||
|
## @param exporter.persistence.annotations Persistent Volume Claim annotations.
|
||||||
|
##
|
||||||
|
persistence:
|
||||||
|
enabled: false
|
||||||
|
storageClass: ""
|
||||||
|
size: 10Gi
|
||||||
|
existingClaim: ""
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
annotations: {}
|
||||||
|
## Configure Pods Security Context
|
||||||
|
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
|
||||||
|
## @param exporter.podSecurityContext.enabled Enabled Penpot pods' security context
|
||||||
|
## @param exporter.podSecurityContext.fsGroup Set Penpot pod's security context fsGroup
|
||||||
|
##
|
||||||
|
podSecurityContext:
|
||||||
|
enabled: true
|
||||||
|
fsGroup: 1001
|
||||||
|
## Configure Container Security Context
|
||||||
|
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
|
||||||
|
## @param exporter.containerSecurityContext.enabled Enabled Penpot containers' security context
|
||||||
|
## @param exporter.containerSecurityContext.runAsUser Set Penpot containers' security context runAsUser
|
||||||
|
## @param exporter.containerSecurityContext.allowPrivilegeEscalation Set Penpot containers' security context allowPrivilegeEscalation
|
||||||
|
## @param exporter.containerSecurityContext.capabilities.drop Set Penpot containers' security context capabilities to be dropped
|
||||||
|
## @param exporter.containerSecurityContext.readOnlyRootFilesystem Set Penpot containers' security context readOnlyRootFilesystem
|
||||||
|
## @param exporter.containerSecurityContext.runAsNonRoot Set Penpot container's security context runAsNonRoot
|
||||||
|
##
|
||||||
|
containerSecurityContext:
|
||||||
|
enabled: true
|
||||||
|
runAsUser: 1001
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
capabilities:
|
||||||
|
drop:
|
||||||
|
- all
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
runAsNonRoot: true
|
||||||
|
## @param exporter.affinity Affinity for Penpot pods assignment
|
||||||
|
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||||
|
##
|
||||||
|
affinity: {}
|
||||||
|
## @param exporter.nodeSelector Node labels for Penpot pods assignment
|
||||||
|
## ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||||
|
##
|
||||||
|
nodeSelector: {}
|
||||||
|
## @param exporter.tolerations Tolerations for Penpot pods assignment
|
||||||
|
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||||
|
##
|
||||||
|
tolerations: []
|
||||||
|
## Penpot exporter resource requests and limits
|
||||||
|
## ref: https://kubernetes.io/docs/user-guide/compute-resources/
|
||||||
|
## @param exporter.resources.limits The resources limits for the Penpot exporter containers
|
||||||
|
## @param exporter.resources.requests The requested resources for the Penpot exporter containers
|
||||||
|
##
|
||||||
|
resources:
|
||||||
|
limits: {}
|
||||||
|
requests: {}
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
## @section Assets Persistence parameters
|
||||||
|
########################################
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
## @param persistence.enabled Enable persistence using Persistent Volume Claims.
|
||||||
|
##
|
||||||
|
enabled: fals
|
||||||
|
## @param persistence.storageClass Persistent Volume storage class.
|
||||||
|
## If defined, storageClassName: <storageClass>.
|
||||||
|
## If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner.
|
||||||
|
##
|
||||||
|
storageClass: ""
|
||||||
|
## @param persistence.size Persistent Volume size.
|
||||||
|
##
|
||||||
|
size: 20Gi
|
||||||
|
## @param persistence.existingClaim The name of an existing PVC to use for persistence.
|
||||||
|
##
|
||||||
|
existingClaim: ""
|
||||||
|
## @param persistence.accessModes Persistent Volume access modes.
|
||||||
|
##
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
## @param persistence.annotations Persistent Volume Claim annotations.
|
||||||
|
##
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
## @section Ingress parameters
|
||||||
|
########################################
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
className: ""
|
||||||
|
annotations: {}
|
||||||
|
# kubernetes.io/ingress.class: nginx
|
||||||
|
# kubernetes.io/tls-acme: "true"
|
||||||
|
path: "/"
|
||||||
|
hosts:
|
||||||
|
- host: penpot.example.com
|
||||||
|
tls: []
|
||||||
|
# - secretName: penpot.example.com-tls
|
||||||
|
# hosts:
|
||||||
|
# - penpot.example.com
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
## @section PostgreSQL configuration (Check for [more parameters here](https://artifacthub.io/packages/helm/bitnami/postgresql))
|
||||||
|
########################################
|
||||||
|
|
||||||
|
## @param postgresql.auth.username Name for a custom user to create.
|
||||||
|
## @param postgresql.auth.password Password for the custom user to create.
|
||||||
|
## @param postgresql.auth.database Name for a custom database to create.
|
||||||
|
##
|
||||||
|
postgresql:
|
||||||
|
auth:
|
||||||
|
username: "penpot"
|
||||||
|
password: "penpot"
|
||||||
|
database: "penpot"
|
||||||
|
|
||||||
|
########################################
|
||||||
|
## @section Redis configuration (Check for [more parameters here](https://artifacthub.io/packages/helm/bitnami/redis))
|
||||||
|
########################################
|
||||||
|
|
||||||
|
## @param redis.auth.enabled Whether to enable password authentication.
|
||||||
|
##
|
||||||
|
redis:
|
||||||
|
auth:
|
||||||
|
enabled: false
|
23
devel/kind.config.yml
Normal file
23
devel/kind.config.yml
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
apiVersion: kind.x-k8s.io/v1alpha4
|
||||||
|
kind: Cluster
|
||||||
|
name: penpot-cluster
|
||||||
|
nodes:
|
||||||
|
- role: control-plane
|
||||||
|
kubeadmConfigPatches:
|
||||||
|
- |
|
||||||
|
kind: InitConfiguration
|
||||||
|
nodeRegistration:
|
||||||
|
kubeletExtraArgs:
|
||||||
|
node-labels: "ingress-ready=true"
|
||||||
|
extraPortMappings:
|
||||||
|
- containerPort: 80
|
||||||
|
hostPort: 80
|
||||||
|
protocol: TCP
|
||||||
|
- containerPort: 443
|
||||||
|
hostPort: 443
|
||||||
|
protocol: TCP
|
||||||
|
- role: worker
|
||||||
|
- role: worker
|
||||||
|
- role: worker
|
||||||
|
- role: worker
|
||||||
|
- role: worker
|
4
devel/penpot-namespace.yml
Normal file
4
devel/penpot-namespace.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: penpot
|
27
devel/penpot.values.yaml
Normal file
27
devel/penpot.values.yaml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
## Default values for Penpot (local setup for development purpose)
|
||||||
|
global:
|
||||||
|
postgresqlEnabled: true
|
||||||
|
redisEnabled: true
|
||||||
|
|
||||||
|
config:
|
||||||
|
publicUri: "http://localhost"
|
||||||
|
apiSecretKey: "my-secret-key"
|
||||||
|
|
||||||
|
# backend:
|
||||||
|
# replicaCount: 2
|
||||||
|
|
||||||
|
# frontend:
|
||||||
|
# replicaCount: 2
|
||||||
|
|
||||||
|
# exporter:
|
||||||
|
# replicaCount: 2
|
||||||
|
# persistence:
|
||||||
|
# enabled: true
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
hosts:
|
||||||
|
- "localhost"
|
12
scripts/cluster_create.sh
Executable file
12
scripts/cluster_create.sh
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
# Create a kind cluster
|
||||||
|
kind create cluster --name penpot-cluster --config devel/kind.config.yml
|
||||||
|
|
||||||
|
# Create a namespace for Penpot
|
||||||
|
kubectl apply -f devel/penpot-namespace.yml
|
||||||
|
kubectl config set-context penpot --namespace=penpot --cluster=kind-penpot-cluster --user=kind-penpot-cluster
|
||||||
|
kubectl config use-context penpot
|
||||||
|
|
||||||
|
# Setup ingress
|
||||||
|
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
|
3
scripts/cluster_delete.sh
Executable file
3
scripts/cluster_delete.sh
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
kind delete clusters penpot-cluster
|
Loading…
Reference in a new issue