假设使用的FastAPI作者提供的镜像
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
设置工作目录
WORKDIR /app
将本地源码复制到容器内
COPY ./src .
安装依赖(如果使用poetry,则执行poetry install)
RUN pip install --no-cache-dir -r requirements.txt
暴露端口
EXPOSE 8000
设置启动命令
CMD [“uvicorn”, “main:app”, “–host”, “0.0.0.0”, “–port”, “8000”]
import logging
import os
定义日志文件的路径
log_dir = “/path/to/your/log/directory”
if not os.path.exists(log_dir):
os.makedirs(log_dir)
log_file = os.path.join(log_dir, “my_log_file.log”)
配置日志记录器
logging.basicConfig(
filename=log_file, # 日志文件名,如果没有这个参数,日志输出到console
level=logging.DEBUG, # 日志级别,建议生产环境等级调高一些,如WARNING或ERROR
format=‘%(asctime)s - %(name)s - %(levelname)s - %(message)s’ # 日志格式
)
在代码中记录日志
logger = logging.getLogger(name)
logger.debug(“This is a debug message”)
logger.info(“This is an info message”)
logger.warning(“This is a warning message”)
logger.error(“This is an error message”)
logger.critical(“This is a critical message”)
compose
version: ‘3.8’
services:
app:
build: .
ports:
- “8080:8000”
depends_on:
- db
networks:
- backend
nginx:
image: nginx:latest
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- static_volume:/app/static
ports:
- “80:80”
depends_on:
- app
networks:
- frontend
- backend
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: your_password
MYSQL_DATABASE: your_db_name
MYSQL_USER: your_user
MYSQL_PASSWORD: your_password
volumes:
- db_data:/var/lib/mysql
networks:
- backend
volumes:
db_data:
static_volume:
networks:
frontend:
backend:
在Windows系统上部署FastAPI、Nginx和MySQL的Docker化应用,你需要按照以下步骤进行操作:
- 准备工作: - 确保你的Windows系统上已经安装了Docker Desktop,并且Docker服务正在运行。 - 准备好项目结构,FastAPI应用程序代码应该与Dockerfile、docker-compose.yml文件位于同一目录或其子目录中。2. 创建Dockerfile(针对FastAPI): - 编写一个Dockerfile来构建FastAPI应用镜像。FastAPI作者提供的自动调整workers数量的镜像可以作为一个基础镜像使用,或者你也可以基于官方Python镜像自行配置Gunicorn或Uvicorn服务器。
Dockerfile# 假设使用的FastAPI作者提供的镜像FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9# 设置工作目录WORKDIR /app# 将本地源码复制到容器内COPY ./src .# 安装依赖(如果使用poetry,则执行poetry install)RUN pip install --no-cache-dir -r requirements.txt# 暴露端口EXPOSE 8000# 设置启动命令CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
3. 编写docker-compose.yml: - 创建一个docker-compose.yml文件以定义服务之间的关系和网络设置,包括FastAPI服务、Nginx代理服务以及MySQL数据库服务。yamlversion: '3.8'services: app: build: . ports: - "8080:8000" depends_on: - db networks: - backend nginx: image: nginx:latest volumes: - ./nginx/conf.d:/etc/nginx/conf.d - static_volume:/app/static ports: - "80:80" depends_on: - app networks: - frontend - backend db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: your_password MYSQL_DATABASE: your_db_name MYSQL_USER: your_user MYSQL_PASSWORD: your_password volumes: - db_data:/var/lib/mysql networks: - backendvolumes: db_data: static_volume:networks: frontend: backend:
4. 配置Nginx: - 在./nginx/conf.d
目录下创建一个default.conf
配置文件,用于代理请求到FastAPI应用。confserver { listen 80; location / { proxy_pass http://app:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}
5. 启动服务: - 在终端进入包含docker-compose.yml的目录并运行以下命令以构建和启动容器。bashdocker-compose up -d
6. 持久化数据: - 上述compose文件中的db_data卷将确保MySQL的数据在容器重启后得到保留。请根据实际情况调整上述示例中的镜像版本、环境变量、端口映射等设置。这样,你就能够在Windows系统上通过Docker Compose搭建起FastAPI + Nginx + MySQL的应用环境。
server {
listen 80;
location / {
proxy_pass http://app:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}