目录
收起
历程
0 环境
1 安装 Hugo
2 同步到 Github
3 服务器安装配置 Caddy
避坑
感谢
引子
前几天在网上冲浪的时候恰好点进了一个博客 Wyane’s Blog ,被这个主题所吸引,立即萌生了使用这个主题的想法。阿里云选购了一台最便宜的七十多一年(新用户优惠)的云服务器和一个最便宜的域名,开始了博客迁移之路。原先的博客使用的是 Hexo,搭建在 Github Page 上边,访问速度不理想也是一个很重要的原因。
历程
0 环境
- 本地主机:macOS 10.15
- SSH 工具:FinalShell
- Github 账号
- 一台服务器:CentOS
1 安装 Hugo
在 macOS 上使用 brew 进行安装软件时,首先会进行对已有软件的检查更新。由于众所周知的原因,速度普遍偏低,这一步需要好几分钟以至于很长一段时间,需要耐心等待,也可以走更换 HomeBrew 源或者走代理。
安装好 Hugo 后在本地创建博客目录:
进入 yoursite 文件夹可以看到已经创建好了站点。其中 content 文件夹存放博文,layouts 文件夹存放博客模版,比如博客的页面结构。static 文件夹存放前端文件和以后显示在博客中的图片,themes 存放主题文件,安装的主题都会存放在该文件夹中。config.toml 是博客的配置文件。
创建一个页面:
该命令会在 content/posts 中生成一个 md 文件,使用 markdown 语法写博文。博客的 about.md 文件应该放置于 content 文件夹下。
配置文件 config,toml :
大致配置好后在本地查看显示效果:
浏览器访问 localhost:1313
执行命令后同时会在 yoursite 目录下创建 public 文件夹,里面是当前网站静态内容。
2 同步到 Github
首先到 github 创建一个 public 类型的仓库, 私有仓库无法自动同步到服务器。接下来需要把 yoursite/public 目录推送到这个仓库中。只需要 public 文件夹内的内容。
如果你在创建的时候自动初始化了 README.md 文件,就不用再在本地创建 README,md 文件,但是需要先 git pull 同步到本地再执行 git push。
进入你的仓库,上方菜单栏点击 Settings,左侧 Options 选择 Webhooks,选择 Add webhook。Content type 选择 application/json,设置密码,假装为 password,选择 Enable SSL verification,Just the push event,点击 Add webhook 进行保存。在为仓库添加 webhook 后,可以很方便地使用 caddy 自动同步这个仓库的更新内容到服务器。
3 服务器安装配置 Caddy
caddy 是一个轻量级的 web 服务端,可以提供 http 服务。功能不如 Apache/Nginx 强大但是可以自动从 GitHub 上拉取更新到本地,并且能自动申请 ssl 证书,避免访问时的不安全网站提醒。
安装:
由于众所周知的原因,这一步的时间可能会比较长。personal 参数表示安装的是免费的个人版本而非收费的企业版本,http.git 是 caddy 扩展。
安装好后需要为 caddy 创建一个独立的用户和用户组:
创建必要目录并为 caddy 用户赋予相关目录权限:
安装systemd服务配置文件:
修改 caddy.service 内容:
因为开启 caddy 后网站一直无法访问,使用命令查看日志:
发现报错 Unknown lvalue ‘xxxxxx’ in section ‘Service’,于是找到这几行进行删除。原因参见 Unknown lvalue ‘ReadWritePaths’ in section ‘Service’
修改 Caddyfile 文件:
写入:
第一行为你申请的域名。 root 参数表示要请求分发的路径,yoursite 里面的文件就是你本地 hugo 网站内自动生成的 public 文件夹内的文件,也就是同步到 GitHub 上的静态网页文件。index 指定了访问的入口。log,error 参数指定了 caddy 运行日志和错误日志的保存路径,需要提前给 caddy 用户进行赋权,否则会启动失败。 tls 为自动申请 ssl 证书所需要的邮箱,切记要你当前服务器能访问的邮箱。比如我用的阿里云服务器,一开始写上了 gmail 邮箱,因为众所周知的原因是访问不了的,caddy 申请多次后就被拒绝,启动失败,一小时内无法再次申请。换成 qq 邮箱一小时后重新启动 caddy 自动申请证书,启动成功。gzip 表示开启压缩加速访问。
下面的 git 配置是使用 webhook 自动同步仓库到本地。git 后面接仓库地址。path 为拉取仓库后要保存的地址,即在服务器上的网站目录。hook 最后填写的是当初在 github 仓库中设置 webhook 时的密码,假装是 password。
配置完成后保存退出,启动 caddy:
至此就可以使用域名访问博客了。
避坑
- 切记邮箱要能够访问。国内的服务器就用国内的邮箱。
- systemctl status caddy 会显示最近的几条日志,如果提示认证失败,极有可能是邮箱问题,换一个邮箱试试
- caddy 启动问题最好的解决办法还是查看日志:journalctl -u caddy
- 服务器记得放行 80 和 443 端口。http 请求走 80 端口,https 请求走 443 端口
感谢
Allin’s Blog:
Wyane’s Blog:
Leave It 主题的作者 Mogeko 的博客: