diff --git a/deploy/docker/docker-compose-multi.yaml b/deploy/docker/docker-compose-multi.yaml index 0c05848e0..c387ac58d 100644 --- a/deploy/docker/docker-compose-multi.yaml +++ b/deploy/docker/docker-compose-multi.yaml @@ -57,6 +57,7 @@ services: # - on linux/mac, generate one eg. with: head /dev/urandom | head -c 30 | shasum -a 256 # LOWCODER_API_KEY_SECRET: "5a41b090758b39b226603177ef48d73ae9839dd458ccb7e66f7e7cc028d5a50b" + COMMON_WORKSPACE_MODE: SAAS restart: unless-stopped depends_on: - mongodb diff --git a/deploy/docker/docker-compose.yaml b/deploy/docker/docker-compose.yaml index 4a39ee6af..4917a2e9e 100644 --- a/deploy/docker/docker-compose.yaml +++ b/deploy/docker/docker-compose.yaml @@ -50,6 +50,7 @@ services: # frontend parameters LOWCODER_MAX_REQUEST_SIZE: 20m LOWCODER_MAX_QUERY_TIMEOUT: 120 + COMMON_WORKSPACE_MODE: SAAS volumes: - ./lowcoder-stacks:/lowcoder-stacks - ./lowcoder-stacks/assets:/lowcoder/assets diff --git a/deploy/helm/Chart.yaml b/deploy/helm/Chart.yaml index b09168049..0e6538eaf 100644 --- a/deploy/helm/Chart.yaml +++ b/deploy/helm/Chart.yaml @@ -4,7 +4,7 @@ description: A Helm chart for Kubernetes for installing lowcoder type: application # Chart version (change every time you make changes to the chart) -version: 0.1.0 +version: 1.0.0 # Lowcoder version appVersion: "latest" diff --git a/deploy/helm/README.md b/deploy/helm/README.md index a9854f7a4..b7dd8555b 100644 --- a/deploy/helm/README.md +++ b/deploy/helm/README.md @@ -38,6 +38,28 @@ $ helm delete -n lowcoder my-lowcoder ## Parameters +## Global + +| Name | Description | Value | +| --------------------------------------- | --------------------------------------------------------------------------------- | -------------- | +| `global.config.workspaceMode` | Sets the workspace mode. Possible types are: SAAS, ENTERPRISE | `SAAS` | +| `global.config.userId` | User ID of user running Lowcoder server application in container | `9001` | +| `global.config.groupId` | Group ID of user running Lowcoder server application in container | `9001` | +| `global.config.corsAllowedDomains` | CORS allowed domains | `*` | +| `global.config.enableUserSignUp` | Enable users signing up to lowcoder via login page | `true` | +| `global.config.encryption.password` | Encryption password - CHANGE IT! | `lowcoder.org` | +| `global.config.encryption.salt` | Encryption salt - CHANGE IT! | `lowcoder.org` | +| `global.config.apiKeySecret` | API-KEY secret, should be a string of at least 32 random characters - CHANGE IT | `5a41b090758b39b226603177ef48d73ae9839dd458ccb7e66f7e7cc028d5a50b` | +| `global.config.maxQueryTimeout` | Maximum query timeout in seconds | `120` | +| `global.config.maxRequestSize` | Maximum request size | `20m` | +| `global.config.nodeServiceUrl` | URL to node-service server if using external one (disabled by default) | | +| `global.config.apiServiceUrl` | URL to api-service server if using external one (disabled by default) | | +| `global.defaults.maxOrgsPerUser` | Maximum allowed organizations per user | `100` | +| `global.defaults.maxMembersPerOrg` | Maximum allowed members per organization | `1000` | +| `global.defaults.maxGroupsPerOrg` | Maximum groups allowed per organization | `100` | +| `global.defaults.maxAppsPerOrg` | Maximum allowed applications per organization | `1000` | +| `global.defaults.maxDevelopers` | Maximum allowed developer accounts | `100` | + ### Redis | Name | Description | Value | @@ -56,32 +78,3 @@ All available parameters can be found in [Bitnami Redis Chart](https://github.co All available parameters can be found in [Bitnami MongoDB Chart](https://github.com/bitnami/charts/tree/main/bitnami/mongodb/#parameters) -### Lowcoder server api-service - -| Name | Description | Value | -| --------------------------------------- | --------------------------------------------------------------------------- | ---------------- | -| `apiService.config.userId` | User ID of user running Lowcoder server application in container | `9001` | -| `apiService.config.groupId` | Group ID of user running Lowcoder server application in container | `9001` | -| `apiService.config.corsAllowedDomains` | CORS allowed domains | `*` | -| `apiService.config.encryption.password` | Encryption password | `lowcoder.org` | -| `apiService.config.encryption.salt` | Encryption salt | `lowcoder.org` | -| `apiService.config.enableUserSignUp` | Enable users signing up to lowcoder via login page | `true` | -| `apiService.config.nodeServiceUrl` | URL to node-service server if using external Lowcoder server | | - -### Lowcoder server node-service - -| Name | Description | Value | -| --------------------------------------- | --------------------------------------------------------------------------- | ---------------- | -| `nodeService.config.userId` | User ID of user running Lowcoder service application in container | `9001` | -| `nodeService.config.groupId` | Group ID of user running Lowcoder service application in container | `9001` | -| `nodeService.config.apiServiceUrl` | URL to api-service server if using external Lowcoder server | | - -### Lowcoder frontend (client) - -| Name | Description | Value | -| --------------------------------------- | --------------------------------------------------------------------------- | ---------------- | -| `frontend.config.userId` | User ID of nginx user running Lowcoder client application in container | `9001` | -| `frontend.config.groupId` | Group ID of nginx user running Lowcoder client application in container | `9001` | -| `frontend.config.apiServiceUrl` | URL to api-service server if using external Lowcoder server | `""` | -| `frontend.config.nodeServiceUrl` | URL to node-service server if using external Lowcoder server | | - diff --git a/deploy/helm/templates/api-service/configMap.yaml b/deploy/helm/templates/api-service/configMap.yaml index 6ea3f796b..09049bc9a 100644 --- a/deploy/helm/templates/api-service/configMap.yaml +++ b/deploy/helm/templates/api-service/configMap.yaml @@ -17,13 +17,19 @@ data: {{- else }} REDIS_URL: {{ .Values.redis.externalUrl | quote }} {{- end }} - {{- if .Values.apiService.nodeServiceUrl }} - LOWCODER_NODE_SERVICE_URL: {{ .Values.apiService.nodeServiceUrl | quote }} + {{- if .Values.global.config.nodeServiceUrl }} + LOWCODER_NODE_SERVICE_URL: {{ .Values.global.config.nodeServiceUrl | quote }} {{- else }} LOWCODER_NODE_SERVICE_URL: "http://{{ $name }}-node-service:{{ .Values.nodeService.service.port }}" {{- end }} - PUID: {{ .Values.apiService.config.userId | default "9001" | quote }} - PGID: {{ .Values.apiService.config.groupId | default "9001" | quote }} - CORS_ALLOWED_DOMAINS: {{ .Values.apiService.config.corsAllowedDomains | default "*" | quote }} - ENABLE_USER_SIGN_UP: {{ .Values.apiService.config.enableUserSignUp | default "true" | quote }} - + PUID: {{ .Values.global.config.userId | default "9001" | quote }} + PGID: {{ .Values.global.config.groupId | default "9001" | quote }} + CORS_ALLOWED_DOMAINS: {{ .Values.global.config.corsAllowedDomains | default "*" | quote }} + ENABLE_USER_SIGN_UP: {{ .Values.global.config.enableUserSignUp | default "true" | quote }} + LOWCODER_MAX_QUERY_TIMEOUT: {{ .Values.global.config.maxQueryTimeout | default "120" | quote }} + DEFAULT_ORGS_PER_USER: {{ .Values.global.defaults.maxOrgsPerUser | default "100" | quote }} + DEFAULT_ORG_MEMBER_COUNT: {{ .Values.global.defaults.maxMembersPerOrg | default "1000" | quote }} + DEFAULT_ORG_GROUP_COUNT: {{ .Values.global.defaults.maxGroupsPerOrg | default "100" | quote }} + DEFAULT_ORG_APP_COUNT: {{ .Values.global.defaults.maxAppsPerOrg | default "1000" | quote }} + DEFAULT_DEVELOPER_COUNT: {{ .Values.global.defaults.maxDevelopers | default "50" | quote }} + COMMON_WORKSPACE_MODE: {{ .Values.global.config.workspaceMode | default "SAAS" | quote }} diff --git a/deploy/helm/templates/api-service/secrets.yaml b/deploy/helm/templates/api-service/secrets.yaml index 5dd6e2f47..dfaba1e9a 100644 --- a/deploy/helm/templates/api-service/secrets.yaml +++ b/deploy/helm/templates/api-service/secrets.yaml @@ -20,6 +20,6 @@ stringData: {{- else }} MONGODB_URL: {{ .Values.mongodb.externalUrl | quote }} {{- end }} - ENCRYPTION_PASSWORD: {{ .Values.apiService.config.encryption.password | default "lowcoder.org" | quote }} - ENCRYPTION_SALT: {{ .Values.apiService.config.encryption.salt | default "lowcoder.org" | quote }} - + ENCRYPTION_PASSWORD: {{ .Values.global.config.encryption.password | default "lowcoder.org" | quote }} + ENCRYPTION_SALT: {{ .Values.global.config.encryption.salt | default "lowcoder.org" | quote }} + LOWCODER_API_KEY_SECRET: "{{ .Values.global.config.apiKeySecret }}" diff --git a/deploy/helm/templates/frontend/configMap.yaml b/deploy/helm/templates/frontend/configMap.yaml index 2bd39ebeb..6105f80af 100644 --- a/deploy/helm/templates/frontend/configMap.yaml +++ b/deploy/helm/templates/frontend/configMap.yaml @@ -11,16 +11,18 @@ metadata: {{- toYaml . | nindent 4 }} {{- end }} data: - PUID: {{ .Values.frontend.config.userId | default "9001" | quote }} - PGID: {{ .Values.frontend.config.groupId | default "9001" | quote }} - {{- if .Values.frontend.config.apiServiceUrl }} - LOWCODER_API_SERVICE_URL: {{ .Values.frontend.config.apiServiceUrl | trimSuffix "/" | quote }} + PUID: {{ .Values.global.config.userId | default "9001" | quote }} + PGID: {{ .Values.global.config.groupId | default "9001" | quote }} + {{- if .Values.global.config.apiServiceUrl }} + LOWCODER_API_SERVICE_URL: {{ .Values.global.config.apiServiceUrl | trimSuffix "/" | quote }} {{- else }} LOWCODER_API_SERVICE_URL: "http://{{ $name }}-api-service:{{ .Values.apiService.service.port }}" {{- end }} - {{- if .Values.frontend.config.nodeServiceUrl }} - LOWCODER_NODE_SERVICE_URL: {{ .Values.frontend.config.nodeServiceUrl | trimSuffix "/" | quote }} + {{- if .Values.global.config.nodeServiceUrl }} + LOWCODER_NODE_SERVICE_URL: {{ .Values.global.config.nodeServiceUrl | trimSuffix "/" | quote }} {{- else }} LOWCODER_NODE_SERVICE_URL: "http://{{ $name }}-node-service:{{ .Values.nodeService.service.port }}" {{- end }} + LOWCODER_MAX_REQUEST_SIZE: {{ .Values.global.config.maxRequestSize | default "20m" | quote }} + LOWCODER_MAX_QUERY_TIMEOUT: {{ .Values.global.config.maxQueryTimeout | default "120" | quote }} diff --git a/deploy/helm/templates/node-service/configMap.yaml b/deploy/helm/templates/node-service/configMap.yaml index ea6b26c02..f116edead 100644 --- a/deploy/helm/templates/node-service/configMap.yaml +++ b/deploy/helm/templates/node-service/configMap.yaml @@ -12,10 +12,10 @@ metadata: {{- toYaml . | nindent 4 }} {{- end }} data: - PUID: {{ .Values.nodeService.config.userId | default "9001" | quote }} - PGID: {{ .Values.nodeService.config.groupId | default "9001" | quote }} - {{- if .Values.nodeService.apiServiceUrl }} - LOWCODER_API_SERVICE_URL: {{ .Values.nodeService.apiServiceUrl | quote }} + PUID: {{ .Values.global.config.userId | default "9001" | quote }} + PGID: {{ .Values.global.config.groupId | default "9001" | quote }} + {{- if .Values.global.config.apiServiceUrl }} + LOWCODER_API_SERVICE_URL: {{ .Values.global.config.apiServiceUrl | quote }} {{- else }} LOWCODER_API_SERVICE_URL: "http://{{ $name }}-api-service:{{ .Values.apiService.service.port }}" {{- end }} diff --git a/deploy/helm/values.yaml b/deploy/helm/values.yaml index 58e29b00d..42d4e8c72 100644 --- a/deploy/helm/values.yaml +++ b/deploy/helm/values.yaml @@ -6,6 +6,33 @@ imagePullSecrets: [] nameOverride: "" fullnameOverride: "" +# +# Configuration values for Lowcoder +# +global: + config: + # This setting sets workspace mode. Possible values: SAAS, ENTERPRISE + workspaceMode: SAAS + # ID of user and group runnning the service within the container + userId: 9001 + groupId: 9001 + corsAllowedDomains: "*" + enableUserSignUp: true + encryption: + password: "lowcoder.org" + salt: "lowcoder.org" + #nodeServiceUrl: + #apiServiceUrl: + apiKeySecret: "5a41b090758b39b226603177ef48d73ae9839dd458ccb7e66f7e7cc028d5a50b" + maxQueryTimeout: 120 + maxRequestSize: "20m" + defaults: + maxOrgsPerUser: 100 + maxMembersPerOrg: 1000 + maxGroupsPerOrg: 100 + maxAppsPerOrg: 1000 + maxDevelopers: 50 + # # Redis # @@ -59,15 +86,6 @@ apiService: # Overrides the image tag whose default is the chart appVersion. #tag: "latest" - config: - userId: 9001 - groupId: 9001 - corsAllowedDomains: "*" - enableUserSignUp: true - encryption: - password: "lowcoder.org" - salt: "lowcoder.org" - #nodeServiceUrl: service: type: ClusterIP @@ -93,10 +111,6 @@ nodeService: # Overrides the image tag whose default is the chart appVersion. #tag: "latest" - config: - userId: 9001 - groupId: 9001 - #apiServiceUrl: service: type: ClusterIP @@ -119,12 +133,6 @@ frontend: # Overrides the image tag whose default is the chart appVersion. #tag: "latest" - config: - userId: 9001 - groupId: 9001 - #apiServiceUrl: - #nodeServiceUrl: - service: type: NodePort port: 80 diff --git a/yarn-error.log b/yarn-error.log deleted file mode 100644 index 47e74935c..000000000 --- a/yarn-error.log +++ /dev/null @@ -1,107 +0,0 @@ -Arguments: - /usr/local/bin/node /usr/local/Cellar/yarn/1.22.0/libexec/bin/yarn.js install - -PATH: - /usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin - -Yarn version: - 1.22.0 - -Node version: - 17.4.0 - -Platform: - darwin x64 - -Trace: - SyntaxError: /Users/falkwolskyadmin/Development/Lowcoder/Development/lowcoder/package.json: Unexpected end of JSON input - at JSON.parse () - at /usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:1625:59 - at Generator.next () - at step (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:310:30) - at /usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:321:13 - -npm manifest: - - -yarn manifest: - No manifest - -Lockfile: - # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. - # yarn lockfile v1 - - - "ansi-sequence-parser@^1.1.0": - "integrity" "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==" - "resolved" "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz" - "version" "1.1.1" - - "balanced-match@^1.0.0": - "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - "version" "1.0.2" - - "brace-expansion@^2.0.1": - "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "balanced-match" "^1.0.0" - - "jsonc-parser@^3.2.0": - "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" - "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - "version" "3.2.0" - - "lunr@^2.3.9": - "integrity" "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" - "resolved" "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz" - "version" "2.3.9" - - "marked@^4.3.0": - "integrity" "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==" - "resolved" "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" - "version" "4.3.0" - - "minimatch@^9.0.3": - "integrity" "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" - "version" "9.0.3" - dependencies: - "brace-expansion" "^2.0.1" - - "shiki@^0.14.1": - "integrity" "sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==" - "resolved" "https://registry.npmjs.org/shiki/-/shiki-0.14.5.tgz" - "version" "0.14.5" - dependencies: - "ansi-sequence-parser" "^1.1.0" - "jsonc-parser" "^3.2.0" - "vscode-oniguruma" "^1.7.0" - "vscode-textmate" "^8.0.0" - - "typedoc@^0.25.4": - "integrity" "sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==" - "resolved" "https://registry.npmjs.org/typedoc/-/typedoc-0.25.4.tgz" - "version" "0.25.4" - dependencies: - "lunr" "^2.3.9" - "marked" "^4.3.0" - "minimatch" "^9.0.3" - "shiki" "^0.14.1" - - "typescript@4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x": - "integrity" "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==" - "resolved" "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz" - "version" "5.3.2" - - "vscode-oniguruma@^1.7.0": - "integrity" "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==" - "resolved" "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz" - "version" "1.7.0" - - "vscode-textmate@^8.0.0": - "integrity" "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==" - "resolved" "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz" - "version" "8.0.0"