# 部署脚本示例 ## Linux服务器部署步骤 ### 1. 安装必要软件 ```bash # 更新系统 sudo apt update && sudo apt upgrade -y # 安装Nginx sudo apt install nginx -y # 安装.NET 8 Runtime wget https://dot.net/v1/dotnet-install.sh chmod +x dotnet-install.sh ./dotnet-install.sh --channel 8.0 --runtime aspnetcore # 安装Node.js curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install nodejs -y # 安装MySQL sudo apt install mysql-server -y ``` ### 2. 创建数据库 ```bash sudo mysql -u root -p CREATE DATABASE fatemaster CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'fatemaster'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON fatemaster.* TO 'fatemaster'@'localhost'; FLUSH PRIVILEGES; EXIT; ``` ### 3. 部署后端 ```bash # 构建项目 cd backend/FateMaster.API dotnet publish -c Release -o /var/www/fatemaster-api # 创建systemd服务 sudo nano /etc/systemd/system/fatemaster-api.service ``` 服务配置内容: ```ini [Unit] Description=FateMaster API After=network.target [Service] WorkingDirectory=/var/www/fatemaster-api ExecStart=/root/.dotnet/dotnet /var/www/fatemaster-api/FateMaster.API.dll Restart=always RestartSec=10 KillSignal=SIGINT SyslogIdentifier=fatemaster-api User=www-data Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install] WantedBy=multi-user.target ``` 启动服务: ```bash sudo systemctl enable fatemaster-api sudo systemctl start fatemaster-api sudo systemctl status fatemaster-api ``` ### 4. 部署前端 ```bash # 构建用户端 cd frontend/fatemaster-web npm install npm run build # 部署到Nginx sudo cp -r dist/* /var/www/fatemaster-web/ # 构建管理后台 cd ../fatemaster-admin npm install npm run build # 部署到Nginx sudo cp -r dist/* /var/www/fatemaster-admin/ ``` ### 5. 配置Nginx ```bash sudo nano /etc/nginx/sites-available/fatemaster ``` 配置内容: ```nginx # 用户端 server { listen 80; server_name yourdomain.com; root /var/www/fatemaster-web; index index.html; location / { try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:5000; 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; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # 管理后台 server { listen 80; server_name admin.yourdomain.com; root /var/www/fatemaster-admin; index index.html; location / { try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:5000; 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; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 启用配置: ```bash sudo ln -s /etc/nginx/sites-available/fatemaster /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx ``` ### 6. 配置SSL证书(使用Let's Encrypt) ```bash sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d yourdomain.com -d admin.yourdomain.com ``` ### 7. 配置防火墙 ```bash sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 22/tcp sudo ufw enable ``` ### 8. 设置定时备份 ```bash sudo nano /usr/local/bin/backup-fatemaster.sh ``` 备份脚本: ```bash #!/bin/bash BACKUP_DIR="/backups/fatemaster" DATE=$(date +%Y%m%d_%H%M%S) # 创建备份目录 mkdir -p $BACKUP_DIR # 备份数据库 mysqldump -u fatemaster -p'your_password' fatemaster > $BACKUP_DIR/db_$DATE.sql # 备份上传的文件(如果有) # tar -czf $BACKUP_DIR/files_$DATE.tar.gz /var/www/uploads # 删除7天前的备份 find $BACKUP_DIR -name "*.sql" -mtime +7 -delete echo "Backup completed: $DATE" ``` 设置定时任务: ```bash sudo chmod +x /usr/local/bin/backup-fatemaster.sh sudo crontab -e # 添加每天凌晨2点执行备份 0 2 * * * /usr/local/bin/backup-fatemaster.sh >> /var/log/fatemaster-backup.log 2>&1 ``` ## 更新部署 ### 更新后端 ```bash cd /path/to/source/backend/FateMaster.API git pull dotnet publish -c Release -o /var/www/fatemaster-api sudo systemctl restart fatemaster-api ``` ### 更新前端 ```bash # 用户端 cd /path/to/source/frontend/fatemaster-web git pull npm install npm run build sudo cp -r dist/* /var/www/fatemaster-web/ # 管理后台 cd ../fatemaster-admin git pull npm install npm run build sudo cp -r dist/* /var/www/fatemaster-admin/ ``` ## 监控和维护 ### 查看服务日志 ```bash # 查看API日志 sudo journalctl -u fatemaster-api -f # 查看Nginx日志 sudo tail -f /var/log/nginx/access.log sudo tail -f /var/log/nginx/error.log ``` ### 性能监控 ```bash # 查看系统资源 htop # 查看数据库性能 sudo mysqladmin -u root -p processlist sudo mysqladmin -u root -p status ``` ## 故障排查 ### API无法启动 ```bash # 检查服务状态 sudo systemctl status fatemaster-api # 检查端口占用 sudo netstat -tlnp | grep 5000 # 检查数据库连接 mysql -u fatemaster -p -h localhost fatemaster ``` ### 前端访问404 ```bash # 检查Nginx配置 sudo nginx -t # 检查文件权限 ls -la /var/www/fatemaster-web/ ```