guanghulab/image-studio/deploy/fix-correct.mjs

106 lines
3.6 KiB
JavaScript
Raw 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.

/**
* 检查location插入位置并修复
*/
const SG = { ip: '43.156.237.110', port: 3911, key: 'zy_gtw_74d30f54fa8b5581514569ee7874def57861a31ccb2be8c9' }
async function callGK(srv, method, path, body = null) {
const url = `http://${srv.ip}:${srv.port}${path}`
const opts = { method, headers: { 'Authorization': `Bearer ${srv.key}`, 'Content-Type': 'application/json' } }
if (body) opts.body = JSON.stringify(body)
const res = await fetch(url, opts)
const text = await res.text()
try { return { status: res.status, data: JSON.parse(text) } }
catch { return { status: res.status, data: { raw: text } } }
}
async function exec(srv, cmd) {
const r = await callGK(srv, 'POST', '/exec', { cmd })
return r.data
}
async function main() {
// 查看50-75行
const c1 = await exec(SG, 'cat -n /etc/nginx/sites-enabled/default | sed -n \'40,80p\'')
console.log('=== 40-80行 ===')
console.log(c1.stdout || c1.stderr)
// 也在最后几行看看
const c2 = await exec(SG, 'cat -n /etc/nginx/sites-enabled/default | tail -30')
console.log('\n=== 末尾30行 ===')
console.log(c2.stdout || c2.stderr)
// 用grep看看/images/上下文
const c3 = await exec(SG, 'grep -n -B5 -A10 "images" /etc/nginx/sites-enabled/default')
console.log('\n=== /images/ 上下文 ===')
console.log(c3.stdout || c3.stderr)
// 看起来location被插入到错误位置了
// 最稳妥的方法直接用python重新生成正确的配置文件
console.log('\n' + '═'.repeat(50))
console.log('🔧 重新生成正确的配置')
console.log('═'.repeat(50))
const result = await exec(SG, `
python3 << 'PYEOF'
# 1. 读取原始模板
with open('/etc/nginx/sites-available/default', 'r') as f:
content = f.read()
# 2. 找到第一个server块的结束位置行号71的}
# 通过解析大括号匹配
idx = content.index('server {')
depth = 0
pos = idx
while pos < len(content):
if content[pos] == '{':
depth += 1
elif content[pos] == '}':
depth -= 1
if depth == 0:
# 在这个}之前插入
insert_block = '''
# 铸渊图片工作室 · 代理到本地3912
location /images/ {
proxy_pass http://127.0.0.1:3912/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_read_timeout 60s;
}
'''
new_content = content[:pos] + insert_block + content[pos:]
with open('/etc/nginx/sites-enabled/default', 'w') as f:
f.write(new_content)
print(f'OK: 插入成功pos={pos}')
break
pos += 1
else:
print('ERROR: 找不到server块结束位置')
PYEOF
`)
console.log('Python:', result.stdout || result.stderr)
// 验证
const c4 = await exec(SG, 'grep -n -B3 -A12 "images" /etc/nginx/sites-enabled/default')
console.log('\n验证插入位置:')
console.log(c4.stdout || c4.stderr)
const r1 = await exec(SG, 'nginx -t 2>&1')
console.log('\nNginx测试:', r1.stdout || r1.stderr)
if (!(r1.stdout || '').includes('test failed') && !(r1.stderr || '').includes('test failed')) {
await exec(SG, 'nginx -s reload 2>&1')
const r2 = await exec(SG, 'curl -s -w "\\nHTTP:%{http_code}" http://localhost/images/ 2>&1')
console.log('\n验证:', r2.stdout || r2.stderr)
} else {
console.log('配置有误,回滚')
await exec(SG, 'cp /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default')
}
}
main().catch(err => console.error('❌', err))