标签: Web

  • Web 部署新选择:Docker 还是 Podman

    容器化已成为现代 Web 网站部署的核心策略。无论是 Docker 还是 Podman,都能将你的网站及其所有依赖打包成一个独立、可移植的单元,从而极大地简化部署流程。作为开发者,你需要了解它们在架构和使用上的差异,因为这些差异会直接影响你的部署效率、系统安全性,甚至是未来的可扩展性。容器仅仅是一种工具,而非最终目的。

    Docker

    Docker 作为容器技术的先行者,凭借其强大的生态系统和丰富的工具链,已成为 Web 应用部署的事实标准

    优点:

    • 海量镜像资源,开发部署高效: Docker Hub 上拥有庞大的官方和社区镜像库,涵盖了 Nginx、Node.js、MySQL 等各类服务。这意味着你无需从头配置,就能快速拉取所需环境,大幅缩短开发和部署周期。
    • Docker Compose 简化多服务部署: 现代 Web 应用常由多个服务构成(如 Web 服务器、数据库、缓存)。docker-compose.yml 文件允许你通过一份声明式配置,一次性定义并启动所有相关服务,实现“一键部署”,极大地简化了开发、测试和生产环境的管理。
    • 与云原生编排工具无缝集成: 如果你的网站未来需要扩展到集群环境以应对高并发(例如使用 Kubernetes 或 Docker Swarm),Docker 能提供良好的兼容性。这为你的大规模部署奠定了坚实的基础,确保平滑过渡。
    • 跨平台一致性,提升团队协作效率: 无论团队成员使用 Windows、macOS 还是 Linux,Docker Desktop 都能提供统一的容器开发和运行体验,有效减少“在我机器上能跑”的问题,确保开发与生产环境的高度一致。

    适用场景:

    • 容器技术初学者,希望快速入门并能找到大量学习资料和社区支持。
    • 需要同时管理多个相互依赖的服务,例如 WordPress + MySQL。
    • 计划将 Web 应用部署到大型云平台或 Kubernetes 集群
    • 团队成员操作系统多样,需要统一的开发环境以提高协作效率。

    Podman

    Podman 是容器领域的一颗新星,以其独特的无守护进程架构卓越的安全性在 Linux 环境中脱颖而出。

    优点:

    • 无守护进程,支持无 Root 运行,安全性更高: 这是 Podman 的核心优势。它没有常驻后台的守护进程,并且支持“无根容器”(rootless containers)。这意味着你可以以普通用户身份运行容器,即使容器被攻陷,攻击者也难以获得宿主机的 Root 权限,显著降低了安全风险。
    • 与 Systemd 原生集成,简化服务管理: 在 Linux 服务器上,你可以将容器直接注册为 systemd 服务,享受系统级的自启动、守护和监控功能。这让 Web 服务的长期管理变得异常简单和可靠,特别适合在 VPS 或物理服务器上部署。
    • 资源占用低,提升边缘设备性能: 由于 Podman 没有常驻守护进程,它仅在执行命令时才消耗资源。这使得它在资源有限的服务器(如小型 VPS 或边缘设备)上更为高效,能有效节省内存和 CPU,提升系统整体性能。
    • 支持 Pod 架构,与 Kubernetes 理念一致: Podman 能够管理“Pod”(一组共享网络和存储的容器),这与 Kubernetes 的设计理念完全一致。你可以将 Web 服务和数据库打包进一个 Pod,简化它们之间的通信和数据共享,同时也为未来迁移到 Kubernetes 做了技术储备。

    适用场景:

    • 对安全性有极高要求,希望容器能够在无 Root 权限下运行。
    • 主要在 Linux 服务器上进行部署,并希望容器能与系统服务 (systemd) 紧密集成。
    • 资源受限的环境,追求极致的性能和效率。
    • 希望提前熟悉 Kubernetes 的 Pod 概念,为未来的云原生转型做准备。

    实际使用中的关键差异

    除了核心特性,实际部署中还有一些细节差异值得开发者注意:

    • 1. 命令行兼容性并非百分百: 尽管 Podman 的命令与 Docker 大致相似,但在一些高级用法、网络配置或特定参数上仍存在细微差别。习惯 Docker 的用户可能需要短暂的适应期。
    • 2. 镜像构建方式: Docker 主要使用 docker build 命令和 Dockerfile 来构建镜像。Podman 虽然也支持 podman build,但它更推崇与 Buildah 工具集成。Buildah 提供了更底层的控制和更多样的构建方式(甚至无需 Dockerfile),这对于需要高度定制化构建流程的开发者来说非常有用。
    • 3. 存储卷与权限处理: 在 Linux 系统下,Docker 和 Podman 在处理容器存储卷的默认权限和 SELinux 安全上下文时可能有所不同。特别是在 Podman 的无根容器模式下,存储卷的权限配置需要开发者更加细致地处理,以避免潜在的文件访问问题。

    特性对比

    特性/维度DockerPodman
    架构有守护进程(dockerd无守护进程,命令直接调用容器引擎
    无 Root 运行需要 Root (或 sudo)支持 rootless 模式
    多容器编排Docker Compose / Swarm支持 Pod,但 Compose 支持较弱
    与 Systemd 集成需额外配置或借助外部工具原生支持 systemd 生成服务文件
    镜像构建docker build (基于 Dockerfile)podman build + Buildah (更灵活)
    资源占用较高 (后台常驻 dockerd)更低 (按需启动,无守护)
    安全性中等 (需注意权限)高 (支持无 Root 容器,强权限隔离)

    Docker 和 Podman 并非相互对立,它们代表了两种不同的容器设计理念:

    • Docker = 生态成熟 + 上手快 + 支持云原生全流程。
    • Podman = 安全优先 + 系统集成强 + 更贴近 Linux 哲学。
  • 通过Cockpit管理 Ubuntu 24.04 服务器

    在Ubuntu 24.04 上安装和配置 Cockpit应用
    Cockpit 是一个基于 Web 的服务器管理工具,用于简化和直观地管理 Linux 系统。它提供了一个用户友好的界面,使系统管理员可以通过浏览器方便地执行常见的管理任务,如监控系统性能、管理用户、查看日志、启动和停止服务、配置网络等。

    1. 更新软件包列表:
    sudo apt update
    1. 安装 Cockpit:
    sudo apt install cockpit
    1. 启用并启动 Cockpit 服务:
    sudo systemctl enable --now cockpit.socket
    1. 验证 Cockpit 服务状态:
    sudo systemctl status cockpit.socket

    通过 Web 浏览器访问 Cockpit 界面,https://<your-server-ip>:9090 进行访问

  • WordPress限制文章修订版本数量

    1. 为什么要限制文章修订版本?

    WordPress 默认会在每次保存或更新文章时创建一个修订版本。这在编辑过程中可以提供历史记录,方便回滚到之前的版本。然而,如果不加限制,数据库会累积大量的修订版本,可能会影响网站性能。因此,限制修订版本的数量可以减少数据库冗余,提高查询效率。

    2. 通过 wp-config.php 限制修订版本数量

    WordPress 允许通过 wp-config.php 文件限制文章的修订版本数量。

    步骤

    1. 打开 WordPress 安装目录 通过 FTP 或 SSH 访问 WordPress 站点的根目录。
    2. 编辑 wp-config.php 文件 使用文本编辑器打开 wp-config.php 文件。
    3. 添加以下代码wp-config.php 文件中
    // Enable WordPress article revisions, limited to 3
    define( 'WP_POST_REVISIONS', 3 );
    1. 保存并上传 保存修改后的 wp-config.php 文件,并上传回服务器。

    3. 其他可选设置

    • 完全禁用修订版本 如果不想存储任何修订版本,可以使用以下代码:
    // Disable WordPress article revisions
    define( 'WP_POST_REVISIONS', false );

    这将禁止 WordPress 存储任何修订版本,仅保留自动保存的版本。

    • 完全启用修订版本 如果想存储每个修订版本,可以使用以下代码:
    // Enable WordPress article version revision
    define( 'WP_POST_REVISIONS', true );

    这将启用 WordPress 存储存储每个修订版本

    • 设置更高或更低的限制 如果需要更改存储的修订版本数量,只需修改 WP_POST_REVISIONS 的值。例如,存储 5 个修订版本:
    // Enable WordPress article revisions, limited to 5
    define( 'WP_POST_REVISIONS', 5 );
  • Docker安装Nextcloud

    Nextcloud 是一款开源的私有云存储服务,通过 Docker 部署 Nextcloud 可以快速搭建私有云存储服务,适用于个人和小型团队使用。

    1. 创建工作目录

    在服务器上创建一个专门用于存放 Nextcloud 数据的目录,并进入该目录:

    mkdir nextcloud && cd nextcloud

    2. 编写 docker-compose.yml 配置文件

    创建 docker-compose.yml 文件,并填入以下内容:

    services:
      db:
        image: postgres
        restart: always
        volumes:
          - db:/var/lib/postgresql/data
        environment:
          - POSTGRES_DB=nextcloud
          - POSTGRES_USER=nextcloud
          - POSTGRES_PASSWORD=nextcloud
    
      app:
        image: nextcloud
        restart: always
        ports:
          - 8080:80
        volumes:
          - nextcloud:/var/www/html
        environment:
          - POSTGRES_HOST=db
          - POSTGRES_DB=nextcloud
          - POSTGRES_USER=nextcloud
          - POSTGRES_PASSWORD=nextcloud
        depends_on:
          - db
    
      cron:
        image: nextcloud
        restart: always
        volumes:
          - nextcloud:/var/www/html
        entrypoint: /cron.sh
        depends_on:
          - db
    
    volumes:
      db:
      nextcloud:

    2.1 说明

    • 数据库服务 (db): 使用 PostgreSQL 作为 Nextcloud 的数据库存储。
    • Nextcloud 应用 (app): 主要的 Nextcloud 服务,映射端口 8080
    • 定时任务 (cron): 运行 Nextcloud 的定期任务,如清理临时文件、维护数据库等。
    • 数据卷 (volumes): db 用于存储数据库数据,nextcloud 用于存储 Nextcloud 相关文件。

    3. 启动 Nextcloud

    使用 docker compose 命令启动 Nextcloud 容器:

    docker compose up -d

    4. 访问 Nextcloud

    在浏览器中打开以下地址访问 Nextcloud 界面:

    http://<服务器IP>:8080

    首次访问时,需要创建管理员账号并完成初始化。

  • Docker安装Stirling-PDF

    Stirling-PDF 是一款基于 Docker 容器的开源 PDF 处理工具,专为OCR设计,能够将扫描的 PDF 文件中的图像或文字转换为可编辑的文本。通过集成 Tesseract OCR 引擎,Stirling-PDF 使得用户能够轻松提取 PDF 文件中的文字,无论是扫描文档、图像还是其他类型的图文混合内容。

    该工具提供了一个简洁的 Web 界面,用户可以上传 PDF 文件进行批量处理、OCR 识别和文本提取。它支持多语言识别,适用于不同语言的 OCR 数据包,能够帮助用户处理多种语言的文档。

    1. 创建 stirling-pdf 目录并进入

    首先,我们需要在你的服务器上创建一个新的目录来存放相关文件,并进入该目录。

    mkdir stirling-pdf && cd stirling-pdf

    2. 下载 Tesseract OCR 库

    Stirling-PDF 使用 Tesseract OCR 库进行文字识别。因此,我们需要下载其相关的语言数据。

    git clone https://github.com/tesseract-ocr/tessdata.git

    3. 创建 docker-compose.yml 文件

    创建 docker-compose.yml 文件,以便使用 Docker Compose 部署 Stirling-PDF 服务。

    stirling-pdf 目录下,创建并编辑 docker-compose.yml 文件:

    services:
      stirling-pdf:
        restart: always
        image: frooodle/s-pdf:latest
        ports:
          - '8080:8080'  # 映射容器内的 8080 端口到宿主机的 8080 端口
        volumes:
          - ./tessdata:/usr/share/tessdata
          - ./extraConfigs:/configs
          - ./customFiles:/customFiles/
          - ./logs:/logs/
        environment:
          - DOCKER_ENABLE_SECURITY=false
          - INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
          - LANGS=en_GB

    4. 启动 Stirling-PDF

    创建完 docker-compose.yml 文件后,可以使用以下命令启动 Stirling-PDF 服务:

    docker compose up -d

    该命令会自动下载所需的 Docker 镜像并启动容器。启动完成后,Stirling-PDF 服务将开始运行。

    5. 使用浏览器访问 Stirling-PDF

    启动成功后,你可以在浏览器中通过以下地址访问 Stirling-PDF:

    http://<IP>:8080
    • 替换 <IP> 为你的服务器的 IP 地址,你就可以在浏览器中访问并使用 Stirling-PDF 进行 PDF 文件的处理了。
  • 通过关闭第一篇文章评论来防止 WordPress 自动化垃圾评论

    网站刚上线,默认的第一篇文章(“Hello World”)就涌入了大量垃圾评论这并非个例,而是许多WordPress站点初期都会面临的问题,在 WordPress 站点中默认的第一篇文章(通常是“Hello World”)往往会成为垃圾评论的主要目标。许多站长在搭建新站点时,可能会忽略这一点,导致网站在上线初期就受到垃圾评论的侵扰。分析第一篇文章易受攻击的原因,并提供有效的解决方案,帮助您减少垃圾评论,提升网站安全性和用户体验。

    1. 为什么 WordPress 第一篇文章容易受到垃圾评论?

    WordPress 安装完成后,默认会生成一篇标题为 “Hello World” 的示例文章。这篇文章通常具有以下特点,使其成为垃圾评论的高发区域:

    文章 ID 是最小的,容易被机器人扫描

    • WordPress 文章的 ID 号是按顺序分配的,而第一篇文章的 ID 通常是 1。
    • 许多垃圾评论机器人会自动扫描 ID 为 1 的文章,并尝试发送垃圾评论。

    默认文章通常不会删除或修改

    • 许多站长搭建网站后,可能不会立即删除或修改默认文章。
    • 这篇文章往往是公开可见的,容易被垃圾评论者利用。

    WordPress 站点刚建立时安全防护较弱

    • 新站点通常没有安装防垃圾评论插件,如 Akismet 或 CAPTCHA,导致垃圾评论可以轻松提交。
    • 由于管理员可能尚未设置评论审核规则,垃圾评论可能会直接显示在网站上,影响网站的信誉和形象。

    机器人针对默认内容进行批量评论

    • 许多垃圾评论机器人专门针对 WordPress 站点的默认文章,批量发布广告、恶意链接或欺诈信息。
    • 这些垃圾评论不仅影响用户体验,还可能损害网站的 SEO 排名。

    2. 如何手动关闭第一篇文章的评论?

    登录 WordPress 后台

    找到第一篇文章

    1. 在后台左侧菜单栏中,点击 “文章” -> “所有文章”。
    2. 找到 默认的第一篇文章(通常是“Hello World”)
    3. 点击文章标题,进入文章编辑页面。

    关闭评论功能

    1. 在文章编辑页面,找到 “讨论” 选项(如果没有看到“讨论”选项,请点击右上角的“显示选项”,勾选“讨论”)。
    2. 取消勾选 “允许评论” 和 “允许引用通告和通知”。
    3. 点击 “更新” 按钮,保存更改。

    完成以上操作后,该文章的评论功能将被完全禁用,任何访客都无法再对其进行评论。