搭建博客(Hexo)到云服务器

本文最后更新于:2025年6月25日 晚上

搭建Hexo博客

安装Hexo

安装 Hexo 相当简单,只需要先安装下列应用程序即可:

  • Node.js (Node.js 版本需不低于 10.13,建议使用 Node.js 12.0 及以上版本)
  • Git

如果您的电脑中已经安装上述必备程序,那么恭喜您!你可以直接前往 安装 Hexo 步骤。

如果您的电脑中尚未安装所需要的程序,请根据以下安装指示完成安装。

安装 Git

  • Windows:下载并安装 git
  • Mac:使用 Homebrew, MacPorts 或者下载 安装程序
  • Linux (Ubuntu, Debian):sudo apt-get install git-core
  • Linux (Fedora, Red Hat, CentOS):sudo yum install git-core

Mac 用户

如果在编译时可能会遇到问题,请先到 App Store 安装 Xcode,Xcode 完成后,启动并进入 Preferences -> Download -> Command Line Tools -> Install 安装命令行工具。

Windows 用户

对于中国大陆地区用户,可以前往 淘宝 Git for Windows 镜像 下载 git 安装包。

安装 Node.js

Node.js 为大多数平台提供了官方的 安装程序。对于中国大陆地区用户,可以前往 淘宝 Node.js 镜像 下载。

其它的安装方法:

  • Windows:通过 nvs(推荐)或者 nvm 安装。
  • Mac:使用 HomebrewMacPorts 安装。
  • Linux(DEB/RPM-based):从 NodeSource 安装。
  • 其它:使用相应的软件包管理器进行安装,可以参考由 Node.js 提供的 指导

对于 Mac 和 Linux 同样建议使用 nvs 或者 nvm,以避免可能会出现的权限问题。

Windows 用户

使用 Node.js 官方安装程序时,请确保勾选 Add to PATH 选项(默认已勾选)

For Mac / Linux 用户

如果在尝试安装 Hexo 的过程中出现 EACCES 权限错误,请遵循 由 npmjs 发布的指导 修复该问题。强烈建议 不要 使用 root、sudo 等方法覆盖权限

Linux

如果您使用 Snap 来安装 Node.js,在 初始化 博客时您可能需要手动在目标文件夹中执行 npm install

安装 Hexo

所有必备的应用程序安装完成后,即可使用 npm 安装 Hexo。

$ npm install -g hexo-cli

进阶安装和使用

对于熟悉 npm 的进阶用户,可以仅局部安装 hexo 包。

$ npm install hexo

安装以后,可以使用以下两种方式执行 Hexo:

  1. npx hexo <command>
  2. Linux 用户可以将 Hexo 所在的目录下的 node_modules 添加到环境变量之中即可直接使用 hexo <command>
echo 'PATH="$PATH:./node_modules/.bin"' >> ~/.profile

Node.js 版本限制

如果你坚持使用旧的 Node.js,你可以考虑安装 Hexo 的过去版本。

请注意,我们不提供对过去版本 Hexo 的错误修复。

我们强烈建议永远安装 最新版本 的 Hexo,以及 推荐的 Node.js 版本

Hexo 版本最低版本 (Node.js 版本)最高版本 (Node.js 版本)
6.2+12.13.0latest
6.0+12.13.018.5.0
5.0+10.13.012.0.0
4.1 - 4.28.1010.0.0
4.08.68.10.0
3.3 - 3.96.98.0.0
3.2 - 3.30.12未知
3.0 - 3.10.10 或 iojs未知
0.0.1 - 2.80.10未知

上次更新:2023-10-25

使用Fluid主题

搭建 Hexo 博客

如果你还没有 Hexo 博客,请按照 Hexo 官方文档 (opens new window)进行安装、建站。

获取最新版本

方式一

Hexo 5.0.0 版本以上,推荐通过 npm 直接安装,进入博客目录执行命令:

npm install --save hexo-theme-fluid

然后在博客目录下创建 _config.fluid.yml,将主题的 _config.yml (opens new window)内容复制过去。

方式二

下载 最新 release 版本 (opens new window)解压到 themes 目录,并将解压出的文件夹重命名为 fluid

指定主题

如下修改 Hexo 博客目录中的 _config.yml

theme: fluid  # 指定主题

language: zh-CN  # 指定语言,会影响主题显示的语言,按需修改

创建「关于页」

首次使用主题的「关于页」需要手动创建:

hexo new page about

创建成功后修改 /source/about/index.md,添加 layout 属性。

修改后的文件示例如下:

---
title: 标题
layout: about
---

这里写关于页的正文,支持 Markdown, HTML

WARNING

layout: about 必须存在,并且不能修改成其他值,否则不会显示头像等样式。

更新主题

方式一

适用于通过 Npm 安装主题。

在博客目录下执行命令:

npm update --save hexo-theme-fluid

方式二

适用于通过 Release 压缩包安装主题,且没有自行修改任何代码的情况。

  1. 先将原文件夹重命名为别的名称,例如 fluid-bkp,用于升级失败进行回退;
  2. 按照安装步骤,重新下载 release (opens new window)并解压重命名为 fluid
  3. 如果某些配置发生了变化(改名或弃用),release 的说明里会特别提示,同步修改原配置文件即可。

方式三

适用于自定义了一些代码,或想体验其他分支的情况,以 dev 分支为例。

  1. 确定自己的 fluid 目录已经开启 git,并且所有改动都已 commit;
  2. 把 fluid 仓库的 develop 分支拉取到自己当前的分支上(也可新建一个分支再拉取):
git pull https://github.com/fluid-dev/hexo-theme-fluid.git develop
  1. 解决代码冲突,保留自己修改的部分(如何解决冲突可自行搜索)。

部署博客到云服务器

部署环境

本地环境:Windows 10 LTSC 1809

服务器环境:CentOS Linux release 7.9.2009 (Core)


Git环境安装

本地生成 Git 密钥

Git使用Https协议,每次pull,push都要输入密码,使用相当不便利,使用git协议,然后使用ssh密钥,就可以省去每次都输入密码

ssh-keygen -C "your@mail.com"

一路回车之后,在本地的 C:\Users\hhu\.ssh下会有 两个文件 公钥:id_rsa.pub私钥:id_rsa,一会要把公钥里的内容复制到服务器上配置

服务器上的的配置git环境

1、安装Git

  1. 切换到 root 用户

  2. 安装包的依赖

    yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
    yum install  gcc perl-ExtUtils-MakeMaker
  3. 进入/usr/local/src 目录,下载Git(这里用2.34.1),并解压

    cd /usr/local/src
    wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.34.1.tar.gz
    tar -zxvf git-2.34.1.tar.gz
  4. 进入解压目录,编译,安装(prefix是前缀,安装在指定目录)

    cd git-2.34.1
    make prefix=/usr/local/git all
    make prefix=/usr/local/git install
  5. 配置环境变量

    vim /etc/profile	# 编辑环境配置文件
    # 配置GIT
    export GIT_HOME=/usr/local/git/bin
    export PATH=$GIT_HOME/bin:$PATH
    source /etc/profile		# 刷新环境配置文件,使配置的信息生效
  6. git –version 测试

    git --version

    显示下列信息就标识成功了:

    git version 2.34.1

2、配置git用户

  1. 创建git用户并设置密码

    useradd git		# 添加git用户
    passwd git		# 给git用户设置密码
  2. 将 git 用户添加到 sudoers 文件中

    centos系统中的用户可以分为两类:

    • 超级用户– root
    • 普通用户–其他

    su和sudo的区别如下:

    • su命令主要作用:让你可以切换用户身份,来执行某种操作的命令,在已经登录的会话中(不登出当前用户的情况下)切换到另外一个用户
    • sudo命令作用:容许当前用户特定用户去执行特定命令
    chmod 740 /etc/sudoers  # 临时更改文件的权限,进行编辑
    vim /etc/sudoers		# 编辑sudoers
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    
    # 添加下面这行
    git      ALL=(ALL)       ALL
    chmod 400 /etc/sudoers	# 把权限改回去
  3. 配置公钥

    vim /home/git/.ssh/authorrized_keys		# 在git用户下的.ssh目录下创建 authorrized_keys 文件
    # 复制本机环境(C:\Users\hhu\.ssh) 的 id_rsa.pub 中的内容到 authorrized_keys 中
  4. 测试

    在本机环境下的git_bash中(不要用CMD),输入下列命令进行验证:

    ssh -v git@服务器ip

    如果最后一行显示的是:Host key verification faild,把Windows中.ssh/known_hosts这个文件的第二行删掉即可。

    注意:如果服务器ssh端口不是默认的 22 的,需要在本机环境下,用 git_bashC:\Users\hhu.ssh 下创建 config 文件(没有后缀),内容如下:

    # 如果是域名 访问
    Host xxx
    HostName xxx.com
    Port 3333
    
    # 如果是 IP 访问
    Host "211.111.xx.xxx"
    Port 3333

3、创建博客网站的目录

  1. 使用root用户在 /home/www/ 目录下创建 TheBlogOfHH(名称随意)

  2. 权限给 git 用户,不然后续自动推送可能会出现权限问题

    chown -R git:git /home/www/TheBlogOfHH

4、自动推送

  1. 在git用户家目录创建一个git仓库,把前面本地搭建好的博客文件传到这儿来进行管理

    cd /home/git						# 进入家目录
    git init --bare TheBlogOfHH.git		# 初始化仓库
  2. 创建钩子文件,用以自动推送

    vim TheBlogOfHH.git/hooks/post-receive	# 创建钩子文件

    添加以下内容:

    #!/bin/sh
    git --work-tree=/home/www/TheBlogOfHH --git-dir=/home/git/TheBlofOfHH.git checkout -f

    注意:上述第一个 work-tree是存放博客文件的目录,后面 git-dir 是 刚刚初始化好的仓库的目录

  3. 最后,赋予这个文件可执行权限

    chmod +x /home/git/TheBlofOfHH.git/hooks/post-receive

本地博客 _config.yml 配置

**编辑本地博客的 _config.yml **文件,最后的位置更改如下:

# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
  type: git
  repo: git@IP地址:/home/git/TheBlogOfHH.git
  branch: master 

Nginx环境安装

接下来的操作都是在服务器端

1、安装组件

  1. 安装gcc

    gcc是linux下的编译器在此不多做解释,感兴趣的小伙伴可以去查一下相关资料,它可以编译 C,C++,Ada,Object C和Java等语言

    yum -y install gcc		# 安装gcc
    
    gcc -v					# 查看版本
  2. pcre、pcre-devel安装

    pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。

    yum install -y pcre pcre-devel
  3. zlib安装

    zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装

    yum install -y zlib zlib-devel
  4. 安装openssl

    openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。。。。。。

    yum install -y openssl openssl-devel

2、安装Nginx

  1. 切换 root 用户,进入 /usr/local/src 目录

  2. 下载nginx安装包,解压

    wget http://nginx.org/download/nginx-1.9.9.tar.gz

    tar -xvf nginx-1.9.9.tar.gz
  3. 编译、安装

    cd nginx-1.9.9
    
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module		# 设置安装目录为 /usr/local/nginx
    
    make && make install		# 编译并且安装
  4. 启动

    cd /usr/local/nginx/sbin		# 进入安装目录的 sbin 目录
    
    ./nginx							# 启动Nginx
  5. 验证

    浏览器输入服务器IP进行访问

  6. 设置Nginx开机自启动

    vim /lib/systemd/system/nginx.service		# 创建 nginx.service 文件

    nginx.service文件内容如下:

    [Unit]
    #描述服务
    Description=nginx
    #描述服务类别
    After=network.target
     
    #服务运行参数的设置,注意【Service】的启动、重启、停止命令都要用绝对路径
    [Service]
    #后台运行的形式
    Type=forking
    #服务具体运行的命令
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    #重启命令
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    #停止命令
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    #表示给服务分配独立的临时空间
    PrivateTmp=true
     
    #运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
    [Install]
    WantedBy=multi-user.target

    加入开机启动:systemctl enable nginx.service

    取消加入开机启动:systemctl disable nginx.service

配置nginx

  1. 进入 /usr/local/nginx/conf
  2. 编辑 nginx.conf
# 注意配置这个 user,默认的是 nobody,可能会造成权限问题
user  root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  codeofhh.cn;	
        # 重定向到 https链接
	rewrite ^(.*)$ https://$server_name$1 permanent;
    }

    server {
        listen       443 ssl;
        server_name  codeofhh.cn;

        # 安全证书位置,没有的需要取下载nginx配置的证书
        ssl_certificate      /usr/local/nginx/cert/server.crt;
        ssl_certificate_key  /usr/local/nginx/cert/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers  on;

        location / {
            # 博客网站目录
            root   /home/www/TheBlogOfHH;
            index  index.html index.htm;
        }

	error_page 404 /404.html;
	location /404.html {
		root /home/www/TheBlogOfHH/404.html;
	}
	
	error_page 500 502 503 504 /50x.html;
	location /50x.html {
		root /usr/local/nginx/html;
	}
  }
}
  1. 重启nginx

    systemctl restart nginx.service

注意:上述文件中配置了ssl证书,如果没有证书记得删除那段配置,如果有,需要下载下来放到/usr/local/nginx/cert目录,并改名字

Nginx常见报错:

  1. INFO Validating config ERROR Deployer not found: git

    解决方法:

    原因:少了hexo针对git的deploy组件

    解决方法:npm install –save hexo-deployer-git

  2. 上传证书没权限

    使用root权限将上传文件夹权限修改为可读可写

    chmod -R 777 xxx
  3. nginx: [emerg] unknown directive "ssl_certificate1" in /usr/local/nginx/conf/nginx.conf:107

    原因:这是因为没有安装SSL模块

    方法:

    在Nginx安装文件解压目录执行

    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
    
    make    # 注意,不是 make install,否则会覆盖安装的Nginx
  4. 网页报错:NGINX - ERR_SSL_PROTOCOL_ERROR

    在Nginx配置中设置 https server中 的监听,除了有 443之外,还要加一个 ssl

在本机推送博客文件到服务器

  1. hexo g 生成静态html文件
  2. 执行hexo d推送到服务器

搭建博客(Hexo)到云服务器
https://codeofhh.cn/2023/06/30/部署Hexo到云服务器/
作者
hhu
发布于
2023年6月30日
许可协议