blob: b4099a42bc7b2ea266af7b2ab42a033231401f66 [file] [log] [blame] [view]
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +04001# Penpot
2
3Penpot is the first Open Source design and prototyping platform meant for cross-domain teams. Non dependent on operating systems, Penpot is web based and works with open standards (SVG). Penpot invites designers all over the world to fall in love with open source while getting developers excited about the design process in return.
4
5## TL;DR
6
7```console
8helm repo add codechem https://charts.codechem.com
9helm install penpot codechem/penpot
10```
11
12## Introduction
13
14Penpot makes design and prototyping accessible to every team in the world. It has a clear focus on design and code teams and its capabilities reflect exactly that. The less hand-off mindset, the more fun for everyone. Being web based, Penpot is not dependent on operating systems or local installations, you will only need to run a modern browser. Using SVG as no other design and prototyping tool does, Penpot files sport compatibility with most of the vectorial tools, are tech friendly and extremely easy to use on the web. It makes sure you will always own your work.
15
16## Prerequisites
17
18- Kubernetes 1.18+
19- Helm 3.2.0+
20
21## Installing the Chart
22
23To install the chart with the release name `penpot`:
24
25```console
26helm install penpot codechem/penpot
27```
28
29The command deploys penpot on the Kubernetes cluster in the default configuration. The [Parameters](#parameters) section lists the parameters that can be configured during installation.
30
31> **Tip**: List all releases using `helm list`
32
33## Uninstalling the Chart
34
35To uninstall/delete the `penpot` deployment:
36
37```console
38helm delete penpot
39```
40
41The command removes all the Kubernetes components associated with the chart and deletes the release.
42
43## Parameters
44
45### Global parameters
46
47| Name | Description | Value |
48| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- |
49| `global.postgresqlEnabled` | Whether to deploy the Bitnami PostgreSQL chart as subchart. Check [the official chart](https://artifacthub.io/packages/helm/bitnami/postgresql) for configuration. | `false` |
50| `global.redisEnabled` | Whether to deploy the Bitnami Redis chart as subchart. Check [the official chart](https://artifacthub.io/packages/helm/bitnami/redis) for configuration. | `false` |
51| `global.imagePullSecrets` | Global Docker registry secret names as an array. | `[]` |
52
53
54### Common parameters
55
56| Name | Description | Value |
57| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------ |
58| `nameOverride` | String to partially override common.names.fullname | `""` |
59| `fullnameOverride` | String to fully override common.names.fullname | `""` |
60| `serviceAccount.enabled` | Specifies whether a ServiceAccount should be created. | `true` |
61| `serviceAccount.annotations` | Annotations for service account. Evaluated as a template. Only used if `create` is `true`. | `{}` |
62| `serviceAccount.name` | The name of the ServiceAccount to use. If not set and enabled is true, a name is generated using the fullname template. | `""` |
63
64
65### Backend parameters
66
67| Name | Description | Value |
68| ----------------------------------------------------------- | ------------------------------------------------------------------ | ------------------- |
69| `backend.image.repository` | The Docker repository to pull the image from. | `penpotapp/backend` |
70| `backend.image.tag` | The image tag to use. | `1.16.0-beta` |
71| `backend.image.imagePullPolicy` | The image pull policy to use. | `IfNotPresent` |
72| `backend.replicaCount` | The number of replicas to deploy. | `1` |
73| `backend.service.type` | The service type to create. | `ClusterIP` |
74| `backend.service.port` | The service port to use. | `6060` |
75| `backend.podSecurityContext.enabled` | Enabled Penpot pods' security context | `true` |
76| `backend.podSecurityContext.fsGroup` | Set Penpot pod's security context fsGroup | `1001` |
77| `backend.containerSecurityContext.enabled` | Enabled Penpot containers' security context | `true` |
78| `backend.containerSecurityContext.runAsUser` | Set Penpot containers' security context runAsUser | `1001` |
79| `backend.containerSecurityContext.allowPrivilegeEscalation` | Set Penpot containers' security context allowPrivilegeEscalation | `false` |
80| `backend.containerSecurityContext.capabilities.drop` | Set Penpot containers' security context capabilities to be dropped | `["all"]` |
81| `backend.containerSecurityContext.readOnlyRootFilesystem` | Set Penpot containers' security context readOnlyRootFilesystem | `false` |
82| `backend.containerSecurityContext.runAsNonRoot` | Set Penpot container's security context runAsNonRoot | `true` |
83| `backend.affinity` | Affinity for Penpot pods assignment | `{}` |
84| `backend.nodeSelector` | Node labels for Penpot pods assignment | `{}` |
85| `backend.tolerations` | Tolerations for Penpot pods assignment | `[]` |
86| `backend.resources.limits` | The resources limits for the Penpot backend containers | `{}` |
87| `backend.resources.requests` | The requested resources for the Penpot backend containers | `{}` |
88
89
90### Frontend parameters
91
92| Name | Description | Value |
93| -------------------------------- | ---------------------------------------------------------- | -------------------- |
94| `frontend.image.repository` | The Docker repository to pull the image from. | `penpotapp/frontend` |
95| `frontend.image.tag` | The image tag to use. | `1.16.0-beta` |
96| `frontend.image.imagePullPolicy` | The image pull policy to use. | `IfNotPresent` |
97| `frontend.replicaCount` | The number of replicas to deploy. | `1` |
98| `frontend.service.type` | The service type to create. | `ClusterIP` |
99| `frontend.service.port` | The service port to use. | `80` |
100| `frontend.ingress.enabled` | Enable ingress record generation for Penpot frontend. | `false` |
101| `frontend.ingress.annotations` | Mapped annotations for the frontend ingress. | `{}` |
102| `frontend.ingress.hosts` | Array style hosts for the frontend ingress. | `[]` |
103| `frontend.ingress.tls` | Array style TLS secrets for the frontend ingress. | `[]` |
104| `frontend.affinity` | Affinity for Penpot pods assignment | `{}` |
105| `frontend.nodeSelector` | Node labels for Penpot pods assignment | `{}` |
106| `frontend.tolerations` | Tolerations for Penpot pods assignment | `[]` |
107| `frontend.resources.limits` | The resources limits for the Penpot frontend containers | `{}` |
108| `frontend.resources.requests` | The requested resources for the Penpot frontend containers | `{}` |
109
110
111### Exporter parameters
112
113| Name | Description | Value |
114| ------------------------------------------------------------ | ------------------------------------------------------------------ | -------------------- |
115| `exporter.image.repository` | The Docker repository to pull the image from. | `penpotapp/exporter` |
116| `exporter.image.tag` | The image tag to use. | `1.16.0-beta` |
117| `exporter.image.imagePullPolicy` | The image pull policy to use. | `IfNotPresent` |
118| `exporter.replicaCount` | The number of replicas to deploy. | `1` |
119| `exporter.service.type` | The service type to create. | `ClusterIP` |
120| `exporter.service.port` | The service port to use. | `6061` |
121| `exporter.podSecurityContext.enabled` | Enabled Penpot pods' security context | `true` |
122| `exporter.podSecurityContext.fsGroup` | Set Penpot pod's security context fsGroup | `1001` |
123| `exporter.containerSecurityContext.enabled` | Enabled Penpot containers' security context | `true` |
124| `exporter.containerSecurityContext.runAsUser` | Set Penpot containers' security context runAsUser | `1001` |
125| `exporter.containerSecurityContext.allowPrivilegeEscalation` | Set Penpot containers' security context allowPrivilegeEscalation | `false` |
126| `exporter.containerSecurityContext.capabilities.drop` | Set Penpot containers' security context capabilities to be dropped | `["all"]` |
127| `exporter.containerSecurityContext.readOnlyRootFilesystem` | Set Penpot containers' security context readOnlyRootFilesystem | `false` |
128| `exporter.containerSecurityContext.runAsNonRoot` | Set Penpot container's security context runAsNonRoot | `true` |
129| `exporter.affinity` | Affinity for Penpot pods assignment | `{}` |
130| `exporter.nodeSelector` | Node labels for Penpot pods assignment | `{}` |
131| `exporter.tolerations` | Tolerations for Penpot pods assignment | `[]` |
132| `exporter.resources.limits` | The resources limits for the Penpot exporter containers | `{}` |
133| `exporter.resources.requests` | The requested resources for the Penpot exporter containers | `{}` |
134
135
136### Persistence parameters
137
138| Name | Description | Value |
139| --------------------------- | --------------------------------------------------- | ------------------- |
140| `persistence.enabled` | Enable persistence using Persistent Volume Claims. | `false` |
141| `persistence.storageClass` | Persistent Volume storage class. | `""` |
142| `persistence.size` | Persistent Volume size. | `8Gi` |
143| `persistence.existingClaim` | The name of an existing PVC to use for persistence. | `""` |
144| `persistence.accessModes` | Persistent Volume access modes. | `["ReadWriteOnce"]` |
145| `persistence.annotations` | Persistent Volume Claim annotations. | `{}` |
146
147
148### Configuration parameters
149
150| Name | Description | Value |
151| --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
152| `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. | `http://localhost:8080` |
153| `config.flags` | The feature flags to enable. Check [the official docs](https://help.penpot.app/technical-guide/configuration/) for more info. | `enable-registration enable-login disable-demo-users disable-demo-warning` |
154| `config.apiSecretKey` | A random secret key needed for persistent user sessions. Generate with `openssl rand -hex 16` for example. | `b46a12cb4bedc6b9df8cb3f18c708b65` |
155| `config.postgresql.host` | The PostgreSQL host to connect to. | `postgresql.penpot.svc.cluster.local` |
156| `config.postgresql.port` | The PostgreSQL host port to use. | `5432` |
157| `config.postgresql.database` | The PostgreSQL database to use. | `""` |
158| `config.postgresql.username` | The database username to use. | `""` |
159| `config.postgresql.password` | The database username to use. | `""` |
160| `config.postgresql.existingSecret` | The name of an existing secret. | `""` |
161| `config.postgresql.secretKeys.usernameKey` | The username key to use from an existing secret. | `""` |
162| `config.postgresql.secretKeys.passwordKey` | The password key to use from an existing secret. | `""` |
163| `config.redis.host` | The Redis host to connect to. | `redis-headless.penpot.svc.cluster.local` |
164| `config.redis.port` | The Redis host port to use. | `6379` |
165| `config.redis.database` | The Redis database to connect to. | `0` |
166| `config.assets.storageBackend` | The storage backend for assets to use. Use `assets-fs` for filesystem, and `assets-s3` for S3. | `assets-fs` |
167| `config.assets.filesystem.directory` | The storage directory to use if you chose the filesystem storage backend. | `/opt/data/assets` |
168| `config.assets.s3.accessKeyID` | The S3 access key ID to use if you chose the S3 storage backend. | `""` |
169| `config.assets.s3.secretAccessKey` | The S3 secret access key to use if you chose the S3 storage backend. | `""` |
170| `config.assets.s3.region` | The S3 region to use if you chose the S3 storage backend. | `""` |
171| `config.assets.s3.bucket` | The name of the S3 bucket to use if you chose the S3 storage backend. | `""` |
172| `config.assets.s3.endpointURI` | The S3 endpoint URI to use if you chose the S3 storage backend. | `""` |
173| `config.assets.s3.existingSecret` | The name of an existing secret. | `""` |
174| `config.assets.s3.secretKeys.accessKeyIDKey` | The S3 access key ID to use from an existing secret. | `""` |
175| `config.assets.s3.secretKeys.secretAccessKey` | The S3 secret access key to use from an existing secret. | `""` |
176| `config.assets.s3.secretKeys.endpointURIKey` | The S3 endpoint URI to use from an existing secret. | `""` |
177| `config.telemetryEnabled` | Whether to enable sending of anonymous telemetry data. | `true` |
178| `config.smtp.enabled` | Whether to enable SMTP configuration. You also need to add the 'enable-smtp' flag to the PENPOT_FLAGS variable. | `false` |
179| `config.smtp.defaultFrom` | The SMTP default email to send from. | `""` |
180| `config.smtp.defaultReplyTo` | The SMTP default email to reply to. | `""` |
181| `config.smtp.host` | The SMTP host to use. | `""` |
182| `config.smtp.port` | The SMTP host port to use. | `""` |
183| `config.smtp.username` | The SMTP username to use. | `""` |
184| `config.smtp.password` | The SMTP password to use. | `""` |
185| `config.smtp.tls` | Whether to use TLS for the SMTP connection. | `true` |
186| `config.smtp.ssl` | Whether to use SSL for the SMTP connection. | `false` |
187| `config.smtp.existingSecret` | The name of an existing secret. | `""` |
188| `config.smtp.secretKeys.usernameKey` | The SMTP username to use from an existing secret. | `""` |
189| `config.smtp.secretKeys.passwordKey` | The SMTP password to use from an existing secret. | `""` |
190| `config.registrationDomainWhitelist` | Comma separated list of allowed domains to register. Empty to allow all domains. | `""` |
191| `config.providers.google.enabled` | Whether to enable Google configuration. To enable Google auth, add `enable-login-with-google` to the flags. | `false` |
192| `config.providers.google.clientID` | The Google client ID to use. To enable Google auth, add `enable-login-with-google` to the flags. | `""` |
193| `config.providers.google.clientSecret` | The Google client secret to use. To enable Google auth, add `enable-login-with-google` to the flags. | `""` |
194| `config.providers.github.enabled` | Whether to enable GitHub configuration. To enable GitHub auth, also add `enable-login-with-github` to the flags. | `false` |
195| `config.providers.github.clientID` | The GitHub client ID to use. | `""` |
196| `config.providers.github.clientSecret` | The GitHub client secret to use. | `""` |
197| `config.providers.gitlab.enabled` | Whether to enable GitLab configuration. To enable GitLab auth, also add `enable-login-with-gitlab` to the flags. | `false` |
198| `config.providers.gitlab.baseURI` | The GitLab base URI to use. | `https://gitlab.com` |
199| `config.providers.gitlab.clientID` | The GitLab client ID to use. | `""` |
200| `config.providers.gitlab.clientSecret` | The GitLab client secret to use. | `""` |
201| `config.providers.oidc.enabled` | Whether to enable OIDC configuration. To enable OpenID Connect auth, also add `enable-login-with-oidc` to the flags. | `false` |
202| `config.providers.oidc.baseURI` | The OpenID Connect base URI to use. | `""` |
203| `config.providers.oidc.clientID` | The OpenID Connect client ID to use. | `""` |
204| `config.providers.oidc.clientSecret` | The OpenID Connect client secret to use. | `""` |
205| `config.providers.oidc.authURI` | Optional OpenID Connect auth URI to use. Auto discovered if not provided. | `""` |
206| `config.providers.oidc.tokenURI` | Optional OpenID Connect token URI to use. Auto discovered if not provided. | `""` |
207| `config.providers.oidc.userURI` | Optional OpenID Connect user URI to use. Auto discovered if not provided. | `""` |
208| `config.providers.oidc.roles` | Optional OpenID Connect roles to use. If no role is provided, roles checking disabled. | `role1 role2` |
209| `config.providers.oidc.rolesAttribute` | Optional OpenID Connect roles attribute to use. If not provided, the roles checking will be disabled. | `""` |
210| `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`. | `scope1 scope2` |
211| `config.providers.oidc.nameAttribute` | Optional OpenID Connect name attribute to use. If not provided, the `name` prop will be used. | `""` |
212| `config.providers.oidc.emailAttribute` | Optional OpenID Connect email attribute to use. If not provided, the `email` prop will be used. | `""` |
213| `config.providers.ldap.enabled` | Whether to enable LDAP configuration. To enable LDAP, also add `enable-login-with-ldap` to the flags. | `false` |
214| `config.providers.ldap.host` | The LDAP host to use. | `ldap` |
215| `config.providers.ldap.port` | The LDAP port to use. | `10389` |
216| `config.providers.ldap.ssl` | Whether to use SSL for the LDAP connection. | `false` |
217| `config.providers.ldap.startTLS` | Whether to utilize StartTLS for the LDAP connection. | `false` |
218| `config.providers.ldap.baseDN` | The LDAP base DN to use. | `ou=people,dc=planetexpress,dc=com` |
219| `config.providers.ldap.bindDN` | The LDAP bind DN to use. | `cn=admin,dc=planetexpress,dc=com` |
220| `config.providers.ldap.bindPassword` | The LDAP bind password to use. | `GoodNewsEveryone` |
221| `config.providers.ldap.attributesUsername` | The LDAP attributes username to use. | `uid` |
222| `config.providers.ldap.attributesEmail` | The LDAP attributes email to use. | `mail` |
223| `config.providers.ldap.attributesFullname` | The LDAP attributes fullname to use. | `cn` |
224| `config.providers.ldap.attributesPhoto` | The LDAP attributes photo format to use. | `jpegPhoto` |
225| `config.providers.existingSecret` | The name of an existing secret to use. | `""` |
226| `config.providers.secretKeys.googleClientIDKey` | The Google client ID key to use from an existing secret. | `""` |
227| `config.providers.secretKeys.googleClientSecretKey` | The Google client secret key to use from an existing secret. | `""` |
228| `config.providers.secretKeys.githubClientIDKey` | The GitHub client ID key to use from an existing secret. | `""` |
229| `config.providers.secretKeys.githubClientSecretKey` | The GitHub client secret key to use from an existing secret. | `""` |
230| `config.providers.secretKeys.gitlabClientIDKey` | The GitLab client ID key to use from an existing secret. | `""` |
231| `config.providers.secretKeys.gitlabClientSecretKey` | The GitLab client secret key to use from an existing secret. | `""` |
232| `config.providers.secretKeys.oidcClientIDKey` | The OpenID Connect client ID key to use from an existing secret. | `""` |
233| `config.providers.secretKeys.oidcClientSecretKey` | The OpenID Connect client secret key to use from an existing secret. | `""` |
234
235
236### PostgreSQL configuration (Check for [more parameters here](https://artifacthub.io/packages/helm/bitnami/postgresql))
237
238| Name | Description | Value |
239| -------------------------- | --------------------------------------- | ---------------- |
240| `postgresql.auth.username` | Name for a custom user to create. | `example` |
241| `postgresql.auth.password` | Password for the custom user to create. | `secretpassword` |
242| `postgresql.auth.database` | Name for a custom database to create. | `penpot` |
243
244
245### Redis configuration (Check for [more parameters here](https://artifacthub.io/packages/helm/bitnami/redis))
246
247| Name | Description | Value |
248| -------------------- | ------------------------------------------ | ------- |
249| `redis.auth.enabled` | Whether to enable password authentication. | `false` |
250
251
252Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
253
254```console
255helm install example \
256 --set user=example \
257 --set password=example \
258 codechem/example
259```
260
261Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
262
263```console
264helm install example -f values.yaml codechem/example
265```
266
267> **Tip**: You can use the default [values.yaml](values.yaml)
268
269## Configuration and installation details
270
271## Common configuration
272
273There are two types of configuration: options (properties that requieres some value) and flags (that just enables or disables something). The PENPOT_FLAGS environment variable will have an ordered list of strings using this format: `<enable|disable>-<flag-name>`.
274
275Regarding the flags, they are all listed in the [official docs](https://help.penpot.app/technical-guide/configuration), and here are the [additional flags](https://help.penpot.app/technical-guide/configuration/#other-flags) which are not mentioned in the chart configuration above, but you can still use them!
276
277## Authentication providers
278
279For configuration of the authentication with third-party auth providers you will need to configure penpot and set the correct callback of your penpot instance in the auth-provider configuration. The callback has the following format:
280
281```txt
282<https://<your_domain>/api/auth/oauth/<oauth_provider>/callback>
283```
284
285You will need to change `<your_domain>` and `<oauth_provider>` according to your setup. This is how it looks with the `gitlab.com` provider:
286
287```txt
288<https://<your_domain>/api/auth/oauth/gitlab/callback>
289```
290
291## Redis configuration
292
293The redis configuration is very simple, just provide a valid Redis URI. Redis is used mainly for websocket notifications coordination. Currently just a non authentication connection is supported!
294
295## License
296
297Copyright &copy; 2022 CodeChem
298
299Licensed under the Apache License, Version 2.0 (the "License");
300you may not use this file except in compliance with the License.
301You may obtain a copy of the License at
302
303 http://www.apache.org/licenses/LICENSE-2.0
304
305Unless required by applicable law or agreed to in writing, software
306distributed under the License is distributed on an "AS IS" BASIS,
307WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
308See the License for the specific language governing permissions and
309limitations under the License.