first commit
This commit is contained in:
commit
1e3c6fcf4c
4
rsync-ignore.txt
Normal file
4
rsync-ignore.txt
Normal file
@ -0,0 +1,4 @@
|
||||
**-root/_data/code-server
|
||||
**-root/_data/downloads
|
||||
**-root/_data/.*
|
||||
node_modules
|
||||
53
scripts/backup.ts
Normal file
53
scripts/backup.ts
Normal file
@ -0,0 +1,53 @@
|
||||
import datasquirel from "@moduletrace/datasquirel";
|
||||
import { execSync, 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/${process.env.CODERANK_HOST_DOMAIN}`;
|
||||
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,
|
||||
},
|
||||
],
|
||||
type: "file",
|
||||
folder: DSQL_FOLDER,
|
||||
update: true,
|
||||
});
|
||||
|
||||
datasquirel.utils.debugLog({
|
||||
log: `Media Uploaded Successfully!`,
|
||||
addTime: true,
|
||||
});
|
||||
31
scripts/restore.ts
Normal file
31
scripts/restore.ts
Normal file
@ -0,0 +1,31 @@
|
||||
import datasquirel from "@moduletrace/datasquirel";
|
||||
import { execSync, 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/${process.env.CODERANK_HOST_DOMAIN}`;
|
||||
const DSQL_FILE_NAME = `${process.env.CODERANK_HOST_DOMAIN}.tar.xz`;
|
||||
|
||||
const execOpts: ExecSyncOptions = {
|
||||
stdio: ["inherit", "inherit", "ignore"],
|
||||
};
|
||||
|
||||
const dsqlFile = await datasquirel.api.media.get({
|
||||
folder: DSQL_FOLDER,
|
||||
mediaName: DSQL_FILE_NAME,
|
||||
});
|
||||
|
||||
datasquirel.utils.debugLog({
|
||||
log: dsqlFile,
|
||||
addTime: true,
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user