折腾博客记 - 搭建博客

我的系统是 MacOS 10.15,搭建过程也都使用苹果系统进行的。

使用的技术

  • 博客搭建使用的技术
    • 服务器 Oracle 云服务
    • 服务器管理 宝塔面板
    • Web服务器 Nginx
    • 静态页面 Hexo
    • 远程部署 Hexo deploy配合Git Hooks部署

大致是这么一个情况,如果单纯想简单搭个小博客的话完全可以选择一些静态网页托管平台,例如Netlify之类的免费额度作为网站前期过渡就很舒服了。我这边呢,因为前阵子申请了 Oracle 所以不想闲置所以才用的这个相对复杂的搭建方式。而且Netlify还有支持Hexo的CMS简直不要太香哦。

博客搭建顺序

博客搭建的顺序分为这么几步进行。

  1. 本地搭建 Hexo
  2. 通过宝塔面板配置VPS环境
  3. 添加Git用户,配置Git Hooks
  4. Hexo deploy 远程部署

这里边比较麻烦的是VPS环境配置Git配置。容易出点小问题。

1.本地搭建Hexo

本地需要做的工作有下面几个。

  • 安装 Node.js
  • 安装 Hexo
  • 初始化 Hexo

安装 Node.js

这边有个小坑需要注意。mac本身是有安装Node的,但是安装新版本的Node之后,系统依启用的是旧版本的Node。这是因为mac本身是通过nvm管理Node.js版本的,所以导致安装最新版的Node.js都安装到别的虚拟环境里面了。所以更新版本之前优先查看电脑是否存在Node的虚拟环境,以及现在活跃的是哪个虚拟环境。(因为之前没太解除Node.js和nvm所以不太了解。)

使用例如nvm use system来激活对应环境。
然后使用nvm install <version>来安装指定版本的Node.js。

安装 Hexo

Node.js搞定了之后安装Hexo就很简单了。

然后使用以下命令安装Hexo。

1
2
3
npm install hexo-cli -g
npm install hexo server
npm install hexo-deployer-git --save

初始化 Hexo

初始化直接使用hexo init '文件夹名',来初始化Hexo,会在当前目录下自动创建相应初始文件。我这边博客的文件名是用的Blog,所以后面的命令都用Blog来代替文件夹名。

初始化代码运行完之后可以使用hexo s启动服务,进到http://localhost:4000/来验证自己本地Hexo搭建是否正确,如果看到的是默认的Hexo页面就表明OK了。

2.配置VPS环境

这边需要做的是以下这些。

  • 安装 宝塔面板
  • 安装 Nginx
  • 安装 Node.js管理器
  • 安装 Git

这边主要以安装服务为主,具体设置放到后面远程部署那边统一说明。

在做其他事情之前,最重要的是确保本地远程访问服务器是连通的。
ssh root@vps_ip命令来验证是否能正常ssh访问服务器。
这边如果是被拒绝的,则需要去看一下公钥配置是否正确。

我之前搭建的时候是有遇到公钥配置没有问题,也有正确添加到authorized_keys中但依旧使用密钥访问被拒绝。ssh显示错误Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
这个后面的解决方法是需要在服务器的sshd_config中修改一个字段,使得允许密码访问。

1
2
3
sudo vim /etc/ssh/sshd_config   // 编辑 sshd_config
PasswordAuthentication yes // 修改字段为 yes
sudo systemctl restart sshd // 重启sshd服务

后面有想着排查这个问题,但是为什么单独使用密钥访问被拒绝这个问题没找到问题源头。

安装宝塔

宝塔面板是一个支持Linux系统的管理面板,可以一键方便安装服务器端各种服务以及修改服务配置。

宝塔面板

这是宝塔面板的网站,安装方法根据官网为主。

1
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

这个命令是在Centos中安装的命令,其余的请参考宝塔面板官方网站。

安装 Nginx

博客搭建使用Nginx作为Web服务器
安装方法呢,在宝塔面板中一键安装。

安装 Node.js管理器

同样使用宝塔面板安装。在宝塔面板左侧有个软件商店中搜索Node.js管理器后安装即可。

安装完之后默认是还没有添加到系统的环境变量的。如果想要在终端中使用则需要添加环境变量。

1
ln -s /www/server/nvm/versions/node/v16.13.2/bin/node /usr/bin/node

安装 Git

Git在宝塔面板是收费的,所以直接使用终端命令安装。

1
yum install git

3.添加Git用户,配置Git Hooks

这边需要的做的是以下这几件事。

  • 配置 Git 环境变量
  • 添加 Git 用户
  • 初始化 Git 仓库
  • 配置 Git Hooks

配置 Git 环境变量

使用yum安装完Git之后,配置完环境变量使其生效后可以使用git --version来检验自己安装是否正确。

添加环境变量的方法如下。

1
2
3
4
5
vim /etc/profile                // 打开环境变量文件
PATH=$PATH:/usr/local/git/bin // 添加环境变量
export PATH // 设置环境变量
source /etc/profile // 立即生效
git --version // 验证git版本

添加 Git 用户

添加Git用户的目的很单纯,就是为了确保后续部署文件只有对应文件夹的权限,便于管理。

1
2
3
4
5
6
sudo -i             // 切换到root用户
adduser git // 添加git用户
chmod 740 /etc/sudoers // 给git用户sudo权限
vim /etc/sudoers
git ALL=(ALL:ALL) ALL // 找到root ALL=(ALL:ALL) ALL 在下一行添加
chmod 440 /etc/sudoers // 收回文件修改权限

因为放着git用户的ssh访问权限很不安全,所以需要关闭git用户的shell权限。

1
2
3
vim /etc/passwd             // 编辑文件
git:x:1001:1001:,,,:/home/git:/bin/bash // 把这一条修改为下面
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样git用户就可以正常通过ssh使用git但是无法登录shell。

初始化 Git 仓库

Git主要涉及这么几个文件夹。
一个是Git仓库,另一个是网站目录还有一个是.ssh。所以这边主要围绕这么几个东西进行。

具体过程如下。

1
2
3
4
5
6
7
8
9
10
# 初始化 Git 仓库
mkdir /home/git // 创建git目录
cd /home/git // 切换到git目录
git init --bare blog.git // --bare 为创建裸仓库,不包含工作区
# 创建 网站目录
mkdir /home/www/Blog // 在www目录下创建Blog文件夹
# 创建 .ssh
mkdir /home/git/.ssh
cd /home/git/.ssh
vim authorized_keys // 本地公钥存放位置。

创建完上面几个目录之后,要确保它们的用户组是之前添加的Git用户。如果当前不是则需要使用chown -R git.git '文件夹名'来更改用户组权限,来保证blog.git,.ssh,Blog文件夹的用户组权限为git.git。

配置 Git Hooks

配置Git Hooks这边主要就是需要创建post-receive文件。

首先是创建post-receive文件。

1
2
cd /home/git/blog.git/hooks
vim post-receive

然后将下面配置内容复制到文件内。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
echo "post-receive hook is running..."
GIT_REPO=/home/git/blog.git // git目录
TMP_GIT_CLONE=/tmp/Blog // 临时缓存目录
PUBLIC_WWW=/home/www/Blog // 网站目录

rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

最后给post-receive文件加上可执行权限。

1
chmod +x post-receive

这边为什么使用临时缓存目录是因为,可以避免.git之类的整个仓库历史记录暴露在Web服务中。

4.Hexo deploy远程部署

这边需要做的是这么几个事情。

  • 准备域名
  • 配置 Nginx
  • 配置 Hexo deploy

准备域名

准备域名这边因为购买渠道各不相同,所以博客想要上线需要自行准备一下域名。阿里云,Godaddy之类的都是可以的。然后解析域名到对应服务器IP地址,基本就可以用了。

配置 Nginx

已经万事俱备了,所以在宝塔面板那边配置一下博客的地址和目录。

首先在菜单网站这边添加需要静态依赖的网站信息,主要需要填写的是域名管理网站目录。域名这边呢就把自己准备好的域名填写上,网站目录的话就是自己创建的在www文件夹下面的博客目录,正确填写就可以了。

还有 Nginx 配置中主要修改这两个字段就行。

  • server_name // 填写自己的域名
  • root // 填写网站的根目录

宝塔面板后面SSL证书配置之类的其余功能放到别的文章去写,这一篇的主旨还是以最少的操作把整个网站运行起来。

配置 Hexo deploy

已经来到最后一步,配置本地的部署信息就可以一键部署然后让博客自行在服务器中跑起来了。

找到自己本地搭建的Hexo文件夹,找_config.yml文件。

在最后填写deploy信息。

1
2
3
4
5
deploy:
type: git
repo:
server: ssh://git@vps_ip:port/home/git/blog.git
branch: master

repo这边也就是填写ssh信息,大概形式是这样的ssh://用户@服务器IP地址:端口/git仓库目录.git

所有东西都配置好了之后,本地终端运行

1
2
hexo clean && hexo g
hexo d

就能一键远程部署了!!
完美撒花!!(写个破文章累死了,- -!!)


折腾博客记 - 搭建博客
https://warmwinter.ml/2022/02/Build-Blog/
作者
Neal
发布于
2022年2月17日
许可协议