# 安装 NVM(Node 版本管理器)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 让 NVM 生效(当前终端会话)
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
# 检查 NVM 是否安装成功
nvm --version
# 安装 Node.js 20 LTS
nvm install 20
# 设置默认 Node 版本
nvm alias default 20
# 确认 Node & npm 版本
node --version
npm --version
npm install -g pnpm
pnpm --version
mysql -u root -p
CREATE DATABASE box_admin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'boxdbuser'@'localhost' IDENTIFIED BY 'ZXcv1234';
GRANT ALL PRIVILEGES ON box_admin.* TO 'boxdbuser'@'localhost';
FLUSH PRIVILEGES;
编辑 .env.mgnt.test 与 .env.mgnt:
MYSQL_URL="mysql://boxdbuser:ZXcv1234@localhost:3306/box_admin"
mongosh
use admin
db.createUser({
user: "admin",
pwd: "ZXcv1234",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "root", db: "admin" } ]
})
use box_admin
db.createUser({
user: "boxuser",
pwd: "ZXcv1234",
roles: [ { role: "readWrite", db: "box_admin" } ]
})
exit
编辑:
.env.mgnt.test.env.mgnt.env.app.test.env.app确保:
MONGO_URL="mongodb://boxuser:ZXcv1234@localhost:27017/box_admin?authSource=box_admin&replicaSet=rs0"
sudo mkdir -p /var/lib/mongo/keyfile
sudo openssl rand -base64 756 | sudo tee /var/lib/mongo/keyfile/mongodb-keyfile > /dev/null
sudo chown mongod:mongod /var/lib/mongo/keyfile/mongodb-keyfile
sudo chmod 400 /var/lib/mongo/keyfile/mongodb-keyfile
net:
port: 27017
bindIp: 127.0.0.1
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
security:
authorization: enabled
keyFile: /var/lib/mongo/keyfile/mongodb-keyfile
replication:
replSetName: 'rs0'
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
verbosity: 0
sudo systemctl restart mongod
sudo systemctl status mongod
mongosh -u admin -p
use admin
rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "localhost:27017" } ] })
rs.status()
exit
# 安装 Redis(Ubuntu 官方仓库)
sudo apt update
sudo apt install -y redis-server
# 确认 Redis 已启动
sudo systemctl status redis-server
编辑配置文件:
sudo vim /etc/redis/redis.conf
确保以下内容:
bind 127.0.0.1
protected-mode yes
port 6379
supervised systemd
保存并重启:
sudo systemctl restart redis-server
测试 Redis:
redis-cli ping
# 返回 PONG 表示成功
npm install -g pm2
pm2 --version
pm2 startup systemd
mkdir -p /usr/local/apps/box-project
cd /usr/local/apps/box-project
git clone http://47.238.201.61:3000/fct/box-nestjs-monorepo.git
cd box-nestjs-monorepo
# 使用 TEST 环境
cp .env.mgnt.test .env.mgnt
cp .env.app.test .env.app
pnpm install
npm rebuild bcrypt
pnpm prisma:generate
pnpm prisma:setup:test
pnpm build:mgnt
pm2 start dist/apps/box-mgnt-api/src/main.js --name box-mgnt
pm2 save
pm2 logs box-mgnt
pnpm build:app
pm2 start dist/apps/box-app-api/src/main.js --name box-app
pm2 save
pm2 logs box-app
⚠️ 端口需与 .env.mgnt / .env.app 对应。
sudo vim /etc/nginx/sites-available/box-mgnt.conf
server {
listen 80;
server_name mgnt.box-domain.com;
location / {
proxy_pass http://localhost:3300;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo ln -s /etc/nginx/sites-available/box-mgnt.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo vim /etc/nginx/sites-available/box-app.conf
server {
listen 80;
server_name app.box-domain.com;
location / {
proxy_pass http://localhost:3301;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo ln -s /etc/nginx/sites-available/box-app.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
git clone http://47.238.201.61:3000/fct/box-frontend.git
cd box-frontend
pnpm install
pnpm build
pm2 serve ./dist 9000 --name box-frontend --spa
pm2 save
pm2 logs box-frontend
sudo vim /etc/nginx/sites-available/box-frontend.conf
server {
listen 80;
server_name man.box-domain.com;
location / {
proxy_pass http://localhost:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo ln -s /etc/nginx/sites-available/box-frontend.conf /etc/nginx/sites-enabled/
sudo nginx-t
sudo systemctl reload nginx