v1.1.0: Alpine 轻量级 Docker 开发环境 + 敏感凭证清理

This commit is contained in:
lxy
2026-07-27 13:59:18 +08:00
parent feb76081a0
commit ccca0fa62b
51 changed files with 6125 additions and 993 deletions
+70
View File
@@ -0,0 +1,70 @@
# WorkPod - 容器化开发环境
> 基于 Alpine 3.23 的轻量级开发容器,支持多项目隔离部署。
## 是什么
WorkPod 是一套 **Docker 容器化的全栈开发环境**,每个项目运行在独立容器中,通过 Web 终端(ttyd)或 SSH 访问。
## 核心特性
| 特性 | 说明 |
|------|------|
| 轻量镜像 | ~436MBAlpine 多阶段构建) |
| 开箱即用 | Node.js 24 + Claude Code + ttyd + tmux |
| 工具外挂 | Rust/Go/Python 安装到 /root,自动检测 PATH |
| 项目隔离 | 每个项目独立容器、独立端口、独立网络 |
| 会话管理 | tmux session 支持 URL 参数 / 交互菜单 |
## 快速开始
```bash
# 1. 构建基础镜像
docker compose -f instances/base/docker-compose.yml build
# 2. 启动基础实例
docker compose -f instances/base/docker-compose.yml up -d
# 3. 打开 Web 终端
# http://localhost:7681 (用户: jc, 密码: 1234567)
# 或 SSH 连接
# ssh root@localhost -p 2222 (密码: workpod123)
```
## 目录结构
```
workpod/
├── Dockerfile # 基础镜像构建
├── entrypoint.sh # 统一入口脚本
├── ttyd-session.sh # tmux 会话管理
├── instances/ # ★ 实例配置(每个项目一个目录)
│ ├── registry.yaml # 全局实例注册表
│ ├── base/ # 基础实例
│ ├── flux/ # Flux 项目实例
│ └── .template/ # 新建实例模板
├── docs/ # 文档体系
└── data/ # 运行时数据
```
## 文档索引
| 文档 | 位置 | 说明 |
|------|------|------|
| 实例管理指南 | `instances/README.md` | 端口规则、新建流程 |
| 实例注册表 | `instances/registry.yaml` | 所有实例的端口/状态 |
| 端口分配规则 | `docs/00-规范/端口分配规则.md` | 详细端口规划 |
| 实例创建流程 | `docs/00-规范/实例创建流程.md` | 步骤教程 |
| 架构设计 | `docs/01-架构/` | C4 图 + 组件关系 |
| 问题记录 | `docs/02-技术文档/ISSUES.md` | 历史问题与解决方案 |
| 部署指南 | `docs/03-运维/` | 本机 + 测试服部署 |
| 测试服实例 | `docs/03-运维/测试服实例.md` | 远程实例配置 |
| 审核报告 | `docs/04-审核/` | 安全/架构/Docker/Shell 审核 |
## 相关链接
- 基础镜像:`workpod-alpine:latest`(基于 alpine:3.23
- AI 工具:Claude Code (@anthropic-ai/claude-code)
- Web 终端:ttyd (Alpine apk)
- 会话管理:tmux + ttyd-session.sh
+118
View File
@@ -0,0 +1,118 @@
# 实例创建流程
> 为新项目创建 WorkPod 开发容器的标准步骤。
---
## 前置条件
- Docker 已安装并运行
- 基础镜像已构建:`docker images \| grep workpod-alpine`
---
## 标准流程(3 步)
### Step 1: 创建实例目录
```bash
cd E:/wk-lab/workpod
mkdir -p instances/{name}
cp instances/.template/docker-compose.yml instances/{name}/
```
### Step 2: 编辑 compose 文件
打开 `instances/{name}/docker-compose.yml`,修改占位符:
| 占位符 | 改为 | 示例 |
|--------|------|------|
| `{name}` | 实例名 | `suke` |
| `{SSH_PORT}` | SSH 端口 | `2211` |
| `{WEB_PORT}` | Web 端口 | `7711` |
| `{PROJECT_PATH}` | 项目路径 | `E:/wk-suke` |
按需取消注释:
- **Java 项目** → 取消注释 JDK/Maven volume 和 JAVA_HOME/MAVEN_HOME env
- **home 持久化** → 确保 `../../data/home/{name}:/root` 已配置
### Step 3: 注册并启动
编辑 `instances/registry.yaml`,在 `local:` 下添加新条目:
```yaml
- name: ws-{name}-dev
display: {中文名}
type: project
project: {name}
project_path: E:/wk-{name}
image: ws-{name}-dev:latest
ssh_port: {SSH_PORT}
web_port: {WEB_PORT}
network: workpod-{name}-network
status: starting
compose: instances/{name}/docker-compose.yml
```
启动:
```bash
cd instances/{name} && docker compose up -d --build
```
验证:
```bash
docker ps --filter name=ws-{name}
# 应看到端口映射正确
```
更新状态:`registry.yaml``status: starting``running`
---
## 可选:自定义镜像
如果项目需要额外工具(如 JDK),创建 `instances/{name}/Dockerfile`
```dockerfile
FROM workpod-alpine:latest
LABEL org.opencontainers.image.title="ws-{name}-dev" \
org.opencontainers.image.description="{描述}"
EXPOSE 22 7681
ENTRYPOINT ["/entrypoint.sh"]
```
compose 中添加 build 配置:
```yaml
build:
context: ../../
dockerfile: instances/{name}/Dockerfile
image: ws-{name}-dev:latest
```
---
## 完整示例:创建 suke 实例
```bash
# 1. 创建目录 + 复制模板
mkdir -p instances/suke
cp instances/.template/docker-compose.yml instances/suke/
# 2. 替换占位符(手动或 sed
# {name} → suke, {SSH_PORT} → 2211, {WEB_PORT} → 7711, {PROJECT_PATH} → E:/wk-suke
# 3. 注册到 registry.yaml(添加 local 条目)
# 4. 启动
cd instances/suke && docker compose up -d --build
# 5. 验证
docker ps --filter name=ws-suke
# curl -s http://localhost:7711 | head -5 # ttyd 可访问
```
+61
View File
@@ -0,0 +1,61 @@
# 端口分配规则
> 最后更新:2026-04-07
---
## 规则总览
### 本机端口
```
SSH: 22xx (容器内统一为 22)
Web: 77xx (容器内统一为 7681)
```
| 类型 | SSH 前缀 | Web 前缀 | 范围 | 示例 |
|------|---------|---------|------|------|
| 基础/通用 | 220-221 | 768-769 | 2201-2210 / 7681-7690 | base=2222/7681 |
| **项目开发** | **221-229** | **770-779** | **2211-2290 / 7701-7790** | flux=2201/7701 |
### 测试服端口 (flux_dev @ 39.99.243.191)
复用本机规则,Web 端口做偏移避免冲突:
| 实例 | SSH | Web | 域名 |
|------|-----|-----|------|
| workpod-1 | 2221 | 7681 | wk.1216.top |
| workpod-alpine | 2222 | 7683 | wk2.1216.top |
| workpod-ada | 2224 | 7685 | ada.1216.top |
| workpod-yxl | 2226 | 7686 | yxl.1216.top |
---
## 已分配端口表
### 本机
| # | 实例 | SSH | Web | 网络 | 状态 |
|---|------|-----|-----|------|------|
| 1 | workpod-alpine (base) | 2222 | 7681 | workpod-alpine-network | running |
| 2 | workpod-test | 2223 | 7682 | workpod-test-network | running |
| 3 | ws-flux-dev | 2201 | 7701 | workpod-flux-network | running |
### 预留
| # | 项目 | SSH | Web | 技术栈 |
|---|------|-----|-----|--------|
| 4 | suke | 2211 | 7711 | Java + Flutter |
| 5 | case | 2212 | 7712 | Java + Vue |
| 6 | hszd | 2213 | 7713 | Vue |
| 7 | pm | 2214 | 7714 | 待确认 |
| 8 | me | 2215 | 7715 | 待确认 |
---
## 分配原则
1. **项目实例从 2211 开始** — 2201-2210 保留给 base/test 等通用实例
2. **SSH 和 Web 同编号** — flux 用 2201/7701suke 用 2211/7711,便于记忆
3. **测试服 Web 偏移** — 同一实例测试服 Web = 本机 Web + 偏移值(通常 +2)
4. **注册后再占用** — 新增前先查 registry.yaml 和 `netstat -ano \| grep :22xx`