前言

其实这也就是分享一下我的建站历程吧,坎坎坷坷花了两天时间,还是挺满意的,吹爆这个Butterfly主题的作者jerryc,真的是太好看了。不出意外未来几年应该都是这个风格啦,顶多魔改一下。顺便吐槽一下腾讯的coding,访问速度感人,维护时又访问不了,总之各种毛病,github服务器又在国外,访问速度依旧很慢,这也就是下决心换成自己服务器的原因了。

大致步骤

1 在云服务器上建立私人git服务器并配置本地仓库

2 在个人开发pc上下载hexo框架源码,并在配置文件中设置push到云服务器上的私人仓库。

3 pc打包上传hexo静态文件并上传到服务器上的私人仓库

4 仓库中设置git钩子将已上传的静态资源拷贝到自定义目录下

5 通过nginx部署web服务,配置静态资源访问目录到上述自定义目录。

详细流程

在云服务器上建立私人git服务器并配置本地仓库

首先,安装git,一般云服务器系统已经安装好了。

1
yum install git

创建Git账户

1
adduser git

添加账户权限

1
2
chmod 740 /etc/sudoers
vim /etc/sudoers

找到

1
2
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

下面一行添加以下内容

1
git     ALL=(ALL)     ALL

保存退出并改回权限

1
chmod 400 /etc/sudoers

设置git账户密码

1
sudo passwd git

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

1
2
3
4
5
6
su git
mkdir ~/.ssh
vim ~/.ssh/authorized_keys
# 然后将win10中生成的id_rsa.pub文件中的公钥复制到authorized_keys
chmod 600 /home/git/.ssh/authorzied_keys
chmod 700 /home/git/.ssh

在本地Git终端中测试是否能免密登录git,其中SERVER为填写自己的云主机IP,执行输入yes后不用密码就说明好了

1
ssh -v git@SERVER

创建自定义目录(作为后续nginx的root目录)

1
2
3
4
5
6
7
8
#repo作为为Git仓库目录
mkdir /var/repo
chown -R git:git /var/repo
chmod -R 755 /var/repo
#hexo作为网站根目录
mkdir /var/www/hexo
chown -R git:git /var/www/hexo
chmod -R 755 /var/www/hexo

然后创建一个裸的 Git 仓库

1
2
cd var/repo
git init --bare hexoBlog.git

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

1
vim /var/repo/hexoBlog.git/hooks/post-receive

按 i 键进入文件的编辑模式,在该文件中添加两行代码(将下边的代码粘贴进去),指定 Git 的工作树(源代码)和 Git 目录(配置文件等)

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

然后,按 Esc 键退出编辑模式,输入”:wq” 保存退出。
修改文件权限,使得其可执行

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

在个人开发pc上下载hexo框架源码,并在配置文件中设置push到云服务器上的私人仓库。

在本地win10安装部署Hexo,我部署在D盘中,打开D盘,新建文件夹,文件夹名自己定义,我的是Delaunay’s Blog,打开文件夹。右击鼠标,选择git bash here。
执行如下命令

1
2
3
4
5
6
7
8
9
10
11
12
13
#安装hexo构建工具
npm install hexo-cli -g
#初始化hexo工程
hexo init
#安装依赖
npm install
npm install hexo server
npm install hexo-deployer-git --save

#定义邮箱(更换为你的邮箱地址就行)
git config --global user.email "you@example.com"
#定义名称(更换自定义一个名称就行)
git config --global user.name "Your Name"

配置_config.yml,完成自动化部署
打开D盘,blog文件夹,打开blog文件夹,打开_config.yml, 找到deploy

1
2
3
4
5
6
deploy:
type: git
#server改为你的服务IP地址或解析后的域名
#例如我改为repo: git@delaunay.cn:/var/repo/hexoBlog.git
repo: git@server:/var/repo/blog.git
branch: master

此时,打开git bash here,push到云服务器的git仓库,测试是否成功。

pc打包上传hexo静态文件并上传到服务器上的私人仓库

下面是hexo的常用命令

1
2
3
4
5
6
7
hexo g  #编译静态资源

hexo s  #开启本地调试

hexo new 'title'  #生成一篇新的md文件,即博客内容

hexo d #将静态资源push到仓库

更换主题

下载主题包放到hexo的themes目录下,然后修改_config.yml中theme为对应的包名就可以了。

通过nginx部署web服务,配置静态资源访问目录到上述自定义目录。

搭建服务器环境,以nginx做服务器。

1
2
3
4
5
6
7
8
1.安装
yum install -y nginx

2.启动服务器
systemctl start nginx
systemctl enable nginx

3.在浏览器地址栏中输入你的公网ip,如果打开了有内容网页,说明成功了。

配置服务器的路由:
通过公网ip访问,这个地址指向的是nginx,得让他指向我们的博客,就要修改配置文件,找到配置文件etc/nginx/nginx.conf,并不建议直接修改配置文件,应该先创建一个新的文件,然后采用include的方式,将这个文件包含进nginx.conf中。

新建配置文件

1
2
3
4
cd /etc/nginx/
mkdir vhost
cd vhost
vim blog.conf

编写配置文件

1
2
3
4
5
6
7
8
9
server
{
listen 80;
# server_name 填写自己的域名
server_name delaunay.cn www.delaunay.cn;
index index.php index.html index.htm default.php default.htm default.html;
# 这里root填写自己的网站根目录,修改为/var/www/hexo
root /var/www/hexo;
}

解析域名

这一步不多阐述了。

至此,部署完成!

遇到的问题及解决方法

nginx部署后通过公网ip一直进不去

可能是云服务器80端口未开放,进入云服务器控制台,找到实例,设置安全组规则,开放80端口。这个问题我找了好久的答案,检查了好多遍配置文件。

找不到nginx的配置文件

因为我之前先装了宝塔,觉得不好用又卸载了,后续安装的nginx可能有些偏离默认位置。
通过如下命令

1
2
3
4
5
#查看nginx进程信息
ps -ef | grep nginx

#查找主配置文件
/usr/sbin/nginx -t

通常是master process后面的地址,或者下面一个命令显示的地址。
我的配置文件在 /etc/nginx/nginx.conf

无法通过www或者不加www的方式访问

delaunay.cn www.delaunay.cn就是这个域名只能通过其中一个网址访问,有一个会访问不到,这个根本原因我没有找到,解析那里是没有问题的。我将nginx配置文件那的server_name后面的域名换了位置,即

1
server_name delaunay.cn www.delaunay.cn;

这样问题便解决了,以后再找根本原因。

总结

总之花了我两天时间搭好这个博客,还有,域名记得要备案。我刚解析完网站就被屏蔽了,提醒我去备案。其他没什么了,以后希望自己会时常更新,提高自己!