408 lines
8.4 KiB
Markdown
408 lines
8.4 KiB
Markdown
# DesignHub 公网服务器部署指南
|
||
|
||
**服务器信息:**
|
||
- IP: 45.192.99.48
|
||
- 端口: 22
|
||
- 用户名: root
|
||
- 密码: 1blZllMIp7
|
||
- 系统: CentOS Stream 9
|
||
|
||
---
|
||
|
||
## 快速部署脚本
|
||
|
||
已创建自动化部署脚本:`deploy_to_public_server.sh`
|
||
|
||
执行方式:
|
||
```bash
|
||
cd /Users/lanmu/Desktop/qiangdanxitong
|
||
bash deploy_to_public_server.sh
|
||
```
|
||
|
||
---
|
||
|
||
## 手动部署步骤(如果脚本失败)
|
||
|
||
### 第一步:连接服务器
|
||
|
||
```bash
|
||
ssh root@45.192.99.48
|
||
# 密码: 1blZllMIp7
|
||
```
|
||
|
||
### 第二步:安装系统依赖
|
||
|
||
```bash
|
||
# 安装基础工具
|
||
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 已安装,跳过
|
||
```
|
||
|
||
### 第三步:创建目录结构
|
||
|
||
```bash
|
||
mkdir -p /opt/designhub/{backend,frontend,logs,uploads}
|
||
```
|
||
|
||
### 第四步:配置 MySQL 数据库
|
||
|
||
```bash
|
||
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(推荐)**
|
||
|
||
在本地执行:
|
||
```bash
|
||
# 安装 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**
|
||
|
||
```bash
|
||
# 上传整个项目目录
|
||
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/
|
||
```
|
||
|
||
### 第六步:导入数据库(如果需要)
|
||
|
||
```bash
|
||
# 在服务器上执行
|
||
cd /tmp
|
||
mysql -uroot -pDesignHub@2025_Root designhub < create_s3_config.sql
|
||
# 导入其他SQL文件...
|
||
```
|
||
|
||
### 第七步:配置后端
|
||
|
||
```bash
|
||
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
|
||
```
|
||
|
||
### 第八步:配置前端
|
||
|
||
```bash
|
||
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
|
||
```
|
||
|
||
### 第九步:配置系统服务
|
||
|
||
```bash
|
||
# 创建后端服务
|
||
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
|
||
```
|
||
|
||
### 第十步:启动后端服务
|
||
|
||
```bash
|
||
# 启动后端服务
|
||
systemctl start designhub-backend
|
||
systemctl enable designhub-backend
|
||
|
||
# 查看状态
|
||
systemctl status designhub-backend
|
||
|
||
# 查看日志
|
||
tail -f /opt/designhub/logs/application.log
|
||
```
|
||
|
||
---
|
||
|
||
## 验证部署
|
||
|
||
### 检查服务状态
|
||
|
||
```bash
|
||
# 检查后端服务
|
||
systemctl status designhub-backend
|
||
|
||
# 检查 MySQL
|
||
systemctl status mysqld
|
||
|
||
# 检查 Redis
|
||
systemctl status redis
|
||
|
||
# 检查 Nginx
|
||
systemctl status nginx
|
||
```
|
||
|
||
### 测试访问
|
||
|
||
- 前端地址: http://45.192.99.48
|
||
- API地址: http://45.192.99.48/api
|
||
- API文档: http://45.192.99.48/api/doc.html (如果启用)
|
||
|
||
### 查看日志
|
||
|
||
```bash
|
||
# 后端日志
|
||
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
|
||
```
|
||
|
||
---
|
||
|
||
## 常用命令
|
||
|
||
### 服务管理
|
||
|
||
```bash
|
||
# 重启后端
|
||
systemctl restart designhub-backend
|
||
|
||
# 停止后端
|
||
systemctl stop designhub-backend
|
||
|
||
# 查看后端日志
|
||
journalctl -u designhub-backend -f
|
||
|
||
# 重启 Nginx
|
||
systemctl restart nginx
|
||
```
|
||
|
||
### 数据库管理
|
||
|
||
```bash
|
||
# 连接数据库
|
||
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. **备份策略**:
|
||
- 定期备份数据库
|
||
- 备份配置文件
|
||
- 备份上传的文件
|