probe-region.cjs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // 探查 rrbrr-book-audio 实际所在 region
  2. const fs = require('fs');
  3. const path = require('path');
  4. const envTxt = fs.readFileSync(path.join(__dirname, '..', '..', 'server', '.env.production'), 'utf8');
  5. const env = {};
  6. for (const line of envTxt.split(/\r?\n/)) {
  7. const m = line.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*)\s*$/);
  8. if (m) env[m[1]] = m[2].replace(/^["']|["']$/g, '');
  9. }
  10. const OSS = require(path.join(__dirname, '..', '..', 'server', 'node_modules', 'ali-oss'));
  11. const AK = env.OSS_ACCESS_KEY_ID;
  12. const SK = env.OSS_ACCESS_KEY_SECRET;
  13. const REGIONS = [
  14. 'oss-cn-hangzhou','oss-cn-beijing','oss-cn-shanghai','oss-cn-shenzhen',
  15. 'oss-cn-qingdao','oss-cn-zhangjiakou','oss-cn-huabei-3','oss-cn-huabei-5',
  16. 'oss-cn-hangzhou-finance','oss-cn-shanghai-finance-1','oss-cn-chengdu',
  17. 'oss-cn-hongkong','oss-cn-fuzhou','oss-cn-wulanchabu','oss-cn-shenyang',
  18. 'oss-cn-nanjing','oss-cn-heyuan',
  19. 'oss-us-west-1','oss-us-east-1',
  20. 'oss-ap-southeast-1','oss-ap-southeast-2','oss-ap-southeast-3','oss-ap-southeast-5','oss-ap-southeast-6','oss-ap-southeast-7',
  21. 'oss-ap-northeast-1','oss-ap-south-1',
  22. 'oss-eu-central-1','oss-eu-west-1','oss-me-central-1','oss-rus-west-1'
  23. ];
  24. (async () => {
  25. for (const r of REGIONS) {
  26. try {
  27. const c = new OSS({ accessKeyId: AK, accessKeySecret: SK, bucket: 'rrbrr-book-audio', endpoint: r + '.aliyuncs.com', secure: true });
  28. const info = await c.getBucketInfo('rrbrr-book-audio');
  29. console.log(`\n✅ 命中 region = ${r}`);
  30. console.log(' ExtranetEndpoint =', info.bucket?.ExtranetEndpoint);
  31. console.log(' IntranetEndpoint =', info.bucket?.IntranetEndpoint);
  32. console.log(' Region =', info.bucket?.Region);
  33. console.log(' StorageClass =', info.bucket?.StorageClass);
  34. console.log(' CreationDate =', info.bucket?.CreationDate);
  35. return;
  36. } catch (e) {
  37. // 只显示前 60 字符
  38. const msg = (e.code || e.message || '').toString().split('\n')[0].slice(0, 80);
  39. console.log(` miss ${r.padEnd(28)} -> ${msg}`);
  40. }
  41. }
  42. console.log('\n全部 region 都没命中,请确认 AK/SK 有该 bucket 权限。');
  43. })();