""" 修复MinIO配置 1. 创建或更新.env文件 2. 检查并迁移模板文件 """ import os from pathlib import Path # 新MinIO配置 NEW_MINIO_CONFIG = { 'endpoint': '10.100.31.21:9000', 'access_key': 'minio_PC8dcY', 'secret_key': 'minio_7k7RNJ', 'secure': 'false', # 重要:必须是false 'bucket': 'finyx' } def create_env_file(): """创建或更新.env文件""" env_file = Path('.env') print("="*70) print("创建/更新 .env 文件") print("="*70) # 读取现有.env文件(如果存在) existing_vars = {} if env_file.exists(): print(f"\n发现现有 .env 文件,将更新MinIO相关配置...") with open(env_file, 'r', encoding='utf-8') as f: for line in f: line = line.strip() if line and not line.startswith('#') and '=' in line: key, value = line.split('=', 1) existing_vars[key.strip()] = value.strip() else: print(f"\n创建新的 .env 文件...") # 更新MinIO配置 existing_vars['MINIO_ENDPOINT'] = NEW_MINIO_CONFIG['endpoint'] existing_vars['MINIO_ACCESS_KEY'] = NEW_MINIO_CONFIG['access_key'] existing_vars['MINIO_SECRET_KEY'] = NEW_MINIO_CONFIG['secret_key'] existing_vars['MINIO_BUCKET'] = NEW_MINIO_CONFIG['bucket'] existing_vars['MINIO_SECURE'] = NEW_MINIO_CONFIG['secure'] # 写入.env文件 with open(env_file, 'w', encoding='utf-8') as f: f.write("# MinIO配置\n") f.write(f"MINIO_ENDPOINT={NEW_MINIO_CONFIG['endpoint']}\n") f.write(f"MINIO_ACCESS_KEY={NEW_MINIO_CONFIG['access_key']}\n") f.write(f"MINIO_SECRET_KEY={NEW_MINIO_CONFIG['secret_key']}\n") f.write(f"MINIO_BUCKET={NEW_MINIO_CONFIG['bucket']}\n") f.write(f"MINIO_SECURE={NEW_MINIO_CONFIG['secure']} # 重要:新服务器使用HTTP,必须是false\n") f.write("\n") # 保留其他配置(如果有) other_keys = set(existing_vars.keys()) - { 'MINIO_ENDPOINT', 'MINIO_ACCESS_KEY', 'MINIO_SECRET_KEY', 'MINIO_BUCKET', 'MINIO_SECURE' } if other_keys: f.write("# 其他配置\n") for key in sorted(other_keys): f.write(f"{key}={existing_vars[key]}\n") print(f"\n[OK] .env 文件已更新") print(f"\n更新的配置:") print(f" MINIO_ENDPOINT={NEW_MINIO_CONFIG['endpoint']}") print(f" MINIO_ACCESS_KEY={NEW_MINIO_CONFIG['access_key']}") print(f" MINIO_SECRET_KEY={NEW_MINIO_CONFIG['secret_key'][:8]}***") print(f" MINIO_BUCKET={NEW_MINIO_CONFIG['bucket']}") print(f" MINIO_SECURE={NEW_MINIO_CONFIG['secure']} # [IMPORTANT] 必须是false") return True def check_template_files(): """检查模板文件是否存在""" print("\n" + "="*70) print("检查模板文件") print("="*70) try: from minio import Minio from minio.error import S3Error import pymysql from dotenv import load_dotenv load_dotenv() # 连接新MinIO client = Minio( NEW_MINIO_CONFIG['endpoint'], access_key=NEW_MINIO_CONFIG['access_key'], secret_key=NEW_MINIO_CONFIG['secret_key'], secure=False ) # 连接数据库 db_config = { 'host': os.getenv('DB_HOST', '152.136.177.240'), 'port': int(os.getenv('DB_PORT', 5012)), 'user': os.getenv('DB_USER', 'finyx'), 'password': os.getenv('DB_PASSWORD', '6QsGK6MpePZDE57Z'), 'database': os.getenv('DB_NAME', 'finyx'), 'charset': 'utf8mb4' } conn = pymysql.connect(**db_config) cursor = conn.cursor(pymysql.cursors.DictCursor) # 查询所有模板 sql = """ SELECT id, name, file_path FROM f_polic_file_config WHERE tenant_id = %s AND state = 1 AND file_path IS NOT NULL AND file_path != '' """ cursor.execute(sql, (615873064429507639,)) templates = cursor.fetchall() print(f"\n数据库中找到 {len(templates)} 个模板文件") missing_files = [] existing_files = [] for template in templates: object_name = template['file_path'].lstrip('/') try: stat = client.stat_object(NEW_MINIO_CONFIG['bucket'], object_name) existing_files.append(template) print(f" [OK] {template['name']} - 存在 ({stat.size:,} 字节)") except S3Error as e: if e.code == 'NoSuchKey': missing_files.append(template) print(f" [FAIL] {template['name']} - 不存在") print(f" 路径: {object_name}") cursor.close() conn.close() print(f"\n总结:") print(f" 存在的文件: {len(existing_files)}") print(f" 缺失的文件: {len(missing_files)}") if missing_files: print(f"\n[WARN] 发现 {len(missing_files)} 个模板文件在新MinIO服务器上不存在") print(f"\n需要执行以下操作之一:") print(f" 1. 从旧MinIO服务器迁移这些文件到新服务器") print(f" 2. 重新上传这些模板文件到新MinIO服务器") print(f"\n缺失的文件列表:") for template in missing_files: print(f" - {template['name']}") print(f" 路径: {template['file_path']}") return len(missing_files) == 0 except Exception as e: print(f"\n[ERROR] 检查模板文件时出错: {str(e)}") import traceback traceback.print_exc() return False def main(): """主函数""" print("\n" + "="*70) print("MinIO配置修复工具") print("="*70) try: # 1. 创建/更新.env文件 create_env_file() # 2. 检查模板文件 all_files_exist = check_template_files() # 总结 print("\n" + "="*70) print("修复总结") print("="*70) print("\n[OK] .env 文件已更新") if all_files_exist: print("[OK] 所有模板文件都存在") print("\n下一步:") print(" 1. 重启应用服务以使新的环境变量生效") print(" 2. 测试文档生成功能") else: print("[WARN] 部分模板文件缺失") print("\n下一步:") print(" 1. 迁移或上传缺失的模板文件到新MinIO服务器") print(" 2. 重启应用服务以使新的环境变量生效") print(" 3. 测试文档生成功能") print("\n重要提示:") print(" - MINIO_SECURE 必须设置为 false(新服务器使用HTTP)") print(" - 更新环境变量后必须重启应用才能生效") except Exception as e: print(f"\n[ERROR] 修复过程中发生错误: {e}") import traceback traceback.print_exc() if __name__ == '__main__': main()