2025年9月

!/bin/bash

set -e

PROJECT_DIR="/home/ykdbc/smarttest"
MYSQL_USER="ykdbc"
MYSQL_PASS="Xy@528848"
MYSQL_DB="smarttestejyy"
DB_SQL="${PROJECT_DIR}/db-sql/db.sql"

echo "=== 更新系统并安装依赖 ==="
sudo apt update -y
sudo apt upgrade -y
sudo apt install -y curl git build-essential nginx mysql-server redis-server

echo "=== 安装 Node.js v16.15.0 ==="
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install -g n
sudo n 16.15.0
hash -r
node -v
npm -v

echo "=== 配置 MySQL 用户和数据库 ==="
sudo systemctl enable mysql
sudo systemctl start mysql
sudo mysql -e "CREATE DATABASE IF NOT EXISTS ${MYSQL_DB} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mysql -e "CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'localhost' IDENTIFIED BY '${MYSQL_PASS}';"
sudo mysql -e "GRANT ALL PRIVILEGES ON ${MYSQL_DB}.* TO '${MYSQL_USER}'@'localhost';"
sudo mysql -e "FLUSH PRIVILEGES;"

if [ -f "$DB_SQL" ]; then
echo "=== 导入初始化 SQL 数据 ==="
sudo mysql -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} < "$DB_SQL"
else
echo "⚠️ 未找到 $DB_SQL,跳过 SQL 导入"
fi

echo "=== 安装并编译 api-server ==="
cd ${PROJECT_DIR}/api-server
npm install
npm run dist
echo "=== 启动 api-server 进程守护 ==="
sudo npm install -g pm2
cd ${PROJECT_DIR}/api-server/dist
pm2 start ejyy_server.js --name ejyy-api-server
pm2 save
pm2 startup systemd -u $USER --hp $HOME

echo "=== 配置 Nginx 目录结构 ==="
sudo mkdir -p /wwwdata/api_dir
sudo mkdir -p /wwwdata/admin_web
sudo mkdir -p /wwwdata/console_web

echo "=== 编译并部署 admin-web ==="
cd ${PROJECT_DIR}/admin-web
npm install
npm run dist
sudo cp -r dist/* /wwwdata/admin_web/

echo "=== 编译并部署 console-web ==="
cd ${PROJECT_DIR}/console-web
npm install
npm run build
sudo cp -r dist/* /wwwdata/console_web/

echo "=== 配置 Nginx ==="
NGINX_CONF="/etc/nginx/sites-available/smarttest"
sudo tee $NGINX_CONF > /dev/null <<EOF
server {

listen 80;
server_name _;

location /api/ {
    proxy_pass http://127.0.0.1:8888/;   # 修改为 api-server 的实际端口
    proxy_http_version 1.1;
    proxy_set_header Upgrade \$http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host \$host;
    proxy_cache_bypass \$http_upgrade;
}

location /admin/ {
    root /wwwdata/admin_web;
    index index.html;
    try_files \$uri /index.html;
}

location /console/ {
    root /wwwdata/console_web;
    index index.html;
    try_files \$uri /index.html;
}

}
EOF

sudo ln -sf $NGINX_CONF /etc/nginx/sites-enabled/smarttest
sudo nginx -t
sudo systemctl restart nginx

echo "=== 部署完成! ==="
echo "管理后台: http://<服务器IP>/admin"
echo "物业中台: http://<服务器IP>/console"
echo "API 地址: http://<服务器IP>/api"

ubantu 24.4.2

1️⃣ 更新系统

sudo apt update && sudo apt upgrade -y

2️⃣Node 使用 16.15.0 版本(用此代码一键安装)

# 一键安装 Node.js 16.15.0
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.6/install.sh | bash && \
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" && \
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
nvm install 16.15.0 && \
nvm alias default 16.15.0 && \
echo "Node $(node -v) 和 npm $(npm -v) 安装完成并设置为默认版本"

✅ 说明:

1.这个命令会先安装 nvm,再用 nvm 安装 Node.js 16.15.0。

2.安装完成后,node -v 会显示 v16.15.0,npm -v 会显示对应 npm 版本。

3.以后可以用 nvm use 切换 Node 版本。

3️⃣

安装依赖


    cd /home/ykdbc/smarttest/api-server

    npm install

编译代码


    npm run dist

4️⃣
> pm2 推荐作为进程守护,相关文档请查看官方文档

##### 安装 pm2
npm install -g pm2

##### 启动守护
cd /home/ykdbc/smarttest/api-server/dist

pm2 start ejyy_server.js --name ejyy-api-server

5️⃣

cd /home/ykdbc/smarttest/admin-web

npm install
npm config set strict-ssl false  #防止网站证书过期拉取失败
npm config set strict-ssl true   #继续检查证书
npm run dist


6️⃣配置docker代理
sudo mkdir -p /etc/systemd/system/docker.service.d #建文件夹
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf# 建文件

文件内容

[Service]
Environment="HTTP_PROXY=socks5://ykdbc:Xy@[email protected]:11185"
Environment="HTTPS_PROXY=socks5://ykdbc:Xy@[email protected]:11185"
Environment="ALL_PROXY=socks5://ykdbc:Xy@[email protected]:11185"

7️⃣提升权限

chmod +x deploy.sh

8️⃣运行脚本

sudo ./deploy.sh

查看Mp2 进程
pm2 list

方法 1:使用 sudo 提权

sudo mkdir -p /wwwdata/api_dir
sudo mkdir -p /wwwdata/admin_web
sudo mkdir -p /wwwdata/console_web

如果需要,也可以把当前用户 ykdbc 设为该目录的拥有者:

sudo chown -R ykdbc:ykdbc /wwwdata/api_dir
sudo chown -R ykdbc:ykdbc /wwwdata/admin_web
sudo chown -R ykdbc:ykdbc /wwwdata/console_web

这样以后就不用每次都用 sudo。
cd /home/ykdbc/smarttest/api-server
cp -r dist/* /wwwdata/api_dir
cd /home/ykdbc/smarttest/admin_web
cp -r dist/* /wwwdata/admin_web
cd /home/ykdbc/smarttest/console-web
cp -r dist/* /wwwdata/console_web

编辑nginx
sudo chown -R ykdbc:ykdbc /etc/nginx/sites-available/api-server
sudo chown -R ykdbc:ykdbc /etc/nginx/sites-available/admin_web
sudo chown -R ykdbc:ykdbc /etc/nginx/sites-available/console-web

sudo ln -s /etc/nginx/sites-available/api-server /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/admin_web /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/console-web /etc/nginx/sites-enabled/

创建软连接
sudo ln -s /etc/nginx/sites-available/api-server /etc/nginx/sites-enabled/api-server

删除软连接
sudo rm /etc/nginx/sites-enabled/api-server