From df85dd8559935b73dec8948814db8d5706bb2be6 Mon Sep 17 00:00:00 2001 From: zhangtao <9480807882@qq.com> Date: Sat, 17 May 2025 04:58:28 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84Dockerfile?= =?UTF-8?q?=E5=92=8Cdocker-compose=E9=85=8D=E7=BD=AE=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将原有的Dockerfile和docker-compose配置文件从devops目录移动到项目根目录,并更新相关路径配置。删除冗余的devops目录及其内容,简化项目结构,提高可维护性。 --- .../backend/Dockerfile => Dockerfile.backend | 2 +- .../Dockerfile => Dockerfile.frontend | 2 +- devops/README.md | 272 ------------------ ...docker-compose.yaml => docker-compose.yaml | 19 +- devops/frontend/nginx.conf => nginx.conf | 4 +- 5 files changed, 11 insertions(+), 288 deletions(-) rename devops/backend/Dockerfile => Dockerfile.backend (96%) rename devops/frontend/Dockerfile => Dockerfile.frontend (90%) delete mode 100644 devops/README.md rename devops/docker-compose.yaml => docker-compose.yaml (82%) rename devops/frontend/nginx.conf => nginx.conf (92%) diff --git a/devops/backend/Dockerfile b/Dockerfile.backend similarity index 96% rename from devops/backend/Dockerfile rename to Dockerfile.backend index 18d5079b..d97b05db 100644 --- a/devops/backend/Dockerfile +++ b/Dockerfile.backend @@ -11,7 +11,7 @@ ENV TZ Asia/Shanghai WORKDIR /home # 将当前主机目录全部文件复制至容器工作目录 -COPY ../backend . +COPY ./backend . # 安装依赖 RUN pip install --no-cache-dir -r ./requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple diff --git a/devops/frontend/Dockerfile b/Dockerfile.frontend similarity index 90% rename from devops/frontend/Dockerfile rename to Dockerfile.frontend index ef8b0bc2..41cd418a 100644 --- a/devops/frontend/Dockerfile +++ b/Dockerfile.frontend @@ -11,7 +11,7 @@ ENV TZ Asia/Shanghai WORKDIR /home # 将当前主机目录全部文件复制至容器工作目录 -COPY ./dist /usr/share/nginx/html +COPY ./frontend/dist /usr/share/nginx/html # 用本地的nginx配置文件覆盖镜像的Nginx配置 COPY ./nginx.conf /etc/nginx/nginx.conf diff --git a/devops/README.md b/devops/README.md deleted file mode 100644 index d992b5d0..00000000 --- a/devops/README.md +++ /dev/null @@ -1,272 +0,0 @@ -# 部署文档 - -## 工具介绍 - -### 1. Docker - -```dockerfile -# 使用官方的 Python 3.10 镜像作为基础镜像 -FROM python:3.10 -# 使用 LABEL 替代 MAINTAINER -LABEL maintainer="管理员" -# 设置 python 环境变量 -ENV PYTHONUNBUFFERED 1 -ENV PYTHONDONTWRITEBYTECODE 1 -# 设置时区 -ENV TZ Asia/Shanghai - -# 升级pip版本 -# RUN python -m pip install --upgrade pip - -# 创建容器工作目录 -RUN mkdir -p /opt/fastapi_project -# 设置容器内工作目录 -WORKDIR /opt/fastapi_project -# 将当前主机目录全部文件复制至容器工作目录 -COPY ./requirements.txt /code/requirements.txt -# 安装依赖 -RUN pip install --no-cache-dir --upgrade -r /opt/fastapiproject/backend/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple - -# 部署 nginx -RUN apt-get update && apt-get install -y nginx -RUN rm /etc/nginx/sites-enabled/default -COPY nginx.conf /etc/nginx/sites-available/ -RUN ln -s /etc/nginx/sites-available/nginx.conf /etc/nginx/sites-enabled/ -RUN echo "daemon off;" >> /etc/nginx/nginx.conf - -# # 部署mysql -# RUN apt-get install -y mysql-server - -# # 部署redis -# RUN apt-get install -y redis-server - -# # 部署mongo -# RUN apt-get install -y mongodb - - -#CMD 运行以下命令,daemon off后台运行,否则启动完就自动关闭 -CMD ["nginx", "-g", "daemon off;"] - -CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"] -# 暴露端口 -EXPOSE 8000 -# python main.py run 或者 uvicorn main:create_app --host 0.0.0.0 --port 8000 --workers 4 -ENTRYPOINT ["uvicorn", "backend.main:create_app", "--host", "0.0.0.0", "--port", "8000", "--workers", 4] -# ENTRYPOINT ["gunicorn", "-c", "gunicorn.py", "main:create_app"] -``` - -### 2. Docker-Compose - -``` yaml -version: "3.10.11" - -# 应用服务 -services: - # 应用服务 - fastapi_getway: - # 容器名称 - container_name: fastapi - # 镜像名称 - image: fastapi - env_file: .env - networks: - - db_network - - web_network - # 构建镜像 - build: - context: ./ - dockerfile: Dockerfile - #build: . - # 将容器运行在特权模式下,意味着容器内的进程将具 - # 有访问宿主机的权限,包括文件系统、设备和系统功能等 - privileged: true - # 指定容器中运行的用户 - user: root - # 启动策略为始终重启 - restart: always - # 设置网络模式为host模式 - network_mode: host - # 端口映射 - ports: - - 8020:8020 - # 文件挂载 - volumes: - - ./:/data/apps - - ./uploads:/data/apps/uploads - # 执行命令 - command: python app.py runserver 0.0.0.0:8020 --noreload - # 日志配置 - logging: - driver: "json-file" - options: - max-size: "500m" - max-file: "10" - # nginx服务 - nginx: - container_name: nginx - restart: always - image: "nginx:latest" - ports: - - "5000:5000" - volumes: - - ./nginx:/etc/nginx/conf.d - networks: - - web_network - depends_on: - - flask_api - - # 中间件服务 - mysql: - container_name: mysql - image: mysql:latest - restart: always - ports: - - "3306:3306" - # 数据卷挂载 - -networks: - db_network: - driver: bridge - web_network: - driver: bridge - -``` - -### 3. Nginx - -```nginx -########### 每个指令必须有分号结束。################# -user administrator administrators; # 配置用户或组,默认为nobody nobody -worker_processes 2; # 允许生成的进程数,默认为1 -pid /nginx/pid/nginx.pid; # 指定 Nginx 进程运行文件存放地址 -error_log log/error.log debug; # 制定日志路径,级别。这个设置可以放入全局块、http块、server块,级别依次为:debug|info|notice|warn|error|crit|alert|emerg - -events { - accept_mutex on; # 设置网络连接序列化,防止惊群现象发生,默认为on - multi_accept on; # 设置一个进程是否同时接受多个网络连接,默认为off - use epoll; # 事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport - worker_connections 1024; # 最大连接数,默认为512 -} - -http { - include mime.types; # 文件扩展名与文件类型映射表 - default_type application/octet-stream; # 默认文件类型,默认为text/plain - - # 取消服务日志 - access_log off; - - # 自定义日志格式 - log_format access '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; - - # 启用访问日志 - access_log log/access.log access; # combined为日志格式的默认值 - - sendfile on; # 允许sendfile方式传输文件,默认为off,可以在http块、server块、location块 - sendfile_max_chunk 100k; # 每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限 - keepalive_timeout 65; # 连接超时时间,默认为75秒,可以在http、server、location块 - - # 定义上游服务器 - upstream mysvr { - server 127.0.0.1:7878; - server 192.168.10.121:3333 backup; # 热备 - } - - # 错误页 - error_page 404 https://www.baidu.com; - - # 定义一个 server 块 - server { - # 单连接请求上限次数 - keepalive_requests 120; - - # 监听端口 - listen 4545; - - # 监听地址 - server_name 127.0.0.1; - - # 前端代理 - location / { - proxy_set_header Host $host; - root /web/front/; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header REMOTE-HOST $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - try_files $uri $uri/ /index.html; - index /index.html; - } - - # 后端代理 - location /api/ { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header REMOTE-HOST $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - add_header Access-Control-Allow-Methods *; - add_header Access-Control-Allow-Origin $http_origin; - proxy_pass http://127.0.0.1:8010/; - } - } -} -``` - -### 4. Shell - -```shell -#!/bin/bash - -# 检查是否已经处于虚拟环境中 -if [[ ":$VIRTUAL_ENV:" != *":/opt/model-ai/backend/venv:"* ]]; then - # 切换到目标目录 - cd /opt/ || { echo "切换 /opt 目录失败"; exit 1; } - - # 替换现有仓库 - if [ -d "/opt/model-ai" ]; then - rm -rf /opt/model-ai - fi - - # 克隆仓库 - git clone git@gitee.com:tao__tao/model-ai.git || { echo "克隆仓库失败"; exit 1; } - - # 进入后端目录 - cd /opt/model-ai/backend || { echo "进入后端目录失败"; exit 1; } - - # 创建虚拟环境 - python3 -m venv venv || { echo "创建虚拟环境失败"; exit 1; } - - # 激活虚拟环境 - source ./venv/bin/activate || { echo "激活虚拟环境失败"; exit 1; } -fi - -# 安装依赖 -pip install -r requirements.txt || { echo "安装依赖失败"; exit 1; } - -# 初始化应用 -echo "开始初始化应用" -python main.py init || { echo "初始化应用失败"; exit 1; } -echo "应用初始化完成" - -# 使用 nohup 在后台运行应用,并将输出重定向到日志文件 -echo "开始启动应用" -nohup python main.py run > /opt/logs/main.log 2>&1 & - -# 获取 nohup 的进程 ID -NOHUP_PID=$! - -# 检查后台进程是否成功启动 -if [ $? -eq 0 ]; then - # 将后台进程从当前 shell 会话中分离出来 - echo "应用已启动,进程 ID: $NOHUP_PID" - - # 等待一段时间,确保日志文件中有内容 - sleep 3 - - # 打印日志文件的内容 - cat /opt/logs/main.log - - echo "应用已启动" -else - echo "启动应用失败" - exit 1 -fi -``` \ No newline at end of file diff --git a/devops/docker-compose.yaml b/docker-compose.yaml similarity index 82% rename from devops/docker-compose.yaml rename to docker-compose.yaml index f192bc87..9af3c8bb 100644 --- a/devops/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,5 +1,3 @@ -version: "3.10" - # 应用服务 services: # 数据库服务 @@ -13,9 +11,7 @@ services: ports: - "3306:3306" volumes: - - /home/mysql/data:/var/lib/mysql - - /home/mysql/conf:/etc/mysql/conf - - /home/mysql/logs:/logs + - /home/mysql/data:/var/lib/mysql - /etc/localtime:/etc/localtime:ro # 让容器的时钟与宿主机时钟同步,避免时间的问题,ro(read only),表示只读。 networks: @@ -29,9 +25,8 @@ services: ports: - "6379:6379" volumes: - - /home/redis/redis.conf:/etc/redis/redis.conf:rw - - /home/redis/data:/data:rw - - /home/redis/logs:/logs:rw + - /home/redis/redis.conf:/etc/redis/redis.conf + - /home/redis/data:/data command: redis-server /etc/redis/redis.conf networks: - redis_network @@ -42,8 +37,8 @@ services: container_name: backend # 构建镜像 build: - context: .. - dockerfile: devops/backend/Dockerfile + context: . + dockerfile: Dockerfile.backend # 端口映射 ports: - "8001:8001" @@ -65,8 +60,8 @@ services: image: "nginx:latest" restart: always build: - context: ./frontend - dockerfile: Dockerfile + context: . + dockerfile: Dockerfile.frontend ports: - "80:80" volumes: diff --git a/devops/frontend/nginx.conf b/nginx.conf similarity index 92% rename from devops/frontend/nginx.conf rename to nginx.conf index 97e2b94a..86043d01 100644 --- a/devops/frontend/nginx.conf +++ b/nginx.conf @@ -1,6 +1,6 @@ ########### 每个指令必须有分号结束。################# worker_processes 1; # 允许生成的进程数,默认为1: -pid /nginx/pid/nginx.pid; # 指定 Nginx 进程运行文件存放地址 +pid /var/run/nginx.pid; # 指定 Nginx 进程运行文件存放地址 error_log /var/log/nginx/error.log warn; @@ -39,7 +39,7 @@ http { # 后端代理 location /api/ { - proxy_pass http://172.18.52.77:8000; + proxy_pass http://172.18.52.77:8001; } error_page 500 502 503 504 /50x.html;