源码部署
通过源码编译部署 Mix Space 后端
如果你不是开发者,或者不想折腾,请不要选择源码部署。由于自身技术原因导致的问题,我们将不会提供任何技术支持。
要求
克隆并安装
git clone https://github.com/mx-space/core.git --branch v17.0.4 --depth=1
cd core
npm install -g corepack
corepack enable
pnpm i构建 & Bundle
pnpm build配置 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 会在重启后失效(V2 要求至少 32 字符;已有实例保留原值)
JWT_SECRET: 'REPLACE_WITH_YOUR_SAVED_INSTANCE_SECRET',
// 必填:Snowflake worker ID,整数 0-1023。生产环境不设置会直接启动失败。
// cluster 模式可安全使用多实例:core 会基于 NODE_APP_INSTANCE 为每个实例分配不重叠的 ID
SNOWFLAKE_WORKER_ID: '1',
// 可选:加密密钥。注意只要填了它而没有显式关掉 ENCRYPT_ENABLE,加密就会被自动开启
MX_ENCRYPT_KEY: '',
},
},
],
}先迁移,再启动
先为独立迁移进程配置同样的数据库、Redis、字段密钥、JWT 等环境变量(例如 apps/core/.env),不要只放在 PM2 的 env 对象里。已有秘密保留,新装随机生成并持久保存。仓库根运行:
pnpm -C apps/core migrate确认迁移退出成功,再进入 apps/core:
pm2 start ecosystem.config.cjs查看运行状态:
pm2 logs mx-server环境变量
更多环境变量配置请参考 环境变量说明。