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

408 lines
8.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. **备份策略**:
- 定期备份数据库
- 备份配置文件
- 备份上传的文件