朋友还是发现了我的博客。。笑,看来我隐修失败了?那么给网站提提速度吧。
记录一下把博客从 GitHub 迁移到自己的服务器的过程。
其他可选方式还有,七牛云镜像存储(但这有个问题,后期不能添加评论系统(需要vps的数据库支持))
如果使用七牛云镜像,可以参考 这篇文章。
(我后期要在 vps 上做很多实验,给本站添加很多功能,所以不考虑 七牛云 了)
目标:
- 可以提交到服务器和github上 (访问我的 vps 要比 github 快多了)
- 多态终端(mac/pc)都可以提交 (在家 imac, 外出 mpb13.3)
备选方案
如果既要提交到 Github 上,也要提交到自己的 VPS 上(最红域名连接的是 VPS),这里有几个方案可选:
使用 Github 提供的 webhook.
- 优点: 本地每次提交到 Github 之后,VPS自动 pull 相关内容
- 缺点: 多态 mac/nodejs环境 间同步不方面,适合单个主机 nodejs 环境
所以远端 VPS 必须存储一个库,最好是裸库.
使用库自带的 Git hook,远端存储一个裸库
- 优点: 多个 mac/nodejs 环境也可以同步原始 markdown 资料(写作环境)
- 缺点: 裸库放在远端浪费上传流量(况且本地已经存在多个版本了,即已经有裸库了)
具体原因: 我的所有blog版本,外层又套了一层库,专门存储各个版本。(而这个库又被 onedrive 云存储)
网友的意见,比如: (图片来源: SegmentFault)
但是实际上,heox d
的时候就可以指定多个库的指定分支,而且不止git
这一种协议。
All generated files are saved in the public folder. You can copy them to wherever you like.
但是如果使用 FTP, SFTP 等,就要提供密码,具体操作参考,这个不考虑。
最终决定:
- 本地 NAS 存储所有博客版本(本地集成所有版本裸库) (已经 OK)
- VPS 保存一个 public 目录的裸库(但不要 –set-upstream; 直接在部署里配置位置即可)
- 在原本 push 到 Github 的基础上同时 push VPS 的 git 库
- 切换域名到 VPS
实际操作
下面的步骤,我是按顺序操作的。
服务器
VPS 没有安装服务器,如果要跑起来,必须要安装服务器才可以。
主要是安装 Nginx, 具体参考 Ubuntu 安装 Nginx
sudo apt-get install nginx
- 启动 ngix,
sudo /etc/init.d/nginx start
然后访问 VPS 的 IP试试: (本地用 wget 也可以测试 wget http://127.0.0.1
)
停止服务 sudo /etc/init.d/nginx stop
- 找到配置文件
/etc/nginx/sites-available/default
,根目录的 conf 不要动.
配置详情见下面:
1 | server |
建立一个页面
1 | echo "hello" > /home/git/hexo_public/index.html |
然后启动试试, sudo /etc/init.d/nginx start
,OK。
配置域名
配置 域名解析
- 删除原来项目中的 CNAME 配置
- 把原来的域名指向这里(域名解析处理好 IP 即可;端口由 Ngix 负责了)
域名解析系统可能还是会指向老的域名系统,可能需要等几分钟。
- 可以用 ping 测试你的域名是否已经指向了你的 VPS 的 IP
初始化裸库
在 VPS 上初始化一个裸库,为了保存 public
目录的内容。(跟踪public目录的变化)
你可以建立一个用户 git 或者直接使用 root 用户,可选(但你要为此做一些列的 root 身份赋予工作)。
1 | adduser git |
但是我没有必要,因为我添加 root 用户时,指定的 SSH Key 就是现在的 Key。(也是部署的 key)
如果不行,则要做相应的添加,例如 root 用户还没有添加的话: (给 root 用户设置)
1 | mkdir ./.ssh |
其实,如果你都能免密码,使用ssh登录到你的 vps,这就没有必要在做其他工作了,即
1 | ssh root@ip地址 |
然后我就以这个身份开始建立一个裸库,如果这里不建立裸库,就不能使用 git 协议push.
当然,如果 hexo d 支持 scp 的话,裸库也不需要了,直接拷贝即可
1 | # git init --bare source.git |
这样裸库就 OK 了。(一会儿 push 直接使用 root 身份即可)
部署配置
其实 .deploy_git
目录中根本没有指定远端是什么:
也就是说,可以指直接在_config.yml
中配置 repo, 然后 push. (push的时候默认临时指定一个 track stream)
此时可以看到, vps 的 hexo_public 目录已经有内容了:
最终收验
- 404页面失败, 解决: 恢复配置
error_page
- 反复更新,看下能否即时更新? (OK)
总结
由于 vps 在海外,其实最终效果还是马马虎虎,但是至少比 git pages 快。足够了。
那么后期要做的事情,可以折腾的事情:
- 填补评论系统 (以每篇文章的 addr_link 加密值为 index)
- 建立本地图库,过去都是存储在 七牛云上,现在可以建立本地图库了
Merlin 2018.2 最终弄完发现速度快了,但是也没有快很多;有收获就是好事儿。