chore: 砍COS改造(deploy.yml改artifact传递+gitea-backup可移植部署包+改造步骤文档)
This commit is contained in:
1 parent
a74b3c7127
commit
2388694e8a
8 files changed
+729
-147
No files matched your search
@@ -0,0 +1,157 @@
|
||||
# =============================================================================
|
||||
# Gitea 可移植部署包 —— 把所有「博客相关服务」打包成 docker-compose
|
||||
#
|
||||
# 目标:任何一台机器上,只要:
|
||||
# 1. git clone 本仓库(含 gitea-backup/ 目录)
|
||||
# 2. 准备 data/ 数据卷(迁移时从旧机器打包过来)
|
||||
# 3. 复制 .env.example 为 .env 并填好
|
||||
# 4. docker compose up -d
|
||||
# 就能拉起整套环境。
|
||||
#
|
||||
# 包含的服务:
|
||||
# - gitea 代码托管(境外已停用 GitHub Actions,构建全走这里)
|
||||
# - runner Gitea Actions 的执行器(act_runner,跑博客构建/部署)
|
||||
# - upyun-sync 又拍云同步(原 1Panel 计划任务,容器化后不再依赖面板)
|
||||
#
|
||||
# write-server(写作后台)源码仍在仓库根 write-server/,这里用相对路径引用,
|
||||
# 不搬源码。如需一起管理,取消下面 write-server 段的注释。
|
||||
# =============================================================================
|
||||
|
||||
name: gitea-backup
|
||||
|
||||
services:
|
||||
# ---------------------------------------------------------------------------
|
||||
# Gitea —— 代码托管 + CI 调度中心
|
||||
# 数据:SQLite 单文件(/data/gitea/gitea.db)+ app.ini,全部在挂载卷里
|
||||
# 迁移:把旧机器 /opt/gitea/data 整个 rsync 到本机 ./data/gitea 即可
|
||||
# ---------------------------------------------------------------------------
|
||||
gitea:
|
||||
image: gitea/gitea:1.28.0-rootless
|
||||
container_name: gitea
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- TZ=Asia/Shanghai
|
||||
# 数据库用内置 SQLite,无需额外容器
|
||||
- GITEA__database__DB_TYPE=sqlite3
|
||||
# 域名与基础 URL(必须与你备案域名一致)
|
||||
- GITEA__server__DOMAIN=${GITEA_DOMAIN}
|
||||
- GITEA__server__ROOT_URL=${GITEA_ROOT_URL}
|
||||
- GITEA__server__SSH_DOMAIN=${GITEA_SSH_DOMAIN}
|
||||
- GITEA__server__SSH_PORT=${GITEA_SSH_PORT}
|
||||
# 关闭注册,只有你一个人用
|
||||
- GITEA__service__DISABLE_REGISTRATION=true
|
||||
ports:
|
||||
- "${GITEA_HTTP_PORT}:3000"
|
||||
- "${GITEA_SSH_PORT}:2222"
|
||||
volumes:
|
||||
- ./data/gitea:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3000/api/v1/version"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
networks:
|
||||
- gitea-net
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# act_runner —— Gitea Actions 执行器(跑博客的构建 + 部署流水线)
|
||||
# 首次启动后需到 Gitea 后台「站点管理 → Actions → Runners」拿注册 token,
|
||||
# 然后 exec 进容器执行一次注册(详见 README「首次初始化」)
|
||||
# ---------------------------------------------------------------------------
|
||||
runner:
|
||||
image: gitea/act_runner:0.2.11
|
||||
container_name: gitea-runner
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- GITEA_INSTANCE_URL=${GITEA_ROOT_URL}
|
||||
# 注册 token:首次跑前手动填进 .env(见 README)
|
||||
- GITEA_RUNNER_REGISTRATION_TOKEN=${RUNNER_REGISTRATION_TOKEN}
|
||||
volumes:
|
||||
- ./data/runner:/data
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
depends_on:
|
||||
gitea:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- gitea-net
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# upyun-sync —— 又拍云同步(原 1Panel 计划任务「又拍云同步(国内中转)」)
|
||||
# 容器化后:不再依赖 1Panel,随 compose 一起迁移。
|
||||
# 工作目录 ./data/upyun-sync 里放 sync.sh / upx / cos_sign.py 等。
|
||||
# 注意:此服务用 host 网络(要访问宿主机已配好的证书/代理时更省事)。
|
||||
# ---------------------------------------------------------------------------
|
||||
upyun-sync:
|
||||
image: alpine:3.20
|
||||
container_name: upyun-sync
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
# 又拍云凭据(从 .env 注入,容器内脚本读取)
|
||||
- UPYUN_SERVICE=${UPYUN_BUCKET}
|
||||
- UPYUN_OPERATOR=${UPYUN_OPERATOR}
|
||||
- UPYUN_PASSWORD=${UPYUN_PASSWORD}
|
||||
volumes:
|
||||
- ./data/upyun-sync:/opt/upyun-sync
|
||||
entrypoint: ["/bin/sh", "-c"]
|
||||
command:
|
||||
- |
|
||||
apk add --no-cache curl bash python3 py3-pip tar zstd openssl >/dev/null 2>&1 || true
|
||||
# 引导 upx(若 data 里没有)
|
||||
if [ ! -x /opt/upyun-sync/upx ]; then
|
||||
echo "引导 upx..."
|
||||
cd /tmp && curl -fsSL -o upx.tgz \
|
||||
"https://collection.b0.upaiyun.com/softwares/upx/upx_0.4.9_linux_amd64.tar.gz" \
|
||||
&& tar -xzf upx.tgz upx && mv upx /opt/upyun-sync/upx && chmod 755 /opt/upyun-sync/upx || \
|
||||
curl -fsSL -o upx.tgz \
|
||||
"https://github.com/upyun/upx/releases/download/v0.4.9/upx_0.4.9_linux_amd64.tar.gz" \
|
||||
&& tar -xzf upx.tgz upx && mv upx /opt/upyun-sync/upx && chmod 755 /opt/upyun-sync/upx
|
||||
fi
|
||||
# 每分钟跑一次 sync.sh(等价原 1Panel 的 * * * * * 计划任务)
|
||||
while true; do
|
||||
if [ -x /opt/upyun-sync/sync.sh ]; then
|
||||
bash /opt/upyun-sync/sync.sh || echo "[$(date -Is)] sync.sh 退出码 $?"
|
||||
else
|
||||
echo "[$(date -Is)] 缺少 sync.sh,跳过"
|
||||
fi
|
||||
sleep 60
|
||||
done
|
||||
networks:
|
||||
- gitea-net
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# write-server(可选,默认注释)—— 写作后台
|
||||
# 源码在仓库根 write-server/,这里用相对路径引用。
|
||||
# 若要把写作后台也纳入本部署包,取消下面整段注释,
|
||||
# 并确保 write-server/ 目录与 gitea-backup/ 同级。
|
||||
# ---------------------------------------------------------------------------
|
||||
# write-server:
|
||||
# build:
|
||||
# context: ../write-server
|
||||
# dockerfile: Dockerfile
|
||||
# container_name: write-server
|
||||
# restart: unless-stopped
|
||||
# ports:
|
||||
# - "8016:8016"
|
||||
# volumes:
|
||||
# - ../..:/blog # 博客根目录(与 write-server 原 compose 一致)
|
||||
# - ./data/write-server/recycle:/app/recycle
|
||||
# - ./data/write-server/logs:/app/logs
|
||||
# - ./data/write-server/backups:/app/backups
|
||||
# environment:
|
||||
# - NODE_ENV=production
|
||||
# - PORT=8016
|
||||
# - BLOG_ROOT=/blog
|
||||
# - TZ=Asia/Shanghai
|
||||
# networks:
|
||||
# - gitea-net
|
||||
|
||||
networks:
|
||||
gitea-net:
|
||||
driver: bridge
|
||||
Reference in new issue
Block a user