Reapply "feat: add backups for postgres"

This reverts commit d5d242601f.
This commit is contained in:
2025-09-06 20:49:22 +05:00
parent 1b6e98f626
commit 12466975f4
4 changed files with 88 additions and 6 deletions

View File

@@ -82,6 +82,7 @@
}, },
{ {
"name": "cloudflare-r2-token", "name": "cloudflare-r2-token",
"namespace": "postgres-system",
"itemPath": "vaults/Private/items/cloudflare" "itemPath": "vaults/Private/items/cloudflare"
} }
] ]

37
flake.lock generated
View File

@@ -18,6 +18,42 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_2": {
"locked": {
"lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"krew2nix": {
"inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1716272275,
"narHash": "sha256-JWDyPhAJp263EVVsGrKwrJU+xdDReHsDmSe7A190/Cg=",
"owner": "eigengrau",
"repo": "krew2nix",
"rev": "0c1fecaab044dba1249c5d09366891ec467b4ad2",
"type": "github"
},
"original": {
"owner": "eigengrau",
"repo": "krew2nix",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1756819007, "lastModified": 1756819007,
@@ -37,6 +73,7 @@
"root": { "root": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"krew2nix": "krew2nix",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
} }
}, },

View File

@@ -4,9 +4,14 @@
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
krew2nix = {
url = "github:eigengrau/krew2nix";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = { nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: outputs = { nixpkgs, flake-utils, krew2nix, ... }: flake-utils.lib.eachDefaultSystem (system:
let let
lib = nixpkgs.lib; lib = nixpkgs.lib;
@@ -19,12 +24,16 @@
]; ];
}; };
}; };
kubectl = krew2nix.packages.${system}.kubectl;
in { in {
# Define the devShell for the current system # Define the devShell for the current system
devShell = pkgs.mkShell { devShell = pkgs.mkShell {
buildInputs = with pkgs; [ buildInputs = with pkgs; [
kubernetes-helm kubernetes-helm
kubectl (kubectl.withKrewPlugins (plugins: with plugins; [
cnpg
]))
nil nil
terraform terraform
tflint tflint

View File

@@ -35,7 +35,7 @@ export class PostgresCluster extends Construct {
namespace: options.namespace, namespace: options.namespace,
}); });
const destinationPath = "s3://rihla-backups/"; const destinationPath = "s3://homelab-backups/";
const endpointURL = options.backupR2EndpointURL; const endpointURL = options.backupR2EndpointURL;
const barmanConfiguration = { const barmanConfiguration = {
@@ -321,7 +321,7 @@ export class PostgresCluster extends Construct {
}, },
spec: { spec: {
instances: 3, instances: 3,
maxSyncReplicas: 0, maxSyncReplicas: 1,
primaryUpdateStrategy: "unsupervised", primaryUpdateStrategy: "unsupervised",
certificates: { certificates: {
serverCASecret: certNames.server, serverCASecret: certNames.server,
@@ -346,12 +346,47 @@ export class PostgresCluster extends Construct {
], ],
enableSuperuserAccess: false, enableSuperuserAccess: false,
bootstrap: { bootstrap: {
initdb: { recovery: {
source: "clusterBackup",
database: "postgres", database: "postgres",
owner: options.primaryUser,
secret: { secret: {
name: options.initSecretName, name: options.initSecretName,
}, },
postInitSQL: [`CREATE USER ${options.primaryUser} SUPERUSER;`], },
},
externalClusters: [
{
name: "clusterBackup",
plugin: {
name: "barman-cloud.cloudnative-pg.io",
parameters: {
barmanObjectName: "r2-postgres-backup-store",
serverName: "postgres-cluster",
},
},
},
],
managed: {
services: {
disabledDefaultServices: ["ro", "r"],
additional: [
{
selectorType: "rw",
serviceTemplate: {
metadata: {
name: "postgres-cluster",
annotations: {
"external-dns.alpha.kubernetes.io/hostname":
"postgres.dogar.dev",
},
},
spec: {
type: "LoadBalancer",
},
},
},
],
}, },
}, },
storage: { storage: {