最近因为疫情原因,天天在家里也无聊得很,想着没事就试着折腾一下 Hexo。
刚开始还不会整 Hexo 博客,感觉要比 Typecho 要麻烦的多。经过两天的学习操作,终于建好了 Hexo,本着建好了就不浪费的原则,决定以后就用 Hexo 了。
目前博客程序为 Hexo,使用 Theme.Shoka 主题,部署在华为云服务器上。
现在记录一下这个 Hexo 博客从搭建、配置和部署到云服务器的整个过程,免得以后自己忘了。
# Hexo 本地安装
# 环境准备
# 安装 Hexo
- 在自己喜欢的位置新建 Hexo 文件夹
- 进入新建的 Hexo 文件夹,右键点击打开 Git Bash Here
#在Hexo目录下安装Hexo | |
npm install -g hexo-cli | |
#检测Hexo是否安装成功 | |
hexo -v | |
#初始化Hexo,并新建blog文件夹 | |
hexo init blog | |
#转到刚初始化的blog文件夹下,安装npm依赖项,并生成静态文件 | |
cd blog | |
npm install | |
hexo g | |
#启动Hexo服务器 | |
hexo s |
- 访问 http://localhost:4000,出现 Hexo 页面
# 安装 Shoka 主题
- 安装主题
# cd your-blog | |
git clone https://github.com/amehime/hexo-theme-shoka.git ./themes/shoka |
- 安装主题依赖插件
- 修改 Hexo 博客配置文件_config.yml
theme: Shoka |
- 生成静态文件并发布
hexo g | |
hexo s |
- 访问 http://localhost:4000 进行预览,没问题的情况下就可以将博客部署到服务器上了。
# 部署到云服务器
- 在自己的电脑上生成 Git 密钥
ssh-keygen -C "your@mail.com" |
一路回车,这时你应该可以在~/.ssh/ 目录下看到两个刚刚生成好的密钥文件:
1. 公钥:id_rsa.pub
2. 私钥:id_rsa
我们一会需要把公钥的内容拷贝到服务器上
-
服务器环境配置
一般刚重装完系统的云服务器非常纯净,什么也没有,所以我们要一点点安装我们所需的内容
1. Git
2. Nginx -
Git 的安装和配置
#首先需要安装包的依赖 | |
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel | |
yum install gcc perl-ExtUtils-MakeMaker | |
#进入指定目录(这里选择 `usr/local/src`)选择最新版本 [Git](https://mirrors.edge.kernel.org/pub/software/scm/git/) (这里使用 `2.37.3`)下载并解压 | |
cd /usr/local/src | |
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.37.3.tar.gz | |
tar -zxvf git-2.37.3.tar.gz | |
#解压出来的 Git 文件都是源文件,我们需要进行编译,进入 Git 解压目录,进行编译和安装, 安装位置(这里选择 `usr/local/git`), 整个过程可能需要一定等待。 | |
cd git-2.37.3 | |
make prefix=/usr/local/git all | |
make prefix=/usr/local/git install | |
#安装好后,我们需要配置环境变量,打开环境变量配置文件: | |
vim /etc/profile | |
#在文件底部添加 Git 安装目录信息。 | |
PATH=$PATH:/usr/local/git/bin | |
export PATH | |
#刷新环境变量,使之生效 | |
source /etc/profile | |
#此时 Git 应该已经安装完成,可以查看 Git 版本号是否和你指定的版本一样: | |
git --version |
- Git 新用户与配置
#创建 git 用户和密码 | |
adduser git | |
passwd git | |
#将 git 用户添加到 sudoers 文件中 | |
chmod 740 /etc/sudoers | |
vim /etc/sudoers | |
#在Allow root to run any commands anywhere下面添加 git 用户内容, 保存并退出 | |
git ALL=(ALL) ALL | |
#修改回 sudoers 文件权限 | |
chmod 400 /etc/sudoers |
- 测试
通过 Git Bash Here 将上面本地生成的 id_rsa.pub 公钥内容拷贝到远端服务器,这个命令会默认在远端服务器 git 用户主目录下生成authorized_keys
文件 (~/.ssh/authorized_keys), 其中server_ip
为公网 IP,不是内部 IP,别拷贝错了
ssh-copy-id -i ~/.ssh/id_rsa.pub git@server_ip |
此时可以通过 ssh 命令 (加上 -v
命令,可以输出详细 log) 测试连接
ssh -v git@server_ip |
# 博客网站目录配置
- 创建博客网站目录位置
#为博客网站创建根目录(这里选择 `/home/hexo`) | |
mkdir /home/hexo | |
#赋予 git 用户权限 | |
chown git:git -R /home/hexo |
- 自动化配置
#指定目录位置(这里选择 git 用户主目录 `/home/git`)创建一个名为 `blog.git` 的 `bare repo` | |
cd /home/git | |
git init --bare blog.git | |
#同样赋予 git 用户相应权限 | |
chown git:git -R blog.git | |
#使用自动化配置,自然是要用到 Git 的钩子函数,这里我们需要 `post-receive`,在博客 hooks 目录下新建该文件: | |
vim blog.git/hooks/post-receive | |
#然后添加如下内容(注意目录匹配),保存并退出: | |
#!/bin/sh | |
git --work-tree=/home/hexo --git-dir=/home/git/blog.git checkout -f | |
#最后,赋予这个文件可执行权限 | |
chmod +x /home/git/blog.git/hooks/post-receive | |
#接下来,创建个链接,以防后续 deploy 过程出错 | |
sudo ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack |
# Nginx 安装和配置
- 安装
yum install -y nginx | |
systemctl start nginx.service |
这时,在浏览器中输入公网 IP 地址,应该可以看到 Nginx 默认的欢迎界面
-
配置
这里配置 Nginx,将所有 Http 请求都重定向为 Https 请求,这就需要我们有 SSL 证书。
通过scp
命令将 SSL 证书拷贝到远端服务器,正常应该将 Nginx 的证书存放在/etc/nginx/cert
目录下,这里选择存放在/home/ssl_cert
下(如果目录不存在,请自行创建)
scp ~/路径/证书.key root@server_ip:/home/ssl_cert | |
scp ~/路径/证书.pem root@server_ip:/home/ssl_cert |
然后打开 Nginx 的配置文件进行整体配置
server{ | |
listen 80; | |
server_name dayarch.top; # 个人域名 | |
rewrite ^(.*)$ https://$server_name$1 permanent; # 重定向 | |
} | |
server { | |
listen 443; | |
server_name dayarch.top; # 个人域名 | |
ssl on; | |
ssl_certificate /路径/证书.pem; # .pem 证书 | |
ssl_certificate_key /路径/证书.key; # .key 证书 | |
ssl_session_cache shared:SSL:1m; | |
ssl_session_timeout 5m; | |
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; | |
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | |
ssl_prefer_server_ciphers on; | |
location / { | |
root /home/hexo; # 博客网站主目录 | |
index index.php index.html index.htm; | |
} | |
error_page 404 /404.html; | |
location = /404.html { | |
root /usr/share/nginx/html; | |
} | |
error_page 500 502 503 504 /50x.html; | |
location = /50x.html { | |
root /usr/share/nginx/html; | |
} | |
} |
通过 nginx -t
命令进行检查,一切正常会输出如下结果:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok | |
nginx: configuration file /etc/nginx/nginx.conf test is successful |
重启 Nginx 服务
systemctl restart nginx.service |
至此,所有的准备工作都做完了,接下来,我们需要做一些博客配置
# 本地博客配置修改
我们需要将远端服务器的 Git 仓库信息配置到 Hexo 站点配置文件( _config.yml
)中
deploy: | |
- type: git | |
repo: git@server_ip:/home/git/blog.git | |
branch: master |
陆续执行 hexo 的命令进行部署
hexo clean | |
hexo g | |
hexo d |
至此,距离成功,我们只差最后一步
# 域名解析
配置好域名解析,将其指向云服务器的公网地址即可。