群晖Nas搭建Halo及站点迁移
前言
在21年开始创建博客,更新了一些技术文章,本来是打算记录一些自己学习到的技术知识,一为了自己总结沉淀,方便后续再用、二可以分享给其他人作为参考,由于之前注册的jinzhimu.com是使用的家里公司注册的, 后续公司更换主体,导致备案失效,博客一直处在无法访问状态,加之工作也忙,就一直没有去整理,现在裸辞在家,打算把博客重新捡起来,维护好
最近618购入了群晖NAS,也想着能否将博客部署在家里,节省云服务的资源
目标
博客搭建
域名解析+内网穿透
CDN对象存储设置
主题选择与配置
其他优化
1、博客搭建
1.1、nas上运行博客系统
1.1.1、搭建说明
halo博客系统是采用docker部署的系统,简单快捷,一行命令就可以部署好了,官方文档:https://docs.halo.run/,如果你对docker不是很了解,可以参考我之前的文章:
由于我是在nas上运行,并且需要连接mysql作为存储介质(关于存储介质可参考:https://docs.halo.run/getting-started/prepare),所以没有直接使用命令的方式,而是使用Docker Compose的方式
1.1.2、编写docker compose
在Nas上打开Container Manager套件,然后选择项目,点击新增,在弹窗输入项目名称,存储位置(提前在docker文件夹创建一个空文件夹),在来源选项中,选择创建 docker-compose.yml,将halo官网给出的代码复制进去,来源:https://docs.halo.run/getting-started/install/docker-compose
docker-compose代码(mysql版本):
version: "3"
services:
halo:
# halo的版本,选最新稳定版
image: halohub/halo:2.15
restart: on-failure:1
network_mode: "host"
ports:
# 端口映射,如果你本地8090被用了,可以修改前面的端口为其他,比如:8290:8090
- "8090:8090"
# 健康检测,默认即可
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
# 映射卷,重要,一定要映射,否则容器重启,部分配置会丢失,只需修改:前面的文件夹地址,改为你nas上真实存在的文件夹路径
volumes:
- /volume2/docker/halo2.15:/root/.halo2
command:
# 修改为自己已有的 MySQL 配置,提前创建好DB名称,可访问此DB名称的用户名和密码,不建议直接使用root账号
- --spring.r2dbc.url=r2dbc:pool:mysql://192.168.31.246:3306/halo_blog
- --spring.r2dbc.username=halo
- --spring.r2dbc.password=halo123456
- --spring.sql.init.platform=mysql
# 端口号 默认8090
- --server.port=8090
# 外部访问地址,请根据实际需要修改
- --halo.external-url=https://blog.xy0716.life
点击下一步,下一步,完成后自动启动
如果没有安装mysql,可以直接使用默认的h2数据库,将上面的command里面的代码删除掉
1.1.3、查看启动状态
打开容器选项,可看到刚运行的halo2项目名的容器,如果状态为绿色即运行成功
打开浏览器,访问http://nasip:8090,即可打开halo博客系统,首次进入需要进行初始化及设置账号密码
如果运行失败可到日志中查看情况,一般可能是mysql连接错误,在日志中点击导出,下载后查看更方便
1.2、博客迁移
如果你是新搭建博客,直接跳过此步骤
我之前的博客系统版本是1.5.x的,halo最新版是2.x,2.x和1.x不能通过升级直接使用,需要单独部署2.x,进行数据迁移,官方也支持从1.5/1.6迁移到2.x的功能,详细文档:https://docs.halo.run/getting-started/migrate-from-1.x
打开1.5版本的halo后台,在系统-小工具-博客备份,选择数据导出,
在右侧弹窗里点击备份,备份完成会有.json的文件生成,然后点击文件名称即可下载文件
打开2.x版本halo后台,后台地址为/console与1.x的/admin不一样,打开应用市场,在应用市场中搜索迁移助手进行安装
如果你之前有使用第三方云存储供应商进行图片存储,还需要安装S3插件,进行相应的云储存配置,下面第3章回讲到
安装成功后,还需在插件中进行启用
启用成功后,在左侧菜单最下方会有一个迁移功能出现,点击迁移功能,选择halo,点击下一步,上传刚才下载的json文件,在点下一步
如果你没有使用过云存储,只需选择本地存储,然后点击下一步,进行导入就ok了,导入完成后可去文章页面查看数据是否已全部导入成功
2、域名解析
2.1、域名解析配置
域名解析可以直接使用购买域名提供的解析,也可以使用其他云平台,这里我使用了目前比较主流的cloudflare,使用也比较简单,更安全可靠,而且免费
首先需要注册一个账号,选择应用程序服务,免费即可
添加网站域名,并选择free计划
在域名商处修改域名解析DNS服务,替换成从cloudflare复制两个DNS服务器地址
在cloudflare里面配置域名解析
2.2、内网穿透配置
由于我们nas在家里放着,属于内部网络,外界其他人是不能直接访问到我们家庭的网络设备的,所以才需要进行内网穿透,创建的内网穿透方式有两种
独立公网IP,可打电话给宽度运行商,申请独立公网IP(有点难度)
通过一台已有公网IP的服务器,结合内网穿透软件实现
我这里将第二种,所以这里仍然需要一台公网IP的服务器,我使用的内网穿透软件是frp: https://github.com/fatedier/frp
frp详细的安装及使用教程:https://gofrp.org/zh-cn/
2.2.1、服务端
frp分为服务端和客户端两个运行程序和配置,一个服务端可对应多个服务端提供内网穿透服务,在frp release 页面下载最新版本:https://github.com/fatedier/frp/releases,根据自己服务器系统进行下载,可以直接在服务器上使用wget进行下载,也可以下载到本地传上去
下载完成后进行解压,修改frps.toml,配置客户端监听端口:7000,HTTP代理端口:7888,WEB页面端口:7500 及用户名密码
bindPort = 7000
vhostHTTPPort = 7888
#客户端访问token
auth.token = "xxxx"
# 默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。
webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard 用户名密码,可选,默认为空
webServer.user = "admin"
webServer.password = "admin"
运行命令:
./frps -c ./frps.toml
运行成功可以使用http://服务器IP:7500 进行访问,注意云服务器安全组需要放开对应的监听端口
2.2.2、客户端
客户端运行在nas上,使用docker部署,在Container Manager套件里,打开注册表,搜索frpc,点击下载镜像,选择与服务端相同的版本镜像进行下载
在docker文件夹建立一个frp文件夹,并在其中创建frpc.toml文件,并配置好服务器的相关配置,可参考下方
serverAddr = "xxxx"
serverPort = 7700
auth.token = "xxxx"
[[proxies]]
name = "blog"
type = "http"
localIP= "192.168.31.246"
localPort = 8090
customDomains = ["blog.xy0716.life"]
启动frpc映像,并配置存储空间,将刚才配置的frpc.toml映射到容器/etc/frp/frpc.toml,启动容器即可完成配置
3、CDN对象存储配置
对象存储服务可将我们博客使用的图片存储在第三方上,之所以这么做,一是可以节省我们本地的磁盘空间,二是可以提高我们图片加载速度,三是这些图片在云存储上方便管理和迁移
本着能免费就不付费的原则,我这里使用的是又拍云提供的对象存储服务,又拍云推出了又拍云联盟服务,面向小型开发者,提供了每月10GB存储+15GB流量的免费额度,个人博客已经足够使用了,官方网站:https://www.upyun.com/league
前提条件:需要在使用的网站悬挂又拍云的存储标示(帮又拍云打个广告),每年都需要申请,申请下来是一个代金券,用于抵扣一年的费用
3.1、在又拍云创建存储空间
进入控制台,打开云存储页面,点击新建,然后在新建弹窗中,输入根据自己需要进行填写内容,并新建一个操作员,保存好用户名和密码
创建成功后,点击管理按钮,进入管理页面,可以绑定自己的加速域名
在HTTPS页面可以给加速域名添加HTTPS证书,这样网站会更安全
如果你还没有证书,可以SSL证书服务里免费获取一个
3.2、在halo后台接入又拍云
首先,需要在应用市场下载S3插件,并进行启用
然后在附件-存储策略 进行新增
在新增弹窗中,填写Bucket桶名称,即又拍云中创建的云存储服务名称,Endpoint配置按照下图所示填写
Access Key的信息可查看又拍云存储管理最下方:
绑定域名填写自己定义的域名,之后点击对象存储验证,观察配置是否正确
4、主题选择与配置
主题是一个博客的灵魂,尤其是对于一个没有太多前端经验的同学来说,一个现成的漂亮主题解决了太多太多的问题,这里真心的感谢那些开源免费主题的开放者们
4.2、主题安装
主题可以到应用市场下载,筛选免费,主题
可点击主题进行预览,根据自己喜爱进行安装,这里我安装的是hao,我觉得非常好用,功能也很强大,而且我名字里面也带一个hao
4.2、主题配置
有关hao的主题配置,可参考文档:https://www.yuque.com/liuzhihangs/halo-theme-hao,开发者已经出了很详细的配置了,我这里就不进行多写
5、其他优化
5.1、邮件通知
5.1.1、邮箱服务注册
如果博客有人评论可以进行通知提醒,官方提供通过邮件的形式进行通知,这里我通过自己的域名注册了一个邮件服务,方便提供邮件发送,我使用的是mailgun邮件服务商,原因还是免费(限定次数),官方网站:https://www.mailgun.com/
在官网进行注册账号,然后添加一个domain,输入自己的域名,这里建议是二级域名,比如我的 [email protected]
添加成功后,在Sending下面找到DNS设置,需要将这些DNS配置到cloudflare的域名解析上进行验证,验证成功后即可进行使用了
验证可能需要一些时间
5.1.2、博客接入邮箱
打开设置页面,切换到通知设置,启用邮件通知器,用户名密码需要导mailgun上进行新增,服务器端口号按照下面进行配置
5.2 站点统计
如何知道自己博客每日的访问量?哪些文章最受欢迎?用户群体是怎么样的?这些分析每个站长都会非常关心,不过,有成熟的第三方统计平台可以帮组我们完整这些事情,只需要一段代码就可以了,常用的统计平台有:百度站长统计、Google Analytics、51.LA
我这里使用的是百度统计,对国内友好
先在百度统计平台申请百度账号,官网:https://tongji.baidu.com/,如果你有百度网盘、百度贴吧账号是可以通用的,申请完成后进入使用设置页面-网站列表-新增网站
在新建弹窗中填写自己的网站信息,注意网站首页,填写完整的地址
创建完成后,在新页面点击复制按钮,复制统计代码
然后将统计代码粘贴到博客系统,设置-代码注入-全局head标签中,点击保存
博客系统保存好后,回到刚才站长统计的代码页面,点击下方的代码检测,可检测一下我们的代码是否嵌入完成,检测可能需要一些时间,如果没有检测成功,可稍后再试