diff --git a/404.html b/404.html index 9e442612..1cca6f8c 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ -页面不存在 - 漠北残月的博客
\ No newline at end of file +页面不存在 - 漠北残月的博客
\ No newline at end of file diff --git a/404.html.br b/404.html.br index f879b598..f61bd440 100644 Binary files a/404.html.br and b/404.html.br differ diff --git a/404.html.gz b/404.html.gz index 9e4037c0..c8c14a6c 100644 Binary files a/404.html.gz and b/404.html.gz differ diff --git a/about/index.html b/about/index.html index 2f0d044f..6b5fc5ae 100644 --- a/about/index.html +++ b/about/index.html @@ -1 +1 @@ -关于 - 漠北残月的博客
avatar
Fluid
A boring person

你好 👋

欢迎来到漠北残月的博客,这是一个记录技术与日常的自留地。

本博客使用了 Hexo 开源静态框架,开源主题 Fluid,本站全静态网页无 cookie(但是必应每日一图有,微软干的😁)。

源代码托管于 Github 并自动构建,通过 Cloudflare Pages 和 Cloudflare CDN 部署在 Cloudflare 的全球边缘网络上。大力感谢 Cloudflare 的优质服务支持。


Cloudflare


由于奇奇怪怪的玄学原因,百度并没有收录本站,且我无法在百度搜索资源平台提交(总是提示 300 跳转),所以除了百度的主流搜索引擎都可以搜索到本站,如 Google、Bing(必应)、DuckDuckGo、Yandex、Yahoo(雅虎)等。

网站访问情况可通过 https://umami.ovvv.top/share/SYu8qUKmty52PW9w/blog 查看。

如果本站出现异常,请尝试刷新页面或者清除浏览器缓存(ctrl+f5)。或者访问本站镜像:



本站支持

\ No newline at end of file +关于 - 漠北残月的博客
avatar
Fluid
A boring person

你好 👋

欢迎来到漠北残月的博客,这是一个记录技术与日常的自留地。

本博客使用了 Hexo 开源静态框架,开源主题 Fluid,本站全静态网页无 cookie(但是必应每日一图有,微软干的😁)。

源代码托管于 Github 并自动构建,通过 Cloudflare Pages 和 Cloudflare CDN 部署在 Cloudflare 的全球边缘网络上。大力感谢 Cloudflare 的优质服务支持。


Cloudflare


由于奇奇怪怪的玄学原因,百度并没有收录本站,且我无法在百度搜索资源平台提交(总是提示 300 跳转),所以除了百度的主流搜索引擎都可以搜索到本站,如 Google、Bing(必应)、DuckDuckGo、Yandex、Yahoo(雅虎)等。

网站访问情况可通过 https://umami.ovvv.top/share/SYu8qUKmty52PW9w/blog 查看。

如果本站出现异常,请尝试刷新页面或者清除浏览器缓存(ctrl+f5)。或者访问本站镜像:



本站支持

\ No newline at end of file diff --git a/about/index.html.br b/about/index.html.br index 6d4a2d1d..d2884208 100644 Binary files a/about/index.html.br and b/about/index.html.br differ diff --git a/about/index.html.gz b/about/index.html.gz index 475af954..0de404ed 100644 Binary files a/about/index.html.gz and b/about/index.html.gz differ diff --git a/archives/2023/12/index.html b/archives/2023/12/index.html index 9fd40a48..3dbf0c9e 100644 --- a/archives/2023/12/index.html +++ b/archives/2023/12/index.html @@ -1 +1 @@ -归档 - 漠北残月的博客
\ No newline at end of file +归档 - 漠北残月的博客
\ No newline at end of file diff --git a/archives/2023/12/index.html.br b/archives/2023/12/index.html.br index 73c6413c..3ad21502 100644 Binary files a/archives/2023/12/index.html.br and b/archives/2023/12/index.html.br differ diff --git a/archives/2023/12/index.html.gz b/archives/2023/12/index.html.gz index e814f482..8cb44f3a 100644 Binary files a/archives/2023/12/index.html.gz and b/archives/2023/12/index.html.gz differ diff --git a/archives/2023/12/page/2/index.html b/archives/2023/12/page/2/index.html index 20ff8596..e297b080 100644 --- a/archives/2023/12/page/2/index.html +++ b/archives/2023/12/page/2/index.html @@ -1 +1 @@ -归档 - 漠北残月的博客
\ No newline at end of file +归档 - 漠北残月的博客
\ No newline at end of file diff --git a/archives/2023/12/page/2/index.html.br b/archives/2023/12/page/2/index.html.br index 4e894a38..874077a2 100644 Binary files a/archives/2023/12/page/2/index.html.br and b/archives/2023/12/page/2/index.html.br differ diff --git a/archives/2023/12/page/2/index.html.gz b/archives/2023/12/page/2/index.html.gz index 938577df..156c7c36 100644 Binary files a/archives/2023/12/page/2/index.html.gz and b/archives/2023/12/page/2/index.html.gz differ diff --git a/archives/2023/index.html b/archives/2023/index.html index 2ccca441..83fc94d5 100644 --- a/archives/2023/index.html +++ b/archives/2023/index.html @@ -1 +1 @@ -归档 - 漠北残月的博客
\ No newline at end of file +归档 - 漠北残月的博客
\ No newline at end of file diff --git a/archives/2023/index.html.br b/archives/2023/index.html.br index 876427a8..2be8fb4a 100644 Binary files a/archives/2023/index.html.br and b/archives/2023/index.html.br differ diff --git a/archives/2023/index.html.gz b/archives/2023/index.html.gz index d57182f3..9f650da1 100644 Binary files a/archives/2023/index.html.gz and b/archives/2023/index.html.gz differ diff --git a/archives/2023/page/2/index.html b/archives/2023/page/2/index.html index 4b2fb385..fa86b5f8 100644 --- a/archives/2023/page/2/index.html +++ b/archives/2023/page/2/index.html @@ -1 +1 @@ -归档 - 漠北残月的博客
\ No newline at end of file +归档 - 漠北残月的博客
\ No newline at end of file diff --git a/archives/2023/page/2/index.html.br b/archives/2023/page/2/index.html.br index 3cbbecba..6480b231 100644 Binary files a/archives/2023/page/2/index.html.br and b/archives/2023/page/2/index.html.br differ diff --git a/archives/2023/page/2/index.html.gz b/archives/2023/page/2/index.html.gz index 8c716028..7c9186de 100644 Binary files a/archives/2023/page/2/index.html.gz and b/archives/2023/page/2/index.html.gz differ diff --git a/archives/2024/01/index.html b/archives/2024/01/index.html index 2886c7da..89adf7ce 100644 --- a/archives/2024/01/index.html +++ b/archives/2024/01/index.html @@ -1 +1 @@ -归档 - 漠北残月的博客
\ No newline at end of file +归档 - 漠北残月的博客
\ No newline at end of file diff --git a/archives/2024/01/index.html.br b/archives/2024/01/index.html.br index 4a57e526..ee76a264 100644 Binary files a/archives/2024/01/index.html.br and b/archives/2024/01/index.html.br differ diff --git a/archives/2024/01/index.html.gz b/archives/2024/01/index.html.gz index 550b16f9..1b70319e 100644 Binary files a/archives/2024/01/index.html.gz and b/archives/2024/01/index.html.gz differ diff --git a/archives/2024/02/index.html b/archives/2024/02/index.html index ba333269..e0f41bea 100644 --- a/archives/2024/02/index.html +++ b/archives/2024/02/index.html @@ -1 +1 @@ -归档 - 漠北残月的博客
\ No newline at end of file +归档 - 漠北残月的博客
\ No newline at end of file diff --git a/archives/2024/02/index.html.br b/archives/2024/02/index.html.br index 67dd246f..ece92409 100644 Binary files a/archives/2024/02/index.html.br and b/archives/2024/02/index.html.br differ diff --git a/archives/2024/02/index.html.gz b/archives/2024/02/index.html.gz index 589422bf..113d2b30 100644 Binary files a/archives/2024/02/index.html.gz and b/archives/2024/02/index.html.gz differ diff --git a/archives/2024/index.html b/archives/2024/index.html index d46f1ba3..72784a1f 100644 --- a/archives/2024/index.html +++ b/archives/2024/index.html @@ -1 +1 @@ -归档 - 漠北残月的博客
\ No newline at end of file +归档 - 漠北残月的博客
\ No newline at end of file diff --git a/archives/2024/index.html.br b/archives/2024/index.html.br index 8445aee1..43114d58 100644 Binary files a/archives/2024/index.html.br and b/archives/2024/index.html.br differ diff --git a/archives/2024/index.html.gz b/archives/2024/index.html.gz index 2da6b3f4..8a486ae0 100644 Binary files a/archives/2024/index.html.gz and b/archives/2024/index.html.gz differ diff --git a/archives/2024/page/2/index.html b/archives/2024/page/2/index.html index 28bb2b21..bfc1013b 100644 --- a/archives/2024/page/2/index.html +++ b/archives/2024/page/2/index.html @@ -1 +1 @@ -归档 - 漠北残月的博客
\ No newline at end of file +归档 - 漠北残月的博客
\ No newline at end of file diff --git a/archives/2024/page/2/index.html.br b/archives/2024/page/2/index.html.br index 0a2cf73c..5e1f0e6c 100644 Binary files a/archives/2024/page/2/index.html.br and b/archives/2024/page/2/index.html.br differ diff --git a/archives/2024/page/2/index.html.gz b/archives/2024/page/2/index.html.gz index e2c61a5d..26ef7abc 100644 Binary files a/archives/2024/page/2/index.html.gz and b/archives/2024/page/2/index.html.gz differ diff --git a/archives/index.html b/archives/index.html index a5229230..c4a9d837 100644 --- a/archives/index.html +++ b/archives/index.html @@ -1 +1 @@ -归档 - 漠北残月的博客
\ No newline at end of file +归档 - 漠北残月的博客
\ No newline at end of file diff --git a/archives/index.html.br b/archives/index.html.br index 423003b5..0354af02 100644 Binary files a/archives/index.html.br and b/archives/index.html.br differ diff --git a/archives/index.html.gz b/archives/index.html.gz index 7da01897..20fa1f7d 100644 Binary files a/archives/index.html.gz and b/archives/index.html.gz differ diff --git a/archives/page/2/index.html b/archives/page/2/index.html index fe2a4ca0..6bb56faa 100644 --- a/archives/page/2/index.html +++ b/archives/page/2/index.html @@ -1 +1 @@ -归档 - 漠北残月的博客
\ No newline at end of file +归档 - 漠北残月的博客
\ No newline at end of file diff --git a/archives/page/2/index.html.br b/archives/page/2/index.html.br index f94e3462..bc1b8df3 100644 Binary files a/archives/page/2/index.html.br and b/archives/page/2/index.html.br differ diff --git a/archives/page/2/index.html.gz b/archives/page/2/index.html.gz index 8202fe61..7cf3a3ca 100644 Binary files a/archives/page/2/index.html.gz and b/archives/page/2/index.html.gz differ diff --git a/archives/page/3/index.html b/archives/page/3/index.html index fc91780d..1174feea 100644 --- a/archives/page/3/index.html +++ b/archives/page/3/index.html @@ -1 +1 @@ -归档 - 漠北残月的博客
\ No newline at end of file +归档 - 漠北残月的博客
\ No newline at end of file diff --git a/archives/page/3/index.html.br b/archives/page/3/index.html.br index 6f1704a7..f5cb1790 100644 Binary files a/archives/page/3/index.html.br and b/archives/page/3/index.html.br differ diff --git a/archives/page/3/index.html.gz b/archives/page/3/index.html.gz index 9fcc4b12..e5e47ede 100644 Binary files a/archives/page/3/index.html.gz and b/archives/page/3/index.html.gz differ diff --git a/atom.xml b/atom.xml index 1dee7a7c..1d5efd8a 100644 --- a/atom.xml +++ b/atom.xml @@ -46,7 +46,7 @@ https://blog.ovvv.top/posts/1acd162e/ 2024-02-19T04:06:33.000Z - 2024-02-19T13:45:18.000Z + 2024-02-25T14:14:10.000Z @@ -62,6 +62,8 @@ + + @@ -145,7 +147,7 @@ https://blog.ovvv.top/posts/d6d74ca/ 2024-01-28T04:56:50.000Z - 2024-02-19T07:30:11.000Z + 2024-02-25T14:14:10.000Z @@ -160,6 +162,8 @@ + + @@ -167,7 +171,7 @@ https://blog.ovvv.top/posts/f297b285/ 2024-01-25T06:05:33.000Z - 2024-02-24T03:50:59.000Z + 2024-02-25T14:14:10.000Z @@ -182,6 +186,8 @@ + + @@ -350,7 +356,7 @@ https://blog.ovvv.top/posts/7671c28e/ 2023-12-29T08:39:46.000Z - 2023-12-30T03:03:39.000Z + 2024-02-25T14:14:10.000Z @@ -365,6 +371,8 @@ + + @@ -372,7 +380,7 @@ https://blog.ovvv.top/posts/6a24c2b/ 2023-12-29T02:27:37.000Z - 2023-12-29T09:30:47.000Z + 2024-02-25T14:14:10.000Z @@ -386,6 +394,8 @@ + + diff --git a/atom.xml.br b/atom.xml.br index d13ed947..107d21b7 100644 Binary files a/atom.xml.br and b/atom.xml.br differ diff --git a/atom.xml.gz b/atom.xml.gz index 5a475812..2582e171 100644 Binary files a/atom.xml.gz and b/atom.xml.gz differ diff --git a/categories/index.html b/categories/index.html index 21761ced..9224c850 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1 +1 @@ -分类 - 漠北残月的博客
\ No newline at end of file +分类 - 漠北残月的博客
\ No newline at end of file diff --git a/categories/index.html.br b/categories/index.html.br index 6a0128c5..03e6d978 100644 Binary files a/categories/index.html.br and b/categories/index.html.br differ diff --git a/categories/index.html.gz b/categories/index.html.gz index 45175d54..3bf0840e 100644 Binary files a/categories/index.html.gz and b/categories/index.html.gz differ diff --git a/images/avatar.ico b/images/avatar.ico new file mode 100644 index 00000000..b0f3ff49 Binary files /dev/null and b/images/avatar.ico differ diff --git a/images/blog.svg b/images/blog.svg deleted file mode 100644 index 670b2100..00000000 --- a/images/blog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/blog.svg.br b/images/blog.svg.br deleted file mode 100644 index 5247345f..00000000 --- a/images/blog.svg.br +++ /dev/null @@ -1,3 +0,0 @@ - vs0^Fy漠北残月的博客
\ No newline at end of file +漠北残月的博客
\ No newline at end of file diff --git a/index.html.br b/index.html.br index ddd539a8..64a4ddbf 100644 Binary files a/index.html.br and b/index.html.br differ diff --git a/index.html.gz b/index.html.gz index 0ffdd7e3..7803abcd 100644 Binary files a/index.html.gz and b/index.html.gz differ diff --git a/local-search.xml b/local-search.xml index a5f20d17..69138c47 100644 --- a/local-search.xml +++ b/local-search.xml @@ -31,6 +31,12 @@ + + + Fail2ban + + +
@@ -103,6 +109,12 @@ + + + seo + + + @@ -116,6 +128,12 @@ + + + open-source + + + @@ -257,6 +275,12 @@ + + + Giscus + + + @@ -270,6 +294,12 @@ + + + 优化 + + + @@ -491,7 +521,7 @@ /posts/4a17b156/ - 欢迎来到 Canyue’s Blog! 这是我的第一篇博客。

]]>
+ 欢迎来到 mobeicanyue’s Blog! 这是我的第一篇博客。

]]>
diff --git a/local-search.xml.br b/local-search.xml.br index 68dc94c5..b28505a7 100644 Binary files a/local-search.xml.br and b/local-search.xml.br differ diff --git a/local-search.xml.gz b/local-search.xml.gz index 92e2a7c3..193d56e0 100644 Binary files a/local-search.xml.gz and b/local-search.xml.gz differ diff --git a/page/2/index.html b/page/2/index.html index b4213d18..2804a47c 100644 --- a/page/2/index.html +++ b/page/2/index.html @@ -1 +1 @@ -漠北残月的博客
\ No newline at end of file +漠北残月的博客
\ No newline at end of file diff --git a/page/2/index.html.br b/page/2/index.html.br index b000e94c..f27653ca 100644 Binary files a/page/2/index.html.br and b/page/2/index.html.br differ diff --git a/page/2/index.html.gz b/page/2/index.html.gz index 575b2724..169d2896 100644 Binary files a/page/2/index.html.gz and b/page/2/index.html.gz differ diff --git a/page/3/index.html b/page/3/index.html index 6acca652..043314ea 100644 --- a/page/3/index.html +++ b/page/3/index.html @@ -1 +1 @@ -漠北残月的博客
\ No newline at end of file +漠北残月的博客
\ No newline at end of file diff --git a/page/3/index.html.br b/page/3/index.html.br index 515b2a36..1519450a 100644 Binary files a/page/3/index.html.br and b/page/3/index.html.br differ diff --git a/page/3/index.html.gz b/page/3/index.html.gz index 0031a499..b0d4e18c 100644 Binary files a/page/3/index.html.gz and b/page/3/index.html.gz differ diff --git a/posts/15c02856/index.html b/posts/15c02856/index.html index 71c1dae8..91dfb587 100644 --- a/posts/15c02856/index.html +++ b/posts/15c02856/index.html @@ -1 +1 @@ -1Panel 安装配置教程 - 漠北残月的博客

1Panel 安装配置教程

本文最后更新于 2024年2月4日 15:25

本文档为 1panel 配置教程,主要介绍 1panel 的配置及使用。更多信息请参照官网:https://1panel.cn

部署条件:一台能 ssh 登录的 Linux 服务器,一个域名

1. 什么是 1Panel,为什么要使用它?

1panel 的官网简介

1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。
Github 仓库:https://github.com/1Panel-dev/1Panel


众所周知,服务器运维要求我们熟悉 Linux 系统各种命令行操作,这些是维护服务器必不可少的。但是人总会想着偷懒命令行操作起来不方便,而且很多操作都需要命令行手动编辑,比如安装软件配置 docker、docker-compose、配置反向代理等等。而服务器管理面板封装了大量的操作实现,我们在浏览器中简单地点击填写信息就可以使用,大大提高了效率。

之前我用的是宝塔面板,是个比较知名的服务器管理面板,但是它不开源,且UI 也不好看,登录时甚至还要求绑定宝塔官网账号,否则就无法继续使用面板!

如此种种便促使我寻找替代品。我的服务器在 11 月份左右过期了,新的服务器不想使用宝塔面板,但是不使用面板操作服务器还是不太方便(比如设置反向代理、申请域名 SSL 证书和管理 docker 应用,面板可视化点击几下就好了,命令行操作起来很折磨人),于是便寻找它的替代品,也就是我们今天的主角 —— 1panel

1panel 首页

你可以访问这个连接来体验一下 1panel 的功能:https://demo.1panel.cn

经过一两个月的使用,我觉得体验相当稳定,写这篇教程希望能帮助到大家。

2. 1Panel 安装、登陆

开始之前先确保你的服务器安装了 curl

  1. ssh 连接到你的服务器,执行下面的命令,安装 1panel

    1
    curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
  2. 命令行提示输入安装目录,敲回车 默认即可
    安装目录
    随后命令行会输出一大串安装日志,等待即可。

  3. 命令行提示输入端口号,你可以自定义,也可以用它给你默认的端口号。
    注意 如果你使用的是云服务器,请至云服务器提供商的安全组开放 输入的端口
    账号密码自己设置,但最好不要太简单,不然被人爆破就不好了。
    输入信息

如果没有什么报错的话,那么恭喜你,1panel 已经安装成功了。

登陆信息
现在在浏览器访问 命令行输出的 外网地址 就可以登陆 1panel 面板了。
面板用户名和密码也在命令行输出,如上图所示。

登陆界面

如果出现错误很可能是网络连接问题(服务器下载面板资源出错)或者 ssh 连接断开了,重新执行安装命令即可。具体错误信息请自行搜索解决。

输入账号密码 登陆以后我们可以看到 1panel 的界面,如下图所示。
1panel 首页

首页显示的是服务器的基本信息,我们可以看到服务器的内存、cpu、硬盘、负载、系统的发行版本、内核、主机名等信息。

我们点击应用商店,这里有 1panel 社区维护的一些应用,我们可以直接安装使用。
应用商店包括了一些很热门的应用和开源项目 如:AList MySQL Bitwarden WordPress Umami Uptime Kuma Gitea Jenkins Redis MongoDB PostgreSQL RabbitMQ 等等。都是运行在 docker 容器中的,安装和卸载都很方便。(商店安装的软件和直接 docker-compose 安装的不同,它是运行在 1panel-network 的 bridge 网络中)
应用商店

3. 安装 openresty 应用

我们选择安装 openresty安装 -> 确认 即可。这是一个 nginx 的开源衍生版本,支持 lua 脚本,我们可以用它来做反向代理。
(不知道为啥没有 nginx,但是这个 openresty 也挺好用的,没差)
安装了它才能编辑网页、配置反代。
openresty
不要改配置!直接点确定即可。

4. 设置域名解析

域名服务商设置域名解析,将 域名 解析到服务器的 IP 上。这里应该不用我多教。
域名解析

5. 配置反向代理

点击网页左侧的 网站,然后点击 创建网站,选择反向代理,填入主域名和代理地址,点击确认。

反向代理

配置好后,就可以使用域名访问 1panel 面板了。

6. 申请域名 SSL 证书

我使用 Cloudflare 的 DNS 服务,它会自动申请 SSL 证书并部署,选择流量代理模式即可使用。
但如果你的域名在其他注册商托管,或者 二级域名不使用 Cloudflare 代理,那么你可以使用 1panel 申请 SSL 证书。

参考 1Panel 申请 Let's Encrypt 域名证书


1Panel 安装配置教程
https://blog.ovvv.top/posts/15c02856/
作者
mobeicanyue
发布于
2023年12月28日 15:54
更新于
2024年2月4日 15:25
许可协议
\ No newline at end of file +1Panel 安装配置教程 - 漠北残月的博客

1Panel 安装配置教程

本文最后更新于 2024年2月4日 15:25

本文档为 1panel 配置教程,主要介绍 1panel 的配置及使用。更多信息请参照官网:https://1panel.cn

部署条件:一台能 ssh 登录的 Linux 服务器,一个域名

1. 什么是 1Panel,为什么要使用它?

1panel 的官网简介

1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。
Github 仓库:https://github.com/1Panel-dev/1Panel


众所周知,服务器运维要求我们熟悉 Linux 系统各种命令行操作,这些是维护服务器必不可少的。但是人总会想着偷懒命令行操作起来不方便,而且很多操作都需要命令行手动编辑,比如安装软件配置 docker、docker-compose、配置反向代理等等。而服务器管理面板封装了大量的操作实现,我们在浏览器中简单地点击填写信息就可以使用,大大提高了效率。

之前我用的是宝塔面板,是个比较知名的服务器管理面板,但是它不开源,且UI 也不好看,登录时甚至还要求绑定宝塔官网账号,否则就无法继续使用面板!

如此种种便促使我寻找替代品。我的服务器在 11 月份左右过期了,新的服务器不想使用宝塔面板,但是不使用面板操作服务器还是不太方便(比如设置反向代理、申请域名 SSL 证书和管理 docker 应用,面板可视化点击几下就好了,命令行操作起来很折磨人),于是便寻找它的替代品,也就是我们今天的主角 —— 1panel

1panel 首页

你可以访问这个连接来体验一下 1panel 的功能:https://demo.1panel.cn

经过一两个月的使用,我觉得体验相当稳定,写这篇教程希望能帮助到大家。

2. 1Panel 安装、登陆

开始之前先确保你的服务器安装了 curl

  1. ssh 连接到你的服务器,执行下面的命令,安装 1panel

    1
    curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
  2. 命令行提示输入安装目录,敲回车 默认即可
    安装目录
    随后命令行会输出一大串安装日志,等待即可。

  3. 命令行提示输入端口号,你可以自定义,也可以用它给你默认的端口号。
    注意 如果你使用的是云服务器,请至云服务器提供商的安全组开放 输入的端口
    账号密码自己设置,但最好不要太简单,不然被人爆破就不好了。
    输入信息

如果没有什么报错的话,那么恭喜你,1panel 已经安装成功了。

登陆信息
现在在浏览器访问 命令行输出的 外网地址 就可以登陆 1panel 面板了。
面板用户名和密码也在命令行输出,如上图所示。

登陆界面

如果出现错误很可能是网络连接问题(服务器下载面板资源出错)或者 ssh 连接断开了,重新执行安装命令即可。具体错误信息请自行搜索解决。

输入账号密码 登陆以后我们可以看到 1panel 的界面,如下图所示。
1panel 首页

首页显示的是服务器的基本信息,我们可以看到服务器的内存、cpu、硬盘、负载、系统的发行版本、内核、主机名等信息。

我们点击应用商店,这里有 1panel 社区维护的一些应用,我们可以直接安装使用。
应用商店包括了一些很热门的应用和开源项目 如:AList MySQL Bitwarden WordPress Umami Uptime Kuma Gitea Jenkins Redis MongoDB PostgreSQL RabbitMQ 等等。都是运行在 docker 容器中的,安装和卸载都很方便。(商店安装的软件和直接 docker-compose 安装的不同,它是运行在 1panel-network 的 bridge 网络中)
应用商店

3. 安装 openresty 应用

我们选择安装 openresty安装 -> 确认 即可。这是一个 nginx 的开源衍生版本,支持 lua 脚本,我们可以用它来做反向代理。
(不知道为啥没有 nginx,但是这个 openresty 也挺好用的,没差)
安装了它才能编辑网页、配置反代。
openresty
不要改配置!直接点确定即可。

4. 设置域名解析

域名服务商设置域名解析,将 域名 解析到服务器的 IP 上。这里应该不用我多教。
域名解析

5. 配置反向代理

点击网页左侧的 网站,然后点击 创建网站,选择反向代理,填入主域名和代理地址,点击确认。

反向代理

配置好后,就可以使用域名访问 1panel 面板了。

6. 申请域名 SSL 证书

我使用 Cloudflare 的 DNS 服务,它会自动申请 SSL 证书并部署,选择流量代理模式即可使用。
但如果你的域名在其他注册商托管,或者 二级域名不使用 Cloudflare 代理,那么你可以使用 1panel 申请 SSL 证书。

参考 1Panel 申请 Let's Encrypt 域名证书


1Panel 安装配置教程
https://blog.ovvv.top/posts/15c02856/
作者
mobeicanyue
发布于
2023年12月28日 15:54
更新于
2024年2月4日 15:25
许可协议
\ No newline at end of file diff --git a/posts/15c02856/index.html.br b/posts/15c02856/index.html.br index 39732515..a6d3a6f8 100644 Binary files a/posts/15c02856/index.html.br and b/posts/15c02856/index.html.br differ diff --git a/posts/15c02856/index.html.gz b/posts/15c02856/index.html.gz index 17658bf6..811b42a1 100644 Binary files a/posts/15c02856/index.html.gz and b/posts/15c02856/index.html.gz differ diff --git a/posts/1acd162e/index.html b/posts/1acd162e/index.html index efaa14fa..1cb54630 100644 --- a/posts/1acd162e/index.html +++ b/posts/1acd162e/index.html @@ -1 +1 @@ -Fail2ban 安装使用教程 - 漠北残月的博客

Fail2ban 安装使用教程

本文最后更新于 2024年2月19日 21:45

Fail2ban

Fail2Ban 是一个入侵检测系统框架,它可以保护电脑服务器免受暴力破解。它用 Python 编程语言编写,旨在防止暴力攻击。它能够在具有本地安装的数据包控制系统或防火墙(例如 iptables 或 TCP Wrapper)接口的 POSIX 系统上运行。

1. 安装 Fail2ban

以 Debian/Ubuntu 为例,使用以下命令安装 Fail2ban:

1
2
sudo apt update
sudo apt install fail2ban

需要特别注意的是,Debian 从 12 开始弃用了 rsyslog,如果你是 Debian 12 及以上版本 的用户,你需要手动安装:

1
sudo apt install rsyslog

原因见:https://github.com/fail2ban/fail2ban/issues/3292

2. 启动 Fail2ban

1
sudo systemctl start fail2ban

3. 设置 Fail2ban 开机自启

1
sudo systemctl enable fail2ban

4. 查看 Fail2ban 状态

1
sudo systemctl status fail2ban

5. 配置 Fail2ban

编辑 /etc/fail2ban/jail.local 文件:

1
sudo vim /etc/fail2ban/jail.local

可以在文件中输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[DEFAULT]
bantime = 600
findtime = 300
maxretry = 3

[sshd]
ignoreip = 127.0.0.1/8
enabled = true
filter = sshd
bantime = 600
findtime = 300
maxretry = 2
port = 22
logpath = /var/log/auth.log

简单的配置文件示例,可以根据自己的需求进行修改。
其中:

  • bantime:封禁时间,单位为秒。-1 表示永久封禁。
  • findtime:检测时间,单位为秒。如果在这个时间内有超过 maxretry 次的尝试,就会被封禁,如 300 秒内有 5 次尝试失败就会被封禁。
  • maxretry:最大尝试次数。
  • ignoreip:不会被封禁的 IP 地址列表。
  • filter:指定用于匹配日志的过滤器,这里使用了 sshd 过滤器,用于匹配 SSH 登录日志。

修改完成后,重启 Fail2ban 服务:

1
sudo systemctl restart fail2ban

6. 常用命令

  • 查看所有被封禁的 IP 地址:

    1
    sudo fail2ban-client status
  • 解封 IP 地址:

    1
    sudo fail2ban-client set sshd unbanip 6.6.6.6



参考文章:


Fail2ban 安装使用教程
https://blog.ovvv.top/posts/1acd162e/
作者
mobeicanyue
发布于
2024年2月19日 12:06
更新于
2024年2月19日 21:45
许可协议
\ No newline at end of file +Fail2ban 安装使用教程 - 漠北残月的博客

Fail2ban 安装使用教程

本文最后更新于 2024年2月25日 22:14

Fail2ban

Fail2Ban 是一个入侵检测系统框架,它可以保护电脑服务器免受暴力破解。它用 Python 编程语言编写,旨在防止暴力攻击。它能够在具有本地安装的数据包控制系统或防火墙(例如 iptables 或 TCP Wrapper)接口的 POSIX 系统上运行。

1. 安装 Fail2ban

以 Debian/Ubuntu 为例,使用以下命令安装 Fail2ban:

1
2
sudo apt update
sudo apt install fail2ban

需要特别注意的是,Debian 从 12 开始弃用了 rsyslog,如果你是 Debian 12 及以上版本 的用户,你需要手动安装:

1
sudo apt install rsyslog

原因见:https://github.com/fail2ban/fail2ban/issues/3292

2. 启动 Fail2ban

1
sudo systemctl start fail2ban

3. 设置 Fail2ban 开机自启

1
sudo systemctl enable fail2ban

4. 查看 Fail2ban 状态

1
sudo systemctl status fail2ban

5. 配置 Fail2ban

编辑 /etc/fail2ban/jail.local 文件:

1
sudo vim /etc/fail2ban/jail.local

可以在文件中输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[DEFAULT]
bantime = 600
findtime = 300
maxretry = 3

[sshd]
ignoreip = 127.0.0.1/8
enabled = true
filter = sshd
bantime = 600
findtime = 300
maxretry = 2
port = 22
logpath = /var/log/auth.log

简单的配置文件示例,可以根据自己的需求进行修改。
其中:

  • bantime:封禁时间,单位为秒。-1 表示永久封禁。
  • findtime:检测时间,单位为秒。如果在这个时间内有超过 maxretry 次的尝试,就会被封禁,如 300 秒内有 5 次尝试失败就会被封禁。
  • maxretry:最大尝试次数。
  • ignoreip:不会被封禁的 IP 地址列表。
  • filter:指定用于匹配日志的过滤器,这里使用了 sshd 过滤器,用于匹配 SSH 登录日志。

修改完成后,重启 Fail2ban 服务:

1
sudo systemctl restart fail2ban

6. 常用命令

  • 查看所有被封禁的 IP 地址:

    1
    sudo fail2ban-client status
  • 解封 IP 地址:

    1
    sudo fail2ban-client set sshd unbanip 6.6.6.6



参考文章:


Fail2ban 安装使用教程
https://blog.ovvv.top/posts/1acd162e/
作者
mobeicanyue
发布于
2024年2月19日 12:06
更新于
2024年2月25日 22:14
许可协议
\ No newline at end of file diff --git a/posts/1acd162e/index.html.br b/posts/1acd162e/index.html.br index b96eefaa..22b5d75b 100644 Binary files a/posts/1acd162e/index.html.br and b/posts/1acd162e/index.html.br differ diff --git a/posts/1acd162e/index.html.gz b/posts/1acd162e/index.html.gz index dc2d34da..02a51d20 100644 Binary files a/posts/1acd162e/index.html.gz and b/posts/1acd162e/index.html.gz differ diff --git a/posts/1c0214de/index.html b/posts/1c0214de/index.html index 064fe44d..969bda1e 100644 --- a/posts/1c0214de/index.html +++ b/posts/1c0214de/index.html @@ -1 +1 @@ -2024, Happy New Year! - 漠北残月的博客

2024, Happy New Year!

本文最后更新于 2024年1月6日 01:17

祝大家元旦快乐!!!
虽然今年并不一帆风顺,但新的一年还是要开心啊!
2024
bing-wallpaper-fireworks


2024, Happy New Year!
https://blog.ovvv.top/posts/1c0214de/
作者
mobeicanyue
发布于
2024年1月1日 00:19
更新于
2024年1月6日 01:17
许可协议
\ No newline at end of file +2024, Happy New Year! - 漠北残月的博客

2024, Happy New Year!

本文最后更新于 2024年1月6日 01:17

祝大家元旦快乐!!!
虽然今年并不一帆风顺,但新的一年还是要开心啊!
2024
bing-wallpaper-fireworks


2024, Happy New Year!
https://blog.ovvv.top/posts/1c0214de/
作者
mobeicanyue
发布于
2024年1月1日 00:19
更新于
2024年1月6日 01:17
许可协议
\ No newline at end of file diff --git a/posts/1c0214de/index.html.br b/posts/1c0214de/index.html.br index ffbf97be..e50467ca 100644 Binary files a/posts/1c0214de/index.html.br and b/posts/1c0214de/index.html.br differ diff --git a/posts/1c0214de/index.html.gz b/posts/1c0214de/index.html.gz index 301db177..a3cc45fe 100644 Binary files a/posts/1c0214de/index.html.gz and b/posts/1c0214de/index.html.gz differ diff --git a/posts/21f09adf/index.html b/posts/21f09adf/index.html index 273a80be..a23ded04 100644 --- a/posts/21f09adf/index.html +++ b/posts/21f09adf/index.html @@ -1 +1 @@ -修复 Github Pages 上的文章更新时间 - 漠北残月的博客

修复 Github Pages 上的文章更新时间

本文最后更新于 2024年1月19日 20:46

github actions 具体配置请参考前面的文章

1. 问题起因

我开启了 fluid 配置 updated: true,这样会显示文章的更新时间。
fluid-config.webp

但是在部署到 github pages 时,hexo 并不会像我们本地运行那样,显示的是文章的更新时间,它获取的是部署的时间。 换句话说,你所有文章的更新时间都全部定格在 github actions 最新的部署的那个时间(难绷)。
error-time.webp

我们可以在 front-matter 加入 updated: 更新时间 解决

1
2
3
4
5
title: article title
date: 2023-01-01 00:00:00

# 添加 updated: 更新时间
updated: 2023-01-01 00:00:00

但是很明显,updated 时间需要我们手动去维护,很麻烦。

我想要的是:文章的正常 updated 时间,就是文章的 commit 时间

2. 解决方案

修改 deploy.yml

  1. 指定拉取代码的深度

    1
    2
    3
    uses: actions/checkout@v4
    with:
    fetch-depth: 0

    fetch-depth: 0 指定了拉取代码的深度。在这里,设置为 0 表示完全拉取整个代码历史,而不是仅拉取最新的部分。这样可以获取完整的 Git 历史记录。

  2. 修复文件更新时间
    在 build site 之前添加如下代码 [1]

    1
    2
    3
    - name: Fix File Updated Date
    run: |
    git ls-files | while read filepath; do touch -d "$(git log -1 --format='@%ct' $filepath)" "$filepath" && echo "Fixed: $filepath"; done

    在这个脚本中,git ls-files 用于列出所有已跟踪的文件,然后通过 while read filepath 遍历每个文件。
    对于每个文件,git log -1 --format=‘@%ct’ $filepath 用于获取该文件的最后一次提交的时间戳(以秒为单位),并使用 touch -d 命令将文件的更新日期设置为相应的时间戳。
    echo “Fixed: $filepath” 用于输出修复过的文件路径。

这样我们就修复了 github pages 的文章更新时间。

  1. 参考竹林里有冰的 github acitons 文件 workflows/deploy.yml

修复 Github Pages 上的文章更新时间
https://blog.ovvv.top/posts/21f09adf/
作者
mobeicanyue
发布于
2023年12月27日 22:47
更新于
2024年1月19日 20:46
许可协议
\ No newline at end of file +修复 Github Pages 上的文章更新时间 - 漠北残月的博客

修复 Github Pages 上的文章更新时间

本文最后更新于 2024年1月19日 20:46

github actions 具体配置请参考前面的文章

1. 问题起因

我开启了 fluid 配置 updated: true,这样会显示文章的更新时间。
fluid-config.webp

但是在部署到 github pages 时,hexo 并不会像我们本地运行那样,显示的是文章的更新时间,它获取的是部署的时间。 换句话说,你所有文章的更新时间都全部定格在 github actions 最新的部署的那个时间(难绷)。
error-time.webp

我们可以在 front-matter 加入 updated: 更新时间 解决

1
2
3
4
5
title: article title
date: 2023-01-01 00:00:00

# 添加 updated: 更新时间
updated: 2023-01-01 00:00:00

但是很明显,updated 时间需要我们手动去维护,很麻烦。

我想要的是:文章的正常 updated 时间,就是文章的 commit 时间

2. 解决方案

修改 deploy.yml

  1. 指定拉取代码的深度

    1
    2
    3
    uses: actions/checkout@v4
    with:
    fetch-depth: 0

    fetch-depth: 0 指定了拉取代码的深度。在这里,设置为 0 表示完全拉取整个代码历史,而不是仅拉取最新的部分。这样可以获取完整的 Git 历史记录。

  2. 修复文件更新时间
    在 build site 之前添加如下代码 [1]

    1
    2
    3
    - name: Fix File Updated Date
    run: |
    git ls-files | while read filepath; do touch -d "$(git log -1 --format='@%ct' $filepath)" "$filepath" && echo "Fixed: $filepath"; done

    在这个脚本中,git ls-files 用于列出所有已跟踪的文件,然后通过 while read filepath 遍历每个文件。
    对于每个文件,git log -1 --format=‘@%ct’ $filepath 用于获取该文件的最后一次提交的时间戳(以秒为单位),并使用 touch -d 命令将文件的更新日期设置为相应的时间戳。
    echo “Fixed: $filepath” 用于输出修复过的文件路径。

这样我们就修复了 github pages 的文章更新时间。

  1. 参考竹林里有冰的 github acitons 文件 workflows/deploy.yml

修复 Github Pages 上的文章更新时间
https://blog.ovvv.top/posts/21f09adf/
作者
mobeicanyue
发布于
2023年12月27日 22:47
更新于
2024年1月19日 20:46
许可协议
\ No newline at end of file diff --git a/posts/21f09adf/index.html.br b/posts/21f09adf/index.html.br index 8692647c..d6c33c83 100644 Binary files a/posts/21f09adf/index.html.br and b/posts/21f09adf/index.html.br differ diff --git a/posts/21f09adf/index.html.gz b/posts/21f09adf/index.html.gz index f4fde047..42236fe0 100644 Binary files a/posts/21f09adf/index.html.gz and b/posts/21f09adf/index.html.gz differ diff --git a/posts/2422058f/index.html b/posts/2422058f/index.html index 42a6af30..a034e3bd 100644 --- a/posts/2422058f/index.html +++ b/posts/2422058f/index.html @@ -1 +1 @@ -Hexo Fluid 设置页脚 - 漠北残月的博客

Hexo Fluid 设置页脚

本文最后更新于 2023年12月29日 10:20

效果图:
set-footer.webp

1. 修改 Fluid 主题配置文件

Fluid 提供了选项来自定义页脚。
打开_config.fluid.yml,找到footer,修改content的值为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
footer:
content: '
<div>
Copyright © 2023<span id="copyrightYear"></span> |
<a href="https://github.com/mobeicanyue/mobeicanyue.github.io" target="_blank" rel="nofollow noopener">
<span>mobeicanyue</span></a>
</div>

<div>
<span id="timeDate">载入天数...</span>
<span id="times">载入时分秒...</span>
<script src="/js/duration.js"></script>
</div>

Powered by
<a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a>
<i class="iconfont icon-love"></i>
<a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a>
'

上面分别是版权信息运行时间Hexo 和 Fluid 的链接
这样子还没完,因为要求显示的时间是动态的,需要写 js 来实现(经过测试好像不能在这写 script 代码,所以外链 js)。


新建文件夹source/js,新建文件duration.js,内容如下:

代码来源于网络,由于找的代码都是大同小异的,不知道原作者是谁,版权归原作者所有。

1
2
3
4
5
6
7
8
9
10
11
12
13
function createtime() {
var grt= new Date("12/26/2023 22:19:15");// 在此处修改你的建站时间,格式:月/日/年 时:分:秒
now.setTime(now.getTime()+250);
days = (now - grt ) / 1000 / 60 / 60 / 24; dnum = Math.floor(days);
hours = (now - grt ) / 1000 / 60 / 60 - (24 * dnum); hnum = Math.floor(hours);
if(String(hnum).length ==1 ){hnum = "0" + hnum;} minutes = (now - grt ) / 1000 /60 - (24 * 60 * dnum) - (60 * hnum);
mnum = Math.floor(minutes); if(String(mnum).length ==1 ){mnum = "0" + mnum;}
seconds = (now - grt ) / 1000 - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum);
snum = Math.round(seconds); if(String(snum).length ==1 ){snum = "0" + snum;}
document.getElementById("timeDate").innerHTML = "本站已运行 "+dnum+" 天 ";
document.getElementById("times").innerHTML = hnum + " 小时 " + mnum + " 分 " + snum + " 秒";
}
setInterval("createtime()", 250);

重新运行博客,功能即可实现。


Hexo Fluid 设置页脚
https://blog.ovvv.top/posts/2422058f/
作者
mobeicanyue
发布于
2023年12月28日 02:26
更新于
2023年12月29日 10:20
许可协议
\ No newline at end of file +Hexo Fluid 设置页脚 - 漠北残月的博客

Hexo Fluid 设置页脚

本文最后更新于 2023年12月29日 10:20

效果图:
set-footer.webp

1. 修改 Fluid 主题配置文件

Fluid 提供了选项来自定义页脚。
打开_config.fluid.yml,找到footer,修改content的值为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
footer:
content: '
<div>
Copyright © 2023<span id="copyrightYear"></span> |
<a href="https://github.com/mobeicanyue/mobeicanyue.github.io" target="_blank" rel="nofollow noopener">
<span>mobeicanyue</span></a>
</div>

<div>
<span id="timeDate">载入天数...</span>
<span id="times">载入时分秒...</span>
<script src="/js/duration.js"></script>
</div>

Powered by
<a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a>
<i class="iconfont icon-love"></i>
<a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a>
'

上面分别是版权信息运行时间Hexo 和 Fluid 的链接
这样子还没完,因为要求显示的时间是动态的,需要写 js 来实现(经过测试好像不能在这写 script 代码,所以外链 js)。


新建文件夹source/js,新建文件duration.js,内容如下:

代码来源于网络,由于找的代码都是大同小异的,不知道原作者是谁,版权归原作者所有。

1
2
3
4
5
6
7
8
9
10
11
12
13
function createtime() {
var grt= new Date("12/26/2023 22:19:15");// 在此处修改你的建站时间,格式:月/日/年 时:分:秒
now.setTime(now.getTime()+250);
days = (now - grt ) / 1000 / 60 / 60 / 24; dnum = Math.floor(days);
hours = (now - grt ) / 1000 / 60 / 60 - (24 * dnum); hnum = Math.floor(hours);
if(String(hnum).length ==1 ){hnum = "0" + hnum;} minutes = (now - grt ) / 1000 /60 - (24 * 60 * dnum) - (60 * hnum);
mnum = Math.floor(minutes); if(String(mnum).length ==1 ){mnum = "0" + mnum;}
seconds = (now - grt ) / 1000 - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum);
snum = Math.round(seconds); if(String(snum).length ==1 ){snum = "0" + snum;}
document.getElementById("timeDate").innerHTML = "本站已运行 "+dnum+" 天 ";
document.getElementById("times").innerHTML = hnum + " 小时 " + mnum + " 分 " + snum + " 秒";
}
setInterval("createtime()", 250);

重新运行博客,功能即可实现。


Hexo Fluid 设置页脚
https://blog.ovvv.top/posts/2422058f/
作者
mobeicanyue
发布于
2023年12月28日 02:26
更新于
2023年12月29日 10:20
许可协议
\ No newline at end of file diff --git a/posts/2422058f/index.html.br b/posts/2422058f/index.html.br index 5bb6776a..19f9c492 100644 Binary files a/posts/2422058f/index.html.br and b/posts/2422058f/index.html.br differ diff --git a/posts/2422058f/index.html.gz b/posts/2422058f/index.html.gz index 17e468dc..052b4fae 100644 Binary files a/posts/2422058f/index.html.gz and b/posts/2422058f/index.html.gz differ diff --git a/posts/4259ee82/index.html b/posts/4259ee82/index.html index f72d4578..7e3a2abf 100644 --- a/posts/4259ee82/index.html +++ b/posts/4259ee82/index.html @@ -1 +1 @@ -编写 Umami 的 UV, PV 访问统计显示 - 漠北残月的博客

编写 Umami 的 UV, PV 访问统计显示

本文最后更新于 2024年2月25日 22:03

Umami is a simple, fast, privacy-focused alternative to Google Analytics.

Umami 是一个简单、快速、注重隐私的 Google Analytics 替代品。

本站的 Umami 访问统计页面,显示了每日的访问量和访问人数,链接:https://umami.ovvv.top/share/SYu8qUKmty52PW9w/blog

浏览量展示

我们在前文介绍过如何安装 Umami,本文将介绍编写一个简单的页面,通过 Umami 的 API 调用显示 Umami 的 UV, PV 访问情况。

本文 默认你已经安装了 Umami 并且添加了一个网站,如果没有安装 Umami,请参考:Umami 安装使用教程

1. 新建 View only 权限的用户

Settings -> Users -> Create user -> 填写账号密码,Role 选择 View only -> Save

新建用户

肯定有读者很疑惑,为什么不直接调用 Umami 的 API 获取数据,而是要额外创建一个账户。因为我的博客是 静态开源无服务器 的,往往需要将生成的代码展示在前端,包括 API 调用。而 Umami 的 API 权限太大了[1],如果使用 admin 权限的 API Token,那么这个 token 可以获取、修改、删除所有网站的数据,会有严重的安全隐患。所以我们需要创建一个 View only 权限的用户,然后使用这个用户的 API Token

2. 新建 Team 并添加用户和网站

Settings -> Teams -> Create team -> 填写名称 -> Save -> 找到刚刚创建的 Team -> Edit -> 复制 Access code,点击 Websites 中点击 Add website 选中你想共享的网站

换一个浏览器登录 Umami(使用View only 权限的用户) -> Settings -> Teams -> Join team -> 输入 Access code -> Join -> 如果没有出错的话,点击 Dashboard 就可以看到你刚刚添加的网站了

3. 获取 View only 用户的 API Token

根据 Umami 的文档[2],我们可以通过以下方式获取 API Token:

1
POST /api/auth/login

例如 你的网站地址为 example.com,那么你需要使用 View only 的账户密码向 https://example.com/api/auth/login 发送一个 POST 请求,请求体为:

1
2
3
4
{
"username": "your-username",
"password": "your-password"
}

如果成功,你应该会得到以下的结果:

1
2
3
4
5
6
7
8
{
"token": "eyTMjU2IiwiY...4Q0JDLUhWxnIjoiUE_A",
"user": {
"id": "cd33a605-d785-42a1-9365-d6cad3b7befd",
"username": "your-username",
"createdAt": "2020-04-20 01:00:00"
}
}

保存 token 值,并在所有请求中发送带 Bearer <token> 值的 Authorization 标头。请求标头应该如下所示:

1
Authorization: Bearer eyTMjU2IiwiY...4Q0JDLUhWxnIjoiUE_A

4. 发送请求获取数据

这里要用到类似于 postman 的 API 测试工具,我使用的是开源的 hoppscotch,你也可以使用 curl 或者其他工具。

先分析一下官方文档的 API 接口[3]
GET /api/websites/{websiteId}/stats
API

有两个必填的 查询参数:startAtendAt,都是 Unix 毫秒时间戳,表示开始时间和结束时间

websiteIdstartAt 需要我们自己获取

websiteId 可以在 Dashboard -> View details -> 看浏览器栏的地址 https://example.com/websites/{websiteId} 中找到

startAt 可发送 GET 请求到 https://example.com/api/websites/{websiteId},请求头为

1
Authorization: Bearer eyTMjU2IiwiY...4Q0JDLUhWxnIjoiUE_A

在返回结果中找到 createdAt 字段,这个字段就是 startAt 的值,也就是你的网站创建时间,数据的开始时间
createdAt

5. 编写页面

页面展示

代码是看到木木的博客[4]而有灵感,而评论区下面的 Nick[5] 提供了相对正确的思路,我在他代码的基础上进行了改进,如删除无用的参数和优化步骤等。代码如下,修改你对应的参数即可运行:

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>

<body>
<div style="text-align:center;">
<h1>Umami 网站统计</h1>
<span>总访问量 <span id="umami-site-pv"></span></span>

<span>总访客数 <span id="umami-site-uv"></span></span>
</div>

<script>
// 从配置文件中获取 umami 的配置
const website_id = 'xxx';

// 拼接请求地址
const request_url = 'https://xxx.com' + '/api/websites/' + website_id + '/stats';

const start_time = new Date('2024-01-01').getTime();
const end_time = new Date().getTime();

const token = 'xxxxxx';

// 检查配置是否为空
if (!website_id) {
throw new Error("Umami website_id is empty");
}
if (!request_url) {
throw new Error("Umami request_url is empty");
}
if (!start_time) {
throw new Error("Umami start_time is empty");
}
if (!token) {
throw new Error("Umami token is empty");
}

const params = new URLSearchParams({
startAt: start_time,
endAt: end_time,
});

const request_header = {
method: "GET",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer " + token,
},
};

async function allStats() {
try {
const response = await fetch(`${request_url}?${params}`, request_header);
const data = await response.json();
const uniqueVisitors = data.uniques.value; // 获取独立访客数
const pageViews = data.pageviews.value; // 获取页面浏览量

let ele1 = document.querySelector("#umami-site-pv")
if (ele1) {
ele1.textContent = pageViews; // 设置页面浏览量
}

let ele2 = document.querySelector("#umami-site-uv")
if (ele2) {
ele2.textContent = uniqueVisitors;
}

console.log(uniqueVisitors, pageViews);
console.log(data);
return data;
} catch (error) {
console.error(error);
return "-1";
}
}
allStats();
</script>
</body>

</html>

参考


编写 Umami 的 UV, PV 访问统计显示
https://blog.ovvv.top/posts/4259ee82/
作者
mobeicanyue
发布于
2024年2月25日 19:47
更新于
2024年2月25日 22:03
许可协议
\ No newline at end of file +编写 Umami 的 UV, PV 访问统计显示 - 漠北残月的博客

编写 Umami 的 UV, PV 访问统计显示

本文最后更新于 2024年2月25日 22:03

Umami is a simple, fast, privacy-focused alternative to Google Analytics.

Umami 是一个简单、快速、注重隐私的 Google Analytics 替代品。

本站的 Umami 访问统计页面,显示了每日的访问量和访问人数,链接:https://umami.ovvv.top/share/SYu8qUKmty52PW9w/blog

浏览量展示

我们在前文介绍过如何安装 Umami,本文将介绍编写一个简单的页面,通过 Umami 的 API 调用显示 Umami 的 UV, PV 访问情况。

本文 默认你已经安装了 Umami 并且添加了一个网站,如果没有安装 Umami,请参考:Umami 安装使用教程

1. 新建 View only 权限的用户

Settings -> Users -> Create user -> 填写账号密码,Role 选择 View only -> Save

新建用户

肯定有读者很疑惑,为什么不直接调用 Umami 的 API 获取数据,而是要额外创建一个账户。因为我的博客是 静态开源无服务器 的,往往需要将生成的代码展示在前端,包括 API 调用。而 Umami 的 API 权限太大了[1],如果使用 admin 权限的 API Token,那么这个 token 可以获取、修改、删除所有网站的数据,会有严重的安全隐患。所以我们需要创建一个 View only 权限的用户,然后使用这个用户的 API Token

2. 新建 Team 并添加用户和网站

Settings -> Teams -> Create team -> 填写名称 -> Save -> 找到刚刚创建的 Team -> Edit -> 复制 Access code,点击 Websites 中点击 Add website 选中你想共享的网站

换一个浏览器登录 Umami(使用View only 权限的用户) -> Settings -> Teams -> Join team -> 输入 Access code -> Join -> 如果没有出错的话,点击 Dashboard 就可以看到你刚刚添加的网站了

3. 获取 View only 用户的 API Token

根据 Umami 的文档[2],我们可以通过以下方式获取 API Token:

1
POST /api/auth/login

例如 你的网站地址为 example.com,那么你需要使用 View only 的账户密码向 https://example.com/api/auth/login 发送一个 POST 请求,请求体为:

1
2
3
4
{
"username": "your-username",
"password": "your-password"
}

如果成功,你应该会得到以下的结果:

1
2
3
4
5
6
7
8
{
"token": "eyTMjU2IiwiY...4Q0JDLUhWxnIjoiUE_A",
"user": {
"id": "cd33a605-d785-42a1-9365-d6cad3b7befd",
"username": "your-username",
"createdAt": "2020-04-20 01:00:00"
}
}

保存 token 值,并在所有请求中发送带 Bearer <token> 值的 Authorization 标头。请求标头应该如下所示:

1
Authorization: Bearer eyTMjU2IiwiY...4Q0JDLUhWxnIjoiUE_A

4. 发送请求获取数据

这里要用到类似于 postman 的 API 测试工具,我使用的是开源的 hoppscotch,你也可以使用 curl 或者其他工具。

先分析一下官方文档的 API 接口[3]
GET /api/websites/{websiteId}/stats
API

有两个必填的 查询参数:startAtendAt,都是 Unix 毫秒时间戳,表示开始时间和结束时间

websiteIdstartAt 需要我们自己获取

websiteId 可以在 Dashboard -> View details -> 看浏览器栏的地址 https://example.com/websites/{websiteId} 中找到

startAt 可发送 GET 请求到 https://example.com/api/websites/{websiteId},请求头为

1
Authorization: Bearer eyTMjU2IiwiY...4Q0JDLUhWxnIjoiUE_A

在返回结果中找到 createdAt 字段,这个字段就是 startAt 的值,也就是你的网站创建时间,数据的开始时间
createdAt

5. 编写页面

页面展示

代码是看到木木的博客[4]而有灵感,而评论区下面的 Nick[5] 提供了相对正确的思路,我在他代码的基础上进行了改进,如删除无用的参数和优化步骤等。代码如下,修改你对应的参数即可运行:

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>

<body>
<div style="text-align:center;">
<h1>Umami 网站统计</h1>
<span>总访问量 <span id="umami-site-pv"></span></span>

<span>总访客数 <span id="umami-site-uv"></span></span>
</div>

<script>
// 从配置文件中获取 umami 的配置
const website_id = 'xxx';

// 拼接请求地址
const request_url = 'https://xxx.com' + '/api/websites/' + website_id + '/stats';

const start_time = new Date('2024-01-01').getTime();
const end_time = new Date().getTime();

const token = 'xxxxxx';

// 检查配置是否为空
if (!website_id) {
throw new Error("Umami website_id is empty");
}
if (!request_url) {
throw new Error("Umami request_url is empty");
}
if (!start_time) {
throw new Error("Umami start_time is empty");
}
if (!token) {
throw new Error("Umami token is empty");
}

const params = new URLSearchParams({
startAt: start_time,
endAt: end_time,
});

const request_header = {
method: "GET",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer " + token,
},
};

async function allStats() {
try {
const response = await fetch(`${request_url}?${params}`, request_header);
const data = await response.json();
const uniqueVisitors = data.uniques.value; // 获取独立访客数
const pageViews = data.pageviews.value; // 获取页面浏览量

let ele1 = document.querySelector("#umami-site-pv")
if (ele1) {
ele1.textContent = pageViews; // 设置页面浏览量
}

let ele2 = document.querySelector("#umami-site-uv")
if (ele2) {
ele2.textContent = uniqueVisitors;
}

console.log(uniqueVisitors, pageViews);
console.log(data);
return data;
} catch (error) {
console.error(error);
return "-1";
}
}
allStats();
</script>
</body>

</html>

参考


编写 Umami 的 UV, PV 访问统计显示
https://blog.ovvv.top/posts/4259ee82/
作者
mobeicanyue
发布于
2024年2月25日 19:47
更新于
2024年2月25日 22:03
许可协议
\ No newline at end of file diff --git a/posts/4259ee82/index.html.br b/posts/4259ee82/index.html.br index 9a79617d..7092aefb 100644 Binary files a/posts/4259ee82/index.html.br and b/posts/4259ee82/index.html.br differ diff --git a/posts/4259ee82/index.html.gz b/posts/4259ee82/index.html.gz index 32626643..4106fd5f 100644 Binary files a/posts/4259ee82/index.html.gz and b/posts/4259ee82/index.html.gz differ diff --git a/posts/4a17b156/index.html b/posts/4a17b156/index.html index 29c84e13..1cbe38fa 100644 --- a/posts/4a17b156/index.html +++ b/posts/4a17b156/index.html @@ -1 +1 @@ -Hello World - 漠北残月的博客

Hello World

本文最后更新于 2023年12月29日 10:20

欢迎来到 Canyue’s Blog! 这是我的第一篇博客。


Hello World
https://blog.ovvv.top/posts/4a17b156/
作者
mobeicanyue
发布于
2023年12月26日 22:19
更新于
2023年12月29日 10:20
许可协议
\ No newline at end of file +Hello World - 漠北残月的博客

Hello World

本文最后更新于 2024年2月25日 22:14

欢迎来到 mobeicanyue’s Blog! 这是我的第一篇博客。


Hello World
https://blog.ovvv.top/posts/4a17b156/
作者
mobeicanyue
发布于
2023年12月26日 22:19
更新于
2024年2月25日 22:14
许可协议
\ No newline at end of file diff --git a/posts/4a17b156/index.html.br b/posts/4a17b156/index.html.br index 5e4825e3..edd81e11 100644 Binary files a/posts/4a17b156/index.html.br and b/posts/4a17b156/index.html.br differ diff --git a/posts/4a17b156/index.html.gz b/posts/4a17b156/index.html.gz index 6a84e65c..736fac54 100644 Binary files a/posts/4a17b156/index.html.gz and b/posts/4a17b156/index.html.gz differ diff --git a/posts/5eba38dc/index.html b/posts/5eba38dc/index.html index 8ef9333d..e11e8527 100644 --- a/posts/5eba38dc/index.html +++ b/posts/5eba38dc/index.html @@ -1 +1 @@ -安装 Fluid 主题 - 漠北残月的博客

安装 Fluid 主题

本文最后更新于 2024年1月31日 11:37

官方文档其实挺详细的了。
记录一下我自己的操作。

1. 安装主题

进入博客目录执行命令:

1
npm install --save hexo-theme-fluid

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

现在目录下有这三个 yml 文件:
yml-files.webp

可删除 _config.landscape.yml , 它是 hexo 默认的主题文件。

2. 修改 hexo 配置

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

1
2
3
theme: fluid

language: zh-CN

3. 创建「关于页」

执行以下命令:

1
hexo new page about

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

添加后如下

1
2
3
4
5
6
---
title: about
date: 2023-12-26 22:43:21
layout: about
---
这里写关于页的正文,支持 Markdown, HTML

然后不出意外你就可以看到关于页了。
输入

1
hexo clean && hexo g && hexo s -o

后访问 http://localhost:4000/about/ 即可看到效果。

ablout.webp

PS: 可以跟着文档把关于页面的几个 icon 一起改了。

4. 修改主题配置

官方文档
官方文档还算比较完善,耐心看完即可。

5. 修改网站图标

修改网站图标 文档好像没提到,我这里写一下
首先把你的图标放到 /source/images/ 目录下,然后
打开 _config.fluid.yml 找到这个配置:

1
2
3
4
5
6
7
# 用于浏览器标签的图标
# Icon for browser tab
favicon: images/favicon.png

# 用于苹果设备的图标
# Icon for Apple touch
apple_touch_icon: images/favicon.png

favicon.png 改为你的图标路径即可。

6. 修改 slogan 为 api 语录

效果如图所示:
api-slogan.webp

在主题配置 _config.fluid.yml 中开启:

1
2
3
4
5
6
7
8
9
10
index:
slogan:
enable: true
text: 这是一条 Slogan
api:
enable: true
url: "https://v1.hitokoto.cn/"
method: "GET"
headers: {}
keys: ["hitokoto"]

url 改为你想要的 api 地址,keys 改为你想要的字段。具体参数可以看官方文档

7. 修改背景图片 为 api 图片

既然可以改 slogan 为 api 语录,那么背景图片当然也可以改为 api 图片 笑)。

效果如图所示:
api-bg.webp

在主题配置 _config.fluid.yml 中搜索

1
/img/default.png

将其改为你想要的 api 地址即可。
我使用的是 Bing 每日图片
感谢接口提供者!!!


安装 Fluid 主题
https://blog.ovvv.top/posts/5eba38dc/
作者
mobeicanyue
发布于
2023年12月27日 02:09
更新于
2024年1月31日 11:37
许可协议
\ No newline at end of file +安装 Fluid 主题 - 漠北残月的博客

安装 Fluid 主题

本文最后更新于 2024年1月31日 11:37

官方文档其实挺详细的了。
记录一下我自己的操作。

1. 安装主题

进入博客目录执行命令:

1
npm install --save hexo-theme-fluid

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

现在目录下有这三个 yml 文件:
yml-files.webp

可删除 _config.landscape.yml , 它是 hexo 默认的主题文件。

2. 修改 hexo 配置

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

1
2
3
theme: fluid

language: zh-CN

3. 创建「关于页」

执行以下命令:

1
hexo new page about

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

添加后如下

1
2
3
4
5
6
---
title: about
date: 2023-12-26 22:43:21
layout: about
---
这里写关于页的正文,支持 Markdown, HTML

然后不出意外你就可以看到关于页了。
输入

1
hexo clean && hexo g && hexo s -o

后访问 http://localhost:4000/about/ 即可看到效果。

ablout.webp

PS: 可以跟着文档把关于页面的几个 icon 一起改了。

4. 修改主题配置

官方文档
官方文档还算比较完善,耐心看完即可。

5. 修改网站图标

修改网站图标 文档好像没提到,我这里写一下
首先把你的图标放到 /source/images/ 目录下,然后
打开 _config.fluid.yml 找到这个配置:

1
2
3
4
5
6
7
# 用于浏览器标签的图标
# Icon for browser tab
favicon: images/favicon.png

# 用于苹果设备的图标
# Icon for Apple touch
apple_touch_icon: images/favicon.png

favicon.png 改为你的图标路径即可。

6. 修改 slogan 为 api 语录

效果如图所示:
api-slogan.webp

在主题配置 _config.fluid.yml 中开启:

1
2
3
4
5
6
7
8
9
10
index:
slogan:
enable: true
text: 这是一条 Slogan
api:
enable: true
url: "https://v1.hitokoto.cn/"
method: "GET"
headers: {}
keys: ["hitokoto"]

url 改为你想要的 api 地址,keys 改为你想要的字段。具体参数可以看官方文档

7. 修改背景图片 为 api 图片

既然可以改 slogan 为 api 语录,那么背景图片当然也可以改为 api 图片 笑)。

效果如图所示:
api-bg.webp

在主题配置 _config.fluid.yml 中搜索

1
/img/default.png

将其改为你想要的 api 地址即可。
我使用的是 Bing 每日图片
感谢接口提供者!!!


安装 Fluid 主题
https://blog.ovvv.top/posts/5eba38dc/
作者
mobeicanyue
发布于
2023年12月27日 02:09
更新于
2024年1月31日 11:37
许可协议
\ No newline at end of file diff --git a/posts/5eba38dc/index.html.br b/posts/5eba38dc/index.html.br index 8973e09c..fd37c513 100644 Binary files a/posts/5eba38dc/index.html.br and b/posts/5eba38dc/index.html.br differ diff --git a/posts/5eba38dc/index.html.gz b/posts/5eba38dc/index.html.gz index 7a8ec988..15fd1553 100644 Binary files a/posts/5eba38dc/index.html.gz and b/posts/5eba38dc/index.html.gz differ diff --git a/posts/6a24c2b/index.html b/posts/6a24c2b/index.html index 3ccddea7..40c15836 100644 --- a/posts/6a24c2b/index.html +++ b/posts/6a24c2b/index.html @@ -1 +1 @@ -Hexo 生成文章唯一永久链接 - 漠北残月的博客

Hexo 生成文章唯一永久链接

本文最后更新于 2023年12月29日 17:30

1. 安装插件

1
npm install hexo-abbrlink --save

2. 配置插件

修改 _config.yml 文件 permalink 为:

1
2
3
permalink: posts/:abbrlink/ 
# 或
permalink: posts/:abbrlink.html

然后在这行下面添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# abbrlink config
abbrlink:
alg: crc32 #support crc16(default) and crc32
rep: hex #support dec(default) and hex
drafts: false #(true)Process draft,(false)Do not process draft. false(default)
# Generate categories from directory-tree
# depth: the max_depth of directory-tree you want to generate, should > 0
auto_category:
enable: true #true(default)
depth: #3(default)
over_write: false
auto_title: false #enable auto title, it can auto fill the title by path
auto_date: false #enable auto date, it can auto fill the date by time today
force: false #启用强制模式,在此模式下,插件将忽略缓存,并计算每篇文章的 abbrlink,即使它已经有了 abbrlink。这只会更新 abbrlink,而不会更新其他前置变量。

3. 清除缓存再生成

1
hexo clean && hexo g

插件将会在你所有文章的 Front-matter 开头生成一个 abbrlink 属性,这个变量就是你文章的唯一永久链接。

4. 前后效果对比

生成前

生成后


Hexo 生成文章唯一永久链接
https://blog.ovvv.top/posts/6a24c2b/
作者
mobeicanyue
发布于
2023年12月29日 10:27
更新于
2023年12月29日 17:30
许可协议
\ No newline at end of file +Hexo 生成文章唯一永久链接 - 漠北残月的博客

Hexo 生成文章唯一永久链接

本文最后更新于 2024年2月25日 22:14

1. 安装插件

1
npm install hexo-abbrlink --save

2. 配置插件

修改 _config.yml 文件 permalink 为:

1
2
3
permalink: posts/:abbrlink/ 
# 或
permalink: posts/:abbrlink.html

然后在这行下面添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# abbrlink config
abbrlink:
alg: crc32 #support crc16(default) and crc32
rep: hex #support dec(default) and hex
drafts: false #(true)Process draft,(false)Do not process draft. false(default)
# Generate categories from directory-tree
# depth: the max_depth of directory-tree you want to generate, should > 0
auto_category:
enable: true #true(default)
depth: #3(default)
over_write: false
auto_title: false #enable auto title, it can auto fill the title by path
auto_date: false #enable auto date, it can auto fill the date by time today
force: false #启用强制模式,在此模式下,插件将忽略缓存,并计算每篇文章的 abbrlink,即使它已经有了 abbrlink。这只会更新 abbrlink,而不会更新其他前置变量。

3. 清除缓存再生成

1
hexo clean && hexo g

插件将会在你所有文章的 Front-matter 开头生成一个 abbrlink 属性,这个变量就是你文章的唯一永久链接。

4. 前后效果对比

生成前

生成后


Hexo 生成文章唯一永久链接
https://blog.ovvv.top/posts/6a24c2b/
作者
mobeicanyue
发布于
2023年12月29日 10:27
更新于
2024年2月25日 22:14
许可协议
\ No newline at end of file diff --git a/posts/6a24c2b/index.html.br b/posts/6a24c2b/index.html.br index 453ffe39..33598081 100644 Binary files a/posts/6a24c2b/index.html.br and b/posts/6a24c2b/index.html.br differ diff --git a/posts/6a24c2b/index.html.gz b/posts/6a24c2b/index.html.gz index 8eb78516..72ca4c33 100644 Binary files a/posts/6a24c2b/index.html.gz and b/posts/6a24c2b/index.html.gz differ diff --git a/posts/6db78a27/index.html b/posts/6db78a27/index.html index 747876d0..67607156 100644 --- a/posts/6db78a27/index.html +++ b/posts/6db78a27/index.html @@ -1 +1 @@ -博客搭建相关教程 - 漠北残月的博客

博客搭建相关教程

本文最后更新于 2024年1月31日 11:37


博客搭建相关教程
https://blog.ovvv.top/posts/6db78a27/
作者
mobeicanyue
发布于
2023年12月28日 19:03
更新于
2024年1月31日 11:37
许可协议
\ No newline at end of file +博客搭建相关教程 - 漠北残月的博客

博客搭建相关教程

本文最后更新于 2024年1月31日 11:37


博客搭建相关教程
https://blog.ovvv.top/posts/6db78a27/
作者
mobeicanyue
发布于
2023年12月28日 19:03
更新于
2024年1月31日 11:37
许可协议
\ No newline at end of file diff --git a/posts/6db78a27/index.html.br b/posts/6db78a27/index.html.br index 36869e52..5550de1a 100644 Binary files a/posts/6db78a27/index.html.br and b/posts/6db78a27/index.html.br differ diff --git a/posts/6db78a27/index.html.gz b/posts/6db78a27/index.html.gz index d8ab9b76..7282c74c 100644 Binary files a/posts/6db78a27/index.html.gz and b/posts/6db78a27/index.html.gz differ diff --git a/posts/72658df0/index.html b/posts/72658df0/index.html index 32490e98..5c30fd37 100644 --- a/posts/72658df0/index.html +++ b/posts/72658df0/index.html @@ -1 +1 @@ -将 jpg 转换为 webp,提高博客加载速度 - 漠北残月的博客

将 jpg 转换为 webp,提高博客加载速度

本文最后更新于 2023年12月30日 11:03

本文主要介绍如何将 Jpg 转换为 WebP。
为什么要转换为 WebP 呢?因为 WebP 图片通常比 JPEG 图片更小,同时保持相似的视觉质量。也是现代浏览器支持、推荐使用的图片格式之一。

1. 安装 cwebp

Archlinux 系 Linux 安装 cwebp

1
sudo pacman -S libwebp

2. 转换

我编写了一个脚本,可以将当前目录下的所有 jpg 文件转换为 webp 文件。
代码遍历所有文件夹并将图片转换为 WebP 格式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
script_dir=$(dirname "$0")

# 使用 find 命令遍历所有子文件夹中的图片文件
find "$script_dir" -type f \( -iname \*.jpg -o -iname \*.jpeg -o -iname \*.png \) -exec sh -c '
for file do
# 获取文件的相对路径和文件名
relpath=$(dirname "$file")
filename=$(basename "$file")

# 使用 cwebp 将图片转换为 WebP 格式并保存到当前目录
cwebp "$file" -o "${relpath}/${filename%.*}.webp"

# 删除原始图片文件已注释, 建议先在测试环境中运行一下再放到代码仓库中运行
# rm "$file"
done
' sh {} +

可以看到确实图片体积减少很多,但是由于这张图片清晰度有点低,所以压缩后画质当然也不高。
compare.webp

3. 更改博客中的图片链接

vscode 或者别的 ide 批量替换你用到的 markdown 图片链接,将 .jpg 替换为 .webp 即可。
replace.webp

在部署博客之前,记得先在本地测试一下,看看是否有问题。


将 jpg 转换为 webp,提高博客加载速度
https://blog.ovvv.top/posts/72658df0/
作者
mobeicanyue
发布于
2023年12月28日 00:25
更新于
2023年12月30日 11:03
许可协议
\ No newline at end of file +将 jpg 转换为 webp,提高博客加载速度 - 漠北残月的博客

将 jpg 转换为 webp,提高博客加载速度

本文最后更新于 2023年12月30日 11:03

本文主要介绍如何将 Jpg 转换为 WebP。
为什么要转换为 WebP 呢?因为 WebP 图片通常比 JPEG 图片更小,同时保持相似的视觉质量。也是现代浏览器支持、推荐使用的图片格式之一。

1. 安装 cwebp

Archlinux 系 Linux 安装 cwebp

1
sudo pacman -S libwebp

2. 转换

我编写了一个脚本,可以将当前目录下的所有 jpg 文件转换为 webp 文件。
代码遍历所有文件夹并将图片转换为 WebP 格式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
script_dir=$(dirname "$0")

# 使用 find 命令遍历所有子文件夹中的图片文件
find "$script_dir" -type f \( -iname \*.jpg -o -iname \*.jpeg -o -iname \*.png \) -exec sh -c '
for file do
# 获取文件的相对路径和文件名
relpath=$(dirname "$file")
filename=$(basename "$file")

# 使用 cwebp 将图片转换为 WebP 格式并保存到当前目录
cwebp "$file" -o "${relpath}/${filename%.*}.webp"

# 删除原始图片文件已注释, 建议先在测试环境中运行一下再放到代码仓库中运行
# rm "$file"
done
' sh {} +

可以看到确实图片体积减少很多,但是由于这张图片清晰度有点低,所以压缩后画质当然也不高。
compare.webp

3. 更改博客中的图片链接

vscode 或者别的 ide 批量替换你用到的 markdown 图片链接,将 .jpg 替换为 .webp 即可。
replace.webp

在部署博客之前,记得先在本地测试一下,看看是否有问题。


将 jpg 转换为 webp,提高博客加载速度
https://blog.ovvv.top/posts/72658df0/
作者
mobeicanyue
发布于
2023年12月28日 00:25
更新于
2023年12月30日 11:03
许可协议
\ No newline at end of file diff --git a/posts/72658df0/index.html.br b/posts/72658df0/index.html.br index 2a160e6b..c7cfd06b 100644 Binary files a/posts/72658df0/index.html.br and b/posts/72658df0/index.html.br differ diff --git a/posts/72658df0/index.html.gz b/posts/72658df0/index.html.gz index 5794e4c6..6304bd5c 100644 Binary files a/posts/72658df0/index.html.gz and b/posts/72658df0/index.html.gz differ diff --git a/posts/7671c28e/index.html b/posts/7671c28e/index.html index 85722160..a5b0f626 100644 --- a/posts/7671c28e/index.html +++ b/posts/7671c28e/index.html @@ -1 +1 @@ -启用博客评论 - 漠北残月的博客

启用博客评论

本文最后更新于 2023年12月30日 11:03

我认为评论功能是一个博客不可或缺的组成部分,作者可以通过评论获得读者反馈,比如说我文章哪里写错了或者哪里需要更新,而读者也可以通过评论与作者交流。

又由于我 Hexo 部署的是 GitHub Pages 静态博客网页,依靠后端的评论系统不现实。所以我考虑依靠 Github 自带的 Issues 或者 Discussions 评论系统来实现评论功能。

Fluid 主题支持三种基于 GitHub 的评论系统,分别是:Gitalk Utterances Giscus,前两者基于 Issues,后者基于 Discussions。我选择 Discussions,因为我觉得 Discussions 更适合评论,Issues 更适合提 BUG 或需求。

在配置完成后,giscus 加载时,会使用 GitHub Discussions 搜索 API 根据选定的映射方式(如 URL、pathname、title 等)来查找与当前页面关联的 discussion。如果找不到匹配的 discussion,giscus bot 就会在第一次有人留下评论或回应时自动创建一个 discussion。这样你的博客读者 登陆 Github 即可对文章评论了。

1. 配置 Giscus

Giscus 配置页

往下滑动,来到仓库这个选项,填入你的 GitHub 仓库地址。
填入你的仓库 url

可以看到报错了,这是因为我们还没有满足开启 Giscus 的条件

1
2
3
4
5
选择 giscus 连接到的仓库。请确保:

1. 该仓库是公开的,否则访客将无法查看 discussion。
2. giscus app 已安装,否则访客将无法评论和回应。
3. Discussions 功能已在你的仓库中启用。
  1. 先确保你的仓库是公开的,如果不是,可以在仓库的 Settings 里面修改。或者创建一个新的公开仓库,用来存放博客的评论。
    修改仓库为公开

  2. 安装 giscus app,点击 giscus app 按钮,跳转到 GitHub 的安装页面,点击 Install 按钮,选择你的仓库,安装成功后,会跳转回 Giscus 配置页面。
    安装 giscus app
    选择仓库
    安装成功

  3. 启用 Discussions 功能,点击仓库的 Settings,在 Features 选项卡下,勾选 Discussions

  4. 配置 giscus 参数
    配置 giscus 参数
    配置 giscus 参数

    输出 Discussion 的元数据 不知道是什么选项就没有开,有懂的评论区说一下。

现在我们就满足他的要求了
配置成功

此时来到下面,这个 script 标签就会显示你相应的参数。
参数列表

2. 配置 comment 参数

  1. 主题不支持,手动添加评论

在你想让评论出现的位置添加上图的 script 标签。但如果已经存在带有 giscus 类的元素,则评论会被放在那里。
你可以在嵌入的页面中使用 .giscus 和 .giscus-frame 选择器来自定义容器布局。


  1. 主题支持,修改主题配置

修改主题配置(建议搜索 comment 照着修改)

1
2
3
comments:
enable: true
type: giscus

post 和 about 都可以开启评论
来到 giscus: 标签下,对照着 script 标签,填入相应的参数

1
2
3
4
5
6
7
8
9
10
11
12
giscus:
repo: 你的 repo
repo-id: 你的 repo-id
category: 你的 category
category-id: 你的 category-id
theme-light: light
theme-dark: dark
mapping: pathname
reactions-enabled: 1
emit-metadata: 0
input-position: top
lang: zh-CN

检查无误后,清除一下缓存 hexo clean 再部署 Hexo 就可以看到评论功能了。

ok

如果没有看见评论功能,注意清除一下缓存 hexo clean 或者检查一下你的参数配置是否正确。





2323.12.30 更新

发生了件趣事,昨天下午我开启了 Giscus ,晚上就崩溃了,一直显示 Fetch Failed报错 😣我还以为是我配置出了问题,就重新配置了一遍,还是不行。
评论区报错

我去 Github 上面看了一下,很多人都遇到了这个问题。
Github Issue

作者稍后回复说他在度假,回来后(一月 2 号)会修复这个问题。
Github Issue

这位韩国友人说他用了九个月第一期出现这个问题。
行吧,真不幸,刚用上就崩溃了,那就等个几天吧。
Github Issue

这位友人还以为这个bug 是产品特色,哈哈哈哈
这位友人还以为这个`bug` 是产品特色


启用博客评论
https://blog.ovvv.top/posts/7671c28e/
作者
mobeicanyue
发布于
2023年12月29日 16:39
更新于
2023年12月30日 11:03
许可协议
\ No newline at end of file +启用博客评论 - 漠北残月的博客

启用博客评论

本文最后更新于 2024年2月25日 22:14

我认为评论功能是一个博客不可或缺的组成部分,作者可以通过评论获得读者反馈,比如说我文章哪里写错了或者哪里需要更新,而读者也可以通过评论与作者交流。

又由于我 Hexo 部署的是 GitHub Pages 静态博客网页,依靠后端的评论系统不现实。所以我考虑依靠 Github 自带的 Issues 或者 Discussions 评论系统来实现评论功能。

Fluid 主题支持三种基于 GitHub 的评论系统,分别是:Gitalk Utterances Giscus,前两者基于 Issues,后者基于 Discussions。我选择 Discussions,因为我觉得 Discussions 更适合评论,Issues 更适合提 BUG 或需求。

在配置完成后,giscus 加载时,会使用 GitHub Discussions 搜索 API 根据选定的映射方式(如 URL、pathname、title 等)来查找与当前页面关联的 discussion。如果找不到匹配的 discussion,giscus bot 就会在第一次有人留下评论或回应时自动创建一个 discussion。这样你的博客读者 登陆 Github 即可对文章评论了。

1. 配置 Giscus

Giscus 配置页

往下滑动,来到仓库这个选项,填入你的 GitHub 仓库地址。
填入你的仓库 url

可以看到报错了,这是因为我们还没有满足开启 Giscus 的条件

1
2
3
4
5
选择 giscus 连接到的仓库。请确保:

1. 该仓库是公开的,否则访客将无法查看 discussion。
2. giscus app 已安装,否则访客将无法评论和回应。
3. Discussions 功能已在你的仓库中启用。
  1. 先确保你的仓库是公开的,如果不是,可以在仓库的 Settings 里面修改。或者创建一个新的公开仓库,用来存放博客的评论。
    修改仓库为公开

  2. 安装 giscus app,点击 giscus app 按钮,跳转到 GitHub 的安装页面,点击 Install 按钮,选择你的仓库,安装成功后,会跳转回 Giscus 配置页面。
    安装 giscus app
    选择仓库
    安装成功

  3. 启用 Discussions 功能,点击仓库的 Settings,在 Features 选项卡下,勾选 Discussions

  4. 配置 giscus 参数
    配置 giscus 参数
    配置 giscus 参数

    输出 Discussion 的元数据 不知道是什么选项就没有开,有懂的评论区说一下。

现在我们就满足他的要求了
配置成功

此时来到下面,这个 script 标签就会显示你相应的参数。
参数列表

2. 配置 comment 参数

  1. 主题不支持,手动添加评论

在你想让评论出现的位置添加上图的 script 标签。但如果已经存在带有 giscus 类的元素,则评论会被放在那里。
你可以在嵌入的页面中使用 .giscus 和 .giscus-frame 选择器来自定义容器布局。


  1. 主题支持,修改主题配置

修改主题配置(建议搜索 comment 照着修改)

1
2
3
comments:
enable: true
type: giscus

post 和 about 都可以开启评论
来到 giscus: 标签下,对照着 script 标签,填入相应的参数

1
2
3
4
5
6
7
8
9
10
11
12
giscus:
repo: 你的 repo
repo-id: 你的 repo-id
category: 你的 category
category-id: 你的 category-id
theme-light: light
theme-dark: dark
mapping: pathname
reactions-enabled: 1
emit-metadata: 0
input-position: top
lang: zh-CN

检查无误后,清除一下缓存 hexo clean 再部署 Hexo 就可以看到评论功能了。

ok

如果没有看见评论功能,注意清除一下缓存 hexo clean 或者检查一下你的参数配置是否正确。





2323.12.30 更新

发生了件趣事,昨天下午我开启了 Giscus ,晚上就崩溃了,一直显示 Fetch Failed报错 😣我还以为是我配置出了问题,就重新配置了一遍,还是不行。
评论区报错

我去 Github 上面看了一下,很多人都遇到了这个问题。
Github Issue

作者稍后回复说他在度假,回来后(一月 2 号)会修复这个问题。
Github Issue

这位韩国友人说他用了九个月第一期出现这个问题。
行吧,真不幸,刚用上就崩溃了,那就等个几天吧。
Github Issue

这位友人还以为这个bug 是产品特色,哈哈哈哈
这位友人还以为这个`bug` 是产品特色


启用博客评论
https://blog.ovvv.top/posts/7671c28e/
作者
mobeicanyue
发布于
2023年12月29日 16:39
更新于
2024年2月25日 22:14
许可协议
\ No newline at end of file diff --git a/posts/7671c28e/index.html.br b/posts/7671c28e/index.html.br index a14cb443..079f1bd7 100644 Binary files a/posts/7671c28e/index.html.br and b/posts/7671c28e/index.html.br differ diff --git a/posts/7671c28e/index.html.gz b/posts/7671c28e/index.html.gz index 4aed2d80..efb1bede 100644 Binary files a/posts/7671c28e/index.html.gz and b/posts/7671c28e/index.html.gz differ diff --git a/posts/767e8929/index.html b/posts/767e8929/index.html index eda330b0..ce5051b5 100644 --- a/posts/767e8929/index.html +++ b/posts/767e8929/index.html @@ -1 +1 @@ -部署博客到 Cloudflare - 漠北残月的博客

部署博客到 Cloudflare

本文最后更新于 2024年1月19日 23:53

Github Pages 是一个免费的静态网站托管服务,但是由于众所周知的原因,国内访问速度不是很理想,且经常抽风。

Cloudflare 是一个 CDN 服务商,提供免费的 CDN 服务。它提供免费的 自动托管 SSL 证书、代理域名、优化网站内容、优化协议 等服务(国内也由于众所周知的原因,感知并不明显)。而现在 Cloudflare 也推出 Pages 服务,可以将你的网站部署到 Cloudflare 上,这样就可以享受到 Cloudflare 的 完整服务了。

1. 拥有一个 Github 仓库

如果你按照 我的第一篇 Hexo 博客 的教程创建了一个 hexo 博客,那么你已经有了一个 Github 仓库,且 gh-pages 分支已经部署到了 Github Pages。

如果不是 hexo 也没有关系,只要你有一个 Github/Gitlab 博客代码仓库,那么你也可以部署 Cloudflare Pages。

2. 在 Cloudflare 上创建应用程序

打开 Cloudflare 面板,点击 Workers 和 Pages,点击 Pages

创建 Pages

选择 连接到 Git 后,添加你的 Github 账号,选择你要部署的仓库

选择仓库

2.1 方式一 部署现有的静态网站(推荐)

如果你已经在 Github Pages 上部署了你的博客,那么你可以直接选择 拉取现有的静态网站部署。

生产分支 选择 静态网站所在的分支,如果你是部署到gh-pages分支,那就选gh-pages。其他保持不变,点击 保存并部署。
生产分支
静态网站所在的分支

这样子最方便,不需要修改任何配置,和 Github Pages 保持一致。一般等待几分钟,网站就部署好了,点击 项目名.pages.dev 即可访问。

方式二 这种部署方式,如果你有些特殊需求就无法满足,有些操作只能在 Github Actions 上进行,如 获取所有 commit 历史来修复文章更新时间

2.2 方式二 拉取源代码构建部署

当然 如果你没有上述需求,你也可以选择 拉取源代码构建部署

生产分支选择 main
main

构建设置 按需填写。
如果流程过于复杂,可以单独写一个 bash 脚本,执行 bash deploy.sh

构建设置

环境变量,添加 NODE_VERSION,值 为你部署网站使用的版本,如 20


一般等待几分钟,网站就部署好了,点击 `项目名.pages.dev` 即可访问。

3. 配置域名

点击 自定义域,输入你的域名,按要求添加 CNAME 记录,等待几分钟,就可以通过你的域名访问你的网站了。
自定义域


部署博客到 Cloudflare
https://blog.ovvv.top/posts/767e8929/
作者
mobeicanyue
发布于
2024年1月19日 19:10
更新于
2024年1月19日 23:53
许可协议
\ No newline at end of file +部署博客到 Cloudflare - 漠北残月的博客

部署博客到 Cloudflare

本文最后更新于 2024年1月19日 23:53

Github Pages 是一个免费的静态网站托管服务,但是由于众所周知的原因,国内访问速度不是很理想,且经常抽风。

Cloudflare 是一个 CDN 服务商,提供免费的 CDN 服务。它提供免费的 自动托管 SSL 证书、代理域名、优化网站内容、优化协议 等服务(国内也由于众所周知的原因,感知并不明显)。而现在 Cloudflare 也推出 Pages 服务,可以将你的网站部署到 Cloudflare 上,这样就可以享受到 Cloudflare 的 完整服务了。

1. 拥有一个 Github 仓库

如果你按照 我的第一篇 Hexo 博客 的教程创建了一个 hexo 博客,那么你已经有了一个 Github 仓库,且 gh-pages 分支已经部署到了 Github Pages。

如果不是 hexo 也没有关系,只要你有一个 Github/Gitlab 博客代码仓库,那么你也可以部署 Cloudflare Pages。

2. 在 Cloudflare 上创建应用程序

打开 Cloudflare 面板,点击 Workers 和 Pages,点击 Pages

创建 Pages

选择 连接到 Git 后,添加你的 Github 账号,选择你要部署的仓库

选择仓库

2.1 方式一 部署现有的静态网站(推荐)

如果你已经在 Github Pages 上部署了你的博客,那么你可以直接选择 拉取现有的静态网站部署。

生产分支 选择 静态网站所在的分支,如果你是部署到gh-pages分支,那就选gh-pages。其他保持不变,点击 保存并部署。
生产分支
静态网站所在的分支

这样子最方便,不需要修改任何配置,和 Github Pages 保持一致。一般等待几分钟,网站就部署好了,点击 项目名.pages.dev 即可访问。

方式二 这种部署方式,如果你有些特殊需求就无法满足,有些操作只能在 Github Actions 上进行,如 获取所有 commit 历史来修复文章更新时间

2.2 方式二 拉取源代码构建部署

当然 如果你没有上述需求,你也可以选择 拉取源代码构建部署

生产分支选择 main
main

构建设置 按需填写。
如果流程过于复杂,可以单独写一个 bash 脚本,执行 bash deploy.sh

构建设置

环境变量,添加 NODE_VERSION,值 为你部署网站使用的版本,如 20


一般等待几分钟,网站就部署好了,点击 `项目名.pages.dev` 即可访问。

3. 配置域名

点击 自定义域,输入你的域名,按要求添加 CNAME 记录,等待几分钟,就可以通过你的域名访问你的网站了。
自定义域


部署博客到 Cloudflare
https://blog.ovvv.top/posts/767e8929/
作者
mobeicanyue
发布于
2024年1月19日 19:10
更新于
2024年1月19日 23:53
许可协议
\ No newline at end of file diff --git a/posts/767e8929/index.html.br b/posts/767e8929/index.html.br index 2df71106..ec4dc59a 100644 Binary files a/posts/767e8929/index.html.br and b/posts/767e8929/index.html.br differ diff --git a/posts/767e8929/index.html.gz b/posts/767e8929/index.html.gz index 81b86ff6..a189e56b 100644 Binary files a/posts/767e8929/index.html.gz and b/posts/767e8929/index.html.gz differ diff --git a/posts/7a862802/index.html b/posts/7a862802/index.html index d578076d..44921e6d 100644 --- a/posts/7a862802/index.html +++ b/posts/7a862802/index.html @@ -1 +1 @@ -Hexo 博客部署教程 - 漠北残月的博客

Hexo 博客部署教程

本文最后更新于 2024年1月25日 15:07

Hexo 部署 Github Pages, Github Actions 自动部署

激动的心 颤抖的手,这是本站真正意义上的第一篇博客。第零篇是 hexo 生成的 Hello World。

部署 hexo 的过程中遇到了很多问题,最终还是解决了,这里记录一下。

最终实现的效果,一个项目仓库,main 分支存放源代码,gh-pages 存放生成后的网页代码,github pages 加载 gh-pages 的网页代码。
这样,每当我们 push 代码到 main 分支的时候,github action 会自动构建并将代码发布到 gh-pages 分支,github pages 会自动加载 gh-pages 分支的代码,这样就实现了自动部署。

环境:

linux plasma manjaro
nodejs 20
git 2.43
github 账号配置好 ssh(可以参考我前面教程)
vscode

你需要熟知的技能:git 相关操作

1. 新建 用户名.github.io 仓库

gh-create-repo1.webp

记住这串 仓库的ssh地址 后面要用到
ssh-link.webp

创建的仓库名 建议为 用户名.github.io
gh-create-repo2.webp

2. 部署你的 ssh 私钥 到仓库变量中

deploy-key1.webp

填入你的私钥 取名为 KEY,后面要用到
deploy-key2.webp

3. 初始化 hexo 博客目录

找一个空目录 然后执行下面代码,
把 mobeicanyue.github.io 换成你仓库的名字

1
hexo init mobeicanyue.github.io && cd mobeicanyue.github.io

执行结果如下
init-hexo.webp

4. 初始化 git 仓库并提交到 github

1
2
3
git init
git add .
git commit -m "Initial commit"

执行结果如下
init-git.webp

把下面 git@xxx 地址换成你仓库的ssh地址

1
2
git remote add origin git@github.com:mobeicanyue/mobeicanyue.github.io.git
git push -u origin master

执行结果如下
git-push.webp

此时我们刷新一下 github 仓库,就可以看到我们的代码已经提交上去了
但是网页第一次构建肯定是失败的(打叉),因为还没配置 github action

github-code.webp

5. 新建 gh-pages 分支并将其设置为 pages 的默认部署分支

点击分支
new-branch1.webp
创建 gh-pages 分支
new-branch2.webp
设置 gh-pages 为 pages 的默认部署分支
set-branch.webp

6. 编写 github actions 代码

  1. 修改 _config.yml 文件的 repo 改成你仓库的 ssh 地址
    config.webp

  2. 在 hexo 博客文件夹的 .github 目录创建 deploy.yml 文件

new-file.webp

下面的代码需要修改你的用户名和邮箱
还有你对应的 nodejs 版本

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
name: Deploy Hexo

on:
push:
branches:
- main

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check Out
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20

- name: Setup Git
run: |
git config --global user.name "用户名"
git config --global user.email "邮箱"

- name: Setup SSH Key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519

- name: Install Dependencies
run: |
npm install -g hexo-cli
npm install hexo-deployer-git --save
npm install

- name: Deploy Hexo
run: |
hexo clean
hexo generate
hexo deploy

上面的${{ secrets.KEY }} 就是我们前面设置的私钥


  1. 最后提交代码并推送
    commit-push.webp

7. 访问站点,部署成功!

地址为 https://用户名.github.io

success.webp



后记

hexo 部署 github pages 的教程特别多,但是质量鱼龙混杂或者写得不清晰,也没有我想要的部署到 github 源代码双分支管理。踩了很多坑,终于是写完了这篇教程,希望能帮到你。


Hexo 博客部署教程
https://blog.ovvv.top/posts/7a862802/
作者
mobeicanyue
发布于
2023年12月26日 23:18
更新于
2024年1月25日 15:07
许可协议
\ No newline at end of file +Hexo 博客部署教程 - 漠北残月的博客

Hexo 博客部署教程

本文最后更新于 2024年1月25日 15:07

Hexo 部署 Github Pages, Github Actions 自动部署

激动的心 颤抖的手,这是本站真正意义上的第一篇博客。第零篇是 hexo 生成的 Hello World。

部署 hexo 的过程中遇到了很多问题,最终还是解决了,这里记录一下。

最终实现的效果,一个项目仓库,main 分支存放源代码,gh-pages 存放生成后的网页代码,github pages 加载 gh-pages 的网页代码。
这样,每当我们 push 代码到 main 分支的时候,github action 会自动构建并将代码发布到 gh-pages 分支,github pages 会自动加载 gh-pages 分支的代码,这样就实现了自动部署。

环境:

linux plasma manjaro
nodejs 20
git 2.43
github 账号配置好 ssh(可以参考我前面教程)
vscode

你需要熟知的技能:git 相关操作

1. 新建 用户名.github.io 仓库

gh-create-repo1.webp

记住这串 仓库的ssh地址 后面要用到
ssh-link.webp

创建的仓库名 建议为 用户名.github.io
gh-create-repo2.webp

2. 部署你的 ssh 私钥 到仓库变量中

deploy-key1.webp

填入你的私钥 取名为 KEY,后面要用到
deploy-key2.webp

3. 初始化 hexo 博客目录

找一个空目录 然后执行下面代码,
把 mobeicanyue.github.io 换成你仓库的名字

1
hexo init mobeicanyue.github.io && cd mobeicanyue.github.io

执行结果如下
init-hexo.webp

4. 初始化 git 仓库并提交到 github

1
2
3
git init
git add .
git commit -m "Initial commit"

执行结果如下
init-git.webp

把下面 git@xxx 地址换成你仓库的ssh地址

1
2
git remote add origin git@github.com:mobeicanyue/mobeicanyue.github.io.git
git push -u origin master

执行结果如下
git-push.webp

此时我们刷新一下 github 仓库,就可以看到我们的代码已经提交上去了
但是网页第一次构建肯定是失败的(打叉),因为还没配置 github action

github-code.webp

5. 新建 gh-pages 分支并将其设置为 pages 的默认部署分支

点击分支
new-branch1.webp
创建 gh-pages 分支
new-branch2.webp
设置 gh-pages 为 pages 的默认部署分支
set-branch.webp

6. 编写 github actions 代码

  1. 修改 _config.yml 文件的 repo 改成你仓库的 ssh 地址
    config.webp

  2. 在 hexo 博客文件夹的 .github 目录创建 deploy.yml 文件

new-file.webp

下面的代码需要修改你的用户名和邮箱
还有你对应的 nodejs 版本

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
name: Deploy Hexo

on:
push:
branches:
- main

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check Out
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20

- name: Setup Git
run: |
git config --global user.name "用户名"
git config --global user.email "邮箱"

- name: Setup SSH Key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519

- name: Install Dependencies
run: |
npm install -g hexo-cli
npm install hexo-deployer-git --save
npm install

- name: Deploy Hexo
run: |
hexo clean
hexo generate
hexo deploy

上面的${{ secrets.KEY }} 就是我们前面设置的私钥


  1. 最后提交代码并推送
    commit-push.webp

7. 访问站点,部署成功!

地址为 https://用户名.github.io

success.webp



后记

hexo 部署 github pages 的教程特别多,但是质量鱼龙混杂或者写得不清晰,也没有我想要的部署到 github 源代码双分支管理。踩了很多坑,终于是写完了这篇教程,希望能帮到你。


Hexo 博客部署教程
https://blog.ovvv.top/posts/7a862802/
作者
mobeicanyue
发布于
2023年12月26日 23:18
更新于
2024年1月25日 15:07
许可协议
\ No newline at end of file diff --git a/posts/7a862802/index.html.br b/posts/7a862802/index.html.br index 649fb2d8..ad2d2264 100644 Binary files a/posts/7a862802/index.html.br and b/posts/7a862802/index.html.br differ diff --git a/posts/7a862802/index.html.gz b/posts/7a862802/index.html.gz index 5ef0da2f..082081bb 100644 Binary files a/posts/7a862802/index.html.gz and b/posts/7a862802/index.html.gz differ diff --git a/posts/9c18a796/index.html b/posts/9c18a796/index.html index 8ece52be..c40ab329 100644 --- a/posts/9c18a796/index.html +++ b/posts/9c18a796/index.html @@ -1 +1 @@ -部署自己的网盘 — Alist 安装配置教程 - 漠北残月的博客

部署自己的网盘 — Alist 安装配置教程

本文最后更新于 2024年1月24日 22:20

本文档为 Alist 部署教程,主要介绍 Alist 的配置及使用,参考了官网的教程来编写。更多信息请参照官网 https://alist.nn.ci/zh/guide

1. 安装 Alist

打开 1Panel 面板,点击 应用商店,搜索 Alist,点击 安装 即可。

1Panel 安装配置教程

仅适用于 Linux amd64/arm64 平台
打开命令行输入

1
curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install

alist 默认安装在 /opt/alist 中

启动: systemctl start alist
关闭: systemctl stop alist
状态: systemctl status alist
重启: systemctl restart alist

创建一个目录

1
mkdir /etc/alist

进入该目录

1
cd /etc/alist

下载 docker-compose.yml 文件

1
wget https://alist.nn.ci/docker-compose.yml

运行容器

1
docker-compose up -d

打开 AList Release 下载待部署系统对应的文件。下载后解压,赋予文件执行权限后运行即可。Windows 推荐使用该方式安装。
参照 https://alist.nn.ci/zh/guide/install/manual.html

2. 获取 Alist 密码

在安装路径下(能访问到 alist 可执行文件)执行如下命令

(如果是 1panel 安装,就点击 容器 列表,点击 alist 容器终端 按钮,在容器终端下再执行如下命令。)

随机生成一个密码

1
./alist admin random

手动设置一个密码,NEW_PASSWORD是指你需要设置的密码

1
./alist admin set NEW_PASSWORD

如果是 doekcer compose 安装,可执行如下命令
1
docker exec -it alist ./alist admin random
1
docker exec -it alist ./alist admin set NEW_PASSWORD

3. 配置 Alist

默认情况下,应用程序将在 http://localhost:5244 上启动。你可能需要代理 Web 服务器的请求,或更改端口来直接为应用程序提供服务。

浏览器访问 Alist 登陆页面
输入用户名 admin 和上一步获取的 密码
点击登陆

3.1 添加本地存储

  1. 在你安装 alist 的路径创建一个目录 files 用来存储文件,便于持久化存储。一键脚本路径为 /opt/alist/files;docker-compose 路径为 etc/alist/files

  2. 然后开始添加存储
    左边栏点击 存储,然后点击添加,驱动选择 本机存储,点击添加

  3. 挂载路径填写 /,意味着此存储为 网盘根目录。往下滑,找到 根文件夹路径
    如果你是一键脚本安装的,就填写 /opt/alist/files;如果你是 docker-compose 安装的,就填 /opt/alist/data/files。(注意,这个是容器内的映射路径,不是宿主机的路径)

也就是 根文件夹路径(/opt/alist/files) –> 挂载路径(/),这样就可以把 /opt/alist/files 映射到 /,也就是网盘根目录。

最下面点击 保存

3.2 启用游客访问

左边栏点击 用户
编辑 guest 用户,将 停用 取消勾选,然后点击保存

3.3 启用索引

按照以下步骤开启搜索:

  1. 转到索引页,选择一个搜索索引,并单击保存;
  2. 保存索引后,单击构建索引来构建索引;
  3. 现在你可以通过点击页面右上角的搜索块或使用快捷键 Ctrl + K 来搜索文件。

部署自己的网盘 — Alist 安装配置教程
https://blog.ovvv.top/posts/9c18a796/
作者
mobeicanyue
发布于
2024年1月17日 20:50
更新于
2024年1月24日 22:20
许可协议
\ No newline at end of file +部署自己的网盘 — Alist 安装配置教程 - 漠北残月的博客

部署自己的网盘 — Alist 安装配置教程

本文最后更新于 2024年1月24日 22:20

本文档为 Alist 部署教程,主要介绍 Alist 的配置及使用,参考了官网的教程来编写。更多信息请参照官网 https://alist.nn.ci/zh/guide

1. 安装 Alist

打开 1Panel 面板,点击 应用商店,搜索 Alist,点击 安装 即可。

1Panel 安装配置教程

仅适用于 Linux amd64/arm64 平台
打开命令行输入

1
curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install

alist 默认安装在 /opt/alist 中

启动: systemctl start alist
关闭: systemctl stop alist
状态: systemctl status alist
重启: systemctl restart alist

创建一个目录

1
mkdir /etc/alist

进入该目录

1
cd /etc/alist

下载 docker-compose.yml 文件

1
wget https://alist.nn.ci/docker-compose.yml

运行容器

1
docker-compose up -d

打开 AList Release 下载待部署系统对应的文件。下载后解压,赋予文件执行权限后运行即可。Windows 推荐使用该方式安装。
参照 https://alist.nn.ci/zh/guide/install/manual.html

2. 获取 Alist 密码

在安装路径下(能访问到 alist 可执行文件)执行如下命令

(如果是 1panel 安装,就点击 容器 列表,点击 alist 容器终端 按钮,在容器终端下再执行如下命令。)

随机生成一个密码

1
./alist admin random

手动设置一个密码,NEW_PASSWORD是指你需要设置的密码

1
./alist admin set NEW_PASSWORD

如果是 doekcer compose 安装,可执行如下命令
1
docker exec -it alist ./alist admin random
1
docker exec -it alist ./alist admin set NEW_PASSWORD

3. 配置 Alist

默认情况下,应用程序将在 http://localhost:5244 上启动。你可能需要代理 Web 服务器的请求,或更改端口来直接为应用程序提供服务。

浏览器访问 Alist 登陆页面
输入用户名 admin 和上一步获取的 密码
点击登陆

3.1 添加本地存储

  1. 在你安装 alist 的路径创建一个目录 files 用来存储文件,便于持久化存储。一键脚本路径为 /opt/alist/files;docker-compose 路径为 etc/alist/files

  2. 然后开始添加存储
    左边栏点击 存储,然后点击添加,驱动选择 本机存储,点击添加

  3. 挂载路径填写 /,意味着此存储为 网盘根目录。往下滑,找到 根文件夹路径
    如果你是一键脚本安装的,就填写 /opt/alist/files;如果你是 docker-compose 安装的,就填 /opt/alist/data/files。(注意,这个是容器内的映射路径,不是宿主机的路径)

也就是 根文件夹路径(/opt/alist/files) –> 挂载路径(/),这样就可以把 /opt/alist/files 映射到 /,也就是网盘根目录。

最下面点击 保存

3.2 启用游客访问

左边栏点击 用户
编辑 guest 用户,将 停用 取消勾选,然后点击保存

3.3 启用索引

按照以下步骤开启搜索:

  1. 转到索引页,选择一个搜索索引,并单击保存;
  2. 保存索引后,单击构建索引来构建索引;
  3. 现在你可以通过点击页面右上角的搜索块或使用快捷键 Ctrl + K 来搜索文件。

部署自己的网盘 — Alist 安装配置教程
https://blog.ovvv.top/posts/9c18a796/
作者
mobeicanyue
发布于
2024年1月17日 20:50
更新于
2024年1月24日 22:20
许可协议
\ No newline at end of file diff --git a/posts/9c18a796/index.html.br b/posts/9c18a796/index.html.br index 6f0ff1f6..af0a5a6f 100644 Binary files a/posts/9c18a796/index.html.br and b/posts/9c18a796/index.html.br differ diff --git a/posts/9c18a796/index.html.gz b/posts/9c18a796/index.html.gz index 0e404473..18c0f01a 100644 Binary files a/posts/9c18a796/index.html.gz and b/posts/9c18a796/index.html.gz differ diff --git a/posts/a89b8953/index.html b/posts/a89b8953/index.html index 017d65e8..1b460731 100644 --- a/posts/a89b8953/index.html +++ b/posts/a89b8953/index.html @@ -1 +1 @@ -压缩部署的代码 - 漠北残月的博客

压缩部署的代码

本文最后更新于 2023年12月29日 10:20

众所周知,我们在写 HTML CSS 和 JS 文件时文件中会包含许多换行和空格。
然而,这些换行和空格对浏览器而言并不具备实际意义,反而可能降低页面的加载速度,会对页面的渲染性能造成一定影响。比如我们看个
jquery 的源码
可以发现代码密密麻麻没有一点可读性,但是这样的代码浏览器来说加载起来更快,因为浏览器不需要去解析空格和换行符,而是直接读取代码

因此,为了优化页面性能,我们需要对页面的静态资源进行压缩,包括 CSS、JS 和 HTML、图片、字体等。为了简化这一过程,可使用 Hexo 插件 hexo-minify 进行压缩操作。这样一来,我们可以有效地减少文件大小,提升页面加载速度。

1. 安装 hexo-minify 插件

在你的 Hexo 博客目录下,执行以下命令安装 hexo-minify 插件:

1
npm install hexo-minify --save

2. 配置 hexo-minify 插件

具体用法及参数请查阅官方文档
在 Hexo 博客目录下,找到 _config.yml 文件,添加以下配置:
没特殊需求默认即可

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
## Hexo-minify Default Config Options
minify:
preview: false ## 本地预览时是否压缩
exclude: ['*.min.*']
js:
enable: true
sourceMap:
enable: false ## 生成 sourceMap
## 将 sourceMappingURL 插入压缩后的 js 文件,如果为 false 则需要在浏览器开发者工具中手动添加 sourceMap
sourceMappingURL: false ## //# sourceMappingURL=xxx.js.map
## 详细配置: https://github.com/terser/terser#minify-options
options: {}
css:
enable: true
## 详细配置: https://github.com/clean-css/clean-css#compatibility-modes
options: {}
html:
enable: true
## 详细配置: https://github.com/kangax/html-minifier#options-quick-reference
options:
minifyJS: true # Compressed JavaScript
minifyCSS: true # CSS Compressed
removeComments: true # Remove the comments
collapseWhitespace: true # Delete any extra space
removeAttributeQuotes: true # Delete attribute quotes
image:
enable: true
svg:
enable: true
## 详细配置: https://github.com/imagemin/imagemin-svgo#imageminsvgooptionsbuffer
options: {}
jpg:
enable: true
## 详细配置: https://github.com/imagemin/imagemin-jpegtran#options
options: {}
png:
enable: true
## 详细配置: https://github.com/imagemin/imagemin-pngquant#options
options: {}
gif:
enable: true
## 详细配置: https://www.npmjs.com/package/imagemin-gifsicle#options
options: {}
webp:
enable: true
## 详细配置: https://github.com/imagemin/imagemin-webp#options
options: {}
font:
enable: false
## 详细配置: https://github.com/Lete114/fontmin-spider#api
options: {}

这样我们生成的代码就会被压缩 .
在本地运行博客默认不启用压缩 preview: false

现在我们想看看效果,就设置为 preview: true
再运行

1
hexo clean && hexo g

可以看到 html 确实被压缩了
压缩后


压缩部署的代码
https://blog.ovvv.top/posts/a89b8953/
作者
mobeicanyue
发布于
2023年12月28日 02:51
更新于
2023年12月29日 10:20
许可协议
\ No newline at end of file +压缩部署的代码 - 漠北残月的博客

压缩部署的代码

本文最后更新于 2023年12月29日 10:20

众所周知,我们在写 HTML CSS 和 JS 文件时文件中会包含许多换行和空格。
然而,这些换行和空格对浏览器而言并不具备实际意义,反而可能降低页面的加载速度,会对页面的渲染性能造成一定影响。比如我们看个
jquery 的源码
可以发现代码密密麻麻没有一点可读性,但是这样的代码浏览器来说加载起来更快,因为浏览器不需要去解析空格和换行符,而是直接读取代码

因此,为了优化页面性能,我们需要对页面的静态资源进行压缩,包括 CSS、JS 和 HTML、图片、字体等。为了简化这一过程,可使用 Hexo 插件 hexo-minify 进行压缩操作。这样一来,我们可以有效地减少文件大小,提升页面加载速度。

1. 安装 hexo-minify 插件

在你的 Hexo 博客目录下,执行以下命令安装 hexo-minify 插件:

1
npm install hexo-minify --save

2. 配置 hexo-minify 插件

具体用法及参数请查阅官方文档
在 Hexo 博客目录下,找到 _config.yml 文件,添加以下配置:
没特殊需求默认即可

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
## Hexo-minify Default Config Options
minify:
preview: false ## 本地预览时是否压缩
exclude: ['*.min.*']
js:
enable: true
sourceMap:
enable: false ## 生成 sourceMap
## 将 sourceMappingURL 插入压缩后的 js 文件,如果为 false 则需要在浏览器开发者工具中手动添加 sourceMap
sourceMappingURL: false ## //# sourceMappingURL=xxx.js.map
## 详细配置: https://github.com/terser/terser#minify-options
options: {}
css:
enable: true
## 详细配置: https://github.com/clean-css/clean-css#compatibility-modes
options: {}
html:
enable: true
## 详细配置: https://github.com/kangax/html-minifier#options-quick-reference
options:
minifyJS: true # Compressed JavaScript
minifyCSS: true # CSS Compressed
removeComments: true # Remove the comments
collapseWhitespace: true # Delete any extra space
removeAttributeQuotes: true # Delete attribute quotes
image:
enable: true
svg:
enable: true
## 详细配置: https://github.com/imagemin/imagemin-svgo#imageminsvgooptionsbuffer
options: {}
jpg:
enable: true
## 详细配置: https://github.com/imagemin/imagemin-jpegtran#options
options: {}
png:
enable: true
## 详细配置: https://github.com/imagemin/imagemin-pngquant#options
options: {}
gif:
enable: true
## 详细配置: https://www.npmjs.com/package/imagemin-gifsicle#options
options: {}
webp:
enable: true
## 详细配置: https://github.com/imagemin/imagemin-webp#options
options: {}
font:
enable: false
## 详细配置: https://github.com/Lete114/fontmin-spider#api
options: {}

这样我们生成的代码就会被压缩 .
在本地运行博客默认不启用压缩 preview: false

现在我们想看看效果,就设置为 preview: true
再运行

1
hexo clean && hexo g

可以看到 html 确实被压缩了
压缩后


压缩部署的代码
https://blog.ovvv.top/posts/a89b8953/
作者
mobeicanyue
发布于
2023年12月28日 02:51
更新于
2023年12月29日 10:20
许可协议
\ No newline at end of file diff --git a/posts/a89b8953/index.html.br b/posts/a89b8953/index.html.br index 3698457a..ee20e7d4 100644 Binary files a/posts/a89b8953/index.html.br and b/posts/a89b8953/index.html.br differ diff --git a/posts/a89b8953/index.html.gz b/posts/a89b8953/index.html.gz index 99acb604..9f5d9596 100644 Binary files a/posts/a89b8953/index.html.gz and b/posts/a89b8953/index.html.gz differ diff --git a/posts/af028bbd/index.html b/posts/af028bbd/index.html index 687502e8..05fe3cab 100644 --- a/posts/af028bbd/index.html +++ b/posts/af028bbd/index.html @@ -1 +1 @@ -纪事与感悟 — 我的 2023 - 漠北残月的博客

纪事与感悟 — 我的 2023

本文最后更新于 2024年2月24日 11:50

2024 农历甲辰龙年,在这一年一度的新春佳节,祝大家龙年行大运!

龙行大运

2023 已经过去了,迈入 2024。我总迫切着想记录点什么,记录这一年的点点滴滴或者写点感悟,以后回忆起来应该会感叹,“啊,原来我这一年干了这些事啊,现在看来真有意思”。一边摩挲着手机,一边回忆起青春岁月。

本想要在元旦左右写下这一年的感悟与记事,但一来当时考完试打算歇一歇,二来元旦要去中学实习,拖来拖去 一拉一扯就拖到了现在。


兜兜转转又是一年春节,春节是我一年中最无拘无束、感到自由的一段时间,没有繁重的学业负担(中学会有假期作业,但起码过年那会不用考虑)、不用太规律的作息、不用考虑上学的事情、拜访亲戚有红包拿,想怎么玩就怎么玩,所有的烦恼似乎都可以在这段时间里甩开、忘掉。今余得闲,徐而思忆此岁之琐琐细事,如泉之流,如叶之落。

技术折腾经历

过去这一年,仿佛什么都折腾了,又仿佛什么都没折腾。一开始看见别的同学搭服务器玩,想着我也弄一个。白嫖了阿里云的半年学生机,在阿里云买了个域名,开始了我的折腾之路。一开始折腾一窍不通,踩了很多坑,但好在也是学到了很多东西。

看到别人都用宝塔面板,我也装了一个,了解了很多运维的知识。别人搭建了自托管的 Bitwarden 服务,我也装了一个,付费的 2FA 免费用,数据全在自己服务器上,真不错。

后面看着别人的博客用 halo 搭建的,我也折腾了一下,安装过程需要 docker-compose,一窍不通,自己折腾了一下午搞成了,顺便学习了 dokcer 的知识和使用,还搞明白了 nginx 的反向代理。

halo 博客用了 hao 的主题,是一个非常好看的主题,博客内容就复制了一些 kpop 美女展示,没有正儿八经地写博客。但是 halo 有很多诟病的地方,比如写文章体验很差(那个文章编辑器很混乱),springboot 后台内存占用过高等等。后面服务器到期了我就不用 halo 了,转成了 hexo 静态博客,博客全静态生成,清爽无比。

宝塔面板也不用了,换成了更牛逼的 1Panel 面板,不仅开源、UI 好看,而且它的应用商店有很多开源的软件、项目可以一键安装部署,反向代理、防火墙、SSH 管理、Swap 分配等功能管理起来都是相当方便。
服务器也不在阿里云买,换成了 Ucloud 的香港机,因为境内的服务器备案太麻烦了,香港的机器随便折腾。域名同理,转到了 dynadot,可用支付宝支付。

域名 DNS 用的是 Cloudflare 的服务,Cloudflare 是真牛逼,提供了很多免费的服务和集成了很多便捷的功能,域名经过它代理的话,还可以隐藏服务器的真实地址,积极跟进很多新的技术协议如 brotli http3 等等。

我还学习了几门型新的语言,Rust、Go、Dart,其中前两门都没有达到精通的程度,只是自己写个小程序玩玩。

  • Rust 我一开始被他的宣传吸引,系统级的语言,极致的安全与速度,代价是学习难度特别高,我学了大概三分之一就开摆了。
  • Go 语言是个好东西,有很大的潜力,语法简单,功能强大,我觉得是替代 Java 的不错的选择,但是国内生态好像一般。
  • Flutter 是一个由谷歌开发的开源跨平台应用软件开发工具包,用于为 Android、iOS、Windows、macOS、Linux Desktop 开发应用,编程语言是 Dart。国内有个社区专门负责 Flutter 和 Dart 的汉化,我给他们仓库提过翻译 PR,有幸被合并了。Dart 语言中规中矩。

之前用 Github 一直都是直接使用别人的成品 release,再后来 遇到问题会去定位报错、看源码、提 ISSUE,23 年学会了给别人的项目提 PR,给一些自己常用的开源项目提过 PR,看到别人 merge 了你的代码,还是挺有成就感的。我也开始写一些小的开源项目,比如一个简单的爬虫、简单的网络连接程序等等。

实习经历

去年也是颇为特殊的一年 - 我备战考研 今年即将毕业,如果一切顺利,那我就成为一名硕士生,否则就将迈入社会。现在准备着毕设和找工作,希望一切顺利。比较气的是上个月考公没报上(最后那天才想起来要报名),教资则是报上了但是没缴费,被取消资格。😅

元旦的时候在市级中学实习。市里的重点中学有两所,一所是附中,一所是市级中学。

我实习的内容是上信息技术课,课程比较轻松,压力也小很多,心情也逐渐由忐忑变为从容。
众所周知,信息课是水课,百分之 95 的学生去机房都是玩电脑的,很少有人听课。不知道你们是不是这样,至少我的中学时代是这么过来的。

第一天去的时候是看自习。和同学们说老师有事来不了就让他们自习了(老师是真有事了让我看自习)
从带我实习的老师那里了解到,学校的信息课课程数并不多,他是信息中心的老师,除了上课之外,还负责修理学校老师的电脑,对接公司产品等(如收银机等)

第二天,听他们信息课课题组备课 讲了很多准备上课的要点和设计理念、思路,我才发现想上好一门课是真的不容易。其中还有老师提到了应试小技巧,比如说课题设计的时候有意引导检查老师往那个思路去想,然后准备好那里的课程,抽查的时候果然问了那里,等等。还有一些逸闻趣事,挺有意思的。

带我的老师让我去备课,讲授 python 的循环体结构,我一看这内容这么简单,相信自己一定能够讲好。结果隔天讲下来发现我轻敌了,没上课之前自信心满满,但是上了讲台开始讲课的时候才发现是非常紧张且束手无策,脑子里只有照着 ppt 念下去这个念头。老师给我提了许多意见和改进措施,我回去把教案写了,并且听了一天的课以后才再次走上讲台,这次我有所进步,心情也不再忐忑。

其实上课最重要的就是备好课,对要讲授的内容胸有成竹,再就是语速不要太快了,不然学生不仅听不懂,课还容易太早结束。

经过这次实习,对我还是有帮助的,作为一名理工男,最缺乏的就是语言的表达能力。虽然计信学院每个学期的课程都会有好几门课程设计,而且都要上讲台亲自演讲,但那种感觉还是不一样的,课设只有老师在认真听,而且老师肯定比你懂,就算讲的很差老师也能理解,并且时间也不到五分钟。但是讲授给学生听就不一样了,他们对于编程一片空白,你需要将知识完整的、以简单易懂的方式传授给他们,需要精心设计与思考,以及自己对于课堂节奏的把握。熟能生巧吧,多做多会。这份技能相信对我的面试也会有所帮助。

说到饮食住宿,我在附近租了一个月的房子,且由于是在学校附近,吃饭也不愁,沙县 正新鸡排 炒粉 粉汤 炸鸡等应有具有。房子不大,但是住起来也算舒服,没有热水,热水壶煮水洗。

重游附中有感

年年岁岁花相似,岁岁年年人不同。
年年岁岁花相似,岁岁年年人不同

2023 这一年充满了未知与迷茫,不似中学时期那样方向明确 只有一个:好好读书,考个好大学。中学时代 6 年在附中,是我人生中最美好的一段时光。前段时间回了一趟母校,发现好像很多东西变了,但是很多东西又没变。

那天天气很阴,但我还是很高兴,沿着记忆中的路走了一遍。多年未见,学校里仍然是郁郁葱葱,一片生机盎然,校门附近那些树居然还是没长高,不知道是移植了还是干嘛了。往左走是通往报告厅的路,还记得这条路的大草坪是我们九年级的卫生区,恍惚中仿佛还能回忆起当时扫地和除草的人影。
校门口进来

沿路走下去,就是一条木质长廊,我印象中是高二高三修的,木质长廊在教学楼中间也有,不过不长。但是有很多植物和爬山虎围绕,郁郁葱葱。
教学楼旁
教学楼中间
路过了 3,4 号教学楼,就来到了体育馆,附中的体育馆很大,在里面我们参加 观看了很多篮球比赛和学校组织的活动。但是很遗憾的是我印象深刻的不多了,印象里大都是来放松缓解学习压力的🤣

接着走会穿过体育馆,路过园丁超市,这个超市零食种类很多,有水果蔬菜,还有些食堂的超市买不到的玩意。

园丁超市对面是新华书店,印象中是初三左右开的?里面有很多书,中学时我是不折不扣的书迷,体育课摸鱼常常来这里看书,当然更多时候是在寝室看。当时看了很多刘慈欣的科幻长短篇小说,明朝那些事,缥缈录,还有一些名著 但是不多。那个时候看的起劲都是挑灯夜读或者中午有空就看🤣,到高三才不这样。
穿过体育馆走廊就是三食堂和操场。

三食堂当时是高三学生的专属食堂,不知道现在还是不是。虽然没有进去看,但我现在还记得很清楚,里面是一条长长的通道。要么在门口打饭,要么就在走廊的尽头打饭。走廊的中间摆着若干台电视机,我们在吃饭的时候经常会抬头看。但在附中,吃饭的速度要相当快的,往往没看几眼饭就都吃完了。

往右走就是操场,每天都会跑操,高三除外。现在想想真是辛苦,冬天的时候往往天没亮就摸着黑起床了。在 6:30 之前赶到操场来跑步。🤣但是当时我居然都可以很早起床且不迟到
操场
操场
学校每年夏季都会举办运动会,太阳相当毒辣,但好消息是有妹妹看 乐。我记得我参加过好几次。最后一次参加是在高二,当时我想着说,高三就没机会了,给自己的中学留点回忆,就报名了跑步接力,成绩中规中矩。

沿着操场外围小走一段就来到了体育馆前的一大片平地,体育课往往都在这里举行。6 年来,所有体育课的缩影似乎都化为了体育课开始的准备动作。12345678
体育馆
穿过体育馆的平地,就来到了 a 栋学生宿舍楼,高三的回忆。这栋宿舍楼地理位置特别好,周末休息,不上课的时候,午休结束直接翻栏杆就能去抢篮球场地。但是现在 1 楼好像都被套防盗网了,难绷。

沿着宿舍楼和篮球场的小路就能走到一食堂。
篮球场
一食堂
学校一共就 123 三个食堂。一食堂后面就是 E 栋学生宿舍楼。初一初三还有高一都住这里。印象中 A E 栋的宿管阿姨人特别好,受学生欢迎。八年级则是住 E 栋后面的 F 栋。住宿期间真是发生了很多有意思的趣事,说一天也道不尽,比如高一那会儿住在 2 楼宿管阿姨旁边的宿舍,夜里悄悄玩狼人杀,玩到半夜 2 点;和舍友天南海北聊天;放学急急忙忙洗澡。其实细细思索都是很美好的记忆,在那里站许久都能想起不少的事来,只是当时道寻常,现在叹年少不再,下次有空再展开说。

沿路右转,就是一条长长的路,通往 12 栋教学楼。我待的最久的教学楼。外面似乎还是老样子,教室我没近距离看。

我刚进入学校时 学校方才创立两年,我离开时,学校已然是能够培养出清北优秀学生的省内名校。虽然我最后高考成绩并没有那么理想,但还是要感谢学校给我的这段美好的回忆,感谢所有老师对我的栽培🙏。苦涩的东西总是在若干年后咀嚼反刍才显得那样清甜,怅然若失。

就像很多年前我给民哥写过的一封信一样。民哥是我高二的语文老师,我很喜欢上民哥的语文课,因为他相当风趣幽默且教学深入浅出,他经常读我的月考作文。但是我当时成绩不好。分到下面的班,他在走廊上鼓励我要接着好好学习,语重心长 尊尊教诲。我很感动,也很难过,因为分班以后上不了他的课了,后面写了一封信和送了一本毕淑敏的书给他表达不舍。信的内容我记不起了,被读过的作文好像也找不到了。懊悔 难过😔

现在大学快毕业了,我会不会像怀念中学这样怀念我的大学时光呢?说实话,我不知道,但我知道应该先过好当下。有空了就多到校园里走走,拍照📸留念一下。愿无悔


纪事与感悟 — 我的 2023
https://blog.ovvv.top/posts/af028bbd/
作者
mobeicanyue
发布于
2024年2月12日 20:15
更新于
2024年2月24日 11:50
许可协议
\ No newline at end of file +纪事与感悟 — 我的 2023 - 漠北残月的博客

纪事与感悟 — 我的 2023

本文最后更新于 2024年2月24日 11:50

2024 农历甲辰龙年,在这一年一度的新春佳节,祝大家龙年行大运!

龙行大运

2023 已经过去了,迈入 2024。我总迫切着想记录点什么,记录这一年的点点滴滴或者写点感悟,以后回忆起来应该会感叹,“啊,原来我这一年干了这些事啊,现在看来真有意思”。一边摩挲着手机,一边回忆起青春岁月。

本想要在元旦左右写下这一年的感悟与记事,但一来当时考完试打算歇一歇,二来元旦要去中学实习,拖来拖去 一拉一扯就拖到了现在。


兜兜转转又是一年春节,春节是我一年中最无拘无束、感到自由的一段时间,没有繁重的学业负担(中学会有假期作业,但起码过年那会不用考虑)、不用太规律的作息、不用考虑上学的事情、拜访亲戚有红包拿,想怎么玩就怎么玩,所有的烦恼似乎都可以在这段时间里甩开、忘掉。今余得闲,徐而思忆此岁之琐琐细事,如泉之流,如叶之落。

技术折腾经历

过去这一年,仿佛什么都折腾了,又仿佛什么都没折腾。一开始看见别的同学搭服务器玩,想着我也弄一个。白嫖了阿里云的半年学生机,在阿里云买了个域名,开始了我的折腾之路。一开始折腾一窍不通,踩了很多坑,但好在也是学到了很多东西。

看到别人都用宝塔面板,我也装了一个,了解了很多运维的知识。别人搭建了自托管的 Bitwarden 服务,我也装了一个,付费的 2FA 免费用,数据全在自己服务器上,真不错。

后面看着别人的博客用 halo 搭建的,我也折腾了一下,安装过程需要 docker-compose,一窍不通,自己折腾了一下午搞成了,顺便学习了 dokcer 的知识和使用,还搞明白了 nginx 的反向代理。

halo 博客用了 hao 的主题,是一个非常好看的主题,博客内容就复制了一些 kpop 美女展示,没有正儿八经地写博客。但是 halo 有很多诟病的地方,比如写文章体验很差(那个文章编辑器很混乱),springboot 后台内存占用过高等等。后面服务器到期了我就不用 halo 了,转成了 hexo 静态博客,博客全静态生成,清爽无比。

宝塔面板也不用了,换成了更牛逼的 1Panel 面板,不仅开源、UI 好看,而且它的应用商店有很多开源的软件、项目可以一键安装部署,反向代理、防火墙、SSH 管理、Swap 分配等功能管理起来都是相当方便。
服务器也不在阿里云买,换成了 Ucloud 的香港机,因为境内的服务器备案太麻烦了,香港的机器随便折腾。域名同理,转到了 dynadot,可用支付宝支付。

域名 DNS 用的是 Cloudflare 的服务,Cloudflare 是真牛逼,提供了很多免费的服务和集成了很多便捷的功能,域名经过它代理的话,还可以隐藏服务器的真实地址,积极跟进很多新的技术协议如 brotli http3 等等。

我还学习了几门型新的语言,Rust、Go、Dart,其中前两门都没有达到精通的程度,只是自己写个小程序玩玩。

  • Rust 我一开始被他的宣传吸引,系统级的语言,极致的安全与速度,代价是学习难度特别高,我学了大概三分之一就开摆了。
  • Go 语言是个好东西,有很大的潜力,语法简单,功能强大,我觉得是替代 Java 的不错的选择,但是国内生态好像一般。
  • Flutter 是一个由谷歌开发的开源跨平台应用软件开发工具包,用于为 Android、iOS、Windows、macOS、Linux Desktop 开发应用,编程语言是 Dart。国内有个社区专门负责 Flutter 和 Dart 的汉化,我给他们仓库提过翻译 PR,有幸被合并了。Dart 语言中规中矩。

之前用 Github 一直都是直接使用别人的成品 release,再后来 遇到问题会去定位报错、看源码、提 ISSUE,23 年学会了给别人的项目提 PR,给一些自己常用的开源项目提过 PR,看到别人 merge 了你的代码,还是挺有成就感的。我也开始写一些小的开源项目,比如一个简单的爬虫、简单的网络连接程序等等。

实习经历

去年也是颇为特殊的一年 - 我备战考研 今年即将毕业,如果一切顺利,那我就成为一名硕士生,否则就将迈入社会。现在准备着毕设和找工作,希望一切顺利。比较气的是上个月考公没报上(最后那天才想起来要报名),教资则是报上了但是没缴费,被取消资格。😅

元旦的时候在市级中学实习。市里的重点中学有两所,一所是附中,一所是市级中学。

我实习的内容是上信息技术课,课程比较轻松,压力也小很多,心情也逐渐由忐忑变为从容。
众所周知,信息课是水课,百分之 95 的学生去机房都是玩电脑的,很少有人听课。不知道你们是不是这样,至少我的中学时代是这么过来的。

第一天去的时候是看自习。和同学们说老师有事来不了就让他们自习了(老师是真有事了让我看自习)
从带我实习的老师那里了解到,学校的信息课课程数并不多,他是信息中心的老师,除了上课之外,还负责修理学校老师的电脑,对接公司产品等(如收银机等)

第二天,听他们信息课课题组备课 讲了很多准备上课的要点和设计理念、思路,我才发现想上好一门课是真的不容易。其中还有老师提到了应试小技巧,比如说课题设计的时候有意引导检查老师往那个思路去想,然后准备好那里的课程,抽查的时候果然问了那里,等等。还有一些逸闻趣事,挺有意思的。

带我的老师让我去备课,讲授 python 的循环体结构,我一看这内容这么简单,相信自己一定能够讲好。结果隔天讲下来发现我轻敌了,没上课之前自信心满满,但是上了讲台开始讲课的时候才发现是非常紧张且束手无策,脑子里只有照着 ppt 念下去这个念头。老师给我提了许多意见和改进措施,我回去把教案写了,并且听了一天的课以后才再次走上讲台,这次我有所进步,心情也不再忐忑。

其实上课最重要的就是备好课,对要讲授的内容胸有成竹,再就是语速不要太快了,不然学生不仅听不懂,课还容易太早结束。

经过这次实习,对我还是有帮助的,作为一名理工男,最缺乏的就是语言的表达能力。虽然计信学院每个学期的课程都会有好几门课程设计,而且都要上讲台亲自演讲,但那种感觉还是不一样的,课设只有老师在认真听,而且老师肯定比你懂,就算讲的很差老师也能理解,并且时间也不到五分钟。但是讲授给学生听就不一样了,他们对于编程一片空白,你需要将知识完整的、以简单易懂的方式传授给他们,需要精心设计与思考,以及自己对于课堂节奏的把握。熟能生巧吧,多做多会。这份技能相信对我的面试也会有所帮助。

说到饮食住宿,我在附近租了一个月的房子,且由于是在学校附近,吃饭也不愁,沙县 正新鸡排 炒粉 粉汤 炸鸡等应有具有。房子不大,但是住起来也算舒服,没有热水,热水壶煮水洗。

重游附中有感

年年岁岁花相似,岁岁年年人不同。
年年岁岁花相似,岁岁年年人不同

2023 这一年充满了未知与迷茫,不似中学时期那样方向明确 只有一个:好好读书,考个好大学。中学时代 6 年在附中,是我人生中最美好的一段时光。前段时间回了一趟母校,发现好像很多东西变了,但是很多东西又没变。

那天天气很阴,但我还是很高兴,沿着记忆中的路走了一遍。多年未见,学校里仍然是郁郁葱葱,一片生机盎然,校门附近那些树居然还是没长高,不知道是移植了还是干嘛了。往左走是通往报告厅的路,还记得这条路的大草坪是我们九年级的卫生区,恍惚中仿佛还能回忆起当时扫地和除草的人影。
校门口进来

沿路走下去,就是一条木质长廊,我印象中是高二高三修的,木质长廊在教学楼中间也有,不过不长。但是有很多植物和爬山虎围绕,郁郁葱葱。
教学楼旁
教学楼中间
路过了 3,4 号教学楼,就来到了体育馆,附中的体育馆很大,在里面我们参加 观看了很多篮球比赛和学校组织的活动。但是很遗憾的是我印象深刻的不多了,印象里大都是来放松缓解学习压力的🤣

接着走会穿过体育馆,路过园丁超市,这个超市零食种类很多,有水果蔬菜,还有些食堂的超市买不到的玩意。

园丁超市对面是新华书店,印象中是初三左右开的?里面有很多书,中学时我是不折不扣的书迷,体育课摸鱼常常来这里看书,当然更多时候是在寝室看。当时看了很多刘慈欣的科幻长短篇小说,明朝那些事,缥缈录,还有一些名著 但是不多。那个时候看的起劲都是挑灯夜读或者中午有空就看🤣,到高三才不这样。
穿过体育馆走廊就是三食堂和操场。

三食堂当时是高三学生的专属食堂,不知道现在还是不是。虽然没有进去看,但我现在还记得很清楚,里面是一条长长的通道。要么在门口打饭,要么就在走廊的尽头打饭。走廊的中间摆着若干台电视机,我们在吃饭的时候经常会抬头看。但在附中,吃饭的速度要相当快的,往往没看几眼饭就都吃完了。

往右走就是操场,每天都会跑操,高三除外。现在想想真是辛苦,冬天的时候往往天没亮就摸着黑起床了。在 6:30 之前赶到操场来跑步。🤣但是当时我居然都可以很早起床且不迟到
操场
操场
学校每年夏季都会举办运动会,太阳相当毒辣,但好消息是有妹妹看 乐。我记得我参加过好几次。最后一次参加是在高二,当时我想着说,高三就没机会了,给自己的中学留点回忆,就报名了跑步接力,成绩中规中矩。

沿着操场外围小走一段就来到了体育馆前的一大片平地,体育课往往都在这里举行。6 年来,所有体育课的缩影似乎都化为了体育课开始的准备动作。12345678
体育馆
穿过体育馆的平地,就来到了 a 栋学生宿舍楼,高三的回忆。这栋宿舍楼地理位置特别好,周末休息,不上课的时候,午休结束直接翻栏杆就能去抢篮球场地。但是现在 1 楼好像都被套防盗网了,难绷。

沿着宿舍楼和篮球场的小路就能走到一食堂。
篮球场
一食堂
学校一共就 123 三个食堂。一食堂后面就是 E 栋学生宿舍楼。初一初三还有高一都住这里。印象中 A E 栋的宿管阿姨人特别好,受学生欢迎。八年级则是住 E 栋后面的 F 栋。住宿期间真是发生了很多有意思的趣事,说一天也道不尽,比如高一那会儿住在 2 楼宿管阿姨旁边的宿舍,夜里悄悄玩狼人杀,玩到半夜 2 点;和舍友天南海北聊天;放学急急忙忙洗澡。其实细细思索都是很美好的记忆,在那里站许久都能想起不少的事来,只是当时道寻常,现在叹年少不再,下次有空再展开说。

沿路右转,就是一条长长的路,通往 12 栋教学楼。我待的最久的教学楼。外面似乎还是老样子,教室我没近距离看。

我刚进入学校时 学校方才创立两年,我离开时,学校已然是能够培养出清北优秀学生的省内名校。虽然我最后高考成绩并没有那么理想,但还是要感谢学校给我的这段美好的回忆,感谢所有老师对我的栽培🙏。苦涩的东西总是在若干年后咀嚼反刍才显得那样清甜,怅然若失。

就像很多年前我给民哥写过的一封信一样。民哥是我高二的语文老师,我很喜欢上民哥的语文课,因为他相当风趣幽默且教学深入浅出,他经常读我的月考作文。但是我当时成绩不好。分到下面的班,他在走廊上鼓励我要接着好好学习,语重心长 尊尊教诲。我很感动,也很难过,因为分班以后上不了他的课了,后面写了一封信和送了一本毕淑敏的书给他表达不舍。信的内容我记不起了,被读过的作文好像也找不到了。懊悔 难过😔

现在大学快毕业了,我会不会像怀念中学这样怀念我的大学时光呢?说实话,我不知道,但我知道应该先过好当下。有空了就多到校园里走走,拍照📸留念一下。愿无悔


纪事与感悟 — 我的 2023
https://blog.ovvv.top/posts/af028bbd/
作者
mobeicanyue
发布于
2024年2月12日 20:15
更新于
2024年2月24日 11:50
许可协议
\ No newline at end of file diff --git a/posts/af028bbd/index.html.br b/posts/af028bbd/index.html.br index b2de7b93..fc09ae84 100644 Binary files a/posts/af028bbd/index.html.br and b/posts/af028bbd/index.html.br differ diff --git a/posts/af028bbd/index.html.gz b/posts/af028bbd/index.html.gz index fa1819c8..aadc578e 100644 Binary files a/posts/af028bbd/index.html.gz and b/posts/af028bbd/index.html.gz differ diff --git a/posts/c7c2ca22/index.html b/posts/c7c2ca22/index.html index a026b02d..0b91fbfa 100644 --- a/posts/c7c2ca22/index.html +++ b/posts/c7c2ca22/index.html @@ -1 +1 @@ -使用 uptime-kuma 作为 Status Page - 漠北残月的博客

使用 uptime-kuma 作为 Status Page

本文最后更新于 2024年1月24日 22:20

A fancy self-hosted monitoring tool

一个精致的自托管监控工具

1. 什么是 uptime-kuma,为什么要使用它?

uptime-kuma 是一个开源的 Status Page,它可以帮助你监控你的网站、服务器、API 等,当你的网站、服务器、API 等出现故障时,它会在网页上显示,同时它还可以作为一个 Status Page,展示你的网站、服务器、API 等的状态。
支持多种监测方式如 HTTP(S), TCP Port, Ping, DNS, Docker 等等

在线体验:https://demo.uptime.kuma.pet

官网安装教程:louislam/uptime-kuma

2. 安装 uptime-kuma

打开 1Panel 面板,点击 应用商店,搜索 uptime kuma,点击 安装 即可。

1Panel 安装配置教程

在安装之前,先确保你的服务器已经安装了 dockerdocker-compose

在准备好的安装目录下,新建一个 docker-compose.yml
内容如下:

1
2
3
4
5
6
7
8
9
services:
uptime-kuma:
image: louislam/uptime-kuma:1
volumes:
- ./data:/app/data
ports:
# <Host Port>:<Container Port>
- 3001:3001
restart: unless-stopped

编辑好以后在 docker-compose.yml 所在目录下执行 docker-compose up -d 启动服务。

现在访问 http://<ip>:3001 即可看到 uptime-kuma 的首页。

配置反向代理(过程略),二级域名 status 映射 3001 端口,即 status.example.com,用域名而不是 ip 访问。

3. 配置 uptime-kuma

访问 status.example.com,进入配置页面。
配置页面
设置账号密码,然后点击 创建

4. 添加监控项

我们尝试添加一个监控项,监控 Github.
添加监控项
填写相关信息 如 监控类型 名称 URL 心跳间隔(监控频率) 等,然后
点击保存
(如果你想监控 chatgpt 可能要使用 ping 的方式,https 由于官方限制会 403,不知道加什么请求头才行,有懂的朋友可以评论区说一下)

这个时候我们可以看到,我们的监控项已经添加成功了。显示了 Github 的响应状态等信息。但是这个时候我们还不能直接访问,因为我们还没有添加对外展示的 Status Page
监控项

5. 添加 Status Page

点击 状态页面,然后点击 新的状态页

添加状态页面

填写 名称路径,然后点击 创建

路径 就是你的状态页面的访问路径,比如我填写的是 show,那么我的状态页面的访问路径就是 http://<ip>:3001/status/show。如果你不想这样,而是想直接访问 status.example.com 就能得到 Status Page。可以先填写一个值 等进去再配置。
添加状态页面

6. 配置 Status Page

点击 添加分组,再点击 添加监控项(就是前面配置的)。
配置状态页面

点击左边的 域名,填写你的域名,然后点击 保存。这样就可以使用域名 status.example.com 访问 而不是 status.example.com/status/show
填写域名

换个浏览器访问域名验证一下,我们的状态页面已经添加成功了。显示了 Github 的响应状态信息。
状态页面


使用 uptime-kuma 作为 Status Page
https://blog.ovvv.top/posts/c7c2ca22/
作者
mobeicanyue
发布于
2024年1月4日 11:56
更新于
2024年1月24日 22:20
许可协议
\ No newline at end of file +使用 uptime-kuma 作为 Status Page - 漠北残月的博客

使用 uptime-kuma 作为 Status Page

本文最后更新于 2024年1月24日 22:20

A fancy self-hosted monitoring tool

一个精致的自托管监控工具

1. 什么是 uptime-kuma,为什么要使用它?

uptime-kuma 是一个开源的 Status Page,它可以帮助你监控你的网站、服务器、API 等,当你的网站、服务器、API 等出现故障时,它会在网页上显示,同时它还可以作为一个 Status Page,展示你的网站、服务器、API 等的状态。
支持多种监测方式如 HTTP(S), TCP Port, Ping, DNS, Docker 等等

在线体验:https://demo.uptime.kuma.pet

官网安装教程:louislam/uptime-kuma

2. 安装 uptime-kuma

打开 1Panel 面板,点击 应用商店,搜索 uptime kuma,点击 安装 即可。

1Panel 安装配置教程

在安装之前,先确保你的服务器已经安装了 dockerdocker-compose

在准备好的安装目录下,新建一个 docker-compose.yml
内容如下:

1
2
3
4
5
6
7
8
9
services:
uptime-kuma:
image: louislam/uptime-kuma:1
volumes:
- ./data:/app/data
ports:
# <Host Port>:<Container Port>
- 3001:3001
restart: unless-stopped

编辑好以后在 docker-compose.yml 所在目录下执行 docker-compose up -d 启动服务。

现在访问 http://<ip>:3001 即可看到 uptime-kuma 的首页。

配置反向代理(过程略),二级域名 status 映射 3001 端口,即 status.example.com,用域名而不是 ip 访问。

3. 配置 uptime-kuma

访问 status.example.com,进入配置页面。
配置页面
设置账号密码,然后点击 创建

4. 添加监控项

我们尝试添加一个监控项,监控 Github.
添加监控项
填写相关信息 如 监控类型 名称 URL 心跳间隔(监控频率) 等,然后
点击保存
(如果你想监控 chatgpt 可能要使用 ping 的方式,https 由于官方限制会 403,不知道加什么请求头才行,有懂的朋友可以评论区说一下)

这个时候我们可以看到,我们的监控项已经添加成功了。显示了 Github 的响应状态等信息。但是这个时候我们还不能直接访问,因为我们还没有添加对外展示的 Status Page
监控项

5. 添加 Status Page

点击 状态页面,然后点击 新的状态页

添加状态页面

填写 名称路径,然后点击 创建

路径 就是你的状态页面的访问路径,比如我填写的是 show,那么我的状态页面的访问路径就是 http://<ip>:3001/status/show。如果你不想这样,而是想直接访问 status.example.com 就能得到 Status Page。可以先填写一个值 等进去再配置。
添加状态页面

6. 配置 Status Page

点击 添加分组,再点击 添加监控项(就是前面配置的)。
配置状态页面

点击左边的 域名,填写你的域名,然后点击 保存。这样就可以使用域名 status.example.com 访问 而不是 status.example.com/status/show
填写域名

换个浏览器访问域名验证一下,我们的状态页面已经添加成功了。显示了 Github 的响应状态信息。
状态页面


使用 uptime-kuma 作为 Status Page
https://blog.ovvv.top/posts/c7c2ca22/
作者
mobeicanyue
发布于
2024年1月4日 11:56
更新于
2024年1月24日 22:20
许可协议
\ No newline at end of file diff --git a/posts/c7c2ca22/index.html.br b/posts/c7c2ca22/index.html.br index c7368c9c..c56e3f9a 100644 Binary files a/posts/c7c2ca22/index.html.br and b/posts/c7c2ca22/index.html.br differ diff --git a/posts/c7c2ca22/index.html.gz b/posts/c7c2ca22/index.html.gz index 35df8a90..9446017e 100644 Binary files a/posts/c7c2ca22/index.html.gz and b/posts/c7c2ca22/index.html.gz differ diff --git a/posts/d6d74ca/index.html b/posts/d6d74ca/index.html index e339edfd..997e0fba 100644 --- a/posts/d6d74ca/index.html +++ b/posts/d6d74ca/index.html @@ -1 +1 @@ -博客 SEO 优化 - 漠北残月的博客

博客 SEO 优化

本文最后更新于 2024年2月19日 15:30

写博客的目的是为了记录自己的学习过程与分享日常。
而想要让更多的人看到自己的博客,就需要做一些 SEO 优化,提升自己的博客在搜索引擎上的排名。
如果你的博客是部署在 GitHub Pages 上的,就更需要注意了。因为 Github 限制百度的爬虫访问,你的博客在百度上是不会被收录的,而谷歌和必应会收录你的博客。

1. 内容优化

在你的博客中,你需要一些关键词描述来帮助搜索引擎索引你的网页,比如你的博客是关于前端的,那么你的关键词可以是 前端JavaScriptVueReact 等等。

在 Hexo 的 _config.yml 文件中,你可以配置你的关键词和描述。
关键词和描述
如果你的博客不是 Hexo,那么你可以手动在你的网页的 <head> 标签中添加 <meta> 标签来配置你的关键词和描述。
手动添加 head

2. 安装 hexo-generator-sitemap

1
npm install hexo-generator-sitemap --save

然后 执行

1
hexo clean && hexo generate

就可以在 public 目录下看到 sitemap.xml 文件了。

3. 配置 robots.txt

source 目录下新建 robots.txt 文件,内容如下:

1
2
3
4
User-agent: *
Disallow:

Sitemap: https://example.com/sitemap.xml

User-agent: * 表示允许所有的搜索引擎爬取你的网站
Disallow: 为空 表示 不限制 爬取
Sitemap: 后面的链接是你的 sitemap.xml 文件的链接,这样搜索引擎就可以通过 sitemap.xml 文件来爬取你的网站了。

4. 搜索引擎提交

搜索引擎提交可以帮助你的网站更快的被搜索引擎收录,一般来说,搜索引擎会自己爬取你的网站,但是你可以手动提交你的网站,这样可以更快的被收录。

进平台验证一下域名所有权即可

4.1 百度

百度搜索资源平台:https://ziyuan.baidu.com/site/index
百度搜索资源平台

4.2 Google

不出意外,谷歌是会自己爬取你的网站的,但是你可以通过谷歌搜索控制台来查看你的网站的爬取情况、优化你的网站内容、提交站点地图等等。

谷歌搜索控制台:https://search.google.com/search-console?hl=zh-CN
建议不要添加整个域名,而是添加你的网站的子域名,比如 blog.example.com,这样你可以更好的管理你的网站。如果你添加了整个域名,那么一些你并不想让谷歌爬取的子域名网页也会被收录。
添加域名
谷歌搜索控制台

4.3 Bing

不出意外,必应也会自己爬取你的网站。

必应站长平台:https://www.bing.com/webmasters

必应添加域名可以选择 从谷歌搜索控制台导入 或者 手动添加
添加域名
从谷歌控制台导入
必应站长平台

4.4 Naver

Naver 是韩国本土的搜索引擎,类似于国内的百度,不会像 Google Bing 那样自动收录你的网站。如果有需要,可以注册一个 Naver 账号,然后提交你的网站。
注意 IP 限制,Naver 需要韩国 IP 才能注册。
注册

站长平台:https://searchadvisor.naver.com/console/board
验证所有权
建议使用 在根目录添加 html 来验证所有权

接下来就是提交站点地图了,点击你添加成功的网站,提交站点地图,步骤和前面的谷歌必应差不多。
提交站点地图

4.5 其他搜索引擎

Yandex、DuckDuckGo、Yahoo 等搜索引擎会自动爬取你的网站,不需要去站长手动提交(不主流,没啥必要)。

5. 优化性能

搜索引擎会根据你的网站的性能来排名,所以你需要优化你的网站的性能。

访问 https://pagespeed.web.dev/ 输入你的网站地址,然后就可以看到你的网站的性能了。根据提示来优化你的网站。

6. 外链与反链

外链(Outbound Links)指的是从你的网站指向其他网站的链接。这些链接可以是指向其他网页、博客、文章或任何在线资源的链接。外链对于提高你的网站在搜索引擎中的排名以及增加网站的可信度和权威性都非常重要。

反链(Backlinks)则是指其他网站指向你的网站的链接。这些链接也被称为入站链接,它们对于搜索引擎优化(SEO)来说非常重要,因为搜索引擎认为其他网站指向你的网站意味着你的网站有价值和权威性。有更多的反链通常意味着你的网站在搜索引擎结果中的排名会更高。

在博客和网站的运营中,外链和反链都是重要的考虑因素。通过外链可以引导读者到其他有用的资源,提供更丰富的内容体验;而反链则是其他网站认可你网站内容的一种方式,有助于提高你的网站在搜索引擎中的排名和曝光度。


博客 SEO 优化
https://blog.ovvv.top/posts/d6d74ca/
作者
mobeicanyue
发布于
2024年1月28日 12:56
更新于
2024年2月19日 15:30
许可协议
\ No newline at end of file +博客 SEO 优化 - 漠北残月的博客

博客 SEO 优化

本文最后更新于 2024年2月25日 22:14

写博客的目的是为了记录自己的学习过程与分享日常。
而想要让更多的人看到自己的博客,就需要做一些 SEO 优化,提升自己的博客在搜索引擎上的排名。
如果你的博客是部署在 GitHub Pages 上的,就更需要注意了。因为 Github 限制百度的爬虫访问,你的博客在百度上是不会被收录的,而谷歌和必应会收录你的博客。

1. 内容优化

在你的博客中,你需要一些关键词描述来帮助搜索引擎索引你的网页,比如你的博客是关于前端的,那么你的关键词可以是 前端JavaScriptVueReact 等等。

在 Hexo 的 _config.yml 文件中,你可以配置你的关键词和描述。
关键词和描述
如果你的博客不是 Hexo,那么你可以手动在你的网页的 <head> 标签中添加 <meta> 标签来配置你的关键词和描述。
手动添加 head

2. 安装 hexo-generator-sitemap

1
npm install hexo-generator-sitemap --save

然后 执行

1
hexo clean && hexo generate

就可以在 public 目录下看到 sitemap.xml 文件了。

3. 配置 robots.txt

source 目录下新建 robots.txt 文件,内容如下:

1
2
3
4
User-agent: *
Disallow:

Sitemap: https://example.com/sitemap.xml

User-agent: * 表示允许所有的搜索引擎爬取你的网站
Disallow: 为空 表示 不限制 爬取
Sitemap: 后面的链接是你的 sitemap.xml 文件的链接,这样搜索引擎就可以通过 sitemap.xml 文件来爬取你的网站了。

4. 搜索引擎提交

搜索引擎提交可以帮助你的网站更快的被搜索引擎收录,一般来说,搜索引擎会自己爬取你的网站,但是你可以手动提交你的网站,这样可以更快的被收录。

进平台验证一下域名所有权即可

4.1 百度

百度搜索资源平台:https://ziyuan.baidu.com/site/index
百度搜索资源平台

4.2 Google

不出意外,谷歌是会自己爬取你的网站的,但是你可以通过谷歌搜索控制台来查看你的网站的爬取情况、优化你的网站内容、提交站点地图等等。

谷歌搜索控制台:https://search.google.com/search-console?hl=zh-CN
建议不要添加整个域名,而是添加你的网站的子域名,比如 blog.example.com,这样你可以更好的管理你的网站。如果你添加了整个域名,那么一些你并不想让谷歌爬取的子域名网页也会被收录。
添加域名
谷歌搜索控制台

4.3 Bing

不出意外,必应也会自己爬取你的网站。

必应站长平台:https://www.bing.com/webmasters

必应添加域名可以选择 从谷歌搜索控制台导入 或者 手动添加
添加域名
从谷歌控制台导入
必应站长平台

4.4 Naver

Naver 是韩国本土的搜索引擎,类似于国内的百度,不会像 Google Bing 那样自动收录你的网站。如果有需要,可以注册一个 Naver 账号,然后提交你的网站。
注意 IP 限制,Naver 需要韩国 IP 才能注册。
注册

站长平台:https://searchadvisor.naver.com/console/board
验证所有权
建议使用 在根目录添加 html 来验证所有权

接下来就是提交站点地图了,点击你添加成功的网站,提交站点地图,步骤和前面的谷歌必应差不多。
提交站点地图

4.5 其他搜索引擎

Yandex、DuckDuckGo、Yahoo 等搜索引擎会自动爬取你的网站,不需要去站长手动提交(不主流,没啥必要)。

5. 优化性能

搜索引擎会根据你的网站的性能来排名,所以你需要优化你的网站的性能。

访问 https://pagespeed.web.dev/ 输入你的网站地址,然后就可以看到你的网站的性能了。根据提示来优化你的网站。

6. 外链与反链

外链(Outbound Links)指的是从你的网站指向其他网站的链接。这些链接可以是指向其他网页、博客、文章或任何在线资源的链接。外链对于提高你的网站在搜索引擎中的排名以及增加网站的可信度和权威性都非常重要。

反链(Backlinks)则是指其他网站指向你的网站的链接。这些链接也被称为入站链接,它们对于搜索引擎优化(SEO)来说非常重要,因为搜索引擎认为其他网站指向你的网站意味着你的网站有价值和权威性。有更多的反链通常意味着你的网站在搜索引擎结果中的排名会更高。

在博客和网站的运营中,外链和反链都是重要的考虑因素。通过外链可以引导读者到其他有用的资源,提供更丰富的内容体验;而反链则是其他网站认可你网站内容的一种方式,有助于提高你的网站在搜索引擎中的排名和曝光度。


博客 SEO 优化
https://blog.ovvv.top/posts/d6d74ca/
作者
mobeicanyue
发布于
2024年1月28日 12:56
更新于
2024年2月25日 22:14
许可协议
\ No newline at end of file diff --git a/posts/d6d74ca/index.html.br b/posts/d6d74ca/index.html.br index 15b785a2..fcfaf9bd 100644 Binary files a/posts/d6d74ca/index.html.br and b/posts/d6d74ca/index.html.br differ diff --git a/posts/d6d74ca/index.html.gz b/posts/d6d74ca/index.html.gz index 14a5dbbb..045079ea 100644 Binary files a/posts/d6d74ca/index.html.gz and b/posts/d6d74ca/index.html.gz differ diff --git a/posts/dc0bbd22/index.html b/posts/dc0bbd22/index.html index 4aa5de8c..cf99a577 100644 --- a/posts/dc0bbd22/index.html +++ b/posts/dc0bbd22/index.html @@ -1 +1 @@ -Hexo 环境搭建 - 漠北残月的博客

Hexo 环境搭建

本文最后更新于 2024年1月31日 11:37

我是 Linux 操作系统 Manjaro 分支,所以文章着重介绍 Linux 下的环境搭建。
Windows 下的环境搭建有不小的差异,但是原理是一样的。

1. 检查 Git 环境

  • Linux 大多数发行版都默认安装了 Git,所以只需要检查一下 Git 版本。

    1
    git --version

    如果没有报错而是输出版本号,就说明安装成功了。

  • Windows 下的 安装 Git 可以参考 Git 官网,或者搜索教程。

2. 安装 Node.js 和 npm

npm 的依赖项就是 nodejs。所以安装 npm, nodejs 会一起被安装。

  • Debian 系安装 npm 和 nodejs

    1
    sudo apt install npm
  • ArchLinux 系安装 npm 和 nodejs

    1
    sudo pacman -S npm

检验版本

1
2
node -v
npm -v
  • Windows 下的 安装 Node.js 和 npm 可以参考 Node.js 官网,或者搜索教程。

    和上面一样,安装完毕后检验版本。

记住上面的 nodejs 的版本号,后面会用到。

3. 安装 Hexo

  • Windows 需要空白处单击鼠标右键,选择”Git Bash Here”输入以下命令。

  • Linux 系统直接打开终端输入即可。

    1
    npm install hexo-cli -g

    安装完毕后,输入以下命令检验是否安装成功。

    1
    hexo -v

    如果没有报错而是输出版本号,就说明安装成功了。
    反之则根据报错信息进行排查。


Hexo 环境搭建
https://blog.ovvv.top/posts/dc0bbd22/
作者
mobeicanyue
发布于
2023年12月28日 19:08
更新于
2024年1月31日 11:37
许可协议
\ No newline at end of file +Hexo 环境搭建 - 漠北残月的博客

Hexo 环境搭建

本文最后更新于 2024年1月31日 11:37

我是 Linux 操作系统 Manjaro 分支,所以文章着重介绍 Linux 下的环境搭建。
Windows 下的环境搭建有不小的差异,但是原理是一样的。

1. 检查 Git 环境

  • Linux 大多数发行版都默认安装了 Git,所以只需要检查一下 Git 版本。

    1
    git --version

    如果没有报错而是输出版本号,就说明安装成功了。

  • Windows 下的 安装 Git 可以参考 Git 官网,或者搜索教程。

2. 安装 Node.js 和 npm

npm 的依赖项就是 nodejs。所以安装 npm, nodejs 会一起被安装。

  • Debian 系安装 npm 和 nodejs

    1
    sudo apt install npm
  • ArchLinux 系安装 npm 和 nodejs

    1
    sudo pacman -S npm

检验版本

1
2
node -v
npm -v
  • Windows 下的 安装 Node.js 和 npm 可以参考 Node.js 官网,或者搜索教程。

    和上面一样,安装完毕后检验版本。

记住上面的 nodejs 的版本号,后面会用到。

3. 安装 Hexo

  • Windows 需要空白处单击鼠标右键,选择”Git Bash Here”输入以下命令。

  • Linux 系统直接打开终端输入即可。

    1
    npm install hexo-cli -g

    安装完毕后,输入以下命令检验是否安装成功。

    1
    hexo -v

    如果没有报错而是输出版本号,就说明安装成功了。
    反之则根据报错信息进行排查。


Hexo 环境搭建
https://blog.ovvv.top/posts/dc0bbd22/
作者
mobeicanyue
发布于
2023年12月28日 19:08
更新于
2024年1月31日 11:37
许可协议
\ No newline at end of file diff --git a/posts/dc0bbd22/index.html.br b/posts/dc0bbd22/index.html.br index 884a944b..637f91a6 100644 Binary files a/posts/dc0bbd22/index.html.br and b/posts/dc0bbd22/index.html.br differ diff --git a/posts/dc0bbd22/index.html.gz b/posts/dc0bbd22/index.html.gz index 83940850..e58e88b4 100644 Binary files a/posts/dc0bbd22/index.html.gz and b/posts/dc0bbd22/index.html.gz differ diff --git a/posts/dfba1590/index.html b/posts/dfba1590/index.html index 225c5239..8e1426c5 100644 --- a/posts/dfba1590/index.html +++ b/posts/dfba1590/index.html @@ -1 +1 @@ -流氓软件害人不浅 - 漠北残月的博客

流氓软件害人不浅

本文最后更新于 2024年2月19日 15:30

新年临近,最近也是越来越忙了。
上午外公喊我去处理一下“电脑卡顿”的问题,那个时候我尚未睡醒,所以中午吃完饭看了会哔站就过去了。

外公平时只看看新闻和视频,但是电脑卡顿得厉害,至于原因…这类问题我可老有经验了,没去之前我就料到了:电脑里的无用流氓软件太多了,还都是广告弹窗。
打开电脑的时候也确实惊呆了,打开控制面板不少软件,什么游戏平台、2345 浏览器、360 壁纸、鲁大师、jj 斗地主等乱七八糟的东西,我都一个个卸载了。卸载的过程也是相当的漫长,一个小小的壁纸软件卸载居然要十几分钟之久,我不禁怀疑这是否是另一种形式的防卸载。卸载过程中还频繁提示 Windows7 不是正版,虽然不影响使用,但是相当烦人,下了个 HEU KMS 激活了,就不再提示了。

至于广告多的问题,我把 360 安全卫士改成极速版,这不失为一个折衷的办法。
这时候有读者会问了,360 那么流氓,怎么还给老人家用,换成火绒多干净利落。
我考虑如下:

  1. 老人家防护意识差,我们熟悉电脑的肯定不会点一些乱七八糟的网页和广告链接,但是老人家就不一样了,他们不知道什么是广告,什么是病毒,360 是比较好的管理工具。而且 360 极速版其实已经算是没有广告相当清爽的一个版本了,实际使用起来比较安静。
  2. 只有流氓软件才能对付流氓软件,火绒这种杀毒能力太弱了,有些时候,对着病毒扫 都扫不出来。

最恐怖的是,外公 Huawei 手机上也有个流氓大 BOSS,忘了拍下来了,一个广告软件,每次打开别的软件都会弹出广告,而且会自动跳转下载,频率相当高。😨也帮他卸载了。

我之前用 Windows 的时候一开始天天爱瞎倒腾杀毒软件,卡巴斯基,ESET,火绒都用过,最后还是切回了 Windows Defender,因为它够用,对系统兼容性也最好(点名卡巴斯基,我玩 LOL 的时候想右键退出就蓝屏了),大道至简,你不瞎折腾就是最好的杀毒软件。当然,后面我还是会配合火绒使用,因为开脚本和 KMS 的时候 Windows Defender 会误报。

至于现在,我用 Manjaro Linux,什么是杀毒软件?我不到啊。🤓

最后,在外公的要求下,帮他弄了个太极拳的视频,我直接帮他收藏了哔站的太极拳搜索结果,这样他就不用自己去找了,也不会误点广告链接了。想起了我大一还是大二学过的太极八段锦,最后摸鱼居然考试还通过了😁

不禁感叹,世界上有很多人:有些人精通计算机、并乐此不疲的研究它们;有些人专注安心生活,电子设备只是工具。并不是说前者就有优越感和高贵,只是不同的人生活方式罢了。我想,很多时候我们还是应该多出去走走,多看看,放松一下身心,如果可以,也要关注一下老人的生活。


流氓软件害人不浅
https://blog.ovvv.top/posts/dfba1590/
作者
mobeicanyue
发布于
2024年2月5日 16:24
更新于
2024年2月19日 15:30
许可协议
\ No newline at end of file +流氓软件害人不浅 - 漠北残月的博客

流氓软件害人不浅

本文最后更新于 2024年2月19日 15:30

新年临近,最近也是越来越忙了。
上午外公喊我去处理一下“电脑卡顿”的问题,那个时候我尚未睡醒,所以中午吃完饭看了会哔站就过去了。

外公平时只看看新闻和视频,但是电脑卡顿得厉害,至于原因…这类问题我可老有经验了,没去之前我就料到了:电脑里的无用流氓软件太多了,还都是广告弹窗。
打开电脑的时候也确实惊呆了,打开控制面板不少软件,什么游戏平台、2345 浏览器、360 壁纸、鲁大师、jj 斗地主等乱七八糟的东西,我都一个个卸载了。卸载的过程也是相当的漫长,一个小小的壁纸软件卸载居然要十几分钟之久,我不禁怀疑这是否是另一种形式的防卸载。卸载过程中还频繁提示 Windows7 不是正版,虽然不影响使用,但是相当烦人,下了个 HEU KMS 激活了,就不再提示了。

至于广告多的问题,我把 360 安全卫士改成极速版,这不失为一个折衷的办法。
这时候有读者会问了,360 那么流氓,怎么还给老人家用,换成火绒多干净利落。
我考虑如下:

  1. 老人家防护意识差,我们熟悉电脑的肯定不会点一些乱七八糟的网页和广告链接,但是老人家就不一样了,他们不知道什么是广告,什么是病毒,360 是比较好的管理工具。而且 360 极速版其实已经算是没有广告相当清爽的一个版本了,实际使用起来比较安静。
  2. 只有流氓软件才能对付流氓软件,火绒这种杀毒能力太弱了,有些时候,对着病毒扫 都扫不出来。

最恐怖的是,外公 Huawei 手机上也有个流氓大 BOSS,忘了拍下来了,一个广告软件,每次打开别的软件都会弹出广告,而且会自动跳转下载,频率相当高。😨也帮他卸载了。

我之前用 Windows 的时候一开始天天爱瞎倒腾杀毒软件,卡巴斯基,ESET,火绒都用过,最后还是切回了 Windows Defender,因为它够用,对系统兼容性也最好(点名卡巴斯基,我玩 LOL 的时候想右键退出就蓝屏了),大道至简,你不瞎折腾就是最好的杀毒软件。当然,后面我还是会配合火绒使用,因为开脚本和 KMS 的时候 Windows Defender 会误报。

至于现在,我用 Manjaro Linux,什么是杀毒软件?我不到啊。🤓

最后,在外公的要求下,帮他弄了个太极拳的视频,我直接帮他收藏了哔站的太极拳搜索结果,这样他就不用自己去找了,也不会误点广告链接了。想起了我大一还是大二学过的太极八段锦,最后摸鱼居然考试还通过了😁

不禁感叹,世界上有很多人:有些人精通计算机、并乐此不疲的研究它们;有些人专注安心生活,电子设备只是工具。并不是说前者就有优越感和高贵,只是不同的人生活方式罢了。我想,很多时候我们还是应该多出去走走,多看看,放松一下身心,如果可以,也要关注一下老人的生活。


流氓软件害人不浅
https://blog.ovvv.top/posts/dfba1590/
作者
mobeicanyue
发布于
2024年2月5日 16:24
更新于
2024年2月19日 15:30
许可协议
\ No newline at end of file diff --git a/posts/dfba1590/index.html.br b/posts/dfba1590/index.html.br index b2a39b67..1900edf2 100644 Binary files a/posts/dfba1590/index.html.br and b/posts/dfba1590/index.html.br differ diff --git a/posts/dfba1590/index.html.gz b/posts/dfba1590/index.html.gz index 8446e8d0..b19205b7 100644 Binary files a/posts/dfba1590/index.html.gz and b/posts/dfba1590/index.html.gz differ diff --git a/posts/e6ee4a29/index.html b/posts/e6ee4a29/index.html index 6156c889..71f197ad 100644 --- a/posts/e6ee4a29/index.html +++ b/posts/e6ee4a29/index.html @@ -1 +1 @@ -1Panel 申请 Let's Encrypt 域名证书 - 漠北残月的博客

1Panel 申请 Let's Encrypt 域名证书

本文最后更新于 2024年2月3日 20:58

域名证书是网站安全的基础,它可以保护网站的数据传输安全,防止中间人攻击。而 Let’s Encrypt 是一个免费的证书颁发机构,它提供了免费的域名证书,可以让我们的网站免费使用 HTTPS 协议。

相对于传统的手动申请证书,1Panel 提供了 一键申请证书自动续签 的功能,下面我们来看看如何使用 1Panel 申请 Let’s Encrypt 域名证书。

如果没有安装 1Panel,请参考 1Panel 安装配置教程

证书申请

1. 创建 Acme 账户

创建账户

填入邮箱(随意填一个即可),点击创建
创建账户

2. 创建 DNS 账户

申请泛域名证书,如 *.example.com 需要创建 DNS 账户。如果只是申请单域名则可以跳过这一步。

点击 DNS 账户,选择你的 DNS 服务商,填入你的账户信息,点击创建
账户信息
不同的 DNS 服务商有不同的要求,这里以 Cloudflare 为例。

API Key 的获取方法:

登录 Cloudflare 后,点击右上角头像,选择My Profile(我的个人资料),然后点击API Tokens,点击Create Token (创建令牌)

选择 Edit zone DNS 令牌模板,选择你的域名,点击Continue to summary(继续以显示摘要),再点击Create Token(创建令牌),最后复制生成的 API Key。
选择域名

注意:API Key 只会显示一次,所以请务必保存好。

最后回到 1Panel,填入你的 Cloudflare 邮箱和 API Key,点击创建 即可

3. 申请证书

填写主域名,勾选下面的 自动续签,验证方式可以选择 DNS 账号 或者 HTTP(不需要 DNS 账户),点击创建
申请证书

申请成功
申请成功


1Panel 申请 Let's Encrypt 域名证书
https://blog.ovvv.top/posts/e6ee4a29/
作者
mobeicanyue
发布于
2024年2月2日 14:00
更新于
2024年2月3日 20:58
许可协议
\ No newline at end of file +1Panel 申请 Let's Encrypt 域名证书 - 漠北残月的博客

1Panel 申请 Let's Encrypt 域名证书

本文最后更新于 2024年2月3日 20:58

域名证书是网站安全的基础,它可以保护网站的数据传输安全,防止中间人攻击。而 Let’s Encrypt 是一个免费的证书颁发机构,它提供了免费的域名证书,可以让我们的网站免费使用 HTTPS 协议。

相对于传统的手动申请证书,1Panel 提供了 一键申请证书自动续签 的功能,下面我们来看看如何使用 1Panel 申请 Let’s Encrypt 域名证书。

如果没有安装 1Panel,请参考 1Panel 安装配置教程

证书申请

1. 创建 Acme 账户

创建账户

填入邮箱(随意填一个即可),点击创建
创建账户

2. 创建 DNS 账户

申请泛域名证书,如 *.example.com 需要创建 DNS 账户。如果只是申请单域名则可以跳过这一步。

点击 DNS 账户,选择你的 DNS 服务商,填入你的账户信息,点击创建
账户信息
不同的 DNS 服务商有不同的要求,这里以 Cloudflare 为例。

API Key 的获取方法:

登录 Cloudflare 后,点击右上角头像,选择My Profile(我的个人资料),然后点击API Tokens,点击Create Token (创建令牌)

选择 Edit zone DNS 令牌模板,选择你的域名,点击Continue to summary(继续以显示摘要),再点击Create Token(创建令牌),最后复制生成的 API Key。
选择域名

注意:API Key 只会显示一次,所以请务必保存好。

最后回到 1Panel,填入你的 Cloudflare 邮箱和 API Key,点击创建 即可

3. 申请证书

填写主域名,勾选下面的 自动续签,验证方式可以选择 DNS 账号 或者 HTTP(不需要 DNS 账户),点击创建
申请证书

申请成功
申请成功


1Panel 申请 Let's Encrypt 域名证书
https://blog.ovvv.top/posts/e6ee4a29/
作者
mobeicanyue
发布于
2024年2月2日 14:00
更新于
2024年2月3日 20:58
许可协议
\ No newline at end of file diff --git a/posts/e6ee4a29/index.html.br b/posts/e6ee4a29/index.html.br index ae2ffbdc..a5956a2b 100644 Binary files a/posts/e6ee4a29/index.html.br and b/posts/e6ee4a29/index.html.br differ diff --git a/posts/e6ee4a29/index.html.gz b/posts/e6ee4a29/index.html.gz index e5664d37..d81bf281 100644 Binary files a/posts/e6ee4a29/index.html.gz and b/posts/e6ee4a29/index.html.gz differ diff --git a/posts/f24b41b1/index.html b/posts/f24b41b1/index.html index b62a2d4a..5f320077 100644 --- a/posts/f24b41b1/index.html +++ b/posts/f24b41b1/index.html @@ -1 +1 @@ -在 Fluid 主题中使用霞鹜文楷 - 漠北残月的博客

在 Fluid 主题中使用霞鹜文楷

本文最后更新于 2024年2月24日 11:50

近来阅读竹林里有冰的博客,发现他的博客字体很好看,想着把他的字体也用到我的博客里,于是就有了这篇文章。

1. 字体介绍

霞鹜文楷字体仓库
霞鹜文楷 我之前其实在手机上用过,不过后面由于装机加上懒得折腾就没有再设置了,但是博客我觉得为了好的阅读体验还是可以换一下的
霞鹜文楷

关于在 web 中使用 霞鹜文楷 请参阅 issue#24

其中 chawyehsu 提供了打包,但是点进去仓库发现已经有半年没更新了。在 issue 的下面我们可以看到 CMBill 提供了一个新的打包,我的就是这个打包。

CMBill 的仓库 README 中右键跳转 css 看看内容 style.css.webp

可以发现这个 css 是分了几个不同的字体种类,还有不同的霞鹜文楷变体可供选择
font-css.webp
style.css 替换为 @import url 之后的内容(去掉./),就可以直接使用了

我最终选择了 lxgwwenkaigb-bold 这个字体,这个字体阅读起来比较舒服。
我的博客字体文件为
https://cdn.jsdelivr.net/gh/CMBill/lxgw-wenkai-gb-web/fonts/lxgwwenkaigb-bold/result.css

2. 使用方法

如果你使用的是 Hexo 博客,可以采用注入的方式,将字体 css 注入到你的博客中。
首先在根目录创建一个 scripts 文件夹,然后在 scripts 文件夹中创建一个 font.js 文件,内容如下:

1
2
3
hexo.extend.injector.register('head_end',
'<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/CMBill/lxgw-wenkai-gb-web/fonts/lxgwwenkaigb-bold/result.css" />',
'default');

然后修改你的主题配置文件

1
2
3
4
5
font:
font_size: 17px
font_family: "LXGW WenKai GB"
letter_spacing: 0.02em
code_font_size: 85%

如果你使用 Hexo 的 fluid 主题,那么恭喜你,替换字体很简单,只需要在主题的配置文件里加上一行 custom_css: https://xxxx代码就可以了,再修改 font_family。比如我的是 fontFamily: LXGW WenKai GB

1
2
3
4
5
6
7
8
9
# 主题字体配置
font:
font_size: 17px
font_family: "LXGW WenKai GB"
letter_spacing: 0.02em
code_font_size: 85%

custom_js:
custom_css: https://cdn.jsdelivr.net/gh/CMBill/lxgw-wenkai-gb-web/fonts/lxgwwenkaigb-bold/result.css

3. 效果展示

效果


在 Fluid 主题中使用霞鹜文楷
https://blog.ovvv.top/posts/f24b41b1/
作者
mobeicanyue
发布于
2023年12月27日 14:58
更新于
2024年2月24日 11:50
许可协议
\ No newline at end of file +在 Fluid 主题中使用霞鹜文楷 - 漠北残月的博客

在 Fluid 主题中使用霞鹜文楷

本文最后更新于 2024年2月24日 11:50

近来阅读竹林里有冰的博客,发现他的博客字体很好看,想着把他的字体也用到我的博客里,于是就有了这篇文章。

1. 字体介绍

霞鹜文楷字体仓库
霞鹜文楷 我之前其实在手机上用过,不过后面由于装机加上懒得折腾就没有再设置了,但是博客我觉得为了好的阅读体验还是可以换一下的
霞鹜文楷

关于在 web 中使用 霞鹜文楷 请参阅 issue#24

其中 chawyehsu 提供了打包,但是点进去仓库发现已经有半年没更新了。在 issue 的下面我们可以看到 CMBill 提供了一个新的打包,我的就是这个打包。

CMBill 的仓库 README 中右键跳转 css 看看内容 style.css.webp

可以发现这个 css 是分了几个不同的字体种类,还有不同的霞鹜文楷变体可供选择
font-css.webp
style.css 替换为 @import url 之后的内容(去掉./),就可以直接使用了

我最终选择了 lxgwwenkaigb-bold 这个字体,这个字体阅读起来比较舒服。
我的博客字体文件为
https://cdn.jsdelivr.net/gh/CMBill/lxgw-wenkai-gb-web/fonts/lxgwwenkaigb-bold/result.css

2. 使用方法

如果你使用的是 Hexo 博客,可以采用注入的方式,将字体 css 注入到你的博客中。
首先在根目录创建一个 scripts 文件夹,然后在 scripts 文件夹中创建一个 font.js 文件,内容如下:

1
2
3
hexo.extend.injector.register('head_end',
'<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/CMBill/lxgw-wenkai-gb-web/fonts/lxgwwenkaigb-bold/result.css" />',
'default');

然后修改你的主题配置文件

1
2
3
4
5
font:
font_size: 17px
font_family: "LXGW WenKai GB"
letter_spacing: 0.02em
code_font_size: 85%

如果你使用 Hexo 的 fluid 主题,那么恭喜你,替换字体很简单,只需要在主题的配置文件里加上一行 custom_css: https://xxxx代码就可以了,再修改 font_family。比如我的是 fontFamily: LXGW WenKai GB

1
2
3
4
5
6
7
8
9
# 主题字体配置
font:
font_size: 17px
font_family: "LXGW WenKai GB"
letter_spacing: 0.02em
code_font_size: 85%

custom_js:
custom_css: https://cdn.jsdelivr.net/gh/CMBill/lxgw-wenkai-gb-web/fonts/lxgwwenkaigb-bold/result.css

3. 效果展示

效果


在 Fluid 主题中使用霞鹜文楷
https://blog.ovvv.top/posts/f24b41b1/
作者
mobeicanyue
发布于
2023年12月27日 14:58
更新于
2024年2月24日 11:50
许可协议
\ No newline at end of file diff --git a/posts/f24b41b1/index.html.br b/posts/f24b41b1/index.html.br index 8cf999f5..9cf9ff41 100644 Binary files a/posts/f24b41b1/index.html.br and b/posts/f24b41b1/index.html.br differ diff --git a/posts/f24b41b1/index.html.gz b/posts/f24b41b1/index.html.gz index 77670be0..13f95430 100644 Binary files a/posts/f24b41b1/index.html.gz and b/posts/f24b41b1/index.html.gz differ diff --git a/posts/f297b285/index.html b/posts/f297b285/index.html index ca2bca7c..1aa1cbe5 100644 --- a/posts/f297b285/index.html +++ b/posts/f297b285/index.html @@ -1 +1 @@ -服务器推荐部署的开源软件 - 漠北残月的博客

服务器推荐部署的开源软件

本文最后更新于 2024年2月24日 11:50


服务器推荐部署的开源软件
https://blog.ovvv.top/posts/f297b285/
作者
mobeicanyue
发布于
2024年1月25日 14:05
更新于
2024年2月24日 11:50
许可协议
\ No newline at end of file +服务器推荐部署的开源软件 - 漠北残月的博客

服务器推荐部署的开源软件

本文最后更新于 2024年2月25日 22:14


服务器推荐部署的开源软件
https://blog.ovvv.top/posts/f297b285/
作者
mobeicanyue
发布于
2024年1月25日 14:05
更新于
2024年2月25日 22:14
许可协议
\ No newline at end of file diff --git a/posts/f297b285/index.html.br b/posts/f297b285/index.html.br index c87238e8..666b5dd9 100644 Binary files a/posts/f297b285/index.html.br and b/posts/f297b285/index.html.br differ diff --git a/posts/f297b285/index.html.gz b/posts/f297b285/index.html.gz index 014e267c..7841820e 100644 Binary files a/posts/f297b285/index.html.gz and b/posts/f297b285/index.html.gz differ diff --git a/posts/f7a090e6/index.html b/posts/f7a090e6/index.html index 579fd47c..8691d3dc 100644 --- a/posts/f7a090e6/index.html +++ b/posts/f7a090e6/index.html @@ -1 +1 @@ -Umami 安装使用教程 - 漠北残月的博客

Umami 安装使用教程

本文最后更新于 2024年1月25日 15:07

Umami is a simple, fast, privacy-focused alternative to Google Analytics.

Umami 是一个简单、快速、注重隐私的 Google Analytics 替代品。

Umami 官网图

1. 什么是 Umami,为什么要使用它?

Umami 是一个简单、快速、注重隐私的开源分析解决方案,是 Google Analytics 的替代品。可轻松收集、分析和了解您的网络数据,同时维护访客隐私和数据所有权。不收集个人身份信息,不使用 Cookie,所有数据都经过匿名处理,符合 GDPR。

它是一个网站统计工具,可以帮助你分析网站的访问情况,比如访问量、访问来源、访问时间等等。这对于静态网站来说是非常有用的,因为静态网站无法像动态网站一样通过后端代码来统计访问情况。

2. 安装 Umami

打开 1Panel 面板,点击 应用商店,搜索 umami,点击 安装 即可。

1Panel 安装配置教程

要求:
Node.js >= 16.13
MySQL or Postgresql

  • 安装 Yarn

    1
    npm install -g yarn
  • 获取源码并安装依赖

    1
    2
    3
    git clone https://github.com/umami-software/umami.git
    cd umami
    yarn install
  • 配置 Umami
    创建一个 .env 文件,内容如下:

    1
    DATABASE_URL=connection-url

    其中 connection-url 为数据库连接地址,如

    1
    postgresql://username:mypassword@localhost:5432/mydb
    1
    mysql://username:mypassword@localhost:3306/mydb
  • 构建 Umami

    1
    yarn build
  • 启动 Umami

    1
    yarn start

下载官方的 docker-compose.yml 文件:
https://github.com/umami-software/umami/blob/master/docker-compose.yml

配置里默认是 Postgresql 数据库,如果你想使用 MySQL 数据库,可以修改 docker-compose.yml 文件,将 DATABASE_URLpostgres 替换为 mysql,并修改 DATABASE_URL 为 MySQL 对应的链接。

然后运行:

1
docker-compose up -d

默认情况下,应用程序将在 http://localhost:3000 上启动。你可能需要代理 Web 服务器的请求,或更改端口来直接为应用程序提供服务。

3. 修改 Umami 密码

Umami 启动后,默认用户名为 admin,默认密码为 umami

第一件事是修改密码,选择 Setting -> Profile,然后设置你的新密码。
修改密码

点击右上角的地球图标,修改语言为 中文

4. 添加网站

点击 设置 -> 网站 -> 添加网站,输入你的网站地址,点击 添加 即可。
添加网站

填写信息后,点击 编辑
编辑

再点击 跟踪代码,复制代码到你的网站中即可。
跟踪代码

1
<script async src="https://example.com/script.js" data-website-id="xxxxxxxxxxxxxxxxxxxx"></script>

如果你在本地写博客,你会发现 localhost 也被统计了,可以添加 data-domains 属性,只统计你的域名:

1
<script async src="https://example.com/script.js" data-website-id="xxxxxxxxxxxxxxxxxxxx" data-domains="example.com"></script>

如果你想遵循访客的 Do Not Track 设置,可以添加 data-do-not-track 属性:

1
<script async src="https://example.com/script.js" data-website-id="xxxxxxxxxxxxxxxxxxxx" data-do-not-track="true"></script>

更多使用方法请参考官方文档:https://umami.is/docs/tracker-configuration


Umami 安装使用教程
https://blog.ovvv.top/posts/f7a090e6/
作者
mobeicanyue
发布于
2024年1月24日 11:55
更新于
2024年1月25日 15:07
许可协议
\ No newline at end of file +Umami 安装使用教程 - 漠北残月的博客

Umami 安装使用教程

本文最后更新于 2024年1月25日 15:07

Umami is a simple, fast, privacy-focused alternative to Google Analytics.

Umami 是一个简单、快速、注重隐私的 Google Analytics 替代品。

Umami 官网图

1. 什么是 Umami,为什么要使用它?

Umami 是一个简单、快速、注重隐私的开源分析解决方案,是 Google Analytics 的替代品。可轻松收集、分析和了解您的网络数据,同时维护访客隐私和数据所有权。不收集个人身份信息,不使用 Cookie,所有数据都经过匿名处理,符合 GDPR。

它是一个网站统计工具,可以帮助你分析网站的访问情况,比如访问量、访问来源、访问时间等等。这对于静态网站来说是非常有用的,因为静态网站无法像动态网站一样通过后端代码来统计访问情况。

2. 安装 Umami

打开 1Panel 面板,点击 应用商店,搜索 umami,点击 安装 即可。

1Panel 安装配置教程

要求:
Node.js >= 16.13
MySQL or Postgresql

  • 安装 Yarn

    1
    npm install -g yarn
  • 获取源码并安装依赖

    1
    2
    3
    git clone https://github.com/umami-software/umami.git
    cd umami
    yarn install
  • 配置 Umami
    创建一个 .env 文件,内容如下:

    1
    DATABASE_URL=connection-url

    其中 connection-url 为数据库连接地址,如

    1
    postgresql://username:mypassword@localhost:5432/mydb
    1
    mysql://username:mypassword@localhost:3306/mydb
  • 构建 Umami

    1
    yarn build
  • 启动 Umami

    1
    yarn start

下载官方的 docker-compose.yml 文件:
https://github.com/umami-software/umami/blob/master/docker-compose.yml

配置里默认是 Postgresql 数据库,如果你想使用 MySQL 数据库,可以修改 docker-compose.yml 文件,将 DATABASE_URLpostgres 替换为 mysql,并修改 DATABASE_URL 为 MySQL 对应的链接。

然后运行:

1
docker-compose up -d

默认情况下,应用程序将在 http://localhost:3000 上启动。你可能需要代理 Web 服务器的请求,或更改端口来直接为应用程序提供服务。

3. 修改 Umami 密码

Umami 启动后,默认用户名为 admin,默认密码为 umami

第一件事是修改密码,选择 Setting -> Profile,然后设置你的新密码。
修改密码

点击右上角的地球图标,修改语言为 中文

4. 添加网站

点击 设置 -> 网站 -> 添加网站,输入你的网站地址,点击 添加 即可。
添加网站

填写信息后,点击 编辑
编辑

再点击 跟踪代码,复制代码到你的网站中即可。
跟踪代码

1
<script async src="https://example.com/script.js" data-website-id="xxxxxxxxxxxxxxxxxxxx"></script>

如果你在本地写博客,你会发现 localhost 也被统计了,可以添加 data-domains 属性,只统计你的域名:

1
<script async src="https://example.com/script.js" data-website-id="xxxxxxxxxxxxxxxxxxxx" data-domains="example.com"></script>

如果你想遵循访客的 Do Not Track 设置,可以添加 data-do-not-track 属性:

1
<script async src="https://example.com/script.js" data-website-id="xxxxxxxxxxxxxxxxxxxx" data-do-not-track="true"></script>

更多使用方法请参考官方文档:https://umami.is/docs/tracker-configuration


Umami 安装使用教程
https://blog.ovvv.top/posts/f7a090e6/
作者
mobeicanyue
发布于
2024年1月24日 11:55
更新于
2024年1月25日 15:07
许可协议
\ No newline at end of file diff --git a/posts/f7a090e6/index.html.br b/posts/f7a090e6/index.html.br index 7846025f..bd959534 100644 Binary files a/posts/f7a090e6/index.html.br and b/posts/f7a090e6/index.html.br differ diff --git a/posts/f7a090e6/index.html.gz b/posts/f7a090e6/index.html.gz index a614c8f2..0644463f 100644 Binary files a/posts/f7a090e6/index.html.gz and b/posts/f7a090e6/index.html.gz differ diff --git a/posts/f7c262de/index.html b/posts/f7c262de/index.html index 4853851b..e317e197 100644 --- a/posts/f7c262de/index.html +++ b/posts/f7c262de/index.html @@ -1 +1 @@ -Java 随谈 — 聊聊我对 Java 的看法 - 漠北残月的博客

Java 随谈 — 聊聊我对 Java 的看法

本文最后更新于 2024年1月24日 21:34

Java 是一种高级的、基于类的面向对象的编程语言,其设计目的是尽可能减少对实现的依赖。它是一种通用编程语言,旨在让程序员一次编写,到处运行(WORA),也就是说,编译后的 Java 代码可以在所有支持 Java 的平台上运行,而无需重新编译。Java 应用程序通常被编译成字节码,可以在任何 Java 虚拟机(JVM)上运行,而不受底层计算机体系结构的限制。Java 的语法与 C 和 C++ 相似,但比它们少了一些底层设施。Java 运行时提供了传统编译语言通常不具备的动态功能(如反射和运行时代码修改)。 - wikipedia

Java 是一门历史悠久的面向对象的编程语言,生态与产品众多,国内与 Java 有关的开发技术栈也是相当热门。我写过不少关于 Java 的博客(在 CSDN),接触它的时间也不短了,去年还学习了两门新兴的编程语言。

今天以一个 Java 用户的身份来聊一聊我个人对 Java 的看法:它的优缺点与其他语言的比较以及我对它的未来的看法

本文默认你是一个有一定 Java 基础的读者,并且对其他编程语言也有一定的了解。

1. Java 的优点

首先呢,Java 它绝对不失为一门好语言。

Java 语言的优点有很多:

  1. 跨平台,Java 语言编写的应用程序可以在不同的操作系统系统上运行(write once, run anywhere)。这种跨平台性是通过 JVM (Java Virtual Machine)。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
    当然,这种跨平台实现有利有弊,也是我们后面要讨论的重点。
  2. 语法相对比 C/C++ 较容易理解,Java 工具类也特别全面。当我学完 C++ 再来写 Java 代码时直呼太方便了,什么代码库都有现成的供调用。
  3. 生态相当丰富(maven 仓库、安卓开发、服务端开发框架),很多功能只有你想不到,没有它做不到,直接导包使用就可以。
  4. 对线程的支持相当好,线程的创建、销毁、同步等等都有现成的 API 可以使用。同步异步写起来也很方便。
  5. 健壮性,Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。

2. Java 的缺点

但是呢,Java 也有很多为人诟病的问题。

下面就来具体阐述一下我的看法,如果有不周到或者浅显、错误的观点,敬请指出。

2.1 性能与 JVM 的问题

Java 的性能是令人诟病的,其中有相当一部分是因为 Java 的虚拟机 JVM。其性能表现不理想甚至还体现在基于 Java 的 Android 上。何出此言?

众所周知,编程语言大体上可分为两类,一类是编译型,一类是脚本型

Java 表面上虽然是一门编译型语言,但它终归是要在虚拟机里面执行的,光从这一点上来看,它就和脚本语言极为相似(脚本也要依靠解释器去执行)。

即使虚拟机再怎么精简,运行时也是需要占用相当部分容量的内存。这一点也体现在打包一个简单的 Java 项目的时候你会很头疼:即使你只写了一个 hello world 代码,但是你想要把这个 hello world 在系统上以二进制形式直接跑起来,也得打包完整的 JRE。(比如你写好了 Java 代码想 Windows 双击 exe 运行就得打包,因为小白用户总不可能给你提前装个 JRE 吧)

AOT 编译(Ahead-of-time compilation, 预编译)将代码编译成本地机器代码,能够大大提高 Java 程序的性能,但 Java 不能完全依赖 AOT 去提高性能,多数情况 JIT(Just-in-time, 实时编译) 也是必不可少的。因为 Java 语言具有动态性,它的动态性主要体现在反射(reflection)和动态代理(dynamic proxy)上。通过反射,你可以在运行时获取类的信息并动态操作类的属性、方法等。动态代理允许你在运行时创建代理类,拦截对真实对象的调用并执行自定义的逻辑。
这就决定了,你无法在编译时就确定该如何使用 反射 和 动态代理。因此,JVM 无法在编译时优化这些代码,只能在运行时进行优化。这就是 Java 为什么不能完全依赖 AOT 去提高性能的原因。

看到这里,我们似乎就能理解,基于 Java 的 Android 和 Objective-C/Swift 的 iOS,为什么性能会相差甚远(安卓苹果区别较大,编程语言的不同当然只是性能差距的一个重要原因之一,还有原因如:苹果生态对软件有非常一致的规范要求,而且言出法必随 等)。

看到这里有的同学可能就会说了。你一直在吐槽 Java 平台的 JVM,但这是 Java 为跨平台性作出必要的牺牲,有了它,Java 才能实现完美的跨平台。你看看 C 语言或者别的编译型语言有这样的跨平台能力吗?(脚本性语言就不包括在内了,因为脚本性语言本来就是交由解释器来执行的)

你别说,还真有。Go 我觉得就是个比较好的例子。
简单介绍一下这门语言吧:Go(又称 Golang)是由 Google 开发的一门编程语言,注重简洁、高效和并发编程。它具有垃圾回收机制、强大的标准库和并发支持。没有虚拟机,代码直接编译成可执行文件,且支持跨平台编译。

众所周知,越新的语言,它的特性、语法糖和工具链等等功能就越完善。比如说 Java 它相对于 C 和 C++ 就做了很多不错的工具类内置。我当初学完 C 和 C++ 再来学习 Java 的时候就直呼太方便了。

Go 这门语言,它在集成了一些更新更好用的语法糖和工具类的同时。还实现了编程语言一直梦寐以求的功能:跨平台编译。

可别小瞧了这 5 个字,它代表着即使你是 Windows 操作系统,你写好了一份 Go 语言的代码,那么你也可以在 Windows 操作系统上 编译出 LinuxMac OS 系统的二进制文件。(当然系统不止这三个)

Java 和 GO 的编译执行方式对比:

1
2
3
.java -->     .class   -->  jvm 执行(间接和操作系统打交道) 

.go --> 二进制文件.exe --> 操作系统执行

我觉得后者的逻辑是比较符合程序猿直觉的:既然我写一份代码就可以直接跨平台编译执行二进制文件了,为什么还要用那个虚拟机占用内存呢?

2.2 版本问题

GO 语言的开源生态相对 Java 来说还是太弱了,Java 很多时候还依然是必需品。既然如此,有没有办法去改善 Java 的性能问题呢?有,就是尽可能升级 JDK 版本,不要坚守在 Java8。

Java 版本分为非长期支持版本(non-LTS)和长期支持版本(Long Term Support, LTS)。短期支持版本每半年发布一次,长期支持版本每 3 年发布一次。短期支持版本的生命周期只有 6 个月,而长期支持版本的生命周期为 8 年。
目前,Java 21 是最新的 LTS 版本 但刚出还不太稳定,我推荐使用 Java 17,因为它是上个 LTS 版本 使用比较稳定。Springboot3 最低要求也是 JDK17。

性能提升还是相当明显的。
JDK8-17 性能对比
JDK21 性能对比

但是国内很多公司还在使用 JDK 8,甚至还有更低的。直到现在,JDK 8 仍然是国内最流行的版本。我理解如果你的项目已经上线了,那么你肯定不会考虑去升级 JDK 版本,因为要投入不少的时间精力与人力成本,这样做还可能会引发一系列的问题。但是如果你是一个新项目,或者项目有长期规划,那么我觉得你可以考虑一下升级 JDK 版本了。Springboot2 最低要求是 JDK8,如上文提到 Springboot3 最低要求是 JDK17,有不小的跨度。希望开源社区和开源产品可以推动 JDK 的更新吧。

2.3 商业化使用问题

最后就是不得不提的 商业化使用 的问题了。
老话说得好:“你发任你发,我用 Java8”。除了因为上文提到的生态和兼容问题而不升级版本,从商业化角度来看,这么说也并非空穴来风,Java 8u202 是 Oracle 公司当时发布的最后一个免费的 JDK 版本,之后的版本都是收费的。这也是国内很多公司还在使用 JDK 8 的原因之一。

我在写文章的时候刚好看到这篇报道:

Java 自 2019 年起采用付费订阅模式,但 2023 年 1 月再次更改了定价模式,宣布基于公司内总员工数来收取对应的费用,而不是使用 Java SE 的员工数,这种定价模式的改变将对中小型企业产生重大影响,也引发了巨大的争议。甚至有网友直接爆料,「最近 Oracle“要求”公司每年付 72,000,000 英镑去使用 Java,所以公司关闭了所有的 Java 项目,从每台机器上卸载了 Java,并请来了几十个程序员,用 HTML 等重新创建他们的系统。」
源于此,根据 TIOBE 指数显示,从 2023 年 1 月到 2024 年 1 月,Java 失去了 4.34% 的市场份额。从 Java 趋势榜单上也可以非常直观地看到,Java 已经降至自 2001 年 TIOBE 指数榜单推出以来的最低位。
原文链接:https://blog.csdn.net/csdnnews/article/details/135469865

之前就知道 Oracle 在霍霍 JDK 进行商业化,但没想到又搞出这种幺蛾子。
Java 开发国内有多火,相信大家应该都有所耳闻。但好端端天胡开局,搞成这样,不得不令人感叹。
老实讲,我是真不喜欢 Oracle 这家公司。一切都以商业化为目的,包括收购的 Java,MySQL 等。将一门编程语言搞得这么商业化还是独一家(主流的哪个不开源免费)。虽说挣钱嘛不寒碜,但这样真的不体面,吃相是真的不好看。

反观 C#,相较 Java 的收费与严苛的审查规则,C# 自 2014 年以来一直是开源和免费使用的,没有迹象表明要改为订阅模式。今年 C# 也摘得 2023 年编程语言称号。至于为什么 C# 能至于此,可以看看 上文这篇博客,除了这些 也与微软围绕大力推广 .NET 离不开关系

最后,我建议要用 Java 就使用开源免费的 OpenJDK,功能上并没有什么大的差别,有些厂商还有自己定制的 OpenJDK。Linux 上默认的 JDK 就是 OpenJDK。

如果你是 Windows 系统,甚至可以直接安装 Microsoft 提供的 OpenJDK !(选择 .msi 安装包可以帮你安装、设置 JAVA_HOME,一条龙)。

另附上一份 Oracle 旗下的另一款数据库产品 MySQL(大家应该都熟悉)的开源免费替代品 MariaDB 的介绍:

被甲骨文公司收购后,Oracle 大幅调涨 MySQL 商业版的售价,且甲骨文公司不再支持另一个自由软件项目 OpenSolaris 的发展,因此导致自由软件社群们对于 Oracle 是否还会持续支持 MySQL 社群版(MySQL 之中唯一的免费版本)有所隐忧,MySQL 的创始人麦克尔·维德纽斯 以 MySQL 为基础,成立分支计划 MariaDB。 -wikipedia

所以基于开源的考虑,现在 Linux 发行版默认的 JDK 几乎都是 OpenJDK,数据库几乎都是 MariaDB(兼容 MySQL)。(如 Debian 和 ArchLinux)

3. Java 与其他语言的比较

3.1 Java 与 C/C++ 的比较

  • 性能:在性能上 C/C++ 是遥遥领先于 Java 的,这也是很多游戏引擎都用 C/C++ 编写的原因。甚至连 Java 的 JVM 本身都是用 C/C++ 写的。JVM 需要与底层系统进行交互,例如内存管理、线程控制等。而众所周知,C/C++ 是最接近底层的高级语言、是系统级编程语言,性能也优异,具有对这些底层操作的更好支持,使得实现 JVM 时更容易处理这些系统级任务。

  • 语法:Java 语法相对 C/C++ 来说更加简洁,没有指针和复杂的底层操作;C/C++ 语法更加灵活和复杂,支持指针,可以进行更复杂的底层操作。

  • 内存管理:Java 使用垃圾回收机制,程序员无需手动管理内存。这减少了内存泄漏和悬挂指针等问题,但也可能导致一些性能开销;而 C/C++ 没有垃圾回收机制,C/C++ 允许程序员手动管理内存,包括内存的分配和释放。这给了程序员更大的灵活性,但也增加了出错的可能性。

  • 跨平台和编译执行过程:
    Java 被设计为一种 “Write Once, Run Anywhere”(一次编写,到处运行)的语言,即 Java 程序可以在不同平台上运行而无需重新编译。编译执行过程是:代码(.java)先编译成字节码(.class),然后字节码由 JVM 解释执行;
    C/C++ 的可移植性相对较低(针对不同的操作系统和硬件有不同的写法,生成的二进制文件也不通用),它通常需要针对特定平台进行编译。编译执行过程是:直接编译成二进制文件,由操作系统执行。

  • 应用场景:Java 适合开发大型应用程序,例如企业级应用程序、Web 应用程序、移动应用程序等;C/C++ 适合开发系统级应用程序或对性能有较高要求的程序,例如操作系统、驱动程序、游戏引擎、图形应用程序等。

3.2 Java 与 Python 的比较

  • 性能:Python 是脚本语言,性能不如 Java。Python 代码在执行时会被解释器逐行解释,性能较低。而 Java 代码是先编译成字节码(编译优化),然后由 JVM 解释执行。

  • 语法:Python 以其简洁的语法而闻名,比 Java 更简洁。没有类型声明、分号等,代码量更少。

  • 内存管理:都是使用垃圾回收机制,程序员无需手动管理内存。

  • 跨平台和编译执行过程:Python 也是一种跨平台语言,但是 Python 代码在不同平台上运行时需要安装 Python 解释器,通过解释器解释执行代码,而 Java 代码在不同平台上运行时需要安装 JVM。实现思路都是类似的,JVM 在我看来何尝不是种解释器呢。

  • 应用场景:Python 适合用于多种应用场景。例如自动化脚本和任务、Web 应用程序、数据分析、人工智能和自然语言处理等

3.3 Java 与 Go 的比较

  • 性能:Go 语言的性能比 Java 稍好,但是差距不大。Go 被设计为一门轻量级语言,具有很好的性能。它使用了垃圾回收机制,帮助管理内存,避免了一些常见的内存错误。Go 语言的性能优势主要体现在并发编程上,Go 语言的并发编程更加简单高效。

  • 语法:Go 语言的语法比 Java 更简单、直观、清晰,强调代码的可读性和易理解性。

  • 内存管理:都使用垃圾回收机制,程序员无需手动管理内存。

  • 跨平台和编译执行过程:Go 是一种静态编译语言,它的程序可以编译成本地机器码。这意味着 Go 程序不需要依赖于虚拟机,可直接在目标平台上运行,无需安装其他运行时环境。而且 Go 还提供了方便的交叉编译工具,可以生成不同操作系统和体系结构的可执行文件!使在一个平台上编译出另一个平台的可执行文件变得容易。编译执行过程是:代码(.go)直接编译成二进制文件,然后由操作系统执行。

  • 应用场景:Go 适合用于开发 网络编程、分布式系统、云原生开发、Web 应用程序、系统工具、命令行工具等。

3.4 Java 与 C# 的比较

  • 性能:在性能方面,Java 和 C# 在很多方面都非常接近,并且难以明确地说哪一个性能更好。二者都是类似的编译执行过程,也都使用垃圾回收机制。PS:主要是,我几乎没怎么用过 C#,所以不好评价。

  • 语法:Java 语法是强类型、面向对象的编程范式,语法相对传统和熟悉;C# 的语法设计更加灵活和现代化。它引入了一些先进的语言特性,如 LINQ(Language Integrated Query)、异步编程等,使得代码更为简洁。C#使用属性(Attributes),而Java使用注解(Annotations)来添加元数据和特殊行为。

  • 内存管理:都是使用垃圾回收机制,程序员无需手动管理内存。

  • 跨平台和编译执行过程:C# 虽然最初是为 Windows 平台设计的,但通过 .NET Core 和 .NET 5+ 的推动,现在也支持跨平台开发。C# 程序可以使用跨平台的 .NET Core 运行时来执行。

  • 应用场景:Java 广泛应用于企业级应用、大型系统、Web 开发、移动应用(Android 开发)、云计算等领域。由于其平台无关性和强大的生态系统,Java 在企业级开发中有着重要地位。C# 主要用于 Windows 平台上的开发,包括桌面应用、Web 应用、游戏开发(Unity 游戏引擎)、云服务等。近年来,通过 .NET Core 和 .NET 5+ 的跨平台支持,C# 在开发跨平台应用上的应用场景也在不断增加。

4. 对 Java 的未来的展望

GraalVM 的广泛使用以提高性能

GraalVM 是由 Oracle 开发的一个高性能、通用的虚拟机,支持多种编程语言,包括 Java、JavaScript、Python、Ruby 等。以下是一些关键特性和用途:
多语言支持:GraalVM 支持多种编程语言,使得开发者可以在同一个运行时环境中使用不同语言编写的代码,包括 Java、JavaScript、Python、Ruby 等。这为混合语言的开发提供了便利。
即时编译器(JIT):GraalVM 包含一个先进的 JIT 编译器,可以提供比传统的 Java 虚拟机更好的性能。它允许将程序源代码直接编译成机器码,而不需要预先将代码编译成字节码。
Native Image:GraalVM 提供了 Native Image 工具,可以将 Java 程序直接编译成本地可执行文件,减少启动时间和内存占用。也就是我们提到的 AOT 编译。
嵌入式执行:GraalVM 可以嵌入到其他应用程序中,使得开发者可以在自己的应用中利用 GraalVM 的多语言支持和性能优势。
支持 Java 17+ 版本。

直接使用 Kotlin 代替 Java

Kotlin 是一种静态类型的编程语言,它可以编译成 Java 字节码,也可以编译成本地机器码。Kotlin 由 JetBrains 开发,目前已经成为 Android 开发的首选语言。Kotlin 与 Java 兼容,可以与 Java 代码无缝集成,也可以直接使用 Kotlin 编写 Android 应用程序。Kotlin 语法简洁,易于学习,具有很好的可读性和可维护性。Kotlin 也可以嵌入到其他应用程序中,使得开发者可以在自己的应用中利用 Kotlin 的多语言支持和性能优势。Kotlin 也是一种跨平台语言,Kotlin/Native 允许将 Kotlin 代码编译成本地机器代码,而不是 Java 字节码,可以脱离 JVM,直接在支持的平台上运行编译后的二进制文件。


Java 随谈 — 聊聊我对 Java 的看法
https://blog.ovvv.top/posts/f7c262de/
作者
mobeicanyue
发布于
2024年1月10日 02:02
更新于
2024年1月24日 21:34
许可协议
\ No newline at end of file +Java 随谈 — 聊聊我对 Java 的看法 - 漠北残月的博客

Java 随谈 — 聊聊我对 Java 的看法

本文最后更新于 2024年1月24日 21:34

Java 是一种高级的、基于类的面向对象的编程语言,其设计目的是尽可能减少对实现的依赖。它是一种通用编程语言,旨在让程序员一次编写,到处运行(WORA),也就是说,编译后的 Java 代码可以在所有支持 Java 的平台上运行,而无需重新编译。Java 应用程序通常被编译成字节码,可以在任何 Java 虚拟机(JVM)上运行,而不受底层计算机体系结构的限制。Java 的语法与 C 和 C++ 相似,但比它们少了一些底层设施。Java 运行时提供了传统编译语言通常不具备的动态功能(如反射和运行时代码修改)。 - wikipedia

Java 是一门历史悠久的面向对象的编程语言,生态与产品众多,国内与 Java 有关的开发技术栈也是相当热门。我写过不少关于 Java 的博客(在 CSDN),接触它的时间也不短了,去年还学习了两门新兴的编程语言。

今天以一个 Java 用户的身份来聊一聊我个人对 Java 的看法:它的优缺点与其他语言的比较以及我对它的未来的看法

本文默认你是一个有一定 Java 基础的读者,并且对其他编程语言也有一定的了解。

1. Java 的优点

首先呢,Java 它绝对不失为一门好语言。

Java 语言的优点有很多:

  1. 跨平台,Java 语言编写的应用程序可以在不同的操作系统系统上运行(write once, run anywhere)。这种跨平台性是通过 JVM (Java Virtual Machine)。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
    当然,这种跨平台实现有利有弊,也是我们后面要讨论的重点。
  2. 语法相对比 C/C++ 较容易理解,Java 工具类也特别全面。当我学完 C++ 再来写 Java 代码时直呼太方便了,什么代码库都有现成的供调用。
  3. 生态相当丰富(maven 仓库、安卓开发、服务端开发框架),很多功能只有你想不到,没有它做不到,直接导包使用就可以。
  4. 对线程的支持相当好,线程的创建、销毁、同步等等都有现成的 API 可以使用。同步异步写起来也很方便。
  5. 健壮性,Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。

2. Java 的缺点

但是呢,Java 也有很多为人诟病的问题。

下面就来具体阐述一下我的看法,如果有不周到或者浅显、错误的观点,敬请指出。

2.1 性能与 JVM 的问题

Java 的性能是令人诟病的,其中有相当一部分是因为 Java 的虚拟机 JVM。其性能表现不理想甚至还体现在基于 Java 的 Android 上。何出此言?

众所周知,编程语言大体上可分为两类,一类是编译型,一类是脚本型

Java 表面上虽然是一门编译型语言,但它终归是要在虚拟机里面执行的,光从这一点上来看,它就和脚本语言极为相似(脚本也要依靠解释器去执行)。

即使虚拟机再怎么精简,运行时也是需要占用相当部分容量的内存。这一点也体现在打包一个简单的 Java 项目的时候你会很头疼:即使你只写了一个 hello world 代码,但是你想要把这个 hello world 在系统上以二进制形式直接跑起来,也得打包完整的 JRE。(比如你写好了 Java 代码想 Windows 双击 exe 运行就得打包,因为小白用户总不可能给你提前装个 JRE 吧)

AOT 编译(Ahead-of-time compilation, 预编译)将代码编译成本地机器代码,能够大大提高 Java 程序的性能,但 Java 不能完全依赖 AOT 去提高性能,多数情况 JIT(Just-in-time, 实时编译) 也是必不可少的。因为 Java 语言具有动态性,它的动态性主要体现在反射(reflection)和动态代理(dynamic proxy)上。通过反射,你可以在运行时获取类的信息并动态操作类的属性、方法等。动态代理允许你在运行时创建代理类,拦截对真实对象的调用并执行自定义的逻辑。
这就决定了,你无法在编译时就确定该如何使用 反射 和 动态代理。因此,JVM 无法在编译时优化这些代码,只能在运行时进行优化。这就是 Java 为什么不能完全依赖 AOT 去提高性能的原因。

看到这里,我们似乎就能理解,基于 Java 的 Android 和 Objective-C/Swift 的 iOS,为什么性能会相差甚远(安卓苹果区别较大,编程语言的不同当然只是性能差距的一个重要原因之一,还有原因如:苹果生态对软件有非常一致的规范要求,而且言出法必随 等)。

看到这里有的同学可能就会说了。你一直在吐槽 Java 平台的 JVM,但这是 Java 为跨平台性作出必要的牺牲,有了它,Java 才能实现完美的跨平台。你看看 C 语言或者别的编译型语言有这样的跨平台能力吗?(脚本性语言就不包括在内了,因为脚本性语言本来就是交由解释器来执行的)

你别说,还真有。Go 我觉得就是个比较好的例子。
简单介绍一下这门语言吧:Go(又称 Golang)是由 Google 开发的一门编程语言,注重简洁、高效和并发编程。它具有垃圾回收机制、强大的标准库和并发支持。没有虚拟机,代码直接编译成可执行文件,且支持跨平台编译。

众所周知,越新的语言,它的特性、语法糖和工具链等等功能就越完善。比如说 Java 它相对于 C 和 C++ 就做了很多不错的工具类内置。我当初学完 C 和 C++ 再来学习 Java 的时候就直呼太方便了。

Go 这门语言,它在集成了一些更新更好用的语法糖和工具类的同时。还实现了编程语言一直梦寐以求的功能:跨平台编译。

可别小瞧了这 5 个字,它代表着即使你是 Windows 操作系统,你写好了一份 Go 语言的代码,那么你也可以在 Windows 操作系统上 编译出 LinuxMac OS 系统的二进制文件。(当然系统不止这三个)

Java 和 GO 的编译执行方式对比:

1
2
3
.java -->     .class   -->  jvm 执行(间接和操作系统打交道) 

.go --> 二进制文件.exe --> 操作系统执行

我觉得后者的逻辑是比较符合程序猿直觉的:既然我写一份代码就可以直接跨平台编译执行二进制文件了,为什么还要用那个虚拟机占用内存呢?

2.2 版本问题

GO 语言的开源生态相对 Java 来说还是太弱了,Java 很多时候还依然是必需品。既然如此,有没有办法去改善 Java 的性能问题呢?有,就是尽可能升级 JDK 版本,不要坚守在 Java8。

Java 版本分为非长期支持版本(non-LTS)和长期支持版本(Long Term Support, LTS)。短期支持版本每半年发布一次,长期支持版本每 3 年发布一次。短期支持版本的生命周期只有 6 个月,而长期支持版本的生命周期为 8 年。
目前,Java 21 是最新的 LTS 版本 但刚出还不太稳定,我推荐使用 Java 17,因为它是上个 LTS 版本 使用比较稳定。Springboot3 最低要求也是 JDK17。

性能提升还是相当明显的。
JDK8-17 性能对比
JDK21 性能对比

但是国内很多公司还在使用 JDK 8,甚至还有更低的。直到现在,JDK 8 仍然是国内最流行的版本。我理解如果你的项目已经上线了,那么你肯定不会考虑去升级 JDK 版本,因为要投入不少的时间精力与人力成本,这样做还可能会引发一系列的问题。但是如果你是一个新项目,或者项目有长期规划,那么我觉得你可以考虑一下升级 JDK 版本了。Springboot2 最低要求是 JDK8,如上文提到 Springboot3 最低要求是 JDK17,有不小的跨度。希望开源社区和开源产品可以推动 JDK 的更新吧。

2.3 商业化使用问题

最后就是不得不提的 商业化使用 的问题了。
老话说得好:“你发任你发,我用 Java8”。除了因为上文提到的生态和兼容问题而不升级版本,从商业化角度来看,这么说也并非空穴来风,Java 8u202 是 Oracle 公司当时发布的最后一个免费的 JDK 版本,之后的版本都是收费的。这也是国内很多公司还在使用 JDK 8 的原因之一。

我在写文章的时候刚好看到这篇报道:

Java 自 2019 年起采用付费订阅模式,但 2023 年 1 月再次更改了定价模式,宣布基于公司内总员工数来收取对应的费用,而不是使用 Java SE 的员工数,这种定价模式的改变将对中小型企业产生重大影响,也引发了巨大的争议。甚至有网友直接爆料,「最近 Oracle“要求”公司每年付 72,000,000 英镑去使用 Java,所以公司关闭了所有的 Java 项目,从每台机器上卸载了 Java,并请来了几十个程序员,用 HTML 等重新创建他们的系统。」
源于此,根据 TIOBE 指数显示,从 2023 年 1 月到 2024 年 1 月,Java 失去了 4.34% 的市场份额。从 Java 趋势榜单上也可以非常直观地看到,Java 已经降至自 2001 年 TIOBE 指数榜单推出以来的最低位。
原文链接:https://blog.csdn.net/csdnnews/article/details/135469865

之前就知道 Oracle 在霍霍 JDK 进行商业化,但没想到又搞出这种幺蛾子。
Java 开发国内有多火,相信大家应该都有所耳闻。但好端端天胡开局,搞成这样,不得不令人感叹。
老实讲,我是真不喜欢 Oracle 这家公司。一切都以商业化为目的,包括收购的 Java,MySQL 等。将一门编程语言搞得这么商业化还是独一家(主流的哪个不开源免费)。虽说挣钱嘛不寒碜,但这样真的不体面,吃相是真的不好看。

反观 C#,相较 Java 的收费与严苛的审查规则,C# 自 2014 年以来一直是开源和免费使用的,没有迹象表明要改为订阅模式。今年 C# 也摘得 2023 年编程语言称号。至于为什么 C# 能至于此,可以看看 上文这篇博客,除了这些 也与微软围绕大力推广 .NET 离不开关系

最后,我建议要用 Java 就使用开源免费的 OpenJDK,功能上并没有什么大的差别,有些厂商还有自己定制的 OpenJDK。Linux 上默认的 JDK 就是 OpenJDK。

如果你是 Windows 系统,甚至可以直接安装 Microsoft 提供的 OpenJDK !(选择 .msi 安装包可以帮你安装、设置 JAVA_HOME,一条龙)。

另附上一份 Oracle 旗下的另一款数据库产品 MySQL(大家应该都熟悉)的开源免费替代品 MariaDB 的介绍:

被甲骨文公司收购后,Oracle 大幅调涨 MySQL 商业版的售价,且甲骨文公司不再支持另一个自由软件项目 OpenSolaris 的发展,因此导致自由软件社群们对于 Oracle 是否还会持续支持 MySQL 社群版(MySQL 之中唯一的免费版本)有所隐忧,MySQL 的创始人麦克尔·维德纽斯 以 MySQL 为基础,成立分支计划 MariaDB。 -wikipedia

所以基于开源的考虑,现在 Linux 发行版默认的 JDK 几乎都是 OpenJDK,数据库几乎都是 MariaDB(兼容 MySQL)。(如 Debian 和 ArchLinux)

3. Java 与其他语言的比较

3.1 Java 与 C/C++ 的比较

  • 性能:在性能上 C/C++ 是遥遥领先于 Java 的,这也是很多游戏引擎都用 C/C++ 编写的原因。甚至连 Java 的 JVM 本身都是用 C/C++ 写的。JVM 需要与底层系统进行交互,例如内存管理、线程控制等。而众所周知,C/C++ 是最接近底层的高级语言、是系统级编程语言,性能也优异,具有对这些底层操作的更好支持,使得实现 JVM 时更容易处理这些系统级任务。

  • 语法:Java 语法相对 C/C++ 来说更加简洁,没有指针和复杂的底层操作;C/C++ 语法更加灵活和复杂,支持指针,可以进行更复杂的底层操作。

  • 内存管理:Java 使用垃圾回收机制,程序员无需手动管理内存。这减少了内存泄漏和悬挂指针等问题,但也可能导致一些性能开销;而 C/C++ 没有垃圾回收机制,C/C++ 允许程序员手动管理内存,包括内存的分配和释放。这给了程序员更大的灵活性,但也增加了出错的可能性。

  • 跨平台和编译执行过程:
    Java 被设计为一种 “Write Once, Run Anywhere”(一次编写,到处运行)的语言,即 Java 程序可以在不同平台上运行而无需重新编译。编译执行过程是:代码(.java)先编译成字节码(.class),然后字节码由 JVM 解释执行;
    C/C++ 的可移植性相对较低(针对不同的操作系统和硬件有不同的写法,生成的二进制文件也不通用),它通常需要针对特定平台进行编译。编译执行过程是:直接编译成二进制文件,由操作系统执行。

  • 应用场景:Java 适合开发大型应用程序,例如企业级应用程序、Web 应用程序、移动应用程序等;C/C++ 适合开发系统级应用程序或对性能有较高要求的程序,例如操作系统、驱动程序、游戏引擎、图形应用程序等。

3.2 Java 与 Python 的比较

  • 性能:Python 是脚本语言,性能不如 Java。Python 代码在执行时会被解释器逐行解释,性能较低。而 Java 代码是先编译成字节码(编译优化),然后由 JVM 解释执行。

  • 语法:Python 以其简洁的语法而闻名,比 Java 更简洁。没有类型声明、分号等,代码量更少。

  • 内存管理:都是使用垃圾回收机制,程序员无需手动管理内存。

  • 跨平台和编译执行过程:Python 也是一种跨平台语言,但是 Python 代码在不同平台上运行时需要安装 Python 解释器,通过解释器解释执行代码,而 Java 代码在不同平台上运行时需要安装 JVM。实现思路都是类似的,JVM 在我看来何尝不是种解释器呢。

  • 应用场景:Python 适合用于多种应用场景。例如自动化脚本和任务、Web 应用程序、数据分析、人工智能和自然语言处理等

3.3 Java 与 Go 的比较

  • 性能:Go 语言的性能比 Java 稍好,但是差距不大。Go 被设计为一门轻量级语言,具有很好的性能。它使用了垃圾回收机制,帮助管理内存,避免了一些常见的内存错误。Go 语言的性能优势主要体现在并发编程上,Go 语言的并发编程更加简单高效。

  • 语法:Go 语言的语法比 Java 更简单、直观、清晰,强调代码的可读性和易理解性。

  • 内存管理:都使用垃圾回收机制,程序员无需手动管理内存。

  • 跨平台和编译执行过程:Go 是一种静态编译语言,它的程序可以编译成本地机器码。这意味着 Go 程序不需要依赖于虚拟机,可直接在目标平台上运行,无需安装其他运行时环境。而且 Go 还提供了方便的交叉编译工具,可以生成不同操作系统和体系结构的可执行文件!使在一个平台上编译出另一个平台的可执行文件变得容易。编译执行过程是:代码(.go)直接编译成二进制文件,然后由操作系统执行。

  • 应用场景:Go 适合用于开发 网络编程、分布式系统、云原生开发、Web 应用程序、系统工具、命令行工具等。

3.4 Java 与 C# 的比较

  • 性能:在性能方面,Java 和 C# 在很多方面都非常接近,并且难以明确地说哪一个性能更好。二者都是类似的编译执行过程,也都使用垃圾回收机制。PS:主要是,我几乎没怎么用过 C#,所以不好评价。

  • 语法:Java 语法是强类型、面向对象的编程范式,语法相对传统和熟悉;C# 的语法设计更加灵活和现代化。它引入了一些先进的语言特性,如 LINQ(Language Integrated Query)、异步编程等,使得代码更为简洁。C#使用属性(Attributes),而Java使用注解(Annotations)来添加元数据和特殊行为。

  • 内存管理:都是使用垃圾回收机制,程序员无需手动管理内存。

  • 跨平台和编译执行过程:C# 虽然最初是为 Windows 平台设计的,但通过 .NET Core 和 .NET 5+ 的推动,现在也支持跨平台开发。C# 程序可以使用跨平台的 .NET Core 运行时来执行。

  • 应用场景:Java 广泛应用于企业级应用、大型系统、Web 开发、移动应用(Android 开发)、云计算等领域。由于其平台无关性和强大的生态系统,Java 在企业级开发中有着重要地位。C# 主要用于 Windows 平台上的开发,包括桌面应用、Web 应用、游戏开发(Unity 游戏引擎)、云服务等。近年来,通过 .NET Core 和 .NET 5+ 的跨平台支持,C# 在开发跨平台应用上的应用场景也在不断增加。

4. 对 Java 的未来的展望

GraalVM 的广泛使用以提高性能

GraalVM 是由 Oracle 开发的一个高性能、通用的虚拟机,支持多种编程语言,包括 Java、JavaScript、Python、Ruby 等。以下是一些关键特性和用途:
多语言支持:GraalVM 支持多种编程语言,使得开发者可以在同一个运行时环境中使用不同语言编写的代码,包括 Java、JavaScript、Python、Ruby 等。这为混合语言的开发提供了便利。
即时编译器(JIT):GraalVM 包含一个先进的 JIT 编译器,可以提供比传统的 Java 虚拟机更好的性能。它允许将程序源代码直接编译成机器码,而不需要预先将代码编译成字节码。
Native Image:GraalVM 提供了 Native Image 工具,可以将 Java 程序直接编译成本地可执行文件,减少启动时间和内存占用。也就是我们提到的 AOT 编译。
嵌入式执行:GraalVM 可以嵌入到其他应用程序中,使得开发者可以在自己的应用中利用 GraalVM 的多语言支持和性能优势。
支持 Java 17+ 版本。

直接使用 Kotlin 代替 Java

Kotlin 是一种静态类型的编程语言,它可以编译成 Java 字节码,也可以编译成本地机器码。Kotlin 由 JetBrains 开发,目前已经成为 Android 开发的首选语言。Kotlin 与 Java 兼容,可以与 Java 代码无缝集成,也可以直接使用 Kotlin 编写 Android 应用程序。Kotlin 语法简洁,易于学习,具有很好的可读性和可维护性。Kotlin 也可以嵌入到其他应用程序中,使得开发者可以在自己的应用中利用 Kotlin 的多语言支持和性能优势。Kotlin 也是一种跨平台语言,Kotlin/Native 允许将 Kotlin 代码编译成本地机器代码,而不是 Java 字节码,可以脱离 JVM,直接在支持的平台上运行编译后的二进制文件。


Java 随谈 — 聊聊我对 Java 的看法
https://blog.ovvv.top/posts/f7c262de/
作者
mobeicanyue
发布于
2024年1月10日 02:02
更新于
2024年1月24日 21:34
许可协议
\ No newline at end of file diff --git a/posts/f7c262de/index.html.br b/posts/f7c262de/index.html.br index e1a2eb66..5d120048 100644 Binary files a/posts/f7c262de/index.html.br and b/posts/f7c262de/index.html.br differ diff --git a/posts/f7c262de/index.html.gz b/posts/f7c262de/index.html.gz index cd11b072..581171b5 100644 Binary files a/posts/f7c262de/index.html.gz and b/posts/f7c262de/index.html.gz differ diff --git a/sitemap.txt b/sitemap.txt index e973760d..c446557d 100644 --- a/sitemap.txt +++ b/sitemap.txt @@ -1,9 +1,12 @@ +https://blog.ovvv.top/posts/d6d74ca/ +https://blog.ovvv.top/posts/7671c28e/ +https://blog.ovvv.top/posts/1acd162e/ +https://blog.ovvv.top/posts/6a24c2b/ +https://blog.ovvv.top/posts/f297b285/ +https://blog.ovvv.top/posts/4a17b156/ https://blog.ovvv.top/posts/4259ee82/ https://blog.ovvv.top/posts/af028bbd/ -https://blog.ovvv.top/posts/f297b285/ https://blog.ovvv.top/posts/f24b41b1/ -https://blog.ovvv.top/posts/1acd162e/ -https://blog.ovvv.top/posts/d6d74ca/ https://blog.ovvv.top/posts/dfba1590/ https://blog.ovvv.top/about/ https://blog.ovvv.top/posts/15c02856/ @@ -20,9 +23,6 @@ https://blog.ovvv.top/posts/767e8929/ https://blog.ovvv.top/posts/21f09adf/ https://blog.ovvv.top/posts/1c0214de/ https://blog.ovvv.top/posts/72658df0/ -https://blog.ovvv.top/posts/7671c28e/ -https://blog.ovvv.top/posts/6a24c2b/ https://blog.ovvv.top/posts/a89b8953/ https://blog.ovvv.top/posts/2422058f/ -https://blog.ovvv.top/posts/4a17b156/ https://blog.ovvv.top/ diff --git a/sitemap.txt.br b/sitemap.txt.br index dd96248c..4c8ce15a 100644 Binary files a/sitemap.txt.br and b/sitemap.txt.br differ diff --git a/sitemap.txt.gz b/sitemap.txt.gz index fc75c17a..6a1e50aa 100644 Binary files a/sitemap.txt.gz and b/sitemap.txt.gz differ diff --git a/sitemap.xml b/sitemap.xml index d9613c22..e1389b31 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,7 +2,7 @@ - https://blog.ovvv.top/posts/4259ee82/ + https://blog.ovvv.top/posts/d6d74ca/ 2024-02-25 @@ -11,9 +11,27 @@ - https://blog.ovvv.top/posts/af028bbd/ + https://blog.ovvv.top/posts/7671c28e/ - 2024-02-24 + 2024-02-25 + + monthly + 0.6 + + + + https://blog.ovvv.top/posts/1acd162e/ + + 2024-02-25 + + monthly + 0.6 + + + + https://blog.ovvv.top/posts/6a24c2b/ + + 2024-02-25 monthly 0.6 @@ -22,34 +40,43 @@ https://blog.ovvv.top/posts/f297b285/ - 2024-02-24 + 2024-02-25 monthly 0.6 - https://blog.ovvv.top/posts/f24b41b1/ + https://blog.ovvv.top/posts/4a17b156/ - 2024-02-24 + 2024-02-25 monthly 0.6 - https://blog.ovvv.top/posts/1acd162e/ + https://blog.ovvv.top/posts/4259ee82/ - 2024-02-19 + 2024-02-25 monthly 0.6 - https://blog.ovvv.top/posts/d6d74ca/ + https://blog.ovvv.top/posts/af028bbd/ - 2024-02-19 + 2024-02-24 + + monthly + 0.6 + + + + https://blog.ovvv.top/posts/f24b41b1/ + + 2024-02-24 monthly 0.6 @@ -199,24 +226,6 @@ 0.6 - - https://blog.ovvv.top/posts/7671c28e/ - - 2023-12-30 - - monthly - 0.6 - - - - https://blog.ovvv.top/posts/6a24c2b/ - - 2023-12-29 - - monthly - 0.6 - - https://blog.ovvv.top/posts/a89b8953/ @@ -235,19 +244,10 @@ 0.6 - - https://blog.ovvv.top/posts/4a17b156/ - - 2023-12-29 - - monthly - 0.6 - - https://blog.ovvv.top/ - 2024-02-25 + 2024-02-26 daily 1.0 diff --git a/sitemap.xml.br b/sitemap.xml.br index 2d9202da..21efb487 100644 Binary files a/sitemap.xml.br and b/sitemap.xml.br differ diff --git a/sitemap.xml.gz b/sitemap.xml.gz index d0d2ad73..c51cf7d4 100644 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ diff --git a/tags/1panel/index.html b/tags/1panel/index.html index ea8f8e20..85cb95c9 100644 --- a/tags/1panel/index.html +++ b/tags/1panel/index.html @@ -1 +1 @@ -标签 - 1panel - 漠北残月的博客
\ No newline at end of file +标签 - 1panel - 漠北残月的博客
\ No newline at end of file diff --git a/tags/1panel/index.html.br b/tags/1panel/index.html.br index 98a207d1..d611e0aa 100644 Binary files a/tags/1panel/index.html.br and b/tags/1panel/index.html.br differ diff --git a/tags/1panel/index.html.gz b/tags/1panel/index.html.gz index 82facb67..71477892 100644 Binary files a/tags/1panel/index.html.gz and b/tags/1panel/index.html.gz differ diff --git a/tags/2023/index.html b/tags/2023/index.html index 96c343c1..9f00ec3f 100644 --- a/tags/2023/index.html +++ b/tags/2023/index.html @@ -1 +1 @@ -标签 - 2023 - 漠北残月的博客
\ No newline at end of file +标签 - 2023 - 漠北残月的博客
\ No newline at end of file diff --git a/tags/2023/index.html.br b/tags/2023/index.html.br index 35ccb6b5..b2fa9c86 100644 Binary files a/tags/2023/index.html.br and b/tags/2023/index.html.br differ diff --git a/tags/2023/index.html.gz b/tags/2023/index.html.gz index c630a94c..f33fa3e7 100644 Binary files a/tags/2023/index.html.gz and b/tags/2023/index.html.gz differ diff --git a/tags/Cloudflare/index.html b/tags/Cloudflare/index.html index 5a2bca70..a4156961 100644 --- a/tags/Cloudflare/index.html +++ b/tags/Cloudflare/index.html @@ -1 +1 @@ -标签 - Cloudflare - 漠北残月的博客

共计 1 篇文章


2024

部署博客到 Cloudflare
\ No newline at end of file +标签 - Cloudflare - 漠北残月的博客

共计 1 篇文章


2024

部署博客到 Cloudflare
\ No newline at end of file diff --git a/tags/Cloudflare/index.html.br b/tags/Cloudflare/index.html.br index b5a5989a..8bec7a14 100644 Binary files a/tags/Cloudflare/index.html.br and b/tags/Cloudflare/index.html.br differ diff --git a/tags/Cloudflare/index.html.gz b/tags/Cloudflare/index.html.gz index 343d70fc..92edde33 100644 Binary files a/tags/Cloudflare/index.html.gz and b/tags/Cloudflare/index.html.gz differ diff --git a/tags/Fail2ban/index.html b/tags/Fail2ban/index.html new file mode 100644 index 00000000..e783d213 --- /dev/null +++ b/tags/Fail2ban/index.html @@ -0,0 +1 @@ +标签 - Fail2ban - 漠北残月的博客

共计 1 篇文章


2024

Fail2ban 安装使用教程
\ No newline at end of file diff --git a/tags/Fail2ban/index.html.br b/tags/Fail2ban/index.html.br new file mode 100644 index 00000000..2a65066a Binary files /dev/null and b/tags/Fail2ban/index.html.br differ diff --git a/tags/Fail2ban/index.html.gz b/tags/Fail2ban/index.html.gz new file mode 100644 index 00000000..0f9fe1a8 Binary files /dev/null and b/tags/Fail2ban/index.html.gz differ diff --git a/tags/Giscus/index.html b/tags/Giscus/index.html new file mode 100644 index 00000000..520fa545 --- /dev/null +++ b/tags/Giscus/index.html @@ -0,0 +1 @@ +标签 - Giscus - 漠北残月的博客

共计 1 篇文章


2023

启用博客评论
\ No newline at end of file diff --git a/tags/Giscus/index.html.br b/tags/Giscus/index.html.br new file mode 100644 index 00000000..f2f95979 Binary files /dev/null and b/tags/Giscus/index.html.br differ diff --git a/tags/Giscus/index.html.gz b/tags/Giscus/index.html.gz new file mode 100644 index 00000000..7f1f5880 Binary files /dev/null and b/tags/Giscus/index.html.gz differ diff --git a/tags/Java/index.html b/tags/Java/index.html index b84458f8..c299014b 100644 --- a/tags/Java/index.html +++ b/tags/Java/index.html @@ -1 +1 @@ -标签 - Java - 漠北残月的博客
\ No newline at end of file +标签 - Java - 漠北残月的博客
\ No newline at end of file diff --git a/tags/Java/index.html.br b/tags/Java/index.html.br index 221df564..fef08550 100644 Binary files a/tags/Java/index.html.br and b/tags/Java/index.html.br differ diff --git a/tags/Java/index.html.gz b/tags/Java/index.html.gz index cce4a8d2..c36f40bf 100644 Binary files a/tags/Java/index.html.gz and b/tags/Java/index.html.gz differ diff --git a/tags/Let-s-Encrypt/index.html b/tags/Let-s-Encrypt/index.html index 2917af2b..81ce6aa1 100644 --- a/tags/Let-s-Encrypt/index.html +++ b/tags/Let-s-Encrypt/index.html @@ -1 +1 @@ -标签 - Let's-Encrypt - 漠北残月的博客
\ No newline at end of file +标签 - Let's-Encrypt - 漠北残月的博客
\ No newline at end of file diff --git a/tags/Let-s-Encrypt/index.html.br b/tags/Let-s-Encrypt/index.html.br index 89ecff68..d6b1a180 100644 Binary files a/tags/Let-s-Encrypt/index.html.br and b/tags/Let-s-Encrypt/index.html.br differ diff --git a/tags/Let-s-Encrypt/index.html.gz b/tags/Let-s-Encrypt/index.html.gz index 18aa7585..09d6cc97 100644 Binary files a/tags/Let-s-Encrypt/index.html.gz and b/tags/Let-s-Encrypt/index.html.gz differ diff --git a/tags/alist/index.html b/tags/alist/index.html index bbee1d31..814e0d2e 100644 --- a/tags/alist/index.html +++ b/tags/alist/index.html @@ -1 +1 @@ -标签 - alist - 漠北残月的博客
\ No newline at end of file +标签 - alist - 漠北残月的博客
\ No newline at end of file diff --git a/tags/alist/index.html.br b/tags/alist/index.html.br index d8b67a37..83156942 100644 Binary files a/tags/alist/index.html.br and b/tags/alist/index.html.br differ diff --git a/tags/alist/index.html.gz b/tags/alist/index.html.gz index 82e375fb..22393d44 100644 Binary files a/tags/alist/index.html.gz and b/tags/alist/index.html.gz differ diff --git a/tags/fluid/index.html b/tags/fluid/index.html index a2078af4..ef347eb0 100644 --- a/tags/fluid/index.html +++ b/tags/fluid/index.html @@ -1 +1 @@ -标签 - fluid - 漠北残月的博客
\ No newline at end of file +标签 - fluid - 漠北残月的博客
\ No newline at end of file diff --git a/tags/fluid/index.html.br b/tags/fluid/index.html.br index 2b31382d..ef9f4a79 100644 Binary files a/tags/fluid/index.html.br and b/tags/fluid/index.html.br differ diff --git a/tags/fluid/index.html.gz b/tags/fluid/index.html.gz index 5b57be2f..3668c4e0 100644 Binary files a/tags/fluid/index.html.gz and b/tags/fluid/index.html.gz differ diff --git a/tags/github-actions/index.html b/tags/github-actions/index.html index 018b36d6..137f5298 100644 --- a/tags/github-actions/index.html +++ b/tags/github-actions/index.html @@ -1 +1 @@ -标签 - github-actions - 漠北残月的博客
\ No newline at end of file +标签 - github-actions - 漠北残月的博客
\ No newline at end of file diff --git a/tags/github-actions/index.html.br b/tags/github-actions/index.html.br index 131d4181..ba593214 100644 Binary files a/tags/github-actions/index.html.br and b/tags/github-actions/index.html.br differ diff --git a/tags/github-actions/index.html.gz b/tags/github-actions/index.html.gz index 02e7ae5f..1d3cb9f7 100644 Binary files a/tags/github-actions/index.html.gz and b/tags/github-actions/index.html.gz differ diff --git a/tags/github-pages/index.html b/tags/github-pages/index.html index 1052719b..38b3775f 100644 --- a/tags/github-pages/index.html +++ b/tags/github-pages/index.html @@ -1 +1 @@ -标签 - github-pages - 漠北残月的博客
\ No newline at end of file +标签 - github-pages - 漠北残月的博客
\ No newline at end of file diff --git a/tags/github-pages/index.html.br b/tags/github-pages/index.html.br index 5e792a76..765afd39 100644 Binary files a/tags/github-pages/index.html.br and b/tags/github-pages/index.html.br differ diff --git a/tags/github-pages/index.html.gz b/tags/github-pages/index.html.gz index 5d6dcc75..447c2da8 100644 Binary files a/tags/github-pages/index.html.gz and b/tags/github-pages/index.html.gz differ diff --git a/tags/github/index.html b/tags/github/index.html index b977a95f..209e7619 100644 --- a/tags/github/index.html +++ b/tags/github/index.html @@ -1 +1 @@ -标签 - github - 漠北残月的博客

共计 1 篇文章


2023

Hexo 博客部署教程
\ No newline at end of file +标签 - github - 漠北残月的博客

共计 1 篇文章


2023

Hexo 博客部署教程
\ No newline at end of file diff --git a/tags/github/index.html.br b/tags/github/index.html.br index 7a08974c..a7541b8a 100644 Binary files a/tags/github/index.html.br and b/tags/github/index.html.br differ diff --git a/tags/github/index.html.gz b/tags/github/index.html.gz index 676c2fa7..02c2a076 100644 Binary files a/tags/github/index.html.gz and b/tags/github/index.html.gz differ diff --git a/tags/hexo/index.html b/tags/hexo/index.html index 3f61d260..4bac3e3a 100644 --- a/tags/hexo/index.html +++ b/tags/hexo/index.html @@ -1 +1 @@ -标签 - hexo - 漠北残月的博客
\ No newline at end of file +标签 - hexo - 漠北残月的博客
\ No newline at end of file diff --git a/tags/hexo/index.html.br b/tags/hexo/index.html.br index 356ca106..760e9c36 100644 Binary files a/tags/hexo/index.html.br and b/tags/hexo/index.html.br differ diff --git a/tags/hexo/index.html.gz b/tags/hexo/index.html.gz index 7a7338ff..d98a0740 100644 Binary files a/tags/hexo/index.html.gz and b/tags/hexo/index.html.gz differ diff --git a/tags/index.html b/tags/index.html index ec5f5e60..67c87aad 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1 +1 @@ -标签 - 漠北残月的博客
\ No newline at end of file +标签 - 漠北残月的博客
\ No newline at end of file diff --git a/tags/index.html.br b/tags/index.html.br index b7c25feb..a12b1d5f 100644 Binary files a/tags/index.html.br and b/tags/index.html.br differ diff --git a/tags/index.html.gz b/tags/index.html.gz index 2b413c3e..f3a12282 100644 Binary files a/tags/index.html.gz and b/tags/index.html.gz differ diff --git a/tags/open-source/index.html b/tags/open-source/index.html new file mode 100644 index 00000000..86c86db5 --- /dev/null +++ b/tags/open-source/index.html @@ -0,0 +1 @@ +标签 - open-source - 漠北残月的博客
\ No newline at end of file diff --git a/tags/open-source/index.html.br b/tags/open-source/index.html.br new file mode 100644 index 00000000..d11cd6c1 Binary files /dev/null and b/tags/open-source/index.html.br differ diff --git a/tags/open-source/index.html.gz b/tags/open-source/index.html.gz new file mode 100644 index 00000000..a419760c Binary files /dev/null and b/tags/open-source/index.html.gz differ diff --git a/tags/seo/index.html b/tags/seo/index.html new file mode 100644 index 00000000..ccde13b4 --- /dev/null +++ b/tags/seo/index.html @@ -0,0 +1 @@ +标签 - seo - 漠北残月的博客

共计 1 篇文章


2024

博客 SEO 优化
\ No newline at end of file diff --git a/tags/seo/index.html.br b/tags/seo/index.html.br new file mode 100644 index 00000000..da3fbdaf Binary files /dev/null and b/tags/seo/index.html.br differ diff --git a/tags/seo/index.html.gz b/tags/seo/index.html.gz new file mode 100644 index 00000000..a819f36b Binary files /dev/null and b/tags/seo/index.html.gz differ diff --git a/tags/umami/index.html b/tags/umami/index.html index 364a8428..fc0adc26 100644 --- a/tags/umami/index.html +++ b/tags/umami/index.html @@ -1 +1 @@ -标签 - umami - 漠北残月的博客
\ No newline at end of file +标签 - umami - 漠北残月的博客
\ No newline at end of file diff --git a/tags/umami/index.html.br b/tags/umami/index.html.br index e181d7b8..48eb7b15 100644 Binary files a/tags/umami/index.html.br and b/tags/umami/index.html.br differ diff --git a/tags/umami/index.html.gz b/tags/umami/index.html.gz index 10ce22ed..42faf1d5 100644 Binary files a/tags/umami/index.html.gz and b/tags/umami/index.html.gz differ diff --git a/tags/uptime-kuma/index.html b/tags/uptime-kuma/index.html index df954810..49e6c942 100644 --- a/tags/uptime-kuma/index.html +++ b/tags/uptime-kuma/index.html @@ -1 +1 @@ -标签 - uptime-kuma - 漠北残月的博客
\ No newline at end of file +标签 - uptime-kuma - 漠北残月的博客
\ No newline at end of file diff --git a/tags/uptime-kuma/index.html.br b/tags/uptime-kuma/index.html.br index 726c49ac..d201ad7c 100644 Binary files a/tags/uptime-kuma/index.html.br and b/tags/uptime-kuma/index.html.br differ diff --git a/tags/uptime-kuma/index.html.gz b/tags/uptime-kuma/index.html.gz index ef08c04e..fbeb16f6 100644 Binary files a/tags/uptime-kuma/index.html.gz and b/tags/uptime-kuma/index.html.gz differ diff --git "a/tags/\344\274\230\345\214\226/index.html" "b/tags/\344\274\230\345\214\226/index.html" index bb69f23f..98ab350a 100644 --- "a/tags/\344\274\230\345\214\226/index.html" +++ "b/tags/\344\274\230\345\214\226/index.html" @@ -1 +1 @@ -标签 - 优化 - 漠北残月的博客
\ No newline at end of file +标签 - 优化 - 漠北残月的博客
\ No newline at end of file diff --git "a/tags/\344\274\230\345\214\226/index.html.br" "b/tags/\344\274\230\345\214\226/index.html.br" index 0eafc889..2231ff2e 100644 Binary files "a/tags/\344\274\230\345\214\226/index.html.br" and "b/tags/\344\274\230\345\214\226/index.html.br" differ diff --git "a/tags/\344\274\230\345\214\226/index.html.gz" "b/tags/\344\274\230\345\214\226/index.html.gz" index 3ddd01a2..318d3a08 100644 Binary files "a/tags/\344\274\230\345\214\226/index.html.gz" and "b/tags/\344\274\230\345\214\226/index.html.gz" differ diff --git "a/tags/\346\227\245\345\270\270/index.html" "b/tags/\346\227\245\345\270\270/index.html" index cd3bb1f1..3863d89e 100644 --- "a/tags/\346\227\245\345\270\270/index.html" +++ "b/tags/\346\227\245\345\270\270/index.html" @@ -1 +1 @@ -标签 - 日常 - 漠北残月的博客
\ No newline at end of file +标签 - 日常 - 漠北残月的博客
\ No newline at end of file diff --git "a/tags/\346\227\245\345\270\270/index.html.br" "b/tags/\346\227\245\345\270\270/index.html.br" index f2bdb6af..e168b604 100644 Binary files "a/tags/\346\227\245\345\270\270/index.html.br" and "b/tags/\346\227\245\345\270\270/index.html.br" differ diff --git "a/tags/\346\227\245\345\270\270/index.html.gz" "b/tags/\346\227\245\345\270\270/index.html.gz" index 983dd338..fcbdd98f 100644 Binary files "a/tags/\346\227\245\345\270\270/index.html.gz" and "b/tags/\346\227\245\345\270\270/index.html.gz" differ diff --git "a/tags/\346\234\215\345\212\241\345\231\250/index.html" "b/tags/\346\234\215\345\212\241\345\231\250/index.html" index 791203a1..517bdaa6 100644 --- "a/tags/\346\234\215\345\212\241\345\231\250/index.html" +++ "b/tags/\346\234\215\345\212\241\345\231\250/index.html" @@ -1 +1 @@ -标签 - 服务器 - 漠北残月的博客

共计 1 篇文章


2023

1Panel 安装配置教程
\ No newline at end of file +标签 - 服务器 - 漠北残月的博客

共计 1 篇文章


2023

1Panel 安装配置教程
\ No newline at end of file diff --git "a/tags/\346\234\215\345\212\241\345\231\250/index.html.br" "b/tags/\346\234\215\345\212\241\345\231\250/index.html.br" index 151997a4..9a8dc987 100644 Binary files "a/tags/\346\234\215\345\212\241\345\231\250/index.html.br" and "b/tags/\346\234\215\345\212\241\345\231\250/index.html.br" differ diff --git "a/tags/\346\234\215\345\212\241\345\231\250/index.html.gz" "b/tags/\346\234\215\345\212\241\345\231\250/index.html.gz" index bcd88779..25f339f0 100644 Binary files "a/tags/\346\234\215\345\212\241\345\231\250/index.html.gz" and "b/tags/\346\234\215\345\212\241\345\231\250/index.html.gz" differ diff --git "a/tags/\350\277\220\347\273\264/index.html" "b/tags/\350\277\220\347\273\264/index.html" index e1c6c266..89cfb12d 100644 --- "a/tags/\350\277\220\347\273\264/index.html" +++ "b/tags/\350\277\220\347\273\264/index.html" @@ -1 +1 @@ -标签 - 运维 - 漠北残月的博客

共计 1 篇文章


2023

1Panel 安装配置教程
\ No newline at end of file +标签 - 运维 - 漠北残月的博客

共计 1 篇文章


2023

1Panel 安装配置教程
\ No newline at end of file diff --git "a/tags/\350\277\220\347\273\264/index.html.br" "b/tags/\350\277\220\347\273\264/index.html.br" index 0a895f8f..b23f1f4c 100644 Binary files "a/tags/\350\277\220\347\273\264/index.html.br" and "b/tags/\350\277\220\347\273\264/index.html.br" differ diff --git "a/tags/\350\277\220\347\273\264/index.html.gz" "b/tags/\350\277\220\347\273\264/index.html.gz" index b207eed1..90bcc92b 100644 Binary files "a/tags/\350\277\220\347\273\264/index.html.gz" and "b/tags/\350\277\220\347\273\264/index.html.gz" differ diff --git "a/tags/\351\203\250\347\275\262/index.html" "b/tags/\351\203\250\347\275\262/index.html" index 76e91fa0..65c30f8f 100644 --- "a/tags/\351\203\250\347\275\262/index.html" +++ "b/tags/\351\203\250\347\275\262/index.html" @@ -1 +1 @@ -标签 - 部署 - 漠北残月的博客
\ No newline at end of file +标签 - 部署 - 漠北残月的博客
\ No newline at end of file diff --git "a/tags/\351\203\250\347\275\262/index.html.br" "b/tags/\351\203\250\347\275\262/index.html.br" index 70542975..692b1105 100644 Binary files "a/tags/\351\203\250\347\275\262/index.html.br" and "b/tags/\351\203\250\347\275\262/index.html.br" differ diff --git "a/tags/\351\203\250\347\275\262/index.html.gz" "b/tags/\351\203\250\347\275\262/index.html.gz" index 0d44b870..1bfc2843 100644 Binary files "a/tags/\351\203\250\347\275\262/index.html.gz" and "b/tags/\351\203\250\347\275\262/index.html.gz" differ