完全避坑!将hexo博客部署到云服务器
之前趁着阿里云的轻量服务器打折,入手了一台服务器,既然有了服务器自然不能让它闲着,这里记录一下把博客部署到云服务器上的过程。
准备条件
- 云服务器(阿里云/腾讯云/其他)。
- (可选)域名。如果选择国内服务器,需要进行icp备案。
- nginx、 git、nodejs。
- 现有的hexo博客。(如果没有,可以参考 将《使用hexo搭建个人博客》
开始配置
以centOs系统为例
配置控制台安全组规则
在阿里云控制台下云服务器的安全组规则中添加80
端口(http)和443
端口(https)。
当然,如果想使用域名访问,那么域名必须先备案,否则端口会被限制。
配置服务器环境
通常选择的是nginx。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强。—-百度百科
使用yum安装nginx:
1 | yum install -y nginx |
启动nginx服务器:
1 | systemctl start nginx |
启动之后,就可以使用服务器的公网ip访问网站了。成功访问即代表成功。
如果看到的页面不一样,是因为nginx对于不同的linux发行版提供的版本不一样,因此初始页面也不一样,总之只要能访问到页面就算成功。
设置博客目录
在你想要存放博客目录的地址下创建文件夹,比如:/home/hexo
1 | cd /home |
然后赋权。这步很重要,可能影响到部署。
1 | chmod -R 777 hexo |
配置路由
我们需要配置nginx的配置文件,其通常是/etc/nginx下的nginx.conf
(centOs)。
我们先不急着打开这个文件,因为我并不建议直接配置这个文件,我们应该先创建一个新的文件,然后采用include的方式,将这个文件包含进nginx.conf中。 (14条消息) 从零搭建Hexo博客并部署阿里云服务器(奶妈级教学)_Object的博客-CSDN博客_阿里云搭建hexo
因此,在/etc/nginx/目录下创建一个文件夹 叫 vhost,在其中创建一个文件blog.conf。
1 | cd /etc/nginx |
写入以下内容:
1 | server{ |
其中,root一行的xxx改为存放你博客目录存放的地址,如: home\hexo;server_name一行的xxx改为你的域名或服务器公网ip。注意空格。
保存后退出。然后需要打开/etc/nginx/目录下的nginx.conf文件vim /etc/nginx/nginx.conf
按图include刚才修改blog配置文件
但是注意,此时只能用http访问!(巨大的坑)
添加https访问
首先申请一个ssl证书(可以申请阿里云免费的一年ssl证书,过程查询官网)
申请成功后得到两个文件:xxx.xxx.pem和xxx.xxx.key.
在服务器nginx安装路径下新建一个cert文件夹,并通过ssh将这两个文件上传至此文件夹
1 | mkdir cert && cd cert |
然后需要修改nginx.conf,在http段中的server按如下修改,部分代码所示:
1 | # Load modular configuration files from the /etc/nginx/conf.d directory. |
如此一来,路由便配置完成,重启nginx,便会立即生效。
1 | nginx -s reload |
访问时便可以通过公网ip或https+域名访问了(如果用域名访问,必须先备案,再解析到服务器ip)
配置git并连接本地
配置git的原因是,当我们发布博客时,便能够像部署到github或者gitee一样,通过命令就能一步部署。
先安装node.js
1 | curl -sL https://rpm.nodesource.com/setup_10.x | bash - |
再安装git
1 | yum install git |
配置一个git用户并修改权限:
1 | adduser git |
按图找到并添加框中语句:
保存退出,将权限改回:
1 | chmod 400 /etc/sudoers |
设置git用户密码:
1 | sudo passwd git |
在~目录生成公钥密钥文件:
1 | su git |
然后在.ssh文件夹中就会出现两个文件:id_rsa 和 id_rsa.pub。
id_rsa.pub是公钥文件,将其复制一份改名为authorized_keys
1 | cp id_rsa.pub authorized_keys |
修改权限:
1 | chmod 600 ~/.ssh/authorized_keys |
创建完成后,在本地电脑上执行
1 | ssh-keygen -t rsa -C "xxx@xxx" //你的邮箱 |
然后一直按enter直到出现密钥图案。
在C:\Users\用户名\.ssh
路径下找到id_rsa.pub
这个文件,复制其中内容到服务器刚刚创建的authorized_keys
文件中即可使用密钥登陆。
完成后返回到云服务器端。
我们需要创建一个钩子用来连接git仓库和博客仓库。
1 | cd ~ |
在文件中写入:
1 | git --work-tree=/home/hexo --git-dir=/home/git/blog.git checkout -f |
其中,work-tree后的地址是你博客目录存放的地址,不能写错。
完成后退出,赋权:
1 | chmod +x ~/blog.git/hooks/post-receive |
修改本地config.yml
在站点根目录打开config.yml:
1 | deploy: |
然后执行hexo三连。
deploy过程可能会遇到输入密码,密码是服务器管理员密码。
至此,便完成了所有配置,理论上便能通过设置的域名或者公网ip访问到博客了。
一种简单部署方式(不推荐)
如果你已经知道nginx的用法,也知道hexo博客最终显示的是public文件夹下的文件,那么就有了这种部署方式。
即直接将生成好的博客下的public文件夹整个上传至服务器,并用nignx部署即可,同样也能成功部署博客(本站的引导页即是用这种方式部署)。
优点:不需要经过上面的繁琐步骤,快速就能将博客部署到服务器。
缺点:毫无疑问,每次修改博客就麻烦了,都需要修改服务器上的文件,显然不适用于需要持续修改的博客,所以建议还是使用上面的部署方式吧,一劳永逸。
可能遇到的问题
1、配置完成后访问博客显示是403?
尝试方法:检查钩子中博客目录存放地址是否写错,博客下有无文件。
2、部署成功但是博客目录下没有文件?
尝试方法:检查是否给博客目录赋权,然后重新执行hexo三连。如果能成功部署,尝试本地clone服务器仓库看看能否成功。
3、部署后显示网站拒绝访问?
尝试方法:检查nginx监听端口是否为443,并是否添加了证书。如果是80端口,会因为浏览器默认强制使用http而导致不能访问(只能使用http访问)
nginx一些常用命令
开启、重启和关闭
1 | systemctl start nginx %开启服务器 |
开启并查看运行日志
服务器成功运行后,能够看到它的运行情况是很重要的,nginx提供了专门的运行日志accsee.log和错误日志error.log,但前者通常默认没有配置,因此需要修改。
首先修改配置文件:
1 | vi /etc/nginx/nginx.conf |
在https字段中添加如下这一行代码:
1 | access_log /etc/nginx/logs/access.log main; |
其中的/etc/nginx/logs/access.log
,改为你想保存的路径即可。然后重启服务器。
然后只需要打开access.log这个文件,便能查看访问日志。
nginx在nginx.conf配置文件中默认添加了error.log,只需要在开头几行语句找到它把路径修改即可。
提供一些相关常用命令:
统计ip访问量
1 | awk '{print $1}' access.log |sort | uniq -c | sort -n -r |
access.log日志只显示统计的第一列 ip
1 | awk '{print $1}' access.log |
nginx access.log日志统计第一列 ip ,排序 sort, 并去重 uniq -c ,去重后,根据访问次数重新\排序 sort -n\ ,实现 top排行
1 | awk '{print $1}' access.log |sort | uniq -c | sort -n |
参考文章
从零搭建Hexo博客并部署阿里云服务器(奶妈级教学)_Object的博客-CSDN博客_阿里云搭建hexo