# ============================================================ # Pangolin 备份系统环境变量 # 复制此文件为 deploy/secrets/backup.env 并填写真实值 # deploy/secrets/ 已在 .gitignore,不会提交到版本库 # ============================================================ # ────────────────────────────────────────────────────────── # S3 备份目标(独立身份账号,与生产 AWS 账号隔离) # 创建步骤见 docs/备份与灾备.md § 初始化 # ────────────────────────────────────────────────────────── BACKUP_S3_BUCKET=pangolin-backup-XXXXXX # 替换为实际 bucket 名 BACKUP_S3_PREFIX=ec2-ap-southeast-1 # 按服务器区分前缀 BACKUP_AWS_REGION=ap-southeast-1 # 备份专用 IAM 凭据(仅有 s3:PutObject 权限) BACKUP_AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE BACKUP_AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY # ────────────────────────────────────────────────────────── # age 加密密钥 # 生成方式: age-keygen 2>&1 | tee age-keypair.txt # 公钥放此处(明文 OK);私钥存离线,灾备演练时临时注入 # ────────────────────────────────────────────────────────── AGE_PUBLIC_KEY=age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # age 私钥(可选,DR 演练容器需要;不设则演练只做结构验证,不做解密恢复) # AGE_PRIVATE_KEY=AGE-SECRET-KEY-1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # ────────────────────────────────────────────────────────── # MySQL (jiu_mysql, marzban) # ────────────────────────────────────────────────────────── MYSQL_HOST=127.0.0.1 MYSQL_PORT=3306 MYSQL_USER=backup_user # 专用备份账号,权限见下方 MYSQL_PASSWORD=CHANGE_ME # 如果 MySQL 数据目录可以挂载到容器(xtrabackup 需要),设置此项 # Docker 内 MySQL: 通常 /var/lib/docker/volumes//_data # 宿主原生 MySQL: /var/lib/mysql # 留空则 xtrabackup 尝试从 MySQL 连接获取(需要 BACKUP_ADMIN 权限) MYSQL_DATADIR= # ────────────────────────────────────────────────────────── # PostgreSQL (blog, umami) # ────────────────────────────────────────────────────────── PG_HOST=127.0.0.1 PG_PORT=5432 PG_USER=postgres PG_PASSWORD=CHANGE_ME PG_DATABASES=blog,umami # 逗号分隔,按需填写 # ────────────────────────────────────────────────────────── # Marzban SQLite # ────────────────────────────────────────────────────────── MARZBAN_DB_PATH=/var/lib/marzban/db.sqlite3 # ────────────────────────────────────────────────────────── # 本地临时备份目录(容器内路径) # ────────────────────────────────────────────────────────── BACKUP_DIR=/backup # ────────────────────────────────────────────────────────── # 通知 Webhook(可选) # 支持格式:POST JSON {"level":"INFO|ERROR","msg":"..."} # 可对接 PushDeer / 企业微信 / Slack 等 # ────────────────────────────────────────────────────────── # NOTIFY_WEBHOOK_URL=https://api.pushdeer.com/message/push?pushkey=XXXXX # ────────────────────────────────────────────────────────── # MySQL 备份账号权限(在 MySQL 中执行) # CREATE USER 'backup_user'@'%' IDENTIFIED BY 'CHANGE_ME'; # GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT, CREATE TABLESPACE, # PROCESS, SUPER, CREATE, INSERT, SELECT, BACKUP_ADMIN ON *.* TO 'backup_user'@'%'; # FLUSH PRIVILEGES; # ──────────────────────────────────────────────────────────