源码部署
通过源码编译部署 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: '',
},
},
],
}环境变量
更多环境变量配置请参考 环境变量说明。