336 lines
8.0 KiB
Markdown
336 lines
8.0 KiB
Markdown
# 云开发容器
|
||
|
||
本目录包含 Hair Keeper 项目的云开发容器配置,提供完整的开发环境,无需在本地安装任何开发工具。
|
||
|
||
## 📦 容器内容
|
||
|
||
### 开发环境
|
||
- **Node.js**: 22.14.0
|
||
- **pnpm**: 最新版本
|
||
- **Python**: 3.12
|
||
- **Code Server**: 4.96.2 (基于 VS Code 的 Web IDE)
|
||
- **Git**: 版本控制工具
|
||
|
||
### Shell 环境
|
||
- **zsh**: 默认 Shell
|
||
- **oh-my-zsh**: zsh 配置框架
|
||
- **tmux**: 终端复用器
|
||
|
||
### 命令行工具
|
||
- **ttyd**: Web 终端(可选启动)
|
||
- **tree**: 目录树显示
|
||
- **pwgen**: 密码生成器
|
||
- **curl/wget**: 下载工具
|
||
- **ffmpeg**: 多媒体处理
|
||
- **mc**: MinIO 客户端
|
||
- **zip/unzip**: 压缩工具
|
||
- **net-tools**: 网络工具
|
||
- **ssh**: 远程连接
|
||
- **cmake**: 构建工具
|
||
- **telnet**: 网络调试
|
||
- **redis-tools**: Redis 命令行工具
|
||
- **ping**: 网络连通性测试
|
||
- **potrace**: 位图转矢量图
|
||
- **imagemagick**: 图像处理工具
|
||
- **uv**: 快速 Python 包管理器
|
||
|
||
### NPM 全局包
|
||
- `@anthropic-ai/claude-code`: Claude AI 代码助手
|
||
- `@musistudio/claude-code-router`: Claude 代码路由器
|
||
|
||
### VS Code 插件
|
||
- **vscode-pdf**: PDF 查看器
|
||
- **Markdown Preview Mermaid Support**: Mermaid 图表支持
|
||
- **Python**: Python 语言支持
|
||
- **Roo Code**: Roo 代码助手
|
||
- **ESLint**: JavaScript/TypeScript 代码检查
|
||
- **HTML Preview**: HTML 预览
|
||
- **Prisma**: Prisma ORM 支持
|
||
- **HTML CSS Support**: HTML/CSS 智能提示
|
||
- **Redis**: Redis 客户端
|
||
|
||
## 🚀 使用方法
|
||
|
||
### 方式一:使用 Docker Compose(推荐)
|
||
|
||
#### 使用默认密码启动
|
||
```zsh
|
||
cd .cloud-dev
|
||
docker compose up -d
|
||
```
|
||
|
||
#### 自定义密码启动
|
||
修改 `docker-compose.yml` 中的 `DEV_PASSWORD` 环境变量,或使用环境变量覆盖:
|
||
```zsh
|
||
DEV_PASSWORD=your_password docker compose up -d
|
||
```
|
||
|
||
停止容器:
|
||
```zsh
|
||
docker compose down
|
||
```
|
||
|
||
查看日志:
|
||
```zsh
|
||
docker compose logs -f
|
||
```
|
||
|
||
重新构建:
|
||
```zsh
|
||
docker compose up -d --build
|
||
```
|
||
|
||
### 方式二:使用 Docker 命令
|
||
|
||
#### 1. 构建镜像
|
||
|
||
```zsh
|
||
cd .cloud-dev
|
||
docker build -t hair-keeper-dev .
|
||
```
|
||
|
||
#### 2. 运行容器
|
||
|
||
使用默认密码:
|
||
```zsh
|
||
docker run -d \
|
||
--name hair-keeper-dev \
|
||
-p 2222:22 \
|
||
-p 8080:8080 \
|
||
-p 7681:7681 \
|
||
-p 3000:3000 \
|
||
-v $(pwd)/..:/workspace:cached \
|
||
-v hair-keeper-node-modules:/workspace/node_modules \
|
||
-v hair-keeper-pnpm-store:/root/.local/share/pnpm/store \
|
||
hair-keeper-dev
|
||
```
|
||
|
||
使用自定义密码:
|
||
```zsh
|
||
docker run -d \
|
||
--name hair-keeper-dev \
|
||
-e DEV_PASSWORD=your_password \
|
||
-p 2222:22 \
|
||
-p 8080:8080 \
|
||
-p 7681:7681 \
|
||
-p 3000:3000 \
|
||
-v $(pwd)/..:/workspace:cached \
|
||
-v hair-keeper-node-modules:/workspace/node_modules \
|
||
-v hair-keeper-pnpm-store:/root/.local/share/pnpm/store \
|
||
hair-keeper-dev
|
||
```
|
||
|
||
### 3. 访问开发环境
|
||
|
||
容器启动后,可以通过以下方式访问:
|
||
|
||
#### Code Server (Web IDE)
|
||
- **地址**: http://localhost:8080
|
||
- **默认密码**: `clouddev`(可通过 `DEV_PASSWORD` 环境变量自定义)
|
||
- 提供完整的 VS Code 开发体验
|
||
- 内置终端使用 zsh + oh-my-zsh
|
||
|
||
#### SSH 连接
|
||
```zsh
|
||
ssh root@localhost -p 2222
|
||
# 默认密码: clouddev(可通过 DEV_PASSWORD 环境变量自定义)
|
||
```
|
||
|
||
#### Next.js 开发服务器
|
||
- **地址**: http://localhost:3000
|
||
- 在容器内运行 `pnpm run dev` 启动
|
||
|
||
## 📝 端口映射
|
||
|
||
| 服务 | 容器端口 | 主机端口 | 说明 |
|
||
|------|---------|---------|------|
|
||
| SSH | 22 | 2222 | SSH 远程连接 |
|
||
| Code Server | 8080 | 8080 | Web IDE |
|
||
| Next.js | 3000 | 3000 | 开发服务器 |
|
||
|
||
**注意**: ttyd (Web 终端) 默认不启动,如需使用可在容器内手动运行:
|
||
```zsh
|
||
ttyd -p 7681 zsh
|
||
```
|
||
然后通过 http://localhost:7681 访问(需要在 docker run 或 docker-compose.yml 中映射 7681 端口)
|
||
|
||
## 🔧 常用操作
|
||
|
||
### 进入容器
|
||
```zsh
|
||
docker exec -it hair-keeper-dev zsh
|
||
```
|
||
|
||
### 安装项目依赖
|
||
```zsh
|
||
docker exec -it hair-keeper-dev pnpm install
|
||
```
|
||
|
||
### 启动开发服务器
|
||
```zsh
|
||
docker exec -it hair-keeper-dev pnpm run dev
|
||
```
|
||
|
||
### 查看容器日志
|
||
```zsh
|
||
docker logs -f hair-keeper-dev
|
||
```
|
||
|
||
### 查看 Code Server 日志
|
||
Code Server 的日志位于容器内的 `/root/.local/share/code-server/coder-logs/` 目录,包含两个日志文件:
|
||
|
||
```zsh
|
||
# 查看日志文件列表
|
||
docker exec -it hair-keeper-dev ls -lt /root/.local/share/code-server/coder-logs/
|
||
|
||
# 实时查看标准输出日志
|
||
docker exec -it hair-keeper-dev tail -f /root/.local/share/code-server/coder-logs/code-server-stdout.log
|
||
|
||
# 实时查看错误日志
|
||
docker exec -it hair-keeper-dev tail -f /root/.local/share/code-server/coder-logs/code-server-stderr.log
|
||
|
||
# 同时查看两个日志文件
|
||
docker exec -it hair-keeper-dev tail -f /root/.local/share/code-server/coder-logs/code-server-*.log
|
||
|
||
# 或者在容器内查看
|
||
docker exec -it hair-keeper-dev zsh
|
||
cd /root/.local/share/code-server/coder-logs/
|
||
tail -f code-server-stdout.log code-server-stderr.log
|
||
```
|
||
|
||
### 停止容器
|
||
```zsh
|
||
docker stop hair-keeper-dev
|
||
```
|
||
|
||
### 删除容器
|
||
```zsh
|
||
docker rm hair-keeper-dev
|
||
```
|
||
|
||
## 🎯 工作流程
|
||
|
||
1. **启动容器**: 运行上述 docker run 命令
|
||
2. **访问 Code Server**: 在浏览器打开 http://localhost:8080
|
||
3. **打开项目**: Code Server 会自动打开 /workspace 目录(映射到项目根目录)
|
||
4. **安装依赖**: 在终端运行 `pnpm install`
|
||
5. **启动开发**: 运行 `pnpm run dev`
|
||
6. **开始开发**: 在浏览器访问 http://localhost:3000
|
||
|
||
## 💡 提示
|
||
|
||
### Shell 环境
|
||
容器默认使用 **zsh** 作为 Shell,配置了 **oh-my-zsh** 框架:
|
||
- 主题:robbyrussell
|
||
- 插件:git, node, npm, docker, python
|
||
- 自动补全和语法高亮
|
||
- 更友好的命令行体验
|
||
|
||
### Python 包管理
|
||
推荐使用 **uv** 进行 Python 包管理,它比 pip 快得多:
|
||
```zsh
|
||
# 创建虚拟环境
|
||
uv venv
|
||
|
||
# 安装包
|
||
uv pip install package-name
|
||
|
||
# 从 requirements.txt 安装
|
||
uv pip install -r requirements.txt
|
||
```
|
||
|
||
### 数据持久化
|
||
- 项目代码通过 volume 映射,修改会实时同步到主机
|
||
- node_modules 建议使用 Docker volume 以提高性能
|
||
|
||
### 性能优化
|
||
如果需要更好的性能,可以使用命名卷:
|
||
|
||
```zsh
|
||
docker volume create hair-keeper-node-modules
|
||
|
||
docker run -d \
|
||
--name hair-keeper-dev \
|
||
-p 2222:22 \
|
||
-p 8080:8080 \
|
||
-p 7681:7681 \
|
||
-p 3000:3000 \
|
||
-v $(pwd)/..:/workspace \
|
||
-v hair-keeper-node-modules:/workspace/node_modules \
|
||
hair-keeper-dev
|
||
```
|
||
|
||
### 运行时修改密码
|
||
如果需要在容器运行时修改密码:
|
||
|
||
**方法一:重启容器并设置新密码**
|
||
```zsh
|
||
docker stop hair-keeper-dev
|
||
docker rm hair-keeper-dev
|
||
# 使用新密码重新启动
|
||
DEV_PASSWORD=new_password docker compose up -d
|
||
```
|
||
|
||
**方法二:在容器内手动修改**
|
||
```zsh
|
||
# SSH 密码
|
||
docker exec -it hair-keeper-dev passwd
|
||
|
||
# Code Server 密码
|
||
docker exec -it hair-keeper-dev zsh -c "echo 'password: new_password' >> /root/.config/code-server/config.yaml"
|
||
# 然后重启 code-server
|
||
```
|
||
|
||
## 🔐 密码配置
|
||
|
||
### 默认密码
|
||
容器默认密码为 `clouddev`,用于:
|
||
- SSH 登录(root 用户)
|
||
- Code Server Web IDE
|
||
|
||
### 自定义密码
|
||
通过环境变量 `DEV_PASSWORD` 设置自定义密码:
|
||
|
||
**Docker Compose 方式**:
|
||
编辑 `docker-compose.yml`:
|
||
```yaml
|
||
environment:
|
||
- DEV_PASSWORD=your_secure_password
|
||
```
|
||
|
||
**Docker 命令方式**:
|
||
```zsh
|
||
docker run -e DEV_PASSWORD=your_secure_password ...
|
||
```
|
||
|
||
### 安全建议
|
||
- ⚠️ 生产环境务必修改默认密码
|
||
- 建议使用 SSH 密钥认证替代密码
|
||
- 不要将容器直接暴露到公网
|
||
- 使用反向代理(如 Nginx)并配置 HTTPS
|
||
- 定期更换密码
|
||
|
||
## 📚 相关资源
|
||
|
||
- [Code Server 文档](https://coder.com/docs/code-server)
|
||
- [Docker 文档](https://docs.docker.com/)
|
||
- [tmux 快捷键](https://tmuxcheatsheet.com/)
|
||
|
||
## 🐛 故障排除
|
||
|
||
### 端口被占用
|
||
如果端口被占用,可以修改主机端口映射:
|
||
```zsh
|
||
-p 8081:8080 # 将 Code Server 映射到 8081
|
||
```
|
||
|
||
### 权限问题
|
||
如果遇到文件权限问题,确保容器内的用户有正确的权限:
|
||
```zsh
|
||
docker exec -it hair-keeper-dev chown -R root:root /workspace
|
||
```
|
||
|
||
### 容器无法启动
|
||
查看容器日志排查问题:
|
||
```zsh
|
||
docker logs hair-keeper-dev |