diff --git a/java-maven/Containerfile b/java-maven/Containerfile index 3173044..8514342 100644 --- a/java-maven/Containerfile +++ b/java-maven/Containerfile @@ -2,7 +2,7 @@ FROM maven:3.9-eclipse-temurin-21 # 安装基础工具 RUN sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/ubuntu.sources && sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list.d/ubuntu.sources && sed -i 's/http:/https:/g' /etc/apt/sources.list.d/ubuntu.sources RUN apt-get update && \ - apt-get install -y git curl vim ripgrep unzip netcat-openbsd && \ + apt-get install -y git curl vim ripgrep unzip netcat-openbsd bash-completion&& \ # 清理缓存 rm -rf /var/lib/apt/lists/* # 设置工作目录 diff --git a/kilocode/Containerfile b/kilocode/Containerfile new file mode 100644 index 0000000..7c92eca --- /dev/null +++ b/kilocode/Containerfile @@ -0,0 +1,34 @@ +FROM docker.io/library/debian:12 +LABEL maintainer="clzhao98@outlook.com" +RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources +RUN apt-get update && apt-get install -y \ + openssh-server build-essential cmake ninja-build\ + git vim-nox curl jq ripgrep bash-completion wget python3&& \ + apt-get clean &&\ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +ENV http_proxy="socks5://10.177.21.228:10808" +ENV https_proxy="socks5://10.177.21.228:10808" +ENV no_proxy="localhost, 127.0.0.1, .example.com" + + +LABEL description="Basic image for develop on debian12" +LABEL version="1.0" +EXPOSE 1922 80 9000 + + +## 配置 ssh 服务 +RUN mkdir /var/run/sshd +RUN echo "Port 1922" >> /etc/ssh/sshd_config +RUN echo "RSAAuthentication yes" >> /etc/ssh/sshd_config +RUN echo "root:art@319" | chpasswd \ + && sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \ + && sed -i 's/^#\(PermitRootLogin.*\)/\1/' /etc/ssh/sshd_config + + +ADD start-ssh.sh /start-ssh.sh +WORKDIR /workspace + +CMD ["/start-ssh.sh"] +#CMD ["service", "ssh", "start" ] +#CMD ["/usr/sbin/sshd", "-D", "-p", "1922"] diff --git a/kilocode/compose.yaml b/kilocode/compose.yaml new file mode 100644 index 0000000..e4310ab --- /dev/null +++ b/kilocode/compose.yaml @@ -0,0 +1,18 @@ +services: + general-debian-dev: + image: vibecoding:default + build: + context: . + dockerfile: Containerfile + container_name: vibe-coding + hostname: vibe-conding + restart: unless-stopped + # ports: + # - "5173:5173" + # - "4173:4173" + # - "5050:5050" + volumes: + - /workspace/projects/:/projects + - /workspace:/workspace + - /workspace/devcontainer-vols/vibe-coding-root:/root + diff --git a/kilocode/launch.sh b/kilocode/launch.sh new file mode 100644 index 0000000..2952ce0 --- /dev/null +++ b/kilocode/launch.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +function show_help() { + echo "用法: $0 <容器名称> <工作空间路径>" + echo + echo "参数:" + echo " <容器名称> 容器的名称" + echo " <工作空间路径> 工作空间的路径" + exit 1 +} + +# 参数检查 +if [ -z "$1" ] || [ -z "$2" ]; then + echo "错误: 缺少必要的参数。" + show_help +fi + +container_name=$1 +worksapce_path=$2 +basic_volume_map="-v /workspace/shared-root:/root" +basic_port_map="-p 10122:1922" +base_cmd="docker run -itd --name ${container_name} --hostname ${container_name} ${basic_port_map} ${basic_volume_map}" +image_name="dev-workspace:v2" +volume_map="" + +cmd="$base_cmd $volume_map $image_name" +echo ">>> $cmd" +$cmd diff --git a/kilocode/start-ssh.sh b/kilocode/start-ssh.sh new file mode 100755 index 0000000..f91a6e5 --- /dev/null +++ b/kilocode/start-ssh.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") +echo "[$LOGTIME] startup run..." >>/root/start_ssh.log +service ssh start >>/root/start_ssh.log +#service mysql start >>/root/star_mysql.lo +bash diff --git a/vibe-dev/.env b/vibe-dev/.env new file mode 100644 index 0000000..c28cd4f --- /dev/null +++ b/vibe-dev/.env @@ -0,0 +1,51 @@ +# ================================================================= +# Vibe Coding 开发环境 - 环境变量模板 +# 使用说明: +# 1. 复制此文件并重命名为 .env +# 2. 在 .env 中填写你真实的 API Key 和配置 +# 3. 注意:不要将 .env 文件上传到 Git 仓库! +# ================================================================= + +# --- [SSH 配置] --- +# 宿主机连接容器时使用的端口 +SSH_PORT=2222 + +# --- [AI 工具 API Keys] --- +# Aider / OpenCode-AI 需要使用的模型密钥 +# 常用模型提供商:Anthropic (Claude), OpenAI (GPT), 智谱AI (GLM) + +# Anthropic API (用于 Claude 3.5 Sonnet, Aider 强烈推荐) +ANTHROPIC_API_KEY=your_anthropic_key_here + +# OpenAI API (用于 GPT-4o 等) +OPENAI_API_KEY=your_openai_key_here + +# OpenCode-AI 专用 (例如智谱 AI Key) +OPENCODE_API_KEY=your_opencode_provider_key_here + +# --- [开发环境设置 (可选)] --- +# 你可以在这里指定镜像构建时使用的版本(如果 Dockerfile 支持 args) +RUST_VERSION=stable +BUN_VERSION=latest + +# --- [其他工具配置] --- +# 例如某些工具需要的环境变量 +# GITHUB_TOKEN=your_github_pat_here + + +# 开发者信息 +# GIT_USER_NAME=YourName +# GIT_USER_EMAIL=youremail@example.com + +# --- [路径配置] --- +# 宿主机项目代码目录 (默认为当前目录 .) +HOST_PROJECT_PATH=/workspace + +# 容器内的工作目录绝对路径 (建议保持为 /workspace) +CONTAINER_WORKSPACE_PATH=/workspace + +# --- [SSH 密钥配置] --- +# 指定你宿主机上的私钥文件名 (例如 id_ed25519 或 id_rsa) +SSH_KEY_NAME=id_ed25519 +# 宿主机上公钥的完整路径 (用于 Compose 挂载) +SSH_PUB_KEY_PATH=~/.ssh/id_ed25519.pub diff --git a/vibe-dev/.env.example b/vibe-dev/.env.example new file mode 100644 index 0000000..1618ca0 --- /dev/null +++ b/vibe-dev/.env.example @@ -0,0 +1,51 @@ +# ================================================================= +# Vibe Coding 开发环境 - 环境变量模板 +# 使用说明: +# 1. 复制此文件并重命名为 .env +# 2. 在 .env 中填写你真实的 API Key 和配置 +# 3. 注意:不要将 .env 文件上传到 Git 仓库! +# ================================================================= + +# --- [SSH 配置] --- +# 宿主机连接容器时使用的端口 +SSH_PORT=2222 + +# --- [AI 工具 API Keys] --- +# Aider / OpenCode-AI 需要使用的模型密钥 +# 常用模型提供商:Anthropic (Claude), OpenAI (GPT), 智谱AI (GLM) + +# Anthropic API (用于 Claude 3.5 Sonnet, Aider 强烈推荐) +ANTHROPIC_API_KEY=your_anthropic_key_here + +# OpenAI API (用于 GPT-4o 等) +OPENAI_API_KEY=your_openai_key_here + +# OpenCode-AI 专用 (例如智谱 AI Key) +OPENCODE_API_KEY=your_opencode_provider_key_here + +# --- [开发环境设置 (可选)] --- +# 你可以在这里指定镜像构建时使用的版本(如果 Dockerfile 支持 args) +RUST_VERSION=stable +BUN_VERSION=latest + +# --- [其他工具配置] --- +# 例如某些工具需要的环境变量 +# GITHUB_TOKEN=your_github_pat_here + + +# 开发者信息 +# GIT_USER_NAME=YourName +# GIT_USER_EMAIL=youremail@example.com + +# --- [路径配置] --- +# 宿主机项目代码目录 (默认为当前目录 .) +HOST_PROJECT_PATH=. + +# 容器内的工作目录绝对路径 (建议保持为 /workspace) +CONTAINER_WORKSPACE_PATH=/workspace + +# --- [SSH 密钥配置] --- +# 指定你宿主机上的私钥文件名 (例如 id_ed25519 或 id_rsa) +SSH_KEY_NAME=id_ed25519 +# 宿主机上公钥的完整路径 (用于 Compose 挂载) +SSH_PUB_KEY_PATH=~/.ssh/id_ed25519.pub diff --git a/vibe-dev/.gitginore b/vibe-dev/.gitginore new file mode 100644 index 0000000..a1ef77c --- /dev/null +++ b/vibe-dev/.gitginore @@ -0,0 +1,40 @@ +# === 敏感信息 (API Keys & Secrets) === +.env +.env.* +!.env.example +*.pem +id_rsa* +authorized_keys + +# === Docker & 容器相关 === +.devcontainer/ +# 如果你以后把 Docker 卷映射到了本地文件夹(如 ./data) +/data/ +/db/ + +# === Rust 相关 === +/target/ +**/*.rs.bk +# Cargo.lock 通常建议上传(如果是二进制项目),但如果你是做纯库开发可以忽略 +# Cargo.lock + +# === Bun / Node.js 相关 === +node_modules/ +/dist/ +/build/ +.bun-build/ +# Bun 的锁文件建议保留,但如果你想完全由容器控制可以忽略 +# bun.lockb + +# === 编辑器与系统相关 === +.vscode/ +.idea/ +*.swp +*.swo +.DS_Store +Thumbs.db + +# === 临时文件与日志 === +*.log +tmp/ +temp/ diff --git a/vibe-dev/Dockerfile.fedora b/vibe-dev/Dockerfile.fedora new file mode 100644 index 0000000..4c80744 --- /dev/null +++ b/vibe-dev/Dockerfile.fedora @@ -0,0 +1,42 @@ +FROM fedora:latest + +# 1. 系统工具与编译环境 +RUN dnf update -y && dnf install -y \ + curl git wget unzip procps-ng \ + gcc gcc-c++ make cmake openssl-devel \ + zsh sudo python3 python3-pip \ + openssh-server tar gzip \ + && dnf clean all + +# 2. 环境变量配置 +ENV CARGO_HOME=/usr/local/cargo \ + RUSTUP_HOME=/usr/local/rustup \ + BUN_INSTALL="/root/.bun" +ENV PATH="$BUN_INSTALL/bin:/usr/local/cargo/bin:${PATH}" + +# 3. 安装 Rust & Bun +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +RUN curl -fsSL https://bun.sh/install | bash + +# 4. 全局安装 AI 工具 (Vibe Coding 核心) +RUN bun install -g opencode-ai + +# 5. SSH & ZSH 配置 +RUN ssh-keygen -A && \ + mkdir -p /root/.zed /root/.local/share/zed && \ + sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config + +# 6. Shell 美化 +RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended + +# 接收来自 compose 的参数 +ARG CONTAINER_WORKSPACE=/workspace + +# 设置工作目录 +WORKDIR ${CONTAINER_WORKSPACE} + +COPY entrypoint.sh /usr/local/bin/entrypoint.sh +RUN chmod +x /usr/local/bin/entrypoint.sh + +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] +CMD ["zsh"] diff --git a/vibe-dev/Dockerfile.ubuntu b/vibe-dev/Dockerfile.ubuntu new file mode 100644 index 0000000..47ed49f --- /dev/null +++ b/vibe-dev/Dockerfile.ubuntu @@ -0,0 +1,41 @@ +FROM fedora:latest + +# 1. 基础工具 (包含 Zed 远程运行所需的 procps-ng, tar) +RUN dnf update -y && dnf install -y \ + curl git wget unzip procps-ng tar gzip \ + gcc gcc-c++ make cmake openssl-devel \ + zsh sudo python3 python3-pip openssh-server \ + && dnf clean all + +# 2. 环境变量 +ENV CARGO_HOME=/usr/local/cargo \ + RUSTUP_HOME=/usr/local/rustup \ + BUN_INSTALL="/root/.bun" +ENV PATH="$BUN_INSTALL/bin:/usr/local/cargo/bin:${PATH}" + +# 3. 安装 Rust & Bun +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +RUN curl -fsSL https://bun.sh/install | bash + +# 4. 全局安装 AI 工具 +RUN bun install -g opencode-ai + +# 5. SSH & 目录预设 (为 Zed 准备) +RUN ssh-keygen -A && \ + mkdir -p /root/.zed /root/.local/share/zed && \ + sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config + +# 6. Shell 美化 +RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended + +# 接收来自 compose 的参数 +ARG CONTAINER_WORKSPACE=/workspace + +# 设置工作目录 +WORKDIR ${CONTAINER_WORKSPACE} + +COPY entrypoint.sh /usr/local/bin/entrypoint.sh +RUN chmod +x /usr/local/bin/entrypoint.sh + +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] +CMD ["zsh"] diff --git a/vibe-dev/Makefile b/vibe-dev/Makefile new file mode 100644 index 0000000..77a7f90 --- /dev/null +++ b/vibe-dev/Makefile @@ -0,0 +1,121 @@ +# ========================================== +# 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 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) 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 "" diff --git a/vibe-dev/README.md b/vibe-dev/README.md new file mode 100644 index 0000000..c816b6f --- /dev/null +++ b/vibe-dev/README.md @@ -0,0 +1,103 @@ +# 🛸 Vibe Coding 环境使用指南 + +这是一个深度集成了 **Rust**、**Bun** 和 **AI 助手** 的全自动化开发环境,专为追求“极速、丝滑、AI 优先”的开发者设计。 + +--- + +## 🛠️ 第一步:初始化与启动 + +在宿主机(你的个人电脑)上执行以下操作: + +1. **准备配置文件**: +将提供的 `Dockerfile`、`docker-compose.yml`、`entrypoint.sh` 和 `.env.example` 放入项目根目录。 +2. **配置密钥**: +```bash +cp .env.example .env +# 修改 .env,填入你的 Anthropic/OpenAI/OpenCode API Keys + +``` + + +3. **一键构建并启动**: +```bash +docker compose up -d --build + +``` + + + +--- + +## 🎨 第二步:配置 Zed 远程连接 + +Zed 是 Vibe Coding 的绝佳拍档,其极低的响应延迟能让你感受到 AI 实时生成的快感。 + +1. **修改宿主机 SSH 配置**: +在你的本地终端编辑 `~/.ssh/config`,添加以下内容: +```text +Host vibe + HostName localhost + User root + Port 2222 + IdentityFile ~/.ssh/id_rsa # 指向你的私钥 + +``` + + +2. **在 Zed 中打开**: +* 启动 Zed。 +* 唤起命令面板 (`Cmd/Ctrl + Shift + P`)。 +* 输入 `Remote Projects: Open Remote Project` 并选择 `vibe`。 +* 路径选择 `/workspace`。 + + + +--- + +## 🤖 第三步:开启 Vibe Coding 工作流 + +环境启动后,所有的 AI 交互都在 **Zed 的内置终端** 中进行。 + + +### 使用 OpenCode (快速指令与辅助) + +如果想通过简单的指令快速调整代码: + +```bash +# 登录 (仅需首次) +opencode auth login + +# 执行任务 +opencode "优化当前目录下 main.rs 的错误处理逻辑" + +``` + +--- + +## 🚀 性能说明 + +该环境通过 **Named Volumes (命名卷)** 实现了四重加速,即使运行 `docker compose down` 后再重启,以下内容也不会丢失: + +* **Rust 编译加速**:`cargo-cache` 卷保留了所有已下载的第三方库。 +* **Bun 依赖加速**:`bun-cache` 避免了重复下载 node_modules 依赖。 +* **Zed 启动加速**:`zed-server` 卷缓存了远程后端二进制文件。 +* **工具持久化**:通过 `bun -g` 安装的工具在容器重建后依然可用。 + + +## 🧹 常用维护命令 + +| 任务 | 命令 | +| --- | --- | +| **彻底重启环境** | `docker compose restart` | +| **更新 AI 工具 (Aider)** | `pip install --upgrade aider-chat` (容器内运行) | +| **更换基础镜像 (OS)** | 修改 `docker-compose.yml` 中的 `dockerfile` 后运行 `docker compose up --build` | +| **清理所有构建缓存** | `docker compose down -v` (警告:这将清空 Cargo/Bun 缓存) | + + +## ❓ 常见问题排查 + +* **SSH 连接被拒绝**:请检查 `docker ps` 确保容器正在运行,且端口 `2222` 已映射。 +* **Zed 连接极慢**:由于我们配置了 `zed-server` 卷,只有第一次连接会下载,后续应该是秒开。如果一直慢,请检查宿主机的网络能否访问 Zed 的下载服务器。 +* **权限问题**:如果在宿主机手动删除了某些文件导致容器内报错,尝试运行 `chown -R root:root .`。 + + diff --git a/vibe-dev/compose.yml b/vibe-dev/compose.yml new file mode 100644 index 0000000..ba34ae1 --- /dev/null +++ b/vibe-dev/compose.yml @@ -0,0 +1,36 @@ +services: + vibe-dev: + build: + context: . + # 根据需要切换 Dockerfile.fedora 或 Dockerfile.ubuntu + dockerfile: Dockerfile.fedora + args: + # 将路径传递给 Dockerfile 阶段 + CONTAINER_WORKSPACE: ${CONTAINER_WORKSPACE_PATH:-/workspace} + container_name: vibe-coding-env + env_file: .env + environment: + # 让容器内部程序也能感知工作目录 + - WORKSPACE=${CONTAINER_WORKSPACE_PATH:-/workspace} + ports: + - "${SSH_PORT:-2222}:22" + - "6300:3000" + - "6173-6175:5173-5175" + volumes: + - ${HOST_PROJECT_PATH:-.}:${CONTAINER_WORKSPACE_PATH:-/workspace}:cached + + - ${SSH_PUB_KEY_PATH:-~/.ssh/id_ed25519.pub}:/tmp/host_id_ed25519.pub:ro + - cargo-cache:/usr/local/cargo/registry + - bun-cache:/root/.bun/install/cache + # --- 新增:Zed 远程开发缓存 --- + - zed-server:/root/.zed + - zed-share:/root/.local/share/zed + stdin_open: true + tty: true + restart: always + +volumes: + cargo-cache: + bun-cache: + zed-server: + zed-share: diff --git a/vibe-dev/entrypoint.sh b/vibe-dev/entrypoint.sh new file mode 100644 index 0000000..08e83a6 --- /dev/null +++ b/vibe-dev/entrypoint.sh @@ -0,0 +1,33 @@ +#!/bin/bash +set -e + +# 1. 准备 SSH 目录 +mkdir -p /root/.ssh +chmod 700 /root/.ssh +touch /root/.ssh/authorized_keys + +# 2. 动态注入挂载的公钥 (解决只读冲突的核心逻辑) +if [ -f /tmp/host_id_ed25519.pub ]; then + echo "检测到挂载的公钥,正在注入..." + # 仅当公钥不存在时才追加,避免重复 + if ! grep -qf /tmp/host_id_ed25519.pub /root/.ssh/authorized_keys 2>/dev/null; then + cat /tmp/host_id_ed25519.pub >> /root/.ssh/authorized_keys + echo "✅ 公钥注入成功" + else + echo "ℹ️ 公钥已存在,无需重复注入" + fi +fi + +# 3. 强制修复权限 (SSH 对此非常敏感) +chmod 600 /root/.ssh/authorized_keys +chown root:root /root/.ssh/authorized_keys + + +# 根据不同 OS 启动 SSH +if [ -f /usr/sbin/sshd ]; then + /usr/sbin/sshd # Fedora 路径 +else + service ssh start # Ubuntu 路径 +fi + +exec "$@"