鸿星黄金 · Windows 11 新机器开发环境部署指引

在 Windows 11 新机器上,通过 WSL2 Ubuntu 24.04 拉取并运行管理平台、ERP API/Web 和手机 H5。

① 管理员 PowerShell:安装 WSL2 与 Docker Desktop

wsl --list --online
wsl --install -d Ubuntu-24.04

# 重启 Windows;首次打开 Ubuntu 24.04 并创建普通 Linux 用户后继续
wsl --update
wsl --set-default-version 2
wsl --set-default Ubuntu-24.04
wsl --list --verbose

winget install --id Docker.DockerDesktop --exact --source winget `
  --accept-source-agreements --accept-package-agreements

启动 Docker Desktop,在 Settings → General 启用 Use WSL 2 based engine,在 Resources → WSL Integration 启用 Ubuntu-24.04,然后 Apply & restart

② WSL2 Ubuntu:安装依赖并拉取四个 main 仓库

以下及后续命令全部在 Ubuntu 终端执行;源码只能放在 WSL Linux 文件系统,禁止放到 C:\/mnt/c

sudo apt-get update
sudo apt-get install -y git curl ca-certificates gzip util-linux
docker version
docker compose version

export WORK_ROOT="$HOME/nexora-hongxing"
case "$WORK_ROOT" in /mnt/*) echo "WORK_ROOT 不能位于 /mnt" >&2; exit 1 ;; esac
mkdir -p "$WORK_ROOT"

git clone --depth=1 --branch v0.40.3 https://github.com/nvm-sh/nvm.git "$HOME/.nvm"
. "$HOME/.nvm/nvm.sh"
nvm install 24.10.0
nvm use 24.10.0
npm install -g npm@11.6.1
nvm install 20
nvm use 20
npm install -g npm@10.9.2

git clone --filter=blob:none --single-branch --branch main \
  https://gitlab.nexora.restry.cn/nexora/nexora-platform.git "$WORK_ROOT/nexora-platform"
git clone --filter=blob:none --single-branch --branch main \
  https://gitlab.nexora.restry.cn/nexora/nexora-erp.git "$WORK_ROOT/nexora-erp"
git clone --filter=blob:none --single-branch --branch main \
  https://gitlab.nexora.restry.cn/nexora/nexora-erp-web.git "$WORK_ROOT/nexora-erp-web"
git clone --filter=blob:none --single-branch --branch main \
  https://gitlab.nexora.restry.cn/nexora/nexora-app.git "$WORK_ROOT/nexora-app"

③ WSL2 Ubuntu:复制受保护配置

所有文件从门神或受保护文件读取,并分别按仓库中的 .env.example 准备。

export PROTECTED_DIR="$HOME/.config/nexora/hongxing"
test -r "$PROTECTED_DIR/platform.env"
test -r "$PROTECTED_DIR/erp.env"
test -r "$PROTECTED_DIR/h5.env"
test -r "$PROTECTED_DIR/mysql-root-password"
test -r "$PROTECTED_DIR/mysql-client.cnf"

install -m 0600 "$PROTECTED_DIR/platform.env" "$WORK_ROOT/nexora-platform/.env"
install -m 0600 "$PROTECTED_DIR/erp.env" "$WORK_ROOT/nexora-erp/.env"
cp "$WORK_ROOT/nexora-erp-web/.env.example" "$WORK_ROOT/nexora-erp-web/.env.local"
install -m 0600 "$PROTECTED_DIR/h5.env" "$WORK_ROOT/nexora-app/.env.local"

④ WSL2 Ubuntu:按顺序启动四个端

管理平台

mkdir -p "$WORK_ROOT/.runtime/log" "$WORK_ROOT/.runtime/pid"
cd "$WORK_ROOT/nexora-platform"
. "$HOME/.nvm/nvm.sh"
nvm use 24.10.0
npm ci
docker compose up -d postgres
npm run db:migrate
npm run db:seed
nohup setsid npm run dev -- --hostname 127.0.0.1 --port 3000 \
  >"$WORK_ROOT/.runtime/log/platform.log" 2>&1 </dev/null &
echo $! >"$WORK_ROOT/.runtime/pid/platform.pid"

ERP MySQL 与 API

export MYSQL_IMAGE='mysql:5.7.44@sha256:4bc6bc963e6d8443453676cae56536f4b8156d78bae03c0145cbe47c2aad73bb'
export PHP_IMAGE='php:7.4-cli@sha256:620a6b9f4d4feef2210026172570465e9d0c1de79766418d3affd09190a7fda5'
docker pull "$MYSQL_IMAGE"
docker network create hongxing-dev
docker volume create hongxing_mysql_data
docker run -d --name hongxing-mysql --platform linux/amd64 \
  --network hongxing-dev -p 127.0.0.1:3306:3306 \
  -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root-password \
  -v "$PROTECTED_DIR/mysql-root-password:/run/secrets/mysql-root-password:ro" \
  -v hongxing_mysql_data:/var/lib/mysql "$MYSQL_IMAGE"

until docker run --rm --platform linux/amd64 --network hongxing-dev \
  -v "$PROTECTED_DIR/mysql-client.cnf:/run/secrets/mysql-client.cnf:ro" "$MYSQL_IMAGE" \
  mysqladmin --defaults-extra-file=/run/secrets/mysql-client.cnf -h hongxing-mysql ping; do sleep 2; done

docker run --rm --platform linux/amd64 --network hongxing-dev \
  -v "$PROTECTED_DIR/mysql-client.cnf:/run/secrets/mysql-client.cnf:ro" "$MYSQL_IMAGE" \
  mysql --defaults-extra-file=/run/secrets/mysql-client.cnf -h hongxing-mysql \
  -e 'CREATE DATABASE IF NOT EXISTS nexora_platform CHARACTER SET utf8mb4; CREATE DATABASE IF NOT EXISTS nexora_hongxing CHARACTER SET utf8mb4;'

docker run --rm -i --platform linux/amd64 --network hongxing-dev \
  -v "$PROTECTED_DIR/mysql-client.cnf:/run/secrets/mysql-client.cnf:ro" "$MYSQL_IMAGE" \
  mysql --defaults-extra-file=/run/secrets/mysql-client.cnf -h hongxing-mysql nexora_platform \
  < "$WORK_ROOT/nexora-erp/infra/db-schema/nexora_platform-schema.sql"

gzip -cd "$WORK_ROOT/nexora-erp/migrations/xylferp_schema.sql.gz" | \
docker run --rm -i --platform linux/amd64 --network hongxing-dev \
  -v "$PROTECTED_DIR/mysql-client.cnf:/run/secrets/mysql-client.cnf:ro" "$MYSQL_IMAGE" \
  mysql --defaults-extra-file=/run/secrets/mysql-client.cnf -h hongxing-mysql nexora_hongxing

cd "$WORK_ROOT/nexora-erp"
docker pull "$PHP_IMAGE"
docker build --network=none --pull=false --target runtime -t nexora-erp:hongxing-dev .
docker run -d --name hongxing-erp-api --network hongxing-dev \
  --add-host host.docker.internal:host-gateway --read-only \
  --tmpfs /app/runtime:rw,noexec,nosuid,size=64m,uid=10001,gid=10001,mode=0750 \
  -p 127.0.0.1:8080:8080 --env-file .env nexora-erp:hongxing-dev

ERP Web

cd "$WORK_ROOT/nexora-erp-web"
nvm use 20
npm ci --ignore-scripts
nohup setsid npm run serve -- --host 127.0.0.1 --port 8081 \
  >"$WORK_ROOT/.runtime/log/erp-web.log" 2>&1 </dev/null &
echo $! >"$WORK_ROOT/.runtime/pid/erp-web.pid"

手机 H5;原生仅构建资源

cd "$WORK_ROOT/nexora-app"
nvm use 20
npm ci --ignore-scripts
nohup setsid npm run dev:h5 -- --host 127.0.0.1 --port 5173 --strictPort \
  >"$WORK_ROOT/.runtime/log/h5.log" 2>&1 </dev/null &
echo $! >"$WORK_ROOT/.runtime/pid/h5.pid"
npm run build:app

提示:当前源码可启动进程与页面,但缺少通用鸿星账号初始化和本地同源代理,完整登录业务链路暂不可用。

⑤ Windows 浏览器入口与最短运维命令

管理平台 :3000 · ERP API :8080 · ERP Web :8081 · 手机 H5 :5173

更新源码

for repo in nexora-platform nexora-erp nexora-erp-web nexora-app; do
  git -C "$WORK_ROOT/$repo" pull --ff-only origin main
done

查看日志

tail -F "$WORK_ROOT"/.runtime/log/*.log
docker logs --tail=200 -f hongxing-mysql
docker logs --tail=200 -f hongxing-erp-api
cd "$WORK_ROOT/nexora-platform" && docker compose logs --tail=200 -f postgres

停止

for name in platform erp-web h5; do
  pidfile="$WORK_ROOT/.runtime/pid/$name.pid"
  test ! -s "$pidfile" || kill -- "-$(cat "$pidfile")" 2>/dev/null || true
  rm -f "$pidfile"
done
docker stop hongxing-erp-api hongxing-mysql
cd "$WORK_ROOT/nexora-platform" && docker compose stop postgres