从零开始搭建Hexo静态博客
本文主要讲述如何搭建Hexo纯静态个人博客
相对于 WordPress 的优势:
不需要购买虚拟主机搭载
支持 MarkDown 语法,支持本地编写、预览和最终发布(Git Push)
本文涉及的技术点:
🚆 Github Pages (搭载服务)、Coding (搭载服务)、Vercel(搭载服务)、LeanCloud (存储服务)
💺 Hexo(博客框架)、ButterFly(博客主题)
🚀 DNSPod (域名解析加速)、jsDeliver (CDN资源加速)
💡 PicGo(图床工具)、PicGo-Plugin-Watermark(图床水印插件)
准备工作
一个国外域名(国内域名需备案) 访问 NameSilo 域名提供商
Windows 系统安装 Git
下载 Git
安装 Git 教程
Windows 系统安装 Node.js(建议使用 12.0 及以上版本) ...
【DevOps Roadmap】 第二章《理解不同操作系统的概念》
Please do not throw sausage pizza away.
Networking 计算机网络Computer networking refers to interconnected computing devices that can exchange data and share resources with each other. These networked devices use a system of rules, called communications protocols, to transmit information over physical or wireless technologies.
计算机网络是指可以相互连接并交换数据以及共享资源的计算设备。这些网络设备使用一套被称为通信协议的规则系统,在物理或无线技术上传输信息。
Begin by studying the OSI Model. This model will assist in constructing an understanding of the linked top ...
【DevOps Roadmap】 第一章《Go基础》
gopher [ˈɡoʊfər] n. 囊地鼠(产自北美的一种地鼠)
命令
go mod init example.com/greetings:初始化项目 ,会生成go.mod,标明你使用的go version
go run main.go:运行main.go
go build main.go:打包(windows打包为linux可执行文件)
12$Env:GOARCH="amd64";$Env:GOOS="linux"go build main.go
数据类型声明方式
声明一个变量1var i = 1
声明多个变量1234var ( i string = "10" j int = 20)
省略类型声明1234var ( i = "10" j = 20)
省略var(常用)
12i := "10"j := 20
基础数据类型整形
有符号整型(负数、0和正数):如 int(可能是 32bit,也可能是 64bit,和硬件设备 CPU 有关)、int8、 ...
SpringBoot + WebSocket (token) + Vue 代码
SpringBoot都是绿色的
前言由于网上各式各样的 WebSocket 代码都太旧了,前端后端代码的坑又特别多,所以总结了一套自己常用的 WebSocket 代码,这个代码仅针对单体应用
背景前端需要与后端建立一个长连接,用于传递新用户订阅的通知,并实时发送给前端的所有用户。传统的代码能用,但却面临以下痛点:
如何校验连接的安全性
如何防止连接断开
对于 如何校验连接的安全性 ,网上许多拆东墙补西墙的方法,是在 URL 做手脚,也就是将 token 以 ws://xx.xx.xx.xx:8080/application/{userId}?token={token} 这样的形式发送给后端,后端通过获取请求行中的内容,得到 token,再进行验证操作。
但有一天我通过 goaccess 分析 Nginx 日志,一下子就看到了许多用户的 ws 请求,上面的 token 写的可真是一清二楚,这对于生产环境来说,太危险了,如果有人得到了这份日志,就可以匿名做任何事情。
如果不在 URL 做手脚,但 WebSocket 又不支持请求体存放内容 ...
Hexo butterfly 常用的标签
提示类info
success
primary
warning
danger
12345678910111213141516171819{% note info icon %}info{% endnote %}{% note success icon %}success {% endnote %}{% note primary icon %}primary {% endnote %}{% note warning icon %}warning {% endnote %}{% note danger icon %}warning {% endnote %}
隐藏类下拉式隐藏这是一个彩蛋
123{% hideToggle 【选读/点击查看】,bg,color %}这是一个彩蛋{% endhideToggle %}
...
【k3s】2023 Ubuntu Server + K3s + Rancher
环境声明
系统
配置
节点
部署
Ubuntu-Server(20.04)
2c4g
root@m1(192.168.1.150)
k3s(v1.24.6+k3n1) server + rancher(2.7.1)+ Helm(3.10.3)
Ubuntu-Server(20.04)
1c2g
root@n1(192.168.1.151)
k3s(v1.24.6+k3n1) agent + Helm(3.10.3)
【选读/点击查看/Ubuntu-Server安装和配置】安装 Ubuntu-Server下载地址:Get Ubuntu Server | Download | Ubuntu
语言:English
是否更新:Continue without updating
键盘选中文
自定义网卡
12345Subnet: 子网掩码 192.168.1.0/24Address: ip地址 192.168.1.150GateWay: 网关 192.168.1.1Name servers: DNS 223.5.5.5Search domain ...
ECK 安装文档
版本信息
CORE
VERSION
PORT
ORDER
OTHER
Elasticsearch
7.13.3
9200 9300
1
搜索引擎
Kibana
7.13.3
5601
2
数据可视化
Canal-Admin
1.1.15
8489 11110(Admin) 11111(tcp) 11112(metric)
3
Canal管理页面
Canal-Server
1.1.15
4
Canal数据同步,MySQL同步ES(1.1.16版本有bug,回调至低版本)
Prometheus
2.37.0
9090
5
采集
Grafana
9.0.4
3000
6
可视化
Node_exporter
1.3.1
9100
7
系统监控采集
P.S. 服务器为Linux,本文涉及到的ip地址请自行根据个人情况更改,所有组件部署全为单机部署,大部分为服务方式启动,本文仅简单记录部署过程,仅供参考,切勿完全照搬。
准备工作必备组件1yum -y install nano tar net-tools
JDK需要大于等于1.8版本
123 ...
MySQL优化
一只小海豚
索引的常见类型底层哈希表哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。如果计算后的哈希值相同,则以链表的形式存在。
但由于哈希表并不是顺序存储,因此哈希索引做区间查询的速度是很慢的,它更适用于等值查询,比如 Memcached 及其他一些 NoSQL 引擎。
有序数组有序数组在等值查询和范围查询场景中的性能就都非常优秀,但是,在需要更新数据的时候就麻烦了,你往中间插入一个记录就必须得挪动后面所有的记录,成本太高。所以,有序数组索引只适用于静态存储引擎。
二叉搜索树二叉搜索树的特点是:每个节点的左儿子小于父节点,父节点又小于右儿子。二叉树是搜索效率最高的,但是实际上大多数的数据库存储却并不使用二叉树。其原因是,索引不止存在内存中,还要写到磁盘上。
你可以想象一下一棵 100 万节点的平衡二叉树,树高 20。一次查询可能需要访问 20 个数据块。在机械硬盘时代,从磁盘 ...
Java分库分表
这个图标让我想起了火狐
Java分库分表概念对于分库分表的概念,建议查看这篇文章:[00 如何正确学习一款分库分表开源框架?.md (lianglianglee.com)](https://learn.lianglianglee.com/专栏/ShardingSphere 核心原理精讲-完/00 如何正确学习一款分库分表开源框架?.md),这篇文章大致讲述了分库分表的起源、原因以及各种解决方案。
本文主要讲述如何使用 ShardingSphere ,通过Java代码来分库分表,对于该组件的详细说明请参考概览 :: ShardingSphere (apache.org)。
引入Maven1234567891011121314151617<properties> <sharding-sphere.version>4.1.1</sharding-sphere.version> <shardingsphere.version>5.1.0</shardingsphere.version></properties& ...
TinyPNG搭配GitHub Action实现自动压缩上传图片
起因在使用Typora搭配PicGo自动上传图片至GitHub图床时,图片是未被压缩的,导致博客在GitHub图床上获取图片的时间很长。因此想通过TinyPNG无损压缩图片,并通过GitHub Action自动压缩并替换原图,从而实现自动压缩并上传图片的功能。
项目地址 :https://github.com/leopold7/Learn_Tinify_Image_Action
步骤申请 Tinify API key申请地址:https://tinypng.com/developers
在你的邮箱中点击链接登录后,选择 Add API key,即可生成。
请记住此token
申请 GitHub Token在GItHub中点击头像,选择 Settings
选择Developer settings
选择 Personal access tokens -> Generate new token
按照下图勾选即可
请记住此token
配置yaml在GitHub项目中创建GitHub Action 所需的yaml配置文件,路径为 /.github/workflows/,文件名为 ...
55r 指令笔记
55r 指令笔记防火墙1234567891011121314// 查看防火墙开启端口号firewall-cmd --list-port// 开启 tcp8080 端口firewall-cmd --zone=public --add-port=8080/tcp --permanent// 开启 udp8080 端口firewall-cmd --zone=public --add-port=8080/udp --permanent// 开启 udp1024-65535端口firewall-cmd --zone=public --add-port=1024-65535/udp --permanent// 重载防火墙firewall-cmd --reload
udp2raw1/opt/udp2raw/udp2raw_amd64 -s -l 0.0.0.0:高位端口1 -r 127.0.0.1:高位端口2 --raw-mode faketcp -a -k "你的密码"
udpspeeder1/opt/udpspeeder/speederv2_amd64 -s -l 0.0 ...
V2-ui转X-ui的升级与配置
前言自从在腾讯轻量云搭载V2-ui以来,稳定使用后就没再有过改动,由于最近入手了xbox,需要使用加速器,想到自身环境有利,便着手于对现有环境进行改造,发现V2-ui已经替换为X-ui。本文主要记录升级替换过程中遇到的问题,以及在nginx上的一些操作。
背景旧版使用的V2-ui采用HTTP域名访问的方式,共用443端口后,通过nginx进行分发到面板端口和地址。
系统采用的是CentOS。
开始更新及安装组件12yum update -y #CentOS 命令yum install -y curl #CentOS 命令
升级 X-ui1bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)
启动 X-ui1x-ui
V2-ui ~ X-ui 数据迁移1x-ui v2-ui
仅迁移帐号,面板设置和用户名密码不会迁移。
停止V2-ui123456789101112131415161718192021222324252627282930[root@ ...
领域驱动架构笔记
事件驱动架构为何要引入事件驱动架构(Event-Driven Architecture)
解耦合:事件驱动架构是高度松耦合且高度分布式的架构模型,事件的创建者(来源)只知道发生的事件,并不知道事件的处理方式,也不关心有多少相关方订阅该事件。解耦合在微服务中只需要单次调用其他微服务,剩余的微服务调用只需要通过事件总线bus执行即可。
异步执行:EDA 架构是异步场景下最适合的执行工具,我们可以将需要事件保留在队列中,直到状态正常后执行。
可扩展性:事件驱动架构可以通过路由&过滤能力快速划分服务,提供更便捷的扩展与路由分发。
敏捷性:事件驱动架构可以通过将事件分发至任何地方,提供更敏捷高效的部署方案。
事件驱动架构重点的地方在于哪里
For Event Capturing(事件收集):具备采集事件的能力
For Routing(事件路由):通过事件内容将事件路由分发至于下游的能力的(交给Pulsar处理)
For Event Processing(事件过滤/替换):对事件进行脱敏或初步过滤&筛选的能力(哪些事件需要执行,哪些事件需要丢弃,哪些事件的数据需要脱敏)
事件驱 ...
2021年Java对接APP支付宝API笔记
在图标的设计上,微信和支付宝都选择超出背景部分。
前言由于工作需求,需要添加统一支付功能,微信已经有人对接过,因此我主要负责对接支付宝,本文主要记录Java对接支付宝的步骤,以及服务改造。
支付宝API文档确保支付所需的证书和参数正确下,我第一步选择查看官方API文档:https://opendocs.alipay.com/apis
由于项目是APP项目,且只涉及到支付与退款,因此我选择查看 alipay.trade.app.pay(app支付接口2.0) 和 alipay.trade.refund(统一收单交易退款接口)。
APP支付的含义是:外部商户APP唤起快捷SDK创建订单并支付。因此,我们得知,是APP通过阿里SDK调起支付宝,对于后端而言,我们只需要生成 符合规则的订单串 给前端,由前端唤起即可。
在查看支付宝官方的请求示例后,我并没有直接动手按照请求示例的代码开始编写测试,而是选择先Google下 ,有没有更好的服务端SDK供我们使用,果不其然,我发现了支付宝官方升级版SDK, Alipay Easy SDK:https://github.com/alipay/ ...
Goland GitLab import 的步骤
gopher [ˈɡoʊfər] n. 囊地鼠(产自北美的一种地鼠)
Linux 系统
如果是私有仓库(GitLab),请先确保你能通过 git clone 命令克隆这个项目
shell 输入命令 nano ~/.gitconfig ,确认 git 的用户名,密码,代理以及强制替换的 GitLab 地址:(Ctrl+x 离开、Y 写入、Enter 确认文件)
1234567891011[user] name = your name email = your email[core] autocrlf = input [http "https://github.com"] proxy = socks5://127.0.0.1:1089[url "git@gitlab.com:"] insteadOf = https://gitlab.com/
确保代理能成功使用
Goland 里输入 Ctrl + Alt + S 进入设置页面,选择 Go -> ...
MongoDB 笔记
Mongo的图标是一片🍃
简介MongoDB是一个开源、高性能、无模式(不像列级)的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种,是最像关系型数据库(MySQL)的非关系型数据库。
它支持的数据结构非常松散,是一种类似于 JSON 的格式叫 BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。
MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。
SQL术语/概念
MongoDB术语/概念
解释/说明
database
database
数据库
table
collection
数据库表/集合
row
document
数据记录行/文档
column
field
数据字段/域
index
index
索引
table joins
表连接 MongoDB不支持
嵌入文档
Mongo ...