guanghulab/image-studio/deploy/remote-deploy-3.mjs

97 lines
3.5 KiB
JavaScript
Raw Normal View History

/**
*
* 铸渊远程部署 · 第三阶段配置广州Nginx反向代理
*
*/
const SERVERS = {
sg: { name: '新加坡·铸渊大脑', ip: '43.156.237.110', port: 3911, key: 'zy_gtw_74d30f54fa8b5581514569ee7874def57861a31ccb2be8c9' },
gz: { name: '广州·代码仓库', ip: '43.139.217.141', port: 3910, key: 'zy_gtw_4a155446b7acc09fe46a2a29972c0ca5d9954da19c35dc23' },
}
async function callGatekeeper(server, method, path, body = null) {
const url = `http://${server.ip}:${server.port}${path}`
const opts = {
method,
headers: {
'Authorization': `Bearer ${server.key}`,
'Content-Type': 'application/json',
},
}
if (body) opts.body = JSON.stringify(body)
const res = await fetch(url, opts)
const text = await res.text()
let data
try { data = JSON.parse(text) } catch { data = { raw: text } }
return { status: res.status, data }
}
async function exec(server, cmd) {
const result = await callGatekeeper(server, 'POST', '/exec', { cmd })
if (result.status !== 200) {
return { ok: false, error: result.data }
}
return { ok: true, stdout: result.data.stdout || '', stderr: result.data.stderr || '' }
}
async function readFile(server, path) {
const result = await callGatekeeper(server, 'POST', '/file/read', { path })
if (result.status === 200) return result.data.content
return null
}
async function writeFile(server, path, content) {
const result = await callGatekeeper(server, 'POST', '/file/write', { path, content })
return result.status === 200
}
async function main() {
const gz = SERVERS.gz
const sg = SERVERS.sg
console.log('═'.repeat(50))
console.log('🌐 配置广州Nginx反向代理')
console.log('═'.repeat(50))
// 1. 查找所有Nginx配置相关文件
console.log('\n📂 查找Nginx配置...')
const lsResult = await exec(gz, 'find /etc/nginx -type f -name "*.conf" | sort')
if (lsResult.ok) console.log(lsResult.stdout)
// 2. 读取各个配置文件
for (const p of ['/etc/nginx/conf.d/default.conf', '/etc/nginx/sites-enabled/default', '/etc/nginx/nginx.conf']) {
const content = await readFile(gz, p)
if (content) {
console.log(`\n📄 ${p}:`)
console.log(content.slice(0, 2000))
if (content.length > 2000) console.log(`... (共${content.length}字符,截断显示)`)
}
}
// 3. 查找已部署的站点信息
console.log('\n🔍 查找站点的server_name...')
await exec(gz, 'grep -r "server_name" /etc/nginx/ 2>/dev/null')
// 4. 查看Forgejo的端口
console.log('\n🔍 查找Forgejo端口...')
await exec(gz, 'ss -tlnp | grep -E "3000|8080|3910"')
// 5. 查找现有反向代理规则
console.log('\n🔍 查找现有proxy_pass...')
await exec(gz, 'grep -r "proxy_pass" /etc/nginx/ 2>/dev/null')
// 6. 测试新加坡服务器是否能从广州访问
console.log('\n🔗 测试广州→新加坡网络...')
const gwTest = await exec(gz, `curl -s --connect-timeout 5 http://${sg.ip}:3912/ | head -3 || echo "无法连接"`)
console.log(gwTest.stdout || gwTest.stderr)
console.log('\n' + '═'.repeat(50))
console.log('✅ Nginx调查完成, 准备配置代理')
console.log('═'.repeat(50))
}
main().catch(err => {
console.error('❌ 失败:', err.message)
process.exit(1)
})