本项目使用单个 Dockerfile 实现前后端一体化部署。
# 构建镜像(默认名称和标签)
./docker/build.sh
# 或指定镜像名称和标签
./docker/build.sh myfastapi v1.0.0
# 运行容器
docker run -d -p 8000:8000 --env-file .env --name myfastapi myfastapi:latest
# 构建并启动
docker-compose up -d --build
# 或使用生产配置
docker-compose -f compose.prod.yaml up -d --build
# 构建镜像
docker build -f docker/dockerfile -t myfastapi:latest .
# 运行容器
docker run -d -p 8000:8000 --env-file .env --name myfastapi myfastapi:latest
前端构建阶段:
node:22-alpine 镜像npm run build 构建前端frontend/dist/ 目录后端构建阶段:
python:3.14.4-slim 镜像/app
├── api/ # FastAPI 后端代码
│ ├── index.py # 主应用(已配置静态文件服务)
│ └── ...
├── frontend/
│ └── dist/ # 前端构建产物
│ ├── index.html
│ ├── assets/
│ └── ...
└── requirements.txt
在 .env 文件中设置:
# 重要:设置为 production 才会服务前端静态文件
ENVIRONMENT=production
# 数据库配置
DATABASE_TYPE=mysql
DATABASE_HOST=postgresql
DATABASE_PORT=5432
DATABASE_USER=postgres
DATABASE_PASSWORD=your-password
DATABASE_NAME=myfastapi
# API 配置
API_V1_STR=/api/v1
SECRET_KEY=your-secret-key
重要:ENVIRONMENT=production 必须设置,否则前端静态文件不会被服务。
docker ps | grep myfastapi
docker logs myfastapi
docker exec myfastapi ls -la /app/frontend/dist/
A: 检查以下几点:
ENVIRONMENT=production 已设置frontend/dist/ 目录是否存在docker logs myfastapiA:
frontend/package.json 是否正确frontend/ 目录下有所有必要的文件A: 重新构建镜像:
# 停止容器
docker stop myfastapi
docker rm myfastapi
# 重新构建
docker build -f docker/dockerfile -t myfastapi:latest .
# 启动新容器
docker run -d -p 8000:8000 --env-file .env --name myfastapi myfastapi:latest
Content type
Image
Digest
sha256:b63b12331…
Size
154.3 MB
Last updated
about 2 months ago
docker pull 5200710/fastapi