MoreRSS

site iconYsicing | 缘生修改

博客名:Solitudes。主要的工作是使用 Go/Rust学习中来实现人们所期望的产品。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Ysicing | 缘生的 RSS 预览

Kite+魔改版Kubernetes Dashboard安利,足够轻量个性化

2025-07-07 21:03:30

最好的版本了,虽然有错字

今天,我要给大家种草一款超赞的开源工具 Kite+,一个现代化、轻量级的 Kubernetes Dashboard,让你的集群管理变得高效又优雅!

没错,就是之前介绍过的探索 Kite:现代化轻量级 Kubernetes Dashboard,助力 DevOps 高效管理集群

这个项目确实很不错,主要是这个 UI 我很喜欢,再搭配上霞鹜文楷,简直善心悦目。

魔改版特点

暂时只列出目前已经支持的特性。这也是为啥我要魔改的原因而不是上游 PR

  • 只支持单集群(主要针对折腾小鸡的用户,如跨云跨网组集群的朋友,k3s 之友)
  • 较完整的中文支持,争取达到全面的中文界面(工作量有些,只能根据使用频率的优先级改动)
  • 突出集群维度的资源(偏向日常使用最多,如节点信息等)
  • 集成 OpenKruise - 更加强大的工作负载管理和运维支持(例如 cloneset 原地升级机制SidecarSet 日志收集神器ImagePullJob 镜像预热)
  • 支持 Tailscale - 可视化管理 Tailscale 集成,重点是 Connectors子网连接器(容器网络打通)、ProxyClasses(主要应用场景是 LoadBalancer, 生成负载均衡 IP)
  • 支持 Traefik,支持 IngressRoute 和相关中间件
  • 支持 System Upgrade 任务管理,可视化管理 k3s 和系统升级任务(目前还没支持,本周会安排上)
  • 版本更新提示(粗略支持版本)

后续版本计划

  • 支持 System Upgrade 任务管理
  • 精简 Traefik 资源管理,只支持 IngressRoute 和中间件,其他资源可浏览
  • 自动检测集群是否已经安装 Prometheus
  • 支持智能巡检

部署

目前仅提高 yaml 部署方式,一键部署。

kubectl apply -f https://raw.githubusercontent.com/ysicing/kite/refs/heads/main/deploy/install.yaml

可直接替换官方镜像

  • ghcr.io/ysicing/kite
  • ghcr.kcds.ysicing.net/ysicing/kite(可能会稍微滞后一点)

还有官方原来镜像拉取策略是 imagePullPolicy: IfNotPresent, 需要调整为 Always,那么每次升级你可以直接重启 Deploy 就行了。

部分截图

迭代过程中的截图,不代表最新结果

集群维度资源

节点资源

  • 精简模式
  • 详情模式,查看节点资源使用情况,后面可能会添加一个简单的预警功能。

OpenKruise

这里以 OpenKruise 为例,集群维度只显示了大概。如果你未安装默认显示安装引导,且左边导航会隐藏 OpenKruise 子菜单。

Tailscale 连接器

打通 Tailscale 网络访问 k3s service 能力

Tailscale 代理类

我的使用场景主要有两大类,节点选择和负载均衡能力

apiVersion: tailscale.com/v1alpha1
kind: ProxyClass
metadata:
  name: bj
  namespace: tailscale
spec:
  statefulSet:
    pod:
      nodeSelector:
        node-role.kubernetes.io/bj: "true"
      tolerations:
        - operator: "Exists"

致谢

联系方式

写在最后

欢迎试用体验。有更好的想法可以告诉我哈。


关注我的微信公众号,更多技术吐槽和干货!

发现轻量写作新宠:Ech0,记录灵感的最佳选择

2025-07-02 21:26:40

在快节奏的现代生活中,随时记录灵感、想法或随手笔记变得越来越重要。如果你正在寻找一款轻量、开源、自托管的笔记工具,那么今天我要向大家安利一个宝藏项目 Ech0!它不仅简洁高效,还能让你完全掌控自己的数据。与此同时,也会把它与另一款热门开源笔记工具 Memos 做个对比,看看它们各自的亮点在哪里!

对 Memos 感兴趣的,也可以看看部署轻量私有化备忘录 memos

Ech0 是什么?为什么值得一试?

Ech0 是一款开源自托管轻量级发布平台,专为快速记录和分享个人想法、文字和链接而设计。它的核心理念是简洁、自由和隐私至上,让你专注于内容的创作,而无需被复杂的界面或繁琐的功能干扰。

Ech0 的核心亮点

  • 极简体验,专注创作,Ech0 提供了一个干净直观的界面,写作时几乎没有干扰。你可以快速输入文字、插入链接或上传一张图片,随时捕捉灵感。它的设计初衷是轻量分享,更像是一个简化的朋友圈或微博客
  • 完全开源,数据自控,Ech0 遵循 MIT 协议,完全免费,无广告、无追踪、无订阅。它使用本地 SQLite 数据库存储数据,部署后所有内容都保存在你的服务器上,隐私和安全有保障。备份和恢复也超级简单
  • RSS 支持
  • Docker 部署支持,(基本特性了,如果不支持的话, 就不会考虑了)
  • 轻量设计,性能友好, 相比较而言 Memos,真是好多了

与 Memos 的对比

仅从 Memos v0.18.2 版本为例,后续版本我觉得都是破坏性更新。本文主要从我个人角度简单对比一下

设计理念与使用场景

  • Ech0:更像是一个轻量级的微博客平台,适合快速记录和分享简短的想法、链接或灵感。它的界面极简,强调即时性和轻量分享,类似朋友圈的体验,适合喜欢快速发布内容的用户
  • Memos:定位为全面的知识管理和笔记工具,适合需要系统化整理笔记、支持复杂 Markdown 格式的用户。它更适合长期的知识积累,比如技术笔记、项目管理或个人知识库

功能丰富度

  • Ech0:功能精简,专注于文字、链接和单张图片的快速分享。RSS 支持让内容分发更便捷,但目前只有管理员可以发布内容,适合个人或小范围使用
  • Memos:功能更全面,支持丰富的 Markdown 语法、图片和嵌入内容,甚至包括 API 集成和多数据库支持(SQLite、PostgreSQL、MySQL)。它还提供标签、过滤器等功能,适合需要复杂笔记管理的用户

数据与隐私/部署与维护

两者都一样开源,且都支持 Docker

社区与扩展性

  • Ech0:社区较小,项目主要由作者维护(但是我觉得还是很有前景的)
  • Memos:社区活跃,功能更新频繁

谁更适合你?

  • 选择 Ech0:如果你想要一款极简、轻量的工具,专注于快速记录和分享灵感,或者希望搭建一个类似朋友圈的个人内容平台,Ech0 是绝佳选择。它的低学习曲线和极简设计特别适合个人用户或小团队
  • 选择 Memos:如果你需要一个功能更丰富、支持复杂笔记管理的工具,或者计划长期维护一个知识库,Memos 会更适合你。它的 API 和多平台支持也更适合技术爱好者或需要集成其他工具的用户

对于我而言,短时间内 Ech0 还没放替代我的 Memos,数据迁移令人头大。但是期待 Echo 干翻 Memos,支持从 Memos 导入、支持 OIDC 等等。

项目

项目地址: https://github.com/lin-snow/Ech0
Demo 地址: https://memo.vaaat.com/

值得一提的是,Ech0 还有一个二次开发版本 Ech0 Noise(高度完善的轻量说说笔记系统及 memos 的开源替代品),它在原版基础上增加了更现代化的 UI 设计(例如毛玻璃背景)和一键数据备份/恢复功能,视觉和体验上更像一个精致的社交平台。如果你喜欢更美观的界面,可以尝试这个版本。

听说还支持从 Memos 导入到 Noise, 没实操过

项目地址: https://github.com/rcy1314/echo-noise
Demo 地址: https://note.noisework.cn/

如何开始使用 Ech0

原版部署

  • docker-compose.yaml
services:
  ech0:
    image: sn0wl1n/ech0:latest
    # image: ccr.ccs.tencentyun.com/k7scn/ech0
    container_name: ech0
    ports:
      - '6277:6277'
    volumes:
      - ./ech0/data:/app/data
    environment:
      - JWT_SECRET="Ooghooch1Oojanguz5dei1ahw0IPoh9d" 
    restart: always
  • 启动完成后,访问 ip:6277 即可使用,首次使用注册的账号会被设置为管理员(目前仅管理员支持发布内容)
  • JWT_SECRET 推荐修改为随机字符串 pwgen 32 1
  • 支持自定义配置文件,需要挂载到 /app/data/config/config.yaml, 具体可以参考官方示例

Noise 二开版本部署

  • docker-compose.yaml
services:
  noise:
    image: noise233/echo-noise
    # image: ccr.ccs.tencentyun.com/k7scn/echo-noise
    container_name: noise
    ports:
      - '1314:1314'
    volumes:
      - ./noise/data:/app/data
    restart: always
  • 启动完成后,访问 ip:1314 即可使用,默认账号信息 admin/admin
  • 应该也是支持自定义配置文件, 具体可以参考官方示例

PS: demo 没跑起来, 提示账号密码错误 😂

截图

原版

发布

魔改

写在最后

无论你是想快速记录生活中的灵感,还是需要一个完全属于自己的内容分享平台,Ech0 都能以它的简洁和高效打动你。相比功能更全面的 Memos,Ech0 更像是一个轻盈的创作小助手,让你专注于思想的流动。如果你追求极简和隐私,Ech0 绝对值得一试!快去部署你的 Ech0,记录下你的每一个灵感火花吧! 你更喜欢 Ech0 的轻量分享,还是 Memos 的全面管理?欢迎在评论区分享你的想法!

最近感冒了状态不是很好, 没太多精力去看,7 月争取恢复一下节奏,给大家带来更多更好玩的开源软件。


关注我的微信公众号,更多技术吐槽和干货!

探索 Kite:现代化轻量级 Kubernetes Dashboard,助力 DevOps 高效管理集群

2025-06-26 23:12:35

在 Kubernetes 的世界里,集群管理是一项复杂而关键的任务。随着容器化技术的普及,越来越多的团队依赖 Kubernetes 进行大规模分布式系统的部署与管理。然而,Kubernetes 原生的管理工具(如 kubectl 或 Kubernetes Dashboard)要么需要较高的学习成本,要么界面复杂不够直观。今天,我们来聊聊一款现代化、轻量级的 Kubernetes 仪表板 Kite,它以优雅的设计和强大的功能,为 DevOps 工程师带来全新的集群管理体验!

有群友说是好多开发转运维了么?感觉现在人手一个 k8s dashboard, 上次介绍了解锁 Kubernetes 高效管理神器——k8m,让集群运维更简单,有兴趣可以看看

项目地址:https://github.com/zxh326/kite

什么是 Kite?

Kite 是一个开源的 Kubernetes Dashboard,旨在提供轻量、直观、现代化的集群管理解决方案。它通过简洁的界面和强大的功能,帮助用户实时监控集群状态、管理资源并简化操作流程。相比传统的 Kubernetes Dashboard,Kite 不仅更美观,还更注重用户体验和性能优化,特别适合希望快速上手、专注于核心任务的 DevOps 团队

Kite 的核心亮点

  • 轻量级设计:资源占用低,运行流畅,适合各种规模的集群
  • 实时监控:集成 Prometheus,提供 CPU、内存、网络等实时指标
  • 直观界面:现代化 UI 设计,操作简便,降低学习曲线
  • 强大的资源管理:支持资源创建、更新、删除、扩展及重启
  • 灵活的扩展性:支持自定义资源定义(CRD),满足复杂业务需求

Kite 的核心功能

Kite 的功能设计围绕 Kubernetes 用户的实际需求,提供了从集群概览到精细化管理的全方位支持。以下是几个令人印象深刻的功能:

集群概览与实时监控

Kite 提供了一个直观的集群健康状态仪表板,展示实时的资源使用情况(如 CPU、内存、网络)。通过与 Prometheus 的集成,用户可以轻松查看关键指标,快速定位性能瓶颈

资源关系可视化

Kite 能够以图形化方式展示 Kubernetes 资源之间的关联(如 Deployment → Pods),帮助用户更清晰地理解集群的拓扑结构,简化排查问题的工作

便捷的资源操作

通过 Kite 的界面,用户可以直接执行资源管理操作,包括创建、更新、删除、扩展和重启资源。无论是调整副本数还是重启 Pod,都能一键完成

Web 终端

Kite 内置 Web 终端确实是一大亮点

安全认证支持

Kite 支持 GitHub OAuth 和自定义 OAuth 认证,同时提供简单的用户名/密码认证方式,确保访问安全可控

为什么选择 Kite

在众多 Kubernetes 管理工具中,Kite 凭借以下优势脱颖而出:

  • 现代化设计:采用 Maple Mono 字体和简洁的 UI 风格,视觉效果清新,操作体验流畅
  • 轻量高效:相比官方 Kubernetes Dashboard,Kite 的资源占用更低,适合资源敏感的环境
  • 易于部署
  • 开源免费:Kite 是完全开源的,社区驱动,允许用户自由定制和贡献代码

此外,Kite 默认不收集任何分析数据,但用户可通过设置 ENABLE_ANALYTICS=true 启用匿名数据收集,帮助开发者改进产品

快速上手 Kite

一键快速上手,默认使用官方镜像,也可以手动编辑使用 ccr.ccs.tencentyun.com/k7scn/kite

kubectl apply -f https://raw.githubusercontent.com/zxh326/kite/refs/heads/main/deploy/install.yaml

默认情况下,没有用户验证的,可以通过配置环境开启密码认证或者 OAuth 验证

  • KITE_USERNAME/KITE_PASSWORD
  • OAuth 可以参考 OAUTH_SETUP

等 Pod 启动完成,访问 svc 的 80 端口即可。

如果没有使用 tailscale 打通网络的话,可以 NodePort 或者 Ingress 方式访问

除了 InCluster 方式,也可以本地使用 docker 方式

docker run --rm -p 8080:8080 -v ~/.kube/config:/home/nonroot/.kube/config ghcr.io/zxh326/kite:latest

打开浏览器,访问 http://localhost:8080,即可进入 Kite 的管理界面

适用场景

Kite 适用于以下场景:

  • 中小型团队:希望快速部署一个轻量级的 Kubernetes 管理工具
  • 开发与测试环境:需要直观的界面来调试和监控集群
  • 学习 Kubernetes:新手用户可以通过 Kite 的简洁界面快速熟悉 Kubernetes 的核心概念。
  • 对 CRD 要求不高,只使用基础资源对象很适合

后续 Kite 团队计划进一步增强与 Prometheus 和 Grafana 的集成,优化多集群管理功能,并支持更多的认证方式

总结

Kite 是一个现代化、轻量级的 Kubernetes Dashboard,以其直观的界面、强大的功能和高效的性能,为 DevOps 工程师提供了一个优秀的集群管理解决方案。无论是新手还是资深从业者,Kite 都能帮助你更轻松地管理 Kubernetes 集群,专注于核心业务开发。

个人觉得 UI 设计确实很令人舒服,但是对于我这种重度依赖 CRD 来说,略显鸡肋


关注我的微信公众号,更多技术吐槽和干货!

解锁Kubernetes高效管理神器——k8m,让集群运维更简单

2025-06-19 22:23:00

如果你是一名开发者或运维工程师,正在为 Kubernetes 集群的复杂管理而头疼,那么今天我要给你安利一款超好用的神器——k8m!这是一款轻量级AI 驱动Mini Kubernetes AI Dashboard,专为简化集群管理而生,功能强大又易上手,堪称 Kubernetes 管理界的“效率担当”!

k8m 是什么?

k8m 是一款跨平台的 Kubernetes 管理工具,集成了大模型、AI 智能体和 MCP(Model Context Protocol)支持,旨在通过智能化和轻量化的设计,让开发者与运维人员轻松驾驭 Kubernetes 集群。它的核心理念是 “AI 驱动,轻便高效,化繁为简”,不仅功能全面,还支持单文件部署,跨 Linux、macOS、Windows 等多平台,真正做到开箱即用!

k8m 的硬核功能,一次性 Get!

k8m 的亮点多到数不过来,这里为你精选几个“真香”功能,让你感受它的强大:

AI 驱动,智能管理

新手真的很适合本地学习,简单又快捷

  • 划词解释:不认识 Kubernetes 术语?选中单词,AI 秒速给出解释!
  • YAML 翻译:复杂的 YAML 文件?k8m 自动解析并翻译字段含义,省去查文档的烦恼
  • 日志诊断:日志堆里找问题?AI 帮你快速定位错误并给出解决方案。
  • 命令推荐:只需描述需求,k8m 就能生成适合的 kubectl 命令,效率 up up up!

多集群管理,轻松切换

支持多集群统一管理,界面直观,集群切换一键搞定。无论是 Kind、MiniKube 还是生产环境的大集群,k8m 都能无缝接入,管理得井井有条。另外也支持多集群权限管理。支持对用户、用户组进行授权,可按集群授权,包括集群只读、Exec 命令、集群管理员三种权限。对用户组授权后,组内用户均获得相应授权。支持设置命名空间黑白名单

单文件部署,跨平台兼容

  • 下载最新版本,运行./k8m,访问 http://127.0.0.1:3618 即可使用,无需复杂配置
  • 支持 Linux、macOS、Windows,兼容多种架构(amd64/arm64),还可以通过 Docker 或 Kubernetes 一键部署,灵活到飞起!

Pod 操作神器

  • 实时查看 Pod 日志、支持日志下载,甚至直接在 Pod 内执行 Shell 命令
  • Pod 文件管理功能让你像操作本地文件一样浏览、编辑、上传、下载 Pod 内的文件,运维效率直接拉满!

Helm 市场支持

一键安装和管理 Helm 应用,快速部署常用工具,省时省力。

事件与异常智能分析

内置 AI 诊断功能,点击事件旁的“AI 解读”按钮,秒速分析异常原因,提供详细修复建议,排查问题 so easy!

开源免费,社区活跃

k8m 遵循 MIT 协议,完全开源,允许自由定制和商用,更新频率高,bug 修复快

k8m 的独特优势

  • 轻量高效:后端基于 Golang,前端采用百度 AMIS 框架,资源占用低,响应速度快
  • AI 加持:内置 Qwen2.5-Coder-7B 模型,支持私有化大模型接入(如 ChatGPT、Ollama),智能化管理更贴合需求
  • 用户友好:直观的 UI 设计,即使是 Kubernetes 新手也能快速上手
  • 多场景适用:从个人学习到企业级运维,k8m 都能完美适配。

如何快速上手 k8m?

下载与运行

从 GitHub 下载最新版本:https://github.com/weibaohui/k8m
运行命令:./k8m,然后访问 http://127.0.0.1:3618
想用 Docker?直接用 docker-compose 启动,配置文件参考 GitHub 文档

k8s 部署完整指南

---
apiVersion: v1
kind: Namespace
metadata:
  name: k8m
---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app: k8m
  name: k8m
  namespace: k8m
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    app: k8m
  name: k8m
  namespace: k8m
rules:
  - verbs:
      - "*"
    apiGroups:
      - "*"
    resources:
      - "*"
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    app: k8m
  name: k8m
rules:
  - verbs:
      - "*"
    apiGroups:
      - "*"
    resources:
      - "*"
  - verbs:
      - "*"
    nonResourceURLs:
      - "*"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    app: k8m
  name: k8m
  namespace: k8m
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: k8m
subjects:
  - kind: ServiceAccount
    name: k8m
    namespace: k8m
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: k8m
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: k8m
subjects:
  - kind: ServiceAccount
    name: k8m
    namespace: k8m
---
apiVersion: v1
kind: Service
metadata:
  name: k8m
  namespace: k8m
  labels:
    app: k8m
spec:
  ports:
    - name: http-k8m
      protocol: TCP
      port: 3618
      targetPort: 3618
  selector:
    app: k8m
  type: ClusterIP
  # type: LoadBalancer
  # loadBalancerClass: tailscale
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: k8m-pvc
  namespace: k8m
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
---
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
metadata:
  name: k8m
  namespace: k8m
  labels:
    app: k8m
spec:
  replicas: 1
  selector:
    matchLabels:
      app: k8m
  template:
    metadata:
      labels:
        app: k8m
    spec:
      containers:
        - name: k8m
          # image: docker.io/weibh/k8m:v0.0.130
          # image: ghcr.io/weibaohui/k8m:v0.0.130
          image: registry.cn-hangzhou.aliyuncs.com/minik8m/k8m:v0.0.130
          env:
            # 是否开启debug模式
            - name: DEBUG
              value: "false"
            # log输出日志级别,同klog用法
            - name: LOG_V
              value: "2"
            # 监听的端口号
            - name: PORT
              value: "3618"
            # 开启AI功能,默认开启
            - name: ENABLE_AI
              value: "true"
            # # 是否启用临时管理员账户配置,默认关闭
            - name: ENABLE_TEMP_ADMIN
              value: "false"
            # kubectl shell镜像地址
            - name: KUBECTL_SHELL_IMAGE
              value: "bitnami/kubectl:latest"
            # Node shell镜像地址
            - name: NODE_SHELL_IMAGE
              value: "alpine:latest"
            # 持久化数据库地址
            - name: SQLITE_PATH
              value: "/app/data/k8m.db"
            # 启动程序后,是否自动连接发现的集群,默认关闭
            - name: CONNECT_CLUSTER
              value: "true"
            # 是否自动注册纳管宿主集群,默认启用
            - name: IN_CLUSTER
              value: "true"
            # 是否打印配置信息
            - name: PRINT_CONFIG
              value: "false"
          ports:
            - containerPort: 3618
              protocol: TCP
              name: http-k8m
          livenessProbe:
            httpGet:
              path: /healthz
              port: 3618
            initialDelaySeconds: 30
            periodSeconds: 10
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: k8m-data
              mountPath: /app/data
      restartPolicy: Always
      serviceAccountName: k8m
      volumes:
        - name: k8m-data
          persistentVolumeClaim:
            claimName: k8m-pvc
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    app: k8m
  name: k8m
  namespace: k8m
spec:
  rules:
  - host: k8m.i.ysicing.net
    http:
      paths:
      - backend:
          service:
            name: k8m
            port:
              name: http-k8m
        path: /
        pathType: ImplementationSpecific

将上面的 yaml 保存为 k8m.yaml

kubectl apply -f k8m.yaml

等待服务启动完成后访问ingress 域名,默认用户:k8m,默认密码 k8m

预览

用户管理

登录后第一件事就是新建新的管理员账号,开启 MFA,删除默认管理员(只有删除功能没法禁用)

支持 OIDC,其实就能对接很多 OAUTH 服务了,具体 OIDC 使用说明

配置 AI 模型

内置模型其实也还行,当然也可以自己的模型

AI 智检

划词翻译

效果还是很不错的

想了解更多?可以直接访问 k8m 的 GitHub 仓库:https://github.com/weibaohui/k8m

k8s 资源

简单贴一下,更多细节可以使用 Demo 用户名密码 demo/demo

进阶玩法

通过 MCP 协议集成到 Cursor、Claude Desktop 等工具,解锁更多 AI 交互场景。 目前 k8m 内置 k8s 多集群 MCP 工具 49 种,可组合实现超百种集群操作,可作为 MCP Server 供其他大模型软件使用。轻松实现大模型管理 k8s,可详细记录每一次 MCP 调用,安全使用,无后顾之忧,避免操作越权。

总结

在 Kubernetes 管理工具层出不穷的今天,k8m 凭借轻量、AI 驱动、易用的特点脱颖而出。无论是个人开发者学习 Kubernetes,还是企业团队优化运维流程,k8m 都能为你节省时间、提升效率。更重要的是,它完全免费、开源,背后还有活跃的社区支持,未来发展值得期待!

PS: 作者修复 BUG 速度特别快。


关注我的微信公众号,更多技术吐槽和干货!

轻松部署 Artifactory(不推荐款)

2025-06-06 19:24:44

在 DevOps 实践中,软件包管理是不可或缺的一环。JFrog Artifactory 作为一款强大的制品管理工具,广泛应用于存储和管理二进制文件。本文简单介绍如何部署 Artifactory 开源版。

主要有客户需要部署这个,简单研究一下,上次用这个还是 4 年前了,新版本部署坑有点多,没老版本丝滑。简单说不如 Nexus,有兴趣的可以看看我之前写的私有化部署 Nexus3 镜像源

镜像

镜像有点点大

docker pull releases-docker.jfrog.io/jfrog/artifactory-oss:7.111.8
# 国内
docker pull ccr.ccs.tencentyun.com/k7scn/artifactory-oss:7.111.8

部署

  • docker-compose.yaml
services:
  traefik:
    image: traefik:v3.4
    container_name: traefik
    networks:
      - ysicing-net
    command:
      - "--api=true"
      - "--api.insecure=true"
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.http.address=:80"
      - "--providers.docker.network=ysicing-net"
      - "--log.level=INFO"
      - "--accesslog=true"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik-dashboard.entrypoints=http"
      - "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.192.168.23.16.sslip.io`)"
      - "traefik.http.routers.traefik-dashboard.service=dashboard@internal"
      - "traefik.http.routers.traefik-dashboard-api.entrypoints=http"
      - "traefik.http.routers.traefik-dashboard-api.rule=Host(`traefik.192.168.23.16.sslip.io`) && PathPrefix(`/api`)"
      - "traefik.http.routers.traefik-dashboard-api.service=api@internal"
      - "traefik.http.middlewares.gzip.compress=true"
      - "traefik.http.routers.traefik-dashboard.middlewares=gzip@docker"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always

  artifactorydb:
    image: docker.io/bitnami/postgresql:15
    # image: ccr.ccs.tencentyun.com/k7scn/postgresql:15
    container_name: artifactorydb
    restart: always
    networks:
      - ysicing-net
    volumes:
      - './postgresql:/bitnami/postgresql'
    environment:
      - POSTGRESQL_USERNAME=bn_artifactory
      - POSTGRESQL_DATABASE=bitnami_artifactory
      - POSTGRESQL_PASSWORD=bitnami

  artifactory:
    image: releases-docker.jfrog.io/jfrog/artifactory-oss:7.111.8
    # image: ccr.ccs.tencentyun.com/k7scn/artifactory-oss:7.111.8
    container_name: artifactory
    depends_on:
      - artifactorydb
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.artifactory.rule=Host(`artifactory.192.168.23.16.sslip.io`)"
      - "traefik.http.routers.artifactory.service=artifactory"
      - "traefik.http.services.artifactory.loadbalancer.server.port=8081"
      - "traefik.http.routers.artifactory-ui.service=artifactory-ui"
      - "traefik.http.routers.artifactory-ui.rule=Host(`artifactory-ui.192.168.23.16.sslip.io`)"
      - "traefik.http.services.artifactory-ui.loadbalancer.server.port=8082"
    networks:
      - ysicing-net
    environment:
      - EXTRA_JAVA_OPTIONS=-Dartifactory.home=/var/opt/jfrog/artifactory
      - JF_ROUTER_ENTRYPOINTS_EXTERNALPORT=8082
    # ports:
    #   - 8082:8082 # for router communication
    #   - 8081:8081 # for artifactory communication
    volumes:
      - artifactory_data:/var/opt/jfrog/artifactory
      - /etc/localtime:/etc/localtime:ro
      - ./system.yaml:/opt/jfrog/artifactory/var/etc/system.yaml
    restart: always
    logging:
      driver: json-file
      options:
        max-size: "50m"
        max-file: "10"
    ulimits:
      nproc: 65535
      nofile:
        soft: 32000
        hard: 40000

volumes:
  artifactory_data:
    driver: local

networks:
  ysicing-net:
    name: ysicing-net
    driver: bridge

默认使用 pg 数据库,方便些

创建配置文件 system.yaml

touch system.yaml

创建完配置文件,生成相关配置

shared:
    database:
        type: postgresql
        driver: org.postgresql.Driver
        url: jdbc:postgresql://artifactorydb:5432/bitnami_artifactory
        username: bn_artifactory
        password: bitnami

修改文件权限

chown -R 1030:1030 system.yaml
chmod 644  system.yaml

运行启动

服务非常吃资源,机器配置太低不推荐。

docker compose up -d

访问 Artifactory

地址:artifactory-ui.192.168.23.16.sslip.io
默认的账号密码 | 默认用户名 admin,默认密码 password

总结

没有特殊要求,不推荐。


欢迎关注我的微信公众号,可以看看我郑再打工每天都在折腾什么。

FFmpeg常用命令备份

2025-06-05 22:13:15

FFmpeg 是一个强大的开源多媒体处理工具,广泛应用于音视频的转换、裁剪、合并、提取等操作。无论是开发、剪辑还是日常处理,掌握 FFmpeg 的常用命令都能极大提升效率。本文整理了一些高频使用的 FFmpeg 命令,方便你快速上手或作为备忘录收藏!

临时需要处理一些上次到群晖 MinIO 的视频,写个流水线自动化处理。温故一下相关命令。

FFmpeg 简介

Fmpeg 是一个跨平台的音视频处理框架,支持几乎所有格式的音视频文件。它功能强大、命令灵活,堪称“音视频处理瑞士军刀”。以下是常见操作的命令合集,建议收藏备用!

常用命令速查

格式转换

将文件从一种格式转换为另一种格式,例如将 MP4 转为 AVI:

ffmpeg -i input.mp4 output.avi

-i:指定输入文件

提示:FFmpeg 会根据输出文件名自动推断目标格式

提取音频

从视频中提取音频,例如提取 MP3

ffmpeg -i input.mp4 -vn -acodec mp3 output.mp3
  • -vn:禁用视频流。
  • -acodec mp3:指定音频编码为 MP3

歌曲

截取视频片段

裁剪视频的指定时间段,例如从第 10 秒到第 30 秒:

ffmpeg -i input.mp4 -ss 10 -t 20 output.mp4
# 通常搭配如下
ffmpeg -i input.mp4 -ss 10 -t 20 -c copy output.mp4
  • -ss:起始时间(秒或 hh:mm:ss)
  • -t:裁剪时长(秒或 hh:mm:ss)
  • -c copy:直接复制流,避免重新编码,速度更快

视频截图

ffmpeg -ss 00:20:00 -i "input.mp4" -vframes 1 "01.jpg"

视频压缩

压缩视频文件大小,调整比特率:

ffmpeg -i input.mp4 -vcodec libx264 -b:v 1000k output.mp4
  • -b:v:设置视频比特率,值越低压缩越高,但画质可能下降

调整视频分辨率

将视频缩放到指定分辨率,例如 1280x720:

ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
  • -vf scale:设置缩放参数

转换帧率

更改视频帧率,例如从 60fps 转为 24fps:

ffmpeg -i input.mp4 -r 24 output.mp4
  • -r:设置目标帧率

例如 h264 编码无损转换至 h265 编码

ffmpeg -c:v h264_cuvid -i input.mp4 -c:v hevc_nvenc -r 24 -c:a copy -x265-params lossless=1 output.mp4;

提取视频帧

将视频转为图片序列,例如每秒提取一帧:

ffmpeg -i input.mp4 -vf fps=1 frame_%04d.png
  • %04d:生成文件名递增,如 frame_0001.png

查看文件信息

快速查看音视频文件的详细信息:

ffmpeg -i input.mp4

输出包含编码格式、分辨率、时长等详细信息

通常如下所用一键输出视频的编码、帧率、码率

codec=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 input.mp4)
r_frame_rate=$(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 input.mp4)
bit_rate=$(ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 input.mp4)
echo -e "$codec\t$r_frame_rate\t$bit_rate\tinput.mp4"

视频合并

将多个视频文件合并为一个(需确保分辨率、编码一致):

# 创建文件列表 mv.txt
echo "file 'input1.mp4'" > mv.txt
echo "file 'input2.mp4'" >> mv.txt
ffmpeg -f concat -i mv.txt -c copy output.mp4

这个没用过,仅供参考

实用技巧与注意事项

  • Linux:apt install ffmpeg(Debian)
  • macOS:brew install ffmpeg

我仅在这两个环境实操过,其他环境可以参考官方文档,类似文档很详细了

另外结合脚本语言很方便,例如 bash

写在最后

FFmpeg 的功能远不止这些,熟练使用后,你可以轻松应对音视频处理的各种场。对于我而言,掌握基本功能从视频中导出音频文件使用就行(大部分还用不上,因为还有一些第三方工具帮你自动一键搞定)


欢迎关注我的微信公众号。