一、部署前准备
1. 服务器要求
- 操作系统:推荐CentOS 7+/Ubuntu 20.04+(需支持Docker或K8s)。
- 硬件配置:
- 基础版:2核4G内存(适合中小规模生鲜商户)。
- 高并发版:4核8G+(支持每日万级订单处理)。
- 网络要求:公网IP或内网穿透,确保微信/支付宝支付接口可访问。
2. 依赖环境
- 数据库:MySQL 5.7+/PostgreSQL 12+(需配置主从备份)。
- 缓存:Redis 5.0+(用于会话管理和商品库存缓存)。
- 消息队列:RabbitMQ/Kafka(可选,用于订单异步处理)。
- 文件存储:OSS/MinIO(图片、视频等静态资源存储)。
3. 源码获取
- 确认获取的源码包含完整文档(如`README.md`、`deploy.md`)。
- 检查依赖项清单(`requirements.txt`或`pom.xml`),确保无缺失。
二、部署步骤详解
1. 基础环境搭建
- Docker部署(推荐)
```bash
安装Docker
curl -fsSL https://get.docker.com | sh
systemctl start docker
安装Docker Compose
curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
```
- 手动部署
- 安装Java 11+/Python 3.8+、Nginx、MySQL等,按文档配置环境变量。
2. 数据库初始化
- 执行SQL脚本创建表结构(通常位于`/sql/init.sql`)。
- 修改配置文件中的数据库连接:
```yaml
application.yml示例
spring:
datasource:
url: jdbc:mysql://localhost:3306/fresh_db?useSSL=false
username: root
password: your_password
```
3. 源码编译与打包
- Java项目(如Spring Boot):
```bash
mvn clean package -DskipTests
```
- Python项目(如Django/Flask):
```bash
pip install -r requirements.txt
python manage.py collectstatic
```
4. 启动服务
- Docker方式:
```bash
docker-compose -f docker-compose.yml up -d
```
- 手动启动:
```bash
java -jar target/fresh-app.jar Java
gunicorn app:app -b 0.0.0.0:8000 Python
```
三、常见问题及解决方案
1. 数据库连接失败
- 现象:`Communication link failure`或`Access denied`。
- 原因:
- MySQL未开放远程访问权限。
- 防火墙未放行3306端口。
- 解决:
```sql
-- 授权远程访问
GRANT ALL PRIVILEGES ON fresh_db.* TO username@% IDENTIFIED BY password;
FLUSH PRIVILEGES;
```
- 检查`/etc/mysql/mysql.conf.d/mysqld.cnf`中的`bind-address`是否为`0.0.0.0`。
2. 静态资源404
- 现象:CSS/JS文件加载失败。
- 原因:Nginx未正确配置静态资源路径。
- 解决:
```nginx
location /static/ {
alias /path/to/static/; 确保路径与项目一致
expires 30d;
}
```
3. 支付接口调用失败
- 现象:微信/支付宝支付返回`INVALID_SIGN`。
- 原因:
- 商户号/密钥配置错误。
- 服务器时间不同步(支付接口对时间敏感)。
- 解决:
- 检查`application.yml`中的支付配置:
```yaml
wechat:
app-id: your_appid
mch-id: your_mch_id
api-key: your_api_key
```
- 同步服务器时间:
```bash
ntpdate pool.ntp.org
```
4. 高并发下订单超时
- 现象:下单接口响应时间>5秒。
- 优化建议:
- 启用Redis缓存商品库存。
- 使用RabbitMQ异步处理订单(如发送短信、扣减库存)。
- 数据库添加索引:
```sql
CREATE INDEX idx_order_user ON orders(user_id);
```
四、部署后验证
1. 功能测试:
- 模拟用户下单流程(选商品→加入购物车→支付→查看订单)。
- 测试管理员后台(商品管理、订单处理、数据统计)。
2. 性能监控:
- 使用`htop`或`Prometheus+Grafana`监控CPU/内存。
- 检查Nginx日志:
```bash
tail -f /var/log/nginx/access.log
```
3. 备份策略:
- 每日自动备份数据库(`mysqldump` + 压缩)。
- 关键数据(如用户上传的图片)存储至OSS并配置CDN。
五、进阶建议
- 灰度发布:先部署到测试环境,验证无误后再上线。
- 自动化部署:使用Jenkins/GitLab CI实现一键部署。
- 安全加固:
- 关闭不必要的端口(如22仅允许内网访问)。
- 定期更新依赖库(如`npm audit fix`或`mvn versions:display-dependency-updates`)。
如遇特定错误(如`502 Bad Gateway`、`ClassNotFound`),可提供具体日志片段进一步分析。部署过程中保持文档与源码版本一致,避免因版本冲突导致问题。