Lokasi ngalangkungan proxy:   [ UP ]  
[Ngawartoskeun bug]   [Panyetelan cookie]                

Platform Installation with Helm [Quick Start]

Deploy the JFrog Platform via a single Helm Chart. Artifactory and Xray are available by default. Other products (Distribution, Catalog, Worker, Bridge, AppTrust) require configuration in customvalues.yaml. Includes evaluation and production installation paths.

Choose Your Install Path

Select the path that matches your use case before running the install command.

PathWhen to UseWhat It Needs
ProductionReal workloads, team usecustomvalues.yaml with external DB, filestore, and security keys. For OpenShift: openshift-values.yaml overlay.
EvaluationFast exploration, POC, demosNothing: chart defaults work out of the box.

Before installing, verify you have a Kubernetes 1.27+ cluster (OpenShift 4.14+), Helm 3.17+, kubectl configured with cluster access, and a default StorageClass.

Check Requirements

What You Need

You need the following before deploying JFrog products with Helm charts.

Requirement

Values

Kubernetes (including OpenShift)

KUBERNETES (OpenShift OPENSHIFT)

Dynamic Storage Provisioning

Enable

Default Storage Class

Persistent Storage

kubectl

Target cluster

Helm

HELM

License

Requires a valid license.

Sizing

For guidance on the sizing, see

📘

AWS EBS CSI Driver Required On EKS

When deploying a JFrog application on an AWS EKS cluster, the AWS EBS CSI Driver is required for dynamic volume provisioning. However, this driver is not included in the JFrog Helm Charts. For more information, see Store Kubernetes volumes with Amazon EBS.


Platform Deployment via Helm - Workflow Diagram
jfrog-platform-deployment-via-helm
Chart Defaults Vs Production
AreaChart DefaultsProduction
Artifactory + XrayEnabledDisable Xray if not required: xray.enabled: false and rabbitmq.enabled: false (RabbitMQ is only used by Xray)
DistributionDisabled (bundled subchart)Enable: distribution.enabled: true
CatalogDisabled (bundled subchart)Enable: catalog.enabled: true
WorkerDisabled (bundled subchart)Enable: worker.enabled: true
BridgeDisabled (bundled subchart)Enable: bridge.enabled: true
RabbitMQEnabled (bundled, 1 replica — used by Xray)For HA Xray: use sizing/platform-medium.yaml or higher, or enable quorum queues with rabbitmq/ha-quorum.yaml
JAS (Advanced Security)License-gated (built into Xray)Set xray.serviceAccount.create: true + xray.rbac.create: true; activates when JPD is connected to MyJFrog with E+ / E X license
CurationLicense-gated (component of Xray; requires Catalog)Enable catalog.enabled: true; activates when JPD is connected to MyJFrog with E+ / E X license. See Installing Catalog
AppTrust-Enable: artifactory.apptrust.enabled: true and artifactory.unifiedpolicy.enabled: true
DatabaseBundled PostgreSQLExternal PostgreSQL — see Database Selection
FilestoreLocal/PVC-backedExternal object storage — see Filestore Selection

For license requirements by product, see the License Matrix.

📘

If distribution.enabled: true

Verify entitlement in the License Matrix and prepare an external PostgreSQL distribution database. See Database and Third-Party Applications in Distribution.

How Do I Install?

The installation takes two steps: add the JFrog Helm repository, then deploy the platform using your chosen configuration.

End-to-End Install Flow
flowchart TD
    A[Start] --> B[Check prerequisites: K8s, Helm, kubectl, StorageClass]
    B --> C[Add JFrog Helm repo]
    C --> D{Install path?}

    D -->|Evaluation| E[helm upgrade --install with chart defaults]
    D -->|Production| F[1 - Set up external PostgreSQL]

    F --> G[2 - Configure external filestore]
    G --> H[3 - Build customvalues.yaml]
    H --> I[4 - Create master-key and join-key secrets]
    I --> J[5 - Apply sizing profile]
    J --> K[6 - Run pre-install checklist]
    K --> L[helm upgrade --install with customvalues.yaml]

    E --> M[curl /router/api/v1/system/health]
    L --> M

    M --> N{HEALTHY?}
    N -->|No - wait 3 to 5 min| M
    N -->|Yes| O[Open UI - change admin password - complete Onboarding Wizard]
    O --> P[Done - tune and enable products]
Add Helm Repository
helm repo add jfrog https://charts.jfrog.io
helm repo update
Deploy Platform

What Do I Need for Production?

For production, complete six preparation tasks before deploying: set up an external PostgreSQL database, configure external filestore, build a customvalues.yaml, create security key secrets, apply a sizing profile, and run the pre-install checklist.

Production Preparation Steps

Complete these steps before deploying to production:

1. Set up external database

Create databases for each product on your external PostgreSQL server and configure them in customvalues.yaml. See Platform Helm Chart - External Database for full instructions and the SQL setup commands.

2. Set up external filestore

Configure S3, GCS, or Azure Blob for artifact storage. See Platform Helm Chart - External FileStore.

3. Build your customvalues.yaml

Start from the sample below and replace the placeholder values.

# customvalues.yaml — JFrog Platform Quick Start (Production)
# Overrides only what differs from platform chart defaults.
# Full defaults: https://github.com/jfrog/charts/blob/master/stable/jfrog-platform/values.yaml

# ── Security keys ────────────────────────────────────────────────────
# Reference the K8s secrets created in step 4.
# Setting under global: propagates to ALL subcharts (Artifactory, Xray,
# Distribution, Catalog) — each chart checks global.masterKeySecretName
# first, ensuring all products share the same master and join key.
global:
  masterKeySecretName: master-key
  joinKeySecretName: join-key

  # External PostgreSQL host — the chart auto-generates per-product URLs:
  #   Artifactory/Distribution/Catalog: jdbc:postgresql://<host>:<port>/<product>?sslmode=<mode>
  #   Xray:                             postgres://<host>:<port>/xray?sslmode=<mode>
  # Note: <product> is the chart name (artifactory, xray, distribution, catalog).
  # Your PostgreSQL databases must be named exactly after the product.
  # If your DB names differ, override database.url per product instead.
  # For cert-based SSL, override database.url per product with full connection params.
  database:
    host: <DB_HOST>
    port: 5432
    sslMode: disable
    initDBCreation: false   # required when postgresql.enabled: false

# ── Disable bundled PostgreSQL ────────────────────────────────────────
postgresql:
  enabled: false

# ── Artifactory ───────────────────────────────────────────────────────
# url/type/driver/postgresql.enabled/waitForDatabase already set in
# platform chart defaults — only credentials need overriding here.
artifactory:
  database:
    user: artifactory
    password: <ARTIFACTORY_DB_PASSWORD>
  # Optional: Mission Control (E+ license required)
  # mc:
  #   enabled: true
  # Optional: AppTrust (both keys required together)
  # apptrust:
  #   enabled: true
  # unifiedpolicy:
  #   enabled: true

# ── Xray ─────────────────────────────────────────────────────────────
# url/postgresql.enabled/rabbitmq.enabled already set in platform defaults.
xray:
  database:
    user: xray
    password: <XRAY_DB_PASSWORD>
  # Optional: JAS (Advanced Security) — E+ / Enterprise X license required
  # serviceAccount:
  #   create: true
  # rbac:
  #   create: true

# To skip Xray entirely:
# xray:
#   enabled: false
# rabbitmq:
#   enabled: false   # RabbitMQ is only used by Xray

# ── Optional products (disabled by default; require license) ──────────
# distribution:
#   enabled: true
#   database:
#     user: distribution
#     password: <DISTRIBUTION_DB_PASSWORD>

# catalog:
#   enabled: true
#   database:
#     user: catalog
#     password: <CATALOG_DB_PASSWORD>

# worker:
#   enabled: true

# bridge:
#   enabled: true

Ready-to-use examples from the jfrog/charts repository:

ExampleDescription
external-postgres-values.yamlExternal PostgreSQL for all products
HA-with-distribution-S3Full HA: 3-node Artifactory, Distribution, external PostgreSQL, S3
values-catalog-jas.yamlEnable Catalog and JAS
xray-with-catalog-valkey-cacheCatalog with Valkey cache for Xray
fresh-install-rabbitmq-4.x-with-quorumFresh install with RabbitMQ 4.x and quorum queues
terraform/jfrog-platform-aws-installFull Terraform AWS install (EKS, RDS, S3)

Key points:

  • Database config is at the subchart level (artifactory.database), not artifactory.artifactory.database — because database: is a top-level key in the standalone Artifactory chart
  • postgresql.enabled: false is already set per-subchart in the platform chart defaults — you do not need to repeat it in customvalues.yaml
  • Artifactory uses JDBC format (jdbc:postgresql://); Xray uses libpq format (postgres://) — the chart auto-generates the correct format per product from global.database.host
  • Filestore is at the application level (artifactory.artifactory.persistence) — because persistence: is inside the artifactory: application section of the standalone Artifactory chart
  • JAS (Advanced Security) requires xray.serviceAccount.create: true and xray.rbac.create: true — uncomment the JAS block in the sample above. Once set, JAS activates automatically when your JPD is connected to MyJFrog with an Enterprise+ or Enterprise X license (source)
  • Curation is a component of Xray (not Artifactory) and requires Catalog to function. Curation is installed when Xray is installed. Enable catalog.enabled: true so Curation can access package vulnerability data, then activate Curation via the UI with the required entitlement. See Installing Catalog
  • Catalog is a separate subchart enabled with catalog.enabled: true. It requires its own catalog database (JDBC format) — it does not share the Xray database. See values-catalog-jas.yaml for a combined Catalog + JAS example
  • AppTrust is a component (container deployment) within the Artifactory chart, not a separate subchart. Enable it with artifactory.apptrust.enabled: true and artifactory.unifiedpolicy.enabled: true — both keys are required together
  • Explicit per-product URLs: If you need a different host per product or want full control, you can override artifactory.database.url, xray.database.url, etc. with explicit connection strings instead of using global.database.host
  • Uncomment optional products only if your license covers them (License Matrix)
  • For production, store passwords in Kubernetes Secrets instead of plain text — see External Database
4. Create security key secrets
export MASTER_KEY=$(openssl rand -hex 32)
export JOIN_KEY=$(openssl rand -hex 16)

kubectl create namespace jfrog-platform
kubectl -n jfrog-platform create secret generic master-key --from-literal=master-key=$MASTER_KEY
kubectl -n jfrog-platform create secret generic join-key --from-literal=join-key=$JOIN_KEY

Save these keys securely — you need them for upgrades and disaster recovery.

5. Apply a sizing profile (recommended)

The chart ships six pre-built sizing profiles in the jfrog/charts sizing directory. Each profile sets replica counts, HPA bounds, resource requests/limits, JVM options, and DB connection pool sizes for Artifactory, Xray, RabbitMQ, and Distribution.

ProfileArtifactory replicasXray replicasUse case
platform-xsmall.yaml11 (HPA 1–2)Minimal footprint / dev
platform-small.yaml11 (HPA 1–3)Small teams
platform-medium.yaml21 (HPA 1–5)HA Artifactory
platform-large.yaml32 (HPA 2–6)Large org
platform-xlarge.yaml42 (HPA 2–8)Very large
platform-2xlarge.yaml63 (HPA 3–12)Maximum

Apply a profile by adding it as an additional -f flag. Place it before customvalues.yaml — in Helm, the last -f file wins, so customvalues.yaml takes final precedence over the sizing profile for any overlapping keys:

helm upgrade --install jfrog-platform jfrog/jfrog-platform \
  --namespace jfrog-platform \
  --create-namespace \
  --version <CHART_VERSION> \
  -f https://raw.githubusercontent.com/jfrog/charts/master/stable/jfrog-platform/sizing/platform-small.yaml \
  -f customvalues.yaml
6. Pre-install checklist

Before deploying, confirm:

  • External PostgreSQL is reachable from inside the cluster
  • Databases and users for each product are created
  • A default StorageClass exists in the cluster (kubectl get sc)
  • Security key secrets are created (step 4 above)
  • If using external filestore, the binarystore secret is created (step 2 above)

Run the install command for your environment (Kubernetes or OpenShift) and deployment type (production or evaluation):

Pin the chart version with --version for repeatable deployments.

helm upgrade --install jfrog-platform jfrog/jfrog-platform \
  --namespace jfrog-platform \
  --create-namespace \
  --version <CHART_VERSION> \
  -f customvalues.yaml

Find available versions: helm search repo jfrog/jfrog-platform --versions

How Do I Verify the Installation?

Run both checks in sequence once pods are ready.

Check Platform Health
curl -f http://<JFROG_URL>/router/api/v1/system/health

A healthy response returns "status": "HEALTHY" for all services. If any service is unhealthy, wait 2–3 minutes and retry — services take time to initialize.

Access the UI

Open http://<JFROG_URL> in your browser. Log in with the default credentials (admin / password), change the password immediately, and complete the Onboarding Wizard.

Common Errors and Fixes
ErrorCauseFix
Pods stuck in PendingInsufficient cluster resources or missing storage classVerify CPU/memory requests and confirm a default StorageClass exists (kubectl get sc)
Artifactory CrashLoopBackOffDatabase not reachable or wrong credentialsCheck database.url, user, password in customvalues.yaml; test DB connectivity from inside the cluster
UnknownHostException: jfrog-platform-postgresqlArtifactory still connecting to bundled PostgreSQLSet artifactory.postgresql.enabled: false and artifactory.waitForDatabase: false. Verify DB config is at artifactory.database, not artifactory.artifactory.database
Failed to load binary provider config - invalid XMLEmpty binarystore.xml from inline persistence valuesUse customBinarystoreXmlSecret instead of inline S3/GCS/Azure values — see External FileStore
Catalog / Curation not visible in UIJPD not connected to MyJFrog, missing E+ license, or Catalog not enabledCheck Administration → Platform Management → MyJFrog; Curation requires catalog.enabled: true (source)
Master key mismatch on startupDatabases were initialized with a different master key (e.g., after reinstall or key rotation)Drop and recreate the product databases on the external PostgreSQL, or restore the original master key. Scale down all workloads first to release active DB connections
helm upgrade fails with "release not found"First install requires --install flagUse helm upgrade --install (both flags together)
Health check returns unhealthy after deployServices still startingWait 3-5 minutes for all services to initialize; check pod logs with kubectl logs -n jfrog-platform

For common questions about databases, licensing, upgrades, and more, see the Quick Start FAQ.

Next Steps

After all services are healthy:

  1. Complete the Onboarding Wizard to configure repositories and security.
  2. Install your license, enable additional products, and tune your deployment — see JFrog Platform Helm chart — Advanced Configuration.
  3. Set TLS on the JFrog Platform to enable HTTPS.
  4. To install and enable Catalog, see Installing Catalog.
  5. Review the System YAML Configuration for advanced tuning.

Related Topics

Frequently Asked Questions

This section provides answers to frequently asked questions.

FAQs
Q: What is the minimum setup needed to install the JFrog Platform via Helm?

A: For evaluation, run helm upgrade --install jfrog-platform jfrog/jfrog-platform --namespace jfrog-platform --create-namespace. No configuration files are required — the chart defaults install Artifactory and Xray with a bundled PostgreSQL and local storage. Other products (Distribution, Catalog, Worker, Bridge) must be enabled via customvalues.yaml.

Q: How do I verify the JFrog Platform is running after a Helm install?

A: Run curl -f http://<JFROG_URL>/router/api/v1/system/health. A healthy response returns "status": "HEALTHY" for all services. If services appear unhealthy, wait 3–5 minutes — some services take time to initialize.

Q: Do I need an external database for a JFrog Platform Helm installation?

A: Not for evaluation — the chart includes a bundled PostgreSQL database. For production, configure an external PostgreSQL database before deploying. The bundled database is not suitable for production workloads. See JFrog Platform Helm chart — Advanced Configuration.

Q: What is the default admin password after a Helm install?

A: The default credentials are username admin and password password. Change the password immediately after the first login and complete the Onboarding Wizard.