本文最后更新于 2024-07-03,文章内容可能已经过时。

大家好,这里是Cherry,喜爱折腾、捡垃圾、玩数码,热衷于分享NAS、docker玩耍经验~

前几天那啥,不是弄了一台阿里云99包年的2c2g小菜鸡嘛,然后顺势就给域名备了一个案。

本来打算是既然备案完成,就把现在放在软路由里的wordpress迁移到vps上,包升级,docker安装一气呵成,再装完wordpress后,突然看到群里小伙伴说wordpress太重量级,小菜鸡打开又卡,于是乎想了想,确实,要不重新整个博客?

但是想到新架构的博客要重新配置东西,还要迁移文章、迁移图片,好麻烦!!!!十万个不情愿,于是拖了两天,终于快到月底了,多拖一天,99元就要多哭泣一天,整呗!


是反代还是迁移,that is a question

其实在正式迁移之前,内心还是做过挣扎的,原因还是懒,既然99的小菜鸡内存不足,那我直接反代本地wp不就得了么,这样啥都不用动,一个nginx搞定一切。

具体思路是这样滴!是不是很妥帖,我连图床都不需要迁移!
image.png

但是吧,wordpress免费主题实在太难看了,而且统计流量还需要用umami,反代以后如果需要区分ip来源的设置又很麻烦,这相当于从一个坑跳到另外一个坑。

然后我在obsidian里搜索了一下推送博客的插件,发现halo、wordpress、hexo这些都有,那既然如此,一不做二不休,大不了到时候重新发一遍!

选择了很久后,最终定下了HALO作为新的博客架构。就决定是你了——halo!
image.png


新装一个halo,选一个好康的主题

新装一个halo特别简单,现在halo 2.X版本只需要通过docker即可安装,而且halo的版本还不是io.docker的,随便下载(至于mysql,你应该有吧?)

🔻将下面文件复制到docker-compose.yaml文件内保存,然后上传到阿里云vps内。

version: "3"  
  
services:  
  halo:  
    image: registry.fit2cloud.com/halo/halo:2.16  
    restart: on-failure:3  
    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  
    command:  
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo  
      - --spring.r2dbc.username=root  
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。  
      - --spring.r2dbc.password=123123123  
      - --spring.sql.init.platform=mysql  
      # 外部访问地址,请根据实际需要修改  
      - --halo.external-url=http://cgakki.top/  
  
  halodb:  
    image: mysql:8.1.0  
    restart: on-failure:3  
    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  
    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=123123123  
      - MYSQL_DATABASE=halo  
  
networks:  
  halo_network:

🔻登录阿里云vps,ssh界面输入以下指令(什么?没有docker,阿里云有教程可以安装)

cd /home/halo
docker compose up -d

主题我选了这个——Hao,虽然名字是好,但具体好不好也得用了才知道。切换以后嘻嘻品味了一下,感觉还蛮符合自己的需求的,一是好看,二是清晰,所以最后就决定是HAO的主题了。
image.png

主页效果,确实很好看有没有~~ 封面因为是一键导入的文章,还没来得及设置,需要手动一个个设置,这点很讨厌,还没找到解决方法!
image.png

值得一提的是,这个主题好多人在用哦~ 比如我们黑群晖的“官网” https://rrorg.cn/ ,用的就是这个主题。
image.png


关于一键导入这件事

使用了halo应用商城内的【站点迁移】这个应用,支持halo1.X、wp、huge、ghots、rss、atom feed的数据迁移。核心是域名不能变!!! 核心是域名不能变!!! 核心是域名不能变!!!
image.png

第一步我们需要从wordpress里将所有的数据通过xml的格式导出,选择【工具】-【导出】-【所有内容】
image.png

会形成这样一份xml文件,我们只要保存备用即可
image.png

第二步是把媒体资料都导出,因为wordpress是使用docker安装的,我们只需要将对应路径下的/wp-content/upload/ 这整个文件夹复制出来就可以了。
image.png

需要注意的是,如果是采用volume卷模式来绑定数据的,需要输入指令来获取volume的真实地址,之后继续操作即可。

docker volume ls #查看wp的实际卷名字

docker volume inspect wp_wordpress

比如图里就是wp的数据卷真实地址
image.png

第三步是在转移媒体文件,一般halo的本地数据文件路径在根目录的 /halo2下,我们需要新建一个halo2/attachments/upload路径,然后把wp的uploads下的文件全部拷贝到halo的halo2/attachments/upload下。

第四步修改halo配置文件。来到目录halo根目录halo2/下,我们需要新建一个application.yaml的文件,然后填入以下代码,完成以后重启halo即可。

halo:  
  attachment:  
    resource-mappings:  
      - pathPattern: /wp-content/uploads/**  
        locations:  
          - migrate-from-wp

🔻完成以后,可以在halo的附件里看到附件元数据了,可以看红框内的URL和之前wp是一致的,这样我们就不需要更改图片URL从而实现图床迁移。

最后一步导入数据。来到halo页面,选择【工具】-【迁移】,导入刚才从wp导出的xml文件导入。
image.png

会提示一共有多少数据和图片附件,我们只需要执行导入即可。
image.png

最后的最后, 我们在文章封面处需要设置路径,这一点只能手工操作,木得办法。
image.png