# ========================================== # Vibe Coding 开发环境快捷管理 # ========================================== .PHONY: up down restart build shell ssh-init check clean logs zed # 默认变量 CONTAINER_NAME=vibe-coding-env # 从 .env 获取配置,若无则使用默认值 SSH_KEY_NAME ?= $(shell grep SSH_KEY_NAME .env | cut -d '=' -f2 || echo id_ed25519) SSH_PORT ?= $(shell grep SSH_PORT .env | cut -d '=' -f2 || echo 2222) # --- 核心命令 --- # 启动环境 up: @echo "🚀 正在启动 Vibe 环境..." docker compose up -d @echo "✅ 环境已就绪。" # 停止环境 down: @echo "🛑 正在停止环境..." docker compose down # 重启环境 restart: down up # 重新构建镜像 (当修改了 Dockerfile 或想升级工具时使用) build: @echo "🛠️ 正在重新构建镜像..." docker compose build --no-cache docker compose down docker compose up -d # --- 连接与交互 --- # 直接通过 Docker 进入交互式 Shell shell: docker exec -it $(CONTAINER_NAME) zsh # 增强版:自动识别 ED25519 或 RSA 并注入 ssh-init: @echo "🔑 正在同步 SSH 公钥 ($(SSH_KEY_NAME)) 到容器..." @if [ -f ~/.ssh/$(SSH_KEY_NAME).pub ]; then \ cat ~/.ssh/$(SSH_KEY_NAME).pub | docker exec -i vibe-coding-env sh -c "mkdir -p /root/.ssh && cat >> /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys"; \ echo "✅ 公钥注入完成。"; \ else \ echo "❌ 错误: 未在宿主机 ~/.ssh/ 找到 $(SSH_KEY_NAME).pub"; \ fi # 使用 Zed 命令行工具直接打开远程项目 zed: @echo "🎨 正在唤起 Zed 远程开发..." zed ssh://root@localhost:$(SSH_PORT)/workspace # --- 维护与自检 --- # 查看运行日志 logs: docker compose logs -f # 环境健康检查:验证 Rust, Bun, AI 工具是否正常 check: @echo "🔍 执行工具自检..." @docker exec -it $(CONTAINER_NAME) rustc --version || echo "❌ Rust 未就绪" @docker exec -it $(CONTAINER_NAME) go version || echo "❌ Go 未就绪" @docker exec -it $(CONTAINER_NAME) bun --version || echo "❌ Bun 未就绪" @docker exec -it $(CONTAINER_NAME) aider --version || echo "❌ Aider 未就绪" @docker exec -it $(CONTAINER_NAME) opencode version || echo "❌ OpenCode 未就绪" @echo "✨ 自检完成!" add-key: @$(eval KEY_PATH := $(if $(PUB),$(PUB),$(SSH_PUB_KEY_PATH))) @echo "🔑 正在从 $(KEY_PATH) 添加公钥..." @if [ -f $(KEY_PATH) ]; then \ cat $(KEY_PATH) | docker exec -i $(CONTAINER_NAME) sh -c "mkdir -p /root/.ssh && cat >> /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys"; \ echo "✅ 公钥已追加。"; \ else \ echo "❌ 错误: 找不到文件 $(KEY_PATH)"; \ fi add-key-str: @if [ -z "$(STR)" ]; then \ echo "❌ 错误: 请提供公钥字符串。"; \ echo "用法: make add-key-str STR='您的公钥内容'"; \ else \ echo "$(STR)" | docker exec -i vibe-coding-env sh -c "mkdir -p /root/.ssh && cat >> /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys"; \ echo "✅ 公钥字符串已成功追加到容器。"; \ fi # 彻底清理 (删除镜像、容器以及所有持久化缓存卷) # 警告:这将导致重新下载所有 Rust/Bun 依赖和 Zed Server clean: @echo "⚠️ 正在执行深度清理..." docker compose down -v @echo "✨ 清理完毕,环境已重置。" # --- 帮助系统 --- help: @echo "🚀 Vibe Coding 环境命令行助手" @echo "" @echo "📋 容器生命周期管理:" @echo " make up - 启动环境 (并自动通过 /tmp 注入 .env 中的主密钥)" @echo " make down - 停止并移除容器" @echo " make restart - 重启容器" @echo " make build - 强制重新构建镜像 (不使用缓存)" @echo " make clean - 彻底清理 (删除镜像、容器及所有持久化缓存卷)" @echo "" @echo "🔑 SSH 密钥管理:" @echo " make ssh-init - [初始化] 同步宿主机默认公钥到容器" @echo " make add-key - [文件导入] 从指定文件添加公钥" @echo " 用法: make add-key PUB=~/.ssh/other_key.pub" @echo " make add-key-str - [字符串导入] 直接通过粘贴字符串添加公钥" @echo " 用法: make add-key-str STR='ssh-ed25519 AAA...'" @echo "" @echo "💻 开发与调试:" @echo " make zed - 通过 Zed 编辑器打开远程项目" @echo " make shell - 进入容器内的 ZSH 终端" @echo " make check - 检查 Rust, Bun, AI 工具链版本状态" @echo " make logs - 查看容器实时运行日志" @echo ""