feat: 添加Docker支持,包含Dockerfile、docker-compose.yml、.dockerignore和部署文档
This commit is contained in:
parent
4ac8a5f063
commit
69468cea00
30
.dockerignore
Normal file
30
.dockerignore
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
**/.classpath
|
||||||
|
**/.dockerignore
|
||||||
|
**/.env
|
||||||
|
**/.git
|
||||||
|
**/.gitignore
|
||||||
|
**/.project
|
||||||
|
**/.settings
|
||||||
|
**/.toolstarget
|
||||||
|
**/.vs
|
||||||
|
**/.vscode
|
||||||
|
**/*.*proj.user
|
||||||
|
**/*.dbmdl
|
||||||
|
**/*.jfm
|
||||||
|
**/bin
|
||||||
|
**/charts
|
||||||
|
**/docker-compose*
|
||||||
|
**/Dockerfile*
|
||||||
|
**/node_modules
|
||||||
|
**/npm-debug.log
|
||||||
|
**/obj
|
||||||
|
**/secrets.dev.yaml
|
||||||
|
**/values.dev.yaml
|
||||||
|
*.md
|
||||||
|
.git
|
||||||
|
.vs
|
||||||
|
.vscode
|
||||||
|
bin
|
||||||
|
obj
|
||||||
|
logs
|
||||||
|
*.user
|
||||||
72
DEPLOY.md
Normal file
72
DEPLOY.md
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# Docker 部署说明
|
||||||
|
|
||||||
|
## 快速启动
|
||||||
|
|
||||||
|
### 1. 直接使用 docker-compose 启动
|
||||||
|
```bash
|
||||||
|
# 启动服务(需要提前配置好外部 MySQL 连接)
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
docker-compose logs -f api
|
||||||
|
|
||||||
|
# 停止服务
|
||||||
|
docker-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 单独构建镜像
|
||||||
|
```bash
|
||||||
|
# 构建镜像
|
||||||
|
docker build -t assetmanager-api:latest .
|
||||||
|
|
||||||
|
# 运行容器(需要自行配置 MySQL 连接)
|
||||||
|
docker run -d -p 7040:8080 \
|
||||||
|
-e ConnectionStrings__Default="server=你的MySQL地址;Database=assetmanager;Uid=root;Pwd=你的密码;CharSet=utf8mb4;" \
|
||||||
|
-e Jwt__SecretKey="你的自定义密钥" \
|
||||||
|
assetmanager-api:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
## 环境变量说明
|
||||||
|
|
||||||
|
| 环境变量 | 说明 | 默认值 |
|
||||||
|
|---------|------|--------|
|
||||||
|
| `ASPNETCORE_ENVIRONMENT` | 运行环境 | `Production` |
|
||||||
|
| `ConnectionStrings__Default` | MySQL 连接字符串 | - |
|
||||||
|
| `Jwt__SecretKey` | JWT 签名密钥 | 开发环境默认值 |
|
||||||
|
| `Jwt__Issuer` | JWT 签发者 | `AssetManager` |
|
||||||
|
| `Jwt__Audience` | JWT 受众 | `AssetManager` |
|
||||||
|
| `Wechat__AppId` | 微信小程序 AppId | 测试默认值 |
|
||||||
|
| `Wechat__AppSecret` | 微信小程序 AppSecret | 测试默认值 |
|
||||||
|
| `Tiingo__ApiKey` | Tiingo 股票数据 API Key | 测试默认值 |
|
||||||
|
| `TZ` | 时区 | `Asia/Shanghai` |
|
||||||
|
|
||||||
|
## 端口说明
|
||||||
|
|
||||||
|
| 端口 | 服务 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| `7040` | 后端 API | HTTP 接口 |
|
||||||
|
|
||||||
|
## 数据持久化
|
||||||
|
|
||||||
|
- 应用日志:存储在 `logs` 卷中
|
||||||
|
|
||||||
|
## 生产环境注意事项
|
||||||
|
|
||||||
|
1. **必须修改默认密码和密钥**:
|
||||||
|
- MySQL 连接密码
|
||||||
|
- JWT 签名密钥 (`Jwt__SecretKey`)
|
||||||
|
- 微信 AppId/AppSecret
|
||||||
|
- Tiingo API Key
|
||||||
|
|
||||||
|
2. 建议使用反向代理(Nginx/Caddy)提供 HTTPS 访问
|
||||||
|
|
||||||
|
## 常见问题
|
||||||
|
|
||||||
|
### 启动后 API 访问 500
|
||||||
|
检查 MySQL 连接是否正常,确认连接字符串配置正确。
|
||||||
|
|
||||||
|
### 微信登录失败
|
||||||
|
检查 `Wechat__AppId` 和 `Wechat__AppSecret` 是否配置正确。
|
||||||
|
|
||||||
|
### 市场数据获取失败
|
||||||
|
检查 `Tiingo__ApiKey` 是否有效,网络是否能访问 Tiingo API。
|
||||||
45
Dockerfile
Normal file
45
Dockerfile
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# 使用 .NET 8 SDK 作为构建镜像
|
||||||
|
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
|
# 复制解决方案文件和项目文件
|
||||||
|
COPY ["AssetManager.sln", "."]
|
||||||
|
COPY ["AssetManager.API/AssetManager.API.csproj", "AssetManager.API/"]
|
||||||
|
COPY ["AssetManager.Services/AssetManager.Services.csproj", "AssetManager.Services/"]
|
||||||
|
COPY ["AssetManager.Infrastructure/AssetManager.Infrastructure.csproj", "AssetManager.Infrastructure/"]
|
||||||
|
COPY ["AssetManager.Models/AssetManager.Models.csproj", "AssetManager.Models/"]
|
||||||
|
COPY ["AssetManager.Data/AssetManager.Data.csproj", "AssetManager.Data/"]
|
||||||
|
|
||||||
|
# 还原 NuGet 包
|
||||||
|
RUN dotnet restore "AssetManager.API/AssetManager.API.csproj"
|
||||||
|
|
||||||
|
# 复制所有文件并构建
|
||||||
|
COPY . .
|
||||||
|
WORKDIR "/src/AssetManager.API"
|
||||||
|
RUN dotnet build "AssetManager.API.csproj" -c Release -o /app/build
|
||||||
|
|
||||||
|
# 发布应用
|
||||||
|
FROM build AS publish
|
||||||
|
RUN dotnet publish "AssetManager.API.csproj" -c Release -o /app/publish /p:UseAppHost=false
|
||||||
|
|
||||||
|
# 构建最终运行时镜像
|
||||||
|
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
|
||||||
|
WORKDIR /app
|
||||||
|
EXPOSE 8080
|
||||||
|
EXPOSE 8081
|
||||||
|
|
||||||
|
# 设置时区为 Asia/Shanghai
|
||||||
|
ENV TZ=Asia/Shanghai
|
||||||
|
RUN apt-get update && apt-get install -y tzdata && ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||||
|
|
||||||
|
# 从发布阶段复制文件
|
||||||
|
FROM base AS final
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --from=publish /app/publish .
|
||||||
|
|
||||||
|
# 配置环境变量(可以在运行时覆盖)
|
||||||
|
ENV ASPNETCORE_ENVIRONMENT=Production
|
||||||
|
ENV ASPNETCORE_URLS=http://+:8080
|
||||||
|
|
||||||
|
# 启动应用
|
||||||
|
ENTRYPOINT ["dotnet", "AssetManager.API.dll"]
|
||||||
30
docker-compose.yml
Normal file
30
docker-compose.yml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
# 后端 API 服务
|
||||||
|
api:
|
||||||
|
build: .
|
||||||
|
container_name: assetmanager-api
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "7040:8080"
|
||||||
|
environment:
|
||||||
|
- ASPNETCORE_ENVIRONMENT=Production
|
||||||
|
# 外部 MySQL 连接配置(自行修改)
|
||||||
|
- ConnectionStrings__Default=server=你的MySQL地址;Database=assetmanager;Uid=你的用户名;Pwd=你的密码;CharSet=utf8mb4;Allow User Variables=true;
|
||||||
|
# JWT 配置
|
||||||
|
- Jwt__SecretKey=your-strong-secret-key-here-change-in-production
|
||||||
|
- Jwt__Issuer=AssetManager
|
||||||
|
- Jwt__Audience=AssetManager
|
||||||
|
# 微信配置
|
||||||
|
- Wechat__AppId=wx245f0f3ebcfcf5a7
|
||||||
|
- Wechat__AppSecret=809c740129bc8b434177ce12ef292dd0
|
||||||
|
# Tiingo API 配置
|
||||||
|
- Tiingo__ApiKey=bd00fee76d3012b047473078904001b33322cb46
|
||||||
|
# 时区
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
volumes:
|
||||||
|
- logs:/app/logs
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
logs:
|
||||||
Loading…
Reference in New Issue
Block a user