在个人网站上写博客,很爽,很自由。但也有很多不得不考虑的问题,比如服务器的续费,域名,ssl 证书的续费,备案等等,虽然金钱成本不是很高,但需要额外花时间,花精力去维护,所以我决定把博客逐步搬到新的平台。
目前正在往知乎和 InfoQ 搬运,也不是把所有的内容都搬过去,我现在看自己以前写的东西,大部分都太小儿科了,有种翻自己 qq 空间的感觉,那种的我就不搬了,就让他们沉淀在历史长河里吧。而也有一些我觉得我是花了心思,而且到现在也有实际使用价值的文章,就会搬过去。以后新发的文,也会在新的平台,InfoQ 主要写技术类文章,一些个人感想什么的,就会放到知乎上。
但还是有必要记录下怎么搭建自己的博客平台方法的,这里我就以我搭建 Hexo 博客的精力为例,介绍一下搭建的全过程。
好了,开整。
第一步:安装 Node
1.node 管网下载安装包
2.一路 next,注意选一下安装路径
3.安装完成后,检查一下
4.配置下环境变量(这一步不做也不影响后边的操作)
npm config set prefix "D:\programming\nodejs\node_global"
npm config set cache "D:\programming\nodejs\node_cache"
复制代码
环境配置:新增环境变量NODE_PATH
和添加Path
,两个值都为 D:\programming\nodejs\node_global
第二步:安装 hexo
这步其实完全参照 hexo 官网操作即可:https://hexo.io/zh-cn/docs/
1.安装完成后,就可以初始化 hexo 博客文件夹了
mkdir hexo-blog
cd hexo-blog && npm init -y
复制代码
2.初始化 hexo 项目
hexo init myblog && cd myblog
npm i
复制代码
3.然后安装一个好看点的主题,我用的是 next
git clone https://github.com/iissnan/hexo-theme-next themes/next
复制代码
4.在本地配置文件中设置 theme 属性
5.本地执行 hexo 项目,添加 start 脚本
6.本地执行 npm start,然后打开浏览器,输入http://localhost:4000
第三步 安装 git 环境
1.git 安装,参考官网https://git-scm.com/downloads
2.生成 ssh 认证,在本地的 git bash 里执行如下命令
git config --global user.name "yourname"
git config --global user.email youremail@example.com
ssh-keygen -t rsa -C "youremail@example.com"
git config --global core.autocrlf false // 禁用自动转换,这个不设置后面上传时会出现警告
复制代码
3.最后获取到的 ssh 认证一般保存在C:\Users\yourname\.ssh
路径下
第四步 服务器配置
1.搭建远程 git 私有仓库,登录到远程服务器,找一个趁手的 ssh 服务工具,可以直接用 Windows 自带的 powershell 或者 Terminal,我这里推荐 MobaXterm,主要是免费,也好使,xshell 虽好,就是有点氪金
2.安装 git
git --version // 如无,则安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
yum install -y git
复制代码
3.创建用户并配置仓库
useradd git
passwd git // 设置密码
su git // 这步很重要,不切换用户后面会很麻烦
cd /home/git/
mkdir -p projects/blog // 项目存在的真实目录
mkdir repos && cd repos
git init --bare blog.git // 创建一个裸露的仓库
cd blog.git/hooks
vi post-receive // 创建 hook 钩子函数,输入了内容如下
复制代码
#!/bin/sh
git --work-tree=/home/git/projects/blog --git-dir=/home/git/repos/blog.git checkout -f
复制代码
4.添加完成后修改权限
chmod +x post-receive
exit // 退出到 root 登录
chown -R git:git /home/git/repos/blog.git // 添加权限
复制代码
5.测试 git 仓库是否可用,在本地找一个空白文件夹
git clone git@server_ip:/home/git/repos/blog.git
复制代码
如果能把空仓库拉下来,就说明 git 仓库搭建成功了
6.在本地建立和服务器的 ssh 信任关系,打开 git bash 终端
ssh-copy-id -i C:/Users/yourname/.ssh/id_rsa.pub git@server_ip
ssh git@server_ip // 测试能否登录
复制代码
注意:此时的 ssh 登录 git 用户不需要密码!否则就有错,请仔细重复步骤 3-6
7.为了安全起见禁用 git 用户的 shell 登录权限,从而只能用 git clone,git push 等登录
cat /etc/shells // 查看 git-shell 是否在登录方式里面
which git-shell // 查看是否安装
vi /etc/shells
添加上2步显示出来的路劲,通常在 /usr/bin/git-shell
复制代码
修改 /etc/passwd 中的权限
// 将原来的
git:x:1000:1000::/home/git:/bin/bash
// 修改为
git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell
复制代码
第五步 搭建 nginx 服务器
1.下载并安装 nginx(选一个合适的版本即可,我直接用的当前最新的 1.18.0)
cd /usr/local/src
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar xzvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure // 如果后面还想要配置 SSL 协议,就执行后面一句!
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
make && make install
alias nginx='/usr/local/nginx/sbin/nginx' // 为 nginx 取别名,后面可直接用
复制代码
2.配置 nginx 文件
先启动下看看是否安装成功
nginx //启动后,本地浏览器输入服务器ip,nginx默认就是80端口,看看有没有标志性的Welcom出现
复制代码
修改配置文件
nginx -s stop // 先停止nginx
cd /usr/local/nginx/conf
vi nginx.conf
修改 root 解析路径,如下图
同时将 user 改为 root 如下图,不然nginx无法访问 /home/git/projects/blog
nginx -s reload
复制代码
第六步 部署发布
至此我们就把本地和服务器的环境全部搭建完成,现在利用 hexo 配置文件进行链接
1.编辑_config.yml 的 deploy 属性
2.在 package.json 中添加 npm 脚本
"scripts": {
"deploy": "hexo clean && hexo g -d",
"start": "hexo clean && hexo g && hexo s"
}
复制代码
3.这下在本地调试就用npm start
,调试好了就上传到服务器,美滋滋~快通过你的服务器 ip 访问吧
番外 给 Next 主题增加评论功能
我们的博客发布好后,可能需要增加一些留言评论,访问统计等功能,这里增加一种方式。
因为我前阵子刚升级了 Next7.8.0 主题,相关的这些配置简单了许多,这里着重介绍下。
1.注册 leancloud 账号:https://console.leancloud.cn
2.创建开发版应用
3.创建 Class
选择数据存储->创建 Class->权限设置成无限制,所有用户,命名为”comment”
4.打开设置->安全中心->把数据存储之外的服务全部取消,并配置安全域名
5.进入应用凭证,赋值 AppID,AppKey
6.打开 valine 地址:https://www.jsdelivr.com/package/npm/valine,赋值最新的 cdn 地址
7.配置 next 配置文件
a.找到 valine 配置项目,粘贴 valine 的 cdn 地址
b.配置之前粘贴的 appid,appkey 等,开启评论
如果有的文章不需要开启评论,可以在头部标签栏,设置 comments:fase
最终呈现效果就是这样
评论