From f042cefd271f21e1a1eba218cfb85de5c5e28e14 Mon Sep 17 00:00:00 2001 From: sandro-lombardi Date: Sun, 9 Apr 2023 18:55:51 +0200 Subject: [PATCH] Added Litestream (#902) * Added litestream * Added a stable version tag for the litestream container. Added randomly generated S3 secrets as default value placeholders --- public/v4/apps/litestream.yml | 70 +++++++++++++++++++++++++++++++++ public/v4/logos/litestream.png | Bin 0 -> 4577 bytes 2 files changed, 70 insertions(+) create mode 100644 public/v4/apps/litestream.yml create mode 100644 public/v4/logos/litestream.png diff --git a/public/v4/apps/litestream.yml b/public/v4/apps/litestream.yml new file mode 100644 index 0000000..b39fbda --- /dev/null +++ b/public/v4/apps/litestream.yml @@ -0,0 +1,70 @@ +captainVersion: 4 +services: + $$cap_appname: + caproverExtra: + dockerfileLines: + - FROM litestream/litestream:$$cap_version + - RUN mkdir /config + - |- + RUN test -f /config/litestream.yml || echo -e "dbs:\n - path: $$cap_db_path\n replicas:\n - type: s3\n bucket: $$cap_bucket\n path: $$cap_dest_path\n endpoint: $$cap_endpoint_url\n access-key-id: $$cap_access_key_id\n secret-access-key: $$cap_secret_access_key" > /config/litestream.yml + - ENTRYPOINT ["/usr/local/bin/litestream"] + - CMD ["replicate", "-config", "/config/litestream.yml"] + notExposeAsWebApp: 'true' + volumes: + - $$cap_appname-data:/data + - $$cap_appname-config:/config + environment: + LITESTREAM_ACCESS_KEY_ID: $$cap_access_key_id + LITESTREAM_SECRET_ACCESS_KEY: $$cap_secret_access_key +caproverOneClickApp: + variables: + - id: '$$cap_version' + label: Litestream Version + defaultValue: '0.3' + description: Check out their Docker page for the valid tags https://hub.docker.com/r/litestream/litestream/tags + validRegex: "/^([^\\s^\\/])+$/" + - id: '$$cap_access_key_id' + label: Access key ID + defaultValue: $$cap_gen_random_hex(20) + description: Enter your replica-specific authentication key + - id: '$$cap_secret_access_key' + label: Secret access key + defaultValue: $$cap_gen_random_hex(40) + description: Enter your replica-specific secret key + - id: '$$cap_db_path' + label: Database path within container + defaultValue: '/data/db' + description: Enter the database path within the container + - id: '$$cap_dest_path' + label: Path within bucket + defaultValue: 'db' + description: Enter the path to use within the bucket + - id: '$$cap_bucket' + label: Bucket name + defaultValue: 'BUCKET' + description: Enter the name of the remote bucket to replicate to + - id: '$$cap_endpoint_url' + label: S3 endpoint URL + defaultValue: '' + description: Enter your endpoint URL of the S3-compatible service. Only required for non-AWS services. + + instructions: + start: |- + This one-click app will deploy Litestream, a standalone streaming replication tool for SQLite. It runs as a background process and safely replicates changes incrementally to a S3 bucket. + To use this app, you need to enter your S3 credentials (access key ID and secret access key). + end: |- + Your litestream service has been deployed successfully! + + Important! Read this and take a screenshot so you can refer to it! + + By default, $$cap_appname-data volume, which is an empty directory, is mapped to your litestream data folder which is at /data inside the app. To change this: + Go to CapRover > Apps > Litestream > App Config tab and change $$cap_appname-data to + a) some other volume name such as "cap_appname-myappvolume" if you want litestream to access a sqlite database in this volume + b) "/some/existing/path/on/host" if you want litestream to access a database on a specific path on the host. + Don't change the "/data" part of the mapping as the "/data" is the directory inside the litestream container that is used to look for databases. + + The $$cap_appname-config volume stores the config file used by litestream. It can be modified, even after creation of the app but the container needs to be restartet in order to apply the new settings. + displayName: Litestream + isOfficial: true + description: Streaming replication for SQLite + documentation: https://github.com/benbjohnson/litestream diff --git a/public/v4/logos/litestream.png b/public/v4/logos/litestream.png new file mode 100644 index 0000000000000000000000000000000000000000..a83527ea6ef4830af2c9ac2600ec47df43c63292 GIT binary patch literal 4577 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