跳到主要内容
Mix SpaceMix Space

源码部署

通过源码编译部署 Mix Space 后端

如果你不是开发者,或者不想折腾,请不要选择源码部署。由于自身技术原因导致的问题,我们将不会提供任何技术支持。

要求

克隆并安装

git clone https://github.com/mx-space/core.git --depth=1
cd core
pnpm i

构建 & Bundle

pnpm build
pnpm bundle

配置 ecosystem.config.cjs

在 ./apps/core 目录下创建 ecosystem.config.cjs:

扩展名必须是 .cjs。apps/core/package.json 声明了 "type": "module",该目录下的 .js 会被当作 ES module,里面的 require() 未定义,PM2 启动会直接报 require is not defined in ES module scope。仓库自带的配置文件也是 .cjs。

const { cpus } = require('os')
const { execSync } = require('child_process')
const nodePath = execSync(`npm root --quiet -g`, { encoding: 'utf-8' }).split(
  '\n',
)[0]

const cpuLen = cpus().length
module.exports = {
  apps: [
    {
      name: 'mx-server',
      // 产物入口由 vite 的 entryFileNames 决定([name].mjs),没有 out/index.js
      script: './out/main.mjs',
      autorestart: true,
      exec_mode: 'cluster',
      watch: false,
      instances: cpuLen,
      max_memory_restart: '520M',
      args: '',
      env: {
        NODE_ENV: 'production',
        NODE_PATH: nodePath,
        // 必填:允许跨域的域名,多个用逗号分隔
        ALLOWED_ORIGINS: 'your-domain.com',
        // 必填:JWT 密钥。未设置时 token 会在重启后失效(建议 16-32 个字符,运行时不做长度校验)
        JWT_SECRET: 'your-jwt-secret',
        // 必填:Snowflake worker ID,整数 0-1023。生产环境不设置会直接启动失败。
        // cluster 模式可安全使用多实例:core 会基于 NODE_APP_INSTANCE 为每个实例分配不重叠的 ID
        SNOWFLAKE_WORKER_ID: '1',
        // 可选:加密密钥。注意只要填了它而没有显式关掉 ENCRYPT_ENABLE,加密就会被自动开启
        MX_ENCRYPT_KEY: '',
      },
    },
  ],
}

启动

pm2 start ecosystem.config.cjs

查看运行状态:

pm2 logs mx-server

环境变量

更多环境变量配置请参考 环境变量说明。

下一步

部署完成后,请配置 反向代理 和 SSL 证书。