1、docker-compose.yml 配置文件
docker-compose.yml
services:  memos:    image: neosmemo/memos:stable    container_name: memos    restart: unless-stopped    ports:      - "127.0.0.1:5230:5230"    volumes:      - ./.memos:/var/opt/memos
  backup:    image: alpine:latest    restart: always    depends_on:      - memos    volumes:      - ./:/app    command: >      /bin/sh -c "      apk add --no-cache git;      echo '当前目录内容:';      ls -la /app;      echo '设置执行权限...';      chmod +x /app/backup.sh;      echo '验证文件权限:';      ls -la /app/backup.sh;      echo '立即执行备份脚本...';      /app/backup.sh;      echo '设置定时任务...';      echo '*/5 * * * * /bin/sh /app/backup.sh > /proc/1/fd/1 2>&1' | crontab -;      crond -f      "    environment:      - GITHUB_TOKEN=github_pat_xxx      - GITHUB_USER=zouzonghao      - WORK_DIR=/app  # 不用改      - REMOTE_REPO=https://github.com/zouzonghao/memos.git #仓库地址      - GIT_BRANCH=main #分支名      - GIT_USERNAME=AutoBackup      - GIT_EMAIL=github-actions[bot]@users.noreply.github.com    logging: # 关键添加:限制日志大小      driver: json-file      options:        max-size: "1m"  # 每个日志文件最大5MB        max-file: "3"    # 最多保留3个日志文件2、backup.sh 备份脚本
backup.sh
#!/bin/sh
log() {    printf "[$(date '+%Y-%m-%d %H:%M:%S')] $*\n"}
debug_log() {    printf "[DEBUG][$(date '+%Y-%m-%d %H:%M:%S')] $*\n"}
die() {    log "ERROR: $*" >&2    exit 1}
# 检查必要环境变量[ -z "$WORK_DIR" ] && die "未设置 WORK_DIR 环境变量"[ -z "$REMOTE_REPO" ] && die "未设置 REMOTE_REPO 环境变量"[ -z "$GIT_BRANCH" ] && GIT_BRANCH="main"[ -z "$GIT_USERNAME" ] && GIT_USERNAME="AutoBackup"[ -z "$GIT_EMAIL" ] && GIT_EMAIL="github-actions[bot]@users.noreply.github.com"
# 确保工作目录存在[ -d "$WORK_DIR" ] || die "工作目录 $WORK_DIR 不存在"
# 配置 Git 用户信息if [ ! -f "/root/.gitconfig" ]; then    cat > /root/.gitconfig << EOF[user]    email = $GIT_EMAIL    name = $GIT_USERNAME[credential]    helper = store[safe]    directory = $WORK_DIR[pull]    rebase = falseEOF    log "初始化 Git 配置文件: /root/.gitconfig"fi
# 进入工作目录cd "$WORK_DIR" || die "无法进入 $WORK_DIR 目录"
# 检查是否需要初始化 Git 仓库if [ ! -d ".git" ]; then    log "初始化 Git 仓库..."    git init --quiet || die "Git 初始化失败"    [ -f ".gitignore" ] || echo -e "*.tmp\n*.log\n.env*\n*.swp" > .gitignore    git add .gitignore >/dev/null 2>&1    git commit -m "初始化仓库" >/dev/null 2>&1fi
# 设置远程仓库CURRENT_URL=$(git config --get remote.origin.url 2>/dev/null)
if [ -z "$CURRENT_URL" ]; then    git remote add origin "$REMOTE_REPO"    log "设置远程仓库: $REMOTE_REPO"elif [ "$CURRENT_URL" != "$REMOTE_REPO" ]; then    git remote set-url origin "$REMOTE_REPO"    log "更新远程仓库URL: $CURRENT_URL → $REMOTE_REPO"fi
# 检查远程仓库连接性check_remote() {    debug_log "正在检查远程连接: $REMOTE_REPO"    GIT_CURL_VERBOSE=1 GIT_TRACE=1 git ls-remote origin 2> remote-check.log
    if [ $? -ne 0 ]; then        log "⚠️ 远程连接测试失败,详见日志:"        cat remote-check.log        return 1    fi    return 0}
# 配置访问凭据if [[ -n "$GITHUB_USER" && -n "$GITHUB_TOKEN" ]]; then    CREDENTIAL_URL="https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com"
    # 获取当前凭证    CURRENT_CRED=$(cat /root/.git-credentials 2>/dev/null | head -1)
    if [ "$CURRENT_CRED" != "$CREDENTIAL_URL" ]; then        echo "$CREDENTIAL_URL" > /root/.git-credentials        log "更新 GitHub 凭据"        debug_log "使用凭据: ${CREDENTIAL_URL//$GITHUB_TOKEN/*****}"    fielse    log "警告:未设置 GITHUB_USER 或 GITHUB_TOKEN 环境变量"fi
# 添加所有变更git add . >/dev/null 2>&1
# 检查文件变化if git diff --cached --quiet; then    log "没有检测到文件变化"    exit 0fi
log "检测到文件变化 (变更数: $(git diff --cached --name-only | wc -l))"
# 创建自动备份提交commit_msg="AutoBackup $(date '+%Y-%m-%d %H:%M:%S')"git commit --quiet -m "$commit_msg" >/dev/null || die "提交失败"log "创建本地提交: $(git rev-parse --short HEAD)"
# 检查远程仓库可用性if git push --force origin HEAD:$GIT_BRANCH; then    log "✅ 备份成功"else    log "❌ 推送失败"    die "推送失败,请检查日志"fi1、Caddyfile 配置文件
Caddyfile
your.domain.com {
    # 反向代理到本地服务    reverse_proxy http://localhost:5230
    # 关闭 QUIC / HTTP/3 的标准方法(适用于 Caddy < v2.5)    tls {        protocols tls1.2 tls1.3    }
    # 禁用 Alt-Svc 头部(防止浏览器尝试升级到 HTTP/3 )    header {      -Alt-Svc    }
    # 压缩支持    encode {      zstd      gzip      minimum_length 1024    }
    # 日志配置    log {        output file /var/log/caddy/memos.log {            roll_size 1mb            roll_keep 5        }    }}