From 24816341db852b252636334351c7816f0ae9e2d0 Mon Sep 17 00:00:00 2001 From: Omar Shaarawi <16183117+omarshaarawi@users.noreply.github.com> Date: Fri, 29 May 2026 19:01:14 -0500 Subject: [PATCH] Add Litestream->R2 replication + start.sh + Dockerfile for AWS Fargate (#1) --- Dockerfile | 10 +++++++++- litestream.yml | 13 +++++++++++++ scripts/start.sh | 9 +++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 litestream.yml create mode 100755 scripts/start.sh diff --git a/Dockerfile b/Dockerfile index f8c4398f..287ec527 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,6 +40,8 @@ COPY ./app/views ./app/views RUN echo "gem 'shakapacker'" > Gemfile && ./bin/shakapacker +FROM litestream/litestream:0.5.11 AS litestream + FROM ruby:4.0.1-alpine AS app ENV RAILS_ENV=production @@ -95,5 +97,11 @@ ENV HOME=/home/docuseal ENV WORKDIR=/data/docuseal ENV VIPS_MAX_COORD=17000 +# Litestream: restore-on-boot + continuous replication of the SQLite db to R2. +COPY --from=litestream /usr/local/bin/litestream /usr/local/bin/litestream +COPY litestream.yml /etc/litestream.yml +COPY scripts/start.sh /usr/local/bin/start.sh +RUN chmod +x /usr/local/bin/start.sh + EXPOSE 3000 -CMD ["/app/bin/bundle", "exec", "puma", "-C", "/app/config/puma.rb", "--dir", "/app"] +CMD ["/usr/local/bin/start.sh"] diff --git a/litestream.yml b/litestream.yml new file mode 100644 index 00000000..28b0d616 --- /dev/null +++ b/litestream.yml @@ -0,0 +1,13 @@ +# Litestream: replicate docuseal's SQLite db to R2 (same creds/bucket as attachments). +dbs: + - path: /data/docuseal/db.sqlite3 + replicas: + - type: s3 + bucket: ${S3_ATTACHMENTS_BUCKET} + path: litestream/docuseal + endpoint: ${S3_ENDPOINT} + region: auto + access-key-id: ${AWS_ACCESS_KEY_ID} + secret-access-key: ${AWS_SECRET_ACCESS_KEY} + sync-interval: 60s + retention: 168h diff --git a/scripts/start.sh b/scripts/start.sh new file mode 100755 index 00000000..0f923757 --- /dev/null +++ b/scripts/start.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -e +DB=/data/docuseal/db.sqlite3 +mkdir -p /data/docuseal +if [ ! -f "$DB" ]; then + echo "[start.sh] DB missing — restoring from R2 via litestream..." + litestream restore -if-replica-exists -config /etc/litestream.yml "$DB" || echo "[start.sh] WARN: restore failed; starting empty." +fi +exec litestream replicate -config /etc/litestream.yml -exec "/app/bin/bundle exec puma -C /app/config/puma.rb --dir /app"