chore: updated backup
e412c815
4 file(s) · +11 −3
| 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 |
| 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 | |
|
| 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}') |
|
| 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} |
|