Lofi - 极简、纯粹、黑白风格的 Hexo 博客主题

好久没写博客了,各位好久不见。这一年真的有好多话想说,期待我今年的午马年度总结吧,把今年一年的事情,都和大家聊一聊。 原本的博客程序,使用的是我毕业论文开发的 DaRM,现在回过头来看,当年这个项目写的跟屎一样,我已经彻底的放弃维护这个项目,转投 Hexo 的阵营了。 好久没写博客,希望带来点变化,花了半天时间写出来这个主题,总体来说还是比较满意的,别的没什么话说,希望2026年,能对我好一些。 一个新的主题新的主题,希望能带来新的开始。 Lofi 极简、纯粹、黑白风格的 Hexo 博客主题。 A minimalist, black & white theme for Hexo. 项目地址:Lofi 介绍 (Introduction) Lofi 是一款专为专注于写作的人设计的 Hexo 主题。它剥离了所有不必要的装饰,只保留最核心的阅读体验。 核心特点: 极简黑白设计:经典的报纸风格,耐看且不干扰阅读。 超快加载:体积小巧,没有复杂的动画和沉重的库。 响应式布局:在手机、平板和电脑上都有完美的阅读体验。 PJAX 支持:页面切换无刷新,体验丝般顺滑。 评论系统:内置 Artalk 评论系统支持(自托管的隐私友好评论系统)。 站内搜索:原生支持本地搜索功能。 安装指南 (Installation) 就像给手机换壁纸一样简单,只需三步即可使用。 第一步:下载主题 进入你的 Hexo 博客目录,打开终端(命令行),运行以下命令: 1 git clone https://github.com/spatiostu/lofi.git themes/lofi 或者,你也可以点击 Lofi 进入仓库,直接点击右上角的 Code -> Download ZIP,下载后解压,把文件夹改名为 lofi,然后放入博客的 themes 目录下。 第二步:启用主题 打开博客根目录下的 _config.yml 文件(不是主题目录下的那个),找到 theme 这一行,修改为: 1 theme: lofi 第三步:安装必要插件 为了让主题的搜索和渲染功能正常工作,你需要安装几个小插件。在博客根目录下运行: 1 npm install hexo-renderer-ejs hexo-generator-searchdb --save 配置指南 (Configuration) 主题的配置文件位于 themes/lofi/_config.yml。你可以根据需要修改它。 1. 菜单设置 (Menu) 设置导航栏的链接。 1 2 3 4 5 menu: 首页: / 归档: /archives 友链: /friends 关于: /about 需在source目录下创建两个页面文档:about/index.md、friends/index.md。每个文档的内容可以自定义,例如: 1 2 3 4 5 6 7 8 9 10 --- title: 友情链接 date: 2024-03-20 12:00:00 type: friends --- <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"> <a href="https://www.FriendDomain.com/" target="_blank" class="friend-card"> <div class="font-bold text-lg mb-2">FriendName</div> <div class="text-xs font-mono opacity-60">FriendDescription</div> </a> 2. 个人信息 (Profile) 设置你的头像和社交媒体链接。 1 2 3 4 5 avatar: /images/avatar.jpg # 头像路径 favicon: /images/favicon.png # 网站图标 description: "这里写一句你的座右铭" social: github: https://github.com/yourname 3. 评论系统 (Comments) 本主题内置了 Artalk 评论系统。如果你部署了 Artalk Server,可以在这里配置: 1 2 3 4 artalk: enable: true server: 'https://your-artalk-server.com' site: '你的站点名称' 如果不需要评论功能,将 enable 改为 false 即可。 4. 底部信息 (Footer) 自定义页面底部的版权信息。 1 2 footer: copyright: "© 2025 你的名字" 5. CDN 配置 为了加速主题静态资源加载,你可以配置 CDN。 1 2 3 cdn: enable: true url: https://res.your-domain.com/ 如不需要 CDN 加速,将 enable 改为 false 即可。 如果有什么功能需求,也可以在评论区留言一下,如果是不错的提议,我会给主题加上!

2025/12/27
articleCard.readMore

甲辰年度总结

时光荏苒,岁月穿梭,又是一年过去了,在这里祝各位新年快乐。 今年发生很多事情,写这篇文章的时候还有半个小时就要到乙巳年了,原本躺在沙发上拿春晚当背景音乐,刷着抖音,但是突然意识到今年的年度总结还没写……. 等这篇文章发布的时候,估计已经到乙巳年了,再一次的祝大家新年快乐、阖家幸福、身体健康、一夜暴富!!!!!!!! 生活 今年的生活,一直过着枯燥的学习生活,但是和去年的不同的是获得了一些小惊喜、拿到了喜欢的域名、为自己的职业选择好了方向,而且收益还不错。 还要说一句,感觉自己的拖延症也越来越严重了,而且体重直线飙升,要有所改变了。 域名 这应该是我今年最开心的一件事情了。 看我文章比较早的朋友应该知道,我的博客更换过很多域名,最开始用的是 roy.pub 后面又换过很多域名,比如我之前持有的 roywang.cn 这个域名一直续费到现在,后面拿到了 roy.wang 这个 Hack。 原本以为到这里就可以心满意足了,但是从去年开始,心里就痒痒的,既然 Hack、cn都有了,就没有什么不能拿下com 呢,所以从去年就开始的接触 com。 通过 web.archive.org 可以看到,roywang.com 这个域名之前是被一家专业的域名销售公司所持有的,挂价 $2288。自从去年尝试接触询价过一次,但是回答我的价格是 $500 ,但是觉得这个价格觉得很贵,所以就没有回复,就这样沉寂了下去。 中间一度这个域名快到了赎回期,结果又续费了。这让我很难受,紧接着这 roywang.net 也过期了,之前这个域名是一名设计师所持有的,不知道为什么,不再续费了。但是后面的拍卖的价格也到了接近 $100 ,所以也没拿。 快要考研的日子了,不知道为什么,或许是几个朋友的教唆,一狠狠心拿下了 roywang.com,但是一毛钱都没砍下来,只能含泪花了 $500 拿下了这个域名,我想这样应该就没有什么域名能让我心动了。 现在这个域名被我备案,拿来放个人主页,还有一些静态资源的加速,写这篇文章的时候才发现,在完成服务迁移之后,博客的图片竟然没有替换链接…..可能是博客流量太低了,竟然一条提醒都没收到,哭了/(ㄒoㄒ)/~~ 最后我要说一句,我恨王源!!!!!!!!!!!! 职业 在去年的11月,小金库逐渐见底,所以就去闲鱼挂了个链接,看看能不能赚点生活费。 让我惊喜的是,竟然接到了一些还不错的单子,收入还不错,所以让我坚定了信心,以后就做独立开发了, 初期之后解决一些服务器上的小问题,或者帮助别人部署些东西,做些简单的二次开发。逐渐接近了考试的日期,闲鱼那边就没有再去管过了。 但在考完最后一场,回家的路上,想着休息几天,之后再接着做一下,接点单子搞点钱,过年嘛。但当我登录闲鱼之后突然发现自己的链接竟然被举报下架了……….. 虽说如此,突然意识到我还挺喜欢干这个的,时间自由,想干就干,收入还可以,能到预期的水平,要不然以我的学历,也就去个外包,一个月五六千, 每天朝九晚不定的。还要接受老板的PUA和画饼,综合看下来,还不如自己做独立开发…….. 如果上不了岸,就做这个吧,虽然收入不算高,好在时间自由,完全是为自己做的(有需要的老板也可以联系我)。 博客 去年一共发布了6篇文章,但刨去年度总结,只有五篇文章,没有做到一月一篇,很难受…….这也是我拖延症的体现……. 流量 刚才才去看了自己博客在去年的流量,只能说用 惨不忍睹四个字去形容: 这个数据已经不忍心看了…….就不分析了。 流量最高的是 《CentOS7 升级 Glibc 2.17 到2.28》,紧跟其后的是《CloudFlare 解决 CORS 跨域问题》。 去年寄大希望的 AuthenTik 的相关文章一个进前10的都没有,反而开源的一个域名监控程序,浏览量进入了前五。 关于来源网站,不出去年的所料,现在百度的来源已经掉光了,去年还有8.01K,今年只剩下了1.21K,这或许可能是博客流量表现不佳的原因之一,不一定是我的问题~ 但是今年谷歌和bing的流量有些许增加。dalao论坛,还有v2ex成功进入前十。 今年 去年一年,无论博客的更新,还有学习、生活都是平平无奇的一年。 唯一让我开心的是就是自己人生的方向,已经找到,而且拿到了心心念念的域名。 去年的定下的目标完成的就只剩下一个学习了,但是还有一个月才能检阅一下学习完成的怎么样,所以姑且算完成了一个,但是关于月更博客嘛还有减肥嘛…..完全可以当作今年的目标! 虽然心有遗憾,但今年还是有些小惊喜,按照惯例还是定个乙巳年的目标,到明年的除夕夜回顾起来看看完成了多少。 乙巳年就四大个目标: 月更博客:月更一篇我个人满意,尽量高质量的文章。 学习:接着努力学习,不管有没有上岸、争取今年能够看完40本书。并且分享下读书的感悟。 减肥:现在的体重已经200了,不能再胖下去了,现在已经明显感觉到了某些方面力不从心,而且半夜睡觉呼吸都会被自己憋醒。目标回到150吧,对于我来说应该不算太高的难度。 努力挣钱:如果不能上岸的话,就努力搞钱吧,这是今年最重要的一个目标,给来点保障。 这次狠狠心,前三个里面,如果有一个没完成,到下一个除夕夜,就给朋友们发1000的红包,如果三个没完成就3000块。 我打算开始月更一篇生活文章,看看这个月干了什么、有什么惊喜、减肥的进度如何、看了什么书,写写体验,当作日记来写,这已经不能叫日记了,应该叫月记。 如果有希望共同进步的朋友也可以联系我一下,互相学习,互相进步! 那就这样,让我们午马年再见。

2025/1/29
articleCard.readMore

使用 AuthenTik 的一些问题,以及服务不验证身份路径配置

原本打算将这个文章分成三篇来水的,但是发现如果分成三篇文章,篇幅有些太短,还是一篇出来吧。这篇文章主要介绍三个方面: 使用 Nginx 正向身份验证,出现 500 错误 正向身份验证 不验证路径性能差 部分服务不验证路径配置 其中两个问题,一个参考配置。说实话折腾了很久,搜烂了百度还是谷歌都没找到具体的解决方案。但后来还是通过 GPT 通过遍历法,才解决了其中的两个问题。 使用 Nginx 正向身份验证,出现 500 错误 如果你看了我之前的 《AuthenTik - 开源的身份验证服务》的话,在文章的最后预告了这篇文章。 当你无论是使用官方文档里的配置,还是配置应用程序完成之后 AuthenTik 给出你的配置,如果将验证的请求地址设置为公网地址,对不起,它就会发生 500 Error,反而配置为内网的 IP 就不会出现这个问题。 在此之前,你需要检查一下是否为该应用添加到前哨之中,并且尝试将 Nginx 配置文件中的外部的 AuthenTik 服务地址更换为 内网IP,如果使用内网IP并未出现这个问题,那么恭喜你,这个方法很可能就能解决你的问题。 检查日志的时候并不难发现,当你访问需要前置验证的地址时,Nginx 并没有没有访问正确的 AuthenTik 的服务地址: 1 https://123.123.123.123/outpost.goauthentik.io/auth/nginx 因为配置了 HTTPS 所有服务都走的是 443 端口(反向代理),而一台服务器不可能仅仅只配置一个服务,最最重要的是并没有告诉服务器,你需要访问的是哪个服务,所以就造成了这种错误。 解决方法 解决方法也非常简单,在监听/outpost.goauthentik.io路径中,将Host替换为 X-Forwarded-Host 头即可。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 location /outpost.goauthentik.io { # When using the embedded outpost, use: proxy_pass https://sso.home.roywang.cn/outpost.goauthentik.io; # For manual outpost deployments: # proxy_pass http://outpost.company:9000; # Note: ensure the Host header matches your external authentik URL: # proxy_set_header Host $host; 原本文档自带的。 proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Original-URL $scheme://$http_host$request_uri; add_header Set-Cookie $auth_cookie; auth_request_set $auth_cookie $upstream_http_set_cookie; proxy_pass_request_body off; proxy_set_header Content-Length ""; } 官方的文档中默认 AuthenTik 独占了一个端口,所以并没有考虑 X-Forwarded-Host 头,导致 Nginx 访问直接通过 IP 进行访问了 AuthenTik 服务,而我们配置了反向代理,这肯定是访问不到的。 特别注意: 而如果直接添加X-Forwarded-Host头,与proxy_set_header Host $host共存也会导致这个错误。 添加后即解决了这个问题。 正向身份验证 不验证路径性能差 由于我的一些文档都是通过WebDAV协议进行同步的。但是部署完正向身份验证后,有些时候同部文件的时候会出现超时错误,看了下 GoodSync,同步时间翻了 10 倍。经过实验确定是 AuthenTik 的性能问题。 其实看一下对比,390个文件、463个文件夹,这是使用了 AuthenTik 的不验证路径配置的性能: 1 2 172238 变更:0, 冲突:0, 复制时间:0, 复制状态:0, 错误: 0, All: 882 172238 -- 分析已结束。历时 00:02:16, 速度: 53 文件/秒 这是不使用 AuthenTik 的不验证路径配置的性能: 1 2 172338 变更:0, 冲突:0, 复制时间:0, 复制状态:0, 错误: 0, All: 882 172338 -- 分析已结束。历时 00:00:14, 速度: 61 文件/秒 其实解决方法也很简单,就是通过 Nginx 接管这部分 URI,不去走 AuthenTik。 具体的配置会在下面给出,但是需要说明的是,有些服务的 URI 是不固定的,只能通过 AuthenTik 的正则去匹配(比如 Gitea) 部分服务不验证路径(放行 URI )配置 这一部分介绍一些服务的 API 路径的配置,毕竟如果 API 还需要验证,很多服务就失去了它的意义。 有些服务有些特殊,比如 Gitea。就像前面所说,在使用 git 命令时,中间有一段 URI 是仓库名,而 Nginx 是无法匹配相关的 URI 的,只能使用 AuthenTik 的正则去匹配,虽然性能有些差,但是勉强能用,体感不会像 Alist 的 WebDAV 的差距那么巨大。 AuthenTik 不验证路径正则配置 Gitea 开始就是给出 Gitea 服务的正则,这是我使用的服务中唯一使用 AuthenTik 正则去配置不验证路径的。 这套正则,在使用 git 命令时,是完全没问题的,但其他方面没有测试。 1 2 3 4 ^/api/.*$ ^/[^/]+/[^/]+\.git/info/refs$ ^/[^/]+/[^/]+\.git/git-receive-pack$ ^/[^/]+/[^/]+\.git/git-upload-pack$ Nginx 不验证路径配置 主要还是监听相关路径,配置 auth_request off;取消对于该路径的验证,然后去反代相关目录。 Alist WebDAV 1 2 3 4 5 location /dav/ { auth_request off; proxy_pass http://127.0.0.1:12345/dav/; proxy_set_header Host $host; } Vaultwarden(Bitwarden) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 location /api/ { auth_request off; proxy_pass https://127.0.0.1:12345/api/; proxy_set_header Host $host; } location /icons/ { auth_request off; proxy_pass https://127.0.0.1:12345/icons/; proxy_set_header Host $host; } location /identity/connect/token { auth_request off; proxy_pass https://127.0.0.1:12345/identity/connect/token; proxy_set_header Host $host; } location /identity/accounts/prelogin { auth_request off; proxy_pass https://127.0.0.1:12345/identity/accounts/prelogin; proxy_set_header Host $host; } Navidrome 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 location /rest/ { auth_request off; proxy_pass https://127.0.0.1:12345/rest/; proxy_set_header Host $host; } location /api/ { auth_request off; proxy_pass https://127.0.0.1:12345/api/; proxy_set_header Host $host; } location /auth/ { auth_request off; proxy_pass https://127.0.0.1:12345/auth/; proxy_set_header Host $host; } Memos 1 2 3 4 5 location /api/v1/ { auth_request off; proxy_pass https://127.0.0.1:12345/api/v1/; proxy_set_header Host $host; } WireGuard DoH 使用X-Forwarded-For头替换掉Host可以保证 Docker 部署的 WireGuard DoH 正确的获取客户IP。 1 2 3 4 5 location /private-doh-service/code-01 { auth_request off; proxy_pass https://127.0.0.1:12345/dns-query/code-01; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } Artalk 使用X-Forwarded-For头替换掉Host可以保证 Docker 部署的 Artalk 正确的获取客户IP。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 location /api/ { auth_request off; proxy_pass http://127.0.0.1:12345/api/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /sidebar/ { auth_request off; proxy_pass http://127.0.0.1:12345/sidebar/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static/images { auth_request off; proxy_pass http://127.0.0.1:12345/static/images; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } Umami 使用X-Forwarded-For头替换掉Host可以保证 Docker 部署的 Umami 正确的获取客户IP。 1 2 3 4 5 location /api { auth_request off; proxy_pass http://127.0.0.1:12345/api; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 后语 这篇文章规划了一个多月了,但是一直没时间写,终于抽空写了出来。 关于一些服务的不验证 URI 配置,可能在使用中在某些方面出现一些问题,如果有问题可以在评论区留言。或者有些别的服务,我这里没有列出的,也可以留言,我会尽力回答。

2024/10/11
articleCard.readMore

Puff - 开源的域名监控工具

昨天早上在群里吹水,关注的一个域名橘子已经回复会删除了,但多久删除没有底,想问问群里的大佬多久会删除,但是问了一圈都不知道,所以萌生了写一个域名监控的想法。 目前这个服务呢,仅支持监控域名掉落,不能负责抢注,但抢注更多的不是技术难题,而是别的方面。后续打算增加一个域名动态检测的功能,如果域名过期了、进入赎回期、待删除之类的,都可以提醒一下(已支持)。 如果大佬们有更好的建议,可以给我留言一下。 2025-12-27更新,项目已经完成了重构,稳定性UI,交互体验大幅提升,欢迎体验~ 现文章已经失效,如有需要可以查看新版文档 Puff Docs 2024-10-1更新,增加了几个新功能: 增加域名进入赎回期、待删除之类的通知。 登录会话两小时超时。 增加个Logo 修复了几个 BUG Puff 项目地址:Puff 开源、快速、便捷、基于Go的域名监控程序。 特性 性能优秀 基于 Go 语言开发,快速且性能优秀! 易于使用 部署简单,支持不同平台的多种部署方式。 提供了一个用户友好的界面和直观的操作流程,使得即使是初学者也能轻松上手。 UI 现代化 不知道怎么吹了………….. 部署 Puff 目前支持三种部署方式,编译部署、手动部署、Docker 部署。 编译部署 环境要求 Go 版本 >=1.22.0 克隆仓库 1 git clone https://github.com/bitaur/puff.git 构建程序 1 go build -o Puff.exe main.go 运行 1 ./Puff 手动部署 下载 Puff 打开 Puff Release 下载对应的平台以及系统的文件。 如果最新的包没有您对应的二进制文件,可以提交 issues ,或可以选择自己编译安装。 其中: armv6 对应 arm 架构32位版本,arm64 对应 arm 架构64位版本。 x86 对应 x86 平台32位版本,x86_64 对应 x86 平台64位版本。 克隆模板文件以及静态资源文件。 手动运行 Linux / MacOS 1 2 3 4 5 6 7 # 解压下载后的文件,请求改为您下载的文件名 tar -zxvf filename.tar.gz # 授予执行权限 chmod +x Puff ./Puff Windows 双击运行即可。 持久化运行 Linux 使用编辑器编辑 /usr/lib/systemd/system/puff.service 添加如下内容: 1 2 3 4 5 6 7 8 9 10 11 12 [Unit] Description=puff After=network.target [Service] Type=simple WorkingDirectory=puff_path ExecStart=puff_path/Puff Restart=on-failure [Install] WantedBy=multi-user.target 保存后,使用 systemctl deamon-reload 重载配置。具体使用命令如下: 启动: systemctl start puff 关闭: systemctl stop puff 配置开机自启: systemctl enable puff 取消开机自启: systemctl disable puff 状态: systemctl status puff 重启: systemctl restart puff 更新版本 如果有新版本更新,下载新版本,将旧版本的文件删除即可。 Docker 部署 首先请确保您正确的安装并配置了 Docker 以及 Docker Compose Docker CLI 1 docker run -d --restart=unless-stopped -v /data/puff:/app/data -p 8080:8080 --name="Puff" bitaur/puff:latest Docker Compose 在空目录中创建 docker-compose.yaml 文件,将下列内容保存。 1 2 3 4 5 6 7 8 9 services: Puff: image: bitaur/puff:latest container_name: Puff volumes: - /data/puff:/app/data restart: unless-stopped ports: - 8080:8080 保存后,使用 docker compose up -d 创建并启动容器。 Docker 容器更新 CLI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #查看容器ID docker ps -a #停止容器 docker stop ID #删除容器 docker rm ID #获取新镜像 docker pull bitaur/puff:latest # 输入安装命令 docker run -d --restart=unless-stopped -v /data/puff:/app/data -p 8080:8080 --name="Puff" bitaur/puff:latest Docker Compose 1 2 3 4 5 #获取新镜像 docker pull bitaur/puff:latest #创建并启动容器 docker compose up -d 访问 此时打开 localhost:8080 即可打开站点。默认账号密码均为 admin。 后语 这东西写的很快,其实也没什么难度,但是就是没有看到啥开源项目,具体的使用就不多介绍了,基本上就是一看就会。 如果有什么功能需求,也可以在评论区留言一下,如果是不错的提议,我会考虑更新给软件加上!

2024/9/27
articleCard.readMore

AuthenTik - 开源的身份验证服务

一直以来都想部署一个前置验证的服务,作为前置验证的网关(类似于Nginx Auth),用来保护一些开放于公网上但自用的服务。但 Nginx Auth 太过简单(丑),虽想着找到一个能够满足我的这些功能的一个身份验证服务,经过 @Shell 的安利,选择了 AuthenTik。 选择 AuthenTik 最主要的原因是因为其 UI 讨喜,另一个便是使用的人相对较多而且也在积极维护。但中文互联网上有关于 AuthenTik 的内容不多。 每次访问同一域名下的某个服务时,都会先跳转到 AuthenTik 的认证页面,认证成功后,才会跳转到服务本来的页面。在某一时间内访问同一域名下的其他服务时,则不需要认证,不仅加强了安全性,还保护了隐私。 AuthenTik 不仅可以作为 IdP 进行使用,更多的人是将其作为 SSO 进行使用,一个站点登录,即可于同域名下的其他自建服务进行免登录操作。 AuthenTik 项目地址:AuthenTik AuthenTik 是一个 IdP(身份提供商)和 SSO(单点登录),其每段代码、每个功能都以安全性为首要构建,并强调灵活性和多功能性。 借助 AuthenTik,网站管理员、应用程序开发人员和安全工程师几乎可以在任何类型的环境中获得可靠且安全的身份验证解决方案。它为用户和应用程序提供了强大的恢复操作,包括用户配置文件和密码管理。您可以快速编辑、停用甚至模拟用户配置文件,并为新用户设置新密码或重置现有密码。 您可以在现有环境中使用 AuthenTik 来添加对新协议的支持,因此将 AuthenTik 引入您当前的技术堆栈不会带来重新架构的挑战。我们支持所有主要提供商,例如 OAuth2、SAML、LDAP 和 SCIM,因此您可以为每个应用程序选择所需的协议。 特性 管理界面:用于创建和管理用户和组、令牌和凭据、应用程序集成、事件以及定义标准和可自定义登录和身份验证流程的流程的可视化工具。易于阅读的可视化仪表板显示系统状态、最近的登录和身份验证事件以及应用程序使用情况。 用户界面:AuthenTik 中的控制台视图显示您已实施 AuthenTik 的所有应用程序和集成。单击要访问的应用程序以将其打开,或向下钻取以在管理界面中编辑其配置。 流程:流程是登录和身份验证过程的各个阶段发生的步骤。阶段代表登录过程中的单个验证或逻辑步骤。AuthenTik 允许自定义和精确定义这些流程。 配置要求 2个 CPU 核心 2 GB RAM 环境需求 Docker Docker Compose(建议使用 Compose v3) 部署 AuthenTik 此处推荐,且仅演示使用 Docker 进行部署。 配置 ENV 文件 全新安装 Authentik 首先需要生成 .env 文件,并向文件中写入生成的密钥以及密码。 1 2 echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env 建议开启电子邮件通知,如果系统有安全性以及功能性的更新,可以及时收到更新通知的邮件,将下列配置写入 .env文件。 如果长时间未能接收到邮箱,请查看开启的 TLS 或 SSL 加密对应的端口号是否填写正确!且 TLS 与 SSL 不可同时开启。 TLS:587 SSL:465 但是经过我实测发现,QQ 邮箱通过 SSL 进行加密会导致发信失败,使用 TLS 则一切正常,但据我推测,这个问题很可能是 AuthenTik 的 bug。 1 2 3 4 5 6 7 8 9 10 11 12 13 # SMTP 主机地址及端口号 AUTHENTIK_EMAIL__HOST=localhost AUTHENTIK_EMAIL__PORT=25 # 邮箱服务的账号以及密码 AUTHENTIK_EMAIL__USERNAME=roywang AUTHENTIK_EMAIL__PASSWORD=roywang # 开启 TLS,与 SSL 不可同时开启。 AUTHENTIK_EMAIL__USE_TLS=false # 开启 SSL,与 TLS 不可同时开启。 AUTHENTIK_EMAIL__USE_SSL=false AUTHENTIK_EMAIL__TIMEOUT=10 # 邮箱地址 AUTHENTIK_EMAIL__FROM=authentik@localhost 可选的其他配置 1 2 3 4 5 # 配置服务所使用的端口 COMPOSE_PORT_HTTP=80 COMPOSE_PORT_HTTPS=443 # 启用错误报告 AUTHENTIK_ERROR_REPORTING__ENABLED=true Docker 部署 将以下内容保存为docker-compose.yml文件,将其与上步中.env文件放于同一目录。 请注意,其中需要修改的各处。 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 services: postgresql: image: docker.io/library/postgres:16-alpine container_name: Authentik-Postgresql restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"] start_period: 20s interval: 30s retries: 5 timeout: 5s volumes: //PgSQL数据存放目录,此处需要修改。 - /your-authentik-path/postgresql:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: ${PG_PASS:?database password required} POSTGRES_USER: ${PG_USER:-authentik} POSTGRES_DB: ${PG_DB:-authentik} env_file: - .env redis: image: docker.io/library/redis:alpine container_name: Authentik-Redis command: --save 60 1 --loglevel warning restart: unless-stopped healthcheck: test: ["CMD-SHELL", "redis-cli ping | grep PONG"] start_period: 20s interval: 30s retries: 5 timeout: 3s volumes: //Redis缓存存放目录,此处需要修改。 - /your-authentik-path/redis:/data server: image: ${AUTHENTIK_IMAGE:-docker.io/beryju/authentik}:${AUTHENTIK_TAG:-latest} restart: unless-stopped container_name: Authentik-Server command: server environment: AUTHENTIK_REDIS__HOST: redis AUTHENTIK_POSTGRESQL__HOST: postgresql AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik} AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik} AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS} volumes: //AuthenTik数据存放目录,此处需要修改。 - /your-authentik-path/media:/media - /your-authentik-path/custom-templates:/templates env_file: - .env ports: - "9443:9443" depends_on: - postgresql - redis worker: image: ${AUTHENTIK_IMAGE:-docker.io/beryju/authentik}:${AUTHENTIK_TAG:-latest} restart: unless-stopped container_name: Authentik-Worker command: worker environment: AUTHENTIK_REDIS__HOST: redis AUTHENTIK_POSTGRESQL__HOST: postgresql AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik} AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik} AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS} user: root volumes: - /var/run/docker.sock:/var/run/docker.sock //AuthenTik 数据存放目录,此处需要修改。 - /your-authentik-path/media:/media - /your-authentik-path/certs:/certs - /your-authentik-path/custom-templates:/templates env_file: - .env depends_on: - postgresql - redis 此时运行 docker compose up -d启动容器,官方默认的docker-compose.yml 的文件中,Server以及Worker均使用的是 ghcr,国内服务器根本拉不到镜像。 待容器均已创建启动完毕,初始化设置时需访问: 1 https://your-ip:9443/if/flow/initial-setup 默认用户名为akadmin。 使用 在此主要是介绍一下如何给服务添加验证。 OIDC 如果需要通过 OIDC 接入 SSO,可以参考 Shell 的博客: https://blog.ning.moe/tags/Authentik/ 正向代理 首先需要进入管理员页面。 创建提供程序 进入管理页面后,左侧菜单栏依次点击应用程序-提供程序,点击创建,选择Proxy Provider。 然后点击下一步,在此处分别输入程序名称,选择身份验证流程、授权流程(默认选择第一个即可),然后选择Forward Auth(单应用) 在下方输入外部主机,也就是服务的域名(需要带 http or https 协议头)以及设置令牌有效期。 高级设置 证书选择,可做作用域全选。 不验证身份的路径,有些服务还会向外提供 API,这个验证路径就是为该部分服务准备的。使用的 Go 语言正则。但是这个不建议使用,有较为严重的性能问题。 具体解决方案可以期待后续文章。 创建应用程序 位于左侧菜单栏应用程序-应用程序,点击创建。 输入名称以及Slug,选择刚刚创建的提供程序。策略引擎模式 选择 all 添加前哨 位于左侧菜单栏应用程序-前哨,右侧的操作选择编辑,选择已有的应用程序,将其添加至右侧,点击更新。 Nginx 配置文件 因为是正向代理,所以需要修改一下 Nginx 的配置文件,此配置通用。 在配置文件最上部添加: 1 2 3 4 5 # Upgrade WebSocket if requested, otherwise use keepalive map $http_upgrade $connection_upgrade_keepalive { default upgrade; '' ''; } 在监听的根目录下location /{}中添加配置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 proxy_pass $forward_scheme://$server:$port; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade_keepalive; auth_request /outpost.goauthentik.io/auth/nginx; error_page 401 = @goauthentik_proxy_signin; auth_request_set $auth_cookie $upstream_http_set_cookie; add_header Set-Cookie $auth_cookie; auth_request_set $authentik_username $upstream_http_x_authentik_username; auth_request_set $authentik_groups $upstream_http_x_authentik_groups; auth_request_set $authentik_email $upstream_http_x_authentik_email; auth_request_set $authentik_name $upstream_http_x_authentik_name; auth_request_set $authentik_uid $upstream_http_x_authentik_uid; proxy_set_header X-authentik-username $authentik_username; proxy_set_header X-authentik-groups $authentik_groups; proxy_set_header X-authentik-email $authentik_email; proxy_set_header X-authentik-name $authentik_name; proxy_set_header X-authentik-uid $authentik_uid; 在配置文件底部添加,请注意的是,需要修改服务地址: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 location /outpost.goauthentik.io { # 修改 AuthenTik 地址 proxy_pass http://authentik.company:9000/outpost.goauthentik.io; proxy_set_header Host $host; proxy_set_header X-Original-URL $scheme://$http_host$request_uri; add_header Set-Cookie $auth_cookie; auth_request_set $auth_cookie $upstream_http_set_cookie; proxy_pass_request_body off; proxy_set_header Content-Length ""; } location @goauthentik_proxy_signin { internal; add_header Set-Cookie $auth_cookie; return 302 /outpost.goauthentik.io/start?rd=$request_uri; } 此时访问需要验证的服务,跳转到了 AuthenTik 页面。 后语 AuthenTik 在正常使用的时候,坑还是比较多的,整个过程折腾了接近半个月,才完全达到效果。 在部署这个服务时,陆续碰到了以下问题: 访问发生 500 错误 给 API 放行的路径性能太差 放行正则非常难写 详细要说一下,关于配置完成后访问服务发生 500 错误的问题。首先检查一下是否为该应用添加到前哨之中,尝试将 Nginx 配置文件中的外部的 AuthenTik 服务域名更换为内网IP。 如果使用内网IP一切正常,使用公网域名访问不正常,恭喜你咱们碰到了一样的问题。后续我会水一篇新的文章以解决这个问题。 另外我部署了一个 AList用于通过 WebDAV 协议去同步文件,但经过实测,性能差距能有10倍…..这让我放弃了使用 AuthenTik 中放行路径的服务。 这个也会后续水一篇新的文章以解决这个问题。 这里只是写了个大概的使用情况,其他的更多设置,推荐一下 ECWU 大佬关于 AuthenTik 的系列教程,对我有很大的帮助 参考 AuthenTik 官方文档 ECWU AuthenTik 系列教程

2024/9/24
articleCard.readMore

DaRM - 基于 Go 的静态博客生成器

这个项目是我的毕业论文,经常看我博客的朋友会发现,我的站点已经脱离了 WordPress,换成了 DaRM。上个月缝缝补补,将它开源了出来,并且将自己的博客系统切换到了这个程序,目前体验良好。虽说功能是很简陋,但主要还是贴合我的需求,有兴趣的朋友可以玩玩。 DaRM 项目地址:DaRM 基于 Go 语言轻量、快速、易使用的开源博客系统。 文档地址:DaRM Docs 特性 专注于文字 DaRM 系统专注于提供文本内容的创建和管理,尤其适合博客文章和文档的撰写与发布。 原生支持 Markdown 格式,允许用户以简洁的语法快速撰写格式化文本。 易于使用 部署简单,支持不同平台的多种部署方式。 提供了一个用户友好的界面和直观的操作流程,使得即使是初学者也能轻松上手。 性能优秀 基于 Go 语言开发,快速且性能优秀! 静态文件同步 支持将静态文件同步至 GitHub,或通过 FTP 协议同步至服务器。 部署 DaRM 目前支持三种部署方式,编译部署、手动部署、Docker 部署。 编译部署 环境要求 git Go 版本 >=1.22.0 克隆仓库 1 git clone https://github.com/bitaur/darm.git 构建程序 1 go build ./ 手动部署 下载 DaRM 打开 DaRM Release 下载对应的平台以及系统的文件。 如果最新的包没有您对应的二进制文件,可以提交 issues ,或可以选择自己编译安装,详见:编译安装。 其中: armv6 对应 arm 架构32位版本,arm64 对应 arm 架构64位版本。 x86 对应 x86 平台32位版本,x86_64 对应 x86 平台64位版本。 手动运行 Linux / MacOS 1 2 3 4 5 6 7 # 解压下载后的文件,请求改为您下载的文件名 tar -zxvf filename.tar.gz # 授予执行权限 chmod +x DaRM ./DaRM Windows 双击运行即可。 持久化运行 Linux 使用编辑器编辑 /usr/lib/systemd/system/darm.service 添加如下内容: 1 2 3 4 5 6 7 8 9 10 11 12 [Unit] Description=darm After=network.target [Service] Type=simple WorkingDirectory=darm_path ExecStart=darm_path/darm Restart=on-failure [Install] WantedBy=multi-user.target 保存后,使用 systemctl deamon-reload 重载配置。具体使用命令如下: 启动: systemctl start darm 关闭: systemctl stop darm 配置开机自启: systemctl enable darm 取消开机自启: systemctl disable darm 状态: systemctl status darm 重启: systemctl restart darm 更新版本 如果有新版本更新,下载新版本,将旧版本的文件删除即可。 Docker 部署 首先请确保您正确的安装并配置了 Docker 以及 Docker Compose Docker CLI 1 docker run -d --restart=unless-stopped -v /data/darm:/data -p 9740:9740 --name="DaRM" bitaur/darm:latest Docker Compose 在空目录中创建 docker-compose.yaml 文件,将下列内容保存。 1 2 3 4 5 6 7 8 9 services: DaRM: image: bitaur/darm:latest container_name: DaRM volumes: - /data/darm:/data restart: unless-stopped ports: - 9740:9740 保存后,使用 docker compose up -d 创建并启动容器。 Docker 容器更新 CLI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #查看容器ID docker ps -a #停止容器 docker stop ID #删除容器 docker rm ID #获取新镜像 docker pull bitaur/darm:latest # 输入安装命令 docker run -d --restart=unless-stopped -v /data/darm:/data -p 9740:9740 --name="DaRM" bitaur/darm:latest Docker Compose 1 2 3 4 5 #获取新镜像 docker pull bitaur/darm:latest #创建并启动容器 docker compose up -d 访问 此时打开 localhost:9740 即可打开站点。默认账号密码均为 admin。 后语 最后其实也想说一下,个人水平很差,只是勉强能跑,这个项目的主要需求还是能够让我顺利毕业。很多Bug 还是来不及去修。如果后期有啥问题可以直接留言。

2024/9/12
articleCard.readMore

Docker 部署 Umami,切换数据库至 PgSQL

最近看到 Umami 提示更新,想了想自己好像也很久没更新了, 这一更新不要紧,带来了两个问题: 1、服务器所带来的构建问题 我的 Umami 服务部署于阿里云的轻量服务器。阿里云的轻量,官方说是无性能限制,但在我构建 Umami 时,服务器整体“死机”了两次。而且每次编译的时间较长,所以需要使用 Docker 部署 Umami。 2、官方数据库版本升级带来的问题 由于 Umami 官方自 V2.3.0 版本,开始逐步弃用 MySQL5.7,也由此带来了我之前提到的那个问题:《Umami 构建 2.3.0 版本时 “✗ Command failed: prisma migrate deploy Error: P3009”》。但 MySQL 8.0最少需要4G内存,我的服务器只有 2C2G,所以需要将数据从 MySQL 转移 PgSQL,起初自己折腾到了半夜也没解决数据库迁移的问题,但在 Shell 的帮助下,完成了此次数据迁移,再次表示感谢!! Docker 部署 Umami 如果你需要抛弃数据重新使用或没使用过 Umami ,可以查看此节。但如果你像我一样需要将数据从 MySQL 转移至 PgSQL,可以查看下一节。 将下列配置保存为 docker-compose.yaml 文件。 请注意删除注释以及修改相关配置。 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 version: '3' services: umami: image: ghcr.io/umami-software/umami:postgresql-latest //如果你在使用国内服务器部署 Umami,可以使用南京大的ghcr镜像:ghcr.nju.edu.cn //image: ghcr.nju.edu.cn/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:umami@db:5432/umami //Umami数据库设置,可修改,但也请修改 PgSQL 镜像中的配置信息 DATABASE_TYPE: postgresql APP_SECRET: replace-me-with-a-random-string depends_on: db: condition: service_healthy restart: always healthcheck: test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] interval: 5s timeout: 5s retries: 5 db: image: postgres:15-alpine environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: umami // PgSQL 数据信息 volumes: - /www/wwwroot/umami:/var/lib/postgresql/data //PgSQL数据库镜像数据存储的路径,请酌情修改 restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5 用 cd 命令打开 docker-compose.yaml 的目录,运行下列命令: 1 docker-compose up -d 构建容器完成后,打开 http://ip:3000 即可进行使用。 ​默认账号:admin ​默认密码:umami 使用 nginx 进行反代操作此处不再赘述。 数据迁移至 PgSQL 需要注意几点: ​1、在数据迁移前,需要使用与自编译版本相同的 Umami Docker 镜像,当数据迁移完成后,运行访问服务测试没有问题,再进行升级操作。此处使用的是 v2.9.0。 ​2、需要开放 服务器的 3306 以及 5432 端口。 ​3、数据迁移后可能会出现一些 BUG,不过我暂时没有碰到(免责声明)。 部署与自编译版本相同的 Umami 将下列配置保存为 docker-compose.yaml 文件,数据库信息的修改请看上一节文件中的注释。 请注意删除注释以及修改相关配置。 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 version: '3' services: umami: image: ghcr.io/umami-software/umami:postgresql-v2.9.0 //如果你在使用国内服务器部署 Umami,可以使用南京大的ghcr镜像:ghcr.nju.edu.cn //修改为对应的 Umami 版本 //image: ghcr.nju.edu.cn/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:umami@db:5432/umami DATABASE_TYPE: postgresql APP_SECRET: replace-me-with-a-random-string depends_on: db: condition: service_healthy restart: always healthcheck: test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] interval: 5s timeout: 5s retries: 5 db: image: postgres:15-alpine ports: - "5432:5432" environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: umami volumes: - /www/wwwroot/umami/PgSQL:/var/lib/postgresql/data //PgSQL数据库镜像数据存储的路径,请酌情修改 restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5 用 cd 命令打开 docker-compose.yaml 的目录,运行下列命令: 1 docker-compose up -d 构建容器启动后,可以进行下一步。 使用 Navicat Premium 迁移数据 再此再次感谢 Shell !!!!! 容器启动后,打开 Navicat Premium ,新建 MySQL 与 PgSQL 数据库的链接。 点击导航栏中:工具 —> 数据传输,左侧 MySQL,右侧 PgSQL,具体配置如图: 点击下方导航栏的选项,具体配置如图: 点击下一步,此处需要传输的表仅四个:session、user、website、website_event 点击下一步,然后开始,此步骤根据服务器配置以及带宽和数据量的不同,所需时间不同。 最后一行显示 Finished with error 则为数据迁移完成。 重启 Umami 以及 PgSQL 容器: 1 2 3 docker restart umami-db-1 docker restart umami-umami-1 //具体容器名称可以使用 docker ps 命令查看 访问 http://ip:3000 使用原用户名、密码登录,测试数据是否正确,以及是否有什么 BUG。 在此需要注意:请删除原有的 admin 账户。 如无问题,可进行下一步。 升级 Umami 编辑 docker-compose.yaml 替换为以下内容: 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 version: '3' services: umami: image: ghcr.io/umami-software/umami:postgresql-latest //如果你在使用国内服务器部署 Umami,可以使用南京大的ghcr镜像:ghcr.nju.edu.cn //image: ghcr.nju.edu.cn/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:umami@db:5432/umami //Umami数据库设置,可修改,但也请修改 PgSQL 镜像中的配置信息 DATABASE_TYPE: postgresql APP_SECRET: replace-me-with-a-random-string depends_on: db: condition: service_healthy restart: always healthcheck: test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] interval: 5s timeout: 5s retries: 5 db: image: postgres:15-alpine environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: umami // PgSQL 数据信息 volumes: - /www/wwwroot/umami:/var/lib/postgresql/data //PgSQL数据库镜像数据存储的路径,请酌情修改 restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5 运行下列命令: 1 docker-compose up -d 此时,因为需要升级程序数据库,所以根据服务器性能不同所需时间不同。 升级数据库完成后,打开 http://ip:3000 即可进行使用。 使用 nginx 进行反代操作此处不再赘述。 再次强调:请删除原有的 admin 账户。 至此 Umami 数据迁移基本完成~

2024/5/3
articleCard.readMore

癸卯年度总结

时光荏苒,岁月穿梭,又是一年过去了,在这里祝各位新年快乐。 之前没写过年度总结,今年元旦之前,原本是打算写一下的。但是由于那段时间实在是太忙,根本抽不开身,一拖拖到了春节之前,得了,虽然公历新年赶不上了,农历新年之前写完还是没什么问题的。 这篇文章还是我在吃完年夜饭之后才开始动笔写的………………. 生活 说实话,去年(癸卯年)的生活没什么特殊,一如既往的上课学习、水群、做点奇奇怪怪的事情。 但是我和别人也有些不一样,我不爱打游戏,有空愿意刷刷资讯,看看知识类的视频。产生的很多思考,对于意识形态,有了不一样的认识,已经计划写一篇博客聊聊我自己在脑海中构建的意识形态,人的所作所为概括为两个字 “效用”,敬请期待~ 去年年初的定下的目标,看了看,几乎一个完成的都没有。但是我却看的很开,人生原本就是定下目标、制定好详细计划的之后并且放弃的过程。 感觉自己的拖延症已经到了病入膏肓的程度,就比如这篇文章,头半个月已经规划好了,硬生生的拖到了吃完年夜饭,拖无可拖的时候才开始写。。。。 学业已经等于毕业,11月份的时候就回了家,在家已经待了满打满算已经三个月了,也开始了自己枯燥无味的考研学习生活,每天两点一线,早九晚五。 过了三个月才发现每天这样坚持学习真是枯燥无味。。。。这才短短的三个月,我就产生了好几次放弃的念头,曾经有一次深夜自己把自己给逼得破防了,我开始怀疑自己选择的道路是否正确。 但无论怎么说,现在就业环境比较差,考研算是目前比较好的选择,所花费的隐性成本较低,因为就算自己去找工作,也进不了大厂,每月拿着几千块钱工资,累死累活,月月月光,这样属实是没什么意思,还不如视为一个机会,继续深造,为未来做更足的准备。 博客 数了数,去年一共发布了12篇“文章”,真正能称得上文章两个字的,个人认为只有六篇。 根据自建的 Umami 上统计的数据,今年一共收获了 65K 的浏览量,33K 的访客,跳出率有所降低,平均访问时间有所增长。 去年受访问的最多的文章是一篇设置 onlyoffice jwt key 的文章,这文章已经有两三年了,很多操作估计已经失效,但浏览量还是很多,是我万万没想到的。。。。 访问量第二的是 centos7 升级 glibc 的文章,这几天不知道为什么,访问这篇文章的人特别多。。。 寄大希望的文章,浏览量寥寥无几,但是随便写的文章却撑住了我博客的流量。。。 去年来源最多的网站是 百度,其次 谷歌 和 bing,但是百度的权重掉了,今年百度来源的流量会拉。好的方面是现在百度流量的占比不大,对我的影响较小。 今年 去年一年,无论博客的更新,还有学习、生活都是平平无奇的一年。 虽然心有不甘,但是这一年还是过去了,还是展望下未来,定下个目标,到明年的除夕夜回顾起来看看完成了多少。 甲辰年就三个目标:月更博客,学习、减肥。 学习就自不必多说,减肥真是我痛,11月回家的时候才只有150斤,现在已经在通往了190的路上,等天气再暖和一点,买台自行车,每天自习室的路上骑行 10公里,看看能不能瘦的下来。希望到年底,体重能稳定在 140 左右,不要再像今年一样和朋友见面的第一句话就是被调侃又胖了。 那就这样,让我们乙巳年再见。

2024/2/10
articleCard.readMore

小米14 体验报告

手机到手也有半个多月了,因为最近非常忙,所以一拖再拖,这样正好可以更好的体验一下这部手机。 我会从 硬件和软件两个大的方面,分别就优点和缺点去着手进行主观评测。并且对于一些产生的争议问题谈谈我的看法。关于 小米14 的具体的参数,这里就不再过多的赘述。 先说结论:硬件符合价格定位,软件小毛病不断。 序言 先介绍一下我的情况:前 小米10S 机主,对于这台 10S 我只能说爱恨交加,整机质感、还有硬件堆料是比较不错的,但根据我的实际体验,感知更为明显的软件部分,简直可以用一塌糊涂来形容,整个产品的生命周期,负优化不断,不知道是因为小米的软件实力不行,还是故意为之。 真正让我产生换机想法的还是 10S 上的那颗 870 的外挂 5G 基带所带来的续航问题。因为所在的地的 4G 等于残废,所以需要常年打开 5G 功能使用。正常 WIFI 情况下,最高亮度续航能有接近 7 个小时,然而在 5G 的情况下,续航接近腰斩,成为了压死骆驼的最后一根稻草。 恰巧 小米14 正好要发布,其搭载了 Xiaomi HyperOS,以及 8Gen3 处理器,这都是我比较关注的点,所以冲了一波首发,入手了小米14。我手里这台是 16+512 版本的白色版本,所有主观体验均建立于此,不同版本会带来体验上的差异,请谨慎参考。 并且,本片文章并不会针对各种使用场景进行大篇幅的数据分析,如有想了解,可以去观看 极客湾 以及 大米 的评测视频。由于文章是纯主观体验,不同的问题在不同人的眼中可能各有优略,请理性看待,谢谢! 如果这篇文章有您想看没有看到的部分,您可以留言,我会适时添加。 请注意,无论我文章中所说的无论优点或缺点,所有的观点均是我相较于 小米10S 进行的主观评测。可能无法对您起到任何参考意义。如果您是其余品牌其他型号手机的机主,可能某些方面我的主观判断并非完全准确。 此文章对您购机决策产生不了任何的根本性的决策建议。请您去线下的实体店体验,根据自身体验的实际情况再进行购机决策! 硬件 硬件详情 详情可以查看下列表格,更多可以查看 小米官网 部件参数 SOC骁龙 8Gen3 屏幕特性华星 C8 材料 LTPO 120Hz 自适应刷新率 240Hz 触控采样率 DCI-P3 色域 12Bit 色深 类DC调光 尺寸152.8 x 71.5 x 8.20mm 重量193g 屏幕PPIPPI:460 等效 PPI:375 电池容量4610mAh 充电规格有线:90W 无线:50W 10W 无线反向充电 支持充电协议Q4C / QC3+ / QC3.0 / QC2.0 / PD3.0 / PD 2.0 / MI FC 2.0 前置豪威OV32B 1/3.14英寸 0.7微米 3200万像素 4K@60hz 后置主摄:定制豪威OV50H 1/1.3英寸 1.2微米 5000万像素 (默认4合11250万像素) 23mm f/1.6全像素全对焦+激光对焦 光学防抖 7P镜头 超广角::三星S5KJN1 1/2.76英寸 0.64微米 5000万像素 14mm 115°超广角 f/2.26P镜头 长焦:三星S5KJN1 1/2.76英寸 0.64微米 5000万像素 75mm f/2.0 3.2倍光学变焦 10cm以上自动对焦 光学防抖 6P镜头 指纹短焦屏幕指纹 马达瑞声 0809B 扬声器1014 + 1115K 闪存类型LPDDR5X 4200Mhz 4x16bit,UFS 4.0 外观 优点 先上来让我夸夸小米。 精致 因为我这台机器是白色版本,其铝合金中框进行了亮面处理,这台手机给我带来的第一观感就是精致,而且质感拉满,精致的以至于让我怀疑这到底是不是一部小米手机。我也摸过室友的 小米13 但是 13 的精致感并未有 14 给我带来的冲击那么强烈。 这是一种无法用言语来形容的一种高级感,当然也并非是上一部手机 10S 可以比拟的,终于让我知道了什么是真正的高端机(呜呜呜,上一次给我这种感觉的还是 iPhone) 点亮屏幕,视觉上的四等宽边框,真的让人很难看出差别,如果不是因为没有大刘海还有居中大药丸,这真的让我感觉到这是一部 iPhone,而不是小米。高亮的铝合金中框在灯下反射出的光亮闪瞎我的眼,白色的后盖不易显现出沾染上在其上的指纹,这也是我选择白色版本的原因。 但我愿意把这种质感归结于机身重量的加持,小尺寸,大重量。让人有一种的扎实的感觉,再加上亮面铝合金的加持,以至于让我产生了高级感还有精致的一种感觉。 当然,用言语是无法讲出这种感觉的,建议有兴趣的小伙伴可以去线下去摸摸,如果你看完这篇文章还有兴趣的话。 机身三围合理 让我选择这台机器最大的原因,估计还是因为它是现在市场上为数不多的 “小屏” 旗舰。在 71.5mm 的宽度加持下,可以让我单手完成很多操作,不再像 10S 一样,让我很多操作必须使用双手去完成,这给我带来了极大的便利,以及非凡的握持体验。 很多人认为小屏等于屏幕小,以至于当我说这是一台小屏机的时候,有人说:“这台手机屏幕已经 6.36英寸 了,还怎么能算的上小屏手机。” 其实不然,以往受限于技术限制,手机屏占比无法做到现在这么大,所以以前的小尺寸机器都把屏幕做的很小,当年差不多长宽的 小米6 才 5.15英寸,所以以往定义的小屏其实只是相对小的机身尺寸而已,无关屏幕的大小,更多与之挂钩的是手机宽度。 现在还在坚持做小屏机器的厂家已经很少了,到发文止,在做小屏旗舰的只有 三星、苹果、还有小米。三星S数字 与苹果 Pro 的同版本售价让我望而却步,一部的售价可以支持我买两台小米旗舰………而苹果数字款…….实话实说,我无法接受在 2023年 快到 2024年 的时间点上在这个价位段,再去购买一部仅有 60Hz 屏幕的手机。 Fuck Cook!!!!!! 顶部设计 这次 14 的顶部变成了无开孔的设计,将红外,扬声器以及麦克风通过设计移到了摄像头模组还有其他地方上面,虽然观感上会变得让机器变得更加精致,但在使用中也会带来一些问题: 红外移到了摄像头模组上,会让实际使用这项功能的人变得十分不爽,需要将手机垂直对着设备,才能进行正常使用红外,无疑带来是巨大的使用成本。 本身扬声器就不是对称双扬,这样改变了音波的传递方向,在实际体验中,顶部的扬声器声音会偏小,底部偏大,这部分感受比较明显,但音色差距比较小。 关于麦克风,这部分的影响应该是最小的,在实际的体验上,没有明显感知到与之前机型的收音效果有何明显差距。 由于本人使用红外的场景极少,扬声器还有麦克风的使用影响较小,所以综合来看我还是给这种顶部无开孔的设计方案算一个优点。 前面板 2.5D 玻璃 这样做的好处非常明显,可以保证在进行手势的交互(特别是左右的手势交互)时可以让手感相对来说更加顺滑。当然这么做不是没有缺点的,会非常挑钢化膜,很多钢化膜都会出现白边的情况,当然你了可以跟我一样,买个MiCare(强烈推荐),做个裸奔党。 视觉四边等宽 这也算是一个不错的优点,如果还是大黑下巴还有上巴,真的对外观来说很拉分(此处点名某 100)。 甚至个人觉得就算三边继续收窄,下巴宽度不变,都十分影响观感。虽然较 13 差了 0.1mm,实际来说应该是观察不到的,但在看 13 的时候让人产生一种心理暗示,让你觉得 14 的下巴肉眼可见的比 13 窄,小米属实把心理学给研究明白了。但于此同时,你还会知道下巴比其他三边宽 0.1mm 也很难让你实现视觉上的 “四边等宽”。 缺点 说完了优点,再让我来说说更多的缺点。 机身外部按键松垮 上手之后,在我使用实体按键时,就感受到了按键的松垮,按键下去并不清脆,除传统的按压操作外,这个按键还可以水平的上下左右的调节,这直接让我震惊,刚上手就翻车。 在以为自己中奖了之后,后来在微博看到首发用户的评语,发现这并非个例。甚至有人说这是小米的祖传问题,在不同机型上都有此问题,拿来了室友的 13,果然发现了同款的问题,这真的非常影响体验,也影响我对这台机器的印象。当看到是大范围的问题,让我放弃了换机的想法,又不是不能用。 后来看到有人说为了防止卡键,由于不了解其中机理,所以不好妄下判断。但有人的松动,有人不松动,这就证明可能是品控的问题,一台这个价位的机器还做不好细节把控,差评!!!! 背部盖板与中框并不顺滑 这部机器虽然在背部玻璃盖板做了弧面处理,但与中框过度并不顺滑,大概如下图: 而且你是能明显看到中框是突出一部分的,加上中框没有做弧度处理,在握持的上会感到硌手。这算是一种非常取巧的方案,可能旨在降低手机厚度对手感的影响,这种方式常见于曲面屏手机,但直边手机使用这种设计,个人感觉弊大于利,因为解决一个手感问题,又带了更严重的问题,典型的偷鸡不成蚀把米。 重量较重 整机重量达到了 193g,这是一个很高的重量,就算是我裸奔持机,在单手使用的时候都能感觉到小拇指隐隐作痛…….但谁让这台机器内部堆料太狠,这个重量也可以接受,我忍了…….. 希望在下一部机器上小米可以重视这方面的问题,在整机用料机身强度不减的情况下,可以尝试一下使用更轻便的中框材料,来减轻整机重量。 中框容易粘指纹 金属银色亮面中框虽然质感拉满,但其更容易显现指纹以及划痕,介意的朋友可以注意这一点,选择其他颜色版本。 银色亮面基本上都有这种问题,这就仁者见仁智者见智了。 巨大的摄像头模组 这是我认为外观上数一数二的缺点,这么大的摄像模组,导致后背看起来不如 13 的摄像头模组来的协调,同时取消了 13 上广受好评的分割线设计,取而代之的是中间的大 “LEICA” 以及上方的圆形闪光灯。 在观看楼斌的拆机视频可以看到,以小米之前在机型上展示的内部堆叠示例来看,整个摄像头模组其实是可以做的更小的。 为什么没有呢,这是就是典型的为了设计而设计,强行与13做出区分,把整个模组设计的过于巨大,以至于整个背面非常不协调。 相机硬件 前置 这次前置摄像头使用的是 豪威 OV32B,具体参数可以看前面的表格,相较于 10S 上的那颗三星 S5K3T2 无论是硬件规模还有前置算法方面都可以说是一次跨越式的进步。 虽然作为一个肥宅,十分邋遢,但也不妨碍本宅有爱美之心,有时也忍不住拿起手机打开抖音带的美颜相机,小拍两张。10S 的前置哪怕是拥有抖音这么强大的算法加持下也都拍的惨不忍睹,感觉有层白雾糊在照片上。 由于软件算法层面带来的提升,整体的成像质量非常不错,整个画面的纯净度有了质的变化,特别是默认相机的前置成像,以及各类需要前置的摄像的APP表现中,无论是画面纯净度还是整体效果都有较大的提升。虽然整体提升较大,但呈现的效果还是远不如苹果。 因为隐私问题也无法放出具体的人像照片,敬请见谅。 后置 主摄使用了 OV50H 类似物,官方命名为 光影猎人900(定制版OV50H),与 OV50H 最主要的区别在于算法上的定制优化,固定F/1.6光圈,1/1.3 英寸大底。全像素全向对联,支持光学防抖,7P镜头,需要注意的是8K录制仅支持24帧且最高录制仅支持6分钟。 长焦使用了三星JN1,1/2.71 英寸 F/2.0 支持OIS光学防抖,10cm以上自动对焦,6P镜头。需要注意,3.2倍长焦 是基于2.6倍变焦裁切下来的。 超广角使用的也是三星JN1,支持115°超广角,6P镜头。 这一套影像系统相较于 13 来说升级幅度较大,也是这次主打的升级卖点,更是比10S高到不知道哪里去了,你要问我好不好,当然是好哇!!!! 骁龙8Gen3 CPU 这次的骁龙8Gen3使用的台积电N4P工艺,从各大UP实测的能效表现上来看,相较于 8Gen2 上的 4nm工艺,提升幅度也算不小。一个3.3Ghz的X4超大核,缓存容量从1MB提升到了2MB,三个3.15Ghz A720,两个2.96GHz A720,外加两个A520。三级缓存也从8MB提升到了12MB。 从极客湾的测试表现来看,这两个A520纯纯是累赘,还不如接着再砍掉一个,仅保留一个以维持整机的待机功耗。 由于ARM作死般的政策缩紧,这一代骁龙8系列旗舰处理器,也是最后一款使用ARM公版架构的处理器,根据目前看到 X Elite的表现来看,我对明年高通的新自研架构还是挺有信心的,不过就算翻车也没事,反正我也不换。 这里放个极客湾的8Gen3 CPU 能效曲线作为参考。 这里为了便于对比,仅罗列了8Gen3,8Gen2以及骁龙865的CPU综合能效曲线。从图中可以看到,无论是低负载还是高负载,8Gen3的整体能效表现相较于8Gen2都有着不错的提升幅度。在6W的功耗情况下骁龙8Gen3,相较于8Gen2,综合性能提升13%-16%,相较于865,拥有着临近50%的性能提升,在峰值性能上多核提升甚至能到30%。 顺便说一下为什么峰值性能会如此重要。 在日常使用中,当你打开一个冷应用(即很久未打开使用的应用)这是最考验的便是峰值性能,应用在启动时会在极短的时间内,请求大量的运算资源。这不仅考验的是厂商的条件能力,更是考验SOC峰值性能的时候,如SOC峰值性能不高,或剩余可用的计算资源过少,就会导致应用的卡顿。 为什么要选择6W作为对比的点。 手机是无法时刻跑满SOC的,因为受限于硬件条件,很多手机在性能持续输出时仅能持续输出6w(部分手机仅支持4W)的SOC发热,所以更高的功耗已经不具备了参考的意义。 GPU 这次高通并未更换架构,只是简单粗暴的提升了GPU规模,且拉高了频率。 具体能效表现还是请看下图: 从图中来看,750相较于740在能能效上并无太大的提升,更多的是在于峰值性能的提升,当然与此同时,带来了更为恐怖的功耗提升。由于不太玩游戏,所以此处不再过多点评此GPU,但根据多家评测来看,这次 8Gen3已经可以征服 720P 全高元神了。 865:喵喵喵? 屏幕 屏幕观感 虽然小米吹的这块屏幕怎么怎么好,据我实际的体验来看,这块屏幕在很多场景下不怎么让人讨喜,各种颜色均有发灰的情况,不过好在这块屏幕给了非常丰富的色彩管理,但无论怎么调,整体色彩感觉还是不如10S上的那块华星光电默认的色彩。 由于1.5K的分辨率以及屏幕缩小的加持下,在屏幕精细度方面表现不错,虽然与LCD无法比拟,但通过算法的加持,也是十分接近。 但1.5K分辨率也带来了一些问题,在一些游戏或应用中,整体画面精细度甚至不如1080P屏幕更大的10S,这一点需要特别注意。 整体观感感觉可以用一句话总结:黑色很黑,白色偏灰。 频闪 原本不想讲频闪的,因为大佬强烈要求,所以加上了这点。 小米14的频闪方案是比较常见的,高亮度下是 120Hz TFT 类DC调光,过了切换点(大概是亮度条的30%左右)就会切换到 480Hz 低频 PWM 调光。 系统内部提供了开启全程类DC调光的选项,默认是关闭的,打开后对于屏幕的整体色彩,以及低亮度下的屏幕可见程度产生一定的影响。主要体现在于屏幕灰度色深会产生不同程度的偏移,以及影响显示精度的情况。 关于占空比之类的信息,由于没有专业设备,我也无法进行数据测量以及分析,大家可以参考洋芋的这个视频 LTPO 这也算是这块屏幕的一大卖点,相较于无 LTPO 的机器, LTPO 可以做到对于屏幕刷新率的动态调节,以降低屏幕功耗。 以前在使用10S的时候,因为屏幕整体仅有 90Hz 刷新率,如果强制高刷对于整机续航影响较大。后来也尝试了各种各样的方式实现了三档的可变刷新率,当时的测试结果是在不影响正常使用的情况下(保证应用内全程高刷,在观看视频或屏幕不在操作时降低刷新率),还可以保证增加了一个小时的亮屏续航时间。 但是LTPO也是有它的问题的,由于这是一种硬件特性,你无法将其彻底关闭,哪怕你强制锁定了 120Hz 它也会生效。主要会对屏幕色深产生一定的不利的影响。 续航 14的续航总体来说让我非常满意。 我可以说一下我当天的续航使用情况:全程最高亮度,5G单卡网络,LTPO,打开深色模式,无游戏,绝大多数情况是B站视频以及短视频还有信息流。 100%到20%电量,最终使用时间8小时7分钟,根据屏幕时间管理显示,亮屏时间5小时31分钟。 我感觉自己已经属于极度重度使用了,如果是中轻度使用,续航撑起一天问题绝对不大。 快充(怒喷) 一说到快充,我就有的喷了。 小米14支持90W有线,50W无线,10W反向充电。有线充电18%到前台显示100%大概是40分钟整体不算慢(未开启快充加速)。 好了我要开喷了,喷的点是什么呢就是下图的这个东西——快充加速。 原本来说这个功能是挺好的,可以让你的手机充电更快,但打开这个功能就会有一个非常恶心人的情况发生——手机续航大幅减少。据我实测打开这个功能,确实可以让你前台显示充电到100更快,但是冲的快掉的也快,充电时间可以节省接近一半,同样的续航也掉了能有一半。 众所周知,快充和大电池不能兼得,小米是如何实现大电池和百W级快充的呢(以下情况仅为猜测): 估计就是限制电池使用的容量,限制电池的部分使用容量,进行UI快充,前台显示100%但实际快充的电量仅有60%左右。让你产生这台手机快充快的假象。 我和不同人都确认过这个情况,当开启快速充电这个功能后,续航就会变得很差,并非个例,在小米不同机型不同高功率快充的机器上均有此现象发生,让我更加确信自己的推断是正确的。 扬声器 顶部扬声器与底部扬声器分别是 1014规格与1115K规格,因为是非对称双扬,且声音传递的方向都不一致,再加上规格较小,所以就不要对14的扬声器抱有太大的期望,带来的只是失望。 唯一让我庆幸的是,虽然你能明显感受到上下扬声器的音量有些许差异,但两个扬声器的音质表现竟并未感受到多少差异。 我再也未见过能和 小米10S 双扬相媲美的手机,一台都没有,小米10S 赛高!!!!!!! 手感 上面在外观部分说了,小米由于的取巧的直边设计让整个手机握持手感并不佳,会感觉到非常硌手。再加上整个机身重量的加持下,长时间的使用,直角边框会让你的小拇指时常被硌出一条痕,这点就非常难受。 巨大的摄像头模组会让你时常摸到它,特别是官方吹了很久的巴黎饰钉的设计,我觉得当个指甲锉不错。 做的比较好的是没有太大的头重脚轻的感觉,剩下的就是直角边框的通病,需要较长时间的适应。唯一让我欣慰的就是整机是一台宽度仅有71.5mm的小屏机,这也是我选择14不选择再等等的一个很重要的原因。 其他优点 湿手触控 作为低人一等吹了那么久的功能,小米这次也上了,所以打算作为一个优点来讲讲。 据我实际体验在手上沾水的时候触摸准确度相较于10S确实有质的提升。 以往在洗衣服,还是刷碗的时候来了电话,手上有水一整个不好就把电话挂断了,甚至有时候因为残留在屏幕上的小水珠,还会让我观察到手机在“发疯”。但14上因为有了这项功能,几乎没有再出现这种问题。 IP68 有总比没有好,这个部分这里就没有办法测试了,毕竟防水不防傻。 手机的IP68会根据手机的使用情况不同,例如磕碰,较大幅度的放置手机,都会让手机一步步的丧失掉气密性,有时可能短短一周就会让手机失去这种等级的防护能力,所以请勿用水洗手机。 请注意,小米的线下售后是没有能力恢复手机的气密性的,在线下拆机就等于手机失去了 IP68。 USB3 5Gbps 虽然不是 10Gbps,但总比 USB2 好。换算下来,还是能有 600MB/s 的速度,用来备份手机数据,还有传输大文件的时候可以事半功倍。用不到的人永远不知道它的好,只有当你需要它的时候才知道它能有多重要。 其他缺点 短焦指纹 这可以说是这台手机硬件配置上的为数不多的巨大遗憾,都已经2023年底了,4000+价位的手机还在使用短焦指纹。 虽然说解锁精密度还有精准度不错,但由于位置太过靠下,会让解锁体验有一定的下滑,对于部分用户来说可能需要很长的时间去适应。 5G频段缺失 这次小米14还是缺少了部分5G频段,例如N7 N79 N20等频段 虽然对在内陆还有部分海外国家使用没有影响,但对使用上述5G缺失频段的国家还是有很大影响的,如果您有在海外上网的需求,可以先查询14是否支持你目的国家的5G频段。 USB3 5Gbps 未配备 USB3 数据线 既然都支持USB3 5Gbps了,送能用的线不过分吧,成本贵不了多少钱,你这送个2.0的线,也就让我充个电用,我望着家里快要泛滥成灾的USB2.0 数据线陷入了沉思………. 关于出厂自带的保护膜 建议到手就撕,十分影响观感,小米省钱都省到这个上面来了,还因此引发了一波负面舆论。 据我使用的那几分钟来看,这玩意手感极差,貌似还没有疏油层。 软件 软件版本介绍 这次 小米14 预装了 Xiaomi HyperOS,但满满充斥着这是 MIUI15 换皮的味道,充斥了各种各样的小 BUG。 以下我提到的优点以及问题 全部基于 Xiaomi HyperOS 最新稳定版本 1.0.24.0。 深色模式(巨烂) 这个深色模式我已经不知道怎么去吐槽它了,所以我把它放到了软件体验部分的开头去批判它。 自从 MIUI 进入了 Android 12 为底层的世代,所有基于 安卓12 以及更高版本的无论 MIUI 还是 HyperOS,这个功能约等于残废。 系统应用 对于系统应用来说,深色模式适配的肯定非常不错,但在天气APP上,为了强行划分出白天黑夜,就算开了了深色模式,一打开天气,整个 APP 的部分模块还是白色,非常影响整个系统的协调性,非常突兀。 第三方应用 这次第三方应用才是重灾区,以往的深色模式,虽然有很多APP没有适配深色模式,但系统可以强制让它们使用深色模式,但自进入 安卓12 世代以后,这项功能等于没了。 最新的系统情况下,在深色模式设置中,仅有仅有少部分应用支持打开这种强制适配深色模式。以往虽然强制适配的深色模式有些小问题,但是整体可以让系统色调更加的协调,更让人易于接受。 我更希望官方能够将这种 替应用适配深色模式的选项给添加回来,否则晚上打开一个 APP 直接亮瞎眼……..我猜绝对不止我一个人…….. 对了,小米商城到现在都不支持深色模式,它到底算是系统应用还是第三方应用? HyperOS 重头戏~ 优点 丝滑,丝滑,还是他妈的丝滑! 流畅,流畅,还是他妈的流畅! 动画 这次 HyperOS 上的动画可以用丝滑来形容,我可以相信这是 MIUI12 上画的饼在 HyperOS 上实现了,无论是应用打开、打断动画还是多应用打开动画,直接上图: 应用打开返回动画: 应用打断动画: 多应用打开打断动画: 从图中可以看出 HyperOS 可以用优雅来形容,第三个图片因为大小问题,所有加速了一下。这种优雅的动画不仅存在于应用打开切换,还存在于系统的各个角落之中~ HyperOS的流畅度这次真的成了! 实时毛玻璃(高级材质) 这次 MiKOL 吹的比较狠的除了流畅度外,就是这个实时毛玻璃了。 这个功能官方叫做:高级材质,你可以在 设置—显示与亮度 里找到选项。但由于这个功能需要不小的性能开销,而且我并没有觉得这玩意高级到那里去(主要是丑),所以并不建议开启,当然如果你觉得这玩意特别高级,比较好看的话可以开启。 系统不少地方都能看到它的身影(由于此版本小米阉割了高级材质,所以展示不多): 应用长按的快捷方式: 控制中心: 还有部分系统应用: 相册: 笔记: 文件管理: 焦点通知 这次新的通知方式非常简洁美观,也是我吹爆的一项新的功能,话不多说,直接上图: 验证码: 录音机: 游戏登录更加文明 这次HyperOS 在游戏登录时,不会再进行前台上得应用切换授权,而是使用了小窗唤起需要授权的应用。这很文明,很有精神! 更多 其实小米此次更新了极多的新特性,由于篇幅在此便不再过多介绍,在此挑出几个我个人比较看重的说一下。 目前有消息声称小米可能还会再办一次发布会以更好更全面的介绍 Xiaomi HyperOS,在此期待一下。 缺点 BUG,BUG,还 TMD 是 BUG! 额头隐藏掉了更多的图标与交互 在这次更新中,小米去掉了默认状态栏中部分图标,比如 VPN 图标、蓝牙耳机点亮等图表,这非常影响交互体验。特别是VPN图标的去除,让我很多时候都意识不到 VPN 到底是开启的还是关闭的,需要下滑呼出控制中心,才能直观看到更多的功能开关信息。 隐私提示从左侧大的图标,改成了右侧的小点,变成了下面这样: 以至于让我很多时候都意识不到这个小绿点的存在……程序在后台干了什么就更不知道了……. 快捷方式去掉了文字说明(勘误,需要手动打开) 如我下图所示:控制中心的快捷按钮去掉了文字,而且部分图标还进行了更新,让我时常按错,打开了不需要的功能,关闭了需要的功能,特别是有些应用不同的功能使用一样的图标,你这让我怎么进行区分? 虽然在编辑图标中有文字,但并不能直观感受到什么按钮是什么功能,而把这种为了设计而设计的UI所带来的巨大学习成本强加给用户,让我真的想骂人! Bug,Bug,不间断的小BUG 自首批到用户到手,已经也将近一个月的时间了,稳定版本从出场版本 06 开始,在一个月间陆陆续续的竟然更新了7个 HyperOS 版本升级,以用于不断修复系统体验上所带来的BUG。这简直让人难以想象。 但就目前而言,小米14 的稳定版,还更加像是开发板,一周一更,甚至一周两更,根本无法做到真正的稳定,到手之后一个月竟然还有如此多的 BUG,还一味的想让用户包容,凭什么?更让人费解的是,在最新的 1.0.24.0 的系统版本中,关于我上述介绍的新系统特性竟然砍掉了一大半。这让我更加怀疑这个HyperOS 是不是赶鸭子上架。 这个价格的机器,已经真的可以说是旗舰了,可在小米社区的 BUG 反馈中,搜索一下小米14,其反馈我滑了很久也望不到头,一款旗舰机为什么会有真么多的BUG?难道前期这么久的研发时间当中没有测试出来?我于 11月15日 反馈了一个BUG,但直到今日我还没有收到任何反馈。 难道这就是小米所谓的高端?如果这真的就是小米口中的高端,天天在高管口中说的高端,那小米的高端永远也成不了,没有那么多用户愿意跟你去折腾,没有那么多用户有义务陪你折腾。诚然性价比看着怎么怎么无敌,但软件服务上就是一坨屎,还是一坨没有拉完的屎。 其他 灵动额头 这次充电动画也产生了变化,在亮屏状态下,充电的动画变成了类似于苹果灵动岛的设计,只能说有点丑,但莫名的还可以接受。 部分系统应用 UI 重构 通话、短信、相册、文件管理、天气、日历、笔记等应用均进行了 UI 交互逻辑上的重新调整。 其中通话、短信、 笔记、文件管理、相册是将上方的工具栏移到了下方。 笔记: 通话: 文件管理: 相册 而变化最大的还是天气APP,进行非常彻底的重新设计,添加的新的天气动画,重绘了部分UI设计 相机拍照 我这里更多展示的是 小米14 夜间的AI自动摄影。 为什么选择AI+夜景。因为很多人并不会所谓手机的的高级功能,顶对会对一下焦,试问有多少人会对照片,什么光圈,焦距,曝光时间,ISO什么的有所了解?绝大多数人不还是拿出手机对准了,对个焦,咔嚓一下就拍完了?使用AI相机更多的是可以看手机相机算法如何。而夜间拍出来的成片是否纯净,更考验的是相机的硬件素质。所以两者相结合,更能体现出一台手机的相机整体素质如何。 当然这并不全面,仅是个人理解。 3.2倍长焦夜景: 前三张图片,无论是灯箱,还是暗部细节表现均不错,且整体照片的质感比较纯净,但暗部细节部分略有缺失,3.2x 长焦照片,上方灯箱也比较清楚,但噪点明显增加,暗部细节丢失严重。我对于14的相机部分整体成像能力还是比较满意的,但具体如何还请你结合样张自己进行评判。 HyperOS 互联交互 由于手中的平板还没有更新 HyperOS,所以后续再进行增加评测。 总结 这台机器给我最大的惊喜,不仅是骁龙的能效提升,而是 HyperOS 带来的流畅度的提升,相较于之前的MIUI版本,这次的 HyperOS 确实带来了相当大的改变,无论是动画,还是系统的整体流畅度稳定性来看,都有了长足的进步,但这并不是算是小米的优势,只能说小米补足了劣势。 小米14可以说是一部硬件上非常有竞争力的机器,虽然很多友商对小米14进行碰瓷式的营销,这恰恰证明了它的强大。而 Xiaomi HyperOS 所主打的人车家智能生态,需要更多的时间去验证,在我眼里它现在仅仅只能算是一个不错的手机系统,仅此而已。 但在能提供的配套服务上,它都不足以支撑起这个售价。就像是我在 HyperOS 缺点部分说的,关于 小米14 的 BUG,一个发布一月的机器,现在手里的手机还是堪堪可用的状态,虽然大毛病没有,但小毛病从来不间断,这不是一个这个价位的旗舰机该有的表现。让我诟病的小米对于旗舰用户问题处理的态度,一个反馈了半个月的问题,到现在一点反应都没有,哪怕是回个消息:了解了。让我知道我提出的问题有了下一步。我也不至于如此的生气。 综合来看,满分100分,我能给它打一个90分成绩,这是一张非常优秀的答卷,为二让我觉得不爽的还是 HyperOS 上那些不断出现的小BUG,以及小米对于BUG反馈的态度。虽然我在这篇文章中喷的有点多,但并不妨碍 小米14 是一台非常优秀的手机,等修复的系统上现有的这些小 BUG,我愿意把它的评分,提升至完美。 资料参考: 小米14官方页面:https://www.mi.com/xiaomi-14/specs Xiaomi HyperOS:https://hyperos.mi.com 极客湾:https://www.bilibili.com/video/BV1me411R7Ha/ 微机分WekiHome:https://www.bilibili.com/video/BV1Wu4y1Y78b/ 大米评测:https://www.bilibili.com/video/BV1XM411f78e/ 洋芋PotatoNE:https://www.bilibili.com/video/BV17g4y1o7xw/

2023/11/26
articleCard.readMore

博客托管 Cloudflare Pages 后,关于 RSS 订阅链接的问题

由于之前 Vercel 的 IP 在国内被跳反炸,而且域名并未进入预加载列表,导致访问我的站点时会被跳反炸。让我意识到可能 Vercel 不再适合我了,让我产生了将博客部署到到 Cloudflare Pages 的想法。 虽然速度上来说 Cloudflare 到境内的线路质量不太理想,但胜在相对来说比较稳定,不会大规模的跳反炸页面。再加上,相信访问我博客的人应该有办法自己加速,以访问某些网站。 前提 迁移了一段时间之后,我发现访问博客的 RSS 订阅链接出现了点问题,访问 roy.wang/feed/ 时会显示首页的内容。 了解之后发现,似乎是因为安全考虑,Cloudflare 是不支持将非 index.html 的页面设置为默认页面的。而 feed 的订阅文件,一般都是 xml 文件,使用插件生成的静态文件也是 index.xml 。导致直接访问 /feed 路径会产生无默认页面的情况,然后返回主页的内容。 并且,Cloudflare Pages 似乎既不支持非 index.html 文件设置为默认主页,也不支持显示页面的.html 结尾。当你访问 /pages.html 时他会自动跳转到 /pages 显示正确的内容,但并不会显示 .html 文件的后缀,如果有知道的大佬可以留言告知一下。 解决问题 而我翻遍了文档,也并未找到官方给出解决方案,以及为何不支持此种操作的原因。但可以通过 Transform Rules 然后进行 URL 重写解决问题。 最开始时,我是想通过规则进行 301 跳转去解决这个问题的,但很多 RSS 订阅器不支持进行跳转操作获取订阅文件,所以放弃了这个想法。 既然显性跳转不行,那就不如隐性跳转。 此方法也存在局限性,即需要域名使用 Cloudflare 的DNS,如使用 CNAME 接入,理论上也是可以的。 在 Cloudflare 面板找到 Transform Rule -> Rewrite URL -> Create Rule 进行创建新的规则。具体规则参考如下: 然后保存即可,主要是设置正确需要进行转换规则的路径,以及转换后跳转的地址。 至此访问 RSS 订阅链接的错误基本解决。

2023/11/17
articleCard.readMore

小白如何正确使用 Windows

这篇文章仅献给没有 Windows 良好使用习惯的小白。 谁是小白?当你的 Windows 系统越用越卡、C 盘占用越用越大、PC开机慢、软件各种弹窗、经常蓝屏死机但重装系统后又正常如初、使用软件各种卡顿。 那么你既是小白。 并无贬低的意思,因为人都是从小白过来的。身边越来越多的朋友无法保持良好的 Windows 使用习惯,进而导致电脑出现上述问题以及其他由于不良习惯而导致的问题。但是在互联网上并未找到合适的适合小白的良好习惯的使用教程。 此篇文章仅是我这么多年来使用 Windows 的个人经验,可能并不全面,如您有更好的建议,请您在评论区指出,谢谢!! 由于限制,本篇文章仅基于 Windows 11,其他电脑系统仅供参考,但思路是一样的。 关于 Windows 系统版本选择 首先,默认是安装正版的 Windows 操作系统,并非是使用了 XX精简版,XX优化版等二次打包的 Windows 系统,这种系统精简掉了各种系统服务进而达到了 “流畅” 的目的,但也可能带来了潜在的风险:系统不稳定、被植入的病毒、自动安装各种各样的软件、被当成肉鸡。 关于 Windows 系统的选择,可以选择 I Tell You 去下载原版的系统镜像。此时需要注意提供的选择中并非是全部可用: 以上图为例,其提供的三个选择中,前两个 Windows 镜像分别为商业版镜像、消费者版镜像。 其中: 商业版中包括了:专业版、企业版、教育版、专业教育版、专业工作站版。 消费者版中包括了:家庭版、专业版、教育版、专业教育版、专业工作站版。 其中不同版本的区别,此处不进行列举,普通用户推荐使用家庭版以及专业版即可满足所有需求,不用担心这两个版本无法满足您的需求,如果您有特殊需求,肯定会知道该如何选择 Windows 版本 此时需要注意 ARM64 的版本,此版本并不适用于普通的 PC 以及笔记本电脑使用,此版本是供使用 ARM 架构 CPU 的笔记本 PC 使用的。 另外,当您选择 Windows 10 即以下系统版本时,可能会有会有 32 版本,当您内存小于 4 GB 才推荐使用 32 版本,否则请您使用 64 位版本。 还有一个特殊的 Windows 版本:Windows LTSC,此版本是为对稳定性、流畅性、简洁性要求较高的用户准备的。当然也要付出一些代价:无应用商店、功能更新缓慢。 注:最新的 Windows LTSC 基于 Windows 10。 关于如何选择 Windows 版本,推荐使用 Windows 11,某些性能较差、或特殊需求才推荐使用 Windows 10 甚至 Windows 7。 关于软件安装卸载的问题 关于软件安装 很多人都是因为并无良好的软件安装以及分类习惯,才导致 C 盘越用越小、系统越用越卡。 还需要明确盘符的用途,一般来说,电脑中默认会有多个分区盘符,C、D、E等。其中 C盘 为系统目录,请不要主动往此盘符内安装一般程序。 但也有一些例外,如无法选择安装目录的软件如 Chrome、Office等。硬件的驱动软件,都是可以安装到C盘之中的。 此处以安装 QQ 为例。 首先是如何下载安装程序 百度通常是国内用户的首选,甚至很多用户浏览器用户被各种导航页面把持。当你在百度搜索 QQ 时会出现很多选项: 此页面包含了 1-4 四个选项,其中 3、4 是关于 QQ 的百度百科以及微博,这些可以忽略。 1、2之中,很多小白都会选择 2 中的 普通下载,甚至所谓的 “安全下载” 去下载软件,这种习惯是非常糟糕的。此时安装的软件可能并非是最新版,甚至是带捆绑安装的软件包。安装一个软件,可能会安装一堆软件。 正确的步骤为点击带 官网 标识的 1 链接,来下载安装程序。 当然很多软件,如下文中提到的 Geek Uninstaller 在百度上是不显示官网标识的, 此时就需要仔细判断其是否为该软件的官方网站了。 打开下载页面,选择下载选项,选择正确版本的安装包进行下载。 关于软件的安装流程的配置 当你打开安装包,不要点击立即安装 使用其默认配置去安装软件,此时安装程序会将你的软件默认安装到C盘,进而导致 C盘 越来越小,系统越用越卡。 点击自定义选项,可以看到很多自定义项,其中最关键的是 安装目录 的配置 个人建议是使用分类管理的方式去配置安装目录: 其目录组成 :如上图所示,直接在D盘使用一级目录,一级目录的名称应该是简洁明了的,一眼可以看出这个文件夹中安装的是什么程序,但请不要使用中文目录!!!!!!! 如果需要安装的程序较多,可以将软件使用一级目录分类,将软件安装到二级目录中,如将 QQ、WeChat、Telegram 之类的软件安装到 Chats 目录下,如Steam、Epic、WeGame之类的软件 安装到 Games 目录下。也可以将一些功能性的目录如下载目录 Download 设置为一级目录。 其目录结构示例如下: **注意:**QQ 之中下面还有一个用于保存消息记录的地址,建议也通过上述分类的方法,将其保存在特定的目录中,以便清理。 请不要选择开机自启动。 关于软件安装过程中的额外软件安装选项 如上图所示,软件安装完成后以及安装流程中,会默认勾选很多安装软件或设置主页的选项,请注意甄别。否则连锁反映下,软件会越来越多。 总结 选择官方网站进行下载安装程序,做好软件安装分类,不要安装到 C盘,注意软件安装过程中,是否有额外安装软件或设置首页的选项。 关于软件的卸载 软件的卸载通常是很麻烦的,微软默认自带的软件管理还是不够好用,很多软件无法卸载,而且也无法删除一些注册表以及残留文件。 国外成熟好用的卸载软件很多如付费软件:IObit Unintaller,以及还有免费好用的选择:Geek Uninstaller 此软件是免安装的,打开即用,建议将其放入特定的目录中 如 D:\GeekUninstaller 设置快捷方式,来方便使用。 当你使用该软件卸载软件完成时,它会自动检测是否有文件或注册表残留,以及自动清理。 系统功能的设置 主要还是在于 Windows 系统的自启动问题,很多时候软件安装完成后,默认会开启自启动。一打开计算机,软件即会自动运行,导致可能原本就不多的内存直接被吃满,进而导致系统的卡顿,很多人的电脑越用越卡这也是重要的原因之一。 关闭软件开机自启动 关于设置软件的开机自启动,在 Windows 10 以及 Windows 11 中,微软在任务管理器中内置了开机启动的管理选项。 按下 Ctrl+Alt+Del,即可快速唤醒任务管理器,点击启动应用即可进行管理。 由图可见,诸多开机启动选项,多数均是默认为开机启动的,个人建议,如无特殊需求可全部禁用。 关闭 Windows 系统自动更新(可选) 正常来讲,Windows 的更新在于修复 BUG 以及推送新的功能,但会有小部分情况中,Windows更新会带来更大的 BUG,可以基于您的情况,选择是否关闭 Windows 更新。 Win + R 打开运行输入 cmd 打开,输入以下命令: 1 reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v FlightSettingsMaxPauseDays /t reg_dword /d 5000 /f 关于 Windows 的使用 很多时候如不能保持良好的使用习惯,还是会拖慢系统的速度,以及出现各种各样的问题。 不要下载未知来源以及未知的文件 一般来说安装了杀毒软件后,下载了危险的软件和文件基本上杀毒软件会自动检测并且强制删除,但某些情况下由于时效性,杀毒软件无法快速的响应一些新病毒以及新木马,所以还是要保持良好的下载习惯。 定时清理电脑内的垃圾 可以定期清理电脑上下载的不用的文件,以及及时清理回收站来保证磁盘空间充足。 当长时间使用例如 QQ 微信之类的软件时,会有产生很多的数据,可以通过软件自带的清理软件来清理这部分数据,但是请注意清理这些数据时,可能会删除您的消息记录,以及一些重要的文件,请清理之前及时备份。 使用 火绒 自带的垃圾清理功能,及时清理系统以及软件的缓存,来保证磁盘充足。 及时关闭不使用的软件 在软件的使用过程中,由于电脑内存的不足造成的卡顿也是很重要的原因之一。 当电脑物理内存不够大,并且后台挂了一堆软件时,内存占用常常高于80%,此时系统因为无足够的内存来运行软件,而造成软件使用的卡顿,以及系统的卡顿。可以通过任务管理器查看哪些任务占用了过多的内存,通过结束任务,来及时释放内存保证系统的流畅。 整理桌面上的快捷方式以及文件 保持桌面整洁,不要堆积大量图标和文件。合理组织文件夹和文件,使用清晰的命名,这样可以更快速地找到所需的内容。 关于快捷方式可以通过放到下方的任务栏来快速启动应用。 关于文件,可以使用文件夹分类,来快速找到所需文件,这样也方便管理。 软件的选择 首先要说的是,大多数情况下,请不要使用国内如 腾讯、360、金山之类公司提供的可替代的工具类的软件,这些软件充斥着广告,而且非常吃系统资源。 在文末我会归类推荐一些我日常所使用的部分类型的软件,可能并非是最好用的,但是肯定是非常不错的。 推荐软件 推荐软件主要因为很多人还在使用包含很多垃圾广告而且十分吃资源的应用。 浏览器:Chrome、Edge 杀毒软件:火绒 软件卸载软件:Geek Uninstaller 下载软件:Internet Download Manager (收费)

2023/8/31
articleCard.readMore

Umami 构建 2.3.0 版本时 '✗ Command failed: prisma migrate deploy Error: P3009'

自从升级到了 V2 版本后一直都是 2.2.0版本的最新版,但是最新版自昨日开始,总是报如下错误: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [@formatjs/intl] An id must be provided to format a message. You can either: 1. Configure your build toolchain with babel-plugin-formatjs or @formatjs/ts-transformer OR 2. Configure your eslint config to include eslint-plugin-formatjs to autofix this issue Error: [@formatjs/intl] An id must be provided to format a message. You can either: Configure your build toolchain with babel-plugin-formatjs or @formatjs/ts-transformer OR Configure your eslint config to include eslint-plugin-formatjs to autofix this issue at r (https://analyze.innei.ren/_next/static/chunks/pages/_app-0e67ddf2180faf84.js:1:150) at m (https://analyze.innei.ren/_next/static/chunks/pages/_app-0e67ddf2180faf84.js:6:546061) at Y (https://analyze.innei.ren/_next/static/chunks/pages/_app-0e67ddf2180faf84.js:6:555082) at I (https://analyze.innei.ren/_next/static/chunks/968-104b6020f0922c66.js:1:5015) at ab (https://analyze.innei.ren/_next/static/chunks/framework-2c79e2a64abdb08b.js:9:60915) at ud (https://analyze.innei.ren/_next/static/chunks/framework-2c79e2a64abdb08b.js:9:72801) at i (https://analyze.innei.ren/_next/static/chunks/framework-2c79e2a64abdb08b.js:9:120370) at oO (https://analyze.innei.ren/_next/static/chunks/framework-2c79e2a64abdb08b.js:9:99112) at https://analyze.innei.ren/_next/static/chunks/framework-2c79e2a64abdb08b.js:9:98979 at oF (https://analyze.innei.ren/_next/static/chunks/framework-2c79e2a64abdb08b.js:9:98986) 看了下 GitHub,最新版已经解决了上述问题。遂更新至 2.3.0 并遇到了这个问题。 问题如下:再在建 2.3.0 版本时,遇到了 ✗ Command failed: prisma migrate deploy 的问题,并且报错 Error:P3009 发生这种错误是因为 MySQL 5.7 的重命名语法略有不同,需要修改一下 sql 文件中的语法,来解决这个错误。 打开 umami/db/mysql/migrations/02_report_schema_session_data 文件夹下的 migration.sql 文件,将 文件中的首行至第6行 1 2 3 4 5 6 -- AlterTable ALTER TABLE "event_data" RENAME COLUMN "event_data_type" TO "data_type"; ALTER TABLE "event_data" RENAME COLUMN "event_date_value" TO "date_value"; ALTER TABLE "event_data" RENAME COLUMN "event_id" TO "event_data_id"; ALTER TABLE "event_data" RENAME COLUMN "event_numeric_value" TO "number_value"; ALTER TABLE "event_data" RENAME COLUMN "event_string_value" TO "string_value"; 替换为 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 -- RenameColumns ALTER TABLE `event_data` ADD COLUMN data_type INTEGER UNSIGNED AFTER event_data_type; ALTER TABLE `event_data` ADD COLUMN date_value TIMESTAMP(0) AFTER event_date_value; ALTER TABLE `event_data` ADD COLUMN event_data_id VARCHAR(36) AFTER event_id; ALTER TABLE `event_data` ADD COLUMN number_value DECIMAL(19, 4) AFTER event_numeric_value; ALTER TABLE `event_data` ADD COLUMN string_value VARCHAR(500) AFTER event_string_value; UPDATE event_data SET data_type = event_data_type, date_value = event_date_value, event_data_id = event_id, number_value = event_numeric_value, string_value = event_string_value; ALTER TABLE `event_data` MODIFY data_type INTEGER UNSIGNED NOT NULL; ALTER TABLE `event_data` MODIFY event_data_id VARCHAR(36) NOT NULL; ALTER TABLE `event_data` DROP COLUMN event_data_type; ALTER TABLE `event_data` DROP COLUMN event_date_value; ALTER TABLE `event_data` DROP COLUMN event_id; ALTER TABLE `event_data` DROP COLUMN event_numeric_value; ALTER TABLE `event_data` DROP COLUMN event_string_value; ALTER TABLE `event_data` ADD PRIMARY KEY(event_data_id); 保存后,运行下列命令以绕过失败的迁移。 1 npx prisma migrate resolve --rolled-back "02_report_schema_session_data" 此时再运行 yarn build 即可构建成功。

2023/7/19
articleCard.readMore

「转」OPPO Enco Air3 无线蓝牙耳机评测

这篇文章是 七姐 @retadidas 对于 OPPO Enco Air3 的评测文章。 七姐是个非常挑剔的人,她觉得不错的产品,各位如果有类似需求可以直接无脑入就完了。 但耳机这个东西么,关于音质方面,玄学居多。但在功能评测方面,这篇文章可以说是写的非常详细,极具参考价值。 实际是否需要可以看完文章之后,结合自己去决定~ 一直想买一副TWS蓝牙耳机,但是苦于一直没有好的选择,由于本人是小耳洞,拒绝入耳式,平时双持手机,所以想找个支持双设备连接的半入耳TWS,之前看过倍思E8,FIIL KEY等等,总有让人不满意的地方,直到OPPO Enco Air3的出现。。。 先叠个甲,耳机为京东自购,完全自用,本测试除开部分数据,大多为本人主观评测,鉴于耳机这种玄学产品,结果仅供参考,谢谢 ——Retadidas 文章地址:OPPO Enco Air3 无线蓝牙耳机评测

2023/6/3
articleCard.readMore

买了两张 giffgaff

经过这次 ChatGPT 之后,我突然意识到,没有一张国外的电话卡是不行的,经过群内大佬的推荐,入手了 giffgaff。 首先这张卡是免费的,直接从官网申请即可。但需要一个月才能送到,我等不了这么久,便在京东买了两张,28块。 这卡0月租,但需要180天内有余额变动,最经济的方法就是发送一条短信,0.3英镑即可,便可以一直保号,用来接验证码注册账号还是非常不错的。 这篇文章主要是记录一下卡的激活流程。 激活 首先激活,需要准备一张 Visa 或 MasterCard 的信用卡/储蓄卡,激活最低需要充值10英镑,大概85块人民币,但经过实践发现,账户中只有10英镑是不够的,需要 10.2 英镑。 打开 giffgaff 官网,点击 Activate your SIM 在页面中输入收到 SIM 卡上的代码 然后点击 Activate your SIM 下一步输入邮箱,点击 Next,输入密码 要求: 它必须包含: 一个大写字母 一个小写字母 数字或特殊字符 至少 8 个字符 点击 Next,在页面中选择 No,thanks 点击 Continue 在选择套餐的页面,拖到最下面,选择 Pay as you go. 点击 Continue,选择充值的金额。 在以上页面,输入你的 信用卡/借记卡信息,关于地址信息随意填写即可。 然后点击 Activate your SIM 验证一下卡的信息。 此时等待几分钟即可看到自己的号卡信息了。 关于保号 180天消费一次即可,任意消费一次,即可长期使用 1.打电话 1英镑/分钟 ; 2.接电话 1英镑/分钟 ; 3.发短信 0.3英镑/条; 4.流量上网 0.2英镑/MB; 关于号卡无信号 这张卡插上是没有信号的,需要关闭自动选取运营商,以手动选取运营商方可收到信号。

2023/4/26
articleCard.readMore

Umami V1 升级到 V2

前段时间发现,Umami 已经更新到了 V2 版本,遂升级了一下,也遇到不少坑,记录一下。 请注意,升级有风险,请您注意备份已有的数据库以及项目文件,以便升级中遇到错误,进行回退。 另外,此处介绍的为基于 《Umami 自建网站访问量统计系统》做的V1->V2的升级,如您没使用过Umami,请配合本文内容与《Umami 自建网站访问量统计系统》中的内容进行项目部署。 本文中,并无介绍 Node.js 与 yarn 的安装与配置,请参考上面链接中的文章进行安装部署。 项目介绍 项目地址:Umami Umami 基于Next.js 开发,并且支持 MySQL 或 Postgresql 等数据库存储方式,可以将数据掌握在自己手中。并且 Umami 还提供了非常详细的流量分析可视化的界面,UI 体验以及统计准确度十分不错(此处所讲统计精准度为实际真是访客的访问量,有可能一天只有1-2请做好心理准备。) 官方文档:Umami Docs 升级数据库 本地升级 如果你之前使用过 Umami V1,打算从 V1 升级到 V2,直接执行下面的命令: 1 2 cd umami npx @umami/migrate-v1-v2@latest 上面打开目录,请按照实际情况来修改。 托管平台升级 如果你选择的使用 Vercel 之类的托管平台,以至于没有目录的权限,则需要克隆 V1->V2的升级项目,进行数据库升级。 1 2 3 4 git clone https://github.com/umami-software/migrate-v1-v2.git cd migrate-v1-v2 yarn install yarn build 则需要在文件夹中创建一个 .env 的文件,其内容如下: 1 DATABASE_URL={connection url} 运行项目以升级数据库结构 1 yarn start 重新构建 数据库升级成功后,则需要重新构建项目,在此处写明升级方法。 本地构建项目 在构建之前,请备份 .env 文件,备份后需要删除整个 umami 数据库 1 2 3 git clone https://github.com/umami-software/umami.git cd umami yarn install 此时需要将备份好的 .env 文件,放回到目录中。 构建项目: 1 yarn build 构建完成后,可运行项目: 1 yarn start 配置文件也需要进行更新,原来的 umami.service 已不可使用,请替换为新版: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [Unit] Description=Umami App After=network.target [Service] Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/www/server/nodejs/node-v16.14.2-linux-x64/bin/ ExecStart=/www/server/nodejs/node-v16.14.2-linux-x64/bin/yarn start WorkingDirectory=/www/wwwroot/umami Restart=always RestartSec=10 Type=simple User=root Group=root [Install] WantedBy=multi-user.target 此时保存即可,运行: 1 2 3 4 5 6 # 更新配置 systemctl daemon-reload # 启动服务 systemctl start umami # 设置开机启动 systemctl enable umami 详细的管理命令如下: 1 2 3 4 5 6 7 8 9 10 11 12 # 启动服务 systemctl start umami # 设置开机启动 systemctl enable umami # 停止服务 systemctl stop umami # 重启服务 systemctl restart umami # 查看状态 systemctl status umami # 更新配置 systemctl daemon-reload 使用 Vercel 构建 Umami V2 有关 Vercel 构建 Umami V2的方法,与构建 V1 并无区别,可参考我写的这篇文章: 《Vercel 云服务构建 Umami》 其他 之前的文章介绍过使用 CDN 加速 Umami 的脚本,Umami升级到V2后,脚本内容已经更新,需要您更新托管到 CDN 的静态文件。 下载文件,然后上传到服务器即可。 升级后,网站上的配置链接不必进行更改。 如在安装或构建过程中遇到错误,请检查使用的 Node.js 版本与 yarn 版本是否不符合要求,或者过于新。官方要求 Node.js 版本 14.3 或更高。

2023/4/20
articleCard.readMore

FMGP - 监控本地文件夹自动 Git Push

博客目前是托管到 Vercel,通过 Simply Static 生成静态博客后,手动推送到 GitHub 的私有仓库上,Vercel自动进行部署。 但这样每次手动更改生成静态文件后,都需要手动推送,非常麻烦。故写了一个 Shell 脚本来监控 Simply Static 生成静态文件的目录。 如有文件夹内的文件有更新,它将自动推送到 GitHub 的私有仓库,以完成部署流程的自动化。每当插件生成了静态文件后,将自动化的完成 Git Push -> 部署到 Vercel 使用了半个多月时间,感觉非常不错,现在开源出来。 FMGP 项目地址:FMGP 如果觉得这个项目对您有帮助,请您给个 Star 部署 1 2 git clone https://github.com/roywangdev/fmgp cd ./fmgp 此时您需要修改几个关键的参数: 1 2 3 4 WATCH_DIR= #需要监控的目录 GITHUB_USER= #GitHub用户名 GITHUB_REPO= #GitHub仓库名 GITHUB_TOKEN= #GitHub Token 其他项目可以根据实际情况修改。 启动: 1 nohup ./gitpu.sh > output.log 2>&1 & 此时即可正常工作,会在同目录生成一个 output.log 文件,里面是运行的日志。 如果需要停止运行: 1 2 3 ps aux | grep gitpu.sh 此时即可显示进程 PID kill -9 PID 后语 一个很简单的脚本,希望能帮助到大家。

2023/4/19
articleCard.readMore

使用 CDN 加速 Artalk 静态资源

上篇博文介绍了 Umami 的静态资源加速,这篇文章讲一下 Artalk 的静态资源加速。 现在要做的就是对外部引用资源的优化,博客现在使用的流量统计方案,以及博客的使用的评论方案,一直以来是托管在腾讯云香港的轻量应用服务器上的,但香港地区的线路越来越差,极其影响体验,遂进行做了一部分优化。 正文 上篇博文介绍了 Umami 的静态资源加速,这篇文章讲一下 Artalk 的静态资源加速。 此方法同样适用于那些服务域名被插件屏蔽的同学。 官方提供了 公共CDN 的静态资源加速的地址: BootCDN (国内) https://cdn.bootcdn.net/ajax/libs/artalk/2.5.3/Artalk.js https://cdn.bootcdn.net/ajax/libs/artalk/2.5.3/Artalk.css ElemeCDN (国内) https://npm.elemecdn.com/artalk@2.5.3/dist/Artalk.js https://npm.elemecdn.com/artalk@2.5.3/dist/Artalk.css CDNJS https://cdnjs.cloudflare.com/ajax/libs/artalk/2.5.3/Artalk.js https://cdnjs.cloudflare.com/ajax/libs/artalk/2.5.3/Artalk.css UNPKG https://unpkg.com/artalk@2.5.3/dist/Artalk.js https://unpkg.com/artalk@2.5.3/dist/Artalk.css JS DELIVR https://cdn.jsdelivr.net/npm/artalk@2.5.3/dist/Artalk.js https://cdn.jsdelivr.net/npm/artalk@2.5.3/dist/Artalk.css 这些公共CDN的效果如果不太满意,或者有洁癖,就是想自己托管的话,可以继续看下去。 首先,你需要将使用 Artalk 版本的 CSS/JS 静态资源 保存下来,将其部署到你的 CDN 上。 主要包括两个静态文件:Artalk.css 和 Artalk.js 请注意,不要使用不同 Artalk 版本的相关静态资源。 最开始时,简单部署完毕调用后,才发现调用的代码有所修改,也有所限制。 原有引入静态资源,格式如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <!-- CSS --> <link href="https://yourserversdomain/...../Artalk.css" rel="stylesheet"> <!-- JS --> <script src="https://yourserversdomain/...../Artalk.js"></script> <!-- Artalk --> <div id="Comments"></div> <script> add Artalk({ #此处有些修改。 el: '#Comments', pageKey: '<?= addslashes(get_permalink()) ?>', pageTitle: '<?= addslashes(get_the_title()) ?>', server: '<后端地址>', site: '<?= addslashes(get_bloginfo('name')) ?>', // ...你的其他配置 }) </script> 其中: https://yourserversdomain/...../Artalk.css 为你 Artalk 服务中外部调用 CSS资源 的地址。 https://yourserversdomain/...../Artalk.js 为你 Artalk 服务中外部调用 JS 资源 的地址。 其下的代码,为部署到博客的代码,此处以 WordPress 为例。 而如果希望将 JS资源 托管在他处,则需要引用的 JS资源 所在的位置,请保证这个地址是可用的,以及指明服务所在位置,需要添加 data-host-url 参数,格式如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <!-- CSS --> <link href="https://yourCDNdomain/...../Artalk.css" rel="stylesheet"> <!-- JS --> <script src="https://yourCDNdomain/...../Artalk.js"></script> <!-- Artalk --> <div id="Comments"></div> <script> Artalk.init({ el: '#Comments', pageKey: '<?= addslashes(get_permalink()) ?>', pageTitle: '<?= addslashes(get_the_title()) ?>', server: '<后端地址>', site: '<?= addslashes(get_bloginfo('name')) ?>', // ...你的其他配置 }) </script> 其中: https://yourCDNdomain/...../Artalk.css 为你部署在 CDN 中 Artalk 服务调用 CSS资源 的地址。 https://yourCDNdomain/...../Artalk.js 为你部署在 CDN 中 Artalk 服务调用 JS资源 的地址。 其下的代码,为部署到博客的代码。 此处需要注意: 调用CSS和JS资源,需要在发送相关信息之前,建议放到 标签内。 原本嵌入到博客中的 add Artalk 部分需修改为 Aartalk.init 除此之外,还需要加速评论使用的表情包等资源,将下列资源部署到 CDN 上: https://github.com/ArtalkJS/Emoticons https://github.com/qwqcode/huaji 请注意: 1 2 3 4 1、请修改第一个项目中 default.json文件 中第84行关于 huaji表情包 的地址。 修改为:https://yourCDNdomain/......../huaji/huaji.json 2、将huaji.json 文件内的 https://cdn.jsdelivr.net/gh/qwqcode/huaji 批量替换为:https://yourCDNdomain/......../huaji 自此常用的资源基本部署完毕。 脚本加速之前属于一来一去,同样差的线路需要体验两次。加速之后,在加载脚本速度上会有质的飞跃,虽然还会向服务所在的域名发送采集到的相应数据,但总体来说速度上还是有明显差距的。 脚本虽小,但加速与否体验差别挺大。

2023/4/12
articleCard.readMore

使用 CDN 加速 Umami 静态资源

如你所见,等你看到这篇文章的时候,我博客的域名已经取消的备案。 至于取消备案的原因,主要还是因为监管逐渐变的更加严格,而且网站已经有了一定的访问量,怕引发一些不必要的麻烦,遂取消了备案。具体的原因会在后续的文章中给出。 而现在博客已经迁移到了 Vercel 上了,最初是要迁移到 CloudFlare Pages 上的,但 CFP 到国内的可用性真的够拉的。迁移到 Vercel 后,许多以前做的优化已经逐渐的不够用,不适用了。为了保证博客的体验,需要做新一轮的优化。所作优化,后续会以流水账的形式以博文的形式更新。 首先要做的就是对外部引用资源的优化,博客现在使用的流量统计方案,以及博客的使用的评论方案,一直以来是托管在腾讯云香港的轻量应用服务器上的,但香港地区的线路越来越差,极其影响体验,遂进行做了一部分优化。 正文 翻了翻 Umami 的文档,官方其实是支持引用的 JS资源 托管到其他地方的,然后将数据发送到 Umami 的服务端上,仅需做出一部分小的改动。 此方法同样适用于那些服务域名被插件屏蔽的同学。 首先,你需要将使用 Umami 版本的 JS资源 保存下来,将其部署到你的 CDN 上。 请注意,不要使用不同 Umami 版本的 JS资源。 资源的名称需要与你服务中设置的名称一致。 原有引入 JS资源,格式如下: 1 2 3 4 <script async defer src="http://youUmamiserversdomain/umami.js" data-website-id="94db1cb1-74f4-4a40-ad6c-962362670409" ></script> 其中: http://youUmamiserversdomain/umami.js 为你 Umami 服务中外部调用 JS资源 的地址。 data-website-id 为你在服务中生成的网站对应的ID。 而如果希望将 JS资源 托管在他处,则需要引用的 JS资源 所在的位置,请保证这个地址是可用的,以及指明服务所在位置,需要添加 data-host-url 参数,格式如下: 1 2 3 4 5 <script async defer src="http://youblogdomain.com/umami.js" data-website-id="94db1cb1-74f4-4a40-ad6c-962362670409" data-host-url="http://youUmamiserversdomain" ></script> 其中: http://youblogdomain.com/umami.js 为你部署的 JS资源 的地址 data-website-id 为你在服务中生成的网站对应的ID。 http://youUmamiserversdomain 为你服务所设置的域名。 至此 Umami JS资源 加速部署结束。 脚本加速之前属于一来一去,同样差的线路需要体验两次。加速之后,在加载脚本速度上会有质的飞跃,虽然还会向服务所在的域名发送采集到的相应数据,但总体来说速度上还是有明显差距的。 脚本虽小,但加速与否体验差别挺大。

2023/4/8
articleCard.readMore

Vaultwarden 设置 SMTP 发送邮件错误

这个问题也是折磨我许久的问题,设置了SMTP,各项参数看起来没有什么问题,就是发信错误,接收不到邮件。 以至于一年来,我的账号处于未验证邮箱的状态。 正文 出现此种状况,极有可能是 Secure SMTP 和 端口不匹配导致的。 Secure SMTP 拥有以下选项: starttls force_tls off 这三个选项所对应的端口号为: starttls:587 force_tls:465 off:25 这一步很容易将 starttls 选项的端口设置为 465 以致收不到邮件。 设置完成后保存,即可收到邮件。 很简单的问题,水篇文章(手动狗头

2023/3/21
articleCard.readMore

不要神化 ChatGPT ——由ChatGPT生成

首先要说的是,这篇文章是由 ChatGPT 生成的,然后本人做出了适当的修改润色,ChatGPT 提出的这些问题不无一些道理,请不要盲目的去神化 ChatGPT,当 ChatGPT 开放 3.5 版本的 API 后,可见国内又会出现新的突破。 人工智能领域的发展带来了很多新技术和工具,其中自然语言处理(NLP)是一个备受关注的领域。自2023年始,由 OpenAI 推出的 ChatGPT 模型在世界范围内产生了深远的影响。虽然 ChatGPT 在某些方面取得了令人瞩目的成就,但我们不能因此忽略它的不足和问题。 首先,需要指出的是 ChatGPT 并不成熟。尽管 ChatGPT 已经引起了广泛的关注和讨论,但它仍然是一种相对较新的技术。它的使用和应用还存在一些挑战和限制。例如,在某些情况下,它可能会产生错误或混淆的回答,无法满足特定任务的要求。此外,如果不正确地使用或设置,它可能会导致误解或错误的结果。 除此之外, ChatGPT 也面临着滥用的问题。因为 ChatGPT 可以生成高质量、人类般的语言文本(例如这篇垃圾文章),所以它被广泛用于生成虚假信息、诈骗和恶意攻击等行为。例如,有人可能会使用 ChatGPT 来生成钓鱼邮件或欺诈性消息,从而让用户暴露个人隐私或造成财产损失。这样的滥用问题可能会给用户带来巨大的损失和风险。 **因为其是学习性质的 AI 算法,目前来看很多时候其提供的结果并不精准。很多时候当你询问其一个常识性的问题时,它会义正言辞的告诉你一个错误的答案。**但是你无法去修改它,只有想当数据量的反馈其产生错误的观点后,它才可能会去改正这个错误,甚至有时需要人工干预去强行修改它生成的结果。 此外, ChatGPT 的使用也可能会带来更加深刻的影响。例如,它可能导致人们失去独立思考的能力。由于 ChatGPT 可以提供快速、便捷的答案和解决方案,人们可能会逐渐丧失自主学习和思考的能力。这可能会导致人们在其他领域中的判断和决策也变得懒惰和不负责任。自2023年开始,ChatGPT开始大火,很多一部分国内外高校的学生会使用 ChatGPT 来生成论文,去完成作业或论文,但值得庆幸的是,最近多所学校开始对作业、论文禁止使用 ChatGPT。 然而,这些问题并不是 ChatGPT 本身的问题,而是与其使用方式和社会环境相关的问题。因此,我们需要采取措施来规范和管理 ChatGPT 的使用,避免上述问题的发生。 需要加强 ChatGPT 的安全防护措施,避免其被用于恶意目的。企业和组织可以采用多重身份验证、数据加密等安全措施来保护自己的聊天记录和机密信息。同时, ChatGPT 提供商也应该加强安全措施,确保其服务器和系统的安全和稳定。 ChatGPT 虽然是一个非常强大的技术,但是不能盲目地神化它,也不能忽视它存在的问题和潜在风险。我们需要全面地认识和评估 ChatGPT ,采取有效的措施来规范和管理其使用。 另一方面,我们还应该认识到 ChatGPT 的出现并不意味着人类智能的完全替代。尽管 ChatGPT 可以模拟人类语言能力,在某些方面表现甚至优于人的能力,但它仍然是一种机器学习算法,其决策和预测基于训练数据和算法模型。这意味着 ChatGPT 无法真正理解自己所处理的信息和任务,也无法像人类一样进行独立思考和创造性发挥。 因此,我们需要保持清醒的头脑,避免过度依赖 ChatGPT 或其他人工智能技术。重要的是要找到适合特定问题和场景的最佳解决方案,并结合人的专业知识和经验进行决策和判断。 在未来的发展中,我们需要共同努力,以确保 ChatGPT 和其他人工智能技术的发展与社会伦理价值相一致。只有这样,人工智能才能真正地为人类带来福祉和进步。

2023/3/4
articleCard.readMore

Artalk - 轻量、安全、易上手的自托管评论系统

之前介绍过 Cusdis 整体风格以及性能比较满意,但是有一个非常明显的问题,当访客评论可以获取邮件通知,但当回复访客时,访客就无法获取到通知,非常不利于进行交流。 昨日看到 烧饼博客 还有 BAOSHUO 的博客评论系统更换为了 Artalk,之前也有大佬在博客的留言中提起过这个系统。 测试了一下性能不错,也没有邮件通知的问题。嵌入到博客中,整体风格还算统一,遂进行了部署替换。 此处介绍 Docker 部署的方式,基于宝塔面板。 Artalk 项目地址:Artalk Artalk 是一款简洁、轻量的自托管评论系统,你可以在服务器上轻松部署并置入前端页面中。 来到你的博客,或是任意位置,放置 Artalk 评论框,让页面具备丰富的社会化功能。 官方文档:Artalk Docs 特性 前端采用 TypeScript (Vanilla JS),轻量级,无冗余依赖,仅 ~30KB (gzipped)。 后端采用 Golang 重制 (Artalk v2),跨平台,体积小巧,五脏俱全,快速部署。 其UI简洁、支持自托管、支持给访客邮件推送,是我非常看重的功能。 部署 Artalk Docker 部署 一、获取镜像 镜像名如下: 1 artalk/artalk-go 国内服务器获取镜像会极慢,请耐心等待。 二、创建容器 1 2 3 配置如下: 容器端口:23366 容器目录:/data 三、更改容器名称为 artalk 四、创建管理员账号 在SSH客户端中输入下面的命令,设置输入信息设置管理员账号 1 docker exec -it artalk artalk admin 设置反向代理 宝塔新建站点 -> 打开SSL - > 反向代理 ->添加反向代理 目标 URL 填写:http://127.0.0.1:6666 配置站点 进入页面域名登陆,然后创建一个站点,将下面代码修改后放到网站的合适位置即可。 WordPress 可以参考以下配置,如使用其他系统,请将 <?php $id =get_the_ID();echo get_permalink($id); ?>、<?php the_title(); ?>" 修改为合适的 函数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <!-- CSS --> <link href="https://your_domain/dist/Artalk.css" rel="stylesheet"> <!-- JS --> <script src="https://your_domain/dist/Artalk.js"></script> <!-- Artalk --> <div id="Comments"></div> <script> new Artalk({ el: '#Comments', // 绑定元素的 Selector pageKey: '<?php $id =get_the_ID();echo get_permalink($id); ?>',// 固定链接 (留空自动获取) pageTitle: '<?php the_title(); ?>', // 页面标题 (留空自动获取) server: 'https://your_domain', // 后端地址 site: 'Artalk 的博客', // 在后端中创建的站点名 }) </script> 此时将代码插入到静态页面,进入后台进行设置,即可愉快的使用了~ 后语 Cusdis 系统里的评论全部都没了,很桑心 /(ㄒoㄒ)/~~

2023/2/20
articleCard.readMore

Debian 手动升级 cURL 到 7.87.0

之前在介绍过,使用了一个静态博客插件 Simply Static。 今天在生成新博客的时,突然发现没有替换掉原本生成的页面,故查看了一下软件自带的诊断页面。 这才发现,宝塔极速安装的 PHP 7.4 所自带的 cURL 版本是达不到要求的。 这篇文章谨记录一下升级过程,用于学习交流。 正文 此教程基于 Debian 一、卸载旧版 cURL 1 apt-get remove curl 一、下载最新版的及其依赖 截至发文日,最新版本为 7.87.0,直接使用以下命令即可: 1 2 3 4 5 6 7 mark curl cd curl wget http://ftp.cn.debian.org/debian/pool/main/c/curl/curl_7.87.0-2~bpo11+1_amd64.deb wget http://ftp.cn.debian.org/debian/pool/main/c/curl/libcurl4-openssl-dev_7.87.0-2~bpo11+1_amd64.deb wget http://ftp.cn.debian.org/debian/pool/main/c/curl/libcurl4-gnutls-dev_7.87.0-2~bpo11+1_amd64.deb wget http://ftp.cn.debian.org/debian/pool/main/c/curl/libcurl3-gnutls_7.87.0-2~bpo11+1_amd64.deb wget http://ftp.cn.debian.org/debian/pool/main/c/curl/libcurl4_7.87.0-2~bpo11+1_amd64.deb 你也可以选择去 https://curl.se/download.html 选择最新版本下载。 二、解包安装 1 dpkg -i *.deb 三、查看 cURL 版本 1 curl --version 此时重启PHP,即可查看升级成功。 此方法,仅适用于 Debian 11,并不适用于 CentOS,请注意。

2023/2/19
articleCard.readMore

CentOS7 升级 Glibc 2.17 到2.28

2023/05/22 更新,Leslie 大佬提出了两个问题,一个是关于 make install 会有一个报错,另一个是更新后 系统中文 和 locale 会有问题,详情可以查看评论区置顶! 在手动升级 alist 从 3.2.0 版本到 3.6.0 版本的时候,发现环境中现有的 Glibc 版本已经无法满足alist的要求了,遂升级一波,记录一下。 1 ./alist: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by ./alist) 正文 默认的GCC 版本无法无法编译 Glibc 2.28。 安装GLIBC所需的依赖,该版本需要 GCC 4.9 以上 及 make 4.0 以上。 GCC 11.2版本太新,无法与Glibc 2.28兼容。 一、安装gcc-8.2.0所依赖的环境 1 2 yum install bison -y yum -y install wget bzip2 gcc gcc-c++ glibc-headers 二、升级GNU Make 3.82到4.2.1 1 2 3 4 5 6 7 8 9 wget http://ftp.gnu.org/gnu/make/make-4.2.1.tar.gz tar -zxvf make-4.2.1.tar.gz cd make-4.2.1 mkdir build cd build ../configure --prefix=/usr/local/make && make && make install export PATH=/usr/local/make/bin:$PATH ln -s /usr/local/make/bin/make /usr/local/make/bin/gmake make -v 三、升级GCC 1 2 3 yum install -y devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils echo "source /opt/rh/devtoolset-8/enable" >> /etc/profile source /etc/profile 四、下载 Glibc 1 2 3 4 5 wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.xz xz -d glibc-2.28.tar.xz tar -xvf glibc-2.28.tar cd glibc-2.28 mkdir build 五、编译安装 Glibc 1 2 3 4 cd /root/glibc-2.28/build ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin make -j4 make install 根据服务器 CPU 性能不同,编译时间不同 六、查询支持的 Glibc 1 strings /lib64/libc.so.6 | grep GLIBC 记录一下自己升级的过程,希望大佬们斧正。

2022/12/25
articleCard.readMore

Cusdis - 轻量、保护隐私、开源的 Disqus 评论系统替代方案

由于之前将博客全静态化了导致评论无法使用,原本是不打算做的,但是还是又挺多朋友通过各种各样的渠道联系我交流问题,故打算解决一下这个问题,方便后续交流。 我的解决方案是能自建就自建,无法自建的基本上就不考虑了。Disqus 不能自建,加之实际使用起来效果并不理想,隐私问题,还有界面不太喜欢就直接被我 Pass 掉了。 相交于 Disqus,Commento++也是不错的解决方案,但是界面不太喜欢,以及不够轻量,故没有选择,综合来考虑来看,Cusdis是非常不错的解决方案,足够轻量、支持自建、UI简洁,致使我最终选择了 Cusdis。 此处介绍两种方式 Docker、手工部署 Cusdis,均基于宝塔面板。 项目介绍 项目地址:Cusdis Cusdis是Disqus的开源、轻量级(约5kb gzip)、隐私友好的绝佳替代品,主要用于纯静态化网站。 Cusdis 并非旨在成为 Disqus 的完整替代品。它的目的是为小型网站(例如您的静态博客)实现一个极简主义和可嵌入的评论系统。 官方文档:Cusdis Docs 特性 Cusdis 是开源的并且可以自我托管。因此,您拥有自己的数据。 SDK 是轻量级的(~5kb gzipped)。 Cusdis 不需要您的用户登录即可发表评论。 Cusdis 根本不使用 cookie。 缺点: Cusdis 正处于其开发的早期阶段。 没有垃圾邮件过滤器,因此,您必须手动审核您的评论部分,并且在您批准之前不会显示评论。 其UI简洁、支持自托管、支持邮件推送,在邮件内即可进行批准以及回复是我比较看重的功能。 环境配置 由于 Cusdis 基于Node.js 开发,采用 SQLite 或 MySQL 或 Postgresql 数据库存储数据,所以配置要求如下: 系统上需要安装 Node.js 和 yarn 服务器上安装了 MySQL 或 Postgresql 本文基于宝塔面板,使用 SQLite 进行安装 安装配置 Node.js 如您已安装 Node.js 和yarn 并且配置成功,则此步可以跳过。 安装 Node.js 命令如下 1 2 3 4 5 6 cd /www/server/nodejs #国外服务器选择 wget https://nodejs.org/dist/v14.15.0/node-v14.15.0-linux-x64.tar.gz #国内服务器选择 wget https://registry.npmmirror.com/-/binary/node/v14.15.0/node-v14.15.0-linux-x64.tar.gz tar -zvxf node-v14.15.0-linux-x64.tar.gz 设置 Node.js 全局变量: 在宝塔面板打开 /etc/profile 文件,将以下配置输入文件最后面,并保存 1 2 export NODE_HOME=/www/server/nodejs/node-v14.15.0-linux-x64 export PATH=$NODE_HOME/bin:$PATH 输入以下命令用于重载全局配置。 1 source /etc/profile 输入 node -v 和 npm -v 返回以下信息即配置完成 配置成功 安装 yarn 1 npm install -g yarn 查看版本信息,如遇 yarn:未找到命令,请看:《NodeJS 和 npm 配置全局变量》 国内服务器此步骤由于 Node.js 没有大陆节点,速度较慢。请耐心等待 千万不要使用淘宝的 registry 镜像源!!!!!!!! 否则安装依赖会出错!!!!!!!! 部署 Cusdis 此处介绍两种方式部署,手动部署与使用Dokcer 手动部署 一、克隆仓库 1 2 cd /www/wwwroot git clone https://github.com/djyde/cusdis.git 二、安装 Cusdis 所需依赖 国内服务器此步骤由于 Node.js 没有大陆节点,速度较慢。请耐心等待 千万不要使用淘宝的 registry 镜像源!!!!!!!! 否则安装依赖会出错!!!!!!!! 1 2 cd cusdis yarn install 三、配置 .env 文件 在 cusdis 文件夹中新建一个名为 .env 的文件 文件具体配置如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 USERNAME=admin PASSWORD=password JWT_SECRET=ofcourseistillloveyou NEXTAUTH_URL=http://IP_ADDRESS_OR_DOMAIN HOST=http://IP_ADDRESS_OR_DOMAIN DB_TYPE=sqlite DB_URL=file:./data.db #以下配置为 EMAIL 配置 可选 SMTP_HOST=smtp.gmail.com SMTP_PORT=465 SMTP_SECURE=true SMTP_USER=your gmail email SMTP_PASSWORD=<app password> SMTP_SENDER=your gmail email 其中 为用户名 1 2 3 4 5 6 7 8 9 10 PASSWORD 为密码 JWT_SECRET 为 JWT 令牌 NEXTAUTH_URL 与 HOST 需要填写项目所用的域名/IP DB_TYPE、DB_URL 为 数据库类型、数据地址 SMTP_HOST 为 SMTP 主机 SMTP_USER 为 SMTP 用户名 SMTP_PASSWORD 为 SMTP 密码 SMTP_SENDER 为发件人电子邮件地址 SMTP_PORT 为 SMTP 端口 默认为 587 SMTP_SECURE 为是否启用 SMTP 安全,默认值为true 四、构建 Cusdis 1 yarn run build:without-migrate 这一步可能会出现错误,错误代码如下: 1 2 3 4 5 6 7 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! cusdis@ db:generate: `prisma generate --schema ./prisma/$DB_TYPE/schema.prisma` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the cusdis@ db:generate script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. 这一步需要到 ./cusdis/prisma 选择需要设置的数据库类型,然后将该文件夹内的 schema.prisma 文件 复制到 ./cusdis/prisma 构建即可解决。 五、运行 Cusdis 1 yarn run start:with-migrate 设置程序守护,此处以systemd为例 打开目录 /usr/lib/systemd/system/ 新建文件:cusdis.service 文件配置如下(以下配置仅供参考): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [Unit] Description=CusdisServer [Unit] Description=CusdisServer [Service] ExecStart=/www/server/nodejs/node-v14.15.0-linux-x64/bin/npm start Restart=always Environment=PATH=/usr/bin:/usr/local/bin:/www/server/nodejs/node-v14.15.0-linux-x64/bin Environment=NODE_ENV=production WorkingDirectory=/www/wwwroot/cusdis/ [Install] WantedBy=multi-user.target 此时保存即可,运行: 1 2 3 4 5 6 # 更新配置 systemctl daemon-reload # 启动服务 systemctl start cusdis # 设置开机启动 systemctl enable cusdis 详细的管理命令如下: 1 2 3 4 5 6 7 8 9 10 11 12 # 启动服务 systemctl start cusdis # 设置开机启动 systemctl enable cusdis # 停止服务 systemctl stop cusdis # 重启服务 systemctl restart cusdis # 查看状态 systemctl status cusdis # 更新配置 systemctl daemon-reload Docker部署 一、获取镜像 镜像名如下: 1 djyde/cusdis 国内服务器获取镜像会极慢,请耐心等待。 二、创建容器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 配置如下: 容器端口:3000 容器目录:/data 环境变量: -e USERNAME=admin \ -e PASSWORD=password \ -e JWT_SECRET=ofcourseistillloveyou \ -e DB_URL=file:/data/db.sqlite \ -e NEXTAUTH_URL=http://IP_ADDRESS_OR_DOMAIN \ 其中 USERNAME 为用户名 PASSWORD 为密码 JWT_SECRET 为 JWT 令牌 NEXTAUTH_URL 需要填写项目所用的域名/IP DB_TYPE、DB_URL 为 数据库类型、数据地址 #以下配置为 EMAIL 配置 可选 SMTP_HOST=smtp.gmail.com SMTP_PORT=465 SMTP_SECURE=true SMTP_USER=your gmail email SMTP_PASSWORD=<app password> SMTP_SENDER=your gmail email 启动完成。 后语 设置反向代理 宝塔新建站点 -> 打开SSL - > 反向代理 ->添加反向代理 目标 URL 填写:http://127.0.0.1:3000 配置站点 进入页面登陆,然后创建一个默认的网站,选择 Embed Code ,复制代码到网站的合适位置即可。 WordPress 配置 以下配置仅供参考,主要包括 data-page-id、data-page-url、data-page-title 1 2 3 data-page-id="<?php the_ID(); ?>" data-page-url="<?php $id =get_the_ID();echo get_permalink($id); ?>" data-page-title="<?php the_title(); ?>" 跨域问题 最开始使用的时候可能会出现跨域问题。 在反向代理的配置文件中添加: 1 add_header 'Access-Control-Allow-Origin' 'yousitedomain'; 两种方法,更推荐 DOCKER 如选择手工安装,可能会遇到各种各样的问题。

2022/11/21
articleCard.readMore

使用 acme.sh 签发通配符 SSL 证书

看了很多使用 acme.sh 签发 通配符 SSL 的教程,但讲的比较笼统,所以打算写个详细教程记录一下。 此处以 ZeroSSL 为例,acme.sh也可签发其他证书,可自行研究。 不同品牌证书之间优劣不在此赘述。 2024-08-18更新:增加安装证书以及自动续期。 部署 ACME.SH 下载 acme.sh 1 curl https://get.acme.sh | sh 创建文件链接 1 alias acme.sh=~/.acme.sh/acme.sh 切换证书为 ZeroSSL 1 2 3 acme.sh --set-default-ca --server zerossl #国内服务器推荐 letsencrypt acme.sh --set-default-ca --server letsencrypt 获取zeroSSL eab 打开 https://app.zerossl.com/developer 注册账号并登录,打开页面后点击 Generate 绑定邮箱,输入你注册使用的邮箱 1 acme.sh --register-account -m YourEmail 获取 EAB KID 和 EAB HMAC Key 并且按格式填写 1 2 3 acme.sh --register-account --server zerossl \ --eab-kid EAB KID \ --eab-hmac-key EAB HMAC Key 获取DNSPOD API 这里是通过自动 DNS 解析来进行 DNS 验证,也可选择文件验证,但推荐自动验证。 此处以 DNSPOD为例,其他运营商操作类似。 打开 https://console.dnspod.cn/account/token/token 获取 ID/KEY 配置DNSPOD API 1 2 export DP_Id="YourID" export DP_Key="YourKey" 自动签发通配符 1 acme.sh --issue --dns dns_dp -d *.domain.com -d domain.com --keylength ec-256 此时证书签发成功,绿色的部分为证书的存储路径,部署在服务器即可。 fullchain.cer 是证书内容,xxx.key 是证书的私钥。 安装证书及自动续期 在 shell 命令行输入以下命令 1 2 3 4 acme.sh --install-cert -d *.domain.com -d domain.com --ecc \ --key-file /cert/domain.com/privkey.pem \ --fullchain-file /cert/domain.com/fullchain.pem \ --reloadcmd "service nginx force-reload" 其中具体的目录以及域名需要手动修改。 后语 步骤可能有错误,希望大家斧正。

2022/11/6
articleCard.readMore

IGNORE QUERY STRING 以减少源站压力

之前介绍过,我的博客方案已经更换为全静态,详细可以参考我这篇文章《WordPress “纯”静态化》 理论来说,所有静态资源回源一遍之后,后面的请求都会直接从CDN获取资源,并不会进行回源操作,除非我更新了资源,并且手动刷新资源。 但长久以来,还是从源站上看到了许多已经回源过的资源,而绝大多数的特征都在于 ‘?’ 这个符号之后。遂才想起,忘记了做 ignore query string,此篇文章谨当记录一下操作过程。 正文 之前文章介绍过,我是通过 NS 解析时,将请求划分为境内与境外,境内使用了 腾讯云CDN,境外为CloudFlare。所以此文也分为两个步骤分别进行。 Tencent Cloud CDN 未进行 ignore query string 操作时,在网址后面输入 ‘?*’ 时会自动回源。 此时,在腾讯云CDN的域名管理之中找到缓存配置,修改全部文件配置 修改为下图所示即可: 此时即可看到,没有回源,命中了缓存。 CloudFlare 未进行 ignore query string 操作时,在网址后面输入 ‘?*’ 时会自动回源。 在页面规则中,新增以下配置: 1 2 3 4 URL (required) :*youdomain/*?* Pick a Setting (required):Forwarding URL Select status code (required):301 - Permanent Redirect Enter destination URL (required):https://$1youdomain/$2 如下图所示: 此时再进行 query string 操作时,CloudFlare便会自动的301跳转到无 query string 操作的页面,以达到ignore query string的效果 本方法可能不适用于您的站点,请慎重参考。

2022/10/11
articleCard.readMore

记一条博客被镜像(反向代理)

前段时间闲来无事在看umami统计出来的数据,看到了一条从来没见过的域名的引用信息,原本以为是采集站或者是参考了我的文章,打算去拜读一下的,但是打开页面之后直接看到打开了我的博客。 内容不能说一模一样吧,只能说毫无差别。见过采集的也见过参考的,但是还没见过整个站都“扒”过去的。。。。。 正文 原本以为站点是直接扒下来的,不打算管了之后,后来测试了一下,是直接用 CloudFlare 反代的,而且修改了 host 头,所以禁 IP 防盗链之类的操作基本上都没用了。。。 经过大佬的指点提示我可以用 JS 脚本来应对这种事情。 刚开始的时候直接用 JS 判断窗口域名是否正确,不正确即跳转到正确的域名。 代码如下**(插入到页面 head 或 foot)**: 1 <script>if(document.location.hostname != 'roy.wang'){ window.location.href = 'http://roy.wang';}</script> 但是这个人不讲武德的通过反代把文件内的域名全部替换为了他的域名,就出现了死循环。 后来通过 String.fromCharCode 混淆的方式,把网址给混淆了,这样就防止了域名被修改。 代码如下: 1 <script> if(document.location.hostname != String.fromCharCode(ASCII代码)){ window.location.href = String.fromCharCode(ASCII代码);} </script> 其中 ASCII代码 填写域名转码后的代码,不带 &# 纯数字,用逗号隔开。 转码可以搜索 Unicode转ASCII 即可 JS 加密 但是这样也产生了一个问题,就是其中的 ASCII 码也是非常容易被替换掉的,此时就可以给 JS 代码加密。 具体加密的方法可以使用搜索引擎搜索。 获得加密后的代码随机插入至站点某个引用的脚本其中,就会让那些镜像站的垃圾无从下手。 至此问题就基本解决了。让那些沙雕玩意哭去吧~~

2022/7/29
articleCard.readMore

NodeJS 和 npm 配置全局变量

由于 umami 不再使用 npm 构建,而是改为了使用 yarn 构建安装的方式,所以今天把 umami 删除,重新构建了一遍。 yarn 安装完成后,使用直接报错,查到因为没有配置 npm 成为全局变量,此文记录一下配置过程。 配置 1、获取 npm 安装目录 1 npm bin -g 2、创建软链接 1 ln -s 获取到的地址/npm /usr/local/bin/npm 3、配置用户环境变量 1 2 cd ~ #切换到用户根目录 vi .bash_profile #修改用户环境变量文件 输入 i 切换为输入模式,在 PATH=$PATH: 行后,添加 :第一步获取到的目录,然后按 esc 推出输入模式,切换到命令模式输入 :wq 之后保存并退出。 5、重启配置文件 1 source .bash_profile 6、查看 npm 和 yarn 配置 1 2 npm -v yarn -v 此时 NodeJS 和 npm 全局变量即配置成功

2022/7/22
articleCard.readMore

CloudFlare 解决 CORS 跨域问题

目前博客的 CDN 方案是通过DNS识别境内境外IP,进行不同的解析的,但是使用 CloudFlare 会导致一部分跨域问题,使某些样式无法正常加载,不过最终还是找到了解决方案,记录一下。 配置 #2022-11-6更新一位MJJ大佬提供的更好的方法 在域名左侧选择规则->转换规则 选择修改响应头 具体配置如下图所示: 以下为旧方法,不太推荐使用: 百度出的方法,基本上都是从服务器配置 NGINX 取消跨域限制来解决,但是这样也会伴随着许许多多的问题。CloudFlare也发布了文章,通过 CloudFlare Worker 稍微配置一下即可解决这个问题。 一、创建 CloudFlare Worker 服务 设置服务名称,然后选择 HTTP 处理程序 二、点击快速编辑,将以下代码复制到其中 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 // Reference: https://developers.cloudflare.com/workers/examples/cors-header-proxy const corsHeaders = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET,HEAD,POST,OPTIONS", "Access-Control-Max-Age": "86400", } function handleOptions (request) { // Make sure the necessary headers are present // for this to be a valid pre-flight request let headers = request.headers if ( headers.get("Origin") !== null && headers.get("Access-Control-Request-Method") !== null && headers.get("Access-Control-Request-Headers") !== null ) { // Handle CORS pre-flight request. // If you want to check or reject the requested method + headers // you can do that here. let respHeaders = { ...corsHeaders, // Allow all future content Request headers to go back to browser // such as Authorization (Bearer) or X-Client-Name-Version "Access-Control-Allow-Headers": request.headers.get("Access-Control-Request-Headers"), } return new Response(null, { headers: respHeaders, }) } else { // Handle standard OPTIONS request. // If you want to allow other HTTP Methods, you can do that here. return new Response(null, { headers: { Allow: "GET, HEAD, POST, OPTIONS", }, }) } } async function handleRequest (request) { let response if (request.method === "OPTIONS") { response = handleOptions(request) } else { response = await fetch(request) response = new Response(response.body, response) response.headers.set("Access-Control-Allow-Origin", "*") response.headers.set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") } return response } addEventListener("fetch", (event) => { event.respondWith( handleRequest(event.request).catch( (err) => new Response(err.stack, { status: 500 }) ) 点击保存并部署 三、点击触发器,然后添加路由 填写需要解决跨域问题的域名,如多个文件在同一问题下,可直接通过 * 替代 之后即可解决 CloudFlare CORS 跨域问题。 出于安全原因,请只选择真正需要解决 CORS 错误的路径 可添加多个路由解决多个站点的问题

2022/5/31
articleCard.readMore

RSSAnt - 开源的 WebFeeds 阅读器

由于个人博客的衰落,大量的内容输出者转移到了平台。再加上大量的博客屏蔽了 Feed,导致现在估计已经很少有人再使用 Feeds 阅读器了。 不过大多数的开发者还是保持着 订阅 Feed 的习惯,Feed 不仅无广告,还不用一个个的去博客查看博主更新了没有,只需刷新一下即可查看到最新的更新。 前段时间推荐了涛叔写的 WebFeed 但跨平台可用性差,由于习惯使用 Chrome 在上课的时候想要看订阅的博客很难进行同步,所以在选择更换了方案,选择了 RSSAnt,其网页端也做了自适应适配,非常切合我的需求。 RSSAnt 项目地址:RSSAnt 特性 全平台,无广告,无推荐,专注阅读 支持全文阅读,支持播客和视频内容 智能查找订阅源,智能裂图修复 支持夜间模式,全球 RSS 均可订阅 开源,开箱即用,也支持自己部署 配置要求 Linux, 1G 内存 Docker + 镜像加速器 本文通过 宝塔/手动 两种方式进行配置 部署 RSSANT 宝塔部署 一、获取镜像 打开 宝塔 Docker 管理器 -> 镜像管理 -> 获取镜像; 1 镜像名:guyskk/rssant:latest 二、配置 .env 文件 在 自定义 文件夹新建文件 rssant.env 文件,文件内容如下: 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 # 默认关闭DEBUG,请勿在开发测试之外开启DEBUG RSSANT_DEBUG=0 # 请随机生成一个字符串 RSSANT_SECRET_KEY= # 应用的访问地址 RSSANT_ROOT_URL=http://localhost:6789 # 检查订阅的时间间隔,默认30分钟 RSSANT_CHECK_FEED_MINUTES=30 # 请前往GITHUB设置页面申请,不需要Github登录可留空 # GitHub OAuth callback: # http://<你的域名>/api/v1/accounts/github/login/callback/ RSSANT_GITHUB_CLIENT_ID= RSSANT_GITHUB_SECRET= # SMTP邮件功能,不需要注册功能可留空 RSSANT_ADMIN_EMAIL= RSSANT_SMTP_ENABLE=false RSSANT_SMTP_HOST=smtp.qq.com RSSANT_SMTP_PORT=465 RSSANT_SMTP_USE_SSL=true RSSANT_SMTP_USERNAME= RSSANT_SMTP_PASSWORD= # RSS代理功能,可留空 # 参考项目 cloudflare_worker/rssant 目录下的说明部署代理 RSSANT_RSS_PROXY_ENABLE=false RSSANT_RSS_PROXY_URL= RSSANT_RSS_PROXY_TOKEN= # 以下配置保持不动 RSSANT_SCHEDULER_NETWORK=rssant RSSANT_PG_DB=rssant RSSANT_PG_HOST=localhost RSSANT_PG_USER=rssant RSSANT_PG_PASSWORD=rssant 按需修改后保存 三、创建容器 容器配置如下: 端口映射: 容器端口:80 服务器端口:自定义 目录映射: #目录 1 映射 //用于存储 服务数据 容器目录:/app/data 服务器目录:自定义 #目录 2 映射 //用于存储数据库数据 容器目录:/var/lib/postgresql/11/main 服务器目录:自定义 #目录 3 映射 //用于存储数据库日志 容器目录:/var/log/postgresql 服务器目录:自定义 环境变量设置: –env-file .env文件绝对路径 –log-driver json-file –log-opt max-size=50m –log-opt max-file=10 勾选开机自启动 提交即可,然后打开 设置的 IP + 端口 即可进行使用。 访问 http://localhost:6789/admin/ 用户名: admin 密码: admin 点击页面右上角 “CHANGE PASSWORD” 修改密码。 手动部署 一、配置 .env文件 参考 宝塔部署 中的 文件配置 二、配置脚本 将以下文本配置为 start.sh 其中: -p 6789为自定义端口 –env-file 为 .env 文件绝对目录需填写文件所在绝对目录 -v 映射服务器目录请自定义 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/bin/bash docker volume create rssant-data || true docker volume create rssant-postgres-data || true docker volume create rssant-postgres-logs || true docker rm -f rssant || true docker run -ti --name rssant -d \ -p 6789:80 \ --env-file /www/wwwroot/rssant/rssant.env \ -v /www/wwwroot/rssant/data:/app/data \ -v /www/wwwroot/rssant/postgres/data:/var/lib/postgresql/11/main \ -v /www/wwwroot/rssant/postgres/logs:/var/log/postgresql \ --log-driver json-file --log-opt max-size=50m --log-opt max-file=10 \ --restart unless-stopped \ guyskk/rssant:latest docker logs --tail 1000 -f rssant 执行以下命令: 1 2 3 4 #替换脚本换行符 ./start.sh 为脚本所在绝对目录,需进行修改 sed -i 's/\r//' ./start.sh # 执行脚本 ./start.sh 为脚本所在绝对目录,需进行修改 bash ./start.sh 出现以下日志即服务已经启动 此时打开网站使用。 后语 切记一定不要忘记访问 http://localhost:6789/admin 修改管理员账号密码 关于备份:只需要备份 /www/wwwroot/rssant/postgres/data 这个目录即可。

2022/5/28
articleCard.readMore

WordPress “纯”静态化

前几天才发表了 WordPress 的 CDN 方案,但是很快就反水了,并不是因为那个方案不够好,而是越写博客越发现,静态博客才是个人博客应有的终极形态。 很多朋友都在劝我抛弃 WordPress 转投 Hexo 的怀抱,不过确实,“纯”静态博客个人才是博客应有的样子。为什么要加一个“纯”呢?就像 WordPress,很多人通过伪静态,把页面后缀改为 html,再使 CDN 强制缓存,达到一个静态的效果。但这样的 伪静态 并非 静态博客 的真正样貌。 为什么不使用 Hexo 或者其他方案,因为仅 Hexo 对我来说是完全陌生的,而且其所使用的技术栈,也是我完全不懂的。相较于使用一些完全不懂的东西,不如去继续把手头正在用的改造的更好,毕竟内容才是博客最主要的。 方案选择 选择 WordPress 的理由 其实对于 WordPress 的理由有很多,无论是一些非常好用的插件,还是 Gutenberg,还是整个操作逻辑,对于软件使用的熟练使用程度,其所使用语言对目前我来说一些基本操作都能够实现。都在让我坚持使用 WordPress,以至于更换“纯”静态方案,没有将其替换掉的原因。 为什么要坚持所谓的”纯”静态 传统的 WordPress 加速解决方案都是使用 WP Super cache 之类的插件,生成缓存,然后生成 html 文件,使用 CDN 强制缓存,但这么做的问题是,虽然展示的是静态的,但其还是需要执行 SQL 语句来调用数据的,虽然目前市面上的 0SQL 主题不少,但是大多数还是无法避免这个操作。 而“纯”静态化,直接是 0SQL,无需后端,可以极大的缩少服务器资源的占用。就算你的服务器在海外,只要域名备案,通过国内的 CDN,都可以获取非常可观的速度。 目前方案的问题 目前方案主要拥有下面两个问题:搜索不可用以及评论不可用。 我对于这两个问题的解决直接放弃了。 本身国内的个人备案是不支持交互式网站的,而且垃圾评论实在是太多,以至于我后面开启了 reCAPTCHA,还是不断的有人来打广告。。。。 关于搜索,因为每个文章都拥有相应的 tag,点击一下即可显示相关文章,一部分承担了搜索的功能。 两个问题带来的影响都不算大,索性就不去管了,去专注内容。 更新不及时,需要手动去刷新 CDN 缓存。 Simply Static 插件地址:Simply Static 这是我目前所选择方案所使用到的插件,它最大的好处就是通过缓存可以直接将 WordPress 页面生成静态文件,并且可以将文件中的地址自动替换,直接放到服务器即可。 方案介绍 所需要的要求如下: 需要用到两个域名: console.domain.com //用于 WordPress 动态资源的域名 domain.com //用于静态博客域名(博客的主域名) 两个站点都需要位于同一服务器内 其余要求可以打开插件 Simply Static › Diagnostics 查看有哪些地方不符合规则 配置 Simply Static 设置 原理很简单,就是通过 Simply Static 这个插件,直接在 domain.com 也就是你博客的主域名的目录里生成静态文件。 这个插件,需要进行以下设置: GENERAL 1、Destination URLs 此处的作用是将 WordPress 生成的静态文件中 动态博客地址,转为主博客的地址(静态地址) 此处需要选择 Use absolute URLs 然后填写你博客的主域名 2、Delivery Method 此处的作用,是选择把生成的静态文件通过何种方式存储。 此处选择:Local Directory 3、Local Directory 设置生成的静态文件存储的目录 此处填写 主博客所设置的目录即可。 INCLUDE/EXCLUDE 此处设置一处:Additional URLs 输入内容主要是不包含在静态页面中的链接,但还是需要生成静态文件的链接。 此处需要设置 动态博客 的文件链接。 主要是 sitemap、robots.txt 其他设置 其他设置可根据自身需要来进行设置,诸如可以设置:附加文件和目录、要排除的 URL、 临时文件目录、HTTP 基本身份验证(此处强推) 全部设置完毕后,可以在 Diagnostics 处进行检测,当没有错误即可进行手动生成。 生成静态文件 当设置完毕,并且检测没有问题后,在 Generate 中点击 GENERATE STATIC FILES 即可生成文件,根据需要生成的文件大小不同所需时间也不同。 CDN 设置 CDN 还是采用通过 DNS 区分国内国外用户,国内用户走腾讯云,国外用户走 CloudFlare。此处与之前的方案没有改变。 因为是是纯静态文件,所以无论国内还是国外的用户都会有非常不错的体验。 此处可以参考 《目前博客的 CDN 解决方案》 无论是 腾讯云还是CloudFlare主要: 设置防盗链 开启强制缓存,并设置缓存过期时间 设置浏览器缓存过期时间 开启HTTPS 打开 压缩静态文件 对整个网站做出更改后,可以通过 腾讯云CDN、CloudFlare 两个 WordPress 实现刷新缓存,目前无其他比较好的方法。 折腾来折腾去还是找到了对我还是对用户来说都最好的解决方案,接下来就是专心写文了。

2022/5/24
articleCard.readMore

使用 WP-CLI 更换 WordPress 域名

很多时候,WordPress 更换域名是一件及其麻烦的事情,一则需要手动去修改数据库,二则不确定是否会不会有漏掉修改的地方。(作为一个博客更换过十几个域名的小老铁深受其害) WordPress官方推出了用于管理 WordPress 的命令行工具——WP-CLI,我们只需借助其中批量修改数据库的功能即可近乎完美的快速完成 WordPress 站点的域名修改。 WP-CLI配置要求 类 UNIX 环境(OS X、Linux、FreeBSD、Cygwin),Windows 环境中的支持有限 PHP 5.6 或更高版本 WordPress 3.7 或更高版本。比最新 WordPress 版本更早的版本可能会降低功能 修改域名 一、安装 WP-CLI 使用以下命令进行安装配置 WP-CLI 1 2 3 4 5 #下载 WP-CLI curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar #配置全局变量 chmod +x wp-cli.phar sudo mv wp-cli.phar /usr/local/bin/wp 使用以下命令检测配置是否正常 1 wp --info 如果出现以下错误,则需要解禁 PHP函数:proc_open 解禁PHP proc_open 函数即可解决 配置正常返回以下信息: 配置正常 二、修改站点域名 打开 WordPress 站点目录(此处以宝塔默认为例,如您进行了其他配置,请修改 1 2 3 4 5 6 7 #打开站点目录 cd /www/wwwroot/wordpress #测试站点需要修改的地方,此命令不会直接运行,以下命令二选一即可。 #此命令适用于 root 用户 wp search-replace 'http(s)://olddomain' 'http(s)://newdomain' --dry-run --allow-root #此命令适用于非 root 用户 sodu -u wp search-replace 'http(s)://olddomain' 'http(s)://newdomain' --dry-run 返回以下信息: 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 [root@localhost wordpress]# wp search-replace 'https://te1.roy.wang' 'https://te.roy.wang' --dry-run --allow-root +------------------+-----------------------+--------------+------+ | Table | Column | Replacements | Type | +------------------+-----------------------+--------------+------+ | wp_commentmeta | meta_key | 0 | SQL | | wp_commentmeta | meta_value | 0 | SQL | | wp_comments | comment_author | 0 | SQL | | wp_comments | comment_author_email | 0 | SQL | | wp_comments | comment_author_url | 0 | SQL | | wp_comments | comment_author_IP | 0 | SQL | | wp_comments | comment_content | 0 | SQL | | wp_comments | comment_approved | 0 | SQL | | wp_comments | comment_agent | 0 | SQL | | wp_comments | comment_type | 0 | SQL | | wp_links | link_url | 0 | SQL | | wp_links | link_name | 0 | SQL | | wp_links | link_image | 0 | SQL | | wp_links | link_target | 0 | SQL | | wp_links | link_description | 0 | SQL | | wp_links | link_visible | 0 | SQL | | wp_links | link_rel | 0 | SQL | | wp_links | link_notes | 0 | SQL | | wp_links | link_rss | 0 | SQL | | wp_options | option_name | 0 | SQL | | wp_options | option_value | 2 | PHP | | wp_options | autoload | 0 | SQL | | wp_postmeta | meta_key | 0 | SQL | | wp_postmeta | meta_value | 0 | SQL | | wp_posts | post_content | 2 | SQL | | wp_posts | post_title | 0 | SQL | | wp_posts | post_excerpt | 0 | SQL | | wp_posts | post_status | 0 | SQL | | wp_posts | comment_status | 0 | SQL | | wp_posts | ping_status | 0 | SQL | | wp_posts | post_password | 0 | SQL | | wp_posts | post_name | 0 | SQL | | wp_posts | to_ping | 0 | SQL | | wp_posts | pinged | 0 | SQL | | wp_posts | post_content_filtered | 0 | SQL | | wp_posts | guid | 3 | SQL | | wp_posts | post_type | 0 | SQL | | wp_posts | post_mime_type | 0 | SQL | | wp_term_taxonomy | taxonomy | 0 | SQL | | wp_term_taxonomy | description | 0 | SQL | | wp_termmeta | meta_key | 0 | SQL | | wp_termmeta | meta_value | 0 | SQL | | wp_terms | name | 0 | SQL | | wp_terms | slug | 0 | SQL | | wp_usermeta | meta_key | 0 | SQL | | wp_usermeta | meta_value | 0 | PHP | | wp_users | user_login | 0 | SQL | | wp_users | user_nicename | 0 | SQL | | wp_users | user_email | 0 | SQL | | wp_users | user_url | 1 | SQL | | wp_users | user_activation_key | 0 | SQL | | wp_users | display_name | 0 | SQL | +------------------+-----------------------+--------------+------+ Success: 8 replacements to be made. 确认需要修改的信息无误后,直接修改即可: 1 2 3 4 #此命令适用于 root 用户 wp search-replace 'http(s)://olddomain' 'http(s)://newdomain' --allow-root #此命令适用于非 root 用户 sodu -u wp search-replace 'http(s)://olddomain' 'http(s)://newdomain' 至此数据域名修改域名完成。 这个通过 WP-CLI 修改域名还是十分方便的,但切莫忘记修改SSL、以及站点等相关信息。

2022/5/22
articleCard.readMore

记一次 POST 请求 重定向的错误

由于公开的 NSFW-API 服务所占用的资源越来越多,位于腾讯云的境外服务器内存已经开始捉襟见肘了,所以就把该服务迁移到了国内空闲资源较多的这台服务器上。 由于之前服务使用的域名 api.roywang.dev 是没用备案的,所以只能使用已经国内的备案域名。为了无缝衔接,只得将 api.roywang.dev 重定向至 api.roy.wang。 配置服务和重定向的操作完成后,测试了一下,很多 NSFW 图片还是轻松过审了,查看了网站日志,发现NGINX 在重定向时,将 api.roywang.dev 的 POST 操作给转换成为了 GET,以至于产生了404错误,导致服务失效。 在整理解决办法的时候,无意中看到:“由于某些原因,在使用用户代理时,301、302会将 POST 方法改为 GET 方法,307、308在重定向时不允许浏览器将 POST 请求重定向为 GET 请求” 将重定向方式从 301/302 改为 307/308即可 NGINX 重定向配置: 1 2 3 4 5 #REWRITE-START if ($host ~ '^api.roywang.dev'){ return 307 https://api.roy.wang$request_uri; } #REWRITE-END

2022/5/21
articleCard.readMore

目前博客的 CDN 解决方案

之前更过一篇 WordPress 配置CDN的文章 《WordPress 配置CDN,免对象存储,加速域名首页自定义》,感觉这个方案太水了,而且后面也遇到了各种各样的问题,然后重新设计了 CDN 方案,整体来说还算是满意,今天分享出来跟大家聊聊,我会详细说一说具体的配置,以及这么做的原因和弊端。 方案导图 话不多说,直接上图 通过 DNS 进行境内境外分流 国内用户 动态资源 - 百度云加速 原因 选择百度云减速(bushi 云加速得原因很简单——收录。 绝大多数建站的站长肯定是希望盈利的,但至少是希望尽可能的去抹平每年域名、服务器、CDN的费用。可能是出于兴趣建站,毕竟谁不希望少花点钱呢?为了均衡成本,是需要通过流量来变现,而被搜索引擎收录所带来的流量一直是很可观的,事实上很多站点也是这么做的。 中文互联网内主流的搜索引擎也就是三家:百度、Google、Bing。 Google虽然情况特殊,国内用户无法访问,但是因为对百度、Bing 特供版的不满。很多人将其当作首选的搜索引擎,收录速度虽然很快,但是 关键词排名难做,特殊原因导致中文用户基数少是其主要的问题,所以所获的流量不是很多。 Bing的情况有些特殊,虽然国内可以直接访问,而且没有像百度这样充斥着广告,国内用户虽然也有存量,但由于多年被国内互联网环境培养的用户习惯导致,Bing的用户基数很小,虽然收录很快但是站长能从中获取的流量也并不是很多。 百度,虽然百度充斥着恶臭以及各种各样的问题,但其还是作为中文互联网的搜索引擎的 No.1。由于某些特殊原因,百度的SEO优化甚至演变成为了一门十分值得研究的学问,一个新的网站如果想被百度快速大量的收录,其中所需要的条件多种多样,很多高阶条件是新人站长无法满足的,此处不再详细赘述。对于无法满足的这些条件的站长,百度还是提供了一条明路——百度云加速,这也是我选择它的原因。 缺点 百度云加速的缺点很明显,慢,名为加速,实则减速。现在的免费版仅仅提供可怜的三个节点(但经过我实测只有两个)它的商业模式采用的套餐制度,如果你想拥有多节点的话,加钱,最便宜的一年四位数的那种。当然不可能花钱的,所以国内的静态资源没有托管到百度,而是使用的 腾讯云的 CDN。 配置 百度云加速的配置极其简单,甚至属于对接上就行的辣种。 打开面板打开 流量功能->引擎加速收录 里的 新站百度报到 以及在 同在 流量功能 中的 永久在线 在 其他 -> 特定页面规则 中添加规则,如下所示(此处仅以WordPress为例,其他不同程序配置不同,其中规则优先级1>2): 1 2 3 4 5 6 7 规则1 URL: domain/wp-admin/* 规则配置: 缓存粒度设置 -> 不缓存 规则2 URL: domain/* 规则配置1: 缓存粒度设置 -> 细致 规则配置2:浏览器缓存有效期 -> 1天 规则1 规则2 至此配置完成。 静态资源 - 腾讯云 CDN 原因 稀里糊涂的选择了腾讯云 CDN,主要是可是白嫖,可能感觉服务器也是腾讯云的可能有特殊加成(?)不太记得了,但是使用了之后的体验还是非常不错的,比我用过的 UPYUN 还有 百度云加速 感觉好。 缺点 目前使用起来没感受到啥明显缺点,但是可能以后会感受到,毕竟不是一直可以白嫖的,未来的缺点就是贵。不对,这是我的缺点 配置 分享一个我使用回源策略,回源 HOST 填写 加速域名,然后在这个域名对应的站点目录中创建 软连接软件,然后将 WordPress 站点目录链接至 CDN 加速域名的站点目录,如下图所示: 完成初步配置后(指接入CDN),因为公开的加速服务不理想,所以我直接通过国内的服务器进行了反代,然后设置缓存,然后通过腾讯云CDN缓存起来,网站速度提升了一大截。 但由于此服务仅是供自己使用的,所以需要打开防盗链。 进入CDN域名管理页面->访问控制,第一个既是防盗链,输入需要访问资源的域名即可。其余配置如下图: 进入缓存配置->缓存键规则配置,设置为全部文件,不忽略参数,不忽略大小写 缓存配置->节点缓存过期配置,新建规则如下: 1 2 3 类型:文件后缀 内容:jpg;png;js;css;ico;woff2;woff;tff 缓存行为:缓存七天,强制缓存 回源配置 -> 回源跟随301/302配置 打开 HTTPS配置 -> 强制跳转 打开 高级配置 -> HTTP响应头配置 (此项配置是为了防止出现 CORS 错误 1 2 头部参数:Access-Control-Allow-Origin 头部取值:你需要引用静态域名的域名,如图示例。 打开 高级配置 -> 智能压缩,如下图所示: 至此,CDN配置完毕,但是 WordPress 需要将静态资源地址替换为加速地址 此处以 WPJAM BASIC 插件为例(强推),选择云存储 腾讯云COS,然后输入加速的 CDN 域名。 保存即可,此操作可替换绝大多数静态资源链接,也可以通过反代配置自己的 Google字体加速、Gravatar加速。 国外用户 动态+静态资源 - CLOUDFALRE 原因 免费还是很香的,而且提供免费的防御,国外 CloudFlare 的速度还是非常快的。主要还是能白嫖。 缺点 无。。。。。。。可能对国内速度不佳? 配置 CloudFlare 的配置堪称傻瓜式的,也是通过 峰峰 的教导,才正确的打开了 CloudFlare 的配置方式 本站采用的是 CNAME接入,详细的接入教程参考本站文章 《CLOUDFLARE 免费官方 CNAME 接入》 目前我的配置方法就是在 规则 -> 页面规则 中添加一条页面规则,具体配置如下: 1 2 3 URL: domain/* 设置1:缓存级别 -> 缓存全部内容 设置2:边缘缓存TTL -> 1个月 为什么不设置 /wp-admin/* 为不缓存。因为免费规则只有三条,超出就要收费,另外在国内不需要访问海外线路的 /wp-admin/ 选择 速度 -> 优化 Auto Minify,三个选项全选 启用 Brotli 至此 CDN 优化方案完成,此方案还是存在很多暂时没有发现的问题,可能会有更好的方案。能力至此,希望各位斧正。 此方案也是目前博客所使用的方案。

2022/5/19
articleCard.readMore

myTinyTodo - 简洁、高效、功能强大的开源待办程序

曾经有段时间,事情很多,每天早上起来都不知道何从下手,以致越忙越乱。很多不该搞杂的事情让我给搞砸了。 后来养成了把东西写下来的习惯、但是这样不够方便、也不能随时想看就看,也是非常苦恼的。 现在市面上很多待办程序,无论是 微软待办 还是其他的待办程序,都比较臃肿。 最主要是数据全部不在自己手中,这是我无法接受的。 项目简介 项目官网:myTinyTodo 该项目基于 PHP(54-74) 和 jQuery开发。支持 SQLite 以及 MySQL 特性 多个任务列表 支持标签 设置截止时间 设置任务优先级 密码保护 不同的排序,包括拖放排序 你如果也有类似的苦恼,个人感觉这个项目可以解决这部分问题。 配置 myTinyTodo 一、打开网站下载程序。 二、新建网站并且将下载下来的文件上传到站点目录并解压 三、打开以下地址运行安装程序 1 http(s):// youdomain /setup.php 此时需要选择使用的数据库,这里目前有个问题,暂时不了解作者所设计的 MySQL数据库 的逻辑,但导入数据无法备份恢复数据。 总而言之一句话,不要使用 MySQL 请选择 SQLite 点击 install 进行安装 安装完成,请删除目录下的 setup.php 四、设置 设置其中只讲一点,有关于 会话处理机制(Session handling mechanism)请选择 PHP,否则会出现意想不到的错误。 此时即可开始设置使用。 后语 有关程序的升级:保留程序目录的 DB 目录以及其中文件,其他目录以及文件直接用新目录覆盖即可。 这也是我目前所使用的一款 todo 程序,如果使用得当,可以大大提高生活以及学习效率。

2022/5/16
articleCard.readMore

CloudFlare 官方免费 CNAME 接入

CloudFlare 是很多站长在建站时首选的 CDN 服务商,免费、无限带宽,抗DDOS,都是选择它的理由,但由于某些方面原因,使得国内的访问速度堪忧。由于 CloudFlare 的 NS 服务器在国外,所以还需要尽可能的降低延迟,来提升网站体验,所以就有了CNAME 接入这种方式,使用国内的 NS服务器,可以一定程度缓解加载时间过长的问题。 之前可以使用 CloudFlare 提供的合伙人密钥,使用第三方网站进行添加 CNAME 接入,但由于目前 CloudFlare 的防滥用政策日渐缩紧,所以禁止了通过合伙人密钥来进行添加 CNAME 接入。各家第三方的接入平台如 笨牛网 等已经禁止了用户登录。 但目前 CloudFlare 提供了一种官方 CNAME 接入的方式。 CloudFlare for SaaS 之前使用这个功能是收费的,但自 2022/3/15 起,官方开启了免费额度。每个账户拥有目前 100 个CNAME接入的免费额度,而超过 100 的部分也由每月 2美金 每个的价格降低至了每月 0.1美金 每个。 我们所依赖这个功能所提供的免费额度,来实现免费 CNAME接入。 配置 CNAME 接入 在配置之前,您需要准备两个域名以及PayPal账号: 1 2 a.com : 此域名需要通过 NS 的方式接入CloudFlare b.com : 此域名即为你需要加速的域名。 如何通过 NS 接入,不再详细演示。 开通CloudFlare for SaaS 打开网站配置页面,并且找到 SSL/TLS 下的自定义主机名。 订阅 CloudFlare for SaaS 需要绑定外币信用卡或 PayPal,个人建议绑定PayPal(此过程不会发生扣费) 由于之前已经开通过了,所以无法演示,根据页面提示进行操作即可。 设置回源域名 在配置 CNAME 接入之前,需要设置回源所需的域名。 在DNS选项中,设置一个自定义的接入CloudFlare的二级域名(即使用上文中提到的 a.com 设置一个二级域名解析到你的网站IP),解析至需要回源的 IP 或域名,并且打开 CloudFlare 的代理。 然后打开 SSL/TLS 下的自定义主机域,在回退源中,填写设置好的域名,并且点添加回退源,等待生效。 此时即可增加需要 CNAME 接入的域名 点击添加自定义主机名,输入你需要接入的域名,并且选择最低TLS版本(如不懂,请保持默认)以及证书验证方式即可。点击添加自定义主机名。 设置国内 NS 服务商 DNS 解析 提交后,即可看到正在初始化,在第三方的 NS服务商处设置好相应的NS解析,等待检测即可。 并且同时,需要将 需要接入的域名 解析到 回源域名 上 全部设置完成后即可等待解析生效。 解析生效 解析生效 此种方法需要 PAYPAL 账号,而且好处相比第三方,数据保存在自己的手上。 而且所有关于 CNAME 接入的相关设置与统计数据,均与 通过 NS 接入的域名共享。

2022/5/13
articleCard.readMore

LskyPro2 - 拓展、UI、性能俱佳的开源图床程序

现在由于服务器带宽太小,为了节省带宽资源,已经很多站点都在使用图床。 很多人都在使用如 WeiBo、Gitee 此类平台为图床,由于使用人数、成本增加过高,这些平台也相继开启了防盗链。现在绝大多数都无法再作为图床使用。 此时如果选择自建图床,配合诸如 百度云/又拍云 此类拥有免费额度的 CDN 还是非常不错的。 曾经也有计划构思过做开放的免费图床,但是许多程序的性能还有UI设计大多不太满意,还有成本原因所以没有开放,一直都是自用。 前段时间发现 Lsky Pro 更新了 2.0 版本,以前用过 1.0 的版本但是整体UI不太满意,但是看了 2.0 的版本,UI还有性能也非常满意,借着这个机会做了免费的图床:PUBLIC IMAGE SERVICE 有需要的朋友可以看一下。 项目简介 项目地址:Lsky Pro 文档地址:Lsky Pro Docs 特性 支持本地等多种第三方云储存 AWS S3、阿里云 OSS、腾讯云 COS、七牛云、又拍云、SFTP、FTP、WebDav、Minio 多种数据库驱动支持,MySQL 5.7+、PostgreSQL 9.6+、SQLite 3.8.8+、SQL Server 2017+ 支持配置使用多种缓存驱动,Memcached、Redis、DynamoDB、等其他关系型数据库,默认以文件的方式缓存 支持图片水印、文字水印、水印平铺、设置水印位置、X/y 轴偏移量设置、旋转角度等 支持通过接口上传、管理图片、管理相册 支持在线增量更新、跨版本更新 环境需求 PHP >= 8.0.2 PHP 拓展:BCMath、Ctype、DOMFileinfo、JSON、Mbstring、OpenSSL、PDO 、Tokenizer、XML、Imagick PHP 函数:exec、shell_exec、readlink、symlink、putenv、getenv 配置 Lsky Pro 本教程基于宝塔进行。 下载安装包 打开 Lsky Pro releases 选择最新版本下载。注:请不要下载 Source code 新建站点,将安装包上传到网站目录并解压 创建数据库 在宝塔面板左侧选择 数据库->添加数据库 输入相关信息即可提交 设置网站相关配置 关闭 放跨站攻击、修改网站运行目录:打开站点设置->站点目录,把 防跨站攻击(open_basedir) 前面勾取消,运行目录选择 /public 设置站点伪静态:选择 伪静态,输入以下伪静态规则,然后保存: 1 2 3 location / { try_files $uri $uri/ /index.php?$query_string; } 配置 SSL,PHP 版本切换为 8.0 运行环境配置 打开 PHP 设置,配置相关运行环境,由于宝塔默认已经安装了部分相关拓展,开启了部分相关函数,仅需配置以下函数、拓展即可 安装拓展:fileinfo、imagemagick 开启函数:readlink、symlink、putenv、exec、shell_exec、chown 执行程序安装 打开绑定的域名,程序会自动检测运行环境是否合格 点击下一步,然后输入数据库以及站点相关信息即会自动安装 至此安装完成 后语 站点目前支持三种鉴黄方式:腾讯云、阿里云、NsfwJs,关于 NSFW API 的安装可以点击链接查看教程。 有关CDN配置可以参考有关这篇 文章 有关站点配置等相关信息,或其他高阶操作可查看官方文档。

2022/5/10
articleCard.readMore

WordPress 更换 Feed 类型

前段时间发表了 WebFeed倡议书,倡议书中关于 Feed 类型,推荐所有独立博主都使用 atom,但 WordPress 默认 Feed 类型使用的是 RSS。 关于如何切换为 atom,WordPress官方并没有给出解答,遍寻百度、谷歌等等没有搜索出关于切换 WordPress Feed类型的教程。遍寻WordPress代码终于找到了切换的地方。 切换 Feed 类型 WordPress 在 /wp-includes/feed.php 文件中大约89行处,定义了一个函数——default_feed,仅需将该函数第二个值从默认的 rss 设置为 atom 即可 Feed 类型对照表: 1 2 3 4 5 atom: $default_feed = apply_filters( 'default_feed', 'atom' ); rss0.92: $default_feed = apply_filters( 'default_feed', 'rss' ); rss2: $default_feed = apply_filters( 'default_feed', 'rss2' ); rss 1.0/ rdf: $default_feed = apply_filters( 'default_feed', 'rdf' ); 更改完毕,刷新一下页面即可切换完成。 默认的 RSS 其实也没什么问题,只不过目前各类博客对于 RSS 输出的内容有些混乱,使用 Atom 会使 Feed 更加规范。

2022/5/9
articleCard.readMore

WebFeed 倡议书

什么叫独立博客,独立博客到底该不该开放Feed。 先说说为什么会出现独立博客的概念。一个所谓的“独立”博客个人感觉需要包括三点: 拥有一个可供自主解析的二级域 大部分文章为博主原创! 不依赖于类似 微博、知乎、微信公众号等自媒体平台 由于个人平台输出内容获取的收益无法与此类自媒体平台相比,而且还承担着各种各样的风险以及成本,很多的内容创作者便从个人建站的时代,进入了依赖于第三方平台的自媒体时代,去输出内容。此时独立博客的概念出现,并且由此,独立博客的数量开始走下坡路,但仍有部分博主因为各种各样的原因,依旧保留独立博客。(还有一种说法是不受制于各平台太过于严苛的内容审核机制,仁者见仁智者见智了 第二个问题,独立博客该不该开放Feed。很多独立博客或是因为防止文章被大批量的采集,或是维持网站流量,或是因为各种各样的原因选择关闭了Feed,但这样是对 Web 互联网以及独立博客的概念的影响是非常负面的。 以下内容作者:涛叔 原文地址:https://taoshu.in/webfeed/lets-web-feed.html 为了解决以上部分问题,也为了为了推动开放 Web 生态的发展,涛叔 设计并开发了 WebFeed 扩展。使用 WebFeed,用户可以在浏览器中方便地订阅独立博客,从而获取类似微信公众号的体验。但目前基于 WebFeed (RSS/Atom) 的订阅方案还有不少问题。今天向广大作者发出倡议,希望能一起解决这些问题。 如何方便读者快速订阅博客 我们虽然可以在博客上指明 Feed 链接,但不同博客的链接位置却不尽相同,多数在页面的右上角,少数在页面底部,还有一些在左边或者右边。有的网站虽然提供 Feed 链接,却只在首页等特殊页面展示。如果用户只是阅读某篇特定的文章,则不能第一时间发现 Feed 链接。 为了解决这个问题,我建议所有作者都为博客加入 rss-autodiscovery 支持。简单来说就是在每个页面的<head>部分都添加特殊的<link>标签: 1 2 3 4 <link rel="alternate" type="application/atom+xml" title="RSS" href="https://taoshu.in/feed.xml"> 这里的 type 属性指明 Feed 类型。如果是 RSS 需要写成 application/rss+xml,Atom 则需要写成 application/atom+xml。 有了这样标准化的 <link> 标签,我们才有可能实现自动发现、一键订阅等功能。 怎样选择合适的 Feed 类型 我们知道 Feed 分 RSS 和 Atom。虽然 RSS 历史更久远,兼容性更好,我还是建议大家选用 Atom 格式。这是因为在 RSS 规范里面,每一个 <item> 只有一个 <description> 字段。有的站长用它输出摘要,有的站长用它输出全文。局面比较混乱。而 Atom 规范则分别定义了 <summary> 和 <content> ,在语义上更加清晰,客户端在解析的时候也更加简单。 Feed 文件体积过大 很多作者为了方便读者订阅,不但在 Feed 中输出了全文,而且还把所有的历史文章都加到了 Feed 中。这样会生成一个非常大的 XML 文件。Feed 文件体积过大,一方面会消耗不必要的服务器流量,导致下载时间过长,另一方面还会给客户端解析带来非常大的负担。更重要的是,我们不可能在短时间内写很多文章,所以用户订阅 Feed 的时候大多数情况下下载的 XML 文件内容都只有很少变化或者根本没有变化。 为此,我建议各位作者把 Feed 当成一种更新同步机制,而非内容同步机制。也就是说,大家只需要把最新发布的内容输出到 Feed 中就可以了。比如,我们可以只针对最新的十篇文章生成 Feed 文件。读者只需按照一定的周期来检查是否有新的 Feed 就不会错过新发布的文章。为了进一步减少 Feed 文件的体积,我进一步呼吁大家只在 Feed 中输出文章摘要。如果读者有兴趣,则可以作者的博客上继续阅读。 顺便提一个小细节。有的作者为了让读者回源站阅读全文,不但没有在 Feed 中输出全文,而且在输出的摘要的最后还附加了一个超链接,来引导读者跳转到自己的博客。其实这大可不必。因为 Feed 信息中已经包含了文章链接,阅读器一般也都会再显示一个阅读原文按钮。如果在文章摘要中再输出一个,那就会显示两个原文跳转链接,非常难看。 Feed 信息不完善 这个问题基本不影响用户订阅 Feed。但我还是建议作者能把网站标题、网站图标、主页链接、个人邮箱等信息加现 Feed 文件。 统一内容编码 建议大家统一使用 UTF-8 编码。 以上就是我所想到的 Feed 订阅问题。总结一个就是使用 Atom 格式,加入自动发现的 <link> 标签,只输出最新几篇文章的摘要,完善站点信息,比如一使用 UTF-8 编码。欢迎大家留言讨论。也欢迎大家关注WebFeed 项目。

2022/5/8
articleCard.readMore

比特币:后现代的庞氏骗局「转译」

文章原标题:Bitcoin: The Postmodern Ponzi 原文地址:https://www.stephendiehl.com/blog/ponzi.html 在此感谢 Mr. Stephen Diehl 的授权。 当然,如果你已经进场 加密货币,或者您就是其中的利益相关者,完全可以不用看这篇文章,它是给没有利益相关并且理性客观的人准备的。 世界是一个越来越陌生的地方,关于我们所经历的时代,我最喜欢的一句话是,我们都处于不知所措和无动于衷的叠加状态。当前事件的严重性和发生翻天覆地变化的可能性是势不可挡的,而停滞和社会硬化的现实似乎毫无意义地令人沮丧。这种感觉在科技行业中最为普遍和明显。 像许多人一样,我写了一些关于金融科技和新的右翼民粹主义对金融市场的影响的文章,有一些前所未有的事情正在发生,将在未来十年的技术领域产生影响。四年来,每一篇左翼思想文章都驳斥了这样一种观点:故事和现实已经脱节,现代的情况是,我们在一个理性创造和权力难以区分的世界里漂泊不定。我不会再详细说明,但我忍不住看到,在我们行业中几乎所有关于加密货币的讨论中都存在这种现象。 我参与了关于这个话题的大量评论和辩论(免责声明:我不是粉丝),我对政治意识形态完全主导这个话题的观点感到震惊。老派正在改变技术,如果你认为自由主义主导了我们行业的决策,那么你就完全脱离了现实。加密货币是煤矿中的金丝雀,警告我们关于无政府资本主义意识形态上升趋势的毒害程度,最能体现在一种技术上,该技术几乎无损地将废物转化为金钱,完全不考虑人力成本或外部环境。 甚至很难就加密货币的知识进行交流,因为如此多的讨论都是用没有意义的术语(即“去中心化”、“区块链”等)构成的,而技术上的蒙昧主义和神秘主义是加密货币投资书上不可回避的内在部分。后现代主义这个词本身就是一个无法定义的艺术术语,它指的是一套偏离现代主义的哲学思想,一种拒绝大的历史叙事、客观的价值体系和连贯的意识形态。我声称比特币运动的经济结构可以最恰当地描述为后现代庞氏。 在这个世界上,即使是已经被证实的病毒的存在也可能会受到质疑,谁来说什么是骗局,什么不是骗局,或者比特币开采是否正在使海洋沸腾——相信我,我在撒谎。 典型的庞氏骗局是一场金融欺诈,在烟雾缭绕的房间里,老人们在银行账户周围转移资金,操纵会计报表,不断地从新投资者那里获利支付老投资者的报酬,同时保持回报的错觉。从经济学角度来说,投资庞氏骗局是一种赌博形式,如扑克或轮盘赌。赌博是一种消费,与生产性企业不同,赌博过程不会创造任何价值。有一个固定的资金池,每个获利的人都必然从其他人的亏损中获利。任何一个赢家都必然由多个输家支付。总体而言,赌博不会产生财富或效用,而是简单地将输入资金重新分配给不同的参与者。从事此类活动的预期回报是负数。 在 Bernie Madoff 的二十年骗局中,许多投资者绝对赚钱,而在正确的时间投资庞氏骗局确实可以让你变得非常富有。有些人也因玩轮盘赌而变得非常富有,但大多数人不会,而且你永远不会听说那些失去一切的人。这就是为什么庞氏骗局是非法的并被认为是一种欺诈形式的本质,它们是一种依赖于信息不对称和勾结的赌博形式,社会其他人承担清理烂摊子以纠正受害者的成本和负面影响。 比特币也不例外。购买比特币就是购买数据库中的一条代码,一个非常昂贵的比特集合。它在现实世界中没有表现形式,什么也不生产,没有资产、收入、客户、现金流或股息。比特币的净现值为零,永远不可能非零。它的价值纯粹来自一种递归投机形式,一种错觉,即更多的受害者会来投机,从而使骗局长期存在,并推高投机的“价值”。这是一份以人类轻信为基础的期货合约,赌未来会有更多的傻瓜来为现在的傻瓜接盘。爱因斯坦曾经说过:“有两件事是无限的:宇宙和人类的愚蠢;而我不确定宇宙”,在今天这个奇怪的颠倒的世界,你现在可以投资爱因斯坦的论文,它叫做比特币。 价值不能纯粹建立在这样一种信念之上,即相信有一群傻瓜愿意为一种不确定的东西单调地付出更多。每个学生都应该直观地看到,这种抢椅子的游戏不能也不会永远持续下去。现实有一种主张自己的方式,在某些时候,这个计划将耗尽一群傻瓜,他们将在一个在现实世界中完全无用的非货币的集体幻想中占有可悲的份额。比特币完全不适合用于货币目的,它们不支持经济活动,不适合作为交易单位进行交易,并且除了空洞的投机泡沫之外永远无法发挥任何功能。 这种新型骗局与传统的庞氏骗局在法律上有着重大的区别。我们看到的不是烟雾弥漫的房间,而是后真相蒙昧主义的阴霾,这是由我们的新媒体景观引起的,它以幻觉、对专家的不信任和混淆作为一种手段,以掩盖财富再分配方案的潜在机制。这就是为什么我们称这种欺诈为“后现代”计划的本质,老练的投资者完全了解欺诈的机制,所有操作都是公开进行的,但欺诈取决于个人的集体无知/或过度自信。个别人的市场退出时机可能是正确的,而其他人则不会。这与赌徒的谬论没有什么不同,他们以某种方式相信他们永远不是被割韭菜的那一个。 比特币和其他代币之间的区别是无关紧要的,只要它们具有相同的基本经济结构,即兜售基于技术蒙昧主义的快速致富投资。唯一的区别是,其他加密资产只是具有不同的财富再分配机制和不同的外部性,它们为了继续存在而向社会倾倒。加密货币的经济学从根本上讲是不健全的,这个故事与庞氏骗局本身一样古老:无中生有的钱,早点进来,不要问它来自哪里。 可以说,我们的制度确实允许许多同样可疑的计划在法律范围内发挥作用,其中许多是对文明的净消耗。 Amway 是一家价值 84 亿美元的多层次营销公司,在美国合法经营,法院一直裁定其不是传销。而且安利不是传销,对吧?投资比特币具有许多相同的特征,但不是说服你的朋友成为保健品的分销商,而是依赖于软件开发人员的说法,即一些永远只是一些软件软件将为早期购买者创造巨额财富通过未指明的方式。 公平地说,并非所有参与加密货币的人都是骗子,就像并非所有参与多层次营销的人都是骗子一样。然而,多层次的营销计划是骗局;商业模式的核心存在一个基本的经济问题。然而,许多人只是绝望、被热潮席卷、追随趋势或根本不了解潜在的经济结构。还有更多的人真正相信与他们只是想相信的故事相关的似是而非的论点,这可能是幻想事后合理化的强大力量。当他的纸面财富依赖于他维持这种财富的幻觉时,要让一个人理解某事是很困难的。 我们可以欣慰的是,任何后现代庞氏骗局都与其经典形式一样不稳定,这些纸牌屋将像之前的所有其他纸牌屋一样倒塌。基本的经济现实是无法逃避的,即生态系统内部人士口袋里的钱比支付给一小部分买入的傻瓜的钱还多。这是一个不可持续的泡沫,会破裂给我们留下深刻的印象有关数字资产伦理的深刻问题,可能会创建急需的 21 世纪版本的《蓝天法》(Blue Sky Laws)。 然而,今天的加密货币只不过是一个几乎不加掩饰的赌博产品生态系统,它掠夺弱势群体,延续经济不平等并加深我们社会中现有的问题。现在是我们软件工程专业人士决定历史将如何讲述我们参与这种疯狂的故事的时候了。如果我们选择基于冷漠和贪婪做出短期决定,那么历史将不会善意地评判我们。

2022/5/7
articleCard.readMore

Vercel 云服务构建 Umami

之前由于 Umami 自建网站访问量统计系统 有很多人跟我说云服务基本白嫖没有自己的服务器,如何进行搭建。此处即可使用 Vercel 来进行免费构建服务。 所需项目地址:Umami Umami的相关信息可以看我之前的文章,此项目还需要 MySql/Postgresql,可使用收费/免费服务,此处不做推荐。 Vercel介绍 网站链接:Vercel 免费 20 GB 空间 提供 Serverless 服务 免费自定义域名,支持 HTTPS 不限站点与 Serverless API 数量 Serverless 支持 Node.js, Go, Python, Ruby 提供 Google Cloud 与 AWS 节点,有香港与台湾节点 支持 now.sh CLI,GitHub,GitLab,Bitbucket 导入/部署 对于白嫖党还是非常友好的(MJJ狂喜 构建Umami Fork项目 打开 Umami 项目地址,将项目Fork到自己的仓库。 在 Vercel 主页新建项目 点击 Create a New Project 新建项目 选择刚刚 Fork 的仓库 找到 Umami 然后点击 Import 构建 Umami 此处需要增加两个环境变量,其变量名以及值格式如下: 1 2 3 4 5 6 7 变量名:HASH_SALT 值:自定义字符串 变量名:DATABASE_URL 值:数据库链接字符如下所示: #在此之前请将SQL文件下的数据库文件导入数据库 postgresql://username:mypassword@localhost:5432/mydb mysql://username:mypassword@localhost:3306/mydb 变量名:TRACKER_SCRIPT_NAME 值:自定义 (此变量用于更改脚本名称,可不填写,但推荐填写,否则脚本会被拦截,会致使统计数据不准确。 添加完成后,点击 Deploy 即可开始构建 构建完成 等待两三分钟即可构建完成 初始信息如下: 1 2 账号:admin 密码:umami 此时即可登录配置 绑定自定义域名 选择 Settings -> Domains 输入需要绑定的域名并且选择 Add 添加 根据提示设置相关解析,然后即可访问。 成功访问 关于使用 Vercel 构建 Umami 修改 umami.js 文件名的问题 在 SETTINGS -> ENVIRONMENT VARIABLES 里面新增环境变量 TRACKER_SCRIPT_NAME 然后赋值后重构项目即可。

2022/5/4
articleCard.readMore

加密货币,一场“无意”的骗局「转译」

文章原标题:On Unintentional Scams 原文地址:https://www.stephendiehl.com/blog/crypto-scams.html 在此感谢 Mr. Stephen Diehl 的授权。 当然,如果你已经进场 加密货币,或者您就是其中的利益相关者,完全可以不用看这篇文章,它是给没有利益相关并且理性客观的人准备的。 加密货币投资的兴起创造了一个蓬勃发展的的诈骗生态系统。就像化粪池的生态系统一样,现在有一组如此多样的植物群,我们可以开始对金融污水中产生的各种各样的产物进行分类。这样我们或多或少可以分为两个种类: 江湖骗子故意实施的诈骗 天真的人实施的无意诈骗 自从市场存在以来,我们就已经看到了第一种人,而第二种人在传统上来说是一个非常罕见的。随着不受监管的黑市兴起,它们可能会成为主导互联网金融新世界的那部分。 传销(MLM)计划与加密货币有很多共同点,因为它们是一种企业形式,现金流只包括通过招募更多的新投资者的资金来支付老投资者的利息。传销企业是一种合法的传销方式,在这种方法中,工人从公司自费购买批发产品(化妆品、保健品、维生素等等)然后直接销售给朋友和家人,他们从这些销售中收取少量的佣金。 然而,次要(和绝大多数首要)收入流是通过从同一计划中招募的下级代理那里收取佣金,这些人被称为“线下分销商”。招募人员加入该计划的人可以从他们的销售额中获得一定比例的分成。这种金字塔结构对招聘的激励作用大于销售。如果你招募了四个人来弥补你的损失,那么这四个人必须招募十六个人,那么你就招募了世界上所有卖护肤品的人。数学和经济学在这里根本行不通。 现在大家都知道,把这种事情作为一项工作是非常糟糕的注意。联邦贸易委员会发布了一份关于传销计划经济问题的[报告](https://www.ftc.gov/sites/default/files/documents/public_comments/trade-regulation-rule-disclosure-requirements-and-prohibitions-concerning-business-opportunities-ftc.r511993-00008 /00008-57281.pdf),不出意料的是,99%的参与者都赔钱。它们是一种掠夺性的财富转移,钱从消息不灵通的人口袋直接被送到了公司高层的口袋里。 同样,加密货币企业使用和销售“产品”的传销公司一样的销售方式销售所谓“代币”。从数学上讲,这就是一场诈骗,它将钱从金字塔中向上输送。大规模的消极的代币投资计划和传销计划只是通过略有不同的机子呈现出相同的现象。然而,由于上世纪80年代的管制和某政府的腐败,决定让这些企业搭便车。许多其他国家干脆直接禁止使用。 关于这些传销活动奇怪的事情是,尽管这些信息在网上广为流传,但是他们还是在大量招募。大多数参与其中的人绝对不符合我们心目中的骗子的样子。他们可能是教堂聚餐会上的普通人,是你的邻居,只是到处兜售这些产品的普通老百姓,他们快乐地四处兜售这些产品,却不知道它们是这个掠夺性系统自我延续的机制。也许他们不是出于恶意,那么纯粹是无知。 这种现象在加密货币的投资中随处可见。狗狗币(Dogecoin,一种模仿比特币的货币)的创造者 Jackson Palmer 表现出了非凡的勇气,他严厉指责了对他帮助发起投资如何变成可怕的东西进行了严厉的控诉。用他的话来说,加密货币是一种“快速致富的崇拜”,旨在“从一无所知的人那里骗钱”。就像传销一样,这就是他的本质。 现在有人认为这是他想要发生的吗?不对,对历史的解读更可能是,一些20多岁的程序员只能通过改变比特币代码库中的几个变量,意外创造了与 Frankenstein’s monster 一样的金字塔计划。现在数以百万计的人因为赌他偶然创造的东西而一无所有,毁掉了自己的生活。 这只是一个例子,彭博社写了一篇尖锐的文章,描述了暴涨暴跌计划的指数级增长,以及每天从公众那里窃取的数十亿美元。在过去的几个月里,Youtube上有一个完整的频道除了揭露有影响力的骗局外什么也没做。他只是发现了冰山一角。Instagram和TikTok背后有数以十亿计的美元,供人们宣传毫无歉意的暴涨暴跌计划以及骗局。就连好莱坞一线明星也加入了这场骗局。 只需要看看 Fyre Festival 灾难,就可以看到每一个加密货币首次发行中都出现过的类似现象。这种现象表现在每一个加密货币的初期阶段。你有一群声名狼藉但充满魅力的人,他们对建立*“结束所有音乐节的豪华音乐节”、“新的 Pied-Piper 开放互联网”或“弗里德里希·哈耶克的自我主权货币愿景”有着宏伟的愿景*. 他们吸纳了越来越多的投资人在招股说明书上投入的资金,然后当他们意识到现实世界存在局限性时,他们就倒下了,这一切都发生了灾难性的变化。这些真正的信徒是骗子吗?这只是故意失明的情况吗?还是他们只是傻瓜?这条线在一定比例下变得非常模糊。 为什么现在这种情况如此普遍?因为如果说加密领域有什么创新的话,那就是它允许世界上任何地方的任何青少年在他们的卧室里发起定制的传销计划,或者在大约5次鼠标点击后进行证券欺诈。再加上完全缺乏监管,我们看到的是,这些人要么没有任何羞耻感,要么因虚无主义的世界观而对欺诈完全不敏感。 腐败和江湖骗子吓不倒我。从文明和商业开始,我们就和它们打交道了。不可否认,金钱甚至会使最有原则的人堕落。然而,更让我害怕的是,基于一种技术的经济体系,这种技术有能力将如此多的好人变成腐败的代理人。加密货币现在是多层次营销的精神继承者,它使同样的人群受害。我们今天在加密市场中看到的,不过是经过变异的传销,以适应全球互联网和社交媒体的美丽新世界。 鸭子测试才是最重要的。如果一个商业模式看起来像传销,像传销一样游动,那么它很可能就是传销。数字签名方案和技术乌托邦主义并不会改变经济状况。商业模式的意图并不重要;通往地狱的道路是由善意铺成的。重要的是结果。 人们经常问我是否认为参与加密的每个人都是骗子。答案是明确的“不”。但对我来说,更可怕的是这么多人可能成为骗局的一部分,甚至不知道。如果我们作为技术人员必须牢记一件事,那就是极其不人道的邪恶是由最幸福的无知的人组成的腐败系统所造成的。

2022/5/1
articleCard.readMore

Web3.0?一场关于资本的骗局「转译」

文章原标题:Web3 is Bullshit 原文地址:https://www.stephendiehl.com/blog/web3-bullshit.html 在此感谢 Mr. Stephen Diehl 的授权。 当然,如果你已经进场Web3.0,或者您就是其中的利益相关者,完全可以不用看这篇文章,它是给没有利益相关并且理性客观的人准备的。 如果你经常阅读科技类的新闻的话,你可能会看到很多关于 「Web3」这种模糊概念的文章。在所有这些文章的周围散布着各种各样的理想主义和乌托邦式的想法,关于人们如何重建互联网以反映人们对更加人道和平等社会的渴望。然而这些文章的作者从来没有深入了解过如何改造互联网的更多细节性的问题。因为这类文章的作者都是一些只会讲故事的人,而从一个足以让互联网重生的话题,对于一个极其扯淡的故事来说,这远远比炒作技术更能让人大开眼界,也可以让这些文章作者获得巨大的收益。 然而,当我们这些从事互联网,半导体和高新技术产业的人调查所谓的技术细节时,他们要么 hand wavy woo woo,要么梦想着依靠远超现在的区块链技术,寻找明天的问题,以证明今天的投资是正确的。“今天只要买了我的币,明天就让你财务自由!”这是江湖骗子们的老一套话术,只不过这一次的骗子是由世界上的大资本所扮演的,因为他们拥有大量的“虚拟货币”要出售。 Web3.0的核心是一场乏味甚至说没有意义的营销活动,试图将公众对数字资产的负面联想变成一种关于对传统互联网科技公司的版权被打破的虚假故事。在继续逃避证券金融监管注意力的同时追求卖出更多的所谓“虚拟货币”。我们可以在加密和在谈论web3时看到这一点。这并不是为了真正解决消费者的问题。Web3要解决的唯一问题就是如何让自己变得更加合理甚至合法。 区块链没有为技术领域提供任何新的或有价值的东西。它的唯一的应用是创造了对抗审查的加密投资方案,这项发明的负面影响和伤害能力远远超过了任何可能的用途。区块链提出要解决的每一个问题都会遇到三个基本的技术限制,这些限制不可避免地是来自经济方面或者法律方面的问题。这三个技术问题是: 和计算资源有关的问题 和带宽有关的问题 和存储有关的问题 在计算的基础上,区块链网络是不会拓展的,除非成为被称为“集中式”、“中心化”的系统,而这些系统正式它所要取代的。试图进行对抗审查的计算,代价是非常“荒谬”的。在这种机制下,很难减少程序执行的时间,因为整个网络被迫重新计算每一个程序,所付出的代价就是同步这些数据会造成非常巨大的资源浪费。这不可避免的将每次计算的成本推到了极高的水平。以太坊虚拟机的算力相当于20世纪70年代的 Arari 2600,只是它运行的是赌场的代码,每次$500,每隔几分钟就像玩老虎机一样重新加载一次才能使他正常运行。任何人都可以认为这是全球互联网的计算支柱,这是非常可笑的。在云计算的世界里,每个人的计算时间成本,几乎处于资源匮乏后的水平,相当于从资源非常富足的时代,强制进入人为匮乏的时代。这是一种倒退,而不是一种进步。 此外,还有一个不可忽视的问题就是计算机的网络带宽问题。区块链解决方案的维护成本远远高于集中式解决方案,而集中式解决方案的成功纯粹是因为它能够通过网络更高效地为客户提供物理数据服务。对于这个假设,有几个不可避免的逻辑问题。谁将为全球数据中心的内容服务付费?谁的律师会回应DMCA的请求?谁将禁止纳粹账户?谁会删除CSAM内容?当奶奶忘记时,谁会重置她的密码?经营如此规模的全球企业需要不可避免的集中化处理,这是一个残酷的事实,即必须存在并与其他文明互动。如果你引入了集中化的数据中心和流程来处理所有混乱的互动,那么恭喜你用另一个名字重新创建了Facebook。 最后是存储问题的概念,它触及了许多人认为是21世纪最大的社会问题之一的核心:“谁拥有我们的数据?”。web3的叙述与数据删除的概念截然相反,因为仅附加和不可变数据库的技术基础不允许这种设计操作。然而,每一种新的商业模式都必须跨越关于客户数据可见性的桥梁,以及他们将让谁进入平台。谁的服务器将保管您的所有照片,谁有权决定这些访问控制?这些问题根本不是关于一致性算法、分布式数据库或密码学的,它们不可避免地是关于权力、特权和访问的问题。技术不会让我们免于提出这样一个难题:谁应该有权力控制我们的数字化的生活?答案总是有人,只是谁的问题。 从技术角度来看,web3故事的缺点很容易被破解,但要扮演魔鬼代言人的角色,它成功的原因是什么?很有可能这真的是金融放松管制的一种范式转变,并将迎来一个新的无政府主义赌场资本主义世界,在这个世界上,每一个14岁的孩子都可以发起一个一夜成名的庞氏骗局,并在社交媒体上传播这些骗局,所有这些都来自于他们父母舒适和匿名的地下室。这是一个骗子的天堂,有一个24/7不间断的赌场,建立在寒武纪老虎机爆炸式增长的基础上,每一台老虎机都来自人类文化的不同方面,它们的相似性被用来引诱你更多地赌博。这是资本主义的典范,市场现在为每一个模因、每一位名人、每一场政治运动、每一点艺术和文化提供了一个金融代币游戏,每个部落在一场全民对抗的战争中相互竞争,以实现人类生存的超金融化。这就是我们想要生活的世界吗? Web3对技术专家来说是一个极为两极化的话题,因为它就是这样设计的。在弹出式广告和扎克伯格(Zuckerbergs)的传统互联网世界之间建立一种虚假的二分法是一种修辞伎俩。扎克伯格(Zuckerbergs)的确很烂,但它是一个基于技术上不连贯的白日梦和虚假的加密民粹主义的幻想世界。 几乎只有书呆子读过我的博客(不是我,原作者就是这么写的),所以我想大家要么读过 Herbert 的沙丘小说,要么至少看过 Villeneuve 的最新杰作。对这部小说最好的分析是由另一位互联网先驱 O’Reilly(与《动物图书》一书相同)撰写的,他对保罗的悲剧英雄以及一些民粹主义原因是如何因绝望和错误地抓住英雄解决主义而产生的进行了精彩的分析。 引文 Their strong, unconscious projection makes him even more special than he is. This projection stems somewhat from the legends generated by the Bene Gesserit and the way they crystallize around Paul, but even more from Paul’s followers’ “wishful thinking”—their unconscious belief that someone “out there” has the answers they lack. Unable to find adequate strength of purpose in themselves, they look for a truth—a cause—and a leader to supply It. Web3是这种对救世主解决方案的空洞把握的技术表现,它将解决我们所有的问题。想要建立一个更分散的技术体系,渴望一个更平等的互联网、一个更公平的社会和一个更美好的世界,这是完全理性的。然而,Web3并不是把我们带到那个世界的黄金之路,它只是把同样古老的加密货币装在糖丸里,让它更容易消化。

2022/4/30
articleCard.readMore

UptimeKuma - 自建网站状态监控服务

曾经使用过类似的服务 UptimeRobot 通过API配合开源面板体验还是不错的,但是 UPTIMEROBOT 没有国内的节点,由于线路问题很多时候会有误报的情况。而且自建还可以把数据牢牢地放在自己手里。 Uptime Kuma可以通过 Docker 或者手动安装,是一个十分成熟的开源解决方案。 项目简介 项目地址:Uptime Kuma 特性 支持的监控:HTTP(s) / TCP / HTTP(s) 关键字 / Ping / DNS 记录 / PUSH / Steam 游戏服务器的正常运行时间、SSL过期监控。 通过 Telegram、Discord、Gotify、Slack、Pushover、电子邮件 (SMTP) 以及70多种的服务推送通知。 多种语言支持,而且界面十分美观。 手动安装需要 Nodejs 版本 ≥ 14,而且通过PM2进行后台运行。 本文通过宝塔面板以及 DOCKER 进行安装。 配置 Uptime Kuma 安装Docker 在宝塔面板打开 应用商店 选择 Docker 进行安装 获取镜像 安装完成后即可进行获取镜像,在宝塔的 Docker 选择镜像管理,获取镜像输入以下镜像名称进行获取镜像 1 louislam/uptime-kuma 由于是通过 Docker 官方仓库获取镜像,所以速度较慢,请耐心等待。 配置容器 Uptime Kuma 的容器配置非常简单,详细配置如下: 1 2 3 4 5 镜像选择:louislam/uptime-kuma 容器端口:3001 服务器端口:自定义即可 容器目录:/app/data 服务器目录:自定义即可 即可提交运行。此时通过 IP:自定义端口,即可访问服务。 设置反代 如果不想通过IP访问服务,此时需要进行 NGINX 反向代理。 注:如开启反向代理,请关闭 COCKER 对外设置的服务端口。 新建网站,配置好SSL后即可进行反向代理配置,具体配置如下: 1 2 代理名称:自定义 目标URL:http://127.0.0.1:32111 (此处端口为自定义的端口) 完成以上配置,提交即可 由于项目的特殊性,需要用到 WebSocket 所以如果不配置WebSocket会出现以下错误: 1 2 3 Cannot connect to the socket server. [Error: websocket error] Reconnecting... Using a Reverse Proxy? Check how to config it for WebSocket Uptime Kuma 此时需要在 Nginx 的反向代理配置文件 #Set Nginx Cache后面加入以下代码,用于开启 WebSocket: 1 2 3 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; 保存后,即可正常访问服务。 配置 Uptime Kuma 相关设置 此时需要注册管理员账号 输入完成后,即可点击创建 增加网站 填写 显示名称 以及 URL 即可提交,如其他有需要可按需配置。 此时即可正常监控 配置通知服务。 UPTIME KUMA支持70余种服务通知,详细名单如下: 可按需配置,推荐使用国内的 SMTP、钉钉、企业微信群机器人进行推送。 后语 Uptime Kuma 是一个非常好的开源项目,适合很多网站服务特别多的站长,特别是那些不常访问,但是又非常需要长时间运行的项目。 可以通过配合 UptimeRobot 实现国内国外双线监控。保证网站服务稳定运行。

2022/4/28
articleCard.readMore

解决 Umami 统计脚本被拦截广告插件拦截

使用外挂 JS 的方式来统计数据,虽然可以统计真实的访客记录,但是会被 uBlock 此类的广告拦截插件给直接拦截掉,以至于无法准确的获取访客数据。 简单了解了下此类插件的拦截策略,是通过检测脚本文件名进行的。可以通过修改 JS 文件名来进行防止统计信息脚本被拦截。 方法一(推荐) 官方在 1.26.0 版本上增加了 TRACKER_SCRIPT_NAME 这个环境变量来提供修改统计脚本的操作,这也是本站现在使用的方法。 但是此环境变量中的值,有些情况会失效,更换即可,原因未知。 打开目录中的 .env 文件,添加以下文本: 1 TRACKER_SCRIPT_NAME=自定义名称 输入完成后保存即可。 重启服务,修改网站链接中的脚本地址 重启UMAMI服务 访问网址,修改已生效 使用 CloudFlare Workers修改名称 这个方法是以为大佬在项目讨论区分享的,也试了以下,效果一致。 新建CloudFlare Workers 左侧选择 Workers,然后创建服务 选择启动器,然后创建服务 服务名称自定义,启动器选择 HTTP 处理程序。 然后点击快速编辑,并将以下信息 修改输入 并 保存。 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 const ScriptName = '/umami.js'; //自定义脚本名称 const Endpoint = '/foo/bar'; const UmamiUrl = 'https://bcon.roywang.cn'; //UMAMI服务域名地址。 const corsHeaders = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET,HEAD,POST,OPTIONS', 'Access-Control-Max-Age': '86400', }; const ScriptWithoutExtension = ScriptName.replace('.js', '') addEventListener('fetch', event => { event.passThroughOnException(); event.respondWith(handleRequest(event)); }) async function handleRequest(event) { const pathname = new URL(event.request.url).pathname const [baseUri, ...extensions] = pathname.split('.') const clientIP = event.request.headers.get("CF-Connecting-IP") if (baseUri.endsWith(ScriptWithoutExtension)) { return getScript(event, extensions) } else if (pathname.endsWith(Endpoint)) { return postData(event) } return new Response(null, {status: 404}) } async function getScript(event, extensions) { let response = await caches.default.match(event.request); if (!response) { response = await fetch(UmamiUrl +"/umami.js"); var js = await response.text(); js = js.replace("/api/collect", Endpoint); response = new Response(js, { headers: { ...response.headers, ...corsHeaders, 'Access-Control-Allow-Headers': response.headers.get('Access-Control-Request-Headers'), }, }) event.waitUntil(caches.default.put(event.request, response.clone())); } return response; } async function postData(event) { const request = new Request(event.request); request.headers.delete('cookie'); response = await fetch(UmamiUrl +"/api/collect", request); var js = await response.text(); response = new Response(js, { headers: { ...response.headers, ...corsHeaders, 'Access-Control-Allow-Headers': request.headers.get('Access-Control-Request-Headers'), }, }); return response; } 文件名称修改成功。 CloudFlare Workers 绑定自定义域名 域名需要 NS 接入CloudFlare,增加解析 至 8.8.8.8,并且打开 CloudFlare 代理 在左侧选择 Workers,并选择添加路由。 输入路由,以及选择服务、环境。 此处有个误区,路由在域名后面需要添加 /* 很多用户在使用时都会犯这个错误。 修改网站中的脚本地址。 第一种方法最简单,也最推荐,当然如果服务的线路非常差,比CloudFlare 还差的话,推荐使用第二种方法。 如后续还被屏蔽,只需重新修改脚本名称即可。

2022/4/25
articleCard.readMore

NSFW API - 开源的图片鉴黄API

前段时间看到 lskypro 升级到了2.0的版本,所以就想服务器闲着也是闲着,不如搭建个图床,造福大家。由于是开放注册,肯定会有坏东西捣乱,无法去筛选每个图片,就想到了去依靠第三方的图片审查服务。 但是目前 lskypro 2.0 支持的图片审查服务不多仅有三种:腾讯、阿里、NsfwJS,前面两个收费的服务价格实在是。。。。。。。不是我能负担的起的,所以便选择了自建 NsfwJS,来降低成本。 Lsky pro 官方群里的大佬们分享了一个项目,使用 Docker封装 部署和使用起来十分方便,输出的 json 格式和 Lsky pro 所有要的完全吻合,所以今天分享出来。 NSFWJS项目地址:NSFWJS 上面的项目地址并非本次所需的项目地址,有能力的大佬可以研究下。 2023年2月18日更新:在迁移服务器的途中,发现原作者的新版镜像是无法直接通过Lsky Pro去调用的。所以将可以用的镜像版本上传到了 Docker Hub。 项目介绍 项目地址:NSFW-API 项目仅支持 PNG JPG文件!!!!!!! 请求示例: 1 2 POST /classify HTTP/1.1 Content-Type: multipart/form-data 应在 image 字段中提供图片数据 响应示例: 1 2 3 4 5 6 7 8 9 HTTP/1.1 200 OK Content-Type: application/json { "porn": 0.59248286485672, "sexy": 0.39802199602127075, "hentai": 0.006243097595870495, "neutral": 0.0031403270550072193, "drawing": 0.00011181648733327165 } 部署 NSFW-API 本教程基于 宝塔面板搭建,相应命令请自行转换 获取镜像 在宝塔的 Docker 管理面板中选择 公网库 官方库 输入以下仓库地址获取镜像: 1 2 3 ghcr.io/arnidan/nsfw-api:latest #上面的镜像已经不能再配合LskyPro进行使用,请使用下面的。 roywangdev/nsfw-api:latest 由于镜像比较大,而且托管于 Github,国内服务器获取起来比较缓慢,请耐心等待。 部署镜像 选择镜像,将容器的 3000 端口映射出即可。 此时提交即可。 设置反代 此时调用以下地址即可调用API 1 http(s)://IP:port/classify 使用IP+端口的组合肯定不够方便,那就需要反代 新建网站开启HTTPS等操作不再演示,具体配置如下: 1 2 代理名称:自定义 代理地址:http://127.0.0.1:自定义的服务器端口 点击提交即可反代成功 测试 此处以 Lsky pro调用进行测试 在后台填写 API地址如下: 切记一定要在域名后面加上 /classify 后语 按照 NSFWJS 官方的说法,准确率可以到达 93%,如果调用至商用项目请慎重考虑,如用于公益图床,请不定时审查图片。

2022/4/22
articleCard.readMore

ForsakenMail - 搭建临时邮箱

NPM安装转载自 MOERATS.COM Forsaken Mail是一个临时邮箱系统,可以接受任何邮件,既收即毁。而且支持自定义邮箱地址前缀,提供了两种安装教程,选择一种即可 环境配置 1、VPS需要打开25端口,如果默认没有开启,可联系主机商开启(部分云服务商不支持开启25号端口) 2、域名解析,如果你想要邮箱地址后缀为 xxx@xx.xx的话,则需要设置XX.XX为MX记录,具体解析记录如下: 1 2 3 4 #MX记录 XX.XX MX 10 mx.xx.xx #A记录 mx.xx.com A 服务器IP 部署 Forsaken Mail 项目开源地址:Forsaken Mail NPM 部署 1 2 3 4 5 6 #Debian/Ubuntu系统 curl -sL https://deb.nodesource.com/setup_10.x | bash - apt-get install -y nodejs git screen #Centos系统 curl -sL https://rpm.nodesource.com/setup_10.x | bash – yum install nodejs git screen -y 安装ForSaken Mail 1 2 3 4 5 6 7 git clone https://github.com/denghongcai/forsaken-mail.git cd forsaken-mail #安装Forsaken Mail npm install #后台运行Forsaken Mail screen -S forsakenmail npm start 最后按Ctrl+A,再按D键返回主界面,然后打开http//mx.xx.com:3000就可以查看Forsaken Mail邮箱界面了,如果你打不开界面,可能还需要开启防火墙端口,如何打开端口这里不再细讲 Docker 部署 这里Docker的安装方式使用宝塔进行演示 打开宝塔面板,找到Docker管理器并进行安装 获取Forsake Mail镜像 设置再点击镜像管理获取镜像,选择官方库输入:denghongcai/forsaken-mail 点击获取镜像即可 点击创建容器,选择镜像,然后设置端口映射,在此之前一定要在宝塔开放此端口其他设置默认即可 此时 输入IP:3000即可打开临时邮箱系统了 测试: 发送邮件成功 设置反代 如果直接用IP来收发邮件未免有点太麻烦,要设置一个域名来作为后缀(直接将域名解析到服务器IP即可),使用宝塔进行反代就非常简单了 提交即可 测试 后语 接收邮件时必须打开网页,否则会接收失败! 如果需要更改项目打开端口,在项目的 bin 目录的 www 文件,以文本打开修改端口后重启服务器即可 如需修改首页在项目 public 文件夹的 index.html 的文件中修改代码即可

2022/4/19
articleCard.readMore

Umami - 自建网站访问量统计系统

由于站点较多,而且为了保护隐私,比较抵触使用 CNZZ 或 GOOGLE 等第三方的访问量统计系统。最近发现了一个统计网站访问量的工具。也使用了一段时间,现在将搭建教程分享出来: 项目介绍 项目地址:Umami UMAMI 基于Node.js 开发,并且支持 MySQL 或 Postgresql 等数据库存储方式,可以将数据掌握在自己手中。并且 UMAMI 还提供了非常详细的流量分析可视化的界面,UI 体验以及统计准确度十分不错(此处所讲统计精准度为实际真是访客的访问量,有可能一天只有1-2请做好心理准备。) 官方文档:Umami Docs 环境需求 由于 Umami 基于Node.js 开发,采用 MySQL 或 Postgresql 数据库存储数据,所以配置要求如下: Node.js 14.18 或更高的版本 服务器上安装了 MySQL 5.7 或以上 或 Postgresql 12.14 或以上 2022-7-22 更新:今天更新 umami 时,发现更换了 umami 构建安装方式,遂更新一波,可能配图不正确,但步骤基本一致。 2023-5-3更新:更新了一下 Node.js 的版本,以及文章上的一些错误。 2023-8-21更新:程序守护更改为 PM2 管理,进而放弃 systemctl ,其在我这次将服务迁移到国内服务器内出现了很大的问题,以及文章上的一些错误。 2024-2-8更新:更新了Node.js 的版本,以及文章上的一些错误。 环境配置 本文基于宝塔面板,使用 MySQL 进行安装 安装配置 Node.js 此处 MySQL 安装方式此处不再进行演示,如您已安装 Node.js 并且配置成功,则此步可以跳过。 安装 Node.js 命令如下 1 2 3 cd /www/server/nodejs wget https://nodejs.org/dist/v21.6.0/node-v21.6.0-linux-x64.tar.gz tar -xzvf node-v21.6.0-linux-x64.tar.gz 设置 Node.js 全局变量: 在宝塔面板打开 /etc/profile 文件,将以下配置输入文件最后面,并保存 1 2 export NODE_HOME=/www/server/nodejs/node-v21.6.0-linux-x64 export PATH=$NODE_HOME/bin:$PATH 输入以下命令用于重载全局配置。 1 source /etc/profile 输入 node -v 和 npm -v 返回以下信息即配置完成 配置成功 安装 Yarn 1 npm install -g yarn 查看版本信息,如遇 yarn:未找到命令,请看:《NodeJS 和 npm 配置全局变量》 国内服务器此步骤由于 Node.js 没有大陆节点,速度较慢。请耐心等待 部署 Umami 克隆仓库 1 2 cd /www/wwwroot git clone https://github.com/umami-software/umami 安装依赖 国内服务器此步骤由于 Node.js 没有大陆节点,速度较慢。请耐心等待 千万不要使用淘宝的 registry 镜像源!!!!!!!! 否则安装依赖会出错!!!!!!!! 1 2 cd umami yarn install 依赖安装完成 配置数据库 创建数据库:打开宝塔面板,点击左侧 数据库->添加数据库。输入数据库相关信息即可。 配置 .env 文件 在 umami 文件夹中新建一个名为 .env 的文件 文件具体配置如下: 1 2 DATABASE_URL=mysql://用户名:密码@localhost:3306/库名 HASH_SALT=roywang (加密字符 随机即可) 配置示例 构建 Umami 千万不要使用淘宝的 registry 镜像源!!!!!!!! 否则安装依赖会出错!!!!!!!! 1 yarn build 构建完成 导入数据库 1 yarn update-db 运行 1 yarn start 默认用户名:admin 默认密码:umami 此时即可通过 IP:3000访问网站了,但为了方便使用,还需进行以下操作 其他配置 设置程序守护,此处以 PM2 为例 打开目录 umami 安装目录 1 2 3 4 5 6 #全局安装 pm2 yarn global add pm2 pm2 start yarn --name umami -- start pm2 startup pm2 save 设置网站反代 宝塔新建站点 -> 打开SSL - > 反向代理 ->添加反向代理 目标 URL 填写:http://127.0.0.1:3000 配置反代 配置站点 登录 Umami 默认账号:admin 默认密码:umami 添加站点,并将代码放到网站 部分来收集数据。 升级配置 此时必须保证 Umami 没有正在运行,重新 拉取仓库、安装依赖、构建项目、启动即可 1 2 3 4 5 6 7 8 9 10 #拉取仓库 git pull #安装 yarn install #构建项目 yarn build #更新数据库 yarn update-db #启动项目 systemctl start umami 后语 特别强调,无论国外源多慢都强烈要求使用国外源。在使用淘宝源时,构建会失败!!!!!!!!!!!!! **解决了统计JS被广告拦截插件给屏蔽的问题:**https://bcon.roywang.cn/umami-js-name/

2022/4/16
articleCard.readMore

BitWarden - 自建个人密码管理服务

因为使用网站的变多,所以最近老是忘记网站的密码,无奈只能重新找回密码,得以重新登录….然而下一次登录的时候,大概率还是重复以上操作苦不堪言,市面上提供有很多密码托管服务,但用起来会不是很放心,毕竟是托管到别人的服务器上,担心密码泄露。所以自建可以一定程度上避免这个问题~ 而且支持跨平台服务,安卓、IOS、PC均受支持 部署 BitWarden 服务器以及域名是必须的,由于项目的特殊性,所以还需要SSL,可以极大的提高数据传输的安全性~ 但申请SSL的过程此处就不再演示,可以使用阿里、腾讯之类的免费SSL。此处推荐ECC加密,详细好处请百度。 安装 一、打开宝塔面板软件商店找到 Docker 并安装。 二、打开 Docker 容器 设置 选项,打开 镜像管理 并 获取镜像。 三、在 镜像名称 处输入 bitwardenrs/server 获取镜像 (此步骤所需时间略长,不同服务器带宽所需时间不同) 四、获取镜像后在 容器列表 中 新建容器 需要映射容器端口 80 到 自定义的端口号(需提前开放未使用的自定义端口)。将容器的 /data 目录映射到服务器储存数据的目录上,在环境变量中写入: 1 ADMIN_TOKEN = 自定义字符 (此操作是打开管理员面板方便管理)。 设置反代 一、创建网站设置域名 二、点击 SSL 配置 SSL 证书 三、设置 反向代理 代理名称随意填写,目标URL 填写 http://127.0.0.1:自定义的端口号 服务的配置及使用 一、显示下图才代表服务运行成功 二、第一次使用需要注册账号 三、打开 域名/admin 即可打开后台,输入设置的密钥即可登录 四、如果仅自己使用的话建议关闭可注册用户,其他操作自定义即可 后语 设置完成后即可正常开始使用了。 BitWarden 的功能十分强大,而且支持 Chrome插件 Windows客户端 安卓APPs的使用,剩下的就靠自己发掘了~

2022/4/13
articleCard.readMore

AutoPlan - 自建B站挂机升级服务

今年2月15的时候发表过一篇文章:BilibiliTask– B站自动挂机升级脚本 由于作者已经删库跑路(bushi) 已经不再维护此项目,而项目是托管到 GitHub 上,又有随时被删库的风险,而且B站的登录信息存储在 GitHub 上总感觉不安全。 在 GitHub 上发现了一个新的项目,是基于 BilibiliTask 进行开发的。可以自建于自己的服务器,数据更安全,也可以分享给朋友一起使用。 您可以使用项目 Demo 进行自动签到。 Demo地址:AutoPlan Demo 项目简介 项目地址:AutoPlan 这是一个自动化的托管系统,目前支持网易云签到刷歌,bilibili赚经验+自动赛事预测,米游社原神签到。 已经实现的功能: b站每日自动经验任务 b站赛事预测赚硬币任务 网易云自动签到刷歌任务 米游社原神签到领奖励任务以及米游币任务 详细可以查看项目地址 经过实际测试,这个项目在运行单个任务时,内存占用会到 500MB 左右,如果您的内存低于1G不建议您安装。 准备 由于 AutoPlan 基于 JAVA 开发,采用 MySQL 数据库存储数据,所以配置要求如下: JDK 8或以上版本 MySQL 服务 本教程基于宝塔进行可视化操作搭建。 安装 Tomcat 由于使用宝塔,所以这里只需要安装 Tomcat 即可自动配置 JDK; 如您已安装 Tomcat 并且配置成功,则此步可以跳过。 在软件商店中搜索 Tomcat 进行安装,这里推荐安装 8.5 这样即可配置完成。 此处 MySQL 安装方式此处不再进行演示。 部署 AutoPlan 下载编译包 在 项目地址 中下载最新编译好的 JAR包。您也可以选择自行编译。 将下载好的 JAR包 上传到自定义的文件夹中。 新建 JAVA 站点 选择 网站->JAVA项目->添加JAVA项目,从而部署项目。 需修改的配置信息如下: 项目jar路径:修改为自定义的路径名,并且选择上传的 jar包 项目端口:自定义端口 其余配置可按需求修改,然后提交项目。 点击站点设置,设置域名,开启外网映射,并配置SSL。 新建数据库 选择数据库新建,输入配置信息后提交 此时需导入数据库文件,文件地址位于 项目仓库 中的 auto_plan.sql 文件,将仓库代码文件下载,然后将 SQL文件导入数据库。 配置 配置文件 在项目jar包同级目录中新建 application.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 server: #服务器端口,此处端口号为创建站点时所设置的端口。 port: 26666 spring: #数据库连接配置 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/数据库名称?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: 数据库用户名 password: 数据库密码 main: allow-bean-definition-overriding: true mvc: #静态文件 static-path-pattern: /static/** # actable自动建表 actable: table: auto: update model: #分号或者逗号隔开 pack: com.oldwu.entity;com.oldwu.domain;com.netmusic.model;com.miyoushe.model database: type: mysql index: #自己定义的索引前缀#该配置项不设置默认使用actable_idx_ prefix: INDEX_ unique: #自己定义的唯一约束前缀#该配置项不设置默认使用actable_uni_ prefix: INDEX_UNIQUE_ # mybatis自有的配置信息,key也可能是:mybatis.mapperLocations mybatis-plus: global-config: db-config: id-type: auto #mapper配置文件 mapper-locations: classpath:mapper/*.xml,classpath:mapper/**/*.xml,classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml type-aliases-package: com.oldwu.entity #开启驼峰命名 configuration: map-underscore-to-camel-case: true #输出mybatis日志 # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 服务器端口及数据库配置信息需修改,其余信息可根据自定义修改 启动任务,即可打开网站,注册账户。 链接:https://youdomain.com/reg 点击未启动,即可启动项目 打开网址,即可注册账号 修改账号为管理员账号。 修改数据库 sys_role_user 表中 sys_role_id 为 1即为管理员 配置账号,并使用 推荐使用 BILIBILI客户端 扫码登录,具体获取 B站 COOKIE 以及完成推送可以参考 BILIBILITASK – B站自动挂机升级脚本 这里不再赘述。 系统默认每天8点自动进行任务,如需修改可通过 自动任务管理 中的 B站自动任务修改。 后语 由于是第三方脚本,所以有大概率的封号几率,而且如果全部托管到一台服务器上,封禁概率会大大提高 强烈建议自建,如通过本项目造成的一切损失本人概不负责!请谨慎使用。

2022/4/10
articleCard.readMore

SearX - 私人的搜索引擎系统

搜索主页一直以来使用的都是一个单页,可以选择跳转到百度搜索还是谷歌搜索。一直想搭建一个属于自己的搜索引擎,无奈没有合适的开源项目,今天在Telegram上某群群主分享了一个项目,使用了一段时间感觉还可以,就分享出来。 项目简介 项目地址:SearX Searx是一个免费的互联网搜索引擎,汇集了70多种搜索引擎的结果,用户既不被跟踪也不被分析。这些搜索引擎包括 Bing,Google,Reddit,Wikipedia,duckduckgo、Yahoo和Yandex 等。 部署 SearX 该项目提供了多种的安装方式,不过这里选择了使用 Docker + 宝塔的方式进行安装,其他的安装方式可以参考作者的官方文档 获取镜像 打开宝塔的Docker管理器,选择镜像管理–>获取镜像,输入 searx/searx 创建容器 容器端口填写 8080 服务器端口自定义(非80端口)。其余默认即可 设置反向代理 创建网站,输入域名 设置SSL 输入127.0.0.1:自定义设置的端口号 搭建完成 后语 该项目不适合搭建于国内服务器,如果搭建于国内服务器会无法获取Google等网站的引擎内容。

2022/4/7
articleCard.readMore

NextCloud 搭配 OnlyOffice出现 已阻止此内容,请与网站所有者联系以解决此问题 的问题

很多人在用 NextCloud 搭配 OnlyOffice 是出现 “已阻止此内容。请与网站所有者联系以解决此问题。”的错误 出现“已阻止此内容。请与网站所有者联系以解决此问题” 出现这种情况大部分情况下是因为OnlyOffice做了反代,通过nginx配置了 SSL ,而未在 Docker 中配置 SSL 而引发了跨域错误。 从控制台可以看到是发生了跨域,进而证实了猜想 浏览器控制台查看错误 解决方法: 开启 OnlyOffice 的 SSL 即可解决。 一、在目录中创建 certs 文件夹,将 SSL 的密钥及证书文件重命名为 onlyoffice.key 与 onlyoffice.crt 存入其中。 此处以宝塔面板的Docker管理面板为例 二、配置 OnlyOffice Docker 端口映射:需将容器443端口映射至服务器的任意未使用端口即可。 目录映射:需将容器目录 /var/www/onlyoffice/Data 映射至存放 /certs 文件夹 的目录即可(/certs 的父目录,并非映射至 /certs) 将 Nginx 反代地址设置为 https://IP:端口 即可正常使用 OnlyOffice 服务恢复正常

2022/3/12
articleCard.readMore

NextCloud 添加 OnlyOffice 插件

现在因为那啥(懂得都懂)所以NextCloud无法链接其自带的插件商店,所以此时可以选择本地安装 操作 一、打开 OnlyOffice下载合适的版本 二、打开 NextCloud 根目录中的 /apps 目录,将下载好的文件上传至该目录并解压(/apps 为 NextCloud 存放插件目录文件夹) 三、在后台应用中打开 ONLYOFFICE 插件 四、点击设置中的 OnlyOffice 选项然后进行相应设置即可 如果 NextCloud 开启了SSL,则一定要为 OnlyOffice 设置 SSL,才可以正常进行使用!否则将会发生跨域错误。

2022/3/6
articleCard.readMore

为 OnlyOffice 设置密钥(JWT令牌)

搭建好 OnlyOffice 后因为服务是公开的,所以任何人都可以链接使用,就给内存本不就富裕的 VPS 更大的压力。所以我们需要给 OnlyOffice 设置好密钥(JWT令牌),只给自己允许的人进行使用。 操作 一、将 Docker 容器中的 default.json 文件拷贝出,命令: 1 sudo docker cp 容器ID:/etc/onlyoffice/documentserver/local.json 拷贝出的文件目的目录 将文件拷贝至目标目录 二、使用文本编辑框打开文件,如图所示两处位置修改为密钥 三、将如图三处位置改成 True 四、然后将 Docker 容器中的 default.json 文件拷贝回去,命令: 1 sudo docker cp 文件所在目录/local.json 容器ID:/etc/onlyoffice/documentserver/ 五、重启容器即可 提示 如未在 NextCloud 的 OnlyOffice 插件中设置密钥,即会提示 “文档安全令牌未正确形成” 在 NextCloud 的 OnlyOffice 插件中设置正确的密钥 设置完成保存后即可正常使用。

2022/3/1
articleCard.readMore

自建WizNote,数据丢失恢复

使用为知笔记也半年有余了,但是发生过两次这样的事情,长时间运行就会就会收到500的报错,重启Docker容器之后呢,就全部初始化了,数据都丢失了。幸好之前做了备份….. 必须拥有服务出错前的映射出目录的备份才可恢复 操作 一、将WizNote Docker服务停止 二、将映射出的目录内文件删除,上传备份并解压 三、启动WizNote Docker服务,即可恢复数据 出现该问题原因暂时未知,希望官方可以尽快修复这个BUG 此操作需要备份文件,如无备份,则无法恢复。

2022/2/26
articleCard.readMore

WordPress 配置 CDN,免对象存储,加速域名首页自定义

因为域名不能备案,所以目前来说只能使用海外的服务器。因为腾讯云轻量目前的香港线路时好时坏,正好手里还有个备案域名,而且DNSPOD专业版每月白送50G流量,就有了以下这一系列折腾 方案 在说方案之前先强势安利一波 WPJAM,这个插件集成功能之广,真的前所未见,真心安利。本次的CDN方案也全部基于 WPJAM 与 腾讯云; 这个项目总共就用了两个方案,第一种方案基于腾讯云的COS、CDN服务,也就是 WPJAM 插件里使用腾讯云用CDN进行网站加速作者所给出的方案,详情可以点击链接看一下。 而第二种方案,只使用了腾讯云的CDN加速服务。因为加速的都是一些静态资源,而绝大多数静态资源都是长时间不会去动的,所以回源快慢基本无所谓,只有在回源的时候慢一点。CDN把资源缓存到服务器的之后,除非缓存过期,否则基本不会进行回源操作,故而去掉了腾讯的对象存储服务。这种方案也是本站目前所采用的方案。 直接上图 这个方案导图非常简单,但是经过配置拥有以下好处: 回源速度更快 因为如果采用COS服务,回源顺序是 前端 -> CDN -> COS ->源站,而这样少了一道COS,回源速度就会更快一点(手动狗头 省钱(主要原因 没有COS的各种各样的计费,相对来说更加省钱,基本使用效果与COS使用一致 配置简单 相较于传统的CDN加速方案,都是需要对接COS,这样做的好处之一便是不会让博客突然多出一个域名,如果配置不当还会被别人直接拿走整个站点。 不会使博客多出一个域名,打开CDN加速域名显示为设置的单页 配置 很多操作为了方便,此处使用了宝塔面板,配置分为三个部分:宝塔的配置、腾讯云CDN配置、博客配置。 宝塔配置 新建站点 输入域名,以及修改根目录,此处根目录与博客根目录需保持一致 此处根目录与博客根目录需保持一致 修改默认文档 这就是打开CDN加速域名,而不是博客的原因。打开首页即是你设置的单页,但静态文件与动态文件则不受影响。 默认全部删除,自定义HTML文件文件名 设置SSL 选择Let’s Encrypt 申请即可 腾讯云 CDN 配置 添加域名 主要配置如下: 加速域名:准备的备案域名 加速类型:CDN网页小文件 源站配置: 源站类型:自由源 回源协议:协议跟随 回源地址:填写你的服务器IP 此处节点缓存过期配置需要全部文件删除,然后自定义一些静态文件后缀,为保证首页正确,所以必须缓存html。其余配置保持默认即可 其他配置 提交后需要设置DNS解析。设置完成后,打开管理,需要打开以下配置: 缓存配置->HTTP头部缓存配置 回源配置->打开回源跟随301/302配置 HTTPS配置 配置SSL,具体操作不再演示 打开HTTP 2.0配置 打开强制跳转 跳转类型:Http->Https 跳转方式:301跳转 携带头部:否 高级配置-> HTTP响应头配置 具体点击查看我之前的文章 如不配置,某些文件会发生跨域错误 博客配置 打开WP后台,在 WPJAM 设置->CDN加速->云存储设置 配置如下 云存储:腾讯云COS CDN域名:即之前填写的CDN添加的域名,需要带有HTTPS 图片处理此处不要勾选 在本地设置中,需要添加以下其他静态文件后缀 添加静态文件后缀 设置完成后保存,即可将博客内设置拓展名的静态链接,替换为CDN加速域名 静态资源为CDN加速域名 CDN加速域名打开不会显示博客,而显示之前设置的单页,发布新的文章博客会自动替换图片链接 打开主页域名不是博客

2022/2/24
articleCard.readMore

腾讯云 CDN 加速静态资源所产生的 CORS 错误

给站点的静态资源使用了腾讯云CDN加速,文件镜像到腾讯的对象存储里,结果配置完成后产生了CORS错误,即跨域错误 错误 CORS - 跨域 抽象的解释下为什么会导致跨域错误 当你拥有 A、B 两台服务器时,当 A 与 B 分别建设了一个网站,两个网站使用的域名不相同,分别为 网站A 和 网站B 。在网站A中调用了 网站B 的资源,此时由于 网站A 的头部参数与 网站B 后端程序所绑定的头部参数的不同,很大概率会导致调用B的资源虽然请求成功,但在浏览器中不会加载,这就是跨域错误。 一台服务器中建设两个或多个网站,也是同理。除此之外,除域名之外,端口、协议头不同均会导致跨域错误。 解决方法 错误报告: 1 Access to font at 'https://ras.its.he.cn/wp-content/themes/typology/assets/fonts/fontawesome-webfont.woff?v=4.7.0' from origin 'https://bcon.roywang.cn' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 发生此类错误主要是因为在请求资源时,资源头中没有 ‘Access-Control-Allow-Origin’,只需添加上即可解决 在腾讯云CDN控制台->域名管理->CDN域名管理 在高级配置中配置 HTTP 响应头即可 点击新增规格,配置如下: 1 2 3 头部操作:设置 头部参数:Access-Control-Allow-Origin 头部取值:此处为你所需访问资源的域名或IP,可为‘*’,多个域名或IP需用逗号隔开 保存并打开配置状态即可解决该问题。

2022/2/22
articleCard.readMore

记一次 WordPress 错误(重定向次数过多)

打算把服务器挪到本地来了,使用FRP映射到有公网IP的服务器上。 今天在挪完之后通过 Frp 的 https2http 代理到公网 IP 的服务器上,但是打开域名突然显示重定向次数过多,最初以为是 Frp 的问题,但是检查了一下配置完全没问题,遂怀疑到了WP的头上。 解决方法 遍访了百度,终于找到了答案,将一下代码复制到 wp-config.php 的如下位置即可。 将下列代码复制到文件这个位置即可解决问题 代码 1 2 3 $_SERVER['HTTPS'] = 'on'; define('FORCE_SSL_LOGIN', true); define('FORCE_SSL_ADMIN', true);

2022/2/20
articleCard.readMore

Frp 使用 Systemd 启动可能遇到的错误

fpc使用了https2http的功能,并且使用systemd启动,所用https2http的web服务即会报错找不到SSL相关文件,原因不明 错误代码 1 gen TLS config error: open ./frpc/ssl/roy.wang.crt: no such file or directory 解决方法 将 SSL 相关文件目录改成绝对目录即可解决该问题 1 例:/root/frpc/ssl/roy.wang.crt

2022/2/18
articleCard.readMore

EwoMail - 搭建个人邮件服务器

国内的各大厂都有免费的企业邮箱,体验也算不错。但是限制于容量,如果经常发一些附件的话免费的那么几个G根本不够用,套餐又太贵,此时节约成本的方法就是自建邮箱 准备 一个纯净的服务器(此处以CentOS为例) 域名(使用国内服务器,域名需备案) EwoMail 程序 打开端口:TCP类型8000,8010,8020,25,143,993,995,587,110,109,22,80,465 设置SWAP(服务器内存 2g 及以上可忽略) 检查是否设置SWAP,在命令行输入 free -m 显示 0 0 0 则没有设置SWAP,如显示非 0 0 0 则直接跳到下一步安装 EWOMAIL 安装SWAP 在命令行输入: 1 dd if=/dev/zero of=/mnt/swap bs=1M count=1024 1024 为设置 SWAP 大小,建议大小为服务器内存大小 设置交换分区文件: 1 mkswap /mnt/swap 显示如图,即设置成功 启动SWAP: 1 swapon /mnt/swap 显示如图,即设置成功 设置开机时自启用SWAP分区 在命令行输入: 1 vi /etc/fstab 打开文件 在末行输入: 1 swap /mnt/swap swap defaults 0 0 按下ESC然后输入 :wq 按回车保存并退出 安装 EwoMail 打开 EwoMail 输入域名获取安装地址 复制安装代码到命令行 回车开始安装,等待安装结束 显示Complete installation即为安装成功 设置域名解析 打开域名解析见面添加以下解析 1 2 3 4 5 6 7 8 9 前缀:@ 类型:A 值:youip 前缀:mail 类型:A 值:youip 前缀:pop3 类型:CNAME 值:mail.youdomain 前缀:pop 类型:CNAME 值:mail.youdomain 前缀:imap 类型:CNAME 值:mail.youdomain 前缀:smtp 类型:CNAME 值:mail.youdomain 前缀:@ 类型:MX 值:mail.youdomain MX记录优先级:10 前缀:@ 类型:TXT 值:v=spf1 ip4:youip -all 此处 youdomain 为你的域名,youip 为你的IP 设置DKIM DKIM是电子邮件验证标准,域名密钥识别邮件标准,主要是用来防止被判定为垃圾邮件。每个域名都需要添加一个dkim的key,EwoMail默认安装后已自动添加主域名DKIM,只需要设置好dkim的dns即可。 登录安装 EwoMail 的服务器,执行查看代码 1 2 centos6 : amavisd showkeys centos7 : amavisd -c /etc/amavisd/amavisd.conf showkeys 复制粘贴到 EwoMail 整理信息 增加以下域名解析 1 前缀:dkim_domainkey 类型:TXT 值:获取到的记录值 等待10分钟测试是否设置正确 测试命令: 1 2 Centos6 : amavisd testkeys Centos7 : amavisd -c /etc/amavisd/amavisd.conf testkeys 显示pass即为正常 登陆使用 邮箱管理后台:IP:8010 web邮件系统:IP:8000 更多配置可以请查看详细文档 EWOMAIL 初始用户:admin 初始密码:ewomail1233 测试 添加邮箱 发送测试邮件 发送成功 收取成功 后语 如果在发送邮件时,提示连接服务器失败,请确认打开了25端口,如果已经打开了还是无法发送,部分服务商会默认封掉25端口(如腾讯云),请申请解封

2022/2/17
articleCard.readMore

BilibiliTask - B站自动挂机升级脚本

B站如果正常使用,偶尔投币不投稿的话升级实在太过缓慢。。。今天在刷百度时偶然发现了一个项目,可以进行自动挂机升级,每天可以获得65点经验。 BilibiliTask 项目地址:BilibiliTask 特性 自动获取经验(投币、点赞、分享视频) 直播辅助(直播签到,自动送出即将过期的礼物) 自动兑换银瓜子为硬币 自动领取年度大会员每月权益(每月1号领取B币劵、权益礼包) 月底自动用B币卷给自己充电(每月28号) 月底自动用B币卷兑换金瓜子(每月28号) 漫画辅助脚本(漫画APP签到) 支持功能自定义(自定义投币数量,银瓜子兑换硬币开关等) 账户失效提醒(发送到你的微信或者钉钉) 增加用server酱推送运行结果到微信 增加推送运行结果到钉钉 搭建 项目给了两种搭建方式,一种是直接托管到GitHub,一种使用的是使用Docker搭建,不过使用Docker搭建的话,管理起来太过麻烦。故此次演示的是直接托管到GitHub。 获取需要的参数 打开 Bilibili,按下F12–>Application–>Cookies–> “https://www.bilibili.com”,需要三个参数SESSDATA、bili_jct、DedeUserID。 将项目Fork到自己的仓库 打开项目地址 BilibiliTask 登录账号后点击 Fork 到自己仓库 将获取到的信息填写到Secrets,一共三个参数 点击 New repository secret 新建三个存储库信息 Name填写BILI_JCT、DEDEUSERID、SESSDATA,Value填写所获得的数据 运行 默认Actions处于禁止状态,在Actions选项中开启Actions功能,把那个绿色的长按钮点一下,开启运行。 点击 按钮开启actions (引用自作者教程) 默认push操作会触发工作流运行。打开README.md,将里面的 笑脸 删除一个即可。 删除笑脸后保存配置文件(引用自作者教程) 查看actions,显示对勾就说明运行成功了。以后会在每天的10:30执行,自动完成每日任务。 查看运行情况(引用自作者教程) 使用Telegram Bot推送到Telegram群组 创建Telegram Bot 发送 /newbot 到 @BotFather,并给这个机器人取一个名字,获取Telegram Bot Token 获取Telegram Bot Token 获取群组ID并将机器人加入其中 在搜索框搜索 你的机器人名字,添加进群组 将机器人添加至群组 向机器人发送 “https://api.telegram.org/bot你的botToken/getUpdates”,打开网址箭头为群组ID 获取群组ID 在Secrets中新增TELEGRAM_BOT_TOKEN、TELEGRAM_CHAT_ID将获取的数据输入到value 此处TELEGRAM_BOT_TOKEN value填写 bot token,TELEGRAM_CHAT_ID value填写群组ID 即可完成 Telegram Bot 推送 完成 TG 推送 配置文件说明 配置文件的位置在 src/main/resource/config.yml

2022/2/15
articleCard.readMore

为知笔记(WizNote)上传图片失败问题

在使用为知笔记的时候,出现了上传图片失败的问题,经过检查发生了跨域问题。由于是开启了HTTPS,但没有在NGINX进行相应设置所导致的 操作 只需在 NGINX 的配置文件(反向代理的配置文件)修改相关反代文件即可 将宝塔反代配置文件的proxy_set_header全部替换 1 2 3 4 5 6 将宝塔反代配置文件的proxy_set_header全部替换: proxy_set_header X-Real-IP $remote_addr; proxy_set_header x-wiz-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; 测试下 1 2 https://your-server/?p=wiz&c=endpoints 注意是https协议,将 your-server 修改成自己的域名 显示HTTPS既成功 注意:某些时候如果长时间的不注销重新登录的话,会导致token失效。也会造成上传图片失败,此时注销重新登录即可。

2022/2/14
articleCard.readMore

让自己的电脑变成服务器(Linux)平台

这篇文章感觉纯属多余,Linux都日常用了,还能不知道怎么搞WEB服务?不过写都写了,还是发出来吧~ 准备 公网IP Linux系统(推荐使用CentOS7.6,本教程也基于CentOS7.6)的电脑 拥有映射功能的路由器 如何开通公网 IP 电信联通用户可以直接拨打客服进行开通公网IP,移动用户暂时不可以开通公网IP,但是此方法获得的公网IP地址是动态的,并非固定的,这也就意味着,如果IP地址更换了,就必须重新配置 如何看自己的 IP 地址是否为公网IP呢? 进入路由器设置界面 找到自己WAN口的IP地址,不会请自行百度 在百度上输入IP,即可显示你的局域网IP地址 如果WAN口的IP地址与局域网中的IP地址一致,那么恭喜你,你的IP即公网IP 正文: CentOS 开启网络。如已开启,直接跳过本步骤 1、登录系统并获取ROOT权限,输入 ip addr 获取本机的局域网IP 箭头所指向的IP地址即为局域网IP地址 若无显示局域网IP即未启动网络服务 2、解决办法:在命令行输入 cd /etc/sysconfig/network-scripts/ 敲回车,然后输入vi ifcfg-ens33 即可 一般为ens33文件,也有不同 3、将 ONBOOT 更改为 yes 即可,然后按下ESC输入 :wq 即可保存 如果显示下面这条提示,即证明没有获取 root 权限,获取 root 权限后然后按照上面的步骤再走一遍即可 4、保存成功,然后输入 service network restart 重启网络服务即可 5、再输入 ip addr 查询局域网 IP 局域网 IP 为 192.168.1.68 二、设置端口映射 1、设置宝塔默认端口进行端口映射 描述:随个人喜好 指定出口:所有外网接口 协议:TCP+UDP 外部端口:0-65535之间,但不可以是80/443(因为动态IP 80 443端口默认屏蔽,且无法打开) 内部IP:即第一步获取的局域网IP 内部端口:默认为80可以修改 端口回流:此选项一定要打开,否则外网无法访问 设置完保存即可 2、设置网站端口进行端口映射 描述:随个人喜好 指定出口:所有外网接口 协议:TCP+UDP 外部端口:0-65535之间,但不可以是80/443(因为动态IP 80 443端口默认屏蔽,且无法打开) 内部IP:即第6步获取的局域网IP 内部端口:默认为80可以修改 端口回流:此选项一定要打开,否则外网无法访问 设置完保存即可 三、安装宝塔面板 1、去 宝塔 获取最新的安装命令,然后输入后回车,输入 y 回车,等待安装完成。 显示如图界面即为安装成功,红框内的第一行为登录面板的网址,第二行为账号,第三行为密码 2、访问面板网址并配置面板。将第一行的网址输入到浏览器的网址栏,输入账号密码即可登录 3、首次登录后直接一键安装无需修改,建议PHP版本安装7.0+,等待安装完成。 4、找到软件管理->宝塔插件->安装宝塔一键部署源码并设置为首页显示 四、安装并部署网站,以 WordPress 为例 1、点击宝塔一键部署源码 2、找到 WordPress 并点击一键部署 3、输入域名或局域网IP或公网IP,设置数据库账号密码,点击提交即可 局域网IP,以及 公网IP+未占用端口 为必须配置 4、部署完成后输入设置的域名或 IP 即可访问网站。输入设置的数据库信息即可。 5、输入站点名称以及各种信息即可 6、网站配置完成,若配置其他网站步骤基本相同 7、若网站不支持一键配置即点击网站,添加站点,配置域名数据库等信息即可 8、然后将网站源码上传至文件->wwwroot 站点根目录下,然后访问设置的IP或域名即可进行网站配置 此方法不可用于实际建站 域名无法备案,且无法开启80端口,如果要正常域名解析的话要在网址后面加上端口才可以访问 数据安全性几乎为0,随时可能会遭受攻击 此公网IP为动态IP,如果路由器重启就必须重新部署网站,否则不可访问 建议若是搭建网站请到云服务商处购买服务器使用 若数据发生使用此方法搭建网站数据发生损坏,或网站被黑本人概不负责 实际访问速度,以及下载上传速度,看网速,以及硬盘性能

2021/11/30
articleCard.readMore

让自己的电脑变成服务器(Windows)

很多人问过我,家用电脑和服务器有什么区别?家用电脑可以当服务器用么?答案是肯定了,只是家用计算机没有服务器稳罢了~ 准备 公网IP WINDOWS系统的电脑 拥有映射功能的路由器 如何开通公网 IP 电信联通用户可以直接拨打客服进行开通公网IP,移动用户暂时不可以开通公网IP,但是此方法获得的公网IP地址是动态的,并非固定的,这也就意味着,如果IP地址更换了,就必须重新配置 如何看自己的 IP 地址是否为公网 IP 呢? 进入路由器设置界面 找到自己WAN口的IP地址,不会请自行百度 在百度上输入IP,即可显示你的局域网IP地址 如果WAN口的IP地址与局域网中的IP地址一致,那么恭喜你,你的IP即公网IP 正文: 下载并安装 WampServer (此处以2.5版本为例) 1、在百度输入WampServer2.5 2、下载并解压到桌面 3、双击运行安装,一直下一步即可 4、勾选 Create a Desktop icon(在桌面创建图表) 若遇到以下情况之间点击打开即可 5、安装完成双击打开,此时会在托盘处生成一个小图标,右键单击->Language->chinese 即可切换为中文 6、在浏览器网址框输入 127.0.0.1 显示以下界面即软件配置成功,若无显示此网页查看图标是否为绿色,如非绿色即软件启动失败 查看 PC 局域网 IP 1、打开CMD,输入 ipconfig /all 敲回车。其中IPV4地址即位局域网IP地址 2、在浏览器中输入局域网IP地址,显示下图即可开始下一步 设置端口映射 1、登录路由器设置界面,不同品牌的路由器设置方法不同,但均大同小异 2、在菜单栏中找到端口映射选项进入(某些路由器名称可能不一) 3、添加新的端口映射 描述:随个人喜好 指定出口:所有外网接口 协议:TCP+UDP 外部端口:0-65535之间,但不可以是80/443(因为动态IP 80 443端口默认屏蔽,且无法打开) 内部IP:即第6步获取的局域网IP 内部端口:默认为80可以修改 端口回流:此选项一定要打开,否则外网无法访问 设置完保存即可 4、在浏览器的网址框内输入公网IP并加上端口 解决显示 Fobidden 左键单击WampServe托盘图标,单击列表最下方切换至在线状态即可,单击后服务后自动重启,当图标变成绿色后即可正常访问 搭建网站(此处以 WordPress 为例) 1、在WordPress官网下载网站源码,点击获取WordPress 2、下载并将压缩文件中WordPress文件夹中的文件解压至 C:\wampwww 解压前请将此文件夹内的文件全部删除 3、设置 WordPress,输入公网IP自动跳转至设置页面并点击现在就开始 4、数据库名为 mysql 用户名为 root 密码为空,其余默认即可。输入完毕后点击提交并点击现在安装即可 5、按需填写 6、网站即部署完成,若布置其他网站方法大同小异 此方法不可用于实际建站 域名无法备案,且无法开启80端口,如果要正常域名解析的话要在网址后面加上端口才可以访问 数据安全性几乎为0,随时可能会遭受攻击 此公网IP为动态IP,如果路由器重启就必须重新部署网站,否则不可访问 建议若是搭建网站请到云服务商处购买服务器使用 若数据发生使用此方法搭建网站数据发生损坏,或网站被黑本人概不负责 实际访问速度,以及下载上传速度,看网速,以及硬盘性能

2021/11/28
articleCard.readMore

弱冠

公历2021年8月14日,阴阳历七月初七,七夕。 七夕,古时一曰乞巧,一曰魁星,古今乃牛郎织女团圆日也,其二之幸,亦吾之幸也。 《礼记·曲礼上》云:二十曰弱冠。 即到弱冠,则成人矣。 然不觉过速,已至弱冠。 年至弱冠,已过舞象之年。 但觉身似弱冠,而心似黄口。 然已二十载,仍不知所以,心诚惶恐。 恐负亲,恐负友,恐负己也。 不知事何,心生茫然,一事无成。 然亲不弃,友不离,心生感激,不知何谓。 今已弱冠,当有知矣,不如舞象也,后当力学,擢自。

2021/8/14
articleCard.readMore