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