chore: updated backup e412c815
Steve · 2026-04-18 15:06 4 file(s) · +11 −3
apps/backup/.env.example +1 −0
10 10
# SIPP_VOLUME=sipp_sipp-data
11 11
# CELLAR_VOLUME=cellar_cellar-data
12 12
# POSTS_VOLUME=posts_posts-data
13 +
# FEEDS_VOLUME=feeds_feeds-data
13 14
14 15
# Optional: days to keep backups (default: 30)
15 16
# RETENTION_DAYS=30
apps/backup/README.md +4 −1
1 1
# Backup
2 2
3 -
Automated SQLite backups for Jotts, Sipp, Cellar, and Posts to Cloudflare R2. Runs every 6 hours via cron inside a Docker container and prunes backups older than 30 days.
3 +
Automated SQLite backups for Jotts, Sipp, Cellar, Posts, and Feeds to Cloudflare R2. Runs every 6 hours via cron inside a Docker container and prunes backups older than 30 days.
4 4
5 5
## Setup
6 6
45 45
SIPP_VOLUME=sipp_sipp-data
46 46
CELLAR_VOLUME=cellar_cellar-data
47 47
POSTS_VOLUME=posts_posts-data
48 +
FEEDS_VOLUME=feeds_feeds-data
48 49
```
49 50
50 51
Run `docker volume ls` to check the actual names on your host.
83 84
  -v sipp_sipp-data:/data/sipp:ro \
84 85
  -v cellar_cellar-data:/data/cellar:ro \
85 86
  -v posts_posts-data:/data/posts:ro \
87 +
  -v feeds_feeds-data:/data/feeds:ro \
86 88
  ghcr.io/stevedylandev/andromeda-backup:latest
87 89
```
88 90
151 153
| `SIPP_VOLUME` | `sipp_sipp-data` | Docker volume name for Sipp data |
152 154
| `CELLAR_VOLUME` | `cellar_cellar-data` | Docker volume name for Cellar data |
153 155
| `POSTS_VOLUME` | `posts_posts-data` | Docker volume name for Posts data |
156 +
| `FEEDS_VOLUME` | `feeds_feeds-data` | Docker volume name for Feeds data |
apps/backup/backup.sh +2 −2
5 5
BUCKET="${R2_BUCKET:-andromeda-backups}"
6 6
RETENTION_DAYS="${RETENTION_DAYS:-30}"
7 7
8 -
DBS="jotts:/data/jotts/jotts.sqlite sipp:/data/sipp/sipp.sqlite cellar:/data/cellar/cellar.sqlite posts:/data/posts/posts.sqlite"
8 +
DBS="jotts:/data/jotts/jotts.sqlite sipp:/data/sipp/sipp.sqlite cellar:/data/cellar/cellar.sqlite posts:/data/posts/posts.sqlite feeds:/data/feeds/feeds.sqlite"
9 9
10 10
for entry in $DBS; do
11 11
  name="${entry%%:*}"
28 28
29 29
# Prune old backups
30 30
cutoff=$(date -u -d "-${RETENTION_DAYS} days" +%Y-%m-%d 2>/dev/null || date -u -v-${RETENTION_DAYS}d +%Y-%m-%d)
31 -
for name in jotts sipp cellar posts; do
31 +
for name in jotts sipp cellar posts feeds; do
32 32
  aws s3 ls "s3://${BUCKET}/${name}/" --endpoint-url "${R2_ENDPOINT}" 2>/dev/null | while read -r line; do
33 33
    filedate=$(echo "$line" | awk '{print $1}')
34 34
    filename=$(echo "$line" | awk '{print $4}')
apps/backup/docker-compose.yml +4 −0
6 6
      - sipp-data:/data/sipp:ro
7 7
      - cellar-data:/data/cellar:ro
8 8
      - posts-data:/data/posts:ro
9 +
      - feeds-data:/data/feeds:ro
9 10
    env_file: .env
10 11
    restart: unless-stopped
11 12
22 23
  posts-data:
23 24
    external: true
24 25
    name: ${POSTS_VOLUME:-posts_posts-data}
26 +
  feeds-data:
27 +
    external: true
28 +
    name: ${FEEDS_VOLUME:-feeds_feeds-data}