You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者Анна Демидова

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:25:04