v1.1.0: Alpine 轻量级 Docker 开发环境 + 敏感凭证清理
This commit is contained in:
@@ -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
|
||||
@@ -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}
|
||||
```
|
||||
@@ -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
|
||||
@@ -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"]
|
||||
@@ -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
|
||||
@@ -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"]
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user