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
+66
View File
@@ -0,0 +1,66 @@
# WorkPod 实例模板 — 复制此文件到 instances/{name}/ 后修改
# 修改项(搜索 { } 占位符):
# 1. {name} → 实例名(如 suke, case, hszd
# 2. {SSH_PORT} → SSH 端口(按端口分配规则)
# 3. {WEB_PORT} → Web 端口
# 4. {PROJECT_PATH}→ 项目路径(如 E:/wk-suke
# 5. 取消注释需要的 extra_volumes 和 extra_env
services:
ws-{name}-dev:
build:
context: ../../
dockerfile: instances/{name}/Dockerfile
image: ws-{name}-dev:latest
container_name: ws-{name}-dev
hostname: ws-{name}-dev
restart: unless-stopped
ports:
- "{SSH_PORT}:22"
- "{WEB_PORT}:7681"
volumes:
- {PROJECT_PATH}:/workspace
# Java 项目取消注释:
# - D:/Java/jdk-musl-17:/opt/jdk-musl-17:ro
# - D:/Java/maven-mvnd-3.9.14:/opt/maven-mvnd-3.9.14:ro
# 持久化 home 目录(手动安装的工具不会因重建丢失):
- ../../data/home/{name}:/root
environment:
- TZ=Asia/Shanghai
- TERM=xterm-256color
- ROOT_PASSWORD=${ROOT_PASSWORD:-workpod123}
- TTYD_CREDENTIALS=${TTYD_CREDENTIALS:-jc:1234567}
# - WORKPOD_PROJECT={name}
# - JAVA_HOME=/opt/jdk-musl-17
# - MAVEN_HOME=/opt/maven-mvnd-3.9.14
deploy:
resources:
limits:
memory: 4G
reservations:
memory: 1G
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
healthcheck:
test: ["CMD-SHELL", "netstat -tlnp 2>/dev/null | grep -qE ':(22|7681)\\b' || exit 1"]
interval: 30s
timeout: 5s
start_period: 15s
retries: 3
working_dir: /workspace
tty: true
stdin_open: true
networks:
default:
name: workpod-{name}-network
+88
View File
@@ -0,0 +1,88 @@
# WorkPod 实例管理指南
## 快速概览
| 实例 | SSH | Web | 用途 | 状态 |
|------|-----|-----|------|------|
| workpod-alpine | 2222 | 7681 | 基础开发环境 | `registry.yaml` |
| ws-flux-dev | 2201 | 7701 | Flux 项目 | `registry.yaml` |
| workpod-test | 2223 | 7682 | 测试实例 | `registry.yaml` |
详细注册表见 **[registry.yaml](./registry.yaml)**
---
## 端口分配规则
### 本机
| 类型 | SSH 范围 | Web 范围 | 说明 |
|------|---------|---------|------|
| 基础/通用 | 2201-2210 | 7681-7690 | base, test 等通用实例 |
| **项目开发** | **2211-2290** | **7701-7790** | 各业务项目专用 |
### 已分配
| 端口 | 实例 | 备注 |
|------|------|------|
| 2222 / 7681 | workpod-alpine | 基础实例 |
| 2223 / 7682 | workpod-test | 测试实例 |
| **2201 / 7701** | **ws-flux-dev** | **Flux 项目** |
| 2211 / 7711 | (预留) | suke |
| 2212 / 7712 | (预留) | case |
| 2213 / 7713 | (预留) | hszd |
### 测试服 (flux_dev)
复用本机规则 + 偏移,详见 registry.yaml → `remote` 段。
---
## 新建项目实例(3 步)
```bash
# 1. 从模板创建
mkdir -p instances/{name}
cp instances/.template/docker-compose.yml instances/{name}/
# 2. 编辑 compose 文件,修改以下占位符:
# {name} → 实例名
# {SSH_PORT} → 按 2211+ 分配
# {WEB_PORT} → 按 7711+ 分配
# {PROJECT_PATH} → E:/wk-{name}
# 3. 注册到 registry.yaml 并启动
cd instances/{name} && docker compose up -d --build
```
如需自定义镜像(如加 JDK),在 `instances/{name}/` 下创建 Dockerfile
```dockerfile
FROM workpod-alpine:latest
# 额外的 LABEL、VOLUME 声明等
ENTRYPOINT ["/entrypoint.sh"]
```
---
## 常用命令
```bash
# 查看所有实例状态
docker ps --filter name=workpod --format "table {{.Names}}\t{{.Status}}\t{{.Ports}"
# 启动指定实例
cd instances/{name} && docker compose up -d
# 停止指定实例
cd instances/{name} && docker compose down
# 重建(修改 Dockerfile/compose 后)
cd instances/{name} && docker compose up -d --build
# 进入容器
docker exec -it {container_name} bash
# 查看日志
docker logs -f {container_name}
```
+53
View File
@@ -0,0 +1,53 @@
services:
workpod-alpine:
build:
context: ../../
dockerfile: Dockerfile
image: workpod-alpine:latest
container_name: workpod-alpine
hostname: workpod-alpine
privileged: true
ports:
- "2222:22"
- "7681:7681"
volumes:
- ../../data/workspace:/workspace
environment:
- TZ=${TZ:-Asia/Shanghai}
- TERM=xterm-256color
- ROOT_PASSWORD=${ROOT_PASSWORD:-workpod123}
- TTYD_CREDENTIALS=${TTYD_CREDENTIALS:-jc:1234567}
tty: true
stdin_open: true
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
deploy:
resources:
limits:
memory: 4G
reservations:
memory: 1G
healthcheck:
test: ["CMD-SHELL", "netstat -tlnp 2>/dev/null | grep -qE ':(22|7681)\\b' || exit 1"]
interval: 30s
timeout: 5s
start_period: 10s
retries: 3
restart: unless-stopped
working_dir: /workspace
networks:
default:
name: workpod-alpine-network
+10
View File
@@ -0,0 +1,10 @@
# ws-flux-dev - Flux 金融线索管理 (Java 17 + Node 24)
FROM workpod-alpine:latest
LABEL org.opencontainers.image.title="ws-flux-dev" \
org.opencontainers.image.description="Flux 全栈开发环境 (Java 17 + Node 24)" \
org.opencontainers.image.version="1.0.0"
EXPOSE 22 7681
ENTRYPOINT ["/entrypoint.sh"]
+88
View File
@@ -0,0 +1,88 @@
services:
ws-flux-dev:
build:
context: ../../
dockerfile: instances/flux/Dockerfile
image: ws-flux-dev:latest
container_name: ws-flux-dev
hostname: ws-flux-dev
restart: unless-stopped
ports:
- "2201:22"
- "7701:7681"
volumes:
# ===== 项目源码 =====
- E:/wk-flux:/workspace
# ===== 开发工具 (JDK/Maven) =====
- D:/Java/jdk-musl-17:/opt/jdk-musl-17:ro
- D:/Java/maven-mvnd-3.9.14:/opt/maven-mvnd-3.9.14:ro
# ===== 代理工具 (Linux static binaries) =====
- E:/wk-oth/rust-work/dist-Linux/mysql-proxy:/usr/local/bin/mysql-proxy:ro
- E:/wk-oth/rust-work/dist-Linux/ssh-proxy:/usr/local/bin/ssh-proxy:ro
- E:/wk-oth/rust-work/dist-Linux/redis-proxy:/usr/local/bin/redis-proxy:ro
- E:/wk-oth/rust-work/dist-Linux/mongo-proxy:/usr/local/bin/mongo-proxy:ro
# ===== SSH 密钥 + 代理配置 (仅 Flux 相关) =====
- C:/Users/23780/.ssh/id_ed25519:/root/.ssh/id_ed25519:ro
- ../../dev-envs/flux/ssh-proxy.toml:/root/.dev-env/ssh-proxy.toml:ro
- ../../dev-envs/flux/mysql-proxy.toml:/root/.dev-env/mysql-proxy.toml:ro
- ../../dev-envs/flux/redis-proxy.toml:/root/.dev-env/redis-proxy.toml:ro
# ===== 项目级配置 (dev-envs) =====
- ../../dev-envs/flux/servers.yaml:/root/.dev-env/servers.yaml:ro
- ../../dev-envs/flux/databases.yaml:/root/.dev-env/databases.yaml:ro
- ../../dev-envs/flux/norms.md:/root/.dev-env/norms.md:ro
- ../../dev-envs/flux/docs:/root/.dev-env/docs:ro
- ../../dev-envs/flux/claude/CLAUDE.md:/root/.dev-env/claude/CLAUDE.md:ro
- ../../dev-envs/flux/claude/settings.local.json:/root/.dev-env/claude/settings.local.json:ro
# ===== 持久化 Home =====
- ../../data/home/flux-dev:/root
environment:
- TZ=Asia/Shanghai
- TERM=xterm-256color
- ROOT_PASSWORD=${ROOT_PASSWORD:-workpod123}
- TTYD_CREDENTIALS=${TTYD_CREDENTIALS:-jc:1234567}
- WORKPOD_PROJECT=flux
- JAVA_HOME=/opt/jdk-musl-17
- MAVEN_HOME=/opt/maven-mvnd-3.9.14
# === Claude Code (智谱 AI) ===
- ANTHROPIC_BASE_URL=https://open.bigmodel.cn/api/anthropic
- ANTHROPIC_API_KEY=${ANTHROPIC_AUTH_TOKEN}
- ANTHROPIC_DEFAULT_SONNET_MODEL=glm-5v-turbo
- ANTHROPIC_DEFAULT_OPUS_MODEL=glm-5.1
- ANTHROPIC_DEFAULT_HAIKU_MODEL=glm-4.5-air
deploy:
resources:
limits:
memory: 4G
reservations:
memory: 1G
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
healthcheck:
test: ["CMD-SHELL", "netstat -tlnp 2>/dev/null | grep -qE ':(22|7681)\\b' || exit 1"]
interval: 30s
timeout: 5s
start_period: 15s
retries: 3
working_dir: /workspace
tty: true
stdin_open: true
networks:
default:
external: true
name: workpod-flux-network
+10
View File
@@ -0,0 +1,10 @@
# ws-lab-x-dev - Lab 通用开发环境
FROM workpod-alpine:latest
LABEL org.opencontainers.image.title="ws-lab-x-dev" \
org.opencontainers.image.description="Lab 通用开发环境" \
org.opencontainers.image.version="1.0.0"
EXPOSE 22 7681
ENTRYPOINT ["/entrypoint.sh"]
+61
View File
@@ -0,0 +1,61 @@
services:
ws-lab-x-dev:
build:
context: ../../
dockerfile: instances/lab-x/Dockerfile
image: ws-lab-x-dev:latest
container_name: ws-lab-x-dev
hostname: ws-lab-x-dev
restart: unless-stopped
ports:
- "2202:22"
- "7702:7681"
volumes:
# ===== 项目源码 =====
- E:/wk-lab:/workspace
# ===== 持久化 Home =====
- ../../data/home/lab-x:/root
environment:
- TZ=Asia/Shanghai
- TERM=xterm-256color
- ROOT_PASSWORD=${ROOT_PASSWORD:-workpod123}
- TTYD_CREDENTIALS=${TTYD_CREDENTIALS:-jc:1234567}
- WORKPOD_PROJECT=lab-x
# === Claude Code (智谱 AI) ===
- ANTHROPIC_BASE_URL=https://open.bigmodel.cn/api/anthropic
- ANTHROPIC_API_KEY=${ANTHROPIC_AUTH_TOKEN}
- ANTHROPIC_DEFAULT_SONNET_MODEL=glm-5v-turbo
- ANTHROPIC_DEFAULT_OPUS_MODEL=glm-5.1
- ANTHROPIC_DEFAULT_HAIKU_MODEL=glm-4.5-air
deploy:
resources:
limits:
memory: 4G
reservations:
memory: 1G
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
healthcheck:
test: ["CMD-SHELL", "netstat -tlnp 2>/dev/null | grep -qE ':(22|7681)\\b' || exit 1"]
interval: 30s
timeout: 5s
start_period: 15s
retries: 3
working_dir: /workspace
tty: true
stdin_open: true
networks:
default:
name: workpod-lab-x-network
+46
View File
@@ -0,0 +1,46 @@
services:
workpod-test:
image: ae5a15cc0c94
container_name: workpod-test
hostname: workpod-test
restart: unless-stopped
ports:
- "2223:22"
- "7682:7681"
volumes:
- ../../data/workspace-test:/workspace
- ../../data/home/test:/root
environment:
- TZ=Asia/Shanghai
- TERM=xterm-256color
deploy:
resources:
limits:
memory: 4G
reservations:
memory: 1G
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
healthcheck:
test: ["CMD-SHELL", "netstat -tlnp 2>/dev/null | grep -qE ':(22|7681)\\b' || exit 1"]
interval: 30s
timeout: 5s
start_period: 10s
retries: 3
working_dir: /workspace
tty: true
stdin_open: true
networks:
default:
name: workpod-test-network