xbx 1 month ago
parent
commit
49e380818a
8 changed files with 288 additions and 7 deletions
  1. 25 0
      .dockerignore
  2. 25 0
      .gitignore
  3. 19 0
      Dockerfile
  4. 12 6
      app.py
  5. 177 0
      deployment.md
  6. 13 0
      docker-compose.yml
  7. 15 0
      env.example
  8. 2 1
      requirements.txt

+ 25 - 0
.dockerignore

@@ -0,0 +1,25 @@
+# Git
+.git
+.gitignore
+
+# Python
+__pycache__/
+*.py[cod]
+*$py.class
+*.so
+.Python
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# 日志和输出文件
+logs/*
+outputs/*
+
+# 其他
+.history/
+.DS_Store 

+ 25 - 0
.gitignore

@@ -0,0 +1,25 @@
+# 忽略日志文件夹
+logs/
+
+# 忽略Python虚拟环境
+.venv/
+
+# 忽略编辑器历史记录
+.history/
+
+# 忽略Python缓存文件
+__pycache__/
+*.py[cod]
+*$py.class
+
+# 忽略环境配置文件
+.env
+.venv
+env/
+venv/
+
+# 忽略IDE配置
+.idea/
+.vscode/
+*.swp
+*.swo 

+ 19 - 0
Dockerfile

@@ -0,0 +1,19 @@
+FROM python:3.9-slim
+
+WORKDIR /app
+
+# 安装依赖
+COPY requirements.txt .
+RUN pip install --no-cache-dir -r requirements.txt
+
+# 复制项目文件
+COPY . .
+
+# 创建必要的目录
+RUN mkdir -p template outputs logs
+
+# 暴露端口
+EXPOSE 5000
+
+# 启动应用
+CMD ["python", "app.py"] 

+ 12 - 6
app.py

@@ -1,6 +1,10 @@
 from flask import Flask, request, jsonify, send_from_directory
 import os
 import time
+from dotenv import load_dotenv
+
+# 加载环境变量
+load_dotenv()
 
 # 导入自定义模块
 from utils.logger import logger, reset_process_id
@@ -16,11 +20,11 @@ from flask_cors import CORS
 CORS(app)
 
 # 配置常量
-app.config['TEMPLATE_FOLDER'] = 'template'  # 模板文件目录
-app.config['OUTPUT_FOLDER'] = 'outputs'  # 处理后文件保存目录
+app.config['TEMPLATE_FOLDER'] = os.getenv('TEMPLATE_FOLDER', 'template')  # 模板文件目录
+app.config['OUTPUT_FOLDER'] = os.getenv('OUTPUT_FOLDER', 'outputs')  # 处理后文件保存目录
 app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024  # 限制上传文件大小为16MB
-app.config['DEBUG_MODE'] = False  # 调试模式:True启用变量检查和验证,False禁用
-app.config['LOG_FOLDER'] = 'logs'  # 日志保存目录
+app.config['DEBUG_MODE'] = os.getenv('DEBUG_MODE', 'False').lower() == 'true'  # 调试模式:True启用变量检查和验证,False禁用
+app.config['LOG_FOLDER'] = os.getenv('LOG_FOLDER', 'logs')  # 日志保存目录
 
 # 确保模板、输出和日志目录存在
 os.makedirs(app.config['TEMPLATE_FOLDER'], exist_ok=True)
@@ -182,5 +186,7 @@ if __name__ == '__main__':
     init_scheduler(app.config['OUTPUT_FOLDER'])
     logger.info("Flask应用程序开始运行")
     # 使用host='0.0.0.0'使Flask监听所有网络接口,这样局域网内的其他设备可以访问
-    # port=5000指定端口号
-    app.run(host='0.0.0.0', port=5000, debug=True) 
+    # 从环境变量获取端口号,默认为5000
+    port = int(os.getenv('PORT', 5000))
+    debug = os.getenv('FLASK_DEBUG', '0') == '1'
+    app.run(host='0.0.0.0', port=port, debug=debug) 

+ 177 - 0
deployment.md

@@ -0,0 +1,177 @@
+# Word模板处理系统部署指南(ai 生成)
+
+本文档介绍如何使用Docker将Word模板处理系统部署到服务器上。
+
+## 系统要求
+
+- 支持Docker和Docker Compose的Linux服务器
+- 至少1GB RAM
+- 至少5GB磁盘空间
+- 开放5000端口(或者您计划使用的端口)
+
+## 部署步骤
+
+### 1. 安装Docker和Docker Compose
+
+如果服务器上尚未安装Docker和Docker Compose,请按照以下步骤安装:
+
+```bash
+# 安装Docker
+curl -fsSL https://get.docker.com -o get-docker.sh
+sudo sh get-docker.sh
+
+# 安装Docker Compose
+sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
+sudo chmod +x /usr/local/bin/docker-compose
+```
+
+### 2. 准备项目文件
+
+将项目文件上传到服务器,可以使用Git克隆或直接上传:
+
+```bash
+# 使用Git克隆(如果项目在Git仓库中)
+git clone <仓库地址> word-template-app
+cd word-template-app
+
+# 或者直接上传项目文件到服务器
+```
+
+### 3. 准备Word模板
+
+将Word模板文件(.docx)放入项目的`template`目录中。系统会自动使用该目录中的第一个.docx文件作为模板。
+
+```bash
+# 创建template目录(如果不存在)
+mkdir -p template
+# 将Word模板文件上传到template目录
+```
+
+### 4. 构建和启动Docker容器
+
+使用Docker Compose构建和启动应用:
+
+```bash
+# 构建并在后台启动容器
+docker-compose up -d
+```
+
+### 5. 验证部署
+
+应用启动后,可以通过以下方式验证部署是否成功:
+
+```bash
+# 查看容器状态
+docker-compose ps
+
+# 查看应用日志
+docker-compose logs
+```
+
+访问 `http://服务器IP:5000` 查看是否能打开应用界面。
+
+## 维护和管理
+
+### 停止应用
+
+```bash
+docker-compose stop
+```
+
+### 重启应用
+
+```bash
+docker-compose restart
+```
+
+### 查看日志
+
+```bash
+# 查看实时日志
+docker-compose logs -f
+```
+
+### 更新应用
+
+当有新版本时,按照以下步骤更新:
+
+```bash
+# 拉取最新代码(如果使用Git)
+git pull
+
+# 重新构建并启动容器
+docker-compose down
+docker-compose up -d --build
+```
+
+## 数据持久化
+
+系统通过Docker卷挂载实现数据持久化,以下目录会被保存在宿主机上:
+
+- `./template`: 存放Word模板文件
+- `./outputs`: 存放生成的输出文件
+- `./logs`: 存放应用日志
+
+## 常见问题排查
+
+### 1. 应用无法启动
+
+检查Docker容器日志:
+
+```bash
+docker-compose logs word-template-app
+```
+
+### 2. 无法访问应用界面
+
+确认服务器防火墙是否开放了5000端口:
+
+```bash
+# 对于使用ufw的系统
+sudo ufw status
+sudo ufw allow 5000/tcp
+
+# 对于使用firewalld的系统
+sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent
+sudo firewall-cmd --reload
+```
+
+### 3. 模板处理失败
+
+检查模板文件格式是否正确,以及应用日志中的错误信息:
+
+```bash
+docker-compose logs word-template-app
+```
+
+## 安全建议
+
+1. 不要将应用直接暴露在公网上,建议使用反向代理(如Nginx)并配置HTTPS
+2. 定期更新Docker镜像和系统
+3. 设置适当的文件权限
+
+## 使用Nginx作为反向代理
+
+如果需要通过域名访问或配置HTTPS,可以使用Nginx作为反向代理:
+
+```nginx
+server {
+    listen 80;
+    server_name your-domain.com;
+
+    location / {
+        proxy_pass http://localhost:5000;
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+    }
+}
+```
+
+## 备份策略
+
+定期备份重要数据:
+
+```bash
+# 备份模板和输出文件
+tar -czf word-template-backup-$(date +%Y%m%d).tar.gz template outputs
+``` 

+ 13 - 0
docker-compose.yml

@@ -0,0 +1,13 @@
+version: '3'
+
+services:
+  word-template-app:
+    build: .
+    container_name: word-template-app
+    ports:
+      - "5000:5000"
+    volumes:
+      - ./template:/app/template
+      - ./outputs:/app/outputs
+      - ./logs:/app/logs
+    restart: unless-stopped 

+ 15 - 0
env.example

@@ -0,0 +1,15 @@
+# Flask应用配置
+FLASK_APP=app.py
+FLASK_ENV=production
+FLASK_DEBUG=0
+
+# 应用端口配置
+PORT=5000
+
+# 文件夹配置
+TEMPLATE_FOLDER=template
+OUTPUT_FOLDER=outputs
+LOG_FOLDER=logs
+
+# 调试模式(True启用变量检查和验证,False禁用)
+DEBUG_MODE=False 

+ 2 - 1
requirements.txt

@@ -1,4 +1,5 @@
 Flask==2.3.3
 flask-cors==4.0.0
 python-docx==0.8.11
-APScheduler==3.10.4 
+APScheduler==3.10.4
+python-dotenv==1.0.0