This commit is contained in:
2026-03-07 11:51:17 +01:00
parent a67242b4c0
commit 5ddfa09ae8
+38 -11
View File
@@ -1,35 +1,62 @@
BACKUP_BASE ?= /srv/backup
BACKUP_KEEP_DAYS ?= 7
DATABASE_BACKUP_BASE ?= $(BACKUP_BASE)/database
REPOSITORY_BACKUP_BASE ?= $(BACKUP_BASE)/repositories
REDMINE_STACK ?= /srv/stacks/redmine
WIKI_STACK ?= /srv/stacks/wiki
CATALOG_STACK ?= /srv/stacks/teletype-games
GITEA_SERVER ?= https://git.teletype.hu
GITEA_API ?= $(GITEA_SERVER)/api/v1/repos/search?limit=10000&private=true
db_redmine: db_redmine:
echo "==> Dump Redmine database" echo "==> Dump Redmine database"
cd /srv/stacks/redmine && docker compose exec database sh /db_backup/mariadb_backup.sh cd $(REDMINE_STACK) && docker compose exec database sh /db_backup/mariadb_backup.sh
db_wiki: db_wiki:
echo "==> Dump Wiki database" echo "==> Dump Wiki database"
cd /srv/stacks/wiki && docker compose exec wiki_db sh /db_backup/pg_backup.sh cd $(WIKI_STACK) && docker compose exec wiki_db sh /db_backup/pg_backup.sh
db_catalog: db_catalog:
echo "==> Dump Catalog database" echo "==> Dump Catalog database"
cd /srv/stacks/teletype-games && docker compose exec mysql sh /db_backup/mysql_backup.sh cd $(CATALOG_STACK) && docker compose exec mysql sh /db_backup/mysql_backup.sh
db_cleanup:
echo "==> Cleanup database dumps older than $(BACKUP_KEEP_DAYS) days"
@prefixes=$$(find $(DATABASE_BACKUP_BASE) -maxdepth 1 -type f -name "*.sql" \
| xargs -I{} basename {} \
| sed 's/-[0-9].*$$//' \
| sort -u); \
for prefix in $$prefixes; do \
total=$$(find $(DATABASE_BACKUP_BASE) -maxdepth 1 -type f -name "$$prefix-*.sql" | wc -l); \
old=$$(find $(DATABASE_BACKUP_BASE) -maxdepth 1 -type f -name "$$prefix-*.sql" -mtime +$(BACKUP_KEEP_DAYS) | wc -l); \
keep=$$((total - old)); \
if [ "$$keep" -ge 1 ]; then \
echo "===> Cleaning $$prefix dumps ($$old old, $$keep remaining)"; \
find $(DATABASE_BACKUP_BASE) -maxdepth 1 -type f -name "$$prefix-*.sql" -mtime +$(BACKUP_KEEP_DAYS) -delete; \
else \
echo "===> Skipping $$prefix (would leave no backups)"; \
fi; \
done
repos: repos:
echo "==> Get GIT repositories" echo "==> Get GIT repositories"
@BASE="/srv/backup/repositories/"; \ @mkdir -p "$(REPOSITORY_BACKUP_BASE)"; \
SRC="https://git.teletype.hu"; \ curl -s -H "Authorization: token $(GITEA_TOKEN)" "$(GITEA_API)" \
@TOKEN=$$GITEA_TOKEN; \
mkdir -p $$BASE; \
curl -s -H "Authorization: token $$TOKEN" "$$SRC/api/v1/repos/search?limit=10000&private=true" \
| jq -r '.data[] | "\(.clone_url) \(.full_name)"' \ | jq -r '.data[] | "\(.clone_url) \(.full_name)"' \
| while read repo fullname; do \ | while read repo fullname; do \
repo=$$(echo $$repo | sed 's|^http://|https://|'); \ repo=$$(echo $$repo | sed 's|^http://|https://|'); \
name=$$(basename $$fullname); \ name=$$(basename $$fullname); \
dir="$$BASE/$$name"; \ dir="$(REPOSITORY_BACKUP_BASE)/$$name"; \
echo "===> Get $$repo name=$$name"; \ echo "===> Get $$repo name=$$name"; \
if [ -d "$$dir/.git" ]; then \ if [ -d "$$dir/.git" ]; then \
git -C "$$dir" fetch --all --prune; \ git -C "$$dir" fetch --all --prune; \
git -C "$$dir" pull; \ git -C "$$dir" pull; \
else \ else \
git clone "$$repo" "$$dir"; \ git clone "$$repo" "$$dir"; \
fi; \ fi; \
done done
backup: db_redmine db_wiki db_catalog repos backup: db_redmine db_wiki db_catalog repos db_cleanup