FastAPI应用Docker化CLI工具制作及部署步骤咨询
实现步骤及方案
一、核心思路
不需要额外编写cli.py,直接通过Makefile封装docker-compose命令即可满足需求,所有操作基于容器化环境执行,避免本地依赖问题。
二、具体操作步骤
1. 编写/完善docker-compose.yml
确保配置包含FastAPI服务和PostgreSQL服务,示例如下:
version: '3.8' services: db: image: postgres:15-alpine environment: POSTGRES_USER: your_user POSTGRES_PASSWORD: your_password POSTGRES_DB: your_db volumes: - postgres_data:/var/lib/postgresql/data/ ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U your_user -d your_db"] interval: 5s timeout: 5s retries: 5 web: build: . command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload volumes: - .:/app ports: - "8000:8000" depends_on: db: condition: service_healthy environment: DATABASE_URL: postgresql://your_user:your_password@db:5432/your_db volumes: postgres_data:
替换
your_user、your_password、your_db为实际配置,web服务的build指向你的Dockerfile所在目录。
2. 编写Makefile
在项目根目录创建Makefile,封装三个目标命令:
# 构建并运行整个项目 run: @echo "构建并启动所有服务..." docker-compose up --build -d @echo "服务已启动,访问 http://localhost:8000/docs 查看Swagger UI" # 初始化数据库(执行Alembic迁移) db-init: @echo "等待数据库就绪..." docker-compose exec db pg_isready -U your_user -d your_db -h localhost @echo "执行数据库迁移..." docker-compose exec web alembic upgrade head @echo "数据库初始化完成" # 显示帮助说明 help: @echo "可用命令:" @echo " make run - 构建并启动FastAPI和PostgreSQL服务" @echo " make db-init - 连接数据库并执行Alembic迁移" @echo " make help - 显示此帮助信息" .PHONY: run db-init help
替换
your_user、your_db为实际配置;.PHONY用来避免和同名文件冲突。
3. 验证命令有效性
- 执行
make run:构建镜像、启动容器并后台运行,之后可访问Swagger UI验证服务。 - 执行
make db-init:先检查数据库就绪状态,再进入web容器执行Alembic迁移。 - 执行
make help:显示所有可用命令的说明。
三、关于cli.py的说明
不需要单独编写cli.py:
- 所有操作都是容器级的命令调用,通过docker-compose直接在容器内执行Alembic、Uvicorn等命令即可。
- Makefile本身就是轻量级的CLI工具,足够满足你需要的三个命令需求,无需额外开发Python CLI。
四、补充说明
- 如果需要添加自定义数据初始化逻辑,可修改
db-init目标,在容器内执行对应的Python脚本:db-init: @echo "等待数据库就绪..." docker-compose exec db pg_isready -U your_user -d your_db -h localhost @echo "执行数据库迁移..." docker-compose exec web alembic upgrade head @echo "初始化初始数据..." docker-compose exec web python init_data.py @echo "数据库初始化完成" - 确保
Dockerfile已安装Alembic、Uvicorn等依赖,示例:FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
内容的提问来源于stack exchange,提问作者Анна Демидова
相关产品推荐
相关产品推荐

