diff --git a/vibe-dev/Dockerfile.fedora b/vibe-dev/Dockerfile.fedora index 4c80744..caea162 100644 --- a/vibe-dev/Dockerfile.fedora +++ b/vibe-dev/Dockerfile.fedora @@ -8,12 +8,15 @@ RUN dnf update -y && dnf install -y \ 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}" +RUN chsh -s /bin/zsh root + # 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 @@ -26,7 +29,7 @@ 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 sed -i 's/#PermitUserEnvironment no/PermitUserEnvironment yes/' /etc/ssh/sshd_config RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended # 接收来自 compose 的参数 diff --git a/vibe-dev/Dockerfile.ubuntu b/vibe-dev/Dockerfile.ubuntu index 47ed49f..7a751c5 100644 --- a/vibe-dev/Dockerfile.ubuntu +++ b/vibe-dev/Dockerfile.ubuntu @@ -12,6 +12,7 @@ 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}" +RUN chsh -s /bin/zsh root # 3. 安装 Rust & Bun RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y @@ -25,6 +26,7 @@ RUN ssh-keygen -A && \ mkdir -p /root/.zed /root/.local/share/zed && \ sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config +RUN sed -i 's/#PermitUserEnvironment no/PermitUserEnvironment yes/' /etc/ssh/sshd_config # 6. Shell 美化 RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended diff --git a/vibe-dev/compose.yml b/vibe-dev/compose.yml index ba34ae1..ea0d7dc 100644 --- a/vibe-dev/compose.yml +++ b/vibe-dev/compose.yml @@ -8,28 +8,34 @@ services: # 将路径传递给 Dockerfile 阶段 CONTAINER_WORKSPACE: ${CONTAINER_WORKSPACE_PATH:-/workspace} container_name: vibe-coding-env + hostname: vibe-coding env_file: .env environment: # 让容器内部程序也能感知工作目录 - WORKSPACE=${CONTAINER_WORKSPACE_PATH:-/workspace} + - SHELL=/bin/zsh + - TERM=xterm-256color ports: - "${SSH_PORT:-2222}:22" - "6300:3000" - "6173-6175:5173-5175" volumes: - ${HOST_PROJECT_PATH:-.}:${CONTAINER_WORKSPACE_PATH:-/workspace}:cached + # 1. 使用命名卷持久化整个 .ssh 目录 + - ssh-data:/root/.ssh - ${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-server:/root/.zed_server - zed-share:/root/.local/share/zed stdin_open: true tty: true restart: always volumes: + ssh-data: cargo-cache: bun-cache: zed-server: diff --git a/vibe-dev/entrypoint.sh b/vibe-dev/entrypoint.sh index 08e83a6..2fdd295 100644 --- a/vibe-dev/entrypoint.sh +++ b/vibe-dev/entrypoint.sh @@ -5,7 +5,9 @@ set -e mkdir -p /root/.ssh chmod 700 /root/.ssh touch /root/.ssh/authorized_keys +touch /root/.ssh/environment +printenv | grep -E '^(PATH|BUN|CARGO|RUST|ANTHROPIC|OPENAI|OPENCODE|TERM|SHELL|WORKSPACE)' > /root/.ssh/environment # 2. 动态注入挂载的公钥 (解决只读冲突的核心逻辑) if [ -f /tmp/host_id_ed25519.pub ]; then echo "检测到挂载的公钥,正在注入..." @@ -20,7 +22,7 @@ fi # 3. 强制修复权限 (SSH 对此非常敏感) chmod 600 /root/.ssh/authorized_keys -chown root:root /root/.ssh/authorized_keys +chown -R root:root /root/.ssh # 根据不同 OS 启动 SSH