(四)PVE LXC容器安装OpenWrt当旁路由科学和插件安装及Hexo博客部署

一. 准备工作

1. 下载OpenWrt CT模板

  • 复制以下命令到PVE终端下载OpenWrt CT模板
  • 主路由已经安装跳过这一步
1
wget -q -O /var/lib/vz/template/cache/immortalwrt-24.10.0-x86-64-rootfs.tar.gz 'https://github.ixin.top/https://github.com/Thx-Zq/PVE-/releases/download/LXC_OpenWrt/immortalwrt-24.10.0-x86-64-rootfs.tar.gz'

2. 安装OpenWrt容器

  • 复制以下命令到PVE终端安装OpenWrt容器
1
2
3
4
5
6
7
8
9
10
pct create 101 \
local:vztmpl/immortalwrt-24.10.0-x86-64-rootfs.tar.gz \
--rootfs xt:5 \
--ostype unmanaged \
--hostname OpenWrt \
--arch amd64 \
--cores 2 \
--memory 512 \
--swap 0 \
-net0 bridge=vmbr0,name=eth0

解释:
pct create:容器创建命令
101:容器ID,可根据自己情况设定
local:vztmpl/immortalwrt-24.10.0-x86-64-rootfs.tar.gz: 上传/下载到local—CT模板中的OP固件全名
--rootfs:模版为rootfs文件
local-lvm:1 :模板安装后磁盘镜像所在(部分小伙伴可能只有1个local没有local-lvm,注意用local),冒号后数字代表分配磁盘大小(单位G)按需设置,1为1G,2为2G
--ostype unmanaged:操作系统类型,这里没有填写指定的操作系统(不会影响)
--hostname Openwrt-LXC:主机名(容器名称)可自定义。
--arch amd64:设置为64位
--cores 1:分配给容器的核心数,1:1核,2:2核等等(按需设置)
--memory 512:分配给容器最大的内存数量(单位M)(按需设置)
--swap 0:交换分区设置为0(按需设置)
-net0 bridge=vmbr0,name=eth0:网卡,上桥接PVE默认虚拟网桥vmbr0,名称eth0。必须,否则op无法联网。

3. 编辑 nano /etc/pve/lxc/101.conf

  • 添加以下特权
1
2
3
4
5
6
7
8
9
10
11
12
features: keyctl=1,mknod=1,nesting=1
lxc.apparmor.profile: unconfined
lxc.include: /usr/share/lxc/config/openwrt.common.conf
lxc.cgroup2.devices.allow: a
lxc.cap.drop:
lxc.mount.auto: proc:mixed sys:ro cgroup:mixed
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
lxc.net.0.flags: up
lxc.net.0.type: veth
lxc.net.0.link: vmbr0
lxc.net.0.name: eth0
lxc.net.0.hwaddr: aa:aa:aa:aa:aa:a1

解释:

lxc.net.0.flags: up #别动
lxc.net.0.type: veth #虚拟口“veth”,直通口“phys”
lxc.net.0.link: vmbr0 #该处为虚拟口的名称,直通的填写主机显示网口的名称(这是我的主机管理网口,一定不要直通,但是帅小伙都会搞直通,然后帅帅的问)。
lxc.net.0.name: eth0 #虚拟机中显示网口的名称。
lxc.net.0.hwaddr: aa:aa:aa:aa:aa:a1 #虚拟mac地址,不填写会自动生成。

二. 初始化

1. 启动OP-LXC容器

  1. 编辑 vi /etc/config/network
  2. 键盘按 i 进入编辑模式修改IP
  3. 修改完IP后键盘按 ESC 退出编辑模式——英文冒号 :wq 回车保存退出
  4. service network restart 重启网络服务

2. 浏览器中输入OP-LXC的IP 登录WebUI

  • 初始化网络接口
  1. 网关(主路由)
  2. DNS(主/备2个较好)
  3. HDCP(关闭此处DHCP和动态 DHCP)
  4. IPv6(关闭)

3. 开启IPv6

添加新接口

opp-lan6.png

op-p-lan6.png

三. 插件安装

进入 系统-软件包-更新列表**

  1. ttyd 终端
  2. luci-app-advanced-reboot 高级重启
  3. luci-app-filemanager 文件管理器
  • 安装iStore商店(ARM64 & x86-64通用)
1
2
3
4
5
opkg update || exit 1
cd /tmp
wget https://github.ixin.top/https://github.com/linkease/openwrt-app-actions/raw/main/applications/luci-app-systools/root/usr/share/systools/istore-reinstall.run
chmod 755 istore-reinstall.run
./istore-reinstall.run
  • 安装网络向导和首页(ARM64 & x86-64通用)
1
is-opkg install luci-i18n-quickstart-zh-cn

四. 科学上网所需依赖安装

1
2
3
4
5
6
7
8
9
#iptables
opkg update
opkg install bash iptables dnsmasq-full curl ca-bundle ipset ip-full iptables-mod-tproxy iptables-mod-extra ruby ruby-yaml kmod-tun kmod-inet-diag unzip luci-compat luci luci-base
opkg install /tmp/openclash.ipk

#nftables 建议安装这个其他的不用安装
opkg update
opkg install bash dnsmasq-full curl ca-bundle ip-full ruby ruby-yaml kmod-tun kmod-inet-diag unzip kmod-nft-tproxy luci-compat luci luci-base kmod-nft-socket
opkg install /tmp/openclash.ipk

五. 终端免密登录

编辑 vi /etc/config/ttyd 文件目录

  • /bin/login 后面加 -f root 变成 ‘/bin/login -f root’

op-zd.png

输入命令 /etc/init.d/ttyd reload 生效

六. 部署hexo博客

安装Node.js

  1. 更新包管理器
1
opkg update
  1. 安装Node.js
1
opkg install node node-npm
  1. 安装完成后,检查是否安装成功。执行node -v命令,看到版本信息,则说明安装成功。
  2. 修改npm源。npm下载各种模块,默认是从国处服务器下载,速度较慢,建议配置成华为云镜像源。打开CMD窗口,运行如下命令:
1
npm config set registry https://mirrors.huaweicloud.com/repository/npm/

安装git

1
opkg install git git-http
  1. 配置git用户名和邮箱
1
2
git config --global user.name Thx-Zq
git config --global user.email thx719@163.com
  • 通过git config -l 检查是否配置成功。
  1. 安装ssh
1
opkg install openssh-keygen openssh-client
  1. 配置公钥连接Github
1
ssh-keygen -t rsa -C thx719@163.com
  • 提示Enter file in which to save the key直接一路回车即可,新手小白不推荐设置密钥
  • 之后打开root目录文件夹下的.ssh的文件夹,会看到以下文件
  • id_rsa私钥
  • id_rsa.pub公钥
  1. 将 SSH KEY 配置到 GitHub
  • 进入github,点击右上角头像 选择settings,进入设置页后选择 SSH and GPG keys,名字随便起,公钥填到Key那一栏。
  1. 测试连接,输入以下命令
1
ssh -T git@github.com
  • 第一次连接会提示Are you sure you want to continue connecting (yes/no/[fingerprint])?,输入yes即可

创建GitHub.io仓库

  • 点击右上角的+按钮,选择New repository,创建一个<用户名>.github.io的仓库。
  • 仓库名字的格式必须为:<用户名>.github.io (注意:前缀必须为用户名,此为预览博客需要,后期可修改仓库名)
  • 可见性必须选择 Public 方便第一次部署检查问题,点击 Creat repository 进行创建即可

初始化 Hexo 博客

  1. 创建一个文件夹用来保存博客源码
1
mkdir -p ~/hexo
  1. 在终端输入如下命令安装 Hexo
1
npm install -g hexo-cli && hexo -v
  • 安装完后输入hexo -v验证是否安装成功。

3. 初始化 Hexo 项目安装相关依赖。

1
2
3
hexo init hexo     这个需要科学环境
cd hexo
npm i

初始化项目后,hexo目录下有如下结构:

  • node_modules:依赖包
  • scaffolds:生成文章的一些模板
  • source:用来存放你的文章
  • themes:主题
  • .npmignore:发布时忽略的文件(可忽略)
  • _config.landscape.yml:主题的配置文件
  • config.yml:博客的配置文件
  • package.json:项目名称、描述、版本、运行和开发等信

4. 将静态博客挂载到 GitHub Pages

  1. 安装 hexo-deployer-git
1
npm install hexo-deployer-git --save
  1. 修改 _config.yml 文件
  • 在hexo目录下的_config.yml,就是整个Hexo框架的配置文件了。可以在里面修改大部分的配置。详细可参考官方的配置描述
  • 修改最后一行的配置,将repository修改为你自己的github项目地址即可,还有分支要改为main代表主分支(注意缩进)。
1
2
3
4
deploy:
type: git
repository: git@github.com:Thx-Zq/Thx-Zq.github.io.git
branch: main

七. 安装主题

  1. 在博客根目录里安装最新版主题
1
2
cd hexo
git clone -b main https://github.com/anzhiyu-c/hexo-theme-anzhiyu.git themes/anzhiyu
  1. 第一次使用需要安装 pug 以及 stylus 的渲染器
1
npm install hexo-renderer-pug hexo-renderer-stylus --save

应用主题

  1. 修改 hexo 配置文件_config.yml,把主题改为anzhiyu
1
theme: anzhiyu

覆盖配置

  1. 覆盖配置可以使主题配置放置在 anzhiyu 目录之外,避免在更新主题时丢失自定义的配置。
1
cp -rf ./hexo/themes/anzhiyu/_config.yml ./hexo/_config.anzhiyu.yml

以后如果修改任何主题配置,都只需修改 _config.anzhiyu.yml 的配置即可。

注意:

  • 只要存在于 _config.anzhiyu.yml 的配置都是高优先级,修改原 _config.yml 是无效的。
  • 每次更新主题可能存在配置变更,请注意更新说明,可能需要手动对 _config.anzhiyu.yml 同步修改。
  • 想查看覆盖配置有没有生效,可以通过 hexo g --debug 查看命令行输出。
  • 如果想将某些配置覆盖为空,注意不要把主键删掉,不然是无法覆盖的

配置主题与主站配置文件

  1. 生成标签页和分类页
1
2
3
cd hexo
hexo new page tags
hexo new page categories
  1. 找到 source/tags/index.md 这个文件,修改添加 type: "tags"
1
2
3
4
5
6
7
---
title: 标签
date: 2025-02-028 20:30:00
type: "tags"
comments: false
top_img: false
---
  1. 找到 source/categories/index.md 这个文件,修改添加 type: "categories"
1
2
3
4
5
6
7
---
title: 分类
date: 2025-02-028 20:31:00
aside: false
top_img: false
type: "categories"
---

剩下的工作就是配置_config.yml_config.anzhiyu.yml文件,修改博客参数。

配置文章模版

/scaffolds目录下有几个模版文件,其中

  • post.md:新建博文模版
  • page.md:新建标签页模版
  1. post.md模版,仅供参考
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
---
title: {{ title }} #【必需】页面标题
date: {{ date }} #【必需】页面创建日期
updated: #【可选】页面更新日期
tags: #【可选】文章标签
categories: #【可选】文章分类
keywords: #【可选】文章关键字
description: #【可选】文章描述
top: # 1 置顶
top_img: #【可选】文章顶部图片
comments: #【可选】显示文章评论模块(默认 true)
cover: https://img.090227.xyz/file/ae62475a131f3734a201c.png #【可选】文章缩略图(如果没有设置 top_img,文章页顶部将显示缩略图,可设为 false/图片地址/留空)
toc: #【可选】显示文章 TOC(默认为设置中 toc 的 enable 配置)
toc_number: #【可选】显示 toc_number(默认为设置中 toc 的 number 配置)
toc_style_simple: #【可选】显示 toc 简洁模式
copyright: #【可选】显示文章版权模块(默认为设置中 post_copyright 的 enable 配置)
copyright_author: #【可选】文章版权模块的文章作者
copyright_author_href: #【可选】文章版权模块的文章作者链接
copyright_url: #【可选】文章版权模块的文章作者链接
copyright_info: #【可选】文章版权模块的版权声明文字
mathjax: #【可选】显示 mathjax(当设置 mathjax 的 per_page: false 时,才需要配置,默认 false)
katex: #【可选】显示 katex(当设置 katex 的 per_page: false 时,才需要配置,默认 false)
aplayer: #【可选】在需要的页面加载 aplayer 的 js 和 css,请参考文章下面的音乐 配置
highlight_shrink: #【可选】配置代码框是否展开(true/false)(默认为设置中 highlight_shrink 的配置)
aside: #【可选】显示侧边栏 (默认 true)
swiper_index: 10 #【可选】首页轮播图配置 index 索引,数字越小越靠前
top_group_index: 10 #【可选】首页右侧卡片组配置, 数字越小越靠前
ai: #【可选】文章ai摘要
background: "#fff" #【可选】文章主色,必须是16进制颜色且有6位,不可缩减,例如#ffffff 不可写成#fff
---

<div class="video-container">
[up主专用,视频内嵌代码贴在这]
</div>

<style>
.video-container {
position: relative;
width: 100%;
padding-top: 56.25%; /* 16:9 aspect ratio (height/width = 9/16 * 100%) */
}

.video-container iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
</style>

  1. page.md模版,仅供参考
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
---
title: {{ title }} #【必需】页面标题
date: {{ date }} #【必需】页面创建日期
type: #【必需】标签、分类、关于、音乐馆、友情链接、相册、相册详情、朋友圈、即刻页面需要配置
updated: #【可选】页面更新日期
comments: #【可选】显示页面评论模块(默认 true)
description: #【可选】页面描述
keywords: #【可选】页面关键字
top_img: https://img.090227.xyz/file/ae62475a131f3734a201c.png #【可选】页面顶部图片
mathjax: #【可选】显示 mathjax(当设置 mathjax 的 per_page: false 时,才需要配置,默认 false)
katex: #【可选】显示 katex(当设置 katex 的 per_page: false 时,才需要配置,默认 false)
aside: #【可选】显示侧边栏 (默认 true)
aplayer: #【可选】在需要的页面加载 aplayer 的 js 和 css,请参考文章下面的音乐 配置
highlight_shrink: #【可选】配置代码框是否展开(true/false)(默认为设置中 highlight_shrink 的配置)
top_single_background: #【可选】部分页面的顶部模块背景图片
---

更多功能

文章置顶

安装插件

1
npm install hexo-generator-topindex --save

设置置顶

给需要置顶的文章加入top参数,如下:

1
2
3
4
5
6
7
8
9
---
title: 每天一个linux命令
date: 2017-01-23 11:41:48
top: 1
categories:
- 运维
tags:
- linux命令
---

如果存在多个置顶文章,top后的参数越大,越靠前。

开启本地搜索

安装插件

你需要安装 hexo-generator-search,根据它的文档去做相应配置

1
npm install hexo-generator-search --save

设置主题配置文件

1
2
3
4
local_search:
enable: true
preload: false
CDN:
参数 解释
enable 是否开启本地搜索
preload 预加载,开启后,进入网页后会自动加载搜索文件。关闭时,只有点击搜索按钮后,才会加载搜索文件
CDN 搜索文件的 CDN 地址(默认使用的本地链接)

字数统计

你需要安装hexo-wordcount

1
npm install hexo-wordcount --save

修改 主题配置文件:

1
2
3
4
5
wordcount:
enable: true
post_wordcount: true
min2read: true
total_wordcount: true

安知鱼主题官方文档

新建文章

新建博文命令

1
hexo new 这是一篇新的博文

新建标签页命令

1
hexo new page 新建的标签页

确认无误后使用以下命令,将本地文章推送至GitHub仓库即可

1
2
3
4
5
6
7
// Git BASH终端
hexo cl && hexo g && hexo d

// 或者

// VSCODE终端
hexo cl; hexo g; hexo d

本地进行预览

1
2
3
4
5
6
7
// Git BASH终端
hexo cl && hexo s

// 或者

// VSCODE终端
hexo cl; hexo s