mirror of
https://github.com/Sea-Haven-Industries/forgejo.git
synced 2026-09-30 10:03:11 +00:00
Add nightly S3 backups with Glacier lifecycle
Some checks are pending
Deploy / deploy (push) Waiting to run
Some checks are pending
Deploy / deploy (push) Waiting to run
S3 bucket for Forgejo dumps (Standard 30d → Glacier, expire 365d). Cron runs forgejo dump at 5 AM UTC and uploads to S3.
This commit is contained in:
parent
0a4119880e
commit
2f344ac7c0
1 changed files with 34 additions and 1 deletions
|
|
@ -1,6 +1,7 @@
|
|||
import * as cdk from "aws-cdk-lib";
|
||||
import * as ec2 from "aws-cdk-lib/aws-ec2";
|
||||
import * as iam from "aws-cdk-lib/aws-iam";
|
||||
import * as s3 from "aws-cdk-lib/aws-s3";
|
||||
import * as elbv2 from "aws-cdk-lib/aws-elasticloadbalancingv2";
|
||||
import * as elbv2_targets from "aws-cdk-lib/aws-elasticloadbalancingv2-targets";
|
||||
import * as route53 from "aws-cdk-lib/aws-route53";
|
||||
|
|
@ -51,13 +52,29 @@ export class ForgejoStack extends cdk.Stack {
|
|||
],
|
||||
});
|
||||
|
||||
const backupBucket = new s3.Bucket(this, "BackupBucket", {
|
||||
bucketName: "forgejo-backups-328440206208",
|
||||
encryption: s3.BucketEncryption.S3_MANAGED,
|
||||
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
|
||||
lifecycleRules: [{
|
||||
transitions: [
|
||||
{ storageClass: s3.StorageClass.GLACIER, transitionAfter: cdk.Duration.days(30) },
|
||||
],
|
||||
expiration: cdk.Duration.days(365),
|
||||
}],
|
||||
removalPolicy: cdk.RemovalPolicy.RETAIN,
|
||||
});
|
||||
|
||||
backupBucket.grantReadWrite(role);
|
||||
|
||||
const userData = ec2.UserData.forLinux();
|
||||
userData.addCommands(
|
||||
"set -euxo pipefail",
|
||||
"",
|
||||
`FORGEJO_VERSION="${FORGEJO_VERSION}"`,
|
||||
"",
|
||||
"dnf install -y git",
|
||||
"dnf install -y git cronie",
|
||||
"systemctl enable --now crond",
|
||||
"",
|
||||
"useradd --system --shell /bin/bash --home-dir /home/forgejo --create-home forgejo",
|
||||
"",
|
||||
|
|
@ -128,6 +145,22 @@ export class ForgejoStack extends cdk.Stack {
|
|||
"",
|
||||
"systemctl daemon-reload",
|
||||
"systemctl enable --now forgejo",
|
||||
"",
|
||||
"cat > /usr/local/bin/forgejo-backup.sh << 'BAKEOF'",
|
||||
"#!/bin/bash",
|
||||
"set -euo pipefail",
|
||||
"TIMESTAMP=$(date +%Y-%m-%d)",
|
||||
"DUMP_DIR=$(mktemp -d)",
|
||||
"chown forgejo:forgejo \"$DUMP_DIR\"",
|
||||
"cd \"$DUMP_DIR\"",
|
||||
"sudo -u forgejo /usr/local/bin/forgejo dump --config /etc/forgejo/app.ini --type tar.gz --file \"$DUMP_DIR/forgejo-${TIMESTAMP}.tar.gz\"",
|
||||
"aws s3 cp \"$DUMP_DIR/forgejo-${TIMESTAMP}.tar.gz\" s3://forgejo-backups-328440206208/${TIMESTAMP}/forgejo-${TIMESTAMP}.tar.gz",
|
||||
"rm -rf \"$DUMP_DIR\"",
|
||||
"BAKEOF",
|
||||
"chmod +x /usr/local/bin/forgejo-backup.sh",
|
||||
"",
|
||||
"echo '0 5 * * * root /usr/local/bin/forgejo-backup.sh >> /var/log/forgejo-backup.log 2>&1' > /etc/cron.d/forgejo-backup",
|
||||
"chmod 644 /etc/cron.d/forgejo-backup",
|
||||
);
|
||||
|
||||
const instance = new ec2.Instance(this, "Instance", {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue