之前趁着阿里云的轻量服务器打折,入手了一台服务器,既然有了服务器自然不能让它闲着,这里记录一下把博客部署到云服务器上的过程。

准备条件

  1. 云服务器(阿里云/腾讯云/其他)。
  2. (可选)域名。如果选择国内服务器,需要进行icp备案。
  3. nginx、 git、nodejs。
  4. 现有的hexo博客。(如果没有,可以参考 将《使用hexo搭建个人博客》

开始配置

以centOs系统为例

配置控制台安全组规则

在阿里云控制台下云服务器的安全组规则中添加80端口(http)和443端口(https)。

当然,如果想使用域名访问,那么域名必须先备案,否则端口会被限制。

配置服务器环境

通常选择的是nginx。

Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强。—-百度百科

使用yum安装nginx:

1
yum install -y nginx

启动nginx服务器:

1
2
systemctl start nginx
systemctl enable nginx

启动之后,就可以使用服务器的公网ip访问网站了。成功访问即代表成功。

image-20210806234853640

如果看到的页面不一样,是因为nginx对于不同的linux发行版提供的版本不一样,因此初始页面也不一样,总之只要能访问到页面就算成功。

设置博客目录

在你想要存放博客目录的地址下创建文件夹,比如:/home/hexo

1
2
cd /home
mkdir hexo

然后赋权。这步很重要,可能影响到部署。

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
2
3
cd /etc/nginx
mkdir vhost && cd vhost
vim blog.conf

写入以下内容:

1
2
3
4
5
6
7
server{
listen 80;
root xxx;
server_name xxx;
location /{
}
}

其中,root一行的xxx改为存放你博客目录存放的地址,如: home\hexo;server_name一行的xxx改为你的域名或服务器公网ip注意空格

保存后退出。然后需要打开/etc/nginx/目录下的nginx.conf文件
vim /etc/nginx/nginx.conf

按图include刚才修改blog配置文件

image-20210816124538349

但是注意,此时只能用http访问!(巨大的坑)

添加https访问

首先申请一个ssl证书(可以申请阿里云免费的一年ssl证书,过程查询官网)

申请成功后得到两个文件:xxx.xxx.pem和xxx.xxx.key.

在服务器nginx安装路径下新建一个cert文件夹,并通过ssh将这两个文件上传至此文件夹

1
mkdir cert && cd cert 

然后需要修改nginx.conf,在http段中的server按如下修改,部分代码所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    # Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
# for more information.
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/vhost/*.conf;
server {

listen 443 ssl;
listen 80 default_server;
listen [::]:80 default_server;
server_name ccs.zone;
root /home/hexo;

index index.html index.htm;
ssl_certificate cert/xxx.xxx.pem; #需要将cert-file-name.pem替换成
已上传的证书文件的名称。
ssl_certificate_key cert/xxx.xxx.key; #需要将cert-file-name.key替>换成已上传的证书密钥文件的名称。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

如此一来,路由便配置完成,重启nginx,便会立即生效。

1
nginx -s reload 

访问时便可以通过公网ip或https+域名访问了(如果用域名访问,必须先备案,再解析到服务器ip)

配置git并连接本地

配置git的原因是,当我们发布博客时,便能够像部署到github或者gitee一样,通过命令就能一步部署。

先安装node.js

1
2
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install -y nodejs

再安装git

1
yum install git

配置一个git用户并修改权限:

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

按图找到并添加框中语句:

image-20210816125641236

保存退出,将权限改回:

1
chmod 400 /etc/sudoers

设置git用户密码:

1
sudo passwd git

在~目录生成公钥密钥文件:

1
2
3
4
5
su git
cd ~
mkdir .ssh
cd .ssh
ssh-keygen

然后再.ssh文件夹中就会出现两个文件:id_rsaid_rsa.pub

id_rsa.pub是公钥文件,将其复制一份改名为authorized_keys

1
cp id_rsa.pub authorized_keys

修改权限:

1
2
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

确保上面无误后完,在本地电脑上打开CMD连接服务器

1
ssh -v git@云服务器的公网ip

然后按提示操作即可,中途会要求输密码。完成后显示:Welcome to Alibaba Cloud Elastic Compute Service !,表明登录成功。

完成后返回到云服务器端

我们需要创建一个钩子用来连接git仓库和博客仓库。

1
2
3
cd ~
git init --bare blog.git
vim ~/blog.git/hooks/post-receive

在文件中写入:

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
2
3
4
deploy:
branch: master
type: git
repo: git@服务器公网ip:/home/git/blog.git

然后执行hexo三连。

deploy过程可能会遇到输入密码,密码是服务器管理员密码。

至此,便完成了所有配置,理论上便能通过设置的域名或者公网ip访问到博客了。

一种简单部署方式(不推荐)

如果你已经知道nginx的用法,也知道hexo博客最终显示的是public文件夹下的文件,那么就有了这种部署方式。

直接将生成好的博客下的public文件夹整个上传至服务器,并用nignx部署即可,同样也能成功部署博客(本站的引导页即是用这种方式部署)。

优点:不需要经过上面的繁琐步骤,快速就能将博客部署到服务器。

缺点:毫无疑问,每次修改博客就麻烦了,都需要修改服务器上的文件,显然不适用于需要持续修改的博客,所以建议还是使用上面的部署方式吧,一劳永逸。

可能遇到的问题

1、配置完成后访问博客显示是403?

尝试方法:检查钩子中博客目录存放地址是否写错,博客下有无文件。

2、部署成功但是博客目录下没有文件?

尝试方法:检查是否给博客目录赋权,然后重新执行hexo三连。如果能成功部署,尝试本地clone服务器仓库看看能否成功。

3、部署后显示网站拒绝访问?

尝试方法:检查nginx监听端口是否为443,并是否添加了证书。如果是80端口,会因为浏览器默认强制使用http而导致不能访问(只能使用http访问)

nginx一些常用命令

开启、重启和关闭

1
2
3
4
5
6
7
systemctl start nginx %开启服务器

nginx -s reload %重启服务器

nginx -s stop %关闭服务器

kill -9 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

(Nginx开启访问日志记录_weixin_30830327的博客-CSDN博客

根据nginx日志统计ip访问量_wudinaniya的博客-CSDN博客_nginx 统计ip