فهرست منبع

feat: deploy with obfuscator

ryanemax 8 ماه پیش
والد
کامیت
831c1297b9
9فایلهای تغییر یافته به همراه1031 افزوده شده و 48 حذف شده
  1. 10 0
      README.md
  2. 3 1
      server/.gitignore
  3. 1 7
      server/api/textbook/routes.js
  4. 13 7
      server/db/pg-instance.js
  5. 21 0
      server/deploy.sh
  6. 890 27
      server/package-lock.json
  7. 31 5
      server/package.json
  8. 4 1
      server/server.js
  9. 58 0
      server/vite.config.js

+ 10 - 0
README.md

@@ -14,6 +14,16 @@ npm i -f
 npm run start
 ```
 
+
+## 生产环境
+- 服务器
+    - root@8.140.98.43
+- 数据库
+    - psql --dbname=postgresql://8.140.98.43:25432/
+``` sql
+ALTER USER postgres WITH PASSWORD 'Edu@0@$textbook';
+```
+
 ## Authing 用户服务
 ### 管理员
 https://lljydpt8egql.u2-dev.hep.com.cn/

+ 3 - 1
server/.gitignore

@@ -1,3 +1,5 @@
 node_modules/
 logs/
-database/
+database/
+bin/
+dist/

+ 1 - 7
server/api/textbook/routes.js

@@ -88,13 +88,7 @@ function getUserByMobile(mobile, company) {
     return query.first({ useMasterKey: true });
 }
 /* 创建_Session并返回 */
-const db = pgp({
-    user: 'postgres',
-    password: 'postgres',
-    host: 'localhost',
-    port: 25432,
-    database: 'postgres'
-});
+const db = require("../../db/pg-instance")
 
 async function setMobileSessionToken(user, reset) {
     try {

+ 13 - 7
server/db/pg-instance.js

@@ -1,11 +1,17 @@
 const pgp = require('pg-promise')();
 
 // 连接到数据库
-const pgClient = pgp({
-    user: 'postgres',
-    password: 'postgres',
-    host: 'localhost',
-    port: 25432,
-    database: 'postgres'
-});
+var PgInstanse;
+const pgClient = function(){
+    if(!PgInstanse){
+        PgInstanse = pgp({
+            user: 'postgres',
+            password: 'postgres',
+            host: 'localhost',
+            port: 25432,
+            database: 'postgres'
+        });
+    }
+    return PgInstanse;
+}
 module.exports.pgClient = pgClient

+ 21 - 0
server/deploy.sh

@@ -0,0 +1,21 @@
+#!/bin/bash
+npx vite build
+# 开发主机(开发环境服务器 有SSH权限至生产环境)
+DEV_HOST=root@dbo.fmode.cn
+# 生产主机(生产环境服务器)
+PROD_HOST=root@8.140.98.43
+# 部署路径
+DIR_SERVER=/opt/edu-textbook-server
+
+# 部署过程
+ssh $DEV_HOST "mkdir -p $DIR_SERVER"
+scp dist/server/server.js $DEV_HOST:$DIR_SERVER/
+scp ./package.json $DEV_HOST:$DIR_SERVER/
+scp ./config.js $DEV_HOST:$DIR_SERVER/
+ssh $DEV_HOST "scp -r $DIR_SERVER $PROD_HOST:/opt/"
+
+# 启动过程
+ssh $DEV_HOST "ssh $PROD_HOST \"cd $DIR_SERVER && ls -lah\"" # 仅安装prod
+ssh $DEV_HOST "ssh $PROD_HOST \"cd $DIR_SERVER && npm i --omit=dev --force\"" # 仅安装prod
+# ssh $DEV_HOST "ssh $PROD_HOST \"cd $DIR_SERVER && pm2 stop server.js\""
+# ssh $DEV_HOST "ssh $PROD_HOST \"cd $DIR_SERVER && pm2 start server.js\""

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 890 - 27
server/package-lock.json


+ 31 - 5
server/package.json

@@ -1,24 +1,50 @@
 {
-  "name": "edu-server",
+  "name": "edu-textbook-server",
   "version": "1.0.0",
   "description": "",
   "main": "server.js",
+  "bin":{
+    "server":"server.js"
+  },
   "directories": {
     "lib": "lib"
   },
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1",
-    "start": "node server.js"
+    "start": "node server.js",
+    "build": "vite build",
+    "pack": "pkg ."
+  },
+  "pkg": {
+    "scripts": ["server.js"],
+    "assets": [],
+    "targets": [
+      "node18-linux-x64"
+    ],
+    "outputPath": "./dist"
   },
   "author": "",
   "license": "ISC",
   "dependencies": {
     "authing-js-sdk": "^4.23.51",
     "parse-dashboard": "^5.4.0",
-    "parse-server": "^7.0.0"
-  },
-  "devDependencies": {
+    "parse-server": "^7.0.0",
     "@embedded-postgres/linux-x64": "^16.2.0-beta.11",
     "@embedded-postgres/windows-x64": "^16.2.0-beta.11"
+  },
+  "os":{
+    "linux":{
+      "@embedded-postgres/linux-x64": "^16.2.0-beta.11"
+    },
+    "win32":{
+      "@embedded-postgres/windows-x64": "^16.2.0-beta.11"
+    }
+  },
+  "devDependencies": {
+    "pkg": "^5.8.1",
+    "vite": "^4.5.3",
+    "vite-plugin-dts": "^3.9.1",
+    "vite-plugin-javascript-obfuscator": "^3.1.0",
+    "vite-plugin-node": "^3.1.0"
   }
 }

+ 4 - 1
server/server.js

@@ -72,7 +72,10 @@ global.parseConfig = {
 }
 
 global.parseConfig.serverURL = `http://localhost:${global.parseConfig?.port}/parse`
-global.parseConfig.databaseURI = "postgresql://postgres@127.0.0.1:25432/"
+  global.parseConfig.databaseURI = "postgresql://postgres@127.0.0.1:25432/"
+  if(global.config['DATABASE_LOCAL']) {
+  global.parseConfig.databaseURI = "postgresql://postgres@127.0.0.1:25432/"
+}
 global.parseConfig.appId = 'edu-textbook'
 global.parseConfig.appName = 'EduParse'
 global.parseConfig.masterKey = 'EDU2024'

+ 58 - 0
server/vite.config.js

@@ -0,0 +1,58 @@
+import { defineConfig } from 'vite';
+import obfuscatorPlugin from 'vite-plugin-javascript-obfuscator';
+import { VitePluginNode } from 'vite-plugin-node';
+
+export default defineConfig({
+    server:{
+        port:61337
+    },
+    plugins: [
+        VitePluginNode({
+            adapter:"express",
+            appPath:"server.js",
+            exportName:"EduTextbookServer",
+            initAppOnBoot:false,
+        }),
+        obfuscatorPlugin({
+            include: ["**/*.js"],
+            exclude: [/node_modules/],
+            apply: "build",
+            debugger: true,
+            options: {
+                debugProtection:false,
+                debugProtectionInterval:0,
+                // ...  [See more options](https://github.com/javascript-obfuscator/javascript-obfuscator)
+                compact: true,
+                controlFlowFlattening: false,
+                controlFlowFlatteningThreshold: 0.5,
+                deadCodeInjection: false,
+                deadCodeInjectionThreshold: 0.2,
+                disableConsoleOutput: true,
+                identifierNamesGenerator: 'hexadecimal',
+                log: false,
+                renameGlobals: false,
+                rotateStringArray: true,
+                selfDefending: false,
+                stringArray: true,
+                stringArrayEncoding: ['base64'],
+                stringArrayThreshold: 0.5,
+                transformObjectKeys: false,
+                unicodeEscapeSequence: false
+            },
+        }),
+    ],
+    build: {
+        lib: {
+            entry: 'server.js',  // 入口文件
+            name: 'edu-textbook-server',
+            fileName: (format) => `edu-textbook-server.${format}.js`
+        },
+        rollupOptions: {
+        input: 'server.js', // 你的入口文件
+        output: {
+            dir: 'dist/server',
+            format: 'cjs'
+        }
+        }
+    }
+});

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است