56 lines
1.7 KiB
TypeScript
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,
|
|
});
|