第一步查看同步的项目,/usr/local/tunasync/conf/worker.conf

cat /usr/local/tunasync/conf/worker.conf
[global]
name = "local-worker"
mirror_dir = "/home/mirror/mirrors"
working_dir = "/home/tunasync-worker"
concurrent = 2
log_path = "/usr/local/tunasync/log/worker.log"
script_base = "/etc/tunasync/scripts"

[manager]
api_base = "http://127.0.0.1:14242"
token = "Sync@2026Tuna"

[[mirrors]]
name = "ubuntu"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/ubuntu/"
interval = 21600
use_ipv6 = false

[[mirrors]]
name = "ubuntu-cdimage"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/"
interval = 604800
use_ipv6 = false

[[mirrors]]
name = "rockylinux"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/rockylinux/"
interval = 43200
use_ipv6 = false

[[mirrors]]
name = "alpine"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/alpine/"
interval = 21600
use_ipv6 = false

[[mirrors]]
name = "archlinux"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/archlinux/"
interval = 14400
use_ipv6 = false

[[mirrors]]
name = "fedora"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/fedora/"
interval = 28800
use_ipv6 = false

第二步创建开机启动,同步

sudo tee /etc/systemd/system/tunasync-worker.service <<'EOF'
[Unit]
Description=Tunasync同步客户端Worker
After=network.target tunasync-manager.service

[Service]
ExecStart=/usr/local/tunasync/tunasync worker -c /usr/local/tunasync/conf/worker.conf
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF
创建开启启动文件,

创建开机启动

sudo systemctl daemon-reload
shitou@shitou:~$ sudo systemctl enable tunasync-worker
Created symlink /etc/systemd/system/multi-user.target.wants/tunasync-worker.service → /etc/systemd/system/tunasync-worker.service.
sudo systemctl start tunasync-worker这个是立即启动,

日常管理命令

# 查看同步运行日志、状态
sudo systemctl status tunasync-worker

# 修改worker.conf同步配置后,重启客户端加载新规则
sudo systemctl restart tunasync-worker

# 停止同步
sudo systemctl stop tunasync-worker

tunasync worker -c /usr/local/tunasync/conf/worker.conf 启动同步,
^C[26-07-09 02:19:26][NOTICE] Stopping all the jobs
[26-07-09 02:19:26][WARNIN] failed syncing archlinux: killed by manager
[26-07-09 02:19:26][WARNIN] failed syncing ubuntu: killed by manager
[26-07-09 02:19:26][NOTICE] All the jobs are stopped
shitou@shitou:~$ kill %1    杀后台程序,
-bash: kill: %1: no such job
shitou@shitou:~$ fg 1    提示没有
-bash: fg: 1: no such job
shitou@shitou:~$ grep name /usr/local/tunasync/conf/worker.conf  查看要同步的内容,
name = "local-worker"
name = "ubuntu"
name = "ubuntu-cdimage"
name = "rockylinux"
name = "alpine"
name = "archlinux"
name = "fedora"
shitou@shitou:~$ TUNASYNC_MANAGER_URL=http://127.0.0.1:14242 TUNASYNC_TOKEN=Sync@2026Tuna tunasynctl list  查看正在同步的镜像,
Usage Error: jobs command need at least one arguments or "--all" flag.
shitou@shitou:~$

cat: /etc/rc.local: No such file or directory
shitou@shitou:~$ sudo systemctl disable tunasync-worker
Removed "/etc/systemd/system/multi-user.target.wants/tunasync-worker.service".
shitou@shitou:~$ sudo systemctl stop tunasync-worker
shitou@shitou:~$ sudo rm /etc/systemd/system/tunasync-worker.service
shitou@shitou:~$ sudo systemctl daemon-reload
shitou@shitou:~$
先取消 worker 开机自启
bash
运行
sudo systemctl disable tunasync-worker
执行提示 Removed symlink ... 就代表开机自启已关闭。
二、配套管理操作(按需执行)
1. 立刻停止当前正在运行的同步进程
bash
运行
sudo systemctl stop tunasync-worker

1. [global] 全局段(并发限制根源)

toml

concurrent = 2

含义:同一时间最多只能有 2 个镜像同步任务同时运行

你一共 6 个镜像任务,剩下 4 个会排队等待,这就是你只看到 ubuntu、archlinux 在同步的原因。

其余全局参数说明:

  • mirror_dir = "/home/mirror/mirrors":所有镜像文件本地存放目录,Nginx 网页读取的路径

  • working_dir:同步临时缓存目录

  • log_path:worker 同步日志文件路径

  • script_base:同步前后执行脚本目录(你没用到)

2. [manager] 调度中心对接

toml

api_base = "http://127.0.0.1:14242"
token = "Sync@2026Tuna"

worker 通过这个地址和密钥连接 manager,Web 管理面板、tunasynctl 命令都走这个接口。

3. 6 组 [[mirrors]] 同步任务(全部配置完整)

表格

任务名

同步间隔 interval

说明

ubuntu

21600 秒(6 小时)

Ubuntu 系统软件源,更新频繁

archlinux

14400 秒(4 小时)

Arch 滚动更新,同步最频繁

alpine

21600 秒(6 小时)

容器轻量系统源

rockylinux

43200 秒(12 小时)

服务器稳定系统,更新慢

fedora

28800 秒(8 小时)

Fedora 桌面发行版

ubuntu-cdimage

604800 秒(7 天)

Ubuntu 系统 ISO 镜像,体积巨大,一周同步一次

关键补充:间隔不同,调度优先级不同

archlinux 4 小时一轮,刷新最快,所以每次启动 worker 都会优先跑它;

ubuntu 6 小时,是第二优先级;

其余任务周期更长,再加上并发上限 2,长期处于排队状态。


二、两种解决方案

方案 1:提高并发数,同时多任务同步(推荐服务器带宽充足时)

编辑配置:

bash

运行

nano /usr/local/tunasync/conf/worker.conf

concurrent = 2 修改为 concurrent = 4(最多同时 4 个任务)

保存后重启 worker 生效:

bash

运行

tunasync worker -c /usr/local/tunasync/conf/worker.conf

方案 2:不修改并发,手动启动排队任务(临时一次性同步)

新开终端执行,强制启动其余镜像同步:

bash

运行

TUNASYNC_MANAGER_URL=http://127.0.0.1:14242 TUNASYNC_TOKEN=Sync@2026Tuna tunasynctl start rockylinux
TUNASYNC_MANAGER_URL=http://127.0.0.1:14242 TUNASYNC_TOKEN=Sync@2026Tuna tunasynctl start alpine
TUNASYNC_MANAGER_URL=http://127.0.0.1:14242 TUNASYNC_TOKEN=Sync@2026Tuna tunasynctl start fedora
TUNASYNC_MANAGER_URL=http://127.0.0.1:14242 TUNASYNC_TOKEN=Sync@2026Tuna tunasynctl start ubuntu-cdimage

三、风险提醒

  1. concurrent 不要直接开到 6:6 路 rsync 同时拉取会打满外网带宽、磁盘 IO,甚至被清华镜像站限流封禁;

  2. ubuntu-cdimage 全量镜像上百 GB,同步极耗流量,本身周期设为 7 天,不建议频繁同步;

  3. 修改 worker.conf必须重启 worker,新并发数值才会加载。

升级内网halo 博客

第一步先查看dockers ps 服务

第一步先查看dockers ps 服务
shitou@shitou:~/halo$ sudo docker ps
CONTAINER ID   IMAGE                                 COMMAND                  CREATED             STATUS                         PORTS                                                                                  NAMES
9483e460f5ee   goharbor/harbor-jobservice:v2.13.1    "/harbor/entrypoint.…"   22 minutes ago      Up 21 minutes (healthy)                                                                                               harbor-jobservice
05f7e491fa9a   goharbor/nginx-photon:v2.13.1         "nginx -g 'daemon of…"   22 minutes ago      Up 22 minutes (healthy)        0.0.0.0:80->8080/tcp, [::]:80->8080/tcp, 0.0.0.0:443->8443/tcp, [::]:443->8443/tcp     nginx
1328b0bfc7da   goharbor/harbor-core:v2.13.1          "/harbor/entrypoint.…"   22 minutes ago      Up 22 minutes (healthy)                                                                                               harbor-core
9d617f845f0a   goharbor/redis-photon:v2.13.1         "redis-server /etc/r…"   23 minutes ago      Up 22 minutes (healthy)                                                                                               redis
956739e4d273   goharbor/registry-photon:v2.13.1      "/home/harbor/entryp…"   23 minutes ago      Up 22 minutes (healthy)                                                                                               registry
e921ebecf0b4   goharbor/harbor-registryctl:v2.13.1   "/home/harbor/start.…"   26 minutes ago      Up 22 minutes (healthy)                                                                                               registryctl
27bc6b414995   goharbor/harbor-db:v2.13.1            "/docker-entrypoint.…"   26 minutes ago      Up 22 minutes (healthy)                                                                                               harbor-db
c5a7daabab63   goharbor/harbor-portal:v2.13.1        "nginx -g 'daemon of…"   26 minutes ago      Up 22 minutes (healthy)                                                                                               harbor-portal
7b54e955058d   goharbor/harbor-log:v2.13.1           "/bin/sh -c /usr/loc…"   27 minutes ago      Up 22 minutes (healthy)        127.0.0.1:1514->10514/tcp                                                              harbor-log
1757a37a900c   9d3465f8477c                          "kube-scheduler --au…"   About an hour ago   Up About an hour                                                                                                      k8s_kube-scheduler_kube-scheduler-shitou_kube-system_ea7e2c2f6ce136f7dde14a98151b7569_22
f289090f5c25   73deb9a3f702                          "etcd --advertise-cl…"   About an hour ago   Up About an hour                                                                                                      k8s_etcd_etcd-shitou_kube-system_280877a325ad5a107bb783c8cc2ea369_22
7b8c83cd95bc   10541d8af03f                          "kube-controller-man…"   About an hour ago   Up About an hour                                                                                                      k8s_kube-controller-manager_kube-controller-manager-shitou_kube-system_77dca142417e607ce34b54b67fb461e9_22
ea794a02ff78   registry.k8s.io/pause:3.10            "/pause"                 About an hour ago   Up About an hour                                                                                                      k8s_POD_kube-scheduler-shitou_kube-system_ea7e2c2f6ce136f7dde14a98151b7569_22
9b5444d04c79   registry.k8s.io/pause:3.10            "/pause"                 About an hour ago   Up About an hour                                                                                                      k8s_POD_kube-controller-manager-shitou_kube-system_77dca142417e607ce34b54b67fb461e9_22
ffb98733021c   registry.k8s.io/pause:3.10            "/pause"                 About an hour ago   Up About an hour                                                                                                      k8s_POD_etcd-shitou_kube-system_280877a325ad5a107bb783c8cc2ea369_22
7ac74c3dfa15   registry.k8s.io/pause:3.10            "/pause"                 About an hour ago   Up About an hour                                                                                                      k8s_POD_kube-apiserver-shitou_kube-system_b867a7bbae39e8d0a8443c7248d11092_22
b901b4b4e993   wiznote/wizserver                     "bash /wiz/app/entry…"   18 months ago       Up About an hour               0.0.0.0:9269->9269/udp, [::]:9269->9269/udp, 0.0.0.0:8989->80/tcp, [::]:8989->80/tcp   crazy_lumiere
64f4bbc41364   blinkospace/blinko:latest             "docker-entrypoint.s…"   18 months ago       Up About an hour (unhealthy)   0.0.0.0:2600->1111/tcp, [::]:2600->1111/tcp                                            blinko-website
bfabae2cca70   postgres:latest                       "docker-entrypoint.s…"   18 months ago       Up About an hour (healthy)     0.0.0.0:5435->5432/tcp, [::]:5435->5432/tcp                                            blinko-postgres


shitou@shitou:~/halo$ sudo docker inspect harbor-jobservice | grep Mounts -A 20
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/var/harbor_data/job_logs",

                
                "Destination": "/var/log/jobs",
                "Mode": "rw,z",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/home/shitou/harbor/common/config/jobservice/config.yml",
                "Destination": "/etc/jobservice/config.yml",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/home/shitou/harbor/common/config/shared/trust-certificates",
                "Destination": "/harbor_cust_cert",

查看内网halo 配置内容

hitou@shitou:~/halo$ cat docker-compose.yaml
version: "3"

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.21.6
    restart: always
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo2:/root/.halo2
    ports:
      - "8090:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    environment:
      # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
      - JVM_OPTS=-Xmx500m -Xmsm500m
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=shitou521
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/

  halodb:
    image: mysql:8.1.0
    restart: always
    networks:
      halo_network:
    command:
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    ports:
      - "3306:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=shitou521
      - MYSQL_DATABASE=halo

networks:
  halo_network:

服务器配置内容

sudo docker images | grep halo-pro查看镜像版本,
[sudo] password for shitou:
Sorry, try again.
[sudo] password for shitou:
halohub/halo-pro                        2.25.0               3a870009d896   3 weeks ago     666MB
halohub/halo-pro                        2.24.2               e155a90a850e   2 months ago    606MB
halohub/halo-pro                        2.22.0               5d22aa3f7e4d   6 months ago    497MB
halohub/halo-pro                        2.21.6               f8c98ad5c79c   11 months ago   452MB
halohub/halo-pro                        2.20.21              d8e5e89602d3   13 months ago   464MB
shitou@iZ2ze6kzllv871qq54rx3lZ:~$

sudo docker save -o halo-pro-2.25.0.tar halohub/halo-pro:2.25.0
压小体积传输更快,sudo gzip halo-pro-2.25.0.tar
# 生成 halo-pro-2.25.0.tar.gz 
我没压缩,
ls -lh halo-pro-2.25.0.tar*查看大小,

shitou@iZ2ze6kzllv871qq54rx3lZ:~$ sudo docker ps | grep halo
3762a187dee5   halohub/halo-pro:2.25.0               "sh -c 'exec java ${…"   44 minutes ago   Up 44 minutes (healthy)   0.0.0.0:8090->8090/tcp, [::]:8090->8090/tcp              halo-pro
shitou@iZ2ze6kzllv871qq54rx3lZ:~$ sudo docker inspect halo-poro | grep Mounts -A10
Error: No such object: halo-poro
shitou@iZ2ze6kzllv871qq54rx3lZ:~$ sudo docker inspect halo-por | grep Mounts -A10
Error: No such object: halo-por
shitou@iZ2ze6kzllv871qq54rx3lZ:~$ sudo docker inspect halo-pro | grep Mounts -A10
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/opt/1panel/apps/halo/halo/data",
                "Destination": "/root/.halo2",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        "Config": {
shitou@iZ2ze6kzllv871qq54rx3lZ:~$ sudo find / -name "docker-compose.yaml" | xargs grep -l halo
find: ‘/proc/603525’: No such file or directory

云服务器上的配置文件halo的

docker-compose.yml
networks:
  1panel-network:
    external: true
services:
  halo:
    image: halohub/halo-pro:2.25.0
    container_name: halo-pro
    restart: always
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://mysql:3306/halo_85n664?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      - --spring.r2dbc.username=root
      - --spring.r2dbc.password=Shitou521!
      - --spring.sql.init.platform=mysql
    environment:
      - JVM_OPTS=-Xms224m -Xmx384m
    volumes:
      - ./data:/root/.halo2
    ports:
      - "8090:8090"
    networks:
      - 1panel-network
    deploy:
      resources:
        limits:
          cpus: 0.5
          memory: 448M
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s

还有数据库,的配置文件

halo  mysql  openresty
shitou@iZ2ze6kzllv871qq54rx3lZ:/opt/1panel/apps$ cd mysql/
shitou@iZ2ze6kzllv871qq54rx3lZ:/opt/1panel/apps/mysql$ ls
mysql
shitou@iZ2ze6kzllv871qq54rx3lZ:/opt/1panel/apps/mysql$ cd mysql/
shitou@iZ2ze6kzllv871qq54rx3lZ:/opt/1panel/apps/mysql/mysql$ ls
conf  data  data.yml  docker-compose.yml  log  scripts
shitou@iZ2ze6kzllv871qq54rx3lZ:/opt/1panel/apps/mysql/mysql$ cat docker-compose.yml
networks:
  1panel-network:
    external: true
services:
  mysql:
    image: mysql:8.4.5
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: Shitou521!
      TZ: Asia/Shanghai
    command:
      - --mysql-native-password=on
    volumes:
      - ./data:/var/lib/mysql
      - ./conf/my.cnf:/etc/my.cnf
      - ./log:/var/log/mysql
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    networks:
      - 1panel-network
    ports:
      - "3306:3306"
    deploy:
      resources:
        limits:
          cpus: 1.0
          memory: 512M

传输完成过后导入镜像

 sudo scp -C -P 2287 shitou@39.106.35.236:/home/shitou/halo-pro-2.25.0.tar /home/shitou/halo
传输,
sudo docker load -i halo-pro-2.25.0.tar

然后修改配置文件,

version: "3"

services:
  halo:
    image: halohub/halo-pro:2.25.0
    container_name: halo-pro
    restart: always
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo2:/root/.halo2
    ports:
      - "8090:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    environment:
      - JVM_OPTS=-Xms512m -Xmx1024m
    command:
      - '--spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai'
      - --spring.r2dbc.username=root
      - --spring.r2dbc.password=Shitou521!
      - --spring.sql.init.platform=mysql
      - --halo.external-url=http://192.168.31.19:8090/
    deploy:
      resources:
        limits:
          cpus: 1.5
          memory: 1280M

  halodb:
    image: mysql:8.1.0
    container_name: halo-mysql
    restart: always
    networks:
      halo_network:
    command:
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    ports:
      - "3306:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      - MYSQL_ROOT_PASSWORD=Shitou521!
      - MYSQL_DATABASE=halo
      - TZ=Asia/Shanghai
    deploy:
      resources:
        limits:
          cpus: 0.5
          memory: 768M

networks:
  halo_network:

前后对比配置文件解析

📄 整体结构
yaml

version: "3"          # Docker Compose 文件格式版本,3.x 支持 Swarm 模式
services:             # 定义要启动的容器服务列表
  halo:               # 第一个服务:Halo 博客应用
  halodb:             # 第二个服务:MySQL 数据库
networks:             # 定义自定义网络,用于容器间通信
  halo_network:       # 创建一个名为 halo_network 的网络

1️⃣ halo 服务(博客应用)
yaml

halo:
  image: halohub/halo-pro:2.25.0          # 使用 Halo Pro 官方镜像,版本 2.25.0
  container_name: halo-pro                # 容器名称,便于 docker ps 识别
  restart: always                         # 容器退出时总是自动重启
  depends_on:                             # 依赖关系:确保 halodb 服务先启动
    halodb:
      condition: service_healthy          # 等待 halodb 的健康检查通过后再启动本容器
  networks:
    - halo_network:                       # 连接到自定义网络,便于通过服务名 halodb 访问数据库
  volumes:                                # 宿主机与容器间的目录映射(数据持久化)
    - ./halo2:/root/.halo2                # 将宿主机的 ./halo2 目录挂载到容器内的 /root/.halo2(Halo 工作目录)
  ports:
    - "8090:8090"                         # 端口映射:宿主机 8090 → 容器 8090(Halo 默认端口)
  healthcheck:                            # 健康检查,用于判断容器是否正常运行
    test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health"]
    interval: 30s                         # 每 30 秒检查一次
    timeout: 5s                           # 每次检查超时时间 5 秒
    retries: 5                            # 连续失败 5 次认为容器不健康
    start_period: 30s                     # 容器启动后等待 30 秒再开始检查
  environment:                            # 环境变量(列表格式)
    - JVM_OPTS=-Xms512m -Xmx1024m         # 设置 Java 虚拟机初始/最大堆内存
  command:                                # 覆盖容器默认启动命令,传入 Spring Boot 配置参数
    - '--spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo?...'  # 数据库连接 URL(使用 r2dbc 响应式驱动)
    - --spring.r2dbc.username=root        # 数据库用户名
    - --spring.r2dbc.password=Shitou521!  # 数据库密码(明文,注意安全性)
    - --spring.sql.init.platform=mysql    # 指定 SQL 初始化平台为 MySQL
    - --halo.external-url=http://192.168.31.19:8090/   # Halo 外部访问地址(用于生成链接)
  deploy:                                 # Swarm 模式资源限制(本地 docker-compose up 下不生效)
    resources:
      limits:
        cpus: 1.5                         # CPU 上限 1.5 核
        memory: 1280M                     # 内存上限 1280 MB

2️⃣ halodb 服务(MySQL 数据库)
yaml

halodb:
  image: mysql:8.1.0                      # MySQL 官方镜像版本 8.1.0
  container_name: halo-mysql
  restart: always
  networks:
    - halo_network:                       # 同一网络,服务名 halodb 可被 halo 服务解析
  command:                                # MySQL 启动参数
    - --default-authentication-plugin=caching_sha2_password  # 默认认证插件(兼容新版客户端)
    - --character-set-server=utf8mb4      # 字符集(支持 emoji)
    - --collation-server=utf8mb4_general_ci  # 排序规则
    - --explicit_defaults_for_timestamp=true   # 处理 TIMESTAMP 默认值
  volumes:
    - ./mysql:/var/lib/mysql              # 数据库数据持久化
    - ./mysqlBackup:/data/mysqlBackup     # 备份目录挂载(可用于备份脚本)
  ports:
    - "3306:3306"                         # 宿主机 3306 → 容器 3306(方便外部连接)
  healthcheck:                            # 健康检查:使用 mysqladmin ping
    test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
    interval: 3s
    retries: 5
    start_period: 30s
  environment:                            # ❗ 修改点:统一使用列表格式
    - MYSQL_ROOT_PASSWORD=Shitou521!      # root 密码(与 halo 配置保持一致)
    - MYSQL_DATABASE=halo                 # 自动创建的数据库名
    - TZ=Asia/Shanghai                    # 时区设置
  deploy:                                 # Swarm 资源限制(本地无效)
    resources:
      limits:
        cpus: 0.5
        memory: 768M

然后后台运行重新启用博客

sudo docker compose up -d
WARN[0000] /home/shitou/halo/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 20/24
 ✔ halodb Pulled                                                                                      430.3s
   ✔ 8e0176adc18c Pull complete                                                                        23.4s
   ✔ 14e977b0f4b2 Pull complete                                                                        28.4s
   ✔ a7b58dd6f78b Pull complete                                                                        28.7s
   ✔ fba70cc872a5 Pull complete                                                                        30.3s
   ✔ 5db2cc6eab8f Pull complete                                                                        30.5s
   ✔ 081f41f573ba Pull complete                                                                       152.1s
   ✔ 86bf2dc4ded9 Pull complete                                                                       176.2s
   ✔ 47f08b0e916e Pull complete                                                                       177.0s
   ✔ 850e29ae8eeb Pull complete                                                                       405.8s
   ✔ 13517fe0d921 Pull complete                                                                       406.0s
 ⠴ halo [⠀⣿⣿⠀⣿⣿⣿⣿⣿⣿⣿⠀] Pulling                                                                        628.3s
   ⠇ 6f5c5aa4e145 Downloading     15.7MB                                                              597.6s
   ✔ 1c24335ddd46 Download complete                                                                   164.5s
   ✔ 993d8fd138c9 Download complete                                                                   171.2s
   ⠇ d8d245b274e0 Downloading    15.12MB                                                              597.6s
   ✔ a1ec5cc057cf Download complete                                                                   374.1s
   ✔ 74e368405305 Download complete                                                                   378.0s
   ✔ c495cc8f95e2 Download complete                                                                   389.3s
   ✔ 21e50554dd28 Download complete                                                                   412.4s
   ✔ 4f4fb700ef54 Download complete                                                                   416.8s
   ✔ 103bc2992500 Download complete                                                                   577.8s
   ✔ 909764622dd3 Download complete                                                                   580.9s
   ⠇ 847f4dd0e14c Downloading    23.79MB                                                              597.6s

为知笔记卡顿修复

定位为知笔记配置文件所在位置

shitou@shitou:~$ docker inspect crazy_lumiere | grep -A 10 "Mounts"定位
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/etc/localtime",
                "Destination": "/etc/localtime",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
shitou@shitou:~$ sudo docker inspect crazy_lumiere | grep -A 10 "Mounts"
[sudo] password for shitou:
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/etc/localtime",
                "Destination": "/etc/localtime",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",

这条命令,直接列出宿主机路径 → 容器内路径,一眼找到笔记持久目录:
shitou@shitou:~$ sudo docker inspect crazy_lumiere --format='{{range .Mounts}}{{printf "%-40s -> %s\n" .Source .Destination}}{{end}}'
/etc/localtime                           -> /etc/localtime
/home/shitou/docker/wizdata              -> /home/shitou/wiz/storage

shitou@shitou:~$ sudo cp -r /home/shitou/docker/wizdata /home/shitou/docker/wizdata_bak_$(date +%Y%m%d)
备份全部笔记(替换命令里的 /xxx/wizdata 为上面查到的 Source 路径)
bash
运行
sudo cp -r /xxx/wizdata /opt/wiz_back_$(date +%Y%m%d)
数据库碎片清理(解决 CPU 爆高)
bash
运行
docker exec -it crazy_lumiere bash
sqlite3 /wiz/storage/wiz.db "VACUUM;PRAGMA journal_mode=WAL;"
rm -rf /wiz/cache/* /wiz/tmp/*
exit

在云服务器上操作

 sudo docker save -o halo-pro-2.25.0.tar halohub/halo-pro:2.25.0


The authenticity of host '[39.106.35.236]:2287 ([39.106.35.236]:2287)' can't be established.
ED25519 key fingerprint is SHA256:H+8wrNKOCqRbvma0Bb1PQvTrrpVCzFVd8B/o+wwwyrM.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[39.106.35.236]:2287' (ED25519) to the list of known hosts.
root@39.106.35.236's password:
mysql_8.4.5.tar                                                             70%  536MB   2.1MB/s   01:44 ETA[sudo] password for shitou:
mysql_8.4.5.tar                                                            100%  757MB   1.4MB/s   09:15
shitou@shitou:~/halo$ ls
docker-compose.yaml  halo2  halo2_bak  halo-pro-2.25.0.tar  mysql  mysqlBackup  mysql_bak  start.sh
shitou@shitou:~/halo$ cd ..
shitou@shitou:~$ ls
 adminhome                                        hub
 agent-linux-amd64-v3.6.8                         installer
 agent-linux-amd64-v3.6.8.tar.gz                  jx
 alpine_2026-07-09_02_32.log.fail                 kickstart.sh
 alpine_2026-07-09_02_35.log.fail                 kubeadm-config.yaml
 alpine_2026-07-09_02_39.log.fail                 latest
 alpine_2026-07-09_02_51.log.fail                 mysql_8.1.0.tar
 alpine_2026-07-09_02_55.log.fail                 mysql_8.4.5.tar
 alpine_2026-07-09_03_11.log.fail                 Netdata
 alpine_2026-07-09_03_13.log.fail                 nohup.out
 amprobe                                          pypi_2026-07-08_02_18.log.fail
 archlinux_2026-07-09_01_39.log.fail              pypi_2026-07-08_02_37.log.fail
 archlinux_2026-07-09_02_15.log.fail              pypi_2026-07-08_05_54.log.fail
 archlinux_2026-07-09_02_31.log.fail              registry
 archlinux_2026-07-09_02_35.log.fail              registry.sh
 archlinux_2026-07-09_02_39.log.fail              rockylinux_2026-07-09_02_32.log.fail
 archlinux_2026-07-09_02_51.log.fail              shitou
 archlinux_2026-07-09_02_52.log.fail              tunasync-src
 archlinux_2026-07-09_02_55.log.fail              ub
 archlinux_2026-07-09_03_11.log.fail              ubuntu
 archlinux_2026-07-09_03_13.log.fail              ubuntu_2026-07-08_02_18.log.fail
 bk                                               ubuntu_2026-07-08_02_37.log.fail
 cri-dockerd_0.3.19.3-0.ubuntu-bionic_amd64.deb   ubuntu_2026-07-08_03_04.log.fail
 data                                             ubuntu_2026-07-08_05_54.log.fail
 docker                                           ubuntu_2026-07-09_01_39.log.fail
 fedora_2026-07-09_02_32.log.fail                 ubuntu_2026-07-09_02_13.log.fail
 fedora_2026-07-09_02_35.log.fail                 ubuntu_2026-07-09_02_15.log.fail
 go                                               ubuntu_2026-07-09_02_32.log.fail
 halo                                             ubuntu_2026-07-09_02_52.log.fail
 halohub.2.21.6.tar                               ubuntu-cdimage_2026-07-09_02_32.log.fail
 harbor                                           ubuntu.sources.list
 harbor.bf                                        usr.sbin.libvirtd
 harbor_data                                      wgcloud-v3.6.8
 harbor-offline-installer-v2.13.1.tgz            'wgcloud-v3.6.8(1).tar.gz'
shitou@shitou:~$
shitou@shitou:~$ mv  mysql_8.4.5.tar /home/shitou/ha
halo/                                 harbor.bf/
halohub.2.21.6.tar                    harbor_data/
harbor/                               harbor-offline-installer-v2.13.1.tgz
shitou@shitou:~$ mv  mysql_8.4.5.tar /home/shitou/halo
shitou@shitou:~$ cd halo/
shitou@shitou:~/halo$ ls
docker-compose.yaml  halo2_bak            mysql            mysqlBackup  start.sh
halo2                halo-pro-2.25.0.tar  mysql_8.4.5.tar  mysql_bak

然后导入
shitou@shitou:~/halo$ sudo docker load -i mysql_8.4.5.tar
[sudo] password for shitou:

备份文件,重新执行容器,限制

 docker buildx imagetools inspect docker.io/wiznote/wizserver:latest
Name:      docker.io/wiznote/wizserver:latest
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest:    sha256:f30fba6818bfead0b781430dcdc3558066cd8a8813ebaa4a2058c3b9d70db2a1

Manifests:
  Name:      docker.io/wiznote/wizserver:latest@sha256:6f68b50e683230b9f6b756e9283043d57231468f4cc4d97550da9d03d9ffeb0f
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/amd64

  Name:      docker.io/wiznote/wizserver:latest@sha256:e8671482136a4576c184e110844891350ec5ea796abffc486ee045a11c4c0ad7
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/arm64

  Name:      docker.io/wiznote/wizserver:latest@sha256:e68d862e4cf46292a43d6e567f1b6b859adc71844b4620ccc0c9c440b8ce1ae5
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/arm/v7
///


ubuntu@10-7-127-87:~$ docker manifest inspect docker.io/wiznote/wizserver:latest
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 1586,
         "digest": "sha256:6f68b50e683230b9f6b756e9283043d57231468f4cc4d97550da9d03d9ffeb0f",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 1583,
         "digest": "sha256:e8671482136a4576c184e110844891350ec5ea796abffc486ee045a11c4c0ad7",
         "platform": {
            "architecture": "arm64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 1583,
         "digest": "sha256:e68d862e4cf46292a43d6e567f1b6b859adc71844b4620ccc0c9c440b8ce1ae5",
         "platform": {
            "architecture": "arm",
            "os": "linux",
            "variant": "v7"
         }
      }
   ]
}