Docker Compose 中 stop、start 与系统重启行为的正确理解

在使用 Docker Compose 管理服务器服务时,一个非常常见但经常被误解的问题是: 执行 docker compose stop 之后,如果系统重启,这些容器会不会自动启动? 这个问题如果理解错误,可能导致服务器重启后关键服务无法恢复,或者相反,一些本应“冷静”的服务又被意外启动。 本文对 Docker Compose 的停止机制与自动重启行为进行系统性说明。 1. docker compose stop 的真实含义 执行: 其行为是: 这是一个逻辑层面的“人为停止”,不是故障,不是崩溃,而是一个明确的运维决策。 2. 系统重启后是否会自动启动? 答案是:不会。 如果某个容器曾被 docker compose stop 停止,那么: 都不会自动将其启动。 该容器会保持 exited 状态,直到手动执行: 3. restart: unless-stopped 为什么不起作用? 很多人会在 docker-compose.yml 中写: 并以为这样就一定会自动启动。 但实际上: unless-stopped 的语义是“只要不是被人为停止,就在 Docker 启动时自动恢复” 而 docker compose …

在 Proxmox VE 中将 /var/lib/vz 挂载到独立 LVM 磁盘并实现启动容错

在 Proxmox VE(PVE)环境中,/var/lib/vz 是一个非常关键的目录,用于存放虚拟机磁盘、CT 容器、ISO 镜像、模板以及部分备份数据。如果该目录与系统盘混用,一旦发生磁盘故障,既可能影响虚拟化数据,也可能拖垮整个宿主机系统。 一种更加专业和稳健的做法,是将 /var/lib/vz 单独放在一块独立磁盘上,并使用 LVM(Logical Volume Manager)进行管理,同时设置为“即使磁盘缺失也不阻断系统启动”。 本文将完整介绍这种架构的设计思路与实现方式。 一、设计目标 该方案的目标是: 最终结构如下: 二、创建 LVM 磁盘结构 假设新磁盘为 /dev/sdb。 1. 初始化为物理卷 2. 创建卷组 3. 创建逻辑卷(占满磁盘) 三、创建文件系统 可以使用 ext4 或 xfs,这里以 ext4 为例: 四、迁移原有 /var/lib/vz 数据 1. 临时挂载新磁盘 2. 拷贝数据(保留权限与属性) 五、正式替换挂载点 确认挂载: 六、配置开机自动挂载(容错模式) 获取 UUID: 编辑 /etc/fstab: 添加一行: 这行配置的意义 …

用命令行在 Linux 下启用并查看 USB 摄像头画面

在 Linux 桌面环境之外,直接用命令行控制和查看 USB 摄像头是一种非常高效、可控且可自动化的方式。无论是用于测试硬件、搭建服务器视频流、远程监控,还是排查驱动问题,V4L2 + FFmpeg 体系都是最稳定可靠的方案之一。 本文将完整介绍如何在 Linux 下,用命令行列出摄像头、识别正确设备,并以最佳参数输出画面。 一、Linux 摄像头的基本结构 Linux 中所有视频采集设备都通过 V4L2(Video4Linux2) 暴露为: 一个物理摄像头通常会暴露 两个或多个 video 节点: 如果选错节点,画面可能会黑屏、只有低分辨率,或者无法打开。 二、列出系统中所有摄像头 首先查看当前存在的 video 设备: 然后用 V4L2 查询设备归属: 示例输出结构如下: 同一组下面的两个 /dev/videoX 就属于同一个物理摄像头,其中 第一个通常是主视频流。 三、查看摄像头支持的格式和分辨率 确定主设备后(例如 /dev/video5),查询它的能力: 通常可以看到类似: 这里可以看出一个关键事实: MJPG 才是高分辨率高帧率的正确模式YUYV 在高分辨率下通常帧率极低 四、用 ffplay 直接显示画面 推荐使用 FFmpeg 自带的 ffplay: 2K(2560×1440 …

在 ext4 损坏后将 Raspberry Pi 系统从 64GB SD 卡无损迁移到 8GB SD 卡

摘要 在 Raspberry Pi 上运行 Ubuntu 或 Raspberry Pi OS 时,如果发生异常断电或 SD 卡老化,常会导致 ext4 文件系统元数据损坏,表现为启动进入 initramfs、fsck 报错、甚至出现异常输出(如大量负数刷屏)。当系统仍可启动时,最佳做法不是继续在原卡上修复,而是将当前系统整体迁移到一张健康的新存储介质。 本文记录了一次真实的灾难恢复流程:在原 64GB SD 卡发生 ext4 元数据错误后,将系统无重装迁移到一张 8GB 新 SD 卡,并保证系统可以从新卡稳定启动。 问题背景 系统在一次强制断电后启动失败,进入 initramfs,并提示: 执行 fsck 后虽然可以重新启动,但内核日志中出现: 这类错误并非单纯 journal 未回放,而是 ext4 从底层存储读到了不一致的数据,说明原 SD 卡已经出现 silent corruption(隐性数据损坏)。 此时继续在原卡上使用会导致未来随机文件损坏,因此必须迁移系统。 目标 环境 1. 对新 SD 卡重新分区 在 …

基于 VPS + MQTT 的广域网远程控制方案(ESP8266/ESP32 舵机按键器)

随着物联网设备的普及,越来越多的智能场景开始从本地局域网扩展到广域网。对于一些需要远程触发的物理设备,例如按键机器人、舵机驱动机构等,完全依赖商业云平台并非唯一选择。通过自建基础设施,可以获得更高的隐私性、稳定性与可控性。 本文提供一套完整的、可在任意 VPS 上部署的广域网远程控制方案,实现: 该方案适用于智能按键器、远程机械执行器、低成本自动化场景等。 方案整体架构 系统由三个核心部分组成: 远程控制流程如下: 整个过程安全、轻量且易扩展。 一、VPS 部署 MQTT Broker(Mosquitto) 以下示例基于 Debian / Ubuntu 服务器,可根据实际环境调整。 1. 安装 Mosquitto 2. 使用 TLS 证书 如果服务器已有 ACME/Certbot 证书,可直接复用: 3. 创建 MQTT 用户 4. 编写配置文件 文件:/etc/mosquitto/conf.d/iot.conf 5. 重启服务 6. 防火墙放行端口 二、客户端验证 MQTT 服务 订阅监控全部消息 发布测试消息 若能在订阅端收到消息,则服务器配置成功。 三、硬件接线(ESP + 舵机) 以 SG90 …

Ubuntu Server(Raspberry Pi)配置与关闭无线网络自动连接指南

在使用 Ubuntu Server(特别是安装在 Raspberry Pi 等设备上的版本)时,很多人希望无线网络在开机后不要自动连接,以便在特定场景下进行手动控制。本文介绍了从启用 Wi-Fi 到关闭自动联网的完整流程,适用于 Ubuntu Server 20.04–24.04 版本。 一、确认无线网卡状态 系统中无线网卡的识别名称通常为 wlan0。可通过以下命令确认: 若输出类似: 说明无线网卡已被系统识别,只是未启用。此时可手动激活: 二、编辑 Netplan 配置文件 Ubuntu Server 采用 Netplan 管理网络,配置文件一般位于: 使用编辑器打开(以 vim 为例): 默认内容通常如下: 这段配置仅启用了有线网络 eth0,需要手动添加 Wi-Fi 配置。 三、添加 Wi-Fi 并启用自动连接(可选) 若希望无线网络在开机时自动连接,可在文件中追加以下内容: 保存后应用: 此时系统会自动通过 DHCP 获取 IP 地址,若成功连接,可通过以下命令查看: 出现 inet 192.168.x.x/24 即表示连接成功。 四、关闭无线网络的自动连接 如果希望设备在启动时不自动连接 Wi-Fi,可以通过修改 …

Certbot 在阿里云环境中出现 “Server: Beaver / 403” 报错的排查与解决

适用范围:阿里云 ECS 主机已备案,域名解析正常,但 Certbot 在执行 HTTP-01 验证时仍返回 403 Forbidden。目标:在保持现有架构不变的前提下,成功签发一张同时覆盖多个子域名的 Let’s Encrypt 证书。说明:文中域名均为示例(如 example.com、sub1.example.com 等),与真实业务无关。 一、问题现象 执行命令: 输出提示: 人工测试: 结果: 二、原因分析 1. “Server: Beaver” 的含义 2. 与备案无直接关系 三、验证思路 四、解决方案(按稳定性排序) 方案 是否改动架构 是否依赖 80 端口 难度 特点 A. DNS-01 手动 TXT ❌ 否 ❌ 否 ★☆☆ 最安全稳妥,适用于所有环境 B. DNS-01 自动化(AliDNS API) ❌ …

使用 FRP 与反向代理实现安全内网穿透与真实访客 IP 识别

在自建服务器或家庭网络场景中,常需要让局域网服务能够被公网安全访问。FRP(Fast Reverse Proxy)是一款流行的内网穿透工具,可以帮助实现这一目标。当系统采用 HTTPS 与反向代理架构时,正确获取真实访客 IP 需要额外配置。本文介绍一种基于 FRP + Nginx + Proxy Protocol v2 的通用解决方案。 一、系统结构概览 整个体系由三部分组成: 逻辑关系如下: 这种架构可同时实现多服务转发、端口复用与 TLS 加密通信。 二、FRPS 配置(公网端) FRPS 作为核心入口,建议启用加密、认证和端口白名单。 要点说明: 三、FRPC 配置(内网端) FRPC 运行在内网,负责建立安全连接并转发本地主机服务。 配置说明: 四、Nginx 反向代理配置(内网) 反向代理用于终止 TLS 并将请求转发到后端应用。要让其识别 Proxy Protocol 头部,需要显式启用相关指令。 ⚠️ 注意启用 proxy_protocol 后,若直接在本机访问该端口(未通过 FRP),连接会因缺少协议头而失败。若需调试,可额外开放一个仅本地使用的不带 proxy_protocol 的监听端口。 五、验证与测试 六、安全建议 七、总结 通过 …

WordPress 博客访客记录方案与实践

在个人独立博客的运维中,了解网站的访问情况是一项基础但常被忽视的工作。即使是访问量极低的私有博客,适度的访问日志也能在安全、防护、统计等层面提供有用信息。以下内容总结了在 WordPress 环境下记录访客访问数据的几种方案与实践经验,兼顾可控性、稳定性与系统负担。 一、明确访客记录的目标 在启用访客记录功能之前,应首先明确想要“记录”的范围。常见数据包括: 不同的目标对应不同的实现方式: 二、使用服务器日志(最基础方案) 无论使用 Nginx 还是 Apache,Web 服务器默认都会记录访问日志。在 Nginx 环境中,日志路径通常为: 每条日志记录包含 IP、时间、请求路径、状态码等信息。示例: 这种方式不依赖 WordPress,即使站点崩溃也能记录访问。结合 goaccess 或 awstats 等工具,可快速生成统计报表。 优点: 稳定、轻量、无插件、数据完整。缺点: 不在 WordPress 后台显示,需要登录服务器查看。 三、使用 WP Statistics 插件(推荐方案) 在 WordPress 体系内,WP Statistics 是最平衡的选择。它能记录访客 IP、来源、页面访问量等基本信息,并以图表形式展示。 基本设置建议 数据导出与备份 插件提供导出功能,可将访客数据以 CSV 形式保存,便于归档或分析。 若网站使用反向代理 若站点通过 Cloudflare 或其他代理访问,WP Statistics 可能显示代理 IP。可在 wp-config.php …

一次 TLS 证书过期导致的服务故障排查记录

概要 某云服务器上的加密代理服务,在运行稳定数月后,于某日突然出现所有客户端无法连接的情况。网站访问正常,但加密代理完全失效。本文记录了从初步检测到最终定位问题的全过程。 一、问题现象 在问题出现前,所有客户端均能正常连接。某日夜间起,连接全部失败,日志中出现大量类似以下信息: 此错误表明 TLS 握手阶段证书验证失败,但当时并不清楚是客户端、服务端、还是中间环节的问题。 二、初步判断:排除外部因素 首先确认网络层和基础设施: 故障范围仅限于代理服务端口,指向服务自身配置问题。 三、证书与握手检测 通过 openssl s_client 对两个服务端口进行 TLS 测试。 网站端口(正常服务): 代理端口(故障服务): 对比结果表明: 即同一主机上存在两份不同的证书链,代理服务仍在使用旧版。 四、定位原因 进一步检查配置文件,代理服务的 TLS 设置如下: 路径正确,指向 live 目录的符号链接;但查看系统日志后发现,该进程已连续运行超过一周,而新证书的签发时间正是数天前。 说明该进程在新证书生成后从未重启过。由于此类服务不会自动重新加载证书文件,进程一直在使用内存中的旧证书。直到旧证书过期后,客户端才全部无法建立 TLS 握手。 五、解决与验证 重启服务后,再次检测: 握手恢复正常,客户端均可重新连接。 为防止同类问题再次发生,添加了自动重载机制。 六、预防措施 1. 在 Certbot 续期后自动重启相关服务 在 /etc/letsencrypt/renewal-hooks/deploy/ 下创建脚本: 每次证书续期成功后将自动重启代理服务。 2. 或使用 systemd.path 监控证书文件变化 当证书文件更新时自动触发 systemctl …