$_ 运维 0x4E // 运维部署

用 Docker Compose 一键部署 Typecho 与自动备份方案

F face 171 字 · 约 1 分钟 0 条评论 运维部署

博客这种小服务,最怕的不是流量大,而是搬家与数据丢失。用 Docker Compose 把 Typecho 和数据库固定下来,再配一个定时备份,一劳永逸。

#基础编排

yaml
services:
  typecho:
    image: joyqi/typecho:nightly-php8.3
    restart: always
    ports:
      - "8080:80"
    volumes:
      - ./usr:/app/usr
    depends_on:
      - db
  db:
    image: mariadb:11
    restart: always
    environment:
      MARIADB_ROOT_PASSWORD: change-me
      MARIADB_DATABASE: typecho
    volumes:
      - ./db:/var/lib/mysql

#定时备份

数据库用 mysqldump,附件目录直接打 tar 包:

bash
#!/usr/bin/env bash
set -euo pipefail
STAMP=$(date +%F-%H%M)
DEST=/backups/${STAMP}
mkdir -p "${DEST}"

docker compose exec -T db sh -c   'exec mariadb-dump -uroot -p"${MARIADB_ROOT_PASSWORD}" typecho'   > "${DEST}/typecho.sql"

tar -czf "${DEST}/usr.tgz" ./usr

# 只保留最近 14 份
ls -1dt /backups/*/ | tail -n +15 | xargs rm -rf

crontab 里加一行,每天凌晨 3 点执行:

text
0 3 * * * cd /srv/blog && ./backup.sh >> /var/log/blog-backup.log 2>&1

#常见问题

现象 原因 处理
数据库连接失败 容器未就绪 加 healthcheck 与 depends_on 条件
上传图片 403 目录权限 chown www-data usr/uploads
备份包为空 dump 密码未转义 用环境变量传递密码

坚持「配置即文件」的原则,搬家时 git clone + docker compose up -d 两步就能恢复。

本文链接:/post/docker-compose-deploy-guide/ · 转载请注明出处 · 原文由 Typecho 驱动

//评论 0

还没有评论,来说两句吧~

$ 发表评论 visitor@docker-compose-deploy-guide

// 相关阅读