本文并不针对任何一个AI,文中的免费AI,付费AI也不代指或暗指任何一个AI。
本文属于个人观点。
不知道大家有没有感觉,在使用一个免费AI回答某个问题时,如果对话的篇幅很长,你会感觉这个AI越来越笨笨的了。或者,你问免费的AI它是什么模型,它通常不会告诉你它是什么模型,只会说是XXX公司的XX AI。而付费的AI(以付费API为例)的,你问它是什么模型,它是会告诉你的,且对话篇幅很长不会出现变笨了的感觉,只是感觉钱包空空了
免费的AI通常有3大限制:
限流,限定时间内提问过快过多,AI可能就不会理你了
自己会切模型,问多了,因为考虑到成本,你用的ProAI可能就变成了LiteAI或者MiniAI,能力瞬间下降,这也是为什么用免费AI解决不了某个问题时,开个新对话,或者等会再问,AI可能就变聪明了
提问内容的限制,官网的一些免费AI远比它的付费版本,内容限制多得多
提到付费的AI,大家可能首先想到的就是XXX套餐或者XXX会员,但是我这里想讲的是AI的付费API
这种给AI掏钱买API用的方式与免费的通常有2个区别:
不限流,你余额还有钱就可以稳定输出
可以指定使用什么模型,不会遇到变笨的情况
总结一下,付费的AI,无论是XX套餐或者会员,还是它的付费API的形式,并不是比免费的AI多聪明多少,而是能一直稳定,按照你需求的质量输出。
至于大家是需要付费的AI,还是免费的AI,就看个人需求了。
]]>前些天在网上找免费API的AI,找到了
普通用户注册后有免费的额度,每个月都有
9,000,000input tokens/月
3,000,000output tokens/月
在https://internlm.intern-ai.org.cn/api/tokens获取,需要手机号注册,注册后可以直接创建API Key,但是每6个月需要更换,否则会失效。
默认是限制每分钟只能调用30次,每分钟最大50000Tokens,但是可以在https://internlm.intern-ai.org.cn/api/strategy申请更高限流
我目前申请到了每分钟60次,最大300000Tokens。
BaseUrl: https://chat.intern-ai.org.cn/api/v1/
from openai import OpenAI
client = OpenAI(
api_key="eyJ0eXBlIjoiSl...请填写准确的 token!", # 此处传token,不带Bearer
base_url="https://chat.intern-ai.org.cn/api/v1/",
)
chat_rsp = client.chat.completions.create(
model="intern-latest",
messages=[{"role": "user", "content": "hello"}],
)
for choice in chat_rsp.choices:
print(choice.message.content)
]]>
今天闲得无聊,随便问了几个问题(可能20个的样子),然后花出去13.67元,那太贵了,有没有方法省点钱呢?
还真有,每家大厂都有自己的CodingPlan,如果你Token用的多的话相当于是打了1折,CodingPlan是什么呢?
请看下图(示例对象为豆包模型的火山方舟):
由此我们可以知道,如果自己请求很多的话用CodingPlan无非是等等,价格却是相当于打了1折,非常便宜,基本可以说是个人使用随便问了。
下面给出3家大厂的链接(基本都集成了很多模型):
阿里云(主要是Qwen模型):阿里云百炼 Coding Plan - AI 编码订阅计划 - 阿里云
腾讯云(主要是HY模型):腾讯云 Coding Plan 智能 AI 编程订阅服务
火山引擎(主要是Doubao模型):方舟Coding-Plan
]]>最近OpenClaw老火了,号称啥事都能帮你干的AI,任务丢过去就会自己完成,完美解决了Token滞销的问题,那么今天就用Docker Compose来搞一个玩玩!
注意:不要随便给别人用!!!否则AI可能把你的API和个人信息之类的打包发给别人!!!也不要在自己的主力电脑上部署,小心AI直接给你文件删完了!!!附带一句请随时注意你的Token账单和你的钱包!
mkdir -p ~/openclaw-docker
cd ~/openclaw-docker
nano .env # 创建.env文件
将以下内容复制到 .env 文件:
# 镜像配置
OPENCLAW_IMAGE=jiulingyun803/openclaw-cn:latest
# 数据目录(相对于 docker-compose.yml 所在目录)
OPENCLAW_CONFIG_DIR=./data/.openclaw
OPENCLAW_WORKSPACE_DIR=./data/clawd
# 网关配置
OPENCLAW_GATEWAY_PORT=18789
OPENCLAW_BRIDGE_PORT=18790
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_TOKEN=your-secure-token-here
# Claude 集成(可选,仅使用 Claude 作为后端时填写)
CLAUDE_AI_SESSION_KEY=
CLAUDE_WEB_SESSION_KEY=
CLAUDE_WEB_COOKIE=
这里附一份表格,关于.env的配置解释:
nano docker-compose.yml # 创建docker-compose.yml文件
将以下内容复制到 docker-compose.yml:
services:
openclaw-cn-gateway:
image: ${OPENCLAW_IMAGE:-openclaw-cn:local}
user: node:node
environment:
HOME: /home/node
TERM: xterm-256color
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
CLAUDE_AI_SESSION_KEY: ${CLAUDE_AI_SESSION_KEY}
CLAUDE_WEB_SESSION_KEY: ${CLAUDE_WEB_SESSION_KEY}
CLAUDE_WEB_COOKIE: ${CLAUDE_WEB_COOKIE}
volumes:
- ${OPENCLAW_CONFIG_DIR:-./data/.openclaw}:/home/node/.openclaw
- ${OPENCLAW_WORKSPACE_DIR:-./data/clawd}:/home/node/clawd
ports:
- "${OPENCLAW_GATEWAY_PORT:-18789}:18789"
- "${OPENCLAW_BRIDGE_PORT:-18790}:18790"
init: true
restart: unless-stopped
command:
[
"node",
"dist/index.js",
"gateway",
"--bind",
"${OPENCLAW_GATEWAY_BIND:-lan}",
"--port",
"${OPENCLAW_GATEWAY_PORT:-18789}"
]
openclaw-cn-cli:
image: ${OPENCLAW_IMAGE:-openclaw-cn:local}
user: node:node
environment:
HOME: /home/node
TERM: xterm-256color
BROWSER: echo
CLAUDE_AI_SESSION_KEY: ${CLAUDE_AI_SESSION_KEY}
CLAUDE_WEB_SESSION_KEY: ${CLAUDE_WEB_SESSION_KEY}
CLAUDE_WEB_COOKIE: ${CLAUDE_WEB_COOKIE}
volumes:
- ${OPENCLAW_CONFIG_DIR:-./data/.openclaw}:/home/node/.openclaw
- ${OPENCLAW_WORKSPACE_DIR:-./data/clawd}:/home/node/clawd
stdin_open: true
tty: true
init: true
entrypoint: ["node", "dist/index.js"]
docker compose up -d
docker compose run --rm openclaw-cn-cli onboard
配置向导可以帮助你完成以下基础设置:
选择网关后端(Claude、Gemini 等)
配置 Feishu、Telegram 等渠道
生成和保存配置
打开浏览器访问:
http://127.0.0.1:18789/
将配置向导生成的令牌复制到登录页面即可。
如果你有公网IP的话,就用 http://你的公网IP:端口/ 访问。
最后文章的结尾,我附带一些个人的观点,欢迎大家在评论区参与讨论!
OpenClaw的出现,无疑是智能体AI的又一大进步。
对于一些真正有需求的企业,肯定不敢大规模使用,就算是大规模使用了,也不会没有审核之类的一道防线,只能说继续期待AI发展。
对于普通个人而言,我建议玩玩就可以了,不要想着这个东西能挣钱,要知道使用AI的成本就是非常高的,我自己也试了试的,基本上一个很简单的问题,比如问问今天的天气,就能干到10万Tokens左右,这还是正常的,以 Doubao-Seed-2.0-pro 的价格来算,就约为1.6元,实际情况更多,编程一类的,账单更是飞上天了(我试了试开发一个Windows下能用的计算器,AI完成后花费了我23.6元),当你玩久后发现,能干的事多,但真正的能干的事情少,真的太少了,在OpenClaw AI能干的事情,你基本上也能完成,还能省少说10元钱,因为现在的AI不成熟,你永远无法知道AI会给你来上波什么操作。
对于有钱,且真的需求效率的,我推荐试一试,真的能快太多。
最后的最后,如果你真的决定用了,请随时注意有关OpenClaw的安全升级和漏洞消息,谨防信息泄露等等问题!
]]>
欢迎评论区留言,我会继续优化的
]]>Halo本身是没有在线通讯的聊天平台的,所以 微言-即时通讯 提供了一个即使通讯的平台,让你能在这里面组建群聊发布公告之类的,价格很是亲民,只有69.9元,甚至还在不断更新,效果参考。
本文是图片测评
它的后台大概是图片这样。
可以看到还是很丰富的,基本上可以详细的配置你需求的聊天场景。
角色的权限管理也很细致,需要什么可以勾选什么权限。
这样的好处就是你可以细致的管理聊天,比如让某人当超管,某人处理举报等等
这不放图,大家可以注册账号去在线聊天看看。
价格亲民,功能还有这么多,后台管理细致,权限分配详细,界面现代美观,是个好插件!
]]>本文用于长期保存各种重要公告。
在线聊天: 添加好友->pymcn
注册账号并同意协议可以使用 在线聊天 服务,可以使用 添加群聊 搜索 所有人 加入所有人都可以加入的公共群聊。
一直掉线无法连接,请尝试清空聊天消息,可能是消息太多导致连接掉线。N
]]>自己有了网站后,总觉得自己的邮箱结尾得是 xxx@自己的域名,才能把域名价值最大化,于是就有了这篇文章,实例:我的邮箱 [email protected]
进入到你托管好的域名,在左侧栏点击 电子邮件 -> 电子邮件路由 ,然后点击 开始使用 ,在里面填入你要收邮件的地址,例如 [email protected] 这里的 yours.com 是你自己的域名,然后目标填你 实际收邮件的邮箱 ,例如 [email protected] 。
然后点继续,会给你刚填的目标邮箱,发封验证邮件,验证完显示已验证就可以继续了
到了这个界面直接点 添加记录并启用 就完成了!你可以测试下给你的路由邮件发邮件,看看你的目标邮件能不能收到,需要注意的是回复只能用目标邮件回复。
如果你是在Cloudflare购买的域名可以跳过这一步
如果不是则需要先将域名托管到Cloudflare上才能使用它的各种服务。
注册并登陆你的Cloudflare账户,然后打开Cloudflare主页点击添加站点
在下面填入你要托管的域名
选择免费套餐,也就是那个标注Free的套餐,然后DNS让它自己搜索记录,你也可以手动添加。
随后回到你购买域名的服务商的域名控制台,因为我是在新网购买的域名,所以这里用新网做演示,其他服务商操作步骤大差不差。
进入到域名管理页面,在你要托管的域名的旁边点击管理按钮,然后点击修改DNS,就会进入一个类似于这样的界面,在这里分别填入两个Cloudflare要求你填入的DNS地址,其他多余的留空不填。
然后等待DNS修改生效,通常等2个小时左右,建议先去干点别的事或者休息会,然后回来刷新页面看看有没有添加成功,如果添加的域名显示状态为活动,就是添加成功了,没有的话还需要再等等,等到站点激活成功能进入具体界面就托管成功了!
]]>Uptime Kuma是一个用于监控网站各项服务状态,在线时间,故障时间的Docker项目。
本文需要Docker和Docker Compose才能完成安装,没有先去装,参考这篇文章
mkdir -p ~/opt/uptime-kuma
cd ~/opt/uptime-kuma
在目录下使用
nano docker-compose.yml
会自动创建一个文件,在里面填入如下内容,默认端口为 13001 可以自行更改。
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:2
container_name: uptime-kuma
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- "13001:3001"
目录里执行:
docker compose up -d
等待命令跑完就可以 http://你的IP:13301 访问了。
初始登陆要设置管理员账户和选择数据库之类的。
如果无法访问,请看看有没有放行防火墙,或者看看是否存在端口冲突。
我的网站使用了自定义的CSS美化,需要的话下面有:
/* GLOBALS
-------------------------------------------------- */
:root {
/* Palette colors */
--color-gray: #7f8c8d;
--color-red: #e74c3c;
--color-orange: #f39c12;
--color-teal: #1abc9c;
--color-blue: #3498db;
--color-green: #27ae60;
--color-indigo: #5c6bc0;
--color-purple: #9b59b6;
--color-pink: #e84393;
/* Palette RGB colors */
--rgb-color-gray: 127, 140, 141;
--rgb-color-red: 231, 76, 60;
--rgb-color-orange: 243, 156, 18;
--rgb-color-teal: 26, 188, 156;
--rgb-color-blue: 52, 152, 219;
--rgb-color-green: 39, 174, 96;
--rgb-color-indigo: 92, 107, 192;
--rgb-color-purple: 155, 89, 182;
--rgb-color-pink: 232, 67, 147;
/* Light theme base colors */
--color-bg: #fbfbfc;
--color-text-primary: #566573;
--color-text-heading: #141414;
--color-text-secondary: #85929e;
--color-block-bg: #fff;
--color-border: rgba(0, 0, 0, .1);
--color-uptime-bar-empty-bg: #d7dbdd;
--color-tooltip-bg: #fff;
/* Button: Secondary */
--color-btn-secondary-bg: transparent;
--color-btn-secondary-hover-bg: #ebebeb;
--color-btn-secondary-active-bg: #d7d7d7;
--color-btn-secondary-border: rgba(0, 0, 0, .16);
/* Sizing */
--size-container-width: 864px;
--size-edit-container-width: 1164px;
--size-logo-width: 48px;
--size-logo-height: 48px;
--size-uptime-bar-height: 24px;
/* Spacing */
--spacing-4: .25rem;
--spacing-8: .5rem;
--spacing-12: .75rem;
--spacing-16: 1rem;
--spacing-20: 1.25rem;
--spacing-24: 1.5rem;
--spacing-32: 2rem;
/* Border radius */
--border-radius-200: .25rem;
--border-radius-400: .375rem;
--border-radius-500: .5rem;
/* Typography */
--font-size-50: 0.75rem;
--font-size-100: .875rem;
--font-size-300: 1.125rem;
--font-size-350: 1.25rem;
--font-weight-medium: 500;
--font-weight-semibold: 600;
--font-line-height-200: var(--spacing-24);
/* Shadow */
--shadow-filter: rgba(0, 0, 0, .05) 0px 1px 6px 0px;
}
/* DARK THEME OVERRIDES
-------------------------------------------------- */
.dark {
/* Base colors */
--color-bg: #141414;
--color-text-primary: #909497;
--color-text-heading: #f1f1f1;
--color-text-secondary: #626567;
--color-block-bg: #1e1e1e;
--color-border: rgba(255, 255, 255, .07);
--color-uptime-bar-empty-bg: #424949;
--color-tooltip-bg: #1e1e1e;
/* Button: Secondary */
--color-btn-secondary-bg: transparent;
--color-btn-secondary-hover-bg: #232323;
--color-btn-secondary-active-bg: #1e1e1e;
--color-btn-secondary-border: rgba(255, 255, 255, .13);
}
/* BASE STRUCTURE
-------------------------------------------------- */
body:not(:has(.edit)) {
background-color: var(--color-bg) !important;
color: var(--color-text-primary) !important;
}
.container {
margin-top: 0 !important;
padding: var(--spacing-32) var(--spacing-20) 0;
max-width: var(--size-container-width);
}
/* Link (excluding button) */
a:not(.btn),
.dark a:not(.btn) {
color: inherit;
text-underline-offset: .125em;
}
a:not(.btn):hover,
.dark a:not(.btn):hover,
a:not(.btn):focus-visible {
outline: none;
color: var(--color-blue);
}
/* HEADER
-------------------------------------------------- */
/* Wrapper for logo and title */
.title-flex {
margin-bottom: var(--spacing-32) !important;
}
/* Center the logo */
.logo-wrapper {
margin: 0 auto;
}
/* Resize the logo */
.logo {
width: var(--size-logo-width) !important;
height: var(--size-logo-height) !important;
}
/* Remove the margin of the logo */
[dir="ltr"] .logo {
margin-right: 0 !important;
}
/* Remove the title adjacent to the logo */
span[data-v-7d4a7f28] {
display: none;
}
/* ADMIN BUTTONS
-------------------------------------------------- */
/* Fix vertical margin of admin buttons on mobile */
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) {
margin-bottom: var(--spacing-32) !important;
}
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) div {
display: flex;
flex-wrap: wrap;
gap: var(--spacing-8);
}
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) div button {
margin: 0 !important;
}
/* Admin button */
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) .btn-primary {
box-shadow: none;
border: 1px solid var(--color-btn-secondary-border);
border-radius: var(--border-radius-400);
background-color: var(--color-btn-secondary-bg);
padding: var(--spacing-4) var(--spacing-12);
color: var(--color-text-heading);
font-weight: var(--font-weight-medium);
font-size: var(--font-size-100);
line-height: var(--font-line-height-200);
}
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) .btn-primary:hover,
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) .btn-primary:focus-visible {
background-color: var(--color-btn-secondary-hover-bg);
}
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) .btn-primary:active {
box-shadow: none;
background-color: var(--color-btn-secondary-active-bg);
}
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) .btn-primary svg {
display: none;
}
/* INCIDENT BLOCK
-------------------------------------------------- */
.incident[data-v-a2098280] {
margin-bottom: var(--spacing-16) !important;
box-shadow: none;
border-radius: var(--border-radius-500);
padding: var(--spacing-20) !important;
color: var(--color-text-heading) !important;
}
.incident[data-v-a2098280].bg-info {
border: 1px solid rgba(var(--rgb-color-teal), .23);
background-color: rgba(var(--rgb-color-teal), .08) !important;
}
.incident[data-v-a2098280].bg-warning {
border: 1px solid rgba(var(--rgb-color-orange), .23);
background-color: rgba(var(--rgb-color-orange), .08) !important;
}
.incident[data-v-a2098280].bg-danger {
border: 1px solid rgba(var(--rgb-color-red), .23);
background-color: rgba(var(--rgb-color-red), .08) !important;
}
.incident[data-v-a2098280].bg-primary {
border: 1px solid rgba(var(--rgb-color-green), .23);
background-color: rgba(var(--rgb-color-green), .08) !important;
}
.incident[data-v-a2098280].bg-light {
box-shadow: var(--shadow-filter);
border: 1px solid var(--color-border);
background-color: var(--color-block-bg) !important;
}
.incident[data-v-a2098280].bg-dark {
box-shadow: var(--shadow-filter);
border: 1px solid var(--color-border);
background-color: var(--color-bg) !important;
}
.incident[data-v-a2098280] h4 {
font-size: var(--font-size-300);
}
.incident[data-v-a2098280] div {
color: var(--color-text-primary);
}
.date.mt-3 {
border-top: 1px solid var(--color-border);
padding-top: var(--spacing-20);
}
/* MAIN STATUS BLOCK
-------------------------------------------------- */
.overall-status[data-v-a2098280] {
margin-bottom: var(--spacing-16) !important;
box-shadow: none;
border-radius: var(--border-radius-500);
padding: var(--spacing-20) !important;
color: var(--color-text-heading);
font-weight: var(--font-weight-semibold);
font-size: var(--font-size-350);
line-height: var(--font-line-height-200);
}
.overall-status[data-v-a2098280]:has(.ok) {
border: 1px solid rgba(var(--rgb-color-green), .23);
background-color: rgba(var(--rgb-color-green), .08);
}
.overall-status[data-v-a2098280]:has(.warning) {
border: 1px solid rgba(var(--rgb-color-orange), .23);
background-color: rgba(var(--rgb-color-orange), .08);
}
.overall-status[data-v-a2098280]:has(.danger) {
border: 1px solid rgba(var(--rgb-color-red), .23);
background-color: rgba(var(--rgb-color-red), .08);
}
.overall-status[data-v-a2098280]:has(.status-maintenance) {
border: 1px solid rgba(var(--rgb-color-blue), .23);
background-color: rgba(var(--rgb-color-blue), .08);
}
.overall-status[data-v-a2098280] div {
display: flex;
align-items: center;
gap: var(--spacing-20);
}
.overall-status[data-v-a2098280] svg {
margin-right: 0 !important;
width: 1.5em;
height: 1.5em;
}
.overall-status[data-v-a2098280]:has(.ok) svg {
color: var(--color-green);
}
.overall-status[data-v-a2098280]:has(.warning) svg {
color: var(--color-orange);
}
.overall-status[data-v-a2098280]:has(.danger) svg {
color: var(--color-red);
}
.overall-status[data-v-a2098280]:has(.status-maintenance) svg {
color: var(--color-blue);
}
/* MAINTENANCE BLOCK
-------------------------------------------------- */
.shadow-box.bg-maintenance {
margin: var(--spacing-16) 0 !important;
box-shadow: none;
border: 1px solid rgba(var(--rgb-color-blue), .23);
border-radius: var(--border-radius-500);
background-color: rgba(var(--rgb-color-blue), .08) !important;
padding: var(--spacing-20) !important;
color: var(--color-text-heading) !important;
}
.shadow-box.bg-maintenance .alert-heading {
color: var(--color-text-heading);
font-weight: var(--font-weight-semibold);
font-size: var(--font-size-300);
}
.shadow-box.bg-maintenance .content {
color: var(--color-text-primary);
}
.timeslot {
display: flex;
margin: 0 !important;
border-top: 1px solid var(--color-border);
border-radius: 0;
background-color: transparent !important;
padding: var(--spacing-20) 0 0;
color: var(--color-text-primary) !important;
font-size: var(--font-size-50);
}
/* USER MARKDOWN ELEMENTS
-------------------------------------------------- */
.alert-heading.p-2 {
margin-bottom: var(--spacing-32);
padding: 0 !important;
}
.alert-heading.p-2 p {
margin: 0;
}
/* PAGE DESCRIPTION
-------------------------------------------------- */
div > .alert-heading.p-2:has(*) {
margin-top: var(--spacing-32);
box-shadow: var(--shadow-filter);
border: 1px solid var(--color-border);
border-radius: var(--border-radius-500);
background-color: var(--color-block-bg);
padding: var(--spacing-20) !important;
}
/* MONITOR GROUP
-------------------------------------------------- */
div[data-v-026459e0]:has(> .group-title) {
margin-bottom: var(--spacing-32) !important;
}
/* Monitor group title */
.group-title {
display: flex;
align-items: center;
margin-bottom: var(--spacing-16);
color: var(--color-text-heading);
font-weight: var(--font-weight-semibold);
font-size: var(--font-size-350);
}
/* Monitor elements in the group */
.shadow-box.monitor-list {
margin-top: 0 !important;
box-shadow: none;
background-color: transparent !important;
padding: 0;
}
.shadow-box.monitor-list > .monitor-list {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: var(--spacing-16);
}
/* Enable 2 columns on wider screens; comment out to disable */
@media (min-width: 532px) {
.shadow-box.monitor-list > .monitor-list {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
/* MONITOR ITEM
-------------------------------------------------- */
.monitor-list .item {
box-shadow: var(--shadow-filter);
border: 1px solid var(--color-border);
border-radius: var(--border-radius-500);
background-color: var(--color-block-bg);
padding: var(--spacing-16) var(--spacing-20) !important;
}
.monitor-list .item:hover {
background-color: var(--color-block-bg) !important;
}
.monitor-list .item > .row > div {
display: flex;
flex-direction: column;
width: 100%;
}
/* Monitor name and uptime percentage container */
.info {
display: flex;
align-items: center;
order: 2;
margin-bottom: var(--spacing-8);
}
/* Monitor name */
.item-name[data-v-026459e0] {
padding-left: 0;
overflow: hidden;
color: var(--color-text-heading);
font-weight: var(--font-weight-semibold);
text-overflow: ellipsis;
white-space: nowrap;
}
/* Uptime percentage */
.badge {
all: unset;
order: 1;
margin-left: auto;
background-color: transparent !important;
color: var(--color-text-primary) !important;
}
/* Monitor tags wrapper */
.extra-info[data-v-026459e0] {
flex-wrap: wrap;
order: 1;
gap: var(--spacing-8);
margin-top: var(--spacing-4);
}
.extra-info:not(:has(div[data-v-12c40cbd])) {
margin-top: 0;
margin-bottom: 0;
}
.extra-info[data-v-026459e0] div {
display: flex;
flex-wrap: wrap;
gap: var(--spacing-8);
min-width: 0;
}
/* Monitor tags */
.tag-wrapper {
align-items: center;
padding-top: 2px !important;
padding-bottom: 2px !important;
}
.tag-wrapper[style*="rgb(75, 85, 99)"] {
border: 1px solid rgba(var(--rgb-color-gray), .23);
background-color: rgba(var(--rgb-color-gray), .08) !important;
color: var(--color-gray) !important;
}
.tag-wrapper[style*="rgb(220, 38, 38)"] {
border: 1px solid rgba(var(--rgb-color-red), .23);
background-color: rgba(var(--rgb-color-red), .08) !important;
color: var(--color-red) !important;
}
.tag-wrapper[style*="rgb(217, 119, 6)"] {
border: 1px solid rgba(var(--rgb-color-orange), .23);
background-color: rgba(var(--rgb-color-orange), .08) !important;
color: var(--color-orange) !important;
}
.tag-wrapper[style*="rgb(5, 150, 105)"] {
border: 1px solid rgba(var(--rgb-color-green), .23);
background-color: rgba(var(--rgb-color-green), .08) !important;
color: var(--color-green) !important;
}
.tag-wrapper[style*="rgb(37, 99, 235)"] {
border: 1px solid rgba(var(--rgb-color-blue), .23);
background-color: rgba(var(--rgb-color-blue), .08) !important;
color: var(--color-blue) !important;
}
.tag-wrapper[style*="rgb(79, 70, 229)"] {
border: 1px solid rgba(var(--rgb-color-indigo), .23);
background-color: rgba(var(--rgb-color-indigo), .08) !important;
color: var(--color-indigo) !important;
}
.tag-wrapper[style*="rgb(124, 58, 237)"] {
border: 1px solid rgba(var(--rgb-color-purple), .23);
background-color: rgba(var(--rgb-color-purple), .08) !important;
color: var(--color-purple) !important;
}
.tag-wrapper[style*="rgb(219, 39, 119)"] {
border: 1px solid rgba(var(--rgb-color-pink), .23);
background-color: rgba(var(--rgb-color-pink), .08) !important;
color: var(--color-pink) !important;
}
/* Wrapper for the uptime bars home and uptime time */
.wrap {
padding: 0 !important;
}
/* Uptime bars home */
.hp-bar-big {
display: flex;
margin-bottom: 6px;
padding: 0;
}
.mobile .hp-bar-big {
padding-bottom: 0;
}
/* Uptime bar in the uptime bars home */
.hp-bar-big .beat-hover-area .beat[data-v-ce0d40a3] {
border-radius: 0;
background-color: var(--color-green);
width: 100% !important;
height: var(--size-uptime-bar-height) !important;
}
.hp-bar-big .beat-hover-area[data-v-ce0d40a3] {
flex: 1;
padding: 0 1px 0 0 !important;
}
.hp-bar-big .beat-hover-area[data-v-ce0d40a3]:not(.empty):hover,
.hp-bar-big .beat-hover-area[data-v-ce0d40a3]:not(.empty):focus-visible {
transform: none;
opacity: .7;
outline: none;
}
.hp-bar-big .beat-hover-area:first-of-type .beat[data-v-ce0d40a3] {
border-top-left-radius: var(--border-radius-200);
border-bottom-left-radius: var(--border-radius-200);
}
.hp-bar-big .beat-hover-area:last-of-type .beat[data-v-ce0d40a3] {
margin: 0 !important;
border-top-right-radius: var(--border-radius-200);
border-bottom-right-radius: var(--border-radius-200);
padding: 0 !important;
}
.hp-bar-big .beat-hover-area .beat[data-v-ce0d40a3].empty {
background-color: var(--color-uptime-bar-empty-bg) !important;
}
.hp-bar-big .beat-hover-area .beat[data-v-ce0d40a3].down {
background-color: var(--color-red);
}
.hp-bar-big .beat-hover-area .beat[data-v-ce0d40a3].pending {
background-color: var(--color-orange);
}
.hp-bar-big .beat-hover-area .beat[data-v-ce0d40a3].maintenance {
background-color: var(--color-blue);
}
/* Uptime time (below uptime bars) */
.word[data-v-ce0d40a3] {
color: var(--color-text-primary);
}
/* FOOTER
-------------------------------------------------- */
/* User markdown, Uptime Kuma branding, refresh timer */
footer[data-v-a2098280] {
margin: var(--spacing-32) 0 !important;
color: var(--color-text-secondary);
}
/* Extra spacing if the user footer has anything */
footer .alert-heading.p-2:has(*) {
margin-bottom: var(--spacing-16) !important;
}
/* Refresh timer */
/* Remove or comment "display: none" to restore visibility */
.refresh-info[data-v-a2098280] {
display: none;
opacity: 1;
margin-bottom: 0 !important;
}
/* EDIT WINDOW
-------------------------------------------------- */
.container:has(.edit) {
max-width: var(--size-edit-container-width);
}
/* Input field for the monitor group name */
.edit span[data-v-7d4a7f28][data-v-026459e0] {
padding: var(--spacing-4) var(--spacing-8);
}
/* Input field for page description and footer */
.edit h4[data-v-7d4a7f28][data-v-a2098280][contenteditable="true"],
.edit div[data-v-7d4a7f28][data-v-a2098280] {
padding: var(--spacing-8) var(--spacing-12) !important;
color: var(--color-text-heading);
}
/* OVERLAYS
-------------------------------------------------- */
/* Uptime bar hover tooltip */
.tooltip-wrapper .tooltip-content[data-v-abd90d66] {
box-shadow: var(--shadow-filter);
border-color: var(--color-border);
background-color: var(--color-tooltip-bg) !important;
text-align: start;
}
.tooltip-wrapper .tooltip-content[data-v-abd90d66]::before {
display: none;
}
.tooltip-wrapper .tooltip-content .tooltip-status[data-v-abd90d66] {
font-size: var(--font-size-100);
}
.tooltip-wrapper .tooltip-content .tooltip-status.status-up[data-v-abd90d66] {
color: var(--color-green);
}
.tooltip-wrapper .tooltip-content .tooltip-status.status-pending[data-v-abd90d66] {
color: var(--color-orange);
}
.tooltip-wrapper .tooltip-content .tooltip-status.status-down[data-v-abd90d66] {
color: var(--color-red);
}
.tooltip-wrapper .tooltip-content .tooltip-status.status-maintenance[data-v-abd90d66] {
color: var(--color-blue);
}
.tooltip-wrapper .tooltip-content .tooltip-time[data-v-abd90d66] {
margin-bottom: 0;
color: var(--color-text-primary);
font-size: var(--font-size-50);
}
.tooltip-wrapper .tooltip-arrow[data-v-abd90d66] {
display: none;
}
]]>sudo apt update # 更新软件包索引
sudo apt install -y docker.io # 安装Docker
docker -v # 验证Docker是否安装成功
# 如果成功,应输出类似的 Docker version 24.0.7, build afdd53b
sudo systemctl start docker # 启动Docker服务
sudo systemctl status docker #查看Docker运行状态
# 输出大概应为 Active: active (running)
sudo systemctl enable docker # 设置Docker开机自启动
sudo systemctl is-enabled docker # 验证上面设置成功没
# 输出应为 enabled
# 执行后需要重启终端才会生效
sudo usermod -aG docker $USER # 配置当前用户不用sudo也能用Docker
# 下载最新的Docker-compose二进制文件
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose # 给执行权限
docker-compose --version # 验证安装是否成功
# 示例输出:Docker Compose version v2.27.0
sudo nano /etc/docker/daemon.json # 打开配置文件
在文件里输入以下内容:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com",
"https://cjie.eu.org"
]
}
保存并退出。
# 重载Docker并重启服务
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart docker
到这里就恭喜你安装成功了!
]]>不多说了,放图,其实我有些无语。。。
虽然说,内存是根据实际可用内存调整的,但是这睡眠状态的内存是不是也有些太多了。。。
问题解决了,配置增加
deploy:
resources:
limits:
# 内存限制为 2.5GB
memory: 2.5G
可以有效限制内存使用量
2026-3-1:我限制成2.5G后,今天直接异常了,无法启动,报错原因是内存不足。。。
]]>TailChat是一个非常好用的开源即时通讯平台,在本文发布前,已经在Github斩获了3.6K Stars,支持多种方式部署,比较简单方便的还是Docker-compose的方式部署,本文就介绍了用Docker-compose搭建TailChat的详细教程和一些注意事项。
你得有Docker和Docker-compose才能完成安装,没有可以先去装一下,参考这篇文章
# 创建一个目录,用于安装TailChat
mkdir -p /opt/tailchat
# 切换到TailChat的安装目录
cd /opt/tailchat
# 编辑Docker容器编排文件
vim docker-compose.yml
在docker-compose.yml中填入以下内容:
version: "3.3"
services:
# 应用网关
service-gateway:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/gateway
PORT: 3000
depends_on:
- mongo
- redis
labels:
- "traefik.enable=true"
- "traefik.http.routers.api-gw.rule=PathPrefix(`/`)"
- "traefik.http.services.api-gw.loadbalancer.server.port=3000"
networks:
- internal
# 用户服务
service-user:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/user/*
depends_on:
- mongo
- redis
networks:
- internal
# 群组服务
service-group:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/group/*
depends_on:
- mongo
- redis
networks:
- internal
# 聊天服务
service-chat:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/chat/*
depends_on:
- mongo
- redis
networks:
- internal
# 文件服务 / 插件注册中心 / 配置服务
service-file:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/file,core/plugin/registry,core/config
depends_on:
- mongo
- redis
- minio
networks:
- internal
service-openapi:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: openapi/app,openapi/oidc/oidc
OPENAPI_PORT: 3003
OPENAPI_UNDER_PROXY: "true"
depends_on:
- mongo
- redis
- minio
labels:
- "traefik.enable=true"
- "traefik.http.routers.openapi-oidc.rule=PathPrefix(`/open`)"
- "traefik.http.services.openapi-oidc.loadbalancer.server.port=3003"
networks:
- internal
# 插件服务(所有插件)
service-all-plugins:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICEDIR: plugins
depends_on:
- mongo
- redis
- minio
networks:
- internal
# 数据库
mongo:
image: mongo:4
restart: on-failure
volumes:
- ./data:/data/db
networks:
- internal
# 数据缓存与中转通讯
redis:
image: redis:alpine
restart: on-failure
networks:
- internal
# 存储服务
minio:
image: minio/minio
restart: on-failure
networks:
- internal
environment:
MINIO_ROOT_USER: tailchat
MINIO_ROOT_PASSWORD: P@ssw0rd123456
volumes:
- ./storage:/data
command: minio server /data --console-address ":9001"
# 路由转发
traefik:
image: traefik:v2.1
restart: unless-stopped
command:
- "--api.insecure=true" # Don't do that in production!
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entryPoints.web.address=:80"
- "--entryPoints.web.forwardedHeaders.insecure" # Not good
ports:
- 8080:80 # 8080 可以改成自己需要的端口
- 127.0.0.1:11001:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- internal
- default
networks:
internal:
name: tailchat-internal
编辑环境变量文件
vim docker-compose.env
在docker-compose.env里填入如下内容:
LOGGER=true
LOGLEVEL=info
SERVICEDIR=services
TRANSPORTER=redis://redis:6379
CACHER=redis://redis:6379
REDIS_URL=redis://redis:6379
MONGO_URL=mongodb://mongo/tailchat
SECRET=P@ssw0rd123456 # 改成自己的密钥,重要!一定要改!!!
# file
API_URL=http://192.168.80.8 # 改成自己的网站实际访问地址或域名
# minio
MINIO_URL=minio:9000
MINIO_USER=tailchat
MINIO_PASS=P@ssw0rd123456 # 改成自己的密码,重要!一定要改!!!
# SMTP
# 如果需要邮件功能可以在这里填写,但我建议搭好后去界面里填
SMTP_SENDER= # 发件人,就是邮箱
SMTP_URI= # 发件URI,比如:smtp.qq.com
# metrics
PROMETHEUS=1
docker pull moonrailgun/tailchat
docker tag moonrailgun/tailchat tailchat # 与配置文件填的一致,没有改就默认tailchat
在之前的安装目录里执行:
docker-compose up -d
等待跑完,就安装完成了
默认访问地址为 http://服务器IP地址:8080
自己整的冰点还原的密码忘了,在网上一通搜索后找到了,在其发表的官网下载了MeltdownDFC_V1.7
其网址如下!我得声明!仅供技术研究的大佬去看看,病毒风险,谨慎啊!
https://lifeinhex.com/updated-meltdown-and-enigmavb-unpacker/
据说可以查看冰点还原的密码,下载下来后,运行,确实能看冰点还原5.x-8.31版本的密码,但是!随后Windows安全中心报毒,分类为木马,显示严重且无法处理,到了这里我就将文件提交至了微步云沙箱进行检测。
检测结果基本可以确定,MeltdownDFC这个冰点密码查看器的文件有类似于木马的行为。
如图。
毕竟,这样一个看密码的软件,只是密码查看的功能,不应该有ICMP流量和获取按键信息这样的行为,更不会引起杀软的报毒!
如果已经运行了的话,建议找可疑进程,比如查查系统日志,看看有没有最近添加的启动项和系统服务,我本人是直接电脑还原了,所以说网上找软件工具,还是得小心啊!
]]>Halo自带的搜索引擎搜文章必须全字匹配,有时候根本搜不到,非常不好用,我在应用商店里逛了逛,发现了 Meilisearch 搜索引擎 这个神奇的插件,那就来用一用!
本文需要先安装Docker,没有安装参考此文
在应用商店里先安装插件,并点开到插件的基本设置,方便后续直接设置。
你得有Docker Docker-compose 才能安装,没有可以先去安装。
有了的话,新建任意一个文件夹,新建一YAML 文件,里面填入如下内容:
services:
meilisearch:
image: getmeili/meilisearch:v1.16
restart: unless-stopped
ports:
- "7700:7700"
environment:
- MEILI_ENV=production
- MEILI_MASTER_KEY=你的KEY
volumes:
- meilisearch_data:/meili_data
volumes:
meilisearch_data:
driver: local
注意!MEILI_MASTER_KEY 后面等号的内容需要你自己填写,后续在插件里调用会用到,端口默认为 7700 有需求可以自行更改。
防火墙开放对应的端口,我的是7700,然后在插件里的 基本设置->Meilisearch 服务地址 里填入 你的服务器IP:对应的端口
这里需要注意,已经安装了 Halo 的小伙伴不能直接 localhost 等方式调用,因为容器不在同一网络,只能公网的方式访问!
再在Meilisearch 主密钥里填入先前安装时你的密钥,点击保存开启插件就快完成了!
进入到你的Halo后台的这个页面 /console/plugins/extension-point-settings?extension-point-definition-name=search-engine 在里面对Meilisearch点一下使用,然后就完成了
如果有无法搜索的情况再尝试此步,进入你的后台的这个页面 /console/plugins/meilisearch?tab=overview 点下 重建索引 等待完成应该就可以搜索了!
当你拥有了一个Halo博客,添加一些站外链接是不可能避免的,有时候如果链接导向的内容发生变化,比如域名更换,内容变化等,都有可能使搜索引擎降低你的SEO,甚至是直接取消你的站点的收录,多年来的辛苦就化为灰烬,这时候站外链接跳转提示的插件就显得很重要了。
哔哔几句:你也可以在写文章时添加链接时勾选搜索引擎忽略链接关系,但是每次都得选,比较麻烦。
在这里下载这个插件,建议直接下最新的正式版,本文介绍的是1.1.0版本(发布时的最新正式版)
在插件里,选择本地上传完成安装,点击进入插件,根据你自己的需求,可以进行一些对应的设置
建议随便试一试看看有没有起效果,如果有了的话就恭喜大功告成啦,现在你的博客可以避免外链的变化影响搜索引擎降低你的SEO啦!
]]>Github在国内并不稳定,有时候下载会非常缓慢,而这个网站能完美解决解决这个问题!
打开这个网站,里面粘入你要下载的github的文件的链接,然后点击重新检测延迟,会自动帮你选择最优的节点,再点击开始下载就可以了,速度一般很快,同理也可以用来加速 Git Clone Wget Curl 等。
国内的小伙伴们,在使用ubuntu的时候,有没有感觉安装软件进度条跑得很慢?如果有那大概率就是软件源的问题,ubuntu默认的软件源在国内下载比较缓慢,今天教你简单换源,用清华源快速下载软件!
注意:ubuntu24.04参考 ubuntu24.04特殊步骤 见后文!!!
为了避免后续一些稀缺古怪的操作,导致文件损坏,所以我们先备份一下,后续如果需要换回也比较方便
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
用 vim 或者 nano 或者 vi 等文本编辑器,打开 /etc/apt/sources.list 文件
sudo vim /etc/apt/sources.list
清空原文件所有内容,粘贴以下内容:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu focal-security main restricted universe multiverse
这里需要将 focal 改为你的ubuntu版本代号,可以用这条命令查看
lsb_release -c
比如ubuntu22.04的代号为 jammy ,就这么填写:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
保存并退出编辑器,执行下面2条命令:
sudo apt update
sudo apt upgrade
因为ubuntu24.04源配置文件改为了 DEB822 格式,步骤也变成如下步骤:
备份原文件:
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
编辑文件:
sudo vim /etc/apt/sources.list.d/ubuntu.sources
填入如下内容:
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 安全更新建议保留官方源
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
保存并退出编辑器,更新软件包列表:
sudo apt update
sudo apt upgrade -y
恭喜你到这里就换源完成了!
]]>MCSManager 是一款开源,分布式,支持 Minecraft 和 Steam 游戏服务器 的控制面板。
可以轻松搭建并管理多个服务器,今天我们就来学学这款好用的面板如何安装!
本文介绍如何使用 MCSM 搭建 Minecraft 服务器,其他服务器可以参考并在 MCSM 里安装。
参考本站的这篇文章
这里使用 Docker-compose 完成安装。
注意!所有的 <CHANGE_ME_TO_INSTALL_PATH> 需要替换为你实际数据存储的位置,该位置需要被持久化,web 和 daemon 的安装位置可以不同。
sudo su
mkdir <CHANGE_ME_TO_INSTALL_PATH>
cd <CHANGE_ME_TO_INSTALL_PATH>
nano mcsm.yml #也可以使用vim
在mcsm.yml填入如下内容:
# docker-compose.yml
services:
web:
image: githubyumao/mcsmanager-web:latest
ports:
- "23333:23333"
volumes:
- /etc/localtime:/etc/localtime:ro
- <CHANGE_ME_TO_INSTALL_PATH>/web/data:/opt/mcsmanager/web/data
- <CHANGE_ME_TO_INSTALL_PATH>/web/logs:/opt/mcsmanager/web/logs
daemon:
image: githubyumao/mcsmanager-daemon:latest
restart: unless-stopped
ports:
- "24444:24444"
environment:
- MCSM_DOCKER_WORKSPACE_PATH=<CHANGE_ME_TO_INSTALL_PATH>/daemon/data/InstanceData
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- <CHANGE_ME_TO_INSTALL_PATH>/daemon/data:/opt/mcsmanager/daemon/data
- <CHANGE_ME_TO_INSTALL_PATH>/daemon/logs:/opt/mcsmanager/daemon/logs
- /var/run/docker.sock:/var/run/docker.sock
默认端口是23333 和24444 可以更改为你需要的端口。
一切就绪后执行这条命令:
docker compose pull && docker compose up -d
等待安装完成即可。
在你的云服务商那里开放对应端口的防火墙,如果你安装了如1Panel,宝塔,GMSSH等面板的话,还需要在面板开放对应的端口。
然后在浏览器输入你的服务器IP:23333(如果更改了的话使用你更改的端口) 就可以访问面板了,初次打开会要求你设置管理员账号。
点击顶部导航栏 节点,点击右侧的 新增节点,填写你的服务器公网 IP,密钥和默认的 24444 端口(如果更改了的话使用你更改的端口)。
到这里就完成 MCSM 面板的搭建,你可以通过直观的界面安装各种游戏服务器,如Minecraft 、秘密实验室等等,快去试试吧。
通关的发截图或者全程视频我瞅瞅,难度较难,我打了412次过关😂
操作方式如下:
可以全屏👇:
]]>