简介
hexo 博客系统会将 md 文件转换成可以在浏览器里访问的 html 文件,如果将转换后的文件放在云服务器上,起一个 nginx 服务即可达自建博客的目的,从此告别龟速的 GitHub pages。
环境
本地:macOS Mojave 10.14.6
云服务器:腾讯云 Centos8
准备好 hexo 编译后文件
将 hexo 编译后的文件手动拷贝到云服务器的特定目录下,我的存放位置是:
1 | su root |
配置 nginx 服务
- 安装
因此第一步是安装 nginx,我用的是腾讯云的 Centos8,安装比较简单:
1 | yum install nginx |
- 修改配置
nginx 默认配置文件目录为:/etc/nginx/nginx.conf
,找到这个文件后修改下面的几个配置:
1 | server { |
- 启动服务
1 | systemctl restart nginx.service |
或者
1 | nginx -s reload |
- 预览效果
这时顺利的话,在浏览器里输入 你前面配置的 server_name
或者你的云服务器公网 ip 地址就能看到网站了。
支持 https
经过前面的配置,网站只是可以通过 http 访问,要想可以通过 https 访问,还需要经过以下步骤:
- 申请 SSL证书
腾讯云提供了免费的 ssl 证书申请服务,详情参考:域名型(DV)免费 SSL 证书申请流程
申请成功后,将用于 Nginx 的证书下载到本地。
- SSL 证书部署到 Nginx
将前面下载到本地的 SSL 证书中的 .crt
和 .key
文件上传到云服务器的某个目录下,然后找到 Nginx 的配置文件,增加 https 相关的配置:
1 | server { |
其中,ssl_certificate
、ssl_certificate_key
就是你的证书和私钥的存放路径。
详情参考:Nginx 服务器 SSL 证书安装部署
- 重启 Nginx
1 | nginx -s reload |
重启后就可以通过 https 访问站点了。
自动部署
创建云服务器 git 服务账户
1 | adduser git #加入git用户 |
打开 suduers,找到以下内容:
1 | ## Allow root to run any commands anywhere |
在它的下面加入以下内容:
1 | git ALL=(ALL) ALL |
保存后,需要将权限修改回来
1 | chmod 400 /etc/sudoers |
搭建 git 服务
本地电脑上修改并重新生成 hexo 文件后,同步上传到云服务器上自己搭建的 git 服务器上。
1 | su root |
这样就在云服务器上搭建了一个空的 git 服务,可以在本地电脑上做下测试:
1 | git clone git@你的云服务器公网ip:/home/git/hexo.git |
或者用下面的方式也能测试:
1 | ssh -v git@你的云服务器公网ip |
将本地 hexo 文件上传到云服务器
到这里,本地电脑上编译好的 hexo 网站文件就可以上传到云服务器上我们搭建好的 git 服务了,我的本地上传脚本:
1 | # 创建发布用 git 仓库 |
自动部署
使用 git-hooks 同步网站根目录
1 | vim hexo.git/hooks/post-receive |
填入以下内容,其中 /home/hexo
为网站目录,根据自己的填入,保存退出。
1 | #!/bin/sh |
该钩子的意思是当本地有提交到服务器时,会将文件放在/home/hexo下
-f
这个参数如果在多人协作的博客中可能会引发不好的结果,因为他是强制更新的意思,会将本地版本覆盖掉远程服务器的版本,但是是个人的博客系统就无所谓了
保存后,要赋予 post-receive
文件可执行权限:
1 | chmod +x /home/git/hexo.git/hooks/post-receive |
最后,需要给存放静态文件的/home/hexo
目录开启 git 账户的可修改权限(否则 post-receive 里的读写文件操作就会因为无权限而失败):
1 | chown git:git -R /home/hexo |
配置公钥到服务器
为了避免每次 push 的时候输入密码,可以将本地电脑的公钥配置到 git 服务器上。
- 获取本地电脑公钥
如何获取本地电脑的公钥可以参考之前的文章:《让Octopress博客在多台Mac上同时使用》 中 2.创建并添加ssh key
章节。
拿到本地电脑的 id_rsa.pub
文件内容后 copy 以供后文使用。
- 配置公钥到服务器
在服务器端,切换至刚刚创建好的 git 用户下,创建 .ssh 文件和 authorized_keys 文件
1 | su git |
修改权限:
1 | cd ~ |
问题
- git push 到远程仓库后报错:
1 | Enumerating objects: 172, done. |
解决方案:
远程服务器下给 /home/hexo.git
开启写权限:
1 | su root |