-
Notifications
You must be signed in to change notification settings - Fork 9
Update Container Config #144
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Changes from all commits
fdee5ee
21734e4
c1b25db
fb7beb9
9266795
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||
|---|---|---|---|---|
|
|
@@ -187,12 +187,10 @@ class ConfigBuilder { | |||
| let sql = []; | ||||
| if (!this.cfg.keycloak.useExternal) { | ||||
| sql.push(`CREATE USER keycloak WITH ENCRYPTED PASSWORD '${this.cfg.db.keycloakPw}'; | ||||
| CREATE DATABASE keycloak WITH ENCODING 'UTF8'; | ||||
| GRANT ALL PRIVILEGES ON DATABASE keycloak TO keycloak;`) | ||||
| CREATE DATABASE keycloak WITH ENCODING 'UTF8' OWNER keycloak;`) | ||||
| } | ||||
| sql.push(`CREATE USER hub WITH ENCRYPTED PASSWORD '${this.cfg.db.hubPw}'; | ||||
| CREATE DATABASE hub WITH ENCODING 'UTF8'; | ||||
| GRANT ALL PRIVILEGES ON DATABASE hub TO hub;`); | ||||
| CREATE DATABASE hub WITH ENCODING 'UTF8' OWNER hub;`); | ||||
| return sql.join('\n'); | ||||
| } | ||||
|
|
||||
|
|
@@ -388,7 +386,7 @@ EOF`; | |||
| getPostgresService() { | ||||
| return { | ||||
| depends_on: {'init-config': {condition: 'service_completed_successfully'}}, | ||||
| image: 'postgres:14-alpine', | ||||
| image: 'postgres:17-alpine', | ||||
| volumes: ['db-init:/docker-entrypoint-initdb.d', 'db-data:/var/lib/postgresql/data'], | ||||
| deploy: { | ||||
| resources: { | ||||
|
|
@@ -397,6 +395,7 @@ EOF`; | |||
| }, | ||||
| healthcheck: { | ||||
| test: ['CMD', 'pg_isready', '-U', 'postgres'], | ||||
| start_period: '30s', | ||||
| interval: '10s', | ||||
| timeout: '3s', | ||||
| }, | ||||
|
|
@@ -439,13 +438,14 @@ EOF`; | |||
| ...(!this.cfg.compose.includeTraefik && {ports: [`${this.getPort(this.cfg.keycloak.publicUrl)}:8080`]}), | ||||
| healthcheck: { | ||||
| test: ['CMD', 'curl', '-f', `http://localhost:9000${this.getPathname(HubSetup.urlWithTrailingSlash(this.cfg.keycloak.publicUrl))}health/live`], | ||||
| interval: '60s', | ||||
| start_period: '60s', | ||||
| interval: '10s', | ||||
| timeout: '3s', | ||||
| }, | ||||
| restart: 'unless-stopped', | ||||
| environment: { | ||||
| KEYCLOAK_ADMIN: this.cfg.keycloak.adminUser, | ||||
| KEYCLOAK_ADMIN_PASSWORD: this.cfg.keycloak.adminPw, | ||||
| KC_BOOTSTRAP_ADMIN_USERNAME: this.cfg.keycloak.adminUser, | ||||
| KC_BOOTSTRAP_ADMIN_PASSWORD: this.cfg.keycloak.adminPw, | ||||
| KC_DB: 'postgres', | ||||
| KC_DB_URL: 'jdbc:postgresql://postgres:5432/keycloak', | ||||
| KC_DB_USERNAME: 'keycloak', | ||||
|
|
@@ -669,10 +669,10 @@ class KubernetesConfigBuilder extends ConfigBuilder { | |||
| httpGet: {path: '/q/health/started', port: 8080}, | ||||
| }, | ||||
| livenessProbe: { | ||||
| httpGet: {path: '/api/config', port: 8080}, httpGet: {path: '/api/config', port: 8080}, initialDelaySeconds: 10, periodSeconds: 3 | ||||
| httpGet: {path: '/api/config', port: 8080}, initialDelaySeconds: 10, periodSeconds: 3 | ||||
| }, | ||||
| readinessProbe: { | ||||
| httpGet: {path: '/q/health/ready', port: 8080}, httpGet: {path: '/api/config', port: 8080}, initialDelaySeconds: 10, periodSeconds: 3 | ||||
| httpGet: {path: '/api/config', port: 8080}, initialDelaySeconds: 10, periodSeconds: 3 | ||||
|
Comment on lines
671
to
+675
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If we change this here, we should change cryptomator.github.io/assets/js/hubsetup.js Line 478 in fb7beb9
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The problem was that the object contained the httpGet:
path: /api/config
port: 8080Is it really intended to probe two different urls? Then we need a different solution.
Comment on lines
+672
to
+675
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win 🔎 Supported by static analysis🏁 Script executed: #!/bin/bash
set -e
printf '%s\n' '--- repository knowledge index ---'
find /tmp/coderabbit-repo-knowledge/cryptomator-cryptomator-github-io-1a60fcb7 -maxdepth 2 -type f -print | sort
printf '%s\n' '--- knowledge headers ---'
head -5 /tmp/coderabbit-repo-knowledge/cryptomator-cryptomator-github-io-1a60fcb7/*/*.md 2>/dev/null || true
printf '%s\n' '--- changed probe context ---'
sed -n '650,685p' assets/js/hubsetup.js
printf '%s\n' '--- direct endpoint references ---'
rg -n -C 3 --hidden --glob '!node_modules' --glob '!dist' --glob '!build' '(/api/config|q/health/(live|ready)|readinessProbe|livenessProbe)' .Repository: cryptomator/cryptomator.github.io Length of output: 6901 🏁 Script executed: #!/bin/bash
set -e
printf '%s\n' '--- Hub version/config references ---'
rg -n -C 3 --hidden --glob '!node_modules' --glob '!dist' --glob '!build' 'hub:|hub\.version|cryptomator/hub|HUB_VERSION|hub version' .
printf '%s\n' '--- project metadata ---'
git remote -v 2>/dev/null || true
find . -maxdepth 2 -type f \( -name 'package.json' -o -name '*.json' -o -name '*.yml' -o -name '*.yaml' \) -print | sort | head -80Repository: cryptomator/cryptomator.github.io Length of output: 11570 🌐 Web query:
💡 Result: In Cryptomator Hub deployments, the /api/config and health check endpoints are critical for monitoring service readiness and configuration status [1][2][3]. Historically, older versions of Cryptomator Hub utilized port 8080 for both health checks and API requests [3]. However, as of the 1.5.0-beta1 release, the health check functionality was moved to a separate service port, 9000 [3]. To verify service status, common deployment configurations (such as Docker Compose or Kubernetes) use the following endpoints [3]: 1. Health Check Endpoint: Accessed at /q/health/live (typically on port 9000 as of version 1.5.0-beta1+) [3]. 2. Configuration Endpoint: Accessed at /api/config (typically on port 9000 as of version 1.5.0-beta1+) [3]. Example configuration updates for version 1.5.0-beta1 and later: - Docker Compose: The healthcheck test should be updated to point to port 9000: (curl -f http://localhost:9000/q/health/live && curl -f http://localhost:9000/api/config) || exit 1 [3] - Kubernetes: The readiness and startup probes should be updated to use port 9000 [3]: readinessProbe: httpGet: path: /api/config port: 9000 [3] If you encounter errors when accessing /api/config (such as a 500 server error or NullPointerException), it often indicates an issue with service reachability, hostname resolution, or configuration environment variables, such as Keycloak URL mismatches [2][4]. Always ensure that your deployment environment (e.g., Docker, Kubernetes) allows the container to resolve its internal services correctly [2][4]. Citations:
🏁 Script executed: #!/bin/bash
set -e
printf '%s\n' '--- Hub repository API: tags and relevant paths ---'
curl -fsSL 'https://api.github.com/repos/cryptomator/hub/tags?per_page=20' |
jq -r '.[] | [.name, .commit.sha] | `@tsv`' | head -20
printf '%s\n' '--- Hub repository search for endpoint names ---'
curl -fsSL 'https://api.github.com/search/code?q=repo%3Acryptomator%2Fhub+%22%2Fapi%2Fconfig%22' |
jq -r '.message // empty, (.items[]?.html_url // empty)' || true
printf '%s\n' '--- Hub repository top-level tree ---'
curl -fsSL 'https://api.github.com/repos/cryptomator/hub/git/trees/main?recursive=1' |
jq -r '.tree[]?.path' |
rg '(^|/)(application|.*(Health|Config|Resource|Deployment|docker-compose|kubernetes|helm|README|CHANGELOG))' |
head -120Repository: cryptomator/cryptomator.github.io Length of output: 3169 🌐 Web query:
💡 Result: A readinessProbe is a Kubernetes configuration that periodically checks whether a container is ready to accept network traffic [1][2]. If the probe fails, the container is removed from the service endpoints, meaning it will no longer receive requests until it passes the check again [1][2]. Regarding /api/config, it is not a standard Kubernetes endpoint, but rather a custom application-specific path [3]. Some applications may use /api/config as a custom readiness probe endpoint if the application is considered ready only when its configuration has been successfully loaded or applied [3]. In a Kubernetes manifest, a readinessProbe using such an endpoint would typically be configured as follows: readinessProbe: httpGet: path: /api/config port: 9000 initialDelaySeconds: 10 periodSeconds: 3 If you are encountering issues where a probe is failing unexpectedly, ensure the application is correctly exposing that endpoint on the specified port and that it returns a success status code (typically 200-399) [4]. Always verify your application documentation to confirm the intended use of its specific API endpoints for health checking [3]. Citations:
🏁 Script executed: #!/bin/bash
set -e
base='https://raw.githubusercontent.com/cryptomator/hub'
for ref in 1.4.7 1.5.0-beta1 2.0.0-rc2 main; do
printf '\n--- %s ConfigResource ---\n' "$ref"
curl -fsSL "$base/$ref/backend/src/main/java/org/cryptomator/hub/api/ConfigResource.java" |
sed -n '1,220p'
printf '\n--- %s application health/port settings ---\n' "$ref"
curl -fsSL "$base/$ref/backend/src/main/resources/application.properties" |
rg -n -C 2 'quarkus\.(http|smallrye-health)|health|management|port' || true
printf '\n--- %s deployment probe references ---\n' "$ref"
curl -fsSL "https://api.github.com/repos/cryptomator/hub/git/trees/$ref?recursive=1" |
jq -r '.tree[]?.path' |
rg -i '(compose|kube|helm|deployment|docker)' |
head -80
doneRepository: cryptomator/cryptomator.github.io Length of output: 30438 🏁 Script executed: #!/bin/bash
set -e
for ref in 1.4.7 1.5.0-beta1 1.5.0-beta4 2.0.0-rc2; do
printf '\n--- %s Hub deployment ---\n' "$ref"
for path in charts/cryptomator-hub/templates/hub-deployment.yaml chart/templates/hub-deployment.yaml; do
url="https://raw.githubusercontent.com/cryptomator/hub/$ref/$path"
if body=$(curl -fsSL "$url" 2>/dev/null); then
printf '%s\n' "$body" | rg -n -C 8 'probe|health|api/config|port'
break
fi
done
printf '\n--- %s changelog health/config references ---\n' "$ref"
curl -fsSL "https://raw.githubusercontent.com/cryptomator/hub/$ref/CHANGELOG.md" |
rg -n -C 3 'health|probe|9000|config' || true
doneRepository: cryptomator/cryptomator.github.io Length of output: 10136 Use Hub’s management health endpoints for all probes. When PostgreSQL is unavailable but Hub and Keycloak remain available, 🤖 Prompt for AI Agents |
||||
| }, | ||||
| env: [ | ||||
| {name: 'HUB_PUBLIC_ROOT_PATH', value: this.getPathnameWithTrailingSlash(this.cfg.hub.publicUrl)}, | ||||
|
|
@@ -714,10 +714,10 @@ class KubernetesConfigBuilder extends ConfigBuilder { | |||
| spec: { | ||||
| containers: [{ | ||||
| name: 'postgres', | ||||
| image: 'postgres:14-alpine', | ||||
| image: 'postgres:17-alpine', | ||||
| ports: [{containerPort: 5432}], | ||||
| resources: { | ||||
| requests: {cpu: '25m', memory: '64Mi'}, | ||||
| requests: {cpu: '25m', memory: '32Mi'}, | ||||
| limits: {cpu: '1000m', memory: '256Mi'}, | ||||
| }, | ||||
| livenessProbe: { | ||||
|
|
@@ -763,8 +763,8 @@ class KubernetesConfigBuilder extends ConfigBuilder { | |||
| startCmd = ['/opt/keycloak/bin/kc.sh', 'start', '--import-realm']; // prod mode without build time optimizations (requires a proper TLS termination proxy) | ||||
| } | ||||
| let env = [ | ||||
| {name: 'KEYCLOAK_ADMIN', valueFrom: {secretKeyRef: {name: 'hub-secrets', key: 'kc_admin_user'}}}, | ||||
| {name: 'KEYCLOAK_ADMIN_PASSWORD', valueFrom: {secretKeyRef: {name: 'hub-secrets', key: 'kc_admin_pass'}}}, | ||||
| {name: 'KC_BOOTSTRAP_ADMIN_USERNAME', valueFrom: {secretKeyRef: {name: 'hub-secrets', key: 'kc_admin_user'}}}, | ||||
| {name: 'KC_BOOTSTRAP_ADMIN_PASSWORD', valueFrom: {secretKeyRef: {name: 'hub-secrets', key: 'kc_admin_pass'}}}, | ||||
| {name: 'KC_DB', value: 'postgres'}, | ||||
| {name: 'KC_DB_URL', value: 'jdbc:postgresql://postgres-svc:5432/keycloak'}, | ||||
| {name: 'KC_DB_USERNAME', value: 'keycloak'}, | ||||
|
|
||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just for explanation:
On newer Postgres versions the public schema isn't writable by non-owners. This change makes the user owner of the corresponding DB, rendering the additional
GRANT ALL PRIVILEGESobsolete.