feat(deployment): 优化宝塔 PM2 standalone 部署流程并添加一键部署脚本
Some checks failed
lotteryadmin CI / build (push) Has been cancelled
Some checks failed
lotteryadmin CI / build (push) Has been cancelled
This commit is contained in:
@@ -2,8 +2,8 @@
|
|||||||
* 管理端(lotteryadmin)宝塔 PM2 配置
|
* 管理端(lotteryadmin)宝塔 PM2 配置
|
||||||
*
|
*
|
||||||
* 部署步骤(在服务器项目目录执行):
|
* 部署步骤(在服务器项目目录执行):
|
||||||
* 1. 复制 .env.example 为 .env,按线上域名填写
|
* 1. 本地 npm run build,打包 .next/standalone + .next/static + public 上传服务器
|
||||||
* 2. npm ci && npm run build
|
* 2. 服务器:复制 .env.example 为 .env,按线上域名填写
|
||||||
* 3. 修改下方 cwd 为服务器上的实际路径(默认即本文件所在目录)
|
* 3. 修改下方 cwd 为服务器上的实际路径(默认即本文件所在目录)
|
||||||
* 4. pm2 start ecosystem.config.cjs
|
* 4. pm2 start ecosystem.config.cjs
|
||||||
* 5. pm2 save && pm2 startup
|
* 5. pm2 save && pm2 startup
|
||||||
@@ -22,8 +22,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
name: "lotteryadmin",
|
name: "lotteryadmin",
|
||||||
cwd: APP_CWD,
|
cwd: APP_CWD,
|
||||||
script: "node_modules/next/dist/bin/next",
|
script: ".next/standalone/server.js",
|
||||||
args: "start -p 3801 -H 127.0.0.1",
|
|
||||||
interpreter: "node",
|
interpreter: "node",
|
||||||
exec_mode: "fork",
|
exec_mode: "fork",
|
||||||
instances: 1,
|
instances: 1,
|
||||||
@@ -37,6 +36,7 @@ module.exports = {
|
|||||||
|
|
||||||
env: {
|
env: {
|
||||||
NODE_ENV: "production",
|
NODE_ENV: "production",
|
||||||
|
HOSTNAME: "0.0.0.0",
|
||||||
PORT: "3801",
|
PORT: "3801",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,12 @@ import { parseAllowedDevOrigins } from "./src/lib/next-dev-origins";
|
|||||||
const allowedDevOrigins = parseAllowedDevOrigins(process.env.ALLOWED_DEV_ORIGINS);
|
const allowedDevOrigins = parseAllowedDevOrigins(process.env.ALLOWED_DEV_ORIGINS);
|
||||||
|
|
||||||
const nextConfig: NextConfig = {
|
const nextConfig: NextConfig = {
|
||||||
/* config options here */
|
output: "standalone",
|
||||||
...(allowedDevOrigins.length > 0 ? { allowedDevOrigins } : {}),
|
...(allowedDevOrigins.length > 0 ? { allowedDevOrigins } : {}),
|
||||||
reactCompiler: true,
|
reactCompiler: true,
|
||||||
|
images: {
|
||||||
|
unoptimized: true,
|
||||||
|
},
|
||||||
async redirects() {
|
async redirects() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "NEXT_DISABLE_MEM_OVERRIDE=1 NODE_OPTIONS='--max-old-space-size=3072' next dev --port 3801",
|
"dev": "NEXT_DISABLE_MEM_OVERRIDE=1 NODE_OPTIONS='--max-old-space-size=3072' next dev --port 3801",
|
||||||
"build": "next build",
|
"build": "next build && cp -r .next/static .next/standalone/.next/static && cp -r public .next/standalone/public && echo '✅ standalone 静态资源已复制完毕'",
|
||||||
"start": "next start --port 3801",
|
"start": "next start --port 3801",
|
||||||
"lint": "eslint"
|
"lint": "eslint"
|
||||||
},
|
},
|
||||||
|
|||||||
21
scripts/deploy.sh
Normal file
21
scripts/deploy.sh
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# lotteryadmin 一键部署脚本
|
||||||
|
# 用法: bash scripts/deploy.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
SERVER="root@47.242.205.221"
|
||||||
|
REMOTE_DIR="/www/wwwroot/lotteryAdmin"
|
||||||
|
|
||||||
|
echo "🔨 构建中..."
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
echo "📦 上传到服务器..."
|
||||||
|
ssh ${SERVER} "mkdir -p ${REMOTE_DIR}/.next/standalone ${REMOTE_DIR}/logs"
|
||||||
|
rsync -avz --delete .next/standalone/ ${SERVER}:${REMOTE_DIR}/.next/standalone/
|
||||||
|
rsync -avz ecosystem.config.cjs ${SERVER}:${REMOTE_DIR}/ecosystem.config.cjs
|
||||||
|
|
||||||
|
echo "🚀 服务器重启 PM2..."
|
||||||
|
ssh ${SERVER} "source /etc/profile && source ~/.bashrc && mkdir -p ${REMOTE_DIR}/logs && cd ${REMOTE_DIR} && (pm2 restart lotteryadmin 2>/dev/null || pm2 start ecosystem.config.cjs) && pm2 save"
|
||||||
|
|
||||||
|
echo "✅ lotteryAdmin 部署完成!"
|
||||||
Reference in New Issue
Block a user