首页
学习笔记
经验教程
随笔
标杆项目&嘉奖
AI研发流水线
ZDREAM - Thassarian 的个人博客
前途是光明的,道路是曲折的
累计撰写
46
篇文章
累计创建
4
个标签
累计收到
3
条评论
栏目
首页
学习笔记
经验教程
随笔
标杆项目&嘉奖
AI研发流水线
目 录
CONTENT
以下是
Thassarian
的文章
2024-11-28
解决MD文件图片资源失效问题的一种实践:PicGo + 阿里云OSS
考虑到很多文档和图片资源需要在一些重要场合使用(比如面向业主的汇报材料或是大型培训的讲义),长期使用的稳定性、图片的访问速度就成了必须优先考虑的因素。最终,还是选择了阿里云OSS作为更稳妥的方案。
2024-11-28
46
0
0
经验教程
2024-10-03
效率的悖论:从“我来更快”到“构建脚手架”
作为技术出身的项目经理,我们常陷入“自己做比教人做更快”的效率陷阱。本文记录了我在项目运维中关于“放”与“收”的挣扎,探讨如何避免成为团队的“单点故障”,并通过构建SOP和验证机制实现真正的技术管理转型。1. 肌肉记忆与效率陷阱作为项目现场负责技术兜底的人,似乎养成了一种肌肉记忆。当一个问题或任务抛过来,大脑几乎是本能地在几秒钟内完成解析、建模,并规划出一条自认为的最优路径。紧接着,一个念头就会自动浮现:“我自己来吧。”这的确常常是风险最低、效率最高的选项。尤其是在临时任务压境、Deadline迫在眉睫的时刻。与其花费半小时去讲解背景、梳理一个可能对方听起来云里雾里的逻辑,再搭上不确定的时间等待一个可能需要打回返工的结果,不如自己花一小时直接搞定。这种“短平快”的决策能迅速扑灭眼前的火,带来一种一切尽在掌控的安全感。2. 隐性成本与无力感但最近这大半年,这种安全感背后的隐性成本,正变得越来越清晰和沉重。有些工作,自认为交代得足够清楚,甚至提供了详尽的步骤和参考案例,可拿回来的结果依然会偏离轨道,有时偏离的角度还颇为清奇。于是,新一轮的时间消耗开始了:定位问题 -> 复盘逻辑 -> 指导修改 -> 重新验证。这一整套流程消耗的时间和心力,常常远超最初的预期。几次三番下来,一种无力感油然而生,潜意识里那个声音会变得更响:“算了,还是自己来吧。”这不仅是一种自我保护,更像是在当前有限的资源下,为了保证项目整体产出而做出的无奈妥协。3. 投资回报与战略空间然而,凡事都有另一面。团队里也有学习能力很强的伙伴。当把一个相对核心的模块交给他时,初期也需要反复沟通平台的历史逻辑和各种“坑”。但关键的区别在于,这些沟通是高效且双向的。当他第一次独立且漂亮地解决一个复杂的 ETL 故障时,那种感受是完全不同的。它不是自己搞定一个难题后的成就感,而更像是一种“投资”获得了超额回报的欣慰。之前花费的所有沟通和培训的时间,都实实在在地转化为了团队战斗力的提升。更重要的是,我终于可以从那块业务中稍微抽身,去思考一些更宏观的规划——比如优化整个数据共享的审批流程,或是用 Vue 搭一个下一个迭代版本的功能原型。这种“放手”成功后带来的,不仅是某个具体任务的完成,而是一种战略空间的拓展。4. 核心危机:单点故障 (SPOF)这两类截然不同的体验反复交织,迫使人不得不去直面那个核心问题:“放”与“收”的边界到底在哪里?把所有事情都自己扛,短期看,项目稳如泰山,交付质量无可挑剔。但长期来看,这种模式存在巨大的隐患:1. 团队天花板:我自己会成为团队能力提升的天花板。2. 单点故障:当所有的疑难杂症最终都汇集到一个人身上,这个点就变得极其脆弱。万一我休假或被紧急事务缠住,团队的响应速度将大打折扣。3. 螺丝钉化:团队成员因为长期接触不到核心任务而失去成长机会,最终变成被动执行的“螺丝钉”。一个健康的团队,绝不能过度依赖某一个“超级英雄”。把事情“收”回来自己做,解决的是当下的、具体的问题;而花心思去思考如何把事情“放”出去,解决的才是未来的、系统性的问题。这背后,其实是个人身份的转变——从一个高级工程师,到一个真正的项目管理者的艰难蜕变。5. 刻意练习:搭建“脚手架”这更像是一种对自己的鞭策和刻意练习。不能因为畏惧返工的风险,就因噎废食。我开始尝试在任务清单面前进行更冷静的划分:* 战略要务:涉及核心稳定、风险极高、必须亲自兜底的任务。* 常规战役:流程相对固定、有犯错空间、适合用来培养团队能力的任务。对于后者,即使预感到过程会艰难,也应该“逼”着自己交出去。但这并非盲目放任,而是需要搭建起必要的“脚手架”: 📄 标准化文档 (SOP):提供一份详尽到可以按图索骥的操作指南。 🚩 检查点 (Checkpoints):在关键节点预设检查,避免方向性跑偏。 🔄 交叉验证 (Cross-Validation):建立强制的互测流程。把可能遇到的坑提前预警,把试错的风险控制在可接受的范围内。前期投入的这些管理成本,以及过程中可能需要支付的返工“学费”,从长远看,都是在为团队的健康和自己的精力“存款”。这个平衡点很难找,也没有一劳永逸的公式,但这大概就是接下来,需要持续修炼的最重要的课题。
2024-10-03
62
0
0
项目管理
2024-09-17
AI编排工具部署体验
LibreChatlobechatmaxkbcoze扣子fastgptDify
2024-09-17
28
0
0
Docker
AI
2024-09-06
Hfish蜜罐部署体验
近来工作繁杂,但对于技术的探索欲丝毫未减。在维护现有平台稳定运行的间隙,总想尝试一些新的东西,既是学习,也算是一种调剂。最近对网络安全领域的一些实践很感兴趣,特别是蜜罐技术。作为一种主动防御手段,它通过模拟易受攻击的服务来诱捕攻击者,记录其行为,从而达到威胁感知和溯源的目的。在众多开源蜜罐系统中,HFish因其跨平台、部署简单和社区活跃等特点,成为了本次实践的首选。这篇笔记主要记录一次完整的HFish蜜罐部署、配置和接入远程节点的过程,算是一次学习体验的沉淀。一、 环境准备与部署为了不污染现有服务器环境,同时便于管理,照例基于Portainer去进行Docker部署HFish容器。HFish由管理端(Server)和节点端(Client)组成。管理端负责接收和分析攻击数据,并对节点进行管理;节点端则负责模拟各种服务,是直接面对攻击的“诱饵”。部署步骤大致如下:https://hfish.net/#/README拉取镜像:在Portainer的镜像管理页面,直接从公共仓库拉取HFish的官方镜像。选择一个稳定的版本标签即可。创建容器:version: '3.8' services: hfish: image: hfish:ubuntu335 container_name: hfish ports: - "4433:4433" - "4434:4434" - "22:22" - "135:135" - "139:139" - "1433:1433" - "3306:3306" - "3389:3389" #- "6379:6379" - "9379:6379" - "7879:7879" #- "8080:8080" - "9080:8080" - "8081:8081" - "9000:9000" - "9200:9200" environment: - TZ=Asia/Shanghai volumes: - /zdream/datas/hfish:/usr/share/hfish restart: always networks: - monitor-net networks: monitor-net: external: true二、 创建蜜罐部署完成后,通过浏览器访问 http://<服务器IP>:4433 即可进入HFish的管理后台。首次登录修改密码。HFish内置了丰富的蜜罐服务类型,涵盖了常见的Web服务、数据库服务(如MySQL、Redis)、基础服务(如SSH、Telnet)等,几乎可以“以假乱真”。创建一个蜜罐服务的操作很简单:在“环境管理” -> “服务管理”页面,可以看到所有支持的服务列表。选择一个想要模拟的服务,例如MySQL服务,点击右侧的“操作”按钮进行配置。配置的核心在于端口。默认情况下,HFish会使用服务的标准端口(如MySQL的3306)。如果宿主机的该端口已被占用,可以在部署时映射到其他端口。点击“新建服务”按钮,一个MySQL蜜罐就启动了。此时,任何扫描或尝试连接该端口的行为都将被HFish精准记录下来。为了让蜜罐更具迷惑性,还可以自定义一些服务的Banner信息或返回内容,让它看起来更像一个真实的业务系统。 三、 接入远程蜜罐HFish的强大之处不仅在于单机部署的便捷,更在于其支持分布式部署。这意味着可以在不同的网络区域、不同的服务器上部署多个节点端,并将它们统一接入到一个管理端,形成一个分布式的蜜罐网络。接入远程蜜罐的步骤同样清晰:在管理端生成节点:进入“环境管理” -> “节点管理”页面,点击“添加节点”。系统会自动生成一段安装命令。这段命令包含了连接到当前管理端所需的所有信息。在远程节点服务器上执行命令:准备一台新的、干净的服务器作为远程节点。这台服务器可以是内网的任意一台机器,也可以是位于不同云服务商的VPS。以root权限登录这台服务器,直接粘贴并执行刚才生成的命令。脚本会自动下载并安装节点端程序,并完成与管理端的连接配置。需要注意的是,要确保节点服务器的防火墙允许与管理端4434端口的通信。验证与管理:安装成功后,稍等片刻,就可以在管理端的“节点管理”页面看到新加入的节点。之后,便可以像管理本地节点一样,为这个远程节点开启或关闭各类蜜罐服务,所有攻击数据都会被实时回传到管理端进行统一分析和展示。通过这种方式,可以轻松地将蜜罐的触角延伸到网络的各个角落,极大地扩展了威胁感知的范围。 结语这次HFish的部署体验,从Portainer的容器化安装到分布式节点的接入,整个过程比预想的要平滑得多。它将复杂的蜜罐技术以一种非常易用的方式呈现出来,即便是非专业的安全人员也能快速上手。当然,蜜罐并非万能的“银弹”,它更像是一个网络中的“哨兵”和“摄像头”。通过它,可以更早地发现潜在的威胁,了解攻击者的意图和手段,为后续的安全加固和应急响应提供宝贵的情报。
2024-09-06
38
0
0
Linux
2024-09-04
针对网站的用户行为分析:Matomo本地部署及踩坑记录
一、前言作为一个长期和数据打交道的人,我对各类数据指标有着近乎本能的关注。在维护自己的这个小网站时,很自然地就想到了要引入一套用户行为分析工具。它不仅能满足我个人的好奇心,了解一下都有谁、在什么时间、通过什么方式访问了这里,长期来看,这些数据的沉淀也能为网站内容的优化方向提供一些客观的参考。市面上的选择很多,比如强大的 Google Analytics。但在当前环境下,我更倾向于一个能将数据完全保留在自己服务器上的解决方案。这不仅是为了彻底的“数据私有”,也是出于一种技术上的“掌控感”。经过一番调研,开源的 Matomo 进入了我的视野。它功能全面,社区活跃,最关键的是,它支持完全本地化部署。为什么是 Matomo?在正式开始部署前,简单梳理一下选择 Matomo 的几个核心理由:数据所有权: 这是最重要的一点。所有访客数据都存储在自己的数据库里,不必担心隐私泄露或数据被用于其他目的。对于一些只在内网访问的政务系统,这种方案更是刚需。功能完备: 从实时访客、行为路径,到流量来源、设备统计,乃至转化漏斗分析,社区版的功能已经足够强大,完全可以满足个人网站和中小型项目的分析需求。开源免费: 无需承担额外的服务费用,只需要投入服务器资源和一些折腾的时间。良好的兼容性: 除了常规的网站,它同样支持对 APP、小程序甚至 IoT 设备的数据进行追踪,扩展性很好。二、部署体验1.平台部署和现在大多数应用一样,Matomo 的部署首选方案自然是 Docker。官方提供了相当完善的 Docker 镜像和部署指南,这让初始启动变得非常简单。我个人习惯使用 docker-compose 来编排容器,这样能更清晰地管理服务和数据卷。 一个基础的 docker-compose.yml 文件大概是下面这样,包含 Matomo 应用本身和一个独立的数据库服务。详细配置参考:https://github.com/matomo-org/docker/blob/master/.examples/nginx/compose.yml启动命令:docker run --rm --volumes-from="matomo-app-1" --link matomo-app-1 python:3-alpine python /var/www/html/misc/log-analytics/import_logs.py --url=http://ip.of.your.matomo.example --login=yourlogin --password=yourpassword --idsite=1 --recorders=4 /var/www/html/logs/access.log2.踩坑看似简单的部署,很快就遇到了第一个门槛:SSL 配置。Matomo 在初始化安装完成后,会强制要求使用 HTTPS 访问。这本身是一个非常合理的安全设定,但问题在于,官方的 Docker 镜像中,默认的 Apache 服务并未开启 SSL 模块。这就导致了一个矛盾:如果我在 docker-compose 里直接将容器的 443 端口映射出来并配置好域名,Matomo 在首次启动时会因为自身 Apache 不支持 SSL 而启动失败。这是一个典型的“先有鸡还是先有蛋”的问题。正确的解决思路是分两步走: 1. 先以 HTTP 方式完成 Matomo 的初始化安装。 2. 进入容器内部,手动为 Apache 配置 SSL,然后再将服务切换到 HTTPS。具体的步骤记录如下: #第一步:进入正在运行的 Matomo 容器。 bash docker exec -it matomo bash #第二步:在容器内为 Apache 启用 SSL 模块并重启服务。 a2enmod ssl service apache2 restart #第三步:修改 Matomo 的站点配置文件,添加 HTTPS 监听和证书配置。 nano matomo:/var/www/html/config/config.ini.php #添加https监听 <VirtualHost *:443> ServerName your.domain.com SSLEngine on SSLCertificateFile /etc/ssl/certs/fullchain.pem SSLCertificateKeyFile /etc/ssl/certs/privkey.pem </VirtualHost> #第四步:再次重启容器中的apache docker exec -it matomo service apache2 restart每次容器升级时(apache爆出的漏洞有点多,不升级不放心),证书问题都要重新处理一遍。3.网站接入部署完成后,剩下的工作就简单了。Matomo 会提供一段 JavaScript 追踪代码,只需要将它嵌入到网站所有页面的 <head> 标签里即可,比如说Halo的代码注入全局标签:对于使用 Vue 这类前端框架构建的单页面应用(SPA),虽然直接添加到index.html就能够实现访客IP时间等记录,但是无法区分出来用户具体访问了哪些页面,如果想详细的页面浏览情况分析,就需要额外配置路由切换时的页面追踪,官方文档中也有相应的说明:https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-tracking-code-on-websites-that-use-vue-js/?mtm_campaign=Matomo_App&mtm_source=Matomo_App_OnPremise&mtm_medium=App.CoreAdminHome.trackingCodeGenerator4.查看效果数据开始汇入后,Matomo 的仪表盘就变得鲜活起来。默认的仪表盘提供了丰富的信息模块,可以直观地看到实时的访客数量、访客的地理位置分布、访问趋势图、流量来源渠道、用户使用的操作系统和浏览器等。默认情况下,为了保护访客隐私,IP 地址是做了脱敏处理的,当然这个也可以根据需要进行修改。 通过这些数据,我可以清晰地看到哪些文章更受欢迎,访客是通过搜索引擎还是直接链接访问过来的。这些看似简单的信息,背后却能反映出很多问题,对于后续内容的调整和网站的优化,无疑是很有价值的。如果vue项目不针对性设置的话就会出现图里这种所有人只访问了/index的情况 ↑可以查看详细日志,默认是IP脱敏的,可以配置取消掉。总的来说,Matomo 的部署虽然比使用第三方 SaaS 服务要复杂一些,但整个过程完全在可控范围内。它最终交付给我的是一个完全私有、功能强大的网站分析平台,这种“拥有感”是任何第三方服务都无法替代的。 对于注重数据隐私的个人站长,或是需要对内部系统进行用户行为追踪的中小型项目来说,Matomo 无疑是一个值得投入时间去配置和使用的工具。它不仅是一个工具,其部署和配置的过程,本身也是一次不错的技术实践。
2024-09-04
37
0
0
Docker
项目管理
2024-06-24
服务器及容器监控:Cadvisor/Prometheus/Grafana
Cadvisor采集/Prometheus处理/Grafana展示 最初搭建了一个自己的
2024-06-24
30
0
0
Linux
2024-06-03
自建数据库平滑迁移RDS+异云容灾
核心需求将数据从ECS服务器上的自建MySQL,迁移至移动云RDS。接入电信云作为备库,实现异云容灾。在预期部门无法及时配合切换的情况下,确保平滑迁移不影响业务数据流转
2024-06-03
35
0
0
项目管理
2024-05-05
打通基于GitLab的CI/CD(持续集成自动部署)
2023年,我完成GitLab部署,做基础的代码管理,初步尝试CI/CD未果。 如今为了实现 code-agent 开发完成之后 test-agent 能够基于实际打包后的功能做黑盒测试 、基于实际图形页面的检查,自动化部署从可选优化项变成了刚需。 目前为止,我先跑通了简单的前端-本机自动部署,后续有精力再参照大厂最佳实践做一些改善。 逐步演进到 “全镜像化交付部署”,最终拥抱 “K8s 云原生编排”。
2024-05-05
23
0
0
Docker
AI
2024-05-04
Linux中的科学上网与代理管理
Mihomo+MetaCubaXB实现Linux上科学上网 前端使用MetaCubeXD 后端使用mihomo 文件位置 -d 配置文件位置 /usr/bin/mihomo -d /etc/mihomo 更新配置文件: /etc/mihomo/config.yaml mixed-port: 7890
2024-05-04
65
0
0
Linux
2024-05-03
本地部署大语言模型
通过ollama管理本地模型 C:\Users\zc459\AppData\Local\Programs\Ollama\ollama app 持续性预载模型 curl http://192.168.50.3:18000/api/generate -d '{"model": "qwen2:7b",
2024-05-03
31
0
0
AI
1
2
3
4
5