mcpField
C
configure-git-webserver

configure-git-webserver

github.com/letta-ai云与 DevOps15238 次安装4 周前更新
代码仓库

关于 configure-git-webserver

该技能指导搭建基于 Git 的 Web 部署:推送到裸仓库后,由 post-receive 钩子更新 Web 内容目录。内容包括组件配置、权限、服务器选择和流程验证。

主要功能

  1. 01配置裸 Git 仓库
  2. 02设置 post-receive 部署钩子
  3. 03兼容 main 和 master 分支
  4. 04提供 Web 服务器选择建议
  5. 05验证组件及端到端流程

适用场景

  1. 01Git 推送后发布 Web 文件
  2. 02测试推送触发部署的配置
  3. 03排查钩子权限与部署故障

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/letta-ai/skills --skill configure-git-webserver

安装后在 Claude Code 中输入/configure-git-webserver确认已加载。

详细介绍

配置 Git Web 服务器

概述

本技能介绍如何搭建基于 Git 的 Web 部署系统:向 Git 仓库推送内容时,系统会自动将内容部署到 Web 服务器。典型工作流包括创建裸 Git 仓库、配置 post-receive 钩子以部署内容,以及运行 Web 服务器来提供已部署的文件。

方法

组件识别

实施前,先识别所需的所有组件:

  1. 裸 Git 仓库 - 接收推送的中央仓库
  2. Web 内容目录 - 提供已部署文件的目录
  3. Post-receive 钩子 - 在推送时自动执行部署
  4. Web 服务器 - 提供已部署的内容
  5. 用户访问权限 - 用户向仓库推送的权限
实施顺序

按依赖顺序执行任务:

  1. 首先创建裸 Git 仓库(其他组件依赖其位置)
  2. 创建 Web 内容目录
  3. 创建并配置 post-receive 钩子(依赖仓库和 Web 目录)
  4. 启动 Web 服务器(依赖 Web 目录已存在)
  5. 根据需要配置用户访问权限
Post-Receive 钩子设计

post-receive 钩子应当:

  • 处理多个分支名称(兼容 master 和 main)
  • 使用 git --work-tree 检出到 Web 目录
  • 设置为可执行(chmod +x)
  • 包含正确的 shebang(#!/bin/bash)

钩子结构示例:

#!/bin/bash
while read oldrev newrev ref
do
    branch=$(echo $ref | cut -d/ -f3)
    if [ "$branch" = "main" ] || [ "$branch" = "master" ]; then
        git --work-tree=/path/to/web/dir --git-dir=/path/to/repo checkout -f $branch
    fi
done
Web 服务器选项

根据环境考虑可用选项:

  • python3 -m http.server - 简单、通常已可用,但为单线程
  • nginx - 可用于生产环境,但需要安装
  • node http-server - 需要 Node.js
  • busybox httpd - 轻量,通常在精简环境中可用

验证策略

组件级验证

测试完整工作流之前,先独立验证每个组件:

  1. 仓库验证:检查裸仓库是否存在且结构正确

    ls -la /path/to/repo  # Should show HEAD, objects/, refs/, etc.
    
  2. 钩子验证:确认钩子存在且可执行

    ls -la /path/to/repo/hooks/post-receive
    
  3. Web 服务器验证:确认服务器正在运行并处于监听状态

    ss -tlnp | grep :PORT  # or netstat -tlnp, or ps aux | grep server
    
端到端测试

测试完整工作流:

  1. 克隆仓库(首次测试时使用本地路径)
  2. 创建测试文件并提交
  3. 推送到仓库
  4. 验证文件出现在 Web 目录中
  5. 验证可通过 HTTP 访问该文件
预先检查可用命令

使用系统命令前,先确认命令是否可用,以减少反复尝试:

command -v netstat || command -v ss  # Network status
command -v systemctl || command -v service  # Service management

常见问题

持久性问题

问题:后台进程(例如 python3 -m http.server &)在系统重启后无法继续运行。

缓解措施:生产环境中,请创建 systemd 服务或使用进程管理器。测试时可以使用后台进程,但应说明其局限性。

权限问题

问题:用户无法向仓库推送,或者钩子无法写入 Web 目录。

缓解措施:

  • 检查仓库的所有权和权限
  • 确保运行钩子的用户对 Web 目录具有写入权限
  • 检查钩子本身是否可执行
分支名称处理

问题:钩子只处理 master,但用户推送到 main(或反之)。

缓解措施:在钩子逻辑中处理两种常见的默认分支名称。

测试方法

问题:使用本地路径(/git/server)进行测试可能成功,但基于 SSH 的访问(user@server:/git/server)可能失败。

缓解措施:如果需要 SSH 访问,请将 SSH 配置和用户访问权限与 Git/Web 功能分开验证。

钩子中的错误处理

问题:钩子失败时不会显示错误,导致难以调试。

缓解措施:在钩子中添加错误输出和日志记录:

exec 2>&1  # Redirect stderr to stdout
set -e     # Exit on error
单线程 Web 服务器

问题:像 python3 -m http.server 这样的简单 Web 服务器是单线程的,不适合并发访问。

缓解措施:记录此限制。用于生产环境时,请使用 nginx 等合适的 Web 服务器。

任务拆分指南

避免将任务跟踪拆分得过于细致。将相关操作归为一组:

  • 推荐:“设置裸 Git 仓库并配置 post-receive 钩子”
  • 避免:分别创建“创建目录”“运行 git init”“创建钩子文件”“将钩子设为可执行”等任务

任务跟踪应聚焦于逻辑里程碑,而不是单条命令。

评论

支持 Markdown