使用 Hexo 搭建个人博客并部署到云服务器
目前搭建博客的主流框架有 WordPress、VuePress、Hugo、Hexo 等等,我主要是感觉 Hexo 好看的主题比较多,所以就来折腾一下这个博客框架
1 整体流程
- 在本地运行 hexo deploy 命令,Hexo 会将生成的静态文件(hexo generate)推送到远程的 Git 仓库
- 在 Git 仓库中,配置一个钩子脚本,它会在接收到推送后执行——将最新的静态文件强制覆盖到指定的工作目录
- 在 Nginx 服务器中,配置访问根路径的请求指向该工作目录
2. 本地环境准备
2.1 安装 Node.js 和 Git
这两个我是很早就安装好了,网上也有大量的资料,我就不重复了,这里主要记录 Hexo 相关笔记
(1) 验证 Node.js是否安装成功,打开 cmd 输入node -v
,出现版本信息,则 ok
C:\Users\gzl>node -v
v18.16.1
(2) 验证 Git 是否安装成功,打开 cmd 输入git --version
,出现版本信息,则 ok
C:\Users\gzl>git --version
git version 2.39.0.windows.2
同时在文件夹中点击右键会出现 Git Bash Here
2.2 安装 Hexo
(1) 新建一个文件夹用来存储个人博客:E:\MyBlog
进入该文件夹,进入 Git Bash,输入npm install -g hexo-cli
将 Hexo 命令行工具安装到系统的全局环境中
gzl@gzl MINGW64 /e/MyBlog
$ npm install -g hexo-cli
(2) 待安装完毕,输入以下指令,将会新建一个 myblogs 文件夹,并且安装 Hexo 项目所需的依赖项
# 创建一个新的 Hexo 项目
$ hexo init myblogs
$ cd myblogs
# 安装 Hexo 项目所需的依赖项
$ npm install
最后,会在 myblogs 文件中生成如下文件:
(3) 继续在 Git Bash 中执行指令hexo server
$ hexo server
执行完毕后,打开本地浏览器,访问http://localhost:4000/
,出现以下界面,说明第一步成功了
3. 服务端环境准备
3.1 Nginx 环境配置
3.1.1 安装 Nginx
依次执行以下指令
# 安装 nginx 依赖环境,遇到 yes 选 yes
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
# 下载并解压 nginx 安装包
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
tar -xvf nginx-1.10.1.tar.gz -C /usr/local
# 执行配置文件
cd /usr/local/nginx-1.10.1
./configure
# 编译并安装 nginx
make
make install
# 开放 80 端口
cd /usr/local/nginx
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# 启动 nginx
cd sbin
./nginx
没有任何消息,代表启动成功,在浏览器访问公网ip:80
就可以进入 nginx 页面了
如果需要停止 nginx 服务,执行./nginx -s stop
3.1.2 更改 Nginx 配置文件
需要将 Nginx 的配置文件中网站的根目录(root)指向 hexo 的部署目录,以及修改域名(server_name)为自己已备案的域名,如果没有,则填公网ip
所以,首先创建一个文件用来存放 hexo 的部署文件
mkdir -p /data/hexo
然后修改 nginx 配置文件
cd /usr/local/nginx/conf
vim nginx.conf
# 进入后,按 i 键进入编辑模式
修改server_name
和root
即可
server {
listen 80;
server_name www.cheyaoyao.cn;
location / {
root /data/hexo;
}
...
}
修改完毕后按 Esc 键进入命令模式,再输入 :wq 保存并退出
3.2 Node.js 环境配置
安装 node.js,依次执行以下命令:
# 切换到根目录,安装 node.js
cd ~
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install -y nodejs
# 查看安装结果,打印对应版本号则安装成功
node -v
npm -v
3.3 Git 环境配置
3.3.1 安装 Git
依次执行以下命令:
# 安装,遇到 yes 选 yes
yum install git
# 查看版本号
git --version
3.3.2 创建 Git 用户
依次执行以下指令:
# 创建git用户
adduser git
# 修改git用户的权限
chmod 740 /etc/sudoers
# 进入 sudo 命令文件
vim /etc/sudoers
找到root ALL=(ALL) ALL
,在下面添加git ALL=(ALL) ALL
继续执行以下指令
# 修改文件权限
chmod 400 /etc/sudoers
# 设置 git 用户的密码
sudo passwd git
3.3.3 配置 SSH 免密登录
由于是将本地的静态文件推送到服务器的 Git 仓库中,所以要配置 ssh 免密登录服务器
(1) 在服务端,依次执行以下指令:
# 切换到 git 用户
su git
# 在根目录创建.ssh文件夹,存放公钥
cd ~
mkdir .ssh
(2) 在本地计算机打开 Git Bash,执行以下指令
# 在本地生成公钥/私钥对
$ cd ~
$ cd .ssh
$ ssh-keygen
遇到系统询问,就按回车键。最后生成的公钥和秘钥会自动保存在C:\Users\gzl\.ssh
目录下
(3) 给私钥设置权限,执行以下指令:
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa
(4) 将本地的公钥(id_rsa.pub)上传到服务器的/home/git/.ssh
目录下
(5) 新建authorized_keys
文件,并拷贝公钥的内容到该文件中,依次执行以下指令:
cd ~/.ssh
cp id_rsa.pub authorized_keys
cat id_rsa.pub >> ~/.ssh/authorized_keys
# 设置权限
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
# 确保 SSH 相关的文件和目录具有正确的 SELinux 安全标签
restorecon -Rv ~/.ssh
(6) 测试本地免密登录服务器
进入本地计算机的 Git Bash,输入:
$ ssh -v git@xxx.xxx.xxx.xxx(公网IP)
最后面会出现:
3.3.4 配置 Git 仓库
(1) 在服务器新建一个 Git 仓库,同时新建一个钩子文件
cd ~
git init --bare hexo.git
vi ~/hexo.git/hooks/post-receive
输入git --work-tree=/data/hexo --git-dir=/home/git/hexo.git checkout -f
,保存并退出
(2) 授予钩子文件可执行权限
chmod +x ~/hexo.git/hooks/post-receive
cd ~
sudo chmod -R 777 /data/hexo
重启 ECS 实例,服务端配置完成
4. 部署 Hexo 博客到服务端 Git 仓库
(1) 在本地计算机打开 Hexo 项目,我用的 vscode,修改_config.yml
文件中的deploy
:
deploy:
type: git
repo: git@公网ip:/home/git/hexo.git
branch: master
(2) 安装插件,hexo-deployer-git 和 hexo-server
# 用于将 Hexo 生成的静态文件推送到指定的 Git 仓库
npm install hexo-deployer-git --save
# 用于在本地启动一个 Hexo 服务器,方便在本地预览博客
npm install hexo-server
(3) 配置 Git 全局变量
回到 Git Bash,输入:
# email 和 name 随便填一个也可以
$ git config --global user.email "xxxxxxxxxx@xx.com"
$ git config --global user.name "xxx"
(4) 生成静态文件和发布博客
在 vscode 的终端中输入:
# 清除之前生成的静态文件
hexo clean
# 生成静态文件
hexo generate
# 部署到 Git 仓库
hexo deploy
至此,已经全部配置完毕了
如果在 nginx 中配置了域名的话,可以通过域名访问博客了,没配置也可以用公网ip访问
下一篇就研究怎么美化博客吧
5. Hexo 写作新文章并发布
(1) 在 vscode 中打开 Hexo 项目,打开终端,使用如下命令创建新文章
hexo new "title"
执行该命令,Hexo 会在/source/_posts
目录下创建一篇新的文章
(2) Front-matter
Hexo 创建的文件中开头有一段配置信息:
这个叫做Front-matter
,即前置信息,用于给 Hexo 渲染该 md 文档
配置项 | 意义 |
---|---|
title | 网页文章标题 |
date | 文章创建如期 |
tags | 文章标签 |
(3) 发布文章
随便编写点内容
在终端依次输入:
# 清除之前生成的静态文件
hexo clean
# 生成静态文件,hexo generate 的简写
hexo g
# 本地启动,hexo server 的简写
hexo s
可以在本地预览文章
最后部署到远程的 Git 仓库中
# 部署到 Git 仓库,hexo deploy 的简写
hexo d
稍微等一下,在浏览器访问域名,就可以看到了
相关文章:

过滤器模式 rust和java的实现
文章浏览阅读301次。我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。我们制作一个Person实体类,Criteria为标准条件,CriteriaMale等为实现的具体判断器,是需要为person类使用meetCriteria方法便可以进行不同条件的判断。我们制作一个Person实体类,Criteria为标准条件,CriteriaMale等为实现的具体判断器,是需要为person类使用meetCriteria方法便可以进行不同条件的判断。

python最流行的适合计算积分和微分方程的库
SciPy有一个子模块scipy.integrate,包含多种数值积分方法,如牛顿哥特法(quad)、梯形法(trapz)、辛普森法(simps)等

c语言如何生成随机数以及设置随机数的范围
这篇文章介绍c语言如何生成随机数以及设置随机数的范围。本文主要介绍了rand函数、srand函数、以及time函数和时间戳的概念和如何控制随机数的范围。下一篇文章将介绍利用随机数和循环来写一个猜数字游戏。

Java虚拟机的垃圾回收机制
在Java语言中不再被任何引用所指向的对象被称为垃圾,这也是非常容易理解的,因为我们在对对象进行创建时,就需要给出一个对象引用变量用于指向我们在堆内存中创建的对象,所以如果一个对象没有被任何引用变量所指向的话,那么我们也就获取不到对象,也就没有办法对对象进行操作,这个对象自然就成了垃圾。引用计数算法判断对象是否为垃圾时比较方便快捷只是根据计数器中的值进行判断,但是会在每个对象的对象头中添加属性占用额外的空间,并且引用变量每一次指向对象都需要对对象的属性进行更新操作,占用大量的时间。为什么需要回收垃圾?

require()、import、import()有哪些区别?
require()、import、import()是我们常用的引入模块的三种方式,代码中几乎处处用到。如果对它们存在模糊,就会在工作过程中不断产生困惑,更无法做到对它们的使用挥洒自如。今天我们来一起捋一下,它们之间有哪些区别? 一、前世今生 学一个东西,先弄清楚它为什么会出现、它的发展历史、它是做什

如何保护电动汽车充电站免受网络攻击
文章浏览阅读228次。从电动汽车、传感器、充电站和支持基础设施的设计阶段开始就强调安全性作为首要任务。

Vite4+Typescript+Vue3+Pinia 从零搭建(3) - vite配置
项目代码同步至码云 weiz-vue3-template 关于vite的详细配置可查看 vite官方文档,本文简单介绍vite的常用配置。 初始内容 项目初建后,vite.config.ts 的默认内容如下: import { defineConfig } from 'vite' i

原型模式 rust和java的实现
文章浏览阅读218次。意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。主要解决:在运行期建立和删除原型。何时使用: 1、当一个系统应该独立于它的产品创建,构成和表示时。2、当要实例化的类是在运行时刻指定时,例如,通过动态装载。3、为了避免创建一个与产品类层次平行的工厂类层次时。4、当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。如何解决:利用已有的一个原型对象,快速地生成和原型对象一样的实例。关键代码。

c语言const修饰变量与assert断言详解
const修饰变量与assert断言详解,const修饰变量。作用:const用于修饰变量使其不能再被修改。

Linux如何修改主机名(hostname)(亲测可用)
文章浏览阅读1k次。要想在虚拟机的 Linux 系统内部改变主机名(hostname),需要通过系统的配置来修改。文件,将其中引用旧主机名的条目更新为新主机名。文件,并将里面的内容替换为新主机名。但是大多数情况可能无需更改,除非在。文件里做了什么硬编码骚操作🤣。替换为想要设置的新主机名。或者使用文本编辑器手动编辑。需要重新设置主机名。

Linux下内网穿透实现云原生观测分析工具的远程访问
夜莺监控是一款开源云原生观测分析工具,采用 All-in-One 的设计理念,集数据采集、可视化、监控告警、数据分析于一体,与云原生生态紧密集成,提供开箱即用的企业级监控分析和告警能力。夜莺于 2020 年 3 月 20 日,在 github 上发布 v1 版本,已累计迭代 100 多个版本。本地部署后,为解决无法远程访问的难题,今天我们介绍如何实现让本地nightingale 结合cpolar 内网穿透工具实现 远程也可以访问,提高运维效率.

Java Lambda 表达式笔记
文章浏览阅读71次。Lambda 表达式,也可称为闭包.Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

JavaScript中如何终止forEach循环?
在JavaScript中,forEach方法是用于遍历数组的,通常没有直接终止循环的机制。然而,我们可以使用一些技巧来模拟终止forEach循环。以下是几种常见的方法

Docker本地部署Drupal并实现公网访问
文章浏览阅读498次,点赞35次,收藏33次。Dupal是一个强大的CMS,适用于各种不同的网站项目,从小型个人博客到大型企业级门户网站。它的学习曲线可能相对较陡,但一旦熟悉了它的工作方式,用户就能够充分利用其功能和灵活性。在本文中,我们将介绍如何使用Docker快速部署Drupal,并且结合cpolar内网穿透工具实现公网远程访问首先,您需要在您的机器上安装Docker,并且启动,可以按照Docker官方文档中的说明进行安装。

如何使用 RestTemplate 进行 Spring Boot 微服务通信示例
概述 下面我们将学习如何创建多个 Spring boot 微服务以及如何使用 RestTemplate 类在多个微服务之间进行同步通信。 微服务通信有两种风格: 同步通讯 异步通信 同步通讯 在同步通信的情况下,客户端发送请求并等待服务的响应。这里重要的一点是协议(HTTP/HTTPS)是同步的,客

win10 通过wmic命令行设置系统环境变量
而通过编程修改系统环境变量,需要调用注册表API或调用wmi API接口,都有些过于麻烦。此时,如果通过system函数,直接调用批处理文件,则只需要一行代码。批处理中,分别给出了创建环境变量,修改环境变量,删除环境变量的demo。可以根据需要调整批处理文件。在系统维护或编写程序过程中,经常需要对系统环境变量进行设置、修改、删除炒作。注:修改系统环境变量,需要有管理员权限。

c#操作mongodb数据库工具类
新建c#项目,在nuget中引入MongoDB.Driver驱动,然后新建一个MongoDBToolHelper类,将下面代码复制进去 using MongoDB.Bson; using MongoDB.Bson.Serialization; using MongoDB.Driver; using

Redis查看集群状态有节点显示fail,连接失败
现有6台redis,为集群,3主3从,由于两台服务器故障重装系统之后进行重新安装2台redis,安装完成之后。查询当前redis状态,发现有存留的节点,但连接为fai。将新建的两台redis启动,保证配置文件一致。查询fail节点的node_id。将新建的两台redis设为从节点。登录新建的两台redis服务器。先通过ID删掉无用的节点。

SpringBoot整合Kafka (二)
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景,比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

SpringBoot整合Kafka (一)
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景,比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

深入详解高性能消息队列中间件 RabbitMQ
在进行系统设计的时候,各个模块、服务器之间为了实现数据的交互,通常是建立连接通过发送消息来进行。如果将他们一一建立连接,就会出现链路太多,每一条链路都必须感知对端等问题。此场景下消息将非常混乱,后期维护也将非常痛苦。

ModuleNotFoundError: No module named ‘config‘
当你在Python代码中看到类似"ModuleNotFoundError: No module named 'config'"的错误消息时,意味着你尝试导入一个名为'config'的模块,但Python无法找到该模块

【云原生基础】了解云原生,什么是云原生?
云原生(Cloud-Native)是一种软件开发和部署方法论,旨在利用云计算、容器化、微服务架构和持续交付等现代技术和最佳实践,以构建、部署和运行可伸缩、高可用、弹性和易于管理的应用程序。云原生应用程序旨在充分发挥云计算的潜力,以更好地满足快速发展的数字业务需求。容器化:云原生应用程序通常使用容器技术(如Docker)进行封装,使应用程序及其依赖项可以在不同环境中一致运行。容器化提供了隔离、可重复部署和快速部署的好处。

【微服务】mysql + elasticsearch数据双写设计与实现
在很多电商网站中,对商品的搜索要求很高,主要体现在页面快速响应搜索结果。这就对服务端接口响应速度提出了很高的要求。

Python异常处理:try、except、else 和 finally 的使用指南
Python异常处理:try、except、else 和 finally 的使用指南

HarmonyOS 数据管理与应用数据持久化(二)
文章浏览阅读31次。关系型数据库基于 SQLite 组件,适用于存储包含复杂关系数据的场景,比如一个班级的学生信息,需要包括姓名、学号、各科成绩等,又或者公司的雇员信息,需要包括姓名、工号、职位等,由于数据之间有较强的对应关系,复杂程度比键值型数据更高,此时需要使用关系型数据库来持久化保存数据。

HarmonyOS数据管理与应用数据持久化(一)
文章浏览阅读599次。一.

Ubuntu系统下怎么安装Docker(linux安装docker教程)
更新系统软件包 在安装 Docker 前,首先需要更新系统软件包,确保系统上的软件都是最新的版本

python实战讲解之使用Python批量发送个性化邮件
通过上述Python脚本,我们可以批量发送个性化的邮件。我们首先设置发件人邮箱和密码,然后指定SMTP服务器和端口号。接下来,我们读取包含员工信息的Excel文件,并获取唯一的员工姓名列表和对应的邮箱地址。然后,我们遍历员工数据,并为每个员工创建邮件,附带相应的附件。最后,我们通过SMTP服务器发送邮件,并在发送完成后删除生成的员工数据文件。

什么是加密?浅谈MD5加密
文章浏览阅读108次。加密解密是一种通过使用密码算法对信息进行转换,以使其在传输或存储过程中变得不可读或难以理解,从而保护信息的安全性和隐私性的过程。加密是将明文(原始文本)转换为密文(加密后的文本)的过程。在加密过程中,使用密钥和特定的算法来改变原始文本的形式,使其在未经授权的情况下无法理解。只有持有正确密钥的人才解密是将密文转换回明文的过程。数字摘要算法(Digital Digest Algorithm)是一种加密算法,用于将任意长度的数据转换为固定长度的摘要(也称为哈希值)。