qiangdanxitong/公网服务器部署指南.md

8.4 KiB
Raw Permalink Blame History

DesignHub 公网服务器部署指南

服务器信息:

  • IP: 45.192.99.48
  • 端口: 22
  • 用户名: root
  • 密码: 1blZllMIp7
  • 系统: CentOS Stream 9

快速部署脚本

已创建自动化部署脚本:deploy_to_public_server.sh

执行方式:

cd /Users/lanmu/Desktop/qiangdanxitong
bash deploy_to_public_server.sh

手动部署步骤(如果脚本失败)

第一步:连接服务器

ssh root@45.192.99.48
# 密码: 1blZllMIp7

第二步:安装系统依赖

# 安装基础工具
dnf install -y curl wget git unzip

# 安装 Java 17
dnf install -y java-17-openjdk java-17-openjdk-devel

# 安装 Maven
dnf install -y maven

# 安装 MySQL
dnf install -y mysql-server mysql
systemctl enable mysqld
systemctl start mysqld

# 设置 MySQL root 密码
mysqladmin -u root password "DesignHub@2025_Root"

# 安装 Redis
dnf install -y redis
systemctl enable redis
systemctl start redis

# Nginx 和 Node.js/pnpm 已安装,跳过

第三步:创建目录结构

mkdir -p /opt/designhub/{backend,frontend,logs,uploads}

第四步:配置 MySQL 数据库

mysql -uroot -pDesignHub@2025_Root << 'EOF'
CREATE DATABASE IF NOT EXISTS designhub CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'designhub'@'localhost' IDENTIFIED BY 'DesignHub@2025_DB';
GRANT ALL PRIVILEGES ON designhub.* TO 'designhub'@'localhost';
FLUSH PRIVILEGES;
EOF

第五步:上传代码

方式1:使用 rsync(推荐)

在本地执行:

# 安装 sshpass(Mac)
brew install hudochenkov/sshpass/sshpass

# 上传后端代码
sshpass -p '1blZllMIp7' rsync -avz \
    --exclude='target' --exclude='*.class' \
    -e "ssh -o StrictHostKeyChecking=no" \
    backend/ root@45.192.99.48:/opt/designhub/backend/

# 上传前端代码
sshpass -p '1blZllMIp7' rsync -avz \
    --exclude='node_modules' --exclude='dist' \
    -e "ssh -o StrictHostKeyChecking=no" \
    frontend/ root@45.192.99.48:/opt/designhub/frontend/

# 上传数据库SQL文件(如果有)
sshpass -p '1blZllMIp7' scp -o StrictHostKeyChecking=no \
    database/*.sql root@45.192.99.48:/tmp/

方式2:使用 scp

# 上传整个项目目录
sshpass -p '1blZllMIp7' scp -r \
    -o StrictHostKeyChecking=no \
    backend root@45.192.99.48:/opt/designhub/

sshpass -p '1blZllMIp7' scp -r \
    -o StrictHostKeyChecking=no \
    frontend root@45.192.99.48:/opt/designhub/

第六步:导入数据库(如果需要)

# 在服务器上执行
cd /tmp
mysql -uroot -pDesignHub@2025_Root designhub < create_s3_config.sql
# 导入其他SQL文件...

第七步:配置后端

cd /opt/designhub/backend

# 创建生产环境配置
cat > src/main/resources/application-prod.yml << 'EOF'
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/designhub?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: designhub
    password: DesignHub@2025_DB
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      minimum-idle: 10
      maximum-pool-size: 50
      connection-timeout: 30000
      idle-timeout: 600000
      max-lifetime: 1800000
  
  redis:
    host: localhost
    port: 6379
    password: DesignHub@2025_Redis
    database: 0
    timeout: 3000
    
jwt:
  secret: DesignHub_Prod_Secret_Key_2025_Very_Strong
  access-token-expiration: 7200000
  refresh-token-expiration: 604800000

server:
  port: 8080
  
logging:
  level:
    root: INFO
    com.designhub: INFO
  file:
    name: /opt/designhub/logs/application.log
    max-size: 10MB
    max-history: 30
    
file:
  upload:
    path: /opt/designhub/uploads
    max-size: 52428800
EOF

# 构建后端
mvn clean package -DskipTests

# 复制JAR文件
cp target/designhub-backend-1.0.0.jar /opt/designhub/designhub.jar

第八步:配置前端

cd /opt/designhub/frontend

# 创建生产环境配置
cat > .env.production << 'EOF'
VITE_APP_BASE_API=http://45.192.99.48/api
VITE_APP_TITLE=DesignHub
VITE_APP_VERSION=6.0
EOF

# 安装依赖
pnpm install

# 构建
pnpm build

第九步:配置系统服务

# 创建后端服务
cat > /etc/systemd/system/designhub-backend.service << 'EOF'
[Unit]
Description=DesignHub Backend Service
After=network.target mysqld.service redis.service

[Service]
Type=simple
User=root
WorkingDirectory=/opt/designhub
ExecStart=/usr/bin/java -jar -Xms512m -Xmx1024m /opt/designhub/designhub.jar --spring.profiles.active=prod
Restart=on-failure
RestartSec=10

StandardOutput=append:/opt/designhub/logs/backend.log
StandardError=append:/opt/designhub/logs/backend-error.log

[Install]
WantedBy=multi-user.target
EOF

# 创建 Nginx 配置
cat > /etc/nginx/conf.d/designhub.conf << 'EOF'
server {
    listen 80;
    server_name 45.192.99.48;
    
    root /opt/designhub/frontend/dist;
    index index.html;
    
    access_log /opt/designhub/logs/nginx-access.log;
    error_log /opt/designhub/logs/nginx-error.log;
    
    location / {
        try_files $uri $uri/ /index.html;
    }
    
    location /api/ {
        proxy_pass http://localhost:8080/api/;
        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;
        
        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
    }
    
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
    
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
    gzip_min_length 1000;
}
EOF

# 重新加载 systemd
systemctl daemon-reload

# 测试 Nginx 配置
nginx -t

# 重启 Nginx
systemctl restart nginx
systemctl enable nginx

第十步:启动后端服务

# 启动后端服务
systemctl start designhub-backend
systemctl enable designhub-backend

# 查看状态
systemctl status designhub-backend

# 查看日志
tail -f /opt/designhub/logs/application.log

验证部署

检查服务状态

# 检查后端服务
systemctl status designhub-backend

# 检查 MySQL
systemctl status mysqld

# 检查 Redis
systemctl status redis

# 检查 Nginx
systemctl status nginx

测试访问

查看日志

# 后端日志
tail -f /opt/designhub/logs/application.log

# 后端错误日志
tail -f /opt/designhub/logs/backend-error.log

# Nginx 访问日志
tail -f /opt/designhub/logs/nginx-access.log

# Nginx 错误日志
tail -f /opt/designhub/logs/nginx-error.log

常用命令

服务管理

# 重启后端
systemctl restart designhub-backend

# 停止后端
systemctl stop designhub-backend

# 查看后端日志
journalctl -u designhub-backend -f

# 重启 Nginx
systemctl restart nginx

数据库管理

# 连接数据库
mysql -u designhub -pDesignHub@2025_DB designhub

# 备份数据库
mysqldump -u designhub -pDesignHub@2025_DB designhub > backup.sql

# 恢复数据库
mysql -u designhub -pDesignHub@2025_DB designhub < backup.sql

故障排查

后端无法启动

  1. 检查 Java 版本:java -version
  2. 检查 JAR 文件:ls -lh /opt/designhub/designhub.jar
  3. 检查日志:tail -100 /opt/designhub/logs/backend-error.log
  4. 手动运行:cd /opt/designhub && java -jar designhub.jar --spring.profiles.active=prod

数据库连接失败

  1. 检查 MySQL 状态:systemctl status mysqld
  2. 测试连接:mysql -u designhub -pDesignHub@2025_DB designhub
  3. 检查配置文件:cat /opt/designhub/backend/src/main/resources/application-prod.yml

前端无法访问

  1. 检查 Nginx 状态:systemctl status nginx
  2. 检查 Nginx 配置:nginx -t
  3. 检查前端文件:ls -lh /opt/designhub/frontend/dist/
  4. 查看 Nginx 错误日志:tail -100 /opt/designhub/logs/nginx-error.log

注意事项

  1. 安全建议:

    • 修改 MySQL root 密码
    • 修改 Redis 密码
    • 修改 JWT secret
    • 配置防火墙规则
  2. 性能优化:

    • 根据服务器配置调整 JVM 参数(-Xms, -Xmx)
    • 配置 MySQL 连接池大小
    • 配置 Redis 连接池
  3. 备份策略:

    • 定期备份数据库
    • 备份配置文件
    • 备份上传的文件