deploy.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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. const webdomain = /VITE_WEB_DOMAIN=(?<webdomain>.*)/.exec(
  10. fs.readFileSync(".env").toString()
  11. )?.groups.webdomain;
  12. if (!domain || !webdomain) {
  13. console.log("error domain");
  14. process.exit(-1);
  15. }
  16. console.log(domain, webdomain);
  17. function upload(src, dest) {
  18. console.log(`scp ${src} root@${server}:${dest}`);
  19. return new Promise((resolve, reject) => {
  20. const p = childProcess.spawn(`scp`, [
  21. "-o",
  22. "StrictHostKeyChecking=no",
  23. src,
  24. `root@${server}:${dest}`,
  25. ]);
  26. p.stdout.on("data", (data) => {
  27. console.log(data.toString());
  28. });
  29. p.stderr.on("data", (data) => {
  30. console.error(data.toString());
  31. });
  32. p.on("exit", (signal) => {
  33. if (signal === 0) resolve();
  34. else reject(`scp exit with code: ${signal}`);
  35. });
  36. });
  37. }
  38. function exec(cmd) {
  39. console.log(`ssh root@${server} ${cmd}`);
  40. return new Promise((resolve, reject) => {
  41. const p = childProcess.spawn(`ssh`, [
  42. "-o",
  43. "StrictHostKeyChecking=no",
  44. `root@${server}`,
  45. cmd,
  46. ]);
  47. p.stdout.on("data", (data) => {
  48. console.log(data.toString());
  49. });
  50. p.stderr.on("data", (data) => {
  51. console.error(data.toString());
  52. });
  53. p.on("exit", (signal) => {
  54. if (signal === 0) resolve();
  55. else reject(`ssh exit with code: ${signal}`);
  56. });
  57. });
  58. }
  59. function rsync() {
  60. console.log(
  61. `rsync --exclude='node_modules/' -ravzh --delete -e "ssh -o StrictHostKeyChecking=no" ./public/ root@54.248.167.86:/var/www/tg-web-fish/`
  62. );
  63. return new Promise((resolve, reject) => {
  64. const p = childProcess.spawn(`rsync`, [
  65. "--exclude='node_modules/'",
  66. "-ravzh",
  67. "--delete",
  68. "-e",
  69. "ssh -o StrictHostKeyChecking=no",
  70. "./public/",
  71. `root@${server}:/var/www/tg-web-fish/`,
  72. ]);
  73. p.stdout.on("data", (data) => {
  74. console.log(data.toString());
  75. });
  76. p.stderr.on("data", (data) => {
  77. console.error(data.toString());
  78. });
  79. p.on("exit", (signal) => {
  80. if (signal === 0) resolve();
  81. else reject(`rsync exit with code: ${signal}`);
  82. });
  83. });
  84. }
  85. function build(){
  86. return new Promise((resolve, reject) => {
  87. const p = childProcess.spawn(`node`, ["build.js"]);
  88. p.stdout.on("data", (data) => {
  89. console.log(data.toString());
  90. });
  91. p.stderr.on("data", (data) => {
  92. console.error(data.toString());
  93. });
  94. p.on("exit", (signal) => {
  95. if (signal === 0) resolve();
  96. else reject(`node build.js exit with code: ${signal}`);
  97. });
  98. });
  99. }
  100. const tmpDir = fs.mkdtempSync(os.tmpdir());
  101. const api_conf_tmp = path.join(tmpDir, "api.conf");
  102. const [part1, part2] = domain.split(".");
  103. fs.writeFileSync(
  104. api_conf_tmp,
  105. fs
  106. .readFileSync("nginx_conf/api.conf")
  107. .toString()
  108. .replace("{part1}", part1)
  109. .replace("{part2}", part2)
  110. );
  111. console.log(api_conf_tmp);
  112. const web_conf_tmp = path.join(tmpDir, "web.conf");
  113. fs.writeFileSync(
  114. web_conf_tmp,
  115. fs
  116. .readFileSync("nginx_conf/web.conf")
  117. .toString()
  118. .replace("{webdomain}", webdomain)
  119. );
  120. upload(api_conf_tmp, "/etc/openresty/conf.d/api.conf")
  121. .then(() => {
  122. return upload(web_conf_tmp, "/etc/openresty/conf.d/web.conf");
  123. })
  124. .then(() => {
  125. return exec("openresty -T");
  126. })
  127. .then(() => {
  128. return exec("openresty -s reload");
  129. })
  130. .then(() => {
  131. return build();
  132. })
  133. .then(() => {
  134. return rsync();
  135. })
  136. .catch((e) => {
  137. console.log(e);
  138. });