ai-business-write/fix_minio_config.py

210 lines
7.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
修复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()