主题
云服务器部署实战
把前两章的 Docker + Nginx 用到一台真实云服务器上,部署完整商城。
一、购买与初始化服务器
以阿里云/腾讯云为例,选最便宜的轻量应用服务器即可:
| 项 | 建议 |
|---|---|
| 地域 | 离用户近(国内选华东/华南) |
| 镜像 | Ubuntu 22.04 / CentOS Stream 9 |
| 配置 | 2C4G 起步(带 MySQL + 后端 + 前端够用) |
| 安全组 | 放行 22(SSH)、80、443 |
购买后顺手做:改 root 密码为强密码、创建新用户、配置密钥登录(安全)。
bash
# 登录服务器(macOS/Linux 终端、Windows 用 SSH 工具)
ssh root@你的服务器IP二、装 Docker(一次性)
bash
# 官方脚本安装(国内可配镜像加速)
curl -fsSL https://get.docker.com | bash
sudo usermod -aG docker $USER # 免 sudo 用 docker
newgrp docker
docker version # 验证Docker 国内拉镜像慢:给 Docker 配置 registry-mirrors(百度"Docker 镜像加速 阿里云/腾讯云")。
三、准备数据库与配置
方案 A:MySQL 也用 Docker(推荐入门)
bash
# 运行 MySQL 容器,挂载数据卷 + 自动执行建表 SQL
docker run -d --name mall-mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=你的强密码 \
-e MYSQL_DATABASE=mall \
-e TZ=Asia/Shanghai \
-v /opt/mall/mysql-data:/var/lib/mysql \
-v /opt/mall/sql:/docker-entrypoint-initdb.d \
mysql:8.0把第 7 部分的建表 SQL 放到 /opt/mall/sql/,容器首次启动自动执行。
方案 B:用云数据库
阿里云 RDS / 腾讯云 CDB 的 MySQL,买最小规格。好处:免运维、自动备份。连接串换成云数据库内网地址。
四、部署后端
把代码传到服务器(git clone 或 scp),然后构建:
bash
cd /opt/mall && git clone 你的仓库地址 .
# 或在本地打包 jar 后 scp 上传
scp server/target/*.jar root@IP:/opt/mall/server-app.jar用 Docker 运行后端(生产 profile):
bash
docker build -t mall-server ./server
docker run -d --name mall-server \
-p 8080:8080 \
-e SPRING_PROFILES_ACTIVE=prod \
-e SPRING_DATASOURCE_URL="jdbc:mysql://127.0.0.1:3306/mall?serverTimezone=Asia/Shanghai" \
-e SPRING_DATASOURCE_USERNAME=root \
-e SPRING_DATASOURCE_PASSWORD=你的密码 \
mall-server数据库连接
127.0.0.1:3306因为 MySQL 容器映射到了宿主机端口。
五、部署前端
本地构建前端产物上传,或服务器上直接构建:
bash
# 方式一:本地构建后上传(推荐,服务器压力小)
cd web-vue && npm install && npm run build
scp -r dist/* root@IP:/var/www/mall-web/
# 方式二:服务器构建(需要 Node)
cd /opt/mall/web-vue && npm install && npm run build
sudo cp -r dist/* /var/www/mall-web/六、配置宿主机 Nginx
写 /etc/nginx/conf.d/mall.conf(用第 2 章的配置),核心是 /api/ 代理到 127.0.0.1:8080、静态文件指向 /var/www/mall-web,然后:
bash
sudo apt install nginx -y
sudo nginx -t && sudo systemctl enable nginx && sudo systemctl restart nginx七、HTTPS + 域名
bash
sudo certbot --nginx -d mall.example.com域名解析:在域名服务商(如阿里云万网)添加 A 记录指向服务器 IP。
八、防火墙与安全组
bash
# Ubuntu UFW(或云控制台安全组)
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable只开 22/80/443。3306 不要对公网开(数据库只允许本机/内网访问)。
九、上线检查清单
curl http://服务器IP → 前端页面 HTML
curl http://服务器IP/api/product/list → JSON 数据
curl -I https://域名 → 200 + 证书正常
浏览器走一遍:注册→登录→加购→下单→看订单上线后必做(安全)
- 修改 MySQL root 密码为强密码,绝不使用默认密码。
- JWT 密钥、数据库密码通过环境变量注入,不写进 jar。
- 后端日志只记必要信息,不打印密码/token。
- 定期
docker system prune清理无用镜像。
十、上线了!然后呢
项目上线只是开始。接下来:
- 接监控(第 10 部分):日志、错误、慢接口。
- 接 CI/CD(下一章):以后
git push自动发布。 - 做备份:MySQL 定时
mysqldump到对象存储。