210 lines
7.2 KiB
Python
210 lines
7.2 KiB
Python
"""
|
||
修复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()
|
||
|