如何搭建的博客Hexo

环境准备

博客使用的VPS搭建的,服务器是操作系统Debian 8 x64 minimal,Web服务器caddy,博客使用的是Hexo1,主题使用的next,使用git进行文章版本管理。

Web服务器

安装Caddy

Web服务器使用的是Caddy,一个自动支持HTTPS而且配置简单的服务器软件,使用GO编写,性能应该不是最好,但是个人博客也够用了。使用Debian 64位,在Caddy的下载页面选择了Git这个插件
27004caddy_download_git.png
在本地获取下载链接后,在服务器中使用wget下载并解压。

mkdir caddy
cd caddy
wget 下载链接
tar zxvf 下载的文件名
chmod +x caddy 
mv caddy /usr/local/bin/

配置Caddy

Caddyfile的配置文件,为了验证Caddy的使用,先随便写一个Caddyfile

mkdir /home/www
mkdir /home/www/public
echo "hello world" >/home/www/public/index.html
mkdir /etc/caddy
touch /etc/caddy/Caddyfile

Caddyfile内容放在/etc/caddy/文件夹中,使用编辑器,在Caddyfile中添加我的域名配置。

miao.li {
    root /home/www/public/
}

配置完成后,运行

/usr/local/bin/caddy --conf=/etc/caddy/Caddyfile

如果没有注册过证书,此时会要你输入的邮箱下载let’s encrypt的证书了,此时保证域名已经正确的配置了DNS。可以访问看一下效果了。

配置Systemd运行Caddy

此时caddy已经可以运行,但一关掉这个窗口,caddy就会退出,所以需要使用systemd注册caddy为一个服务,开机自动运行。
caddy下载的文件中包含一个init的文件夹,其中包含systemd等各种的启动脚本,可以直接使用。
对于systemd的,可以直接使用。

cd init/linux-systemd/
cp caddy.service /etc/systemd/system/
systemctl start caddy

如果没有报错,

启动过程发现有错误,在网上找到一个使用root2启动的systemd配置文件。

[Unit]
Description=Caddy HTTP/2 web server %I
Documentation=https://caddyserver.com/docs
After=network-online.target
Wants=network-online.target
Wants=systemd-networkd-wait-online.service

[Service]
; run user and group for caddy
User=root
Group=root
ExecStart=/usr/local/bin/caddy -agree=true -conf=/etc/caddy/Caddyfile
Restart=on-failure
; create a private temp folder that is not shared with other processes
PrivateTmp=true
; limit the number of file descriptors, see `man systemd.exec` for more limit settings
LimitNOFILE=8192

[Install]
WantedBy=multi-user.target

此时再使用

systemctl start caddy //启动
systemctl status caddy //查看启动状态

此时应该没有问题了。

安装 Hexo

参考hero的安装文件
先安装nvm

nvm install --lts
npm install hero-cli -g --unsafe
cd /home/www
hexo init

hexo的使用和配置看官方文档即可。

配置Caddy git的web hook

目前使用的bitbucket.com的git服务。支持webhooks,配置caddy提供hook,每次我用git push,bitbucket就通知caddy,caddy则会自动git pull并且运行hero generate,发布站点。

更新Caddyfile

新caddyfile如下:

miao.li {
root /home/www/public/
gzip
ext .html
git git@bitbucket.org:fanzheng/miao.li.git {
    hook /hookurl
    path ../source
    key /root/.ssh/id_rsa
    then bash /home/www/build.sh
    }
}

一句句解释

hook /hookurl [github可添加密码]

Webhooks的地址,,在bitbucket中配置,URL填 https://miao.li/hookurl,如果你使用github,github的还可以使用密码。
14571bitbucket_webhooks_config.png

path ../source

git pull到的路径.

key /root/.ssh/id_rsa

由于我bitbucket使用的是私密repo,git pull需要一个密钥,先在服务器使用ssh-keygen生成了部署密钥,将public key到Bitbucket的这个repo中。
bitbucket_deploy_key.png

then bash /home/www/build.sh

Caddy在git pull成功后会将运行then后面的命令,下面是build.sh文件中的内容

cd /home/www/
PATH=$PATH:/root/.nvm/versions/node/v4.4.7/bin/
export PATH
echo $PATH
hexo generate
echo "site generated."

博客工作流程

在本机安装hexo,写完后,hero generate在本机生成更新,hexo server预览一下效果,再git push到bitbucket,过几秒钟,就自动发布出来了。


  1. 1.原本使用的是hugo,也是使用GO写的,静态网站生成的速度都是毫秒级别的,hexo生成的速度正的比较慢。
  2. 2.使用root运行不安全,暂时我也不知道如何解决。

热评文章