Skip to content

Commit 91632d4

Browse files
FEATURE (helm): Add Helm chart
1 parent 9babb6a commit 91632d4

File tree

3 files changed

+138
-11
lines changed

3 files changed

+138
-11
lines changed

app/components/InstallationComponent.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
import { useState } from "react";
44

5-
type InstallMethod = "Automated Script" | "Docker Run" | "Docker Compose";
5+
type InstallMethod =
6+
| "Automated Script"
7+
| "Docker Run"
8+
| "Docker Compose"
9+
| "Helm";
610

711
type ScriptVariant = {
812
label: string;
@@ -62,12 +66,20 @@ curl -sSL https://raw.githubusercontent.com/RostislavDugin/postgresus/refs/heads
6266
- ./postgresus-data:/postgresus-data
6367
restart: unless-stopped`,
6468
},
69+
Helm: {
70+
label: "Helm (Kubernetes)",
71+
language: "bash",
72+
description:
73+
"For Kubernetes deployments, use the official Helm chart. This will create a StatefulSet with persistent storage and optional ingress.",
74+
code: `helm install postgresus ./deploy/postgresus -n postgresus --create-namespace`,
75+
},
6576
};
6677

6778
const methods: InstallMethod[] = [
6879
"Automated Script",
6980
"Docker Run",
7081
"Docker Compose",
82+
"Helm",
7183
];
7284

7385
export default function InstallationComponent() {

app/installation/page.tsx

Lines changed: 117 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import DocTableOfContentComponent from "../components/DocTableOfContentComponent
77
export const metadata: Metadata = {
88
title: "Installation - Postgresus Documentation",
99
description:
10-
"Learn how to install Postgresus using automated script, Docker run or Docker Compose. Simple zero-config installation for your self-hosted PostgreSQL backup system.",
10+
"Learn how to install Postgresus using automated script, Docker run, Docker Compose or Helm for Kubernetes. Simple zero-config installation for your self-hosted PostgreSQL backup system.",
1111
keywords: [
1212
"Postgresus installation",
1313
"Docker installation",
@@ -16,19 +16,22 @@ export const metadata: Metadata = {
1616
"Docker Compose",
1717
"database backup installation",
1818
"pg_dump setup",
19+
"Kubernetes",
20+
"Helm chart",
21+
"K8s deployment",
1922
],
2023
openGraph: {
2124
title: "Installation - Postgresus Documentation",
2225
description:
23-
"Learn how to install Postgresus using automated script, Docker run or Docker Compose. Simple zero-config installation for your self-hosted PostgreSQL backup system.",
26+
"Learn how to install Postgresus using automated script, Docker run, Docker Compose or Helm for Kubernetes. Simple zero-config installation for your self-hosted PostgreSQL backup system.",
2427
type: "article",
2528
url: "https://postgresus.com/installation",
2629
},
2730
twitter: {
2831
card: "summary",
2932
title: "Installation - Postgresus Documentation",
3033
description:
31-
"Learn how to install Postgresus using automated script, Docker run or Docker Compose. Simple zero-config installation for your self-hosted PostgreSQL backup system.",
34+
"Learn how to install Postgresus using automated script, Docker run, Docker Compose or Helm for Kubernetes. Simple zero-config installation for your self-hosted PostgreSQL backup system.",
3235
},
3336
alternates: {
3437
canonical: "https://postgresus.com/installation",
@@ -57,6 +60,26 @@ sudo curl -sSL https://raw.githubusercontent.com/RostislavDugin/postgresus/refs/
5760
- ./postgresus-data:/postgresus-data
5861
restart: unless-stopped`;
5962

63+
const helmInstall = `helm install postgresus ./deploy/postgresus -n postgresus --create-namespace`;
64+
65+
const helmValues = `ingress:
66+
hosts:
67+
- host: backup.yourdomain.com
68+
paths:
69+
- path: /
70+
pathType: Prefix
71+
tls:
72+
- secretName: backup-yourdomain-com-tls
73+
hosts:
74+
- backup.yourdomain.com
75+
76+
persistence:
77+
size: 20Gi`;
78+
79+
const helmInstallWithValues = `helm install postgresus ./deploy/postgresus -n postgresus --create-namespace -f values.yaml`;
80+
81+
const helmUpgrade = `helm upgrade postgresus ./deploy/postgresus -n postgresus`;
82+
6083
return (
6184
<>
6285
{/* JSON-LD Structured Data */}
@@ -68,7 +91,7 @@ sudo curl -sSL https://raw.githubusercontent.com/RostislavDugin/postgresus/refs/
6891
"@type": "TechArticle",
6992
headline: "Installation - Postgresus Documentation",
7093
description:
71-
"Learn how to install Postgresus using automated script, Docker run or Docker Compose. Simple zero-config installation for your self-hosted PostgreSQL backup system.",
94+
"Learn how to install Postgresus using automated script, Docker run, Docker Compose or Helm for Kubernetes. Simple zero-config installation for your self-hosted PostgreSQL backup system.",
7295
author: {
7396
"@type": "Organization",
7497
name: "Postgresus",
@@ -115,6 +138,11 @@ sudo curl -sSL https://raw.githubusercontent.com/RostislavDugin/postgresus/refs/
115138
name: "Docker Compose",
116139
text: "Create a docker-compose.yml file and use Docker Compose for managed deployment.",
117140
},
141+
{
142+
"@type": "HowToStep",
143+
name: "Kubernetes with Helm",
144+
text: "Use the official Helm chart to deploy Postgresus on Kubernetes with StatefulSet, persistent storage and optional ingress.",
145+
},
118146
],
119147
}),
120148
}}
@@ -133,8 +161,9 @@ sudo curl -sSL https://raw.githubusercontent.com/RostislavDugin/postgresus/refs/
133161
<h1 id="installation">Installation</h1>
134162

135163
<p className="text-lg text-gray-700">
136-
You have three ways to install Postgresus: automated script
137-
(recommended), simple Docker run or Docker Compose setup.
164+
You have four ways to install Postgresus: automated script
165+
(recommended), simple Docker run, Docker Compose setup or Helm
166+
for Kubernetes.
138167
</p>
139168

140169
<h2 id="system-requirements">System requirements</h2>
@@ -244,6 +273,62 @@ sudo curl -sSL https://raw.githubusercontent.com/RostislavDugin/postgresus/refs/
244273

245274
<p>Keep in mind that start up can take up to ~2 minutes.</p>
246275

276+
<h2 id="option-4-helm">Option 4: Kubernetes with Helm</h2>
277+
278+
<p>
279+
For Kubernetes deployments, use the official Helm chart. This
280+
will create a StatefulSet with persistent storage and optional
281+
ingress.
282+
</p>
283+
284+
<div className="relative my-6">
285+
<pre className="overflow-x-auto rounded-lg bg-gray-900 p-4 text-sm text-gray-100">
286+
<code>{helmInstall}</code>
287+
</pre>
288+
<div className="absolute right-2 top-2">
289+
<CopyButton text={helmInstall} />
290+
</div>
291+
</div>
292+
293+
<p>
294+
To customize the installation, create a <code>values.yaml</code>{" "}
295+
file:
296+
</p>
297+
298+
<div className="relative my-6">
299+
<pre className="overflow-x-auto rounded-lg bg-gray-900 p-4 text-sm text-gray-100">
300+
<code>{helmValues}</code>
301+
</pre>
302+
<div className="absolute right-2 top-2">
303+
<CopyButton text={helmValues} />
304+
</div>
305+
</div>
306+
307+
<p>Then install with your custom values:</p>
308+
309+
<div className="relative my-6">
310+
<pre className="overflow-x-auto rounded-lg bg-gray-900 p-4 text-sm text-gray-100">
311+
<code>{helmInstallWithValues}</code>
312+
</pre>
313+
<div className="absolute right-2 top-2">
314+
<CopyButton text={helmInstallWithValues} />
315+
</div>
316+
</div>
317+
318+
<p>
319+
See the{" "}
320+
<a
321+
href="https://github.com/RostislavDugin/postgresus/tree/main/deploy/postgresus"
322+
target="_blank"
323+
rel="noopener noreferrer"
324+
className="text-blue-600 hover:text-blue-700"
325+
>
326+
Helm chart documentation
327+
</a>{" "}
328+
for all configuration options including resources, ingress
329+
annotations and health checks.
330+
</p>
331+
247332
<h2 id="getting-started">Getting started</h2>
248333

249334
<p>After installation:</p>
@@ -278,9 +363,11 @@ sudo curl -sSL https://raw.githubusercontent.com/RostislavDugin/postgresus/refs/
278363

279364
<h2 id="how-to-update">How to update Postgresus?</h2>
280365

366+
<h3 id="update-docker">Update Docker installation</h3>
367+
281368
<p>
282-
To update Postgresus, you need to stop it, clean up Docker cache
283-
and restart the container.
369+
To update Postgresus running via Docker, you need to stop it,
370+
clean up Docker cache and restart the container.
284371
</p>
285372

286373
<ol>
@@ -305,6 +392,28 @@ sudo curl -sSL https://raw.githubusercontent.com/RostislavDugin/postgresus/refs/
305392
<code>docker-compose.yml</code> file).
306393
</p>
307394

395+
<h3 id="update-helm">Update Helm installation</h3>
396+
397+
<p>
398+
To update Postgresus running on Kubernetes via Helm, use the
399+
upgrade command:
400+
</p>
401+
402+
<div className="relative my-6">
403+
<pre className="overflow-x-auto rounded-lg bg-gray-900 p-4 text-sm text-gray-100">
404+
<code>{helmUpgrade}</code>
405+
</pre>
406+
<div className="absolute right-2 top-2">
407+
<CopyButton text={helmUpgrade} />
408+
</div>
409+
</div>
410+
411+
<p>
412+
If you have custom values, add <code>-f values.yaml</code> to
413+
the command. Helm will perform a rolling update to the new
414+
version.
415+
</p>
416+
308417
<h2 id="troubleshooting">Troubleshooting</h2>
309418

310419
<h3 id="container-wont-start">Container won&apos;t start</h3>

public/llms.txt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
### Installation
3131
URL: /installation
32-
Content: Three installation methods - automated script, Docker run, Docker Compose. Here you can read how to install Postgresus
32+
Content: Four installation methods - automated script, Docker run, Docker Compose and Helm for Kubernetes. Here you can read how to install Postgresus
3333

3434
### Access Management
3535
URL: /access-management
@@ -96,6 +96,12 @@ Content: How to configure Teams webhook notifications
9696
- Managed deployment with configuration file
9797
- Automatic restart on system reboot
9898

99+
4. **Helm (Kubernetes)**
100+
- Official Helm chart for Kubernetes deployments
101+
- StatefulSet with persistent storage
102+
- Configurable ingress with TLS support
103+
- Health checks with liveness/readiness probes
104+
99105
### Backup Process
100106

101107
1. Select schedule (hourly, daily, weekly, monthly, specific time)
@@ -207,5 +213,5 @@ All data executes within containers you control on servers you own. Credentials
207213

208214
## Keywords
209215

210-
PostgreSQL, backup, monitoring, database, scheduled backups, Docker, self-hosted, open source, S3, Google Drive, Slack notifications, Discord, DevOps, database monitoring, pg_dump, database restore, Cloudflare R2, Microsoft Teams, health checks, compression, automation, encryption, AES-256-GCM, backup encryption, enterprise security, read-only database access, data protection, secure backups, sensitive data encryption, security audit, least privilege
216+
PostgreSQL, backup, monitoring, database, scheduled backups, Docker, self-hosted, open source, S3, Google Drive, Slack notifications, Discord, DevOps, database monitoring, pg_dump, database restore, Cloudflare R2, Microsoft Teams, health checks, compression, automation, encryption, AES-256-GCM, backup encryption, enterprise security, read-only database access, data protection, secure backups, sensitive data encryption, security audit, least privilege, Kubernetes, Helm, K8s, StatefulSet, ingress
211217

0 commit comments

Comments
 (0)