refact
This commit is contained in:
@@ -1,28 +1,55 @@
|
|||||||
|
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; \
|
||||||
@@ -32,4 +59,4 @@ repos:
|
|||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
backup: db_redmine db_wiki db_catalog repos
|
backup: db_redmine db_wiki db_catalog repos db_cleanup
|
||||||
Reference in New Issue
Block a user