Why air-gapped ClickHouse installation starts with a release intake process
An air-gapped ClickHouse installation is mainly a recurring release intake job: mirroring the release artifacts, verifying them, and moving them across the network boundary again each time a new version is needed. The install itself is the easy part. A network with no outbound access cannot pull packages or images on demand, so the internal repository or registry becomes the only source your servers can use, and someone must keep it current. ClickHouse server is licensed under the Apache License 2.0 (Apache-2.0), so the software can be carried and run inside your boundary without a license purchase, but the license does not keep the release stream current for you.
ClickHouse stable releases ship roughly monthly, and the security policy lists which versions receive security updates. At the time of the supplied facts, versions 26.9, 26.8, 26.7 and 26.3 were listed as supported, and all other versions were unsupported. Your intake process therefore needs a cadence, an owner, and a decision rule for which release line you track, such as stable for most production use or LTS for a longer support window. Confirm the current supported list in the security policy on the day you plan a release, because it changes over time. A version that falls out of support while it sits in your enclave is a risk you carry alone.
DeployOpen plans and implements the intake path with your team: defining the mirror scope, the checksum and signature verification steps, the transfer and approval workflow, the internal repository or registry layout, and the rehearsal of an upgrade on a pre-production cluster with representative data. DeployOpen does not operate your transfer gateway, decide which releases your risk owners accept, or provide the vendor's security updates. Ask any partner, including us, to confirm in writing which artifacts, verification evidence and approvals fall in scope, and which remain with your organization.
Choosing how to carry ClickHouse across the boundary
Mirroring tgz archives is the lowest-tooling path. You download the release archive on a connected staging host, carry it across the boundary with your approved media process, unpack it on each server and manage the configuration and service files yourselves. It suits a small estate with few hosts, a team comfortable with manual installs and a change process that accepts a documented step on every server. The main cost is operator time, and that cost repeats for every release you adopt.
- Team needs: Someone who can write and test the unpack, service and configuration steps, and keep them identical on every server, usually through configuration management.
- Verification: Compare the archive's checksum with the value published alongside the release before it crosses the boundary, then check it again after transfer and before extraction.
- Upkeep: Each new release means a new transfer, a new checksum record and a new rollout on every host, so keep a versioned runbook.
- Drift risk: Hand-built hosts drift over time. Record the installed version and configuration hash on every node.
- Upgrade ordering: Document which replica runs which version at each step of a rolling change.
Before you commit, confirm on the ClickHouse releases page which archive names, architectures and checksum files each version publishes.
An internal package repository suits an estate with many hosts running the same operating system family. You mirror the Linux packages into a repository inside the boundary, and each server installs and updates through the package manager your team already uses. This method fits teams that want version pinning and standard update commands, but it asks for ongoing repository administration and clear ownership of signing keys. The cost is mostly the platform work to build and keep the mirror current.
- Team needs: Repository administration, snapshot management and working knowledge of the package manager on each operating system in your estate.
- Verification: Confirm the publisher's signing key fingerprint through a channel separate from the download, then verify package and repository metadata signatures at mirror time and again at install.
- Currency: Sync on a schedule that matches the stable release cadence, and keep older snapshots until your rollback window closes.
- Pinning: Pin server and client package versions so that replicas do not drift apart during a patch cycle.
- Dependencies: Confirm which packages and repository components your operating system version needs for both the server and the client.
Before you build the mirror, check the official installation documentation for your distribution, since exact repository paths and signing details are the items to confirm for your platform.
A container registry mirror suits teams that already run Docker or Kubernetes inside the boundary and manage workloads as images. You copy the required images into an internal registry and deploy from there, so the runtime pulls only from your own infrastructure. This method asks for registry operations and container platform skills, and it moves the verification effort toward image digests and scanning. The cost is mostly the platform work to keep the registry, the copy job and the runtime healthy.
- Team needs: Registry operations, image copy and retention, and a container runtime or Kubernetes platform already running inside the boundary.
- Verification: Record each image digest on the staging side, deploy by digest rather than relying only on a tag, and compare digests again after each copy.
- Dependencies: Mirror every image your deployment references, including any operator, Keeper and helper images, not only the server image.
- Patch flow: Promote a new version through the internal registry only after it passes your pre-production check with representative data and queries.
- Scanning: Run your internal vulnerability scanning on mirrored images before they reach production namespaces.
Before you write the copy job, confirm the image names, tags and any signature support for your chosen image in the official ClickHouse repository and documentation.
Transfer and repository options compared
This table compares four ways to move ClickHouse and its supporting software across an isolation boundary, with the ongoing maintenance each one creates. Read each row against your team's capacity to rebuild and re-verify artifacts every release, since the monthly stable cadence sets how often that work recurs. The main takeaway is that a tgz archive is the least infrastructure but the most manual work, while an internal repository or registry mirror shifts effort into keeping a current, verified copy inside your network.
| Option | Fit | What you maintain | Patch cadence burden |
|---|---|---|---|
| Tgz archive transfer | Small estates with few servers and infrequent upgrades | Verified archive set, checksums, install scripts and a record of each transferred version | High: every stable and LTS release needs a new transfer, verification and manual install |
| Internal package repository | Fleets of Debian or rpm hosts managed by configuration tooling | Internal mirror of ClickHouse packages, signing key trust and retention of older versions for rollback | Medium: mirror sync and import happen on each release, then hosts update from the internal source |
| Container registry mirror | Teams already running ClickHouse or Keeper in containers or Kubernetes | Mirrored image tags, digests, an internal registry and pull secrets for each cluster | Medium: each image tag or digest must be imported and pinned, and base images may need separate tracking |
| Dependency bundle for Keeper and tooling | Any deployment, covering Keeper, client tools, monitoring agents and backup utilities | Inventory of OS packages and helper tools with versions, plus a bundle that matches the ClickHouse release | Medium to high: every supporting component has its own update path and must be rechecked with each ClickHouse upgrade |
How to stage, verify and install ClickHouse offline
This sequence moves a ClickHouse release from an internet-connected staging host into an isolated network, with a check at each handoff so the installed cluster matches what was approved. It ends with replication and restore tests that show the deployment can recover before it carries production data.
Confirm the supported version and target release
The platform team, with the application owner, picks a target from the stable or LTS line that is still covered by the security policy. Check the supported versions list in the ClickHouse security policy, then compare it with the production FAQ guidance on stable and LTS releases and the release notes for any backward-incompatible changes. Record the exact version string, such as the tag shown on the GitHub releases page, in the change request. The step is done when the target version, its support window and the upgrade path from your current build are written down and approved.
Mirror the release artifacts on the outside host
An engineer on a connected staging host downloads the server and client packages, or the tgz archives, for the approved version, along with any dependency packages your target operating system needs. Mirror the repository metadata too, so the internal repository can be refreshed later with the same layout. Store the copies in a dedicated staging directory with the version in the path. The step is done when every file is in the staging directory and a file listing matches the set you planned to carry across.
Verify checksums and signatures before transfer
A security engineer compares each file's checksum and package signature against values published by the vendor on the official release page, not values copied from a mirror or a forum post. Confirm the signing key fingerprint and the exact file names with the official release and package documentation before trusting either. Keep the verification output with the change record. The step is done when every artifact matches a vendor-published value and any mismatch has been investigated and cleared or removed from the set.
Scan and approve the transfer set
The security team scans the verified set with the malware and vulnerability tooling your boundary policy requires, then records an approval for that exact list of files. Regulated environments often tie this step to supply chain controls, such as the software integrity checks that NERC CIP-013-2 asks procurement processes to address. Confirm with your compliance owner which evidence the assessor expects. The step is done when the approved manifest, with checksums, is signed off and the transfer media or cross-domain path is logged.
Load the internal repository and re-verify
After the files cross the boundary, the platform team loads them into the internal package repository or file share and recomputes checksums on the inside copy. Compare the results with the approved manifest, not with the staging output alone. Confirm the repository metadata is signed with your internal key and that hosts can read it without outbound access. The step is done when every inside checksum matches the approved manifest and a test host can list and fetch the packages from the internal source.
Install on test hosts and validate the build
Install ClickHouse on a set of test hosts that match production operating system, memory and disk layout, pointing them only at the internal repository. Apply your configuration files in the standard config.d and users.d layout, then load representative data and run the queries your teams depend on. Check the server version, the client version and the service status on each host. The step is done when the test hosts start cleanly, answer queries correctly and show no unexpected errors in the server logs.
Configure Keeper on dedicated nodes
Build the ClickHouse Keeper ensemble on dedicated hosts, using at least three nodes as the replication guide recommends for production, and give each about 4 GB of RAM. Keep these hosts separate from data nodes where your sizing allows, and set matching configuration on every member. Confirm the ensemble reports a healthy leader and that each member can reach the others on its peer port. The step is done when all Keeper nodes show a stable quorum after a restart of each member in turn.
Validate replication and run a restore test
Create a replicated test table, insert data on one replica, and confirm the rows appear on the others. Stop one replica, write more data, restart it, and check that it catches up without manual intervention, as the replication documentation describes. Then run a BACKUP and RESTORE cycle into a spare cluster and compare row counts and checksums with the source. The backup documentation warns that an untested backup will probably not restore when needed, so do not skip this. The step is done when replication catches up, the restored data matches the source, and the results are filed before any production data is loaded.
Verification and control points for offline ClickHouse
An air-gapped ClickHouse install moves software across a boundary that nobody can check from the inside, so every control here sits at the point where something enters, is granted access, or runs. The cards cover what is verified before a package is trusted, who approved it, who can reach the internal repository, how the server admits users, how nodes talk to each other, and how the installed version is recorded over time.
Integrity and authenticity of carried artifacts
Verify every tgz archive, package and container image before it crosses into the isolated network, and record the checksum or signature check result alongside the artifact. Confirm the signing keys against the vendor's published key material through a channel you trust, not a copy that travels with the download. Where the system is in scope for NERC CIP-013-2, this check is the evidence that supply chain procurement addresses software integrity and authenticity for vendor software and patches. Ask your team to confirm which verification steps your procurement process already requires.
Approval record for each transfer
Every batch that crosses the boundary needs a named requester, a named approver, the artifact list with versions, and the verification result attached. Keep the transfer record in a system outside the isolated network so it survives a rebuild of the internal side. Reject partial transfers that lack a matching record, because an unapproved package in the internal repository is hard to trace later. Agree the approval roles and the review turnaround with your security and change teams before the first monthly release arrives.
Least-privilege access to the internal repository
Give the mirror and package repository read access to the nodes that install ClickHouse and write access only to the transfer role. Separate the people who publish new releases from the people who deploy them, so one account cannot bring a package in and push it to production. Review repository credentials on a fixed schedule and remove accounts of staff who change roles. Confirm with your platform team how the repository authenticates clients and where those credentials are stored.
Default user restriction and external authenticators
A fresh ClickHouse server starts the default user with all permissions, so restrict or disable it before any application connects. Create named users and roles through SQL, and bind them to an external authenticator such as LDAP, Kerberos, an HTTP authenticator or JWT where your identity platform supports it. Test each authenticator in the pre-production environment, since a misconfigured directory can lock out operators during an incident. Confirm which authenticator your identity team will operate before the install starts.
TLS for inter-node traffic
Encrypt traffic between ClickHouse replicas, Keeper nodes and clients with certificates issued by your internal certificate authority, because replication and Keeper coordination cross hosts in the same isolated network. Plan certificate issuance and renewal inside the enclave, since no public authority can be reached for renewal. Store private keys with restricted file permissions and rotate them on a schedule your operators can follow. Confirm the certificate chain your clients trust before the first replica joins the cluster.
Audit trail for installed versions
Record the exact ClickHouse version, build identifier and package checksum on every node, and log each upgrade or rollback with its change ticket. ClickHouse supports only specific versions with security updates, so the audit record shows whether a node still runs a supported line. Compare installed versions against the security policy each month, and flag nodes that fall behind the release cadence. Ask your operations team how this record is stored and who reviews it.
How to patch ClickHouse without outbound access
How often does ClickHouse release new versions I need to bring into the air-gapped network?
Stable releases ship roughly monthly, so an internal intake process needs a fixed monthly cycle rather than ad hoc downloads. LTS releases ship twice a year and are supported for a year after release. Each month, someone should review the GitHub releases page, decide which stable or LTS line you will run, download the tgz archives or packages on the connected side, and record checksums. The ClickHouse production FAQ also recommends reading the changelog before every upgrade, because minor backward-incompatible changes can occur. Ask your team to budget that review as a recurring task, not a one-time setup. Your internal repository should keep the previous release available so you can roll back.
How do we get emergency security fixes into an isolated ClickHouse cluster quickly?
Check the ClickHouse security policy first, because it lists the versions that currently receive security updates and states that all other versions are unsupported. Keep your running line on that list at all times. When a security release lands, use the same intake path as a monthly release, but run it outside the monthly cycle: verify the archive, test it in a pre-production environment with representative data and queries, then roll it through the replicas. Build a standing runbook for this path before you need it, including who approves the transfer across the boundary and who signs off the change.
How do we upgrade replicas in turn without taking the cluster down?
Upgrade one replica at a time so that each shard keeps at least one healthy copy serving queries. Replicated tables are coordinated by ClickHouse Keeper, and a recovered replica automatically syncs missing data from a healthy replica, so a restarted node catches up without manual data copying. Before each restart, confirm that Keeper has a quorum, that replication queues on the other replicas are not backed up, and that the node you are about to restart is not the only copy of anything. Upgrade the Keeper nodes with the same discipline. Keep the pre-production cluster on the same version path so you can rehearse the sequence. Your engineers should write the exact order of hosts into the change record.
What changes when we need to jump to a new LTS release?
An LTS jump crosses more than one stable line, so it needs a longer test window than a routine monthly update. LTS releases ship twice a year and are supported for a year after release, which gives you a planned landing point, but it does not remove the need to read every changelog between your current version and the target. Plan for schema or setting changes, configuration files that must be reviewed against the new defaults, and any queries that depend on behavior that changed. Run the full sequence on a pre-production cluster with representative data, record the results, and only then schedule the production change. Ask whether your team or a partner will own the changelog review and the test evidence.
What is the rollback plan when a ClickHouse release fails in production?
Rollback depends on having the previous archive or package still in the internal repository and on a tested path back to it. Keep the prior version available until the new one has run cleanly for an agreed period. If a replica fails after upgrade, take it out of the rotation, restore the previous binary or package, and let the replica resync from a healthy copy. If a problem affects data, rollback to the binary will not undo writes, so the recovery path is a backup restore. This is why the backup test matters as much as the binary. Write the rollback decision points into the change record before the window opens, so the team does not debate them during an incident.
Do we need a restore-tested backup before every ClickHouse change?
Yes. The backup documentation notes that replication alone does not protect against human error or corruption, and it warns that a backup never test-restored will probably not restore properly when needed. Take a full or incremental backup with BACKUP to local disk, S3-compatible storage or Azure Blob Storage before each change, then restore it to a spare cluster and confirm the row counts and key queries match. Repeat the restore test on a regular schedule, not only before upgrades. The effort is recurring: storage for backups, spare capacity for restore tests, and engineer time to verify results. Ask any partner to show how restore tests are scheduled, recorded and approved.
Can our own team handle ClickHouse patching, or do we need a partner?
Your team can handle patching if it has the capacity to run the monthly intake, the test cluster, the upgrade sequence and the restore tests every cycle. Most of the cost is recurring labor and spare infrastructure, not the install itself. A partner can plan the intake process, write the runbooks, set up the internal repository and run upgrades under a fixed-scope agreement with written deliverables. DeployOpen plans, implements, hardens, backs up, upgrades, documents and supports self-hosted platforms inside your own networks, and ongoing support is available as a retainer. Ask for a quote based on the number of clusters, the release cadence you choose and the restore testing you require.
How do we verify each ClickHouse package before it crosses into the isolated network?
Verify every archive or package on the connected side before transfer, and again after it lands inside the boundary. Record the checksum of each file, compare it with the value published by the source, and keep the record with the change ticket. Check the version string against the release you approved, and store the signed package metadata alongside the file. For regulated environments, this control maps to the supply chain requirements for verifying software integrity and authenticity of vendor software and patches, including NERC CIP-013-2 for bulk electric system operators. Confirm with your compliance lead which evidence your assessor expects before you design the transfer process.
What to confirm in your environment before committing
Air-gapped installs fail on assumptions made before the first package is copied across the boundary. The cards below cover the platform, the dependency chain, the replica topology, the backup path, the licensing of companion tools and the evidence an auditor may ask for. Settle each one with the people who own that part of the enclave before you agree a scope.
Operating system and architecture support
Confirm that your operating system version and CPU architecture are covered by the ClickHouse artifacts you plan to mirror, whether that is a tgz archive or a deb or rpm package. Check the release notes and the installation documentation for the exact build you pick, because a mirror that holds the wrong architecture will block the install after the transfer window has closed. Ask whether your hosts need a different package set for ARM or x86 nodes.
Dependency mirroring completeness
List every package and library the server and client need on the target hosts, then confirm each one can come from your internal repository. A clean download of the server does not guarantee that the operating system packages it pulls in are available offline. Ask who maintains the internal mirror, how it is synced across the boundary, and whether it can be verified before each import.
Keeper host placement
ClickHouse Keeper coordinates replicated tables, and the replication guide recommends at least three Keeper nodes on dedicated hosts in production. Confirm that the enclave has three separate failure domains for those hosts and that they can reach each other without routing through a shared hypervisor or switch. Decide early whether Keeper shares hosts with data nodes, because that choice changes sizing and the blast radius of a single outage.
Backup destination reachability
Decide whether backups go to local disk, to S3-compatible storage or to Azure Blob Storage, and confirm that the destination sits inside the enclave. A backup target that depends on an external endpoint will fail silently during an incident. Check that storage credentials can be rotated without internet access, and that the destination is separate from the cluster it protects. Schedule a restore test to a spare cluster as part of acceptance.
Licensing for companion tools
ClickHouse server is licensed under Apache-2.0, but the monitoring, visualization, ingestion and identity tools you run beside it may carry different terms. Some vendors reserve air-gapped deployment for paid editions, so confirm the license and edition for each companion product before you buy or deploy it. Ask whether any tool phones home for license validation, since that call will fail inside the enclave.
Release process documentation for auditors
If an assessor will review how software enters the enclave, document the intake steps: who downloads each artifact, how checksums are verified, where packages are staged and who approves the import. Stable releases ship roughly monthly and LTS releases twice a year, so write down the cadence you will follow for patches. Ask your auditor which control evidence they expect for software integrity and vendor patch handling before the first import.
How much does an air-gapped ClickHouse installation cost and take?
What drives the cost of an air-gapped ClickHouse installation?
The main cost drivers are the number of clusters, the approval process for moving software across the isolated boundary, the repository tooling you need to mirror packages, and how much restore testing you require. A single small cluster with a fast transfer path is far simpler than several production clusters, each with its own Keeper nodes, backups and approval cycle. Ask for the quote to list each cluster, each environment (test and production), and each transfer step as separate line items, so you can see which parts scale and which are fixed.
How long does an air-gapped ClickHouse installation take?
Duration depends mostly on your transfer and approval process rather than on ClickHouse itself. The longest steps are usually getting an approved path for moving archives or packages in, getting security sign-off on each intake, and building a test environment that matches production. Those timelines are set by your own change and security processes, so confirm them with your security and change teams before scheduling. A fixed-scope engagement agrees the timeline in writing before work starts.
Which costs are one-time and which recur after go-live?
One-time costs include designing the mirror and repository, building the first install, verifying downloads, writing runbooks and running the first restore test. Recurring costs come from the monthly intake cycle: ClickHouse stable releases ship roughly monthly, so each release has to be downloaded, checked, approved, carried across the boundary and published internally. Patching work also recurs, because security updates must reach supported versions. Ask whether the quote covers one intake cycle or ongoing support, and whether that support is a retainer.
Can our own team run an air-gapped ClickHouse installation without a partner?
Yes, many teams do this in-house if they already run ClickHouse and have engineers comfortable with package repositories and Keeper. The gaps usually appear in the repeatable intake process, in restore testing and in keeping the internal repository current. Before deciding, check whether you have one person who can own monthly intake, whether your change process can absorb a monthly release, and whether someone can run a restore test on a spare cluster. A partner can take on any of those pieces under a written scope.
What do we need to provide before the work starts?
You will need current network diagrams that show the isolated segment, the boundary and the approved transfer path. You also need named owners for the platform, security approval, change control and backups, plus access to a test environment that resembles production. Confirm early which transfer media and scanning steps your security policy allows. Missing owners or an undefined transfer path are the most common reasons an installation stalls, so settle them before the quote is finalized.
Does a compliance framework require controls on software carried into an isolated network?
Some frameworks do. For example, NERC CIP-013-2 requires supply chain procurement processes to address verification of software integrity and authenticity of vendor software and patches, which is the reason teams check every package crossing an isolated boundary. Your auditor or regulator decides which requirements apply to you. DeployOpen prepares systems, controls and evidence for compliance assessments, but does not issue audit reports or certifications. Ask your assessor which evidence they expect before the intake process is designed.
How is a fixed-scope air-gapped engagement quoted?
Most DeployOpen engagements are fixed-scope, and the quote follows from a written scope that lists the clusters, environments, deliverables, the transfer and approval steps you own, and any retainer for ongoing intake and patching. DeployOpen does not publish a price list. To compare quotes, ask each provider to state the assumptions behind the scope, what is excluded, who approves each change, and how a monthly release is handled after go-live. Scope, deliverables and timelines are agreed in writing before work starts.
How DeployOpen scopes and supports offline ClickHouse
DeployOpen plans, implements, hardens, backs up, upgrades, documents and supports self-hosted open-source platforms inside your own infrastructure, including networks with no outbound access. For ClickHouse, that means the offline mirror, the verification steps for every archive or package that crosses the boundary, the ClickHouse Keeper and replica layout, the tested backup path and the upgrade runbook are scoped together rather than as separate tasks. Most engagements are fixed-scope, so the deliverables, the environments they cover and the timelines are agreed in writing before work starts. Ask for the scope to name the exact ClickHouse version line, the repository tooling you will use, and who performs each transfer across the isolated boundary.
A quote follows from that written scope, so the figures you receive should trace back to named deliverables. Expect the one-time components to include the initial mirror build, the verification procedure, the Keeper and replica deployment, restore testing and handover documentation. The recurring components are the decisions that keep the mirror current: monthly intake of new stable and LTS releases, review of the changelog for backward-incompatible changes, staged rollout to a pre-production cluster, and patching when a supported version receives a security update. DeployOpen offers these recurring tasks as an optional retainer for monthly intake and patching, which you can scope separately from the initial build. Confirm with the vendor which versions remain supported at the time you sign, because that list changes.
DeployOpen prepares systems, controls and evidence for compliance assessments, such as configuration records, access settings, backup restore results and change logs that an assessor may request. DeployOpen does not issue audit reports, attestations or certifications. Independent auditors and certification bodies perform those assessments, so ask them early which evidence they expect for offline patching and software provenance. Once the scope is agreed, your team keeps ownership of the running environment, and DeployOpen's documentation lets your engineers run the mirror refresh, the restore test and the upgrade without outside help.

