Compare commits
7 Commits
aca5f52bc2
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| dc947beafa | |||
| d04243817e | |||
| 3f6384325a | |||
| b250a3693b | |||
| 35034f5e2d | |||
| 31de812c41 | |||
| 635d113b4f |
@@ -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/*
|
||||
# 设置工作目录
|
||||
|
||||
20
java-maven/vibe-enhance-version/.env.example
Normal file
20
java-maven/vibe-enhance-version/.env.example
Normal file
@@ -0,0 +1,20 @@
|
||||
# ==============================================
|
||||
# Maven + Java + Bun 开发容器配置模板
|
||||
# 使用方法: 复制此文件为 .env 并修改具体值
|
||||
# cp .env.example .env
|
||||
# ==============================================
|
||||
|
||||
# === 端口配置 ===
|
||||
# SSH 连接端口 (宿主机)
|
||||
SSH_PORT=2222
|
||||
# Web 应用端口 (宿主机)
|
||||
APP_PORT=9090
|
||||
|
||||
# === 路径配置 ===
|
||||
# 项目源码挂载路径 (本地路径)
|
||||
PROJECT_DIR=/workspace
|
||||
|
||||
# === 镜像信息 ===
|
||||
IMAGE_NAME=maven-java21-bun-dev
|
||||
IMAGE_TAG=1.0
|
||||
CONTAINER_NAME=maven-devcontainer
|
||||
20
java-maven/vibe-enhance-version/.gitignore
vendored
Normal file
20
java-maven/vibe-enhance-version/.gitignore
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
# === 敏感配置与本地环境 ===
|
||||
.env
|
||||
.DS_Store
|
||||
|
||||
# === Java/Maven 编译产物 ===
|
||||
target/
|
||||
*.class
|
||||
*.jar
|
||||
*.war
|
||||
*.ear
|
||||
*.log
|
||||
|
||||
# === IDE 配置文件 (可选,视团队规范而定) ===
|
||||
.idea/
|
||||
.vscode/
|
||||
*.iml
|
||||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
|
||||
55
java-maven/vibe-enhance-version/Containerfile
Normal file
55
java-maven/vibe-enhance-version/Containerfile
Normal file
@@ -0,0 +1,55 @@
|
||||
FROM maven:3.9-eclipse-temurin-21
|
||||
|
||||
# 1. 优化 APT源 (保持你原有的逻辑,但增加了错误处理的安全性)
|
||||
# 注意:eclipse-temurin-21 基于 Ubuntu,sources 路径正确
|
||||
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
|
||||
|
||||
# 2. 安装基础工具 + SSH Server
|
||||
#添加 openssh-server, locales, sudo 等开发常用包
|
||||
RUN apt-get update && \
|
||||
apt-get install -y \
|
||||
git curl vim ripgrep unzip netcat-openbsd bash-completion \
|
||||
openssh-server locales sudo wget && \
|
||||
# 清理缓存以减小镜像体积
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# ============================
|
||||
# 2. 安装 Bun 和 Opencode
|
||||
# ============================
|
||||
# [关键] 设置 BUN_INSTALL 到 /opt 目录,防止被 /root 挂载卷覆盖
|
||||
ENV BUN_INSTALL="/opt/bun"
|
||||
ENV PATH="$BUN_INSTALL/bin:$PATH"
|
||||
|
||||
# 安装 Bun
|
||||
RUN curl -fsSL https://bun.sh/install | bash
|
||||
|
||||
# 使用 Bun 安装 opencode
|
||||
RUN bun install -g opencode-ai
|
||||
|
||||
|
||||
|
||||
|
||||
# 3. 配置 SSH 服务
|
||||
RUN mkdir /var/run/sshd && \
|
||||
# 允许 root 登录 (Zed 需要连接用户)
|
||||
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
|
||||
# 修复 SSH 登录后的环境变量问题
|
||||
sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' /etc/pam.d/sshd
|
||||
|
||||
|
||||
# 5. 安装 Opencode (Vibe Coding 工具)
|
||||
# 假设 Opencode 是一个可以通过 curl 下载的二进制文件。
|
||||
# 请将下方的 URL 替换为 Opencode 的真实下载链接。
|
||||
# 如果 Opencode 是 npm 包,则需要先安装 nodejs。
|
||||
# 这里演示二进制安装模式:
|
||||
# RUN curl -L "https://path/to/opencode-linux-x64" -o /usr/local/bin/opencode && \
|
||||
# chmod +x /usr/local/bin/opencode
|
||||
|
||||
# 6. 设置工作目录
|
||||
WORKDIR /workspace
|
||||
|
||||
# 7. 配置容器启动命令
|
||||
# 启动 SSH 服务并挂起容器
|
||||
CMD ["/bin/sh", "-c", "/usr/sbin/sshd -D"]
|
||||
62
java-maven/vibe-enhance-version/Makefile
Normal file
62
java-maven/vibe-enhance-version/Makefile
Normal file
@@ -0,0 +1,62 @@
|
||||
# 引用 .env 文件中的变量
|
||||
include .env
|
||||
export $(shell sed 's/=.*//' .env)
|
||||
|
||||
.PHONY: help build up down restart logs shell clean ssh
|
||||
|
||||
# 默认目标:显示帮助
|
||||
help:
|
||||
@echo "🛠️ Maven + Java + Bun 开发环境管理工具"
|
||||
@echo "=================================================="
|
||||
@echo "make build - 构建镜像"
|
||||
@echo "make up - 启动容器 (后台模式)"
|
||||
@echo "make down - 停止并移除容器"
|
||||
@echo "make restart - 重启容器"
|
||||
@echo "make logs - 查看容器日志"
|
||||
@echo "make shell - 进入容器终端 (Bash)"
|
||||
@echo "make ssh - 使用 SSH 连接容器 (测试连接)"
|
||||
@echo "make clean - ⚠️ 深度清理 (移除容器、镜像和挂载的数据目录)"
|
||||
@echo "=================================================="
|
||||
@echo "当前配置:"
|
||||
@echo " SSH端口: $(SSH_PORT)"
|
||||
@echo " 代码路径: $(PROJECT_DIR)"
|
||||
|
||||
# 构建镜像
|
||||
build:
|
||||
@echo "📦 正在构建镜像 $(IMAGE_NAME):$(IMAGE_TAG)..."
|
||||
@docker compose build
|
||||
|
||||
# 启动容器
|
||||
up:
|
||||
@echo "🚀 正在启动开发环境..."
|
||||
@docker compose up -d
|
||||
@echo "✅ 服务已启动!"
|
||||
@echo " - SSH 连接: ssh -p $(SSH_PORT) root@localhost (密码: root)"
|
||||
@echo " - Zed 连接: ssh://root@localhost:$(SSH_PORT)"
|
||||
|
||||
# 停止容器
|
||||
down:
|
||||
@echo "🛑 正在停止容器..."
|
||||
@docker compose down
|
||||
|
||||
# 重启
|
||||
restart: down up
|
||||
|
||||
# 查看日志
|
||||
logs:
|
||||
@docker compose logs -f
|
||||
|
||||
# 进入 Shell (通过 Docker exec)
|
||||
shell:
|
||||
@docker exec -it $(CONTAINER_NAME) bash
|
||||
|
||||
# SSH 连接测试
|
||||
ssh:
|
||||
@ssh -p $(SSH_PORT) -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@localhost
|
||||
|
||||
# 深度清理 (危险操作)
|
||||
clean: down
|
||||
@echo "⚠️ 正在清理..."
|
||||
@read -p "确定要删除持久化数据目录 $(DATA_DIR) 吗? [y/N] " ans && [ $${ans:-N} = y ] || (echo "已取消"; exit 1)
|
||||
@rm -rf $(DATA_DIR)
|
||||
@echo "🧹 清理完成"
|
||||
17
java-maven/vibe-enhance-version/compose.yml
Normal file
17
java-maven/vibe-enhance-version/compose.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
services:
|
||||
maven-dev-env:
|
||||
image: maven-java21-dev:3.9-ssh
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Containerfile
|
||||
container_name: maven-devcontainer
|
||||
hostname: maven-devcontainer
|
||||
restart: always
|
||||
ports:
|
||||
- "${APP_PORT:-9090}:9090"
|
||||
- "${SSH_PORT:-2322}:22" # [新增] SSH 端口,宿主机通过 localhost:2222 连接
|
||||
volumes:
|
||||
- ${PROJECT_DIR:-/workspace}:/workspace
|
||||
# 持久化 Root 用户配置(包含 .ssh, .m2 缓存, .config/zed 等)
|
||||
- /workspace/devcontainer-vols/maven-devcontainer-root:/root
|
||||
|
||||
34
kilocode/Containerfile
Normal file
34
kilocode/Containerfile
Normal file
@@ -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"]
|
||||
18
kilocode/compose.yaml
Normal file
18
kilocode/compose.yaml
Normal file
@@ -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
|
||||
|
||||
27
kilocode/launch.sh
Normal file
27
kilocode/launch.sh
Normal file
@@ -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
|
||||
7
kilocode/start-ssh.sh
Executable file
7
kilocode/start-ssh.sh
Executable file
@@ -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
|
||||
51
vibe-dev/.env.example
Normal file
51
vibe-dev/.env.example
Normal file
@@ -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
|
||||
40
vibe-dev/.gitignore
vendored
Normal file
40
vibe-dev/.gitignore
vendored
Normal file
@@ -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/
|
||||
49
vibe-dev/Dockerfile.fedora
Normal file
49
vibe-dev/Dockerfile.fedora
Normal file
@@ -0,0 +1,49 @@
|
||||
FROM fedora:latest
|
||||
|
||||
# 1. 系统工具与编译环境
|
||||
RUN dnf update -y && dnf install -y \
|
||||
curl git wget unzip procps-ng shellcheck\
|
||||
gcc gcc-c++ make cmake openssl-devel jq tmux vim\
|
||||
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" \
|
||||
GOPATH="/root/go"
|
||||
ENV PATH="$BUN_INSTALL/bin:/usr/local/cargo/bin:/usr/local/go/bin:$GOPATH/bin:${PATH}"
|
||||
|
||||
RUN chsh -s /bin/zsh root
|
||||
|
||||
# 3. 安装 Rust & Bun & Go
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
RUN curl -fsSL https://bun.sh/install | bash
|
||||
RUN curl -fsSL https://go.dev/dl/go1.24.4.linux-amd64.tar.gz | tar -C /usr/local -xzf - \
|
||||
&& go install golang.org/x/tools/gopls@latest \
|
||||
&& go install github.com/go-delve/delve/cmd/dlv@latest
|
||||
|
||||
# 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
|
||||
|
||||
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 的参数
|
||||
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"]
|
||||
47
vibe-dev/Dockerfile.ubuntu
Normal file
47
vibe-dev/Dockerfile.ubuntu
Normal file
@@ -0,0 +1,47 @@
|
||||
FROM fedora:latest
|
||||
|
||||
# 1. 基础工具 (包含 Zed 远程运行所需的 procps-ng, tar)
|
||||
RUN dnf update -y && dnf install -y \
|
||||
curl git wget unzip procps-ng tar gzip shellcheck vim\
|
||||
gcc gcc-c++ make cmake openssl-devel tmux jq\
|
||||
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" \
|
||||
GOPATH="/root/go"
|
||||
ENV PATH="$BUN_INSTALL/bin:/usr/local/cargo/bin:/usr/local/go/bin:$GOPATH/bin:${PATH}"
|
||||
RUN chsh -s /bin/zsh root
|
||||
|
||||
# 3. 安装 Rust & Bun & Go
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
RUN curl -fsSL https://bun.sh/install | bash
|
||||
RUN curl -fsSL https://go.dev/dl/go1.24.4.linux-amd64.tar.gz | tar -C /usr/local -xzf - \
|
||||
&& go install golang.org/x/tools/gopls@latest \
|
||||
&& go install github.com/go-delve/delve/cmd/dlv@latest
|
||||
|
||||
# 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
|
||||
|
||||
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
|
||||
|
||||
# 接收来自 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"]
|
||||
123
vibe-dev/Makefile
Normal file
123
vibe-dev/Makefile
Normal file
@@ -0,0 +1,123 @@
|
||||
# ==========================================
|
||||
# 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 ""
|
||||
103
vibe-dev/README.md
Normal file
103
vibe-dev/README.md
Normal file
@@ -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 .`。
|
||||
|
||||
|
||||
44
vibe-dev/compose.yml
Normal file
44
vibe-dev/compose.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
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
|
||||
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
|
||||
- go-cache:/root/go
|
||||
# --- 新增: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:
|
||||
go-cache:
|
||||
zed-server:
|
||||
zed-share:
|
||||
35
vibe-dev/entrypoint.sh
Normal file
35
vibe-dev/entrypoint.sh
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# 1. 准备 SSH 目录
|
||||
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 "检测到挂载的公钥,正在注入..."
|
||||
# 仅当公钥不存在时才追加,避免重复
|
||||
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 -R root:root /root/.ssh
|
||||
|
||||
|
||||
# 根据不同 OS 启动 SSH
|
||||
if [ -f /usr/sbin/sshd ]; then
|
||||
/usr/sbin/sshd # Fedora 路径
|
||||
else
|
||||
service ssh start # Ubuntu 路径
|
||||
fi
|
||||
|
||||
exec "$@"
|
||||
Reference in New Issue
Block a user