Files
Podcast-Generator/DOCKER_USAGE.md
hex2077 11de31a78b docs(DOCKER_USAGE): 修正文档中配置文件的顺序和说明
调整配置文件的顺序以匹配实际使用流程,并添加关于替换.env文件的明确说明
2025-08-27 14:11:12 +08:00

136 lines
5.8 KiB
Markdown
Raw Permalink 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 使用指南
本指南将介绍如何使用 `Dockerfile-Web``Dockerfile-Server` 来构建 Docker 镜像并运行整个应用程序,以及如何使用 Docker Compose 简化部署流程。
## 前提条件
* 已安装 Docker 和 Docker Compose。
## 方法一:分别构建和运行 Docker 镜像
在项目的根目录下执行以下命令来构建 Docker 镜像。
### 构建 Docker 镜像
#### 构建 Web 应用镜像
```bash
docker build -t podcast-web -f Dockerfile-Web .
```
* `-t podcast-web`:为镜像指定一个名称和标签。
* `-f Dockerfile-Web`:指定 Web 应用的 Dockerfile 路径。
* `.`:指定构建上下文的路径,这里是项目的根目录。
#### 构建 Server 应用镜像
```bash
docker build -t podcast-server -f Dockerfile-Server .
```
* `-t podcast-server`:为镜像指定一个名称和标签。
* `-f Dockerfile-Server`:指定 Server 应用的 Dockerfile 路径。
* `.`:指定构建上下文的路径,这里是项目的根目录。
构建过程可能需要一些时间,具体取决于您的网络速度和系统性能。
### 运行 Docker 容器
#### 运行 Web 应用容器
```bash
docker run -d -p 3200:3000 -v /opt/audio:/app/server/output -v /opt/sqlite.db:/app/web/sqlite.db -v /opt/audio/config:/app/config --restart always --name podcast-web podcast-web
```
#### 命令说明:
* `-d`在分离模式detached mode下运行容器即在后台运行。
* `-p 3200:3000`:将宿主机的 3200 端口映射到容器的 3000 端口。Next.js 应用程序在容器内部的 3000 端口上运行。
* `-v /opt/audio:/app/server/output`:将宿主机的 `/opt/audio` 目录挂载到容器内的 `/app/server/output` 目录,用于音频文件的持久化存储。
* `-v /opt/sqlite.db:/app/web/sqlite.db`:将宿主机的 `/opt/sqlite.db` 文件挂载到容器内的 `/app/web/sqlite.db` 文件,用于数据库的持久化存储。
* `-v /opt/audio/config:/app/config`:将宿主机的 `/opt/audio/config` 目录挂载到容器内的 `/app/config` 目录,用于配置文件的持久化存储。
* `--restart always`:设置容器的重启策略,确保容器在意外停止或系统重启后能自动重启。
* `--name podcast-web`:为运行中的容器指定一个名称,方便后续管理。
* `podcast-web`:指定要运行的 Docker 镜像名称。
#### 运行 Server 应用容器
```bash
docker run -d -p 3100:8000 -v /opt/audio:/app/server/output -v /opt/sqlite.db:/app/web/sqlite.db --restart always --name podcast-server podcast-server
```
或者,如果您的应用程序需要配置环境变量(例如 `PODCAST_API_SECRET_KEY`),您可以使用 `-e` 参数进行设置:
```bash
docker run -d -p 3100:8000 -v /opt/audio:/app/server/output --restart always --name podcast-server -e PODCAST_API_SECRET_KEY="your-production-api-secret-key" podcast-server
```
#### 命令说明:
* `-d`在分离模式detached mode下运行容器即在后台运行。
* `-p 3100:8000`:将宿主机的 3100 端口映射到容器的 8000 端口。Server 应用程序在容器内部的 8000 端口上运行。
* `-v /opt/audio:/app/server/output`:将宿主机的 `/opt/audio` 目录挂载到容器内的 `/app/server/output` 目录,用于音频文件的持久化存储。
* `--restart always`:设置容器的重启策略,确保容器在意外停止或系统重启后能自动重启。
* `--name podcast-server`:为运行中的容器指定一个名称,方便后续管理。
* `-e PODCAST_API_SECRET_KEY="your-production-api-secret-key"`:设置环境变量,将 `"your-production-api-secret-key"` 替换为您的实际密钥。
* `podcast-server`:指定要运行的 Docker 镜像名称。
## 方法二:使用 Docker Compose推荐
项目提供了 `docker-compose.yml` 文件,可以更方便地管理和部署整个应用。
Docker Compose 文件中定义了以下挂载点:
* `/opt/audio/output:/app/server/output`:将宿主机的 `/opt/audio/output` 目录挂载到容器内的 `/app/server/output` 目录,用于音频文件的持久化存储。
* `/opt/audio/sqlite.db:/app/web/sqlite.db`:将宿主机的 `/opt/audio/sqlite.db` 文件挂载到容器内的 `/app/web/sqlite.db` 文件,用于数据库的持久化存储。
* `/opt/audio/config:/app/config`:将宿主机的 `/opt/audio/config` 目录挂载到容器内的 `/app/config` 目录,用于配置文件的持久化存储。
### 启动服务
在项目根目录下执行以下命令启动所有服务:
```bash
docker-compose up -d
```
* `-d`:在分离模式下运行容器,即在后台运行。
### 停止服务
```bash
docker-compose down
```
### 查看服务状态
```bash
docker-compose ps
```
### 查看服务日志
```bash
# 查看所有服务日志
docker-compose logs
# 查看特定服务日志
docker-compose logs web
docker-compose logs server
```
## 验证应用程序是否运行
容器启动后,您可以通过以下地址来验证应用程序是否正常运行:
* Web 应用: `http://localhost:3200`
* Server 应用: `http://localhost:3100`
## 注意事项
1. 请确保宿主机上的端口 3100 和 3200 未被其他应用程序占用。
2. 请确保宿主机上的 `/opt/audio` 目录存在且具有适当的读写权限,或者根据实际情况修改挂载路径。
3. 请确保宿主机上的 `/opt/sqlite.db` 文件存在且具有适当的读写权限。
4. 请确保宿主机上的 `/opt/audio/config` 目录存在且包含正确的配置文件。
5. docker-compose up -d 执行前,请使用自己配置的 .env 文件替换web目录下的 .env 文件。
6. 在生产环境中,请使用安全的密钥替换示例中的 `PODCAST_API_SECRET_KEY`
7. 使用 Docker Compose 时服务间通过服务名称进行通信Web 应用通过 `http://server:8000` 访问 Server 应用。