迁移本地hexo博客至云服务器

序言

2023年了,近期终于入手一台云服务器练手,之前一直有将GitHub上的博客迁移到个人服务器的想法,一是为了加快打开速度, 二是为了缩短冗长的域名。因为网上没找到一篇特别详细的教程(有也大都是几年前发表的),就记录以下我迁移站点时踩过的坑。

虽然之前也搭建过一些靶场,但我本身对服务器配置并不是十分熟悉,每处排错令我困惑不已,但最后还是折腾出来了。这次体验也让我收获不少。作为小白练手是个不错的选择。希望永远有时间和经历折腾

配置准备:
1.能在本地顺利运行的hexo博客(网上教程很多)
2.一台服务器(我是一核2G)
3.一个心仪的域名
4.辅助软件(Xshell)

不知道这个网站能存活多久,没申请SSL证书,域名未备案,没搭防火墙可谓是buff拉满,因此仍将保留我的镜像站点以供访问https://byforacle.github.io/B1og/

好好好,在写这篇的时候已经被拿下了,光速出警,令人感慨

备案

坐标9.18,搞定了域名备案和SSL证书,希望能平稳运行

接下来就将开始个人站点搭建之旅

本地部署

默认你现在已将拥有了一个至少能在本地正常运行的hexo博客,即已经安装了NodejsGitHexo等环境

测试方法为打开终端,跳转到你博客的根目录

1
2
3
hexo clean
hexo g
hexo s

输入以上命令后访问本地的4000端口看到hexo界面即可 http://localhost:4000/

服务器登录

我阿里云服务器的系统为CentOS 7.9 64位

若你的系统为Ubuntu甚至Windows,命令应该有所改变

我们先用XShell远程连接阿里云服务器,若首次连接,账号密码可在阿里云控制台重置账号密码获取,主机名即公网IP,端口号默认为22,输入刚才得到的账号密码即可 应该不用贴图吧😓

登陆后切换到root账号

1
sudo su root

git账户 配置

安装 git

在终端里输入安装git

1
yum install git

等待一下就安装好了。中途会出现

1
Is this ok [y/d/N]:

输入 : y 回车即可,回显Complete!即为安装成功

创建 git 账户并添加其权限(为以后实现自动部署到git仓库做准备)

1
2
3
adduser git
chmod 740 /etc/sudoers
vim /etc/sudoers

使用vim工具编辑/etc/sudoers文件,这里简述一下本文用过的vim操作

打开文档后按i进入编辑模式,完成后按esc等待底部insert字样消失后输入:wq退出即可

vim

在绿色光标处添加配置

1
git     ALL=(ALL)     ALL

改回权限

1
chmod 400 /etc/sudoers

设置git账户密码

1
sudo passwd git

输入两次密码就设置成功了。注意,linux 下输入密码是不显示 **** 的,你直接输入,输完回车就行了。

切换至 git 用户,创建 ~/.ssh 文件夹和 ~/.ssh/authorized_keys 文件,并赋予相应的权限

1
2
3
su git
mkdir ~/.ssh
vim ~/.ssh/authorized_keys

这里需要将本地的ssh公钥复制到authorized_keys文件中,这样可以让物理机无需账号密码即可连接到我们的服务器,若你已经用SSH方法将博客部署到GitHub,可在本地C:\Users\(你的用户名)\.ssh路径下找到id_rsa.pub 文件,复制粘贴其中内容即可

接着,输入以下命令,赋予权限

1
2
chmod 600 /home/git/.ssh/authorized_keys
chmod 700 /home/git/.ssh

中间节点

到此处为止,可以说已经完成了一半,我们可以检验一下以上的操作有无生效,在本地Git终端中测试是否能免密登录,在电脑本地桌面,右键”Git Bash Here”,输入以下命令,其中 SERVER 填写自己的云主机 ip,执行输入 yes 后不用密码说明配置成功了。

1
ssh -v git@SERVER

回显Welcome to Alibaba Cloud Elastic Compute Service !即为成功


创建仓库目录及相关配置

注意此时创建的目录即为你站点源码存放的位置,而我们后面用到的宝塔运维面板不支持将网站源码放在Linux敏感目录下,建议谨慎选择(或可以和我选择相同目录)

切换到root用户,在www目录下创建repo文件夹作为Git仓库目录

1
2
sudo su root
mkdir /www/repo

赋予权限

1
chmod -R 755 /www/repo

接下来创建 hexo 目录作为网站根目录,并赋予权限:

1
2
3
mkdir /www/hexo
chown -R git:git /www/hexo
chmod -R 755 /www/hexo

接下来创建一个空白的 git 仓库

1
2
cd /www/repo
git init --bare hexo.git

创建一个新的 Git 钩子,用于自动部署

/var/repo/hexo.git 下,有一个自动生成的 hooks 文件夹。我们需要在里边新建一个新的钩子文件 post-receive。

1
vim /www/repo/hexo.git/hooks/post-receive

进入编辑模式,写入以下shell脚本

1
2
#!/bin/bash
git --work-tree=/www/hexo --git-dir=/www/repo/hexo.git checkout -f

修改权限:

1
2
chown -R git:git /www/repo/hexo.git/hooks/post-receive
chmod +x /www/repo/hexo.git/hooks/post-receive

到这里 Git 仓库已经搭建完毕了。

配置Nginx环境

在Linux安装和配置环境一直令人头疼,为了简化操作我们使用宝塔面板

进入宝塔面板官网找到Linux CentOs版本的下载命令(若你是其他系统,找到相对应的指令)

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

中途输入”y” 回车等待一会就好了。在执行结果最后会出现地址,用户名,密码等。

在本地浏览器访问地址,即可可视化地操作远程服务器,此时可能会遇到服务器未响应的问题,这是因为阿里云服务器默认不开启8888端口,在控制台配置安全组选项中打开该端口即可。

进入面板后可一键配置所需环境,选择左边那个套件(包括Mysql、Nginx、Php等等),其实我们只需要Nginx,手动下载也可

部署完成之后,点击网站,添加站点,填写你的域名,其他的不要改。

bt

填写完之后提交,然后点击” 设置” > ” 配置文件”

1
2
3
4
5
6
7
8
9
server

{
listen 80;
# server_name填写你自己的域名,没有的话填ip(域名最好加上3w)
server_name hjxlog.com;
index index.php index.html index.htm default.php default.htm default.html;
# 这里root填写自己的网站根目录,修改为/www/hexo
root /www/hexo;

保存,然后选择 “设置”-“网站目录”,将网站目录修改成以下,保存。

config

回到服务器终端,重启宝塔服务,使之生效。

1
service bt restart

本地repo设置

进入本地电脑 hexo 博客的根目录,编辑站点配置文件 _config.yml,找到 deploy和url,修改成以下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# URL
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'
url: http://www.baoyf.com/
permalink: :year/:month/:day/:title/
permalink_defaults:
pretty_urls:
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
trailing_html: true # Set to false to remove trailing '.html' from permalinks

deploy:
type: 'git'
# repo: git@github.com:Byforacle/B1og.git
# repo: 'https://github.com/Byforacle/B1og.git'
repo: git@www.baoyf.com:/www/repo/hexo.git
branch: master

这时候可能出现权限问题,导致部署到 git 失败。在服务器终端输入以下命令即可:

1
2
chown -R git:git /var/repo/
chown -R git:git /var/hexo/

再次推送即可