Anduin Xue
Anduin Xue

Anduin's Tech Blog

bash


Some quick Docker tips

文章汇总了Docker常用操作命令及技巧,包括数据库备份恢复、资源监控、系统清理、密钥处理、时区配置、GUI应用安装等。提供MySQL和MariaDB容器数据库的备份命令,通过docker stats和docker images排序容器和镜像资源使用,使用docker system df查看磁盘空间及docker system prune清理无用数据。包含获取Docker密钥值的脚本,安装tzdata设置时区的方法,以及在Docker中安装微信等GUI应用的Dockerfile配置和运行步骤,覆盖容器环境下的各种实用场景。--Qwen3

bash Linux Docker Container timezone Locale

基于 Docker Swarm Mode 建设你家里的数据中心!

文章介绍了使用Docker Swarm部署集群并结合Swarmpit管理工具的实践流程。核心步骤包括通过GlusterFS构建分布式存储、利用docker-compose.yml文件定义业务栈、通过Swarmpit可视化界面管理服务节点和资源分配。关键概念体系由Stack(服务集合)、Service(容器化服务定义)、Task(实际容器实例)、Node(物理/虚拟节点)构成。业务部署需编写版本3.3规范的编排文件,通过docker stack deploy命令实现集群化部署。存储方案采用GlusterFS实现跨节点数据同步,需在各节点配置存储卷并设置访问权限。运维方面包含节点状态管理(上线/下线维护)、容器调试入口获取、日志追踪等操作。通过暴露80/443端口结合Caddy等反向代理可实现HTTPS服务,而共享存储的自动化挂载则通过systemd服务确保节点重启后自动恢复可用状态。--Qwen3

bash Linux Server Docker Container Docker Swarm Cluster Swarmpit

在服务器中部署单独的Docker应用

在虚拟机中部署Docker容器需关注持久化卷配置端口映射管理容器生命周期以及多容器协作容器数据通过主机目录挂载实现持久化避免升级丢失卷映射需匹配容器用户权限端口映射通过-p参数暴露服务确保外部访问容器自动重启使用--restart选项保障主机重启后容器自启升级容器需停止删除旧版本并重新拉取镜像运行新容器Docker Compose可定义多个关联容器的网络配置共享存储和依赖关系通过docker-compose up一键部署升级需停止旧集群拉取新镜像并重启服务systemd托管docker-compose服务可实现容器化应用的系统级管理同时需注意容器间依赖关系协调避免服务中断--Qwen3

bash Linux Ubuntu Docker VM Container

快速配置 - 无痛让你的所有 Git Commit 都被 GPG 数字签名

本文系统梳理了通过GPG数字签名保护Git Commit的完整实践路径。在数字身份安全日益重要的当下,作者揭示了一个关键认知:当任意设备通过修改Email即可伪造Commit时,代码协作的安全边界已被彻底打破。GPG签名通过加密哈希值与私钥的绑定机制,构建了不可篡改的数字信任链条。但技术实施远非终点——当私钥随网盘同步扩散风险,当公钥的信任需要人工传递,我们不得不思考:在追求便捷与坚守安全之间是否存在更优解?当GitHub的平台信任机制成为新节点,如何构建去中心化的身份验证网络?更值得探讨的是,当开发者习惯性地将GPG视为安全工具时,是否忽略了代码本身承载的更深层责任?或许每个Commit的签名都该成为一次郑重的承诺,而不仅仅是技术流程的终点。当你的公钥被好友信任时,这个加密世界是否正在形成某种新的协作伦理?--Qwen3

bash git PowerShell SSH Nextcloud Sign GPG

Automatically Unlocking LUKS2 Encrypted System Partition Using Clevis and TPM2

本文介绍了如何通过Clevis与TPM2技术实现LUKS2加密系统分区的自动解锁机制这一方案不仅消除了传统密码输入的繁琐性还通过硬件级安全模块构建了更可靠的数据保护体系。文章揭示了安全启动(Secure Boot)与TPM2芯片的协同作用——前者通过验证签名链确保系统启动合法性后者则利用物理不可克隆特性存储加密密钥。当用户将TPM2芯片生成的密钥与系统分区绑定后每次开机时PCR寄存器的测量值会自动触发密钥解封过程这一过程如何在不同硬件配置下保持稳定性?当系统分区策略与TPM2策略发生冲突时系统会优先遵循哪套安全规则?更值得思考的是如果攻击者同时获取了硬件指纹和系统镜像是否仍能突破这种保护机制?通过clevis luks bind命令与dracut工具链的协作系统实现了从固件层到内核层的无缝衔接但这种深度集成是否会对系统的可移植性造成影响?当用户选择特定PCR寄存器作为信任锚点时如何平衡安全强度与硬件兼容性?这些问题的答案或许就藏在系统启动时那些看似无序的PCR值变化之中而理解这些变化正是构建下一代可信计算架构的关键。--Qwen3

bash Linux Security LUKS2 Clevis TPM2 TPM

Using ZFS is easy

ZFS通过集成文件系统与卷管理功能,实现了数据存储的高效管理与安全保障其核心特性包括基于快照的版本控制支持克隆操作的数据复用以及动态调整的存储池架构数据完整性通过校验和与冗余校验机制实现可自动修复损坏内容存储优化方面提供LZ4等压缩算法平衡性能与压缩率同时支持RAID 0156及自定义RAID-Z配置通过缓存机制(ARC/L2ARC)与日志设备(ZIL)提升读写性能实际部署中需综合考虑硬件配置与工作负载特性例如采用NVMe SSD作为缓存设备可显著提升大规模存储系统的响应效率作者示例配置展示了多盘RAID-Z2池构建结合NVMe缓存与性能调优参数的应用方案体现了ZFS在企业级存储中的灵活性与扩展性--Qwen3

bash Linux Disk ZFS File Sysytem Raid Dedup

Install GitLab behind a reverse proxy on a Ubuntu 20.04\22.04 server

这篇博客详细介绍了在Ubuntu 20.04/22.04服务器上部署GitLab并配置反向代理的完整流程。文章从基础环境搭建到高级网络配置,逐步引导读者完成GitLab服务的部署与优化。核心内容包括:通过Caddy反向代理实现HTTP/HTTPS流量分发、处理GitLab与反向代理之间的网络信任关系、解决多服务器架构下SSH端口的转发难题,以及通过GitLab Runner实现CI/CD管道的完整集成。作者特别强调了在生产环境中配置反向代理时需要处理的细节问题,例如Nginx的监听端口设置、真实IP地址的传递、SSH服务的端口隔离等关键配置。文章最后展示了如何通过编写.gitlab-ci.yml文件实现.NET项目的自动化构建、代码分析和测试覆盖率统计。整个部署方案不仅涵盖了基础功能的实现,更深入探讨了服务间的网络通信安全性和可扩展性问题。当读者完成这些步骤后,不禁会思考:如何在保持反向代理架构优势的同时进一步优化服务响应速度?当服务器数量增加时,如何设计更灵活的端口管理策略?此外,当引入更多微服务时,如何确保整个CI/CD管道的稳定性和可维护性?这些未展开的问题为读者提供了进一步探索的方向。--Qwen3

bash git Linux Ubuntu Proxy SSH Caddy GitLab nginx

MySQL allow remote connection (For root and other users)

本文围绕MySQL数据库实现远程访问的核心配置展开剖析从防火墙策略调整到用户权限管理的完整流程为读者揭示了如何在保障安全前提下打通数据库的远程连接通道。文章首先指出检查mysql.user与mysql.db数据表是理解当前访问权限的关键起点随后通过开放3306端口与修改bind-address配置的组合操作为远程访问扫清网络障碍。针对root账户的远程授权设计了双步骤方案——通过GRANT语句与直接修改host字段的互补机制既保证了权限的即时生效又确保了配置的可靠性。对于普通用户的远程访问需求则提供了创建新用户与修改现有用户的差异化解决方案其中包含数据库与用户权限的精确绑定策略。值得注意的是文中多次强调的host字段设置为'%'的深层含义——这既是权限开放的开关也是潜在安全风险的源头。当远程访问的便利性与本地访问的封闭性产生碰撞时我们该如何在安全策略中寻找平衡点?当配置完成后如何验证远程连接的有效性?面对多用户场景时权限隔离的最佳实践又是什么?这些看似简单的配置背后实际上蕴含着对数据库安全架构的深层思考。当您完成这些配置操作时是否已经准备好在开放访问的同时守护数据库的安全?--Qwen3

bash Database Linux Ubuntu Remote Management MySQL

Aiursoft Nextcloud 事故调查、分析与总结

在2022年10月4日的两小时服务中断事件中,Aiursoft Nextcloud遭遇了从内核到业务层的连锁崩溃。当服务器因系统盘被填满而彻底死机时,技术团队不得不通过VNC强制重启虚拟机,却在恢复过程中发现了更深层的逻辑陷阱——原本应写入NFS备份盘的数据,因存储分离迁移期间的短暂断连,意外将系统盘推至临界点。这场灾难的根源并非硬件故障或软件缺陷,而是备份流程在挂载状态失效时的沉默执行:当/mnt/backup从网络磁盘退化为本地目录时,300GB的rsync复制瞬间吞噬了64GB的系统盘。这个案例揭示了三个值得深思的悖论:看似安全的备份机制为何成为系统脆弱性的放大器?当基础架构变更时,我们是否真正理解了所有依赖路径的失效模式?更重要的是,如何让监控系统在灾难发生前就嗅到风险的气味?事件最终催生出两个关键改进:通过df -Th验证挂载状态的备份脚本,以及在磁盘使用率低于10%时触发警报的监控机制。但更值得警惕的是,这场事故暴露了现代云服务架构中普遍存在的"沉默失效"——那些在监控盲区里悄然腐化的连接、挂载和配置,它们究竟还隐藏着多少未被发现的定时炸弹?--Qwen3

bash Linux Backup Nextcloud Disk Incident

If a Ubuntu server should run apt upgrade automatically?

在管理大量Ubuntu服务器时是否应该启用apt upgrade自动更新?这既是一场效率与风险的博弈也是对运维哲学的深刻思考。当服务器数量庞大时手动执行update和upgrade再重启的重复操作确实会消耗大量时间而自动更新看似能完美解决这个问题尤其在安全补丁及时性和系统稳定性方面展现出明显优势。但这种看似完美的方案却暗藏玄机:当服务器需要排查历史问题时自动更新可能抹去关键调试线索;对航空控制系统这类零容忍变更的场景自动更新简直是灾难性的;更不用说功能更新可能引入新bug导致业务中断而强制重启对游戏服务器等系统可能直接中断正在进行的赛事。尽管作者给出了每周日凌晨执行脚本的配置方案却在最后提出了令人警醒的条件清单——只有当系统不重要能容忍可用性下降且具备完美快照和互联网连通性时才适合启用自动更新。这引发我们思考:在自动化浪潮中我们是否正在失去对系统演进过程的掌控?当安全更新与业务连续性产生矛盾时该如何在风险与收益间找到平衡点?或许真正的智慧不在于选择自动或手动而在于建立对系统生命周期的深度认知。--Qwen3

bash Linux Ubuntu Upgrade Crontab Update

Install Cockpit on Ubuntu 22.04

本文通过分步指南解析了在Ubuntu 22.04系统上部署Cockpit的完整流程并揭示了其背后的技术逻辑。安装过程从基础命令切入却巧妙融入了权限管理的底层思考——为何要避免root用户直接操作?当网络异常导致PackageKit缓存刷新失败时解决方案通过Netplan配置迁移与NetworkManager渲染器调整既解决了表层问题更暗示了系统服务间依赖关系的复杂性。插件安装环节通过自动化脚本实现版本追踪与动态下载展现了现代DevOps中CI/CD的实践思维而Caddy反向代理的配置则抛出了安全与便捷的永恒命题:如何在TLS证书验证与服务可达性之间取得平衡?当浏览器地址栏中的9090端口打破传统Web服务的80/443端口惯例时是否预示着更多非标准服务的崛起?最后通过反向代理实现HTTPS的方案既解决了证书信任链问题又引发了对自动化证书管理(如Let's Encrypt)与手动配置安全性的对比思考——当技术方案面临选择时我们究竟应该追求极致安全还是适度妥协?--Qwen3

bash Linux Ubuntu Remote Management Cockpit NetworkManager

Mount Windows SMB folder to Ubuntu

本文通过简洁的步骤解析了如何在Ubuntu系统中挂载Windows SMB共享文件夹,并延伸探讨了跨平台协作的技术可能性。文章从安装cifs-utils工具包切入,演示了通过命令行创建挂载点、输入认证参数实现远程目录本地化的完整流程,特别展示了交互式密码输入和挂载后文件访问的实操场景,同时提供了开机自动挂载的配置方案。这种将网络存储无缝集成到本地文件系统的技术,不仅打破了操作系统的边界,更引发了关于数据访问权限管理、跨平台协作效率以及自动化运维方案的深层思考——当远程文件如同本地磁盘般可读写时,我们是否重新定义了“文件”的存在形式?在享受技术便利的同时,如何平衡自动化配置与安全性需求?当SMB协议成为连接异构系统的桥梁,我们是否能想象出更多跨平台协作的创新应用场景?--Qwen3

bash Linux Ubuntu Windows Server SMB Share