买了服务器一直没用,先搞个博客吧,因为发现简书的发布博客好像有一日上限,不舒服。
首先看个服务器搭建Hexo的整体架构图,非常好,有利于理解接下来的步骤。来自博客:如何在服务器上搭建hexo博客
步骤大纲:
一、 本地计算机配置Hexo程序
二、服务端配置网站根目录、Git裸仓库、Git-hooks、Nginx。
三、 本地计算机与服务端建立通道,实现hexo上传。
四、本地计算机渲染博客并部署到服务器。
一、本地计算机配置Hexo程序
Note: 本地计算机为Deepin系统,理论上适用Ubuntu、Debian
- hexo需要node.js的支持,所以第一步是安装nodejs
-
打开终端窗口,根据系统输入以下命令之一:
其他nodejs版本请参考Node.js Binary Distributions
npm会随nodejs一起安装成功。# Using Ubuntu curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs # Using Debian, as root curl -sL https://deb.nodesource.com/setup_lts.x | bash - apt-get install -y nodejs
-
验证是否安装成功:
# node -v返回 v12.18.3 node -v # npm -v返回 6.14.6 npm -v
-
- 初始化Hexo博客
- 安装Hexo
选择目录存放本地hexo博客内容(假设主目录/home/xxx/
),运行npm install -g hexo-cli
- 初始化hexo:
hexo init blog # blog可以是其他任何你想起的名字
- 安装hexo其他插件:
cd blog npm install #这个操作功能是补全依赖环境 npm install hexo-deployer-git --save # 自动部署到服务器需要的插件 npm install hexo-server # 本地简单的服务器,可以测试hexo是否安装成功
- 测试hexo是否安装成功。执行如下命令:
hexo g && hexo server
- 安装Hexo
二、服务端配置网站根目录、Git裸仓库、Git-hooks、Git上传用户、Nginx。
- 配置网站根目录备用
- 指定一个目录,假设主目录
/home/xxx/
,创建文件夹hexo
cd /home/xxx mkdir hexo
- 指定一个目录,假设主目录
- 服务端配置Git裸仓库
- 指定一个目录创建git裸仓库,可以选择
/var/repo/
。执行:sudo git init --bare blog.git
- 指定一个目录创建git裸仓库,可以选择
- 配置git-hooks
创建文件cd /var/repo/blog.git/hooks
post-receive
,执行vim post-receive
,进入vim在insert模式下输入:
然后# !/bin/sh git --work-tree=/home/xxx/hexo --git-dir=/var/repo/blog.git checkout -f
:wq
保存 - 配置Nginx
- 安装Nginx:
sudo apt-get install nginx
- 配置Nginx.conf:
Nginx.conf
位置是/etc/nginx/nginx.conf
(也可能是/user/local/nginx/conf
,可以whereis nginx
命令查看具体位置)。
编辑该文件内容,修改user
、server
然后保存。user root; .... http { server { listen 80; # 监听端口 server_name "your url or ip"; # 域名或者ip地址 location / { root /home/xxx/hexo; # 服务端网站根目录 index index.html; } } }
- 安装Nginx:
三、本地计算机与服务端建立通道,实现hexo上传。
- 服务端创建并配置git用户,专门用于博客上传。
- 创建git用户,并更改git仓库的所有者
sudo adduser git # 创建用户 sudo chown -R git:git /var/repo/blog.git
- 禁用 git 用户的 shell 登录权限
出于安全考虑,我们要让 git 用户不能通过 shell 登录。可以编辑/etc/passwd
来实现
将git:x:1001:1001:,,,:/home/git:/bin/bash
改成git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样 git 用户可以通过 ssh 正常使用 git,但是无法登录 shell。可以在服务端试一下,su git无法切换到git用户,报错fatal: Interactive git shell is not enabled.
为什么非得搞一个新的git用户,我感觉原因出在这里,如果直接使用服务端原来的用户远程上传博客也行,只是存在安全问题。
- 创建git用户,并更改git仓库的所有者
- 本地计算机与服务端建立ssh通道。
- 本地计算机执行:
ssh-keygen
/home/xxx/.ssh/
下生成两个文件id_rsa
和id_rsa.pub
。- 服务端在
/home/git
目录下创建文件夹.ssh
,并在/home/git/.ssh
下创建文件authorized_keys
。
把id_rsa.pub
的内容复制到服务端的authorized_keys
中。注意是把本地计算机的/home/xxx/.ssh/id_rsa.pub
复制到服务端的/home/git/.sshauthorized_keys
。
- 本地计算机执行:
- 本地计算机配置hexo deploy。
- 编辑
/home/xxx/blog/_config.yml
,配置deploy:deploy: type: git repo: git@"your url or ip":/var/repo/blog.git branch: master
- 编辑
保存。
四、本地计算机渲染博客并部署到服务器。
- 编写博客
- 方式一:创建博客使用的markdown文件,然后书写内容
hexo new "xxxx"
source/_posts
目录下。继续编辑xxx.md
即可。- 方式二:直接把写好了的md文件丢进
source/_posts
目录下。
- 方式一:创建博客使用的markdown文件,然后书写内容
- 渲染博客:
或者hexo gernerate
hexo g
- 部署博客到服务器
或者hexo deploy
hexo d
- 第二步和第三步可以一起使用
或者hexo g && hexo d
或者hexo g -d
操作完成后,服务端目录hexo d -g
/home/deepin/hexo
下会有刚刚提交的博客,但/var/repo/blog.git/branches
不会有博客文件,因为它是裸仓库。
注意:hexo d可能会报错Error: EACCES: permission denied, unlink ...
,说什么权限拒绝。如果使用sudo hexo d
,就会报另外一种错误:git@github.com: Permission denied (publickey). fatal: 无法读取远程仓库。
。解决办法:一劳永逸,直接chmod -R 777 blog/
。参考博客:使用Hexo+Github搭建博客的各种问题
完工。整个流程请照文章开头的架构图理解一下,比较难理解的是第二章节和第三章节。
其他发现:
hexo官网文档的一键部署,支持除了Git上传的其他部署方式,包括SFTP、RSync,逻辑应该是直接远程传输到服务端制定文件夹,配置相对简单,直接配置_config.yml的deploy属性即可。