gongxiangp2/yedir/docs/docker-deployment-guide.md
chenpei d0dc94e36d feat: 将弹幕功能替换为AI聊天助手
新功能:
- 创建AI聊天助手组件(AIChatWidget)
- 支持文字+图片多模态对话
- 集成Gemini AI API
- 支持图片编辑和内容生成
- 实时对话历史管理
- 优雅的UI设计,支持黑夜模式

技术实现:
- 后端API代理Gemini API(/api/ai-chat)
- 支持最多5张图片上传
- 流式响应处理
- 对话历史管理
- Base64图片处理

配置:
- 在.env中添加Gemini API配置
- GEMINI_API_KEY
- GEMINI_API_BASE_URL
- GEMINI_MODEL

替换原弹幕功能,提供更强大的AI助手体验!
2025-10-27 17:45:37 +08:00

364 lines
7.0 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Docker 部署与更新指南
本文档提供了使用 Docker 部署和更新应用程序的详细步骤。
## 目录
- [前提条件](#前提条件)
- [初次部署](#初次部署)
- [更新应用](#更新应用)
- [常用操作](#常用操作)
- [故障排除](#故障排除)
- [最佳实践](#最佳实践)
## 前提条件
在开始部署之前,请确保服务器上已安装以下软件:
- Docker (推荐 20.10.x 或更高版本)
- Git (用于获取代码)
可以使用以下命令检查 Docker 是否已正确安装:
```bash
docker --version
```
## 初次部署
### 1. 获取代码
```bash
# 克隆代码仓库
git clone <repository-url>
cd xiaogongju
```
### 2. 配置环境变量
```bash
# 复制环境变量示例文件
cp .env.example .env
# 编辑环境变量文件,填入正确的配置
nano .env
```
确保以下关键环境变量已正确设置:
- `PORT`: 应用程序监听端口 (默认: 3225)
- `NODE_ENV`: 环境 (development/production)
- `MONGODB_URI`: MongoDB 连接字符串
- 其他应用特定的环境变量
### 3. 创建 Dockerfile
创建一个名为 `Dockerfile` 的文件,内容如下:
```dockerfile
FROM node:14-alpine
WORKDIR /app
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 安装依赖
RUN npm install
# 创建启动脚本
COPY start.sh ./
RUN chmod +x start.sh
# 复制所有文件
COPY . .
# 设置环境变量
ENV PORT=3225
ENV NODE_ENV=production
ENV HOST=0.0.0.0
ENV DEBUG=*
# 暴露端口
EXPOSE 3225
# 启动命令
CMD ["./start.sh"]
```
### 4. 创建启动脚本
创建一个名为 `start.sh` 的文件,内容如下:
```bash
#!/bin/sh
echo "Starting application..."
echo "Node version: $(node -v)"
echo "NPM version: $(npm -v)"
echo "Directory listing:"
ls -la
echo "Environment variables:"
env | grep -v PASSWORD | grep -v SECRET
echo "Starting server..."
node server/server.js
```
添加执行权限:
```bash
chmod +x start.sh
```
### 5. 构建 Docker 镜像
```bash
docker build -t xiaogongju-app .
```
### 6. 运行 Docker 容器
```bash
docker run -d -p 3225:3225 --name xiaogongju --restart=always --env-file .env xiaogongju-app
```
### 7. 验证部署
```bash
# 检查容器是否运行
docker ps | grep xiaogongju
# 查看容器日志
docker logs xiaogongju
# 测试应用是否响应
curl http://localhost:3225
```
## 更新应用
当需要更新应用程序时,请按照以下步骤操作:
### 1. 获取最新代码
```bash
git pull origin main # 或者你使用的分支名
```
### 2. 停止并删除现有容器
```bash
docker stop xiaogongju
docker rm xiaogongju
```
### 3. 重新构建镜像
```bash
docker build -t xiaogongju-app .
```
### 4. 运行新容器
```bash
docker run -d -p 3225:3225 --name xiaogongju --restart=always --env-file .env xiaogongju-app
```
### 5. 验证更新
```bash
docker logs xiaogongju
curl http://localhost:3225
```
## 常用操作
### 管理脚本
为了简化容器管理,可以创建以下管理脚本 `manage-docker.sh`:
```bash
#!/bin/bash
case "$1" in
start)
docker start xiaogongju
;;
stop)
docker stop xiaogongju
;;
restart)
docker restart xiaogongju
;;
logs)
docker logs -f xiaogongju
;;
status)
docker ps | grep xiaogongju
;;
shell)
docker exec -it xiaogongju /bin/sh
;;
rebuild)
docker stop xiaogongju || true
docker rm xiaogongju || true
docker build -t xiaogongju-app .
docker run -d -p 3225:3225 --name xiaogongju --restart=always --env-file .env xiaogongju-app
;;
*)
echo "Usage: $0 {start|stop|restart|logs|status|shell|rebuild}"
exit 1
;;
esac
```
添加执行权限:
```bash
chmod +x manage-docker.sh
```
使用方法:
```bash
./manage-docker.sh start # 启动容器
./manage-docker.sh stop # 停止容器
./manage-docker.sh restart # 重启容器
./manage-docker.sh logs # 查看日志
./manage-docker.sh status # 查看状态
./manage-docker.sh shell # 进入容器shell
./manage-docker.sh rebuild # 重建并运行容器
```
### 查看容器详细信息
```bash
docker inspect xiaogongju
```
### 查看容器资源使用情况
```bash
docker stats xiaogongju
```
## 故障排除
### 容器无法启动
1. 检查日志:
```bash
docker logs xiaogongju
```
2. 检查环境变量:
```bash
docker exec -it xiaogongju /bin/sh -c "env"
```
3. 检查端口映射:
```bash
docker port xiaogongju
```
4. 检查网络连接:
```bash
docker exec -it xiaogongju /bin/sh -c "wget -O- http://localhost:3225"
```
### .env文件权限问题
如果在容器日志中看到类似以下错误:
```
更新.env文件失败: Error: EACCES: permission denied, open '/app/.env'
```
这是由于容器内部无法写入.env文件导致的。解决方法:
1. 确保.env文件在容器内有正确的权限:
```bash
docker exec -it xiaogongju chmod 666 /app/.env
```
2. 如果使用docker-compose,确保在docker-compose.yml中正确挂载了.env文件:
```yaml
volumes:
- ./.env:/app/.env
```
3. 如果问题仍然存在,可以修改应用代码,使用环境变量而非.env文件进行配置更新。
### MongoDB 连接问题
1. 测试 MongoDB 连接:
```bash
# 创建测试脚本
cat > test-mongo.js << 'EOF'
const mongoose = require('mongoose');
const uri = process.env.MONGODB_URI;
console.log('Attempting to connect to MongoDB...');
console.log(`Connection string: ${uri.replace(/\/\/([^:]+):([^@]+)@/, '//***:***@')}`);
mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => {
console.log('MongoDB connection successful!');
mongoose.connection.close();
})
.catch(err => {
console.error('MongoDB connection error:', err);
});
EOF
# 在容器中运行测试脚本
docker cp test-mongo.js xiaogongju:/app/
docker exec -it xiaogongju node /app/test-mongo.js
```
2. 确保 MongoDB Atlas IP 白名单已配置(如果使用 MongoDB Atlas)
### 容器频繁重启
1. 检查应用程序错误:
```bash
docker logs xiaogongju
```
2. 检查资源限制:
```bash
docker stats xiaogongju
```
3. 尝试以交互方式运行容器:
```bash
docker stop xiaogongju
docker rm xiaogongju
docker run -it --rm -p 3225:3225 --env-file .env xiaogongju-app /bin/sh
# 在容器内手动启动应用
node server/server.js
```
## 最佳实践
1. **定期备份**:
- 定期备份 MongoDB 数据
- 保存 Dockerfile 和环境配置
2. **监控**:
- 设置容器监控
- 配置日志轮转
3. **安全**:
- 不要在 Dockerfile 中硬编码敏感信息
- 使用 `.env` 文件管理环境变量
- 定期更新基础镜像
4. **CI/CD**:
- 考虑设置自动化部署流程
- 使用 Docker Compose 或 Kubernetes 进行更复杂的部署
5. **版本控制**:
- 为 Docker 镜像添加版本标签
- 记录每次部署的版本和更改
---
如有任何问题或需要进一步的帮助,请联系项目维护人员。