From 5b2981b8971ef03df752331328def9009d2556f2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 22:22:30 +0000 Subject: [PATCH 01/13] Bump github.com/go-jose/go-jose/v3 from 3.0.0 to 3.0.1 Bumps [github.com/go-jose/go-jose/v3](https://github.com/go-jose/go-jose) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/go-jose/go-jose/releases) - [Changelog](https://github.com/go-jose/go-jose/blob/v3/CHANGELOG.md) - [Commits](https://github.com/go-jose/go-jose/compare/v3.0.0...v3.0.1) --- updated-dependencies: - dependency-name: github.com/go-jose/go-jose/v3 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index d98bd55..440abf1 100644 --- a/go.mod +++ b/go.mod @@ -89,7 +89,7 @@ require ( github.com/dustin/go-humanize v1.0.1 // indirect github.com/fatih/color v1.15.0 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect - github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.1 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect diff --git a/go.sum b/go.sum index dd9ed56..1bb329f 100644 --- a/go.sum +++ b/go.sum @@ -164,8 +164,9 @@ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeME github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-jose/go-jose/v3 v3.0.1 h1:pWmKFVtt+Jl0vBZTIpz/eAKwsm6LkIxDVVbFHKkchhA= +github.com/go-jose/go-jose/v3 v3.0.1/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= From ad819575dff9afdcdb43c632a47526b3fec5b022 Mon Sep 17 00:00:00 2001 From: Karsten Kraus Date: Tue, 12 Dec 2023 16:33:00 +0100 Subject: [PATCH 02/13] Update README.md Added links and explanation on how to restore a snapshot --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b0b47f0..dd6048e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,10 @@ Vault Raft Snapshot Agent is a Go binary that takes periodic snapshots of a [Vau cluster using the [integrated raft storage backend](https://developer.hashicorp.com/vault/docs/concepts/integrated-storage). It can store the snapshots locally or upload them to a remote storage backend like AWS S3 as backup in case of system failure -or user errors. +or user errors. This agent basically automates [vault's standard backup procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-backup#manual-backup-procedures) for a single vault cluster or clusters with disaster recovery. + +# Restoring a backup +In case of failure just follow the [standard restore procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-restore#procedures) for your cluster's type using the last snapshot created by the agent from your backup storage. ## Running From 30d0de9bd46a6df5e174fe8b32ad12d1f31cb790 Mon Sep 17 00:00:00 2001 From: Karsten Kraus Date: Tue, 12 Dec 2023 16:33:29 +0100 Subject: [PATCH 03/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dd6048e..c8e1e1d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ the [integrated raft storage backend](https://developer.hashicorp.com/vault/docs store the snapshots locally or upload them to a remote storage backend like AWS S3 as backup in case of system failure or user errors. This agent basically automates [vault's standard backup procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-backup#manual-backup-procedures) for a single vault cluster or clusters with disaster recovery. -# Restoring a backup +## Restoring a backup In case of failure just follow the [standard restore procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-restore#procedures) for your cluster's type using the last snapshot created by the agent from your backup storage. ## Running From daf1ee9aa2e879043a6fea42530ee1a109cf1349 Mon Sep 17 00:00:00 2001 From: Karsten Kraus Date: Tue, 12 Dec 2023 16:33:48 +0100 Subject: [PATCH 04/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c8e1e1d..86b3ee9 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ the [integrated raft storage backend](https://developer.hashicorp.com/vault/docs store the snapshots locally or upload them to a remote storage backend like AWS S3 as backup in case of system failure or user errors. This agent basically automates [vault's standard backup procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-backup#manual-backup-procedures) for a single vault cluster or clusters with disaster recovery. -## Restoring a backup +## Restoring a Snapshot In case of failure just follow the [standard restore procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-restore#procedures) for your cluster's type using the last snapshot created by the agent from your backup storage. ## Running From 958362daa84c78ef8d7d45287b54586300cf5a79 Mon Sep 17 00:00:00 2001 From: Karsten Kraus Date: Tue, 12 Dec 2023 16:34:22 +0100 Subject: [PATCH 05/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 86b3ee9..b48fd61 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Vault Raft Snapshot Agent is a Go binary that takes periodic snapshots of a [Vau cluster using the [integrated raft storage backend](https://developer.hashicorp.com/vault/docs/concepts/integrated-storage). It can store the snapshots locally or upload them to a remote storage backend like AWS S3 as backup in case of system failure -or user errors. This agent basically automates [vault's standard backup procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-backup#manual-backup-procedures) for a single vault cluster or clusters with disaster recovery. +or user errors. This agent automates [vault's manuel standard backup procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-backup#manual-backup-procedures) for a single vault cluster or clusters with disaster recovery. ## Restoring a Snapshot In case of failure just follow the [standard restore procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-restore#procedures) for your cluster's type using the last snapshot created by the agent from your backup storage. From f6037a8ce5746843c48e4dc6280adf8f2f4494fd Mon Sep 17 00:00:00 2001 From: Karsten Kraus Date: Tue, 12 Dec 2023 16:35:11 +0100 Subject: [PATCH 06/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b48fd61..51f6af5 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Vault Raft Snapshot Agent is a Go binary that takes periodic snapshots of a [Vau cluster using the [integrated raft storage backend](https://developer.hashicorp.com/vault/docs/concepts/integrated-storage). It can store the snapshots locally or upload them to a remote storage backend like AWS S3 as backup in case of system failure -or user errors. This agent automates [vault's manuel standard backup procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-backup#manual-backup-procedures) for a single vault cluster or clusters with disaster recovery. +or user errors. This agent automates [vault's manual standard backup procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-backup#manual-backup-procedures) for a single vault cluster or clusters with disaster recovery. ## Restoring a Snapshot In case of failure just follow the [standard restore procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-restore#procedures) for your cluster's type using the last snapshot created by the agent from your backup storage. From f88b99ae6a18e221242b0610000d5c625cd95b38 Mon Sep 17 00:00:00 2001 From: Karsten Kraus Date: Tue, 12 Dec 2023 16:35:32 +0100 Subject: [PATCH 07/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 51f6af5..aabb64a 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ store the snapshots locally or upload them to a remote storage backend like AWS or user errors. This agent automates [vault's manual standard backup procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-backup#manual-backup-procedures) for a single vault cluster or clusters with disaster recovery. ## Restoring a Snapshot -In case of failure just follow the [standard restore procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-restore#procedures) for your cluster's type using the last snapshot created by the agent from your backup storage. +In case of failure just follow the [standard restore procedure](https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-restore#procedures) for your cluster type using the last snapshot created by the agent from your backup storage. ## Running From 5f3f0bd9bf92dd629aa48faee1ad28f26009e0e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 23:38:19 +0000 Subject: [PATCH 08/13] Bump golang.org/x/crypto from 0.14.0 to 0.17.0 Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.14.0 to 0.17.0. - [Commits](https://github.com/golang/crypto/compare/v0.14.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 440abf1..29bb7f4 100644 --- a/go.mod +++ b/go.mod @@ -56,7 +56,7 @@ require ( ) // ensure up-to-date versions (because of known vulnerabilities etc.) -require golang.org/x/crypto v0.14.0 // indirect +require golang.org/x/crypto v0.17.0 // indirect // testing require github.com/stretchr/testify v1.8.4 @@ -140,8 +140,8 @@ require ( golang.org/x/net v0.17.0 // indirect golang.org/x/oauth2 v0.12.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/appengine v1.6.8 // indirect diff --git a/go.sum b/go.sum index 1bb329f..7e7e959 100644 --- a/go.sum +++ b/go.sum @@ -481,8 +481,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -656,8 +656,8 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -674,8 +674,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From 28a0366bc8e3c339b73b1398340c7357f93a93df Mon Sep 17 00:00:00 2001 From: Argelbargel Date: Thu, 4 Jan 2024 13:46:37 +0100 Subject: [PATCH 09/13] Bump Alpine-Image-Version --- .github/release.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/release.Dockerfile b/.github/release.Dockerfile index 952fbf7..5808c33 100644 --- a/.github/release.Dockerfile +++ b/.github/release.Dockerfile @@ -1,4 +1,4 @@ -FROM --platform=$TARGETPLATFORM alpine:3.18.4 +FROM --platform=$TARGETPLATFORM alpine:3.18.5 LABEL org.opencontainers.image.source=https://github.com/Argelbargel/vault-raft-snapshot-agent LABEL org.opencontainers.image.description="vault-raft-snapshot-agent ($TARGETPLATFORM)" From ff6971ccee6fb9c4735820ba82125e308a571911 Mon Sep 17 00:00:00 2001 From: Karsten Kraus Date: Mon, 15 Jan 2024 18:28:00 +0100 Subject: [PATCH 10/13] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index aabb64a..b5de7f5 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ You can specify most [command-line options](#command-line-options-and-logging) v | `VRSA_LOG_LEVEL=` | [--log-level](#cli-log-level) | | `VRSA_LOG_OUTPUT=` | [--log-output](#cli-log-output) | -Vault Raft Snapshot Agent supports static configuration via environment variables: +Additionally Vault Raft Snapshot Agent supports static configuration via environment variables alongside its configuration file: - for setting the [address of the vault-server](#cnf-vault-url) you can use `VAULT_ADDR`. - any other [configuration option](#configuration) can be set by prefixing `VRSA_` to the upper-cased path to the key @@ -114,12 +114,12 @@ Vault Raft Snapshot Agent supports static configuration via environment variable For example `VRSA_SNAPSHOTS_FREQUENCY=` configures the [snapshot-frequency](#cnf-snapshots-frequency) and `VRSA_VAULT_AUTH_TOKEN=` configures the [token authentication](#cnf-vault-auth-token) for vault. -Other than the [external property sources](#secrets-and-external-property-sources), these environment variables are read -once at startup only and the -configuration will not be reloaded when their values change. +In contrast to values specified via the configuration file, these environment variables are read +once at startup only and the configuration will not be reloaded when their values change, +except those speficied as [external property sources/Secret](#secrets-and-external-property-sources) below which always reflect the currently configured value. **Options specified via environment-variables take precedence before the values specified in the configuration file - -even those specified as [external property sources](#secrets-and-external-property-sources)!** +even those specified as [external property sources/Secret](#secrets-and-external-property-sources)!** ## Configuration From 8f1d4d1528dfc22f414c0a23dce595b62236a2b3 Mon Sep 17 00:00:00 2001 From: Karsten Kraus Date: Mon, 15 Jan 2024 18:29:24 +0100 Subject: [PATCH 11/13] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b5de7f5..768813c 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ Additionally Vault Raft Snapshot Agent supports static configuration via environ In contrast to values specified via the configuration file, these environment variables are read once at startup only and the configuration will not be reloaded when their values change, -except those speficied as [external property sources/Secret](#secrets-and-external-property-sources) below which always reflect the currently configured value. +except those specified as [external property sources/Secret](#secrets-and-external-property-sources) below which always reflect the currently configured value. **Options specified via environment-variables take precedence before the values specified in the configuration file - even those specified as [external property sources/Secret](#secrets-and-external-property-sources)!** From 1d53679882641d5553a5e89f4fad54923eb7c2e2 Mon Sep 17 00:00:00 2001 From: Karsten Kraus Date: Mon, 15 Jan 2024 18:31:17 +0100 Subject: [PATCH 12/13] Update README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 768813c..5335c4d 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,12 @@ In case of failure just follow the [standard restore procedure](https://develope ## Running +### Helm-Chart + +If you're running on kubernetes, you can use the +provided [Helm-Charts](https://argelbargel.github.io/vault-raft-snapshot-agent-helm/) to install Vault Raft Snapshot +Agent into your cluster. + ### Container-Image You can run the agent with the supplied container-image, e.g. via docker: @@ -22,12 +28,6 @@ You can run the agent with the supplied container-image, e.g. via docker: docker run -v :/etc/vault.d/snapshot.json" ghcr.io/argelbargel/vault-raft-snapshot-agent:latest ``` -### Helm-Chart - -If you're running on kubernetes, you can use the -provided [Helm-Charts](https://argelbargel.github.io/vault-raft-snapshot-agent-helm/) to install Vault Raft Snapshot -Agent into your cluster. - ### systemd-service The recommended way of running this daemon is using systemctl, since it handles restarts and failure scenarios quite From b3c5ffaba5325fee2a5e109ee1d2661d0fcd99af Mon Sep 17 00:00:00 2001 From: Karsten Kraus Date: Mon, 15 Jan 2024 18:33:32 +0100 Subject: [PATCH 13/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5335c4d..90ee323 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ docker run -v :/etc/vault.d/snapshot.json" ghcr.io/argelb ### systemd-service -The recommended way of running this daemon is using systemctl, since it handles restarts and failure scenarios quite +If you want to use the plain binary, the recommended way of running this daemon is using systemctl, since it handles restarts and failure scenarios quite well. To learn more about systemctl, checkout [this article](https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units). begin, create the following file at `/etc/systemd/system/snapshot.service`: