第一步查看同步的项目,/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-worker1. [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]] 同步任务(全部配置完整)
表格
关键补充:间隔不同,调度优先级不同
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
三、风险提醒
concurrent 不要直接开到 6:6 路 rsync 同时拉取会打满外网带宽、磁盘 IO,甚至被清华镜像站限流封禁;
ubuntu-cdimage 全量镜像上百 GB,同步极耗流量,本身周期设为 7 天,不建议频繁同步;
修改
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"
}
}
]
}