deploy.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. const fs = require("fs");
  2. const childProcess = require("child_process");
  3. const server = "54.248.167.86";
  4. const os = require("os");
  5. const path = require("path");
  6. const domain = /VITE_API_DOMAIN=(?<domain>.*)/.exec(
  7. fs.readFileSync(".env").toString()
  8. )?.groups.domain;
  9. if (!domain) {
  10. console.log("error domain");
  11. process.exit(-1);
  12. }
  13. console.log(domain);
  14. function upload(src, dest) {
  15. console.log(`scp ${src} root@${server}:${dest}`);
  16. return new Promise((resolve, reject) => {
  17. const p = childProcess.spawn(`scp`, [
  18. "-o",
  19. "StrictHostKeyChecking=no",
  20. src,
  21. `root@${server}:${dest}`,
  22. ]);
  23. p.stdout.on("data", (data) => {
  24. console.log(data.toString());
  25. });
  26. p.stderr.on("data", (data) => {
  27. console.error(data.toString());
  28. });
  29. p.on("exit", (signal) => {
  30. if (signal === 0) resolve();
  31. else reject(`scp exit with code: ${signal}`);
  32. });
  33. });
  34. }
  35. function exec(cmd) {
  36. console.log(`ssh root@${server} ${cmd}`);
  37. return new Promise((resolve, reject) => {
  38. const p = childProcess.spawn(`ssh`, [
  39. "-o",
  40. "StrictHostKeyChecking=no",
  41. `root@${server}`,
  42. cmd,
  43. ]);
  44. p.stdout.on("data", (data) => {
  45. console.log(data.toString());
  46. });
  47. p.stderr.on("data", (data) => {
  48. console.error(data.toString());
  49. });
  50. p.on("exit", (signal) => {
  51. if (signal === 0) resolve();
  52. else reject(`ssh exit with code: ${signal}`);
  53. });
  54. });
  55. }
  56. function rsync() {
  57. console.log(
  58. `rsync --exclude='node_modules/' -ravzh --delete -e "ssh -o StrictHostKeyChecking=no" ./public/ root@54.248.167.86:/var/www/tg-web-fish/`
  59. );
  60. return new Promise((resolve, reject) => {
  61. const p = childProcess.spawn(`rsync`, [
  62. "--exclude='node_modules/'",
  63. "-ravzh",
  64. "--delete",
  65. "-e",
  66. "ssh -o StrictHostKeyChecking=no",
  67. "./public/",
  68. `root@${server}:/var/www/tg-web-fish/`,
  69. ]);
  70. p.stdout.on("data", (data) => {
  71. console.log(data.toString());
  72. });
  73. p.stderr.on("data", (data) => {
  74. console.error(data.toString());
  75. });
  76. p.on("exit", (signal) => {
  77. if (signal === 0) resolve();
  78. else reject(`rsync exit with code: ${signal}`);
  79. });
  80. });
  81. }
  82. const tmpDir = fs.mkdtempSync(os.tmpdir());
  83. const api_conf_tmp = path.join(tmpDir, "api.conf");
  84. const [part1, part2] = domain.split(".");
  85. fs.writeFileSync(
  86. api_conf_tmp,
  87. fs
  88. .readFileSync("nginx_conf/api.conf")
  89. .toString()
  90. .replace("{part1}", part1)
  91. .replace("{part2}", part2)
  92. );
  93. console.log(api_conf_tmp);
  94. upload(api_conf_tmp, "/etc/openresty/conf.d/api.conf")
  95. .then(() => {
  96. return exec("openresty -T");
  97. })
  98. .then(() => {
  99. return rsync();
  100. })
  101. .catch((e) => {
  102. console.log(e);
  103. });