coderank-server-data/scripts/backup.ts
2026-01-26 14:23:57 +01:00

56 lines
1.7 KiB
TypeScript

import datasquirel from "@moduletrace/datasquirel";
import { execSync, type ExecSyncOptions } from "child_process";
import path from "path";
const BACKUP_DIR = `/root/backups`;
const BACKUP_FILE_NAME = "backup.tar.xz";
const BACKUP_DIR_BACKUP = path.join(BACKUP_DIR, `.backup`);
const DOCKER_VOLUMES_DIR = "/var/lib/docker/volumes";
const DOCKER_VOLUMES_BACKUP_DIR = path.join(
BACKUP_DIR_BACKUP,
`docker`,
`volumes`,
);
const BACKUP_FILE_TAR = path.join(BACKUP_DIR, BACKUP_FILE_NAME);
const RSYNC_IGNORE_FILE = `/root/.coderank/server/rsync-ignore.txt`;
const DSQL_FOLDER = `/projects/coderank/archives/servers`;
const DSQL_FILE_NAME = `${process.env.CODERANK_HOST_DOMAIN}.tar.xz`;
const execOpts: ExecSyncOptions = {
stdio: ["inherit", "inherit", "ignore"],
};
execSync(`rm -rf ${path.join(BACKUP_DIR, BACKUP_FILE_NAME)}`, execOpts);
execSync(`mkdir -p ${DOCKER_VOLUMES_BACKUP_DIR}`, execOpts);
let syncDockerVolsCmd = `rsync -avz --delete --exclude-from="${RSYNC_IGNORE_FILE}"`;
syncDockerVolsCmd += ` ${DOCKER_VOLUMES_DIR}/ ${DOCKER_VOLUMES_BACKUP_DIR}/`;
execSync(syncDockerVolsCmd, execOpts);
execSync(`tar -czvf ${BACKUP_FILE_TAR} ${BACKUP_DIR_BACKUP}`, execOpts);
const file = Bun.file(BACKUP_FILE_TAR);
const buffer = await file.arrayBuffer();
const base64 = Buffer.from(buffer).toString("base64");
await datasquirel.api.media.add({
media: [
{
fileName: DSQL_FILE_NAME,
fileType: "tar.xz",
fileBase64: base64,
private: true,
privateFolder: true,
},
],
type: "file",
folder: DSQL_FOLDER,
update: true,
});
datasquirel.utils.debugLog({
log: `Media Uploaded Successfully!`,
addTime: true,
});