47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import { execSync, type ExecSyncOptions } from "child_process";
|
|
import path from "path";
|
|
import s3UploadFile from "../utils/s3-upload";
|
|
|
|
const BACKUP_NAME = `.backup`;
|
|
const BACKUP_DIR = `/root/backups`;
|
|
const BACKUP_FILE_NAME = "backup.tar.xz";
|
|
const BACKUP_DIR_BACKUP = path.join(BACKUP_DIR, BACKUP_NAME);
|
|
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 R2_FOLDER = `archives/servers`;
|
|
const R2_FILE_NAME = `${process.env.CODERANK_HOST_DOMAIN}.tar.xz`;
|
|
const SERVER_DATA_DIR = `/root/.coderank`;
|
|
const BACKUP_DATA_DIR = path.join(BACKUP_DIR_BACKUP, ".coderank");
|
|
|
|
const execOpts: ExecSyncOptions = {
|
|
stdio: ["ignore", "ignore", "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);
|
|
|
|
let syncServerDataCmd = `rsync -avz --delete --exclude=".coderank/server" ${SERVER_DATA_DIR}/ ${BACKUP_DATA_DIR}/`;
|
|
execSync(syncServerDataCmd, execOpts);
|
|
|
|
execSync(`tar -cJvf ${BACKUP_FILE_TAR} ${BACKUP_NAME}`, {
|
|
cwd: BACKUP_DIR,
|
|
});
|
|
|
|
await s3UploadFile({
|
|
fileName: R2_FILE_NAME,
|
|
filePath: BACKUP_FILE_TAR,
|
|
folder: R2_FOLDER,
|
|
});
|
|
|
|
process.exit();
|